pax_global_header00006660000000000000000000000064121772121310014507gustar00rootroot0000000000000052 comment=f1bde65d4fd65f561ac91683008048ef7ee6b6d5 dvbstreamer-2.1.0/000077500000000000000000000000001217721213100140255ustar00rootroot00000000000000dvbstreamer-2.1.0/AUTHORS000066400000000000000000000000611217721213100150720ustar00rootroot00000000000000Adam Charrett dvbstreamer-2.1.0/COPYING000066400000000000000000000436321217721213100150700ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, 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 or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's 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 give any other recipients of the Program a copy of this License along with the Program. 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 Program or any portion of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, 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 Program, 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 Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) 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; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, 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 executable. However, as a special exception, the source code 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. If distribution of executable or 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 counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program 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. 5. 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 Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program 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 to this License. 7. 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 Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program 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 Program. 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. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program 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. 9. The Free Software Foundation may publish revised and/or new versions of the 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 Program 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 Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, 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 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "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 PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. 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 PROGRAM 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 PROGRAM (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 PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 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 Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. 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 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. dvbstreamer-2.1.0/ChangeLog000066400000000000000000000237421217721213100156070ustar00rootroot000000000000002.0.0rc2 ------ * Fix bug in service filters where if no previous primary service/multiplex had been selected dvbstreamer would segfault. Reported by Ivan Asenov * Fix bug when scanning same multiplex twice cause dvbstreamer to segfault. Reported by Ivan Asenov * Fix bug when attempting to exit dvbstreamer, dvbstreamer hangs. This was caused by a change in behaviour of libev. Reported by Ivan Asenov 2.0.0rc1 ------- * All commands now must have channels names enclosed in quotes if the name includes spaces. * New scanning feature - Can now perform a full spectrum scan (ATSC, DVB-C/T) - Can now perform a network scan using information from dvb-utils (All) * New properties API and commands allows easier access to internal properties. (vars are now deprecated.) * Deprecated the Enumerator APIs for DB access and replaced with APIs that return a list, this is to prevent the database being locked by a running query that hasn't been finalised. * Ability to release (and reacquire) the frontend to save energy. * Fix [2377653] ATSC EPG xmltv output shows programs on wrong channel * Added [2629610] epgtoxmltv patch to output seriesid and programid in UK EPG * Added support for extended event descriptors in EITs. (Test stream supplied by Tom Albers) * Complete rewrite of the packet/section filtering code improving readability and performance. * Remove libltdl from the packaged source. (see bug 2951692) * Added filea:// mrl handler to append to data to existing files. * Added pipe:// mrl handler to send data to named fifos * Added DVB-S2 support * Added DSMCC client (beta) to download files broadcast in a DSMCC object carousel. * Started to make output from commands YAML compliant to ease work on writing bindings. 1.0 --- * New Plugin - Traffic Monitor/Capture (thanks to Steve VanDeBogart) * New Event framework to allow monitoring of events like signal lock, service addition/removal by an external client. * Wildcard query added for lsservices, use ls -q to list all services that match For example ls -q BBC% would list all BBC channels under freeview. * Bug Fixed: 1884368 festatus command doesn't work on DVB-S (patch supplied) 1870354 The list add functions aren't completely implemented. 1870351 rmsf will leak file descriptors when using file:// 1870353 rmsf seems to have a double free bug 1887166 Additional TSPacket_t header macros 1880738 Allow comments in script files 1885966 Foreground Daemon mode 1875269 Segmentation Fault during DVB-S streaming 1856827 'dumpxmltv' from remote interface causes DVBStreamer to exit 1889789 Traffic plugin does work (printf) while blocking TS thread 1948144 Segfault on exit when in foreground daemon mode 1952127 Segfault on invalid adapter number 1961030 SAP session id not unique 0.9 --- * SAP support for multicast UDP and RTP streams. * ATSC EPG now fully working, includes event descriptions. * Multiple dumpxmltv bugs fixed. * 3 NEW plugins - QueryEPG - Allows querying of EPG database for more details and on a finer grain than dumpxmltv. - SICapture - This plugin is intend to aid debugging of streams that I don't have access to by allowing a user to capture just the PSI and DVB SI or ATSCPSIP information for attaching to a bug report etc. - ManualFilters - The 'manual output' feature has been removed from the core and renamed to avoid confusion and make DVBStreamer more modular. * Services can now be selected/queried by fully qualified id (network id.ts id.service id) * New commands to simplify setting and getting the primary mrl. * Command output has been cleaned up to make it more consistent. * setsfavsonly command now includes the CAT table if required for a service. * Internally - There is a new Deferred Procedure module and a thread safe message queue. - The included dvbpsi library has been updated to 0.16. * Bugs fixed: 1842675 'now' command, EPG info incorrectly displaying start time. 1823706 sdtprocessor.c segfault [patch supplied] 1819913 date command has no space/return before 'Last received' 1841275 Correct length in UTF8 encoding 1841279 Xmlify service name in xmltv epg 0.8 --- * DVB-S fully supported, thanks to Alex Luccisano. * ATSC support, including preliminary EPG. * DVB EPG support, now captures schedule data and can be exported to xmltv format. * RTP support and Time To Live setting for UDP and RTP packets useful when sending to a multicast address. * All text output by dvbstreamer is now in UTF-8, this includes channel names and EPG data. * Lots of clean up in the code structure. * Fixed major virtual memory bug. * Turned on -Wall -Werror 0.7 --- * NEW Simpler remote interface means that it is possible to execute all commands remotely, no need to use the dvbctrl command 'quote' any more. * NEW plugins: - Date/Time plugin - Simple plugin to print out the UTC date and time - Now/Next plugin - Plugin to display the present show EPG info and what comes next. - PES Extract plugin- Example plugin to show/test how to use the PESProcessor features. (You can now extract a single pid to a PES ie a DVB radio channel to an MP3 file.) - LCN Query plugin - Plugin to find a service that is allocated to a logical channel number, can also display all logical channel numbers and their service names. * Separated out the setup component from dvbstreamer to a new app to prevent confusing users into always providing the channels.conf file. * Reworked internal command processing means all commands can tell if the user has entered a valid username/password * Structure member rename to make sure all structures follow the camel case convention. * New object based memory allocation system to help debugging and prevent memory leaks. * Remove need for libdvbpsi, now included (heavily patched) 0.6 --- * New scan command, to rescan a specific multiplex for changes. * New setsfavsonly command, to enable streaming of only the audio/video/subtitle pids. Also rewrites the services PMT to only include these. * Database changes - Descriptors now stored for PIDs in a service. - PCR pid moved into Services table from PIDs table. * Bugs fixed. - Memory leak in cache.c - service deletion bug in cache.c - other stability fixes I've forgotten about :-) * File output changed to use fopen64 for large file support (files greater than 2GB) 0.5 --- * Plugins! They can add commands, delivery methods, PMT/PAT processors and channel change callbacks. * Ability to change the output destination after creating a service filter or manual output. * New delivery methods, currently only udp://:(which was already there :-) ), null:// (which just throws away the packets) and file:// * Several new commands, including: - lsservices = Replaces services command and can list all the service/ only the services on the current multiplex/only the services on a specified multiplex. - lsmuxes = lists all the available multiplex. - lsplugins = Lists loaded plugins - plugininfo = Displays information on a specific plugin. * Was using a char for getopt instead of an int, now fixed. * Version number updated. * Most header files are now documented. * New list structure means there is no limit (apart from memory and CPU bandwidth) on the number of filters/outputs you can add. * Service name filtering, it is now possible to remove unprintable characters from service names by using the -F option. * !!!NOTE!!! Binary protocol change (slightly) to remove SSLA and SSLM and replaced with 1 message that takes a multiplex. Also 2 other new messages to get the current multiplex and another to list the available multiplexes. * Bugs Fixed. - 1548113 Command line processing on PPC doesn't work - 1538096 Not possible to specify log file destination - Seg fault on exit fixed. - Removing service no longer in the transport stream, only some where removed but not all. - Service names getting corrupted by repeated cache writebacks. - Removed annoying warning from libdvbpsi about TS discontinuity after a multiplex change. 0.4 --- * Daemon mode, can now run dvbstreamer in the background and use dvbctrl to control/monitor it. * Secondary service filters, allows more than 1 service to be streamed (each to separate IP Address:Ports). * Signal handling (No exit in a nice clean manner, making sure the database is updated). * IPv6 support added. (Thanks again Tero) * Minor name changes to commands (mostly commands that list things now start with ls, mostly :-) ) * Minor change to behaviour, dvbstreamer now no longer waits for the signal to lock before returning from a command, useful when you have a low siganl strength/high noise problem! 0.3 --- * Command completion. * Automatic service addition/removal, new service are automatically added to the database and services no longer signaled in the PAT are removed. * All TS pid (use pid 8192 when adding a pid to a manual output to get the entire TS) * Added SDT processing, can now get/update services names. * Refactored service filter and PAT/PMT handling so now PAT and PMT processor only process the incoming PAT/PMT and service filter actually does the PAT rewrite (should allow more than 1 service filter in the future). * Add DVB-S/C support (database has now changed slightly although shouldn't affect anyone upgrading from 0.2) * Fixed bug in cache.c when PAT version changed. * Several patches from Tero Pelander - Thanks! (including Bug ID 1487683) 0.2 --- * Added some new commands * Rewrote the TS filter callbacks todo more what they say they do. ie filter now returns a bool, process now returns a packet or null, and output just sends the packets. * Fixed a couple of memory leaks where I wasn't freeing the PSI sections after using them. * Continued general tidying up the project directory and getting to know subversion better. 0.1 --- Initial release. dvbstreamer-2.1.0/INSTALL000066400000000000000000000363321217721213100150650ustar00rootroot00000000000000Installation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. 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, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. 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 you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' 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. Running `configure' might take a while. 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, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. 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. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. 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 can use 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 `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer 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. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' 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. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= 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'. 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. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS 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 machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. 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. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--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. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. dvbstreamer-2.1.0/Makefile.am000066400000000000000000000007661217721213100160720ustar00rootroot00000000000000## DVBStreamer main Makefile SUBDIRS = include include/dvbpsi src/dvbpsi src src/plugins dvbstreamerdocdir = ${prefix}/doc/DVBStreamer dvbstreamerdoc_DATA = \ README\ COPYING\ AUTHORS\ ChangeLog\ INSTALL\ NEWS\ TODO pkginclude_DATA = \ config.h EXTRA_DIST = $(dvbstreamerdoc_DATA) $(pkginclude_DATA) # Copy all the spec files. Of cource, only one is actually used. dist-hook: for specfile in *.spec; do \ if test -f $$specfile; then \ cp -p $$specfile $(distdir); \ fi \ done dvbstreamer-2.1.0/Makefile.in000066400000000000000000000635171217721213100161060ustar00rootroot00000000000000# 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 = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ TODO compile config.guess config.sub depcomp install-sh \ ltmain.sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in 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 = CONFIG_CLEAN_VPATH_FILES = 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 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)$(dvbstreamerdocdir)" \ "$(DESTDIR)$(pkgincludedir)" DATA = $(dvbstreamerdoc_DATA) $(pkginclude_DATA) 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 GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVBSTREAMER_MAJOR = @DVBSTREAMER_MAJOR@ DVBSTREAMER_MICRO = @DVBSTREAMER_MICRO@ DVBSTREAMER_MINOR = @DVBSTREAMER_MINOR@ DVBSTREAMER_PLUGINDIR = @DVBSTREAMER_PLUGINDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETTIME_LIB = @GETTIME_LIB@ GREP = @GREP@ ICONV_LIB = @ICONV_LIB@ 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@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ NO_PREFIX_PACKAGE_DATA_DIR = @NO_PREFIX_PACKAGE_DATA_DIR@ NO_PREFIX_PACKAGE_DOC_DIR = @NO_PREFIX_PACKAGE_DOC_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATA_DIR = @PACKAGE_DATA_DIR@ PACKAGE_DOC_DIR = @PACKAGE_DOC_DIR@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ READLINE_TERMCAP = @READLINE_TERMCAP@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ 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@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ 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 = include include/dvbpsi src/dvbpsi src src/plugins dvbstreamerdocdir = ${prefix}/doc/DVBStreamer dvbstreamerdoc_DATA = \ README\ COPYING\ AUTHORS\ ChangeLog\ INSTALL\ NEWS\ TODO pkginclude_DATA = \ config.h EXTRA_DIST = $(dvbstreamerdoc_DATA) $(pkginclude_DATA) all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(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: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(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: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-dvbstreamerdocDATA: $(dvbstreamerdoc_DATA) @$(NORMAL_INSTALL) test -z "$(dvbstreamerdocdir)" || $(MKDIR_P) "$(DESTDIR)$(dvbstreamerdocdir)" @list='$(dvbstreamerdoc_DATA)'; test -n "$(dvbstreamerdocdir)" || 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)$(dvbstreamerdocdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvbstreamerdocdir)" || exit $$?; \ done uninstall-dvbstreamerdocDATA: @$(NORMAL_UNINSTALL) @list='$(dvbstreamerdoc_DATA)'; test -n "$(dvbstreamerdocdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(dvbstreamerdocdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(dvbstreamerdocdir)" && rm -f $$files install-pkgincludeDATA: $(pkginclude_DATA) @$(NORMAL_INSTALL) test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" @list='$(pkginclude_DATA)'; test -n "$(pkgincludedir)" || 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)$(pkgincludedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeDATA: @$(NORMAL_UNINSTALL) @list='$(pkginclude_DATA)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pkgincludedir)" && 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) 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 $(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-$$$$/" \ && 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: check-recursive all-am: Makefile $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(dvbstreamerdocdir)" "$(DESTDIR)$(pkgincludedir)"; 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: 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 $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am 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-dvbstreamerdocDATA install-pkgincludeDATA 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 $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -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: uninstall-dvbstreamerdocDATA uninstall-pkgincludeDATA .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ clean-libtool 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-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-dvbstreamerdocDATA 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-pkgincludeDATA 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 \ uninstall-dvbstreamerdocDATA uninstall-pkgincludeDATA # Copy all the spec files. Of cource, only one is actually used. dist-hook: for specfile in *.spec; do \ if test -f $$specfile; then \ cp -p $$specfile $(distdir); \ fi \ done # 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: dvbstreamer-2.1.0/NEWS000066400000000000000000000000001217721213100145120ustar00rootroot00000000000000dvbstreamer-2.1.0/README000066400000000000000000000246031217721213100147120ustar00rootroot00000000000000About ----- DVBStreamer is an console based application to stream an entire DVB service over UDP. It differs from other DVB streaming applications by the use of the DVB-SI to work out the PIDs to stream and correctly stream services which use a separate PCR PID. Requirements ------------ DVBStreamer requires the following libraries: - sqlite3 (>= 3.3) - readline - libltdl (>= 2.2.6b) - libyaml Installation ------------ After installing the dependancies and extracting the source run configure to setup the makefile. To do this enter the following at the command prompt (add any options you would normal add when building using configure). ./configure When configure has finished and created all the makefiles its just a matter of running make to build the application. make Once make has finished doing its thing the next step is installing dvbstreamer to you chosen location. You will probably want to do this step as root. make install Setup ----- Before you can actually start to use dvbstreamer you need to initialise it's database of service to do this you'll need a channels.conf file produces by the linuxtv.org utility scan. Go here if you need help with scan. When you have a channels.conf file you then need to run setupdvbstreamer with the file you've just created. To setup dvbstreamer to use a terrestrial tuner on adapter 0 use the following command: setupdvbstreamer -t channels.conf To setup dvbstreamer to use a satellite tuner on adapter 0 use the following command: setupdvbstreamer -s channels.conf To setup dvbstreamer to use a cable tuner on adapter 0 use the following command: setupdvbstreamer -c channels.conf If you are setting up an adapter other than 0 add the -a option to the commands above. If you have 2 or more cards of the same type in your system you can link the first cards database to the second cards database by simply creating a hard link in the dvbstreamer directory in your home directory ~/.dvbstreamer for example to use the same database for card 1 and 2 you would do the following ln ~/.dvbstreamer/adapter1.db ~/.dvbstreamer/adapter2.db Running -------- * Starting DVBStreamer * Using a Startup file * MRLs Starting DVBStreamer -------------------- To start dvbstreamer you need to specify an IP address and a UDP port where the selected service will be streamed to. You can also optionally specify which adapter to use using the -a option. For example to start dvbstreamer using adapter 2 and send the selected service to 192.168.1.1 and UDP port 1234 you would use the following command dvbstreamer -a 2 -o udp://192.168.1.1:1234 To select a service to stream use the select command (see the Commands section for more information). For example: select "BBC ONE" Will tune to the multiplex that contains BBC ONE and stream all the packets belonging to that service to 192.168.1.1:1234 over udp. The stats command can be used to verify that packets are being processed and set to the selected output destination. For information on other commands see the Commands section. Start up files -------------- Start up files can be useful for doing things that you always want to be setup before you get to the dvbstreamer prompt. For example you may always want the TDT and EIT tables redirected to a specific UDP port on your local computer. To use a startup file simple add the -f option on the command line specifying the file to read. For example to use the file eitredirect to redirect EIT tables to port 1235 on your local computer you would use the following: dvbstreamer -o udp://localhost:1234 -f eitredirect And in eitredirect you would have # Redirect EIT tables to port 1235 on localhost addmf eitoutput udp://localhost:1235 addmfpid eitoutput 0x12 Its as simple as that, you can use all the commands that you can use on the dvbstreamer prompt. MRLs (Media Resource Locator) ----------------------------- These are in the form ://
and are used to specified how and where to send the output of a service filter or a manual output. The following MRLs are currently supported (although this list can be extended by plugins): Transport Usage Description ------------------------------------- udp udp://host:port Packets are sent via UDP (7 TS packets per UDP packet) to the specified port on the host. file file://filepath Packets are written to the specified file. null null:// Packets are thrown away. Commands -------- quit............Exit the program lsservices......List all services or for a specific multiplex. lsmuxes.........List multiplexes select..........Select a new service to stream current.........Print out the service currently being streamed. serviceinfo.....Display information about a service. pids............List the PIDs for a specified service stats...........Display the stats for the PAT,PMT and service PID filters lssfs...........List all secondary service filters setsf...........Select a service to stream to a secondary service output setsfmrl........Set the service filter's MRL setsfavsonly....Enable/disable streaming of Audio/Video/Subtitles only. festatus........Displays the status of the tuner. scan............Scan the specified multiplex for services. help............Display the list of commands or help on a specific command lsplugins.......List loaded plugins. plugininfo......Display the information about a plugin quit ---- Usage: quit Exit the program, can be used in the startup file to stop further processing. lsservices ---------- Usage: lsservices [mux | ] Lists all the services currently in the database if no multiplex is specified or if "mux" is specified only the services available of the current mux or if a uid is specified only the services available on that multiplex. lsmuxes ------- Usage: lsmuxes List all multiplexes. select ------ Usage: select Sets the specified service as the service to be streamed to the primary output, this may mean tuning to a different multiplex. current ------- Usage: current Shows the service that is currently being streamed to the default output. Back serviceinfo Usage: serviceinfo Displays running status, conditional access status and whether EPG information is present for the specified service. Note only services in the current multiplex can be queried. pids ---- Usage: pids List the PIDs for the specified service. stats ----- Usage: stats Display the number of packets processed for the PSI/SI filters and the number of packets filtered for each service filter and manual output. addsf ----- Usage: addsf Adds a new destination for sending a secondary service to. rmsf ---- Usage: rmsf Remove a destination for sending secondary services to. lssfs ----- Usage: lssfs List all secondary service filters their names, destinations and currently selected service. setsf ----- Usage: setsf Stream the specified service to the secondary service output. setsfmrl -------- Usage: setsfmrl Change the destination for packets sent to this service filters output. If the MRL cannot be parsed no change will be made to the service filter. setsfavsonly ------------ Usage: setsfavsonly on|off Enabling AVS Only cause the PMT to be rewritten to only include the first video stream, normal audio stream and the subtitles stream only for the specified service output. festatus -------- Usage: festatus Displays whether the front end is locked, the bit error rate and signal to noise ratio and the signal strength scan ---- Usage: scan Tunes to the specified multiplex and wait 5 seconds for PAT/PMT/SDT. help ---- Usage: help [] List all available commands or displays specific help for the command specifed. lsplugins --------- Usage: lsplugins List all plugins that where loaded at startup. plugininfo ---------- Usage: plugininfo Displays the version, author and descriptor for a specific plugin. Plugins ------- Plugins allow DVBStreamer to be extended beyond the simple filtering and streaming of DVB services. Plugins can: - Add new delivery methods (check out fileoutput.c for a simple example of a delivery method plugin) - Add new commands. - Add new PID filters (for example to extract EPG data) - Detect when the service/multiplex is changed. The commands lsplugins and plugininfo can be used to inspected the loaded plugins. Documentation for the interfaces into DVBStreamer can be generated using the doxygen and the doxygen.config file in the base directory of dvbstreamer. Help/More Information ------------------- See the wiki at http://dvbstreamer.sourceforge.net/mediawiki/index.php/Main_Page Bugs ---- Please report all bugs to the sourceforge forums. http://sourceforge.net/tracker/?group_id=164687&atid=832723 Credits ------- Adam Charrett - Author Tero Pelander - IPv6 support along with several patches and tested DVB-C. Thomas Sattler - Lots of testing for 0.5. Nicholas Humfrey - Power PC testing and patch. Alex Luccisano - DVB-S testing. Jonathan Isom - ATSC testing. Michael Treuer - Patch to DVB text code. Steve VanDeBogart- Several patches and the traffic monitor plugin. Ramsey Ammar - DVBStreamer first donor :-) many thanks. Paul Kelly - Patch to make festatus command work on DVB-S Louis Croisez - Help finding critical MRL bug and other testing. Chris Allison - Patch to add Series/Content ids to xmltv output. Marcel Ritter - Bug fix A C G Mennucc - Several bug fixes/patches. Tom Albers - Test stream and testing of patch for support of extended event descriptors. Samuli Suominen - Patch to remove use of in-tree libltdl and use the system copy instead. Issa Gorissen - Donated a TeVII S660 for help with DVB-S2 - Many thanks Luca Dasseto - Also donated a TeVII S660 for help with DVB-S2 - Many thanks VideoLan libdvbpsi Team for the excellent libdvbpsi. (http://www.videolan.org/developers/libdvbpsi.html) Mythtv Team for working out the huffman decode tables etc for the freesat epg. History ------- 2.0 Next Gen Release 1.1 Ubuntu build fix Release 1.0 The first .0 Release 0.9 EPG Release 0.8 ATSC/DVB-S Release 0.7 Remote interface Release 0.6 Stability Release 0.5 Plugin Release 0.4 Daemon mode 0.3 Service Addition/Removal 0.2 Add new commands (addoutput etc) 0.1 First public release dvbstreamer-2.1.0/TODO000066400000000000000000000003521217721213100145150ustar00rootroot00000000000000Some Ideas ---------- freevo intergration. EIT decoding, simple EPG program. fastCGI application to allow multiple dvbstreamer to be control from a web page. PVR application, using RTSP to control playback and buffer to disk. dvbstreamer-2.1.0/acinclude.m4000066400000000000000000000000001217721213100162040ustar00rootroot00000000000000dvbstreamer-2.1.0/aclocal.m4000066400000000000000000011576131217721213100157030ustar00rootroot00000000000000# 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.67],, [m4_warning([this file was generated for autoconf 2.67. 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'.])]) # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008 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 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 56 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_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 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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "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 _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_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])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 _LT_PROG_ECHO_BACKSLASH 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 # Sed substitution that helps us do robust quoting. It backslashifies # 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' # 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_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 # 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], [[!?.]$], [], [.]) )]) # _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 "X$][$1" | $Xsed -e "$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 "X$" | $Xsed -e "$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' # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$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 "X\\\\\$\$var"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Fix-up fallback echo if it was mangled by the above quoting rules. case \$lt_ECHO in *'\\\[$]0 --fallback-echo"')dnl " lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` ;; esac _LT_OUTPUT_LIBTOOL_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]) cat >"$CONFIG_LT" <<_LTEOF #! $SHELL # Generated by $as_me. # Run this file to recreate a libtool stub with the current configuration. lt_cl_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 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) 2008 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. if test "$no_create" != yes; then 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) fi ])# 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 '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_XSI_SHELLFNS sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) 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)]) 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], []) # _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" ]) 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" != ":"; 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 _LT_TAGVAR(whole_archive_flag_spec, $1)='' _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=echo _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 # ----------------------- # 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. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl AC_LINK_IFELSE(AC_LANG_PROGRAM,[ lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' 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 "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], [AC_DIVERT_PUSH(NOTICE)]) $1 AC_DIVERT_POP ])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Add some code to the start of the generated configure script which # will find an echo command which doesn't interpret backslashes. m4_defun([_LT_PROG_ECHO_BACKSLASH], [_LT_SHELL_INIT([ # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$lt_ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` ;; esac ECHO=${lt_ECHO-echo} if test "X[$]1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X[$]1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then # Yippee, $ECHO works! : else # Restart under the correct shell. exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} fi if test "X[$]1" = X--fallback-echo; then # used as fallback echo shift cat <<_LT_EOF [$]* _LT_EOF exit 0 fi # 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 if test -z "$lt_ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if { echo_test_string=`eval $cmd`; } 2>/dev/null && { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null then break fi done fi if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$ECHO" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. ECHO='print -r' elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} else # Try using printf. ECHO='printf %s\n' if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL ECHO="$CONFIG_SHELL [$]0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$CONFIG_SHELL [$]0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "[$]0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} else # Oops. We lost completely, so just stick with echo. ECHO=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. lt_ECHO=$ECHO if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" fi AC_SUBST(lt_ECHO) ]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that does not interpret backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _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 __oline__ "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_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [AC_CHECK_TOOL(AR, ar, false) test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1]) 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 _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_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:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/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; ;; 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"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ = "XX$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 __oline__ "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 void fnord() { int i=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; /* 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:__oline__: $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:__oline__: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 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 lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then # 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 -e 's/;/ /g'` else lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # 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; } }'` sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` 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=`$ECHO "X$lib" | $Xsed -e '\''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,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) 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="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. 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 ;; 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 ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # 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 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' ;; 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 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], [shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir # 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;/^$/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([], [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 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 lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' 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 ;; 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]) 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_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_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. AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) 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:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:__oline__: $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:__oline__: 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_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cygwin* | *-*-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 _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' _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([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 # 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 #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. */ 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_save_LIBS="$LIBS" lt_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_save_LIBS" CFLAGS="$lt_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 _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_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)= AC_MSG_CHECKING([for $compiler option to produce PIC]) 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)= ;; 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 ;; 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*) # IBM XL 8.0 on PPC _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*) # 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' ;; 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 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' ;; pgcc* | pgf77* | pgf90* | pgf95*) # 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*) # IBM XL C 8.0/Fortran 10.1 on PPC _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)='-Wl,' ;; *Sun\ F*) # 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)='' ;; 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*) _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_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # 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]) # # 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_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' 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 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")) && ([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*) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' ;; linux* | k*bsd*-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 _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] ], [ 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) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes if test "$with_gnu_ld" = 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.9.1, 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 modify your PATH *** so that a non-GNU linker is found, and then restart. _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(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/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' 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 ;; 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= 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; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # 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; $ECHO \"$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]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; 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; $ECHO \"$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*) # 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 $compiler_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 $compiler_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 $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' 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 $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 ;; 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 $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 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 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")) && ([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 _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 $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; 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 _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' # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' _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. _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 `$ECHO "X$deplibs" | $Xsed -e '\''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(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; 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 -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 -fPIC ${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 -a "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${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 -a "$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 -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${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' ;; *) _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 $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${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. save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE(int foo(void) {}, _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' ) LDFLAGS="$save_LDFLAGS" else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -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" && $ECHO "X-set_version $verstring" | $Xsed` -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" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${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" && $ECHO "X-set_version $verstring" | $Xsed` -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} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${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" && $ECHO "X-set_version $verstring" | $Xsed` -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 "X-set_version $verstring" | $Xsed` -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 ${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 ${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_MSG_CHECKING([whether -lc should be explicitly linked in]) $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_TAGVAR(archive_cmds_need_lc, $1)=no else _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* AC_MSG_RESULT([$_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([], [fix_srcfile_path], [1], [Fix the shell variable $srcfile for the compiler]) _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([], [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 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_PROG_CXX # ------------ # Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++ # compiler, we have our own version here. m4_defun([_LT_PROG_CXX], [ pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes]) AC_PROG_CXX 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 popdef([AC_MSG_ERROR]) ])# _LT_PROG_CXX dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([_LT_PROG_CXX], []) # _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], [AC_REQUIRE([_LT_PROG_CXX])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl 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(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_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++"} 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 -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -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 "\-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 _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 $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; 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 _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' # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' _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*) # _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(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 ;; 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*) ;; 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; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${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; $ECHO "X$list" | $Xsed' ;; *) 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 -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${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" && $ECHO "X-set_version $verstring" | $Xsed` -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 -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -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; $ECHO "X$list" | $Xsed' _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 | $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 | $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 | $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 | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 will 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; $ECHO \"$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=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; xl*) # 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; $ECHO \"$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='echo' # 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=echo 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" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -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" && $ECHO "X-set_version $verstring" | $Xsed` -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 "X-set_version $verstring" | $Xsed` -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=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) 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" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${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 "\-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*) # 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='echo' # 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 -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 -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 "\-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 "\-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(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 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_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 # 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 ]) 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 $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 else prev= fi if test "$pre_test_object_deps_done" = no; then case $p 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 ;; *.$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 # 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*) # 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_PROG_F77 # ------------ # Since AC_PROG_F77 is broken, in that it returns the empty string # if there is no fortran compiler, we have our own version here. m4_defun([_LT_PROG_F77], [ pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes]) AC_PROG_F77 if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi popdef([AC_MSG_ERROR]) ])# _LT_PROG_F77 dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([_LT_PROG_F77], []) # _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_REQUIRE([_LT_PROG_F77])dnl AC_LANG_PUSH(Fortran 77) _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(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 CC=${F77-"f77"} 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" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_PROG_FC # ----------- # Since AC_PROG_FC is broken, in that it returns the empty string # if there is no fortran compiler, we have our own version here. m4_defun([_LT_PROG_FC], [ pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes]) AC_PROG_FC if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi popdef([AC_MSG_ERROR]) ])# _LT_PROG_FC dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([_LT_PROG_FC], []) # _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_REQUIRE([_LT_PROG_FC])dnl AC_LANG_PUSH(Fortran) _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(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 CC=${FC-"f95"} 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" 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_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} 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 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" ])# _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_GCC=$GCC GCC= CC=${RC-"windres"} 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" ])# _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_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"}, \ = c,a/b,, \ && 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_XSI_SHELLFNS # --------------------- # Bourne and XSI compatible variants of some useful shell functions. m4_defun([_LT_PROG_XSI_SHELLFNS], [case $xsi_shell in yes) cat << \_LT_EOF >> "$cfgfile" # 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 () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac } # func_basename file func_basename () { func_basename_result="${1##*/}" } # 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 () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}" } # 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_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}"} } # func_opt_split func_opt_split () { func_opt_split_opt=${1%%=*} func_opt_split_arg=${1#*=} } # func_lo2o object func_lo2o () { case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac } # func_xform libobj-or-source func_xform () { func_xform_result=${1%.*}.lo } # func_arith arithmetic-term... func_arith () { func_arith_result=$(( $[*] )) } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=${#1} } _LT_EOF ;; *) # Bourne compatible functions. cat << \_LT_EOF >> "$cfgfile" # 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 () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -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 file func_basename () { func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } dnl func_dirname_and_basename dnl A portable version of this function is already defined in general.m4sh dnl so there is no need for it here. # 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 "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; esac } # sed scripts: my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' my_sed_long_arg='1s/^-[[^=]]*=//' # func_opt_split func_opt_split () { func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` } # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` } # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'` } # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "$[@]"` } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` } _LT_EOF esac case $lt_shell_append in yes) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$[1]+=\$[2]" } _LT_EOF ;; *) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$[1]=\$$[1]\$[2]" } _LT_EOF ;; esac ]) # Helper functions for option handling. -*- 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 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 # _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], [0], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [0], [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], []) 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])]) # 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 ]) # 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. # Generated from ltversion.in. # serial 3017 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.2.6b]) m4_define([LT_PACKAGE_REVISION], [1.3017]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.2.6b' macro_revision='1.3017' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007 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 4 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_RC], [AC_DEFUN([AC_LIBTOOL_RC])]) 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])]) # 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` ]) # Copyright (C) 1996, 1997, 1999, 2000, 2001, 2002, 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 4 # This was merged into AC_PROG_CC in Autoconf. AU_DEFUN([AM_PROG_CC_STDC], [AC_PROG_CC AC_DIAGNOSE([obsolete], [$0: your code should no longer depend upon `am_cv_prog_cc_stdc', but upon `ac_cv_prog_cc_stdc'. Remove this warning and the assignment when you adjust the code. You can also remove the above call to AC_PROG_CC if you already called it elsewhere.]) am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc ]) AU_DEFUN([fp_PROG_CC_STDC]) # 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])]) # 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])]) # 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) 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([acinclude.m4]) dvbstreamer-2.1.0/autogen.sh000077500000000000000000000012501217721213100160240ustar00rootroot00000000000000#!/bin/sh # Run this to generate all the initial makefiles, etc. srcdir=`dirname $0` test -z "$srcdir" && srcdir=. echo processing $srcdir ( cd $srcdir aclocalinclude="$ACLOCAL_FLAGS" echo "Creating $srcdir/aclocal.m4 ..." test -r $srcdir/aclocal.m4 || touch $srcdir/aclocal.m4 echo "Making $srcdir/aclocal.m4 writable ..." test -r $srcdir/aclocal.m4 && chmod u+w $srcdir/aclocal.m4 echo "Running libtoolize..." libtoolize --force --copy echo "Running aclocal $aclocalinclude ..." aclocal $aclocalinclude echo "Running autoheader..." autoheader echo "Running automake --gnu $am_opt ..." automake --add-missing --force --copy --gnu $am_opt echo "Running autoconf ..." autoconf ) dvbstreamer-2.1.0/autom4te.cache/000077500000000000000000000000001217721213100166315ustar00rootroot00000000000000dvbstreamer-2.1.0/autom4te.cache/output.0000066400000000000000000016004151217721213100202610ustar00rootroot00000000000000@%:@! /bin/sh @%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by GNU Autoconf 2.67 for dvbstreamer 2.0.0. @%:@ @%:@ @%:@ 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. 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 \$(( 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. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL exec "$CONFIG_SHELL" "$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 about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do 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 @S|@? 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 "@S|@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 @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) 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 @S|@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'" # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$lt_ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac ECHO=${lt_ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then # Yippee, $ECHO works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <<_LT_EOF $* _LT_EOF exit 0 fi # 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 if test -z "$lt_ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if { echo_test_string=`eval $cmd`; } 2>/dev/null && { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null then break fi done fi if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$ECHO" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. ECHO='print -r' elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. ECHO='printf %s\n' if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL ECHO="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. ECHO=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. lt_ECHO=$ECHO if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi 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=. LIB@&t@OBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='dvbstreamer' PACKAGE_TARNAME='dvbstreamer' PACKAGE_VERSION='2.0.0' PACKAGE_STRING='dvbstreamer 2.0.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' # 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 LIB@&t@OBJS DVBSTREAMER_PLUGINDIR PACKAGE_DOC_DIR NO_PREFIX_PACKAGE_DOC_DIR PACKAGE_DATA_DIR NO_PREFIX_PACKAGE_DATA_DIR ICONV_LIB GETTIME_LIB READLINE_TERMCAP ENABLE_FSTREAMER_FALSE ENABLE_FSTREAMER_TRUE ENABLE_DVB_FALSE ENABLE_DVB_TRUE ENABLE_ATSC_FALSE ENABLE_ATSC_TRUE OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL lt_ECHO RANLIB AR LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP SED host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL OBJDUMP DLLTOOL AS EGREP GREP CPP 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 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 DVBSTREAMER_MICRO DVBSTREAMER_MINOR DVBSTREAMER_MAJOR 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_dependency_tracking enable_static enable_shared with_pic enable_fast_install with_gnu_ld enable_libtool_lock enable_atsc enable_dvb enable_getaddrinfo enable_file_streamer ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # 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 dvbstreamer 2.0.0 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 @<:@@S|@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/dvbstreamer@:>@ --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 dvbstreamer 2.0.0:";; 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] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --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-libtool-lock avoid locking (might break parallel builds) --disable-atsc Disable ATSC support, only use this if you know you don't need ATSC (most DVB users) this will make the complied application a bit smaller, but won't make a big difference. --disable-dvb Disable DVB support, only use this if you know you don't need DVB (most ATSC users) this will make the complied application a bit smaller, but won't make a big difference. --disable-getaddrinfo Disable use of the getaddrinfo function, this is needed for IPv6 support but some C libraries don't support it fully. --enable-file-streamer Enable building fdvbstreamer to allow play back of captured TS files. 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@:>@ 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 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 the package provider. _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 dvbstreamer configure 2.0.0 generated by GNU Autoconf 2.67 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.@S|@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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_compile @%:@ ac_fn_c_try_link LINENO @%:@ ----------------------- @%:@ Try to link conftest.@S|@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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_link @%:@ ac_fn_c_try_cpp LINENO @%:@ ---------------------- @%:@ Try to preprocess conftest.@S|@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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_cpp @%:@ ac_fn_c_try_run LINENO @%:@ ---------------------- @%:@ Try to link conftest.@S|@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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_run @%:@ 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 "test \"\${$3+set}\"" = set; 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } @%:@ ac_fn_c_check_header_compile @%:@ 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 "test \"\${$3+set}\"" = set; 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } @%:@ ac_fn_c_check_func @%:@ ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES @%:@ ------------------------------------------------------- @%:@ Tests whether HEADER exists, giving a warning if it cannot be compiled using @%:@ the include files in INCLUDES and setting the cache variable VAR @%:@ accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval "test \"\${$3+set}\"" = set; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 @%:@include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } @%:@ ac_fn_c_check_header_mongrel 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 dvbstreamer $as_me 2.0.0, which was generated by GNU Autoconf 2.67. 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 DVBSTREAMER_MAJOR=2 DVBSTREAMER_MINOR=0 DVBSTREAMER_MICRO=0 cat >>confdefs.h <<_ACEOF @%:@define DVBSTREAMER_MAJOR $DVBSTREAMER_MAJOR _ACEOF cat >>confdefs.h <<_ACEOF @%:@define DVBSTREAMER_MINOR $DVBSTREAMER_MINOR _ACEOF cat >>confdefs.h <<_ACEOF @%:@define DVBSTREAMER_MICRO $DVBSTREAMER_MINOR _ACEOF cat >>confdefs.h <<_ACEOF @%:@define DVBSTREAMER_VERSION ((DVBSTREAMER_MAJOR<<24) | (DVBSTREAMER_MINOR<<16) | DVBSTREAMER_MICRO ) _ACEOF SPEC_VERSION=$DVBSTREAMER_MAJOR.$DVBSTREAMER_MINOR.$DVBSTREAMER_MICRO 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 test "${ac_cv_path_install+set}" = set; 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 test "${ac_cv_prog_STRIP+set}" = set; 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 test "${ac_cv_prog_ac_ct_STRIP+set}" = set; 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 test "${ac_cv_path_mkdir+set}" = set; 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 test "${ac_cv_prog_AWK+set}" = set; 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 "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; 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="dvbstreamer" VERSION=$SPEC_VERSION 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 -' ac_config_headers="$ac_config_headers config.h" 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 test "${ac_cv_objext+set}" = set; 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 test "${ac_cv_c_compiler_gnu+set}" = set; 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 test "${ac_cv_prog_cc_g+set}" = set; 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 test "${ac_cv_prog_cc_c89+set}" = set; 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 test "${am_cv_CC_dependencies_compiler_type+set}" = set; 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 library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } if test "${ac_cv_search_strerror+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$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 strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_strerror+set}" = set; then : break fi done if test "${ac_cv_search_strerror+set}" = set; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 $as_echo "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 test "${ac_cv_c_compiler_gnu+set}" = set; 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 test "${ac_cv_prog_cc_g+set}" = set; 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 test "${ac_cv_prog_cc_c89+set}" = set; 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 test "${am_cv_CC_dependencies_compiler_type+set}" = set; 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 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 test "${ac_cv_c_compiler_gnu+set}" = set; 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 test "${ac_cv_prog_cc_g+set}" = set; 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 test "${ac_cv_prog_cc_c89+set}" = set; 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 test "${am_cv_CC_dependencies_compiler_type+set}" = set; 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 am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc 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 test "${ac_cv_prog_CPP+set}" = set; 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 grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if test "${ac_cv_path_GREP+set}" = set; 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 test "${ac_cv_path_EGREP+set}" = set; 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 ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; 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 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 "test \"\${ac_cv_prog_cc_${ac_cc}_c_o+set}\"" = set; 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 CFLAGS="$CFLAGS -fno-strict-aliasing" 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.2.6b' macro_revision='1.3017' ltmain="$ac_aux_dir/ltmain.sh" # 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 test "${ac_cv_build+set}" = set; 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 test "${ac_cv_host+set}" = set; 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 { $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 test "${ac_cv_path_SED+set}" = set; 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 fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if test "${ac_cv_path_FGREP+set}" = set; 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 test "${lt_cv_path_LD+set}" = set; 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 test "${lt_cv_prog_gnu_ld+set}" = set; 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 test "${lt_cv_path_NM+set}" = set; 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 "$ac_tool_prefix"; then for ac_prog in "dumpbin -symbols" "link -dump -symbols" 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 test "${ac_cv_prog_DUMPBIN+set}" = set; 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 -symbols" "link -dump -symbols" 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 test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; 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 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 test "${lt_cv_nm_interface+set}" = set; 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:__oline__: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:__oline__: 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 test "${lt_cv_sys_max_cmd_len+set}" = set; 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; ;; 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"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ = "XX$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"}, \ = c,a/b,, \ && 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 for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if test "${lt_cv_ld_reload_flag+set}" = set; 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 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 test "${ac_cv_prog_OBJDUMP+set}" = set; 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 test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; 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 test "${lt_cv_deplibs_check_method+set}" = set; 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. if ( 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 lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' 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 ;; 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]) 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_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}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AR+set}" = set; 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}ar" $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 fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_AR+set}" = set; 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="ar" $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 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 else AR="$ac_cv_prog_AR" fi test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru 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 test "${ac_cv_prog_STRIP+set}" = set; 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 test "${ac_cv_prog_ac_ct_STRIP+set}" = set; 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 test "${ac_cv_prog_RANLIB+set}" = set; 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 test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; 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 # 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 test "${lt_cv_sys_global_symbol_pipe+set}" = set; 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 # 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 #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. */ 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_save_LIBS="$LIBS" lt_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_save_LIBS" CFLAGS="$lt_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 @%:@ 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 __oline__ "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 test "${lt_cv_cc_needs_belf+set}" = set; 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" 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 test "${ac_cv_prog_DSYMUTIL+set}" = set; 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 test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; 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 test "${ac_cv_prog_NMEDIT+set}" = set; 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 test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; 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 test "${ac_cv_prog_LIPO+set}" = set; 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 test "${ac_cv_prog_ac_ct_LIPO+set}" = set; 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 test "${ac_cv_prog_OTOOL+set}" = set; 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 test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; 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 test "${ac_cv_prog_OTOOL64+set}" = set; 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 test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; 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 test "${lt_cv_apple_cc_single_mod+set}" = set; 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 test "${lt_cv_ld_exported_symbols_list+set}" = set; 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; } 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" != ":"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac # 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" = x""yes; then : cat >>confdefs.h <<_ACEOF @%:@define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=yes 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 test "${ac_cv_prog_AS+set}" = set; 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 test "${ac_cv_prog_ac_ct_AS+set}" = set; 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 test "${ac_cv_prog_DLLTOOL+set}" = set; 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 test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; 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 test "${ac_cv_prog_OBJDUMP+set}" = set; 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 test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; 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 @%:@ 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 @%:@ 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 test "${lt_cv_objdir+set}" = set; 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 # Sed substitution that helps us do robust quoting. It backslashifies # 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' # 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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "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 test "${lt_cv_path_MAGIC_CMD+set}" = set; 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 test "${lt_cv_path_MAGIC_CMD+set}" = set; 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 lt_prog_compiler_no_builtin_flag=' -fno-builtin' { $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 test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; 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:__oline__: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:__oline__: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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= { $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 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' ;; 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 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' ;; pgcc* | pgf77* | pgf90* | pgf95*) # 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*) # IBM XL C 8.0/Fortran 10.1 on PPC lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Sun\ F*) # 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='' ;; 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*) 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@&t@ -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 $as_echo "$lt_prog_compiler_pic" >&6; } # # 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 test "${lt_cv_prog_compiler_pic_works+set}" = set; 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@&t@ -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:__oline__: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:__oline__: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 test "${lt_cv_prog_compiler_static_works+set}" = set; 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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/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 test "${lt_cv_prog_compiler_c_o+set}" = set; 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:__oline__: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:__oline__: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 test "${lt_cv_prog_compiler_c_o+set}" = set; 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:__oline__: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:__oline__: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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) link_all_deplibs=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = 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.9.1, 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 modify your PATH *** so that a non-GNU linker is found, and then restart. _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' 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/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' 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 ;; 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= 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; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # 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; $ECHO \"$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]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; 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; $ECHO \"$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*) # 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 $compiler_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 $compiler_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 $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' 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 $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 ;; 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 $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 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 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")) && (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. 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 } }' 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 "$aix_libpath"; then 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 "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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 $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; 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. 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 } }' 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 "$aix_libpath"; then 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 "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' 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. 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 `$ECHO "X$deplibs" | $Xsed -e '\''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' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='' 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=echo 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 -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 -fPIC ${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 -a "$with_gnu_ld" = no; then archive_cmds='$CC -shared -fPIC ${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 -a "$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 -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${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' ;; *) archive_cmds='$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 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 $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${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. 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) {} _ACEOF if ac_fn_c_try_link "$LINENO"; then : archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -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" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${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" && $ECHO "X-set_version $verstring" | $Xsed` -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} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${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" && $ECHO "X-set_version $verstring" | $Xsed` -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 "X-set_version $verstring" | $Xsed` -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 ${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 ${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; } $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 archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 $as_echo "$archive_cmds_need_lc" >&6; } ;; 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 lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then # 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 -e 's/;/ /g'` else lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # 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; } }'` sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` 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=`$ECHO "X$lib" | $Xsed -e '\''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,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) 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="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. 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 ;; 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 ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # 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 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' ;; 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 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 : 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 # 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;/^$/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 test "${ac_cv_lib_dl_dlopen+set}" = set; 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" = x""yes; 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" = x""yes; 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 test "${ac_cv_lib_dld_shl_load+set}" = set; 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" = x""yes; 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" = x""yes; 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 test "${ac_cv_lib_dl_dlopen+set}" = set; 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" = x""yes; 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 test "${ac_cv_lib_svld_dlopen+set}" = set; 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" = x""yes; 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 test "${ac_cv_lib_dld_dld_link+set}" = set; 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" = x""yes; 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 test "${lt_cv_dlopen_self+set}" = set; 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 __oline__ "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 void fnord() { int i=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; /* 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 test "${lt_cv_dlopen_self_static+set}" = set; 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 __oline__ "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 void fnord() { int i=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; /* 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: { $as_echo "$as_me:${as_lineno-$LINENO}: checking libdir name" >&5 $as_echo_n "checking libdir name... " >&6; } case $host in *-*-linux*) # Test if the compiler is 64bit echo 'int i;' > conftest.$ac_ext DVBSTREAMER_cv_cc_64bit_output=no 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 `"$MAGIC_CMD" conftest.$ac_objext` in *"ELF 64"*) DVBSTREAMER_cv_cc_64bit_output=yes ;; esac fi rm -rf conftest* ;; esac case $host_cpu:$DVBSTREAMER_cv_cc_64bit_output in powerpc64:yes | s390x:yes | sparc64:yes | x86_64:yes) DVBSTREAMER_LIBNAME="lib64" ;; *:*) DVBSTREAMER_LIBNAME="lib" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DVBSTREAMER_LIBNAME" >&5 $as_echo "$DVBSTREAMER_LIBNAME" >&6; } @%:@ Check whether --enable-atsc was given. if test "${enable_atsc+set}" = set; then : enableval=$enable_atsc; case "${enableval}" in yes) enable_atsc=true ;; no) enable_atsc=false ;; *) as_fn_error $? "bad value ${enableval} for --disable-atsc" "$LINENO" 5 ;; esac else enable_atsc=true fi @%:@ Check whether --enable-dvb was given. if test "${enable_dvb+set}" = set; then : enableval=$enable_dvb; case "${enableval}" in yes) enable_dvb=true ;; no) enable_dvb=false ;; *) as_fn_error $? "bad value ${enableval} for --disable-dvb" "$LINENO" 5 ;; esac else enable_dvb=true fi if test "${enable_dvb}" == "false"; then if test "${enable_atsc}" == "false"; then as_fn_error $? "Either ATSC or DVB needs to be enabled!" "$LINENO" 5 fi fi if test x$enable_atsc = xtrue; then ENABLE_ATSC_TRUE= ENABLE_ATSC_FALSE='#' else ENABLE_ATSC_TRUE='#' ENABLE_ATSC_FALSE= fi if test "${enable_atsc}" != "false"; then $as_echo "@%:@define ENABLE_ATSC 1" >>confdefs.h fi if test x$enable_dvb = xtrue; then ENABLE_DVB_TRUE= ENABLE_DVB_FALSE='#' else ENABLE_DVB_TRUE='#' ENABLE_DVB_FALSE= fi if test "${enable_dvb}" != "false"; then $as_echo "@%:@define ENABLE_DVB 1" >>confdefs.h fi @%:@ Check whether --enable-getaddrinfo was given. if test "${enable_getaddrinfo+set}" = set; then : enableval=$enable_getaddrinfo; case "${enableval}" in yes) use_getaddrinfo=true ;; no) use_getaddrinfo=false ;; *) as_fn_error $? "bad value ${enableval} for --disable-getaddrinfo" "$LINENO" 5 ;; esac else use_getaddrinfo=true fi if test "${use_getaddrinfo}" != "false"; then $as_echo "@%:@define USE_GETADDRINFO 1" >>confdefs.h fi @%:@ Check whether --enable-file-streamer was given. if test "${enable_file_streamer+set}" = set; then : enableval=$enable_file_streamer; case "${enableval}" in yes) enable_fstreamer=true ;; no) enable_fstreamer=false ;; *) as_fn_error $? "bad value ${enableval} for --enable-file-streamer" "$LINENO" 5 ;; esac else enable_fstreamer=false fi if test x$enable_fstreamer = xtrue; then ENABLE_FSTREAMER_TRUE= ENABLE_FSTREAMER_FALSE='#' else ENABLE_FSTREAMER_TRUE='#' ENABLE_FSTREAMER_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_libversion in -lsqlite3" >&5 $as_echo_n "checking for sqlite3_libversion in -lsqlite3... " >&6; } if test "${ac_cv_lib_sqlite3_sqlite3_libversion+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsqlite3 $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 sqlite3_libversion (); int main () { return sqlite3_libversion (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_sqlite3_sqlite3_libversion=yes else ac_cv_lib_sqlite3_sqlite3_libversion=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_sqlite3_sqlite3_libversion" >&5 $as_echo "$ac_cv_lib_sqlite3_sqlite3_libversion" >&6; } if test "x$ac_cv_lib_sqlite3_sqlite3_libversion" = x""yes; then : cat >>confdefs.h <<_ACEOF @%:@define HAVE_LIBSQLITE3 1 _ACEOF LIBS="-lsqlite3 $LIBS" 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 $? "sqlite3 not found See \`config.log' for more details" "$LINENO" 5 ; } fi LIBS="" ac_fn_c_check_header_mongrel "$LINENO" "readline/readline.h" "ac_cv_header_readline_readline_h" "$ac_includes_default" if test "x$ac_cv_header_readline_readline_h" = x""yes; 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 $? "readline header file not found See \`config.log' for more details" "$LINENO" 5 ; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for readline in -lreadline" >&5 $as_echo_n "checking for readline in -lreadline... " >&6; } if test "${ac_cv_lib_readline_readline+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lreadline -lncurses $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 readline (); int main () { return readline (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_readline_readline=yes else ac_cv_lib_readline_readline=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_readline_readline" >&5 $as_echo "$ac_cv_lib_readline_readline" >&6; } if test "x$ac_cv_lib_readline_readline" = x""yes; then : READLINE_TERMCAP="-lncurses" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for readline in -lreadline" >&5 $as_echo_n "checking for readline in -lreadline... " >&6; } if test "${ac_cv_lib_readline_readline+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lreadline -ltermcap $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 readline (); int main () { return readline (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_readline_readline=yes else ac_cv_lib_readline_readline=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_readline_readline" >&5 $as_echo "$ac_cv_lib_readline_readline" >&6; } if test "x$ac_cv_lib_readline_readline" = x""yes; then : READLINE_TERMCAP="-ltermcap" 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 $? "readline not found See \`config.log' for more details" "$LINENO" 5 ; } fi fi LIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 $as_echo_n "checking for library containing clock_gettime... " >&6; } if test "${ac_cv_search_clock_gettime+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$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 clock_gettime (); int main () { return clock_gettime (); ; return 0; } _ACEOF for ac_lib in '' rt; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_clock_gettime=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_clock_gettime+set}" = set; then : break fi done if test "${ac_cv_search_clock_gettime+set}" = set; then : else ac_cv_search_clock_gettime=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 $as_echo "$ac_cv_search_clock_gettime" >&6; } ac_res=$ac_cv_search_clock_gettime if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" GETTIME_LIB=$LIBS 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 $? "Failed to find a library defining clock_gettime See \`config.log' for more details" "$LINENO" 5 ; } fi LIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing iconv_open" >&5 $as_echo_n "checking for library containing iconv_open... " >&6; } if test "${ac_cv_search_iconv_open+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$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 iconv_open (); int main () { return iconv_open (); ; return 0; } _ACEOF for ac_lib in '' iconv; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_iconv_open=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_iconv_open+set}" = set; then : break fi done if test "${ac_cv_search_iconv_open+set}" = set; then : else ac_cv_search_iconv_open=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_iconv_open" >&5 $as_echo "$ac_cv_search_iconv_open" >&6; } ac_res=$ac_cv_search_iconv_open if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" ICONV_LIB=$LIBS else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing libiconv_open" >&5 $as_echo_n "checking for library containing libiconv_open... " >&6; } if test "${ac_cv_search_libiconv_open+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$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 libiconv_open (); int main () { return libiconv_open (); ; return 0; } _ACEOF for ac_lib in '' iconv; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_libiconv_open=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_libiconv_open+set}" = set; then : break fi done if test "${ac_cv_search_libiconv_open+set}" = set; then : else ac_cv_search_libiconv_open=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_libiconv_open" >&5 $as_echo "$ac_cv_search_libiconv_open" >&6; } ac_res=$ac_cv_search_libiconv_open if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" ICONV_LIB=$LIBS 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 $? "Failed to find a library defining iconv_open See \`config.log' for more details" "$LINENO" 5 ; } fi fi if test "x${ICONV_LIB}" == "x"; then $as_echo "@%:@define ICONV_INPUT_CAST char **" >>confdefs.h else $as_echo "@%:@define ICONV_INPUT_CAST const char **" >>confdefs.h fi LIBS="" ac_fn_c_check_header_mongrel "$LINENO" "ev.h" "ac_cv_header_ev_h" "$ac_includes_default" if test "x$ac_cv_header_ev_h" = x""yes; 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 $? "libev header file not found See \`config.log' for more details" "$LINENO" 5 ; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ev_loop in -lev" >&5 $as_echo_n "checking for ev_loop in -lev... " >&6; } if test "${ac_cv_lib_ev_ev_loop+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lev $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 ev_loop (); int main () { return ev_loop (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ev_ev_loop=yes else ac_cv_lib_ev_ev_loop=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_ev_ev_loop" >&5 $as_echo "$ac_cv_lib_ev_ev_loop" >&6; } if test "x$ac_cv_lib_ev_ev_loop" = x""yes; then : cat >>confdefs.h <<_ACEOF @%:@define HAVE_LIBEV 1 _ACEOF LIBS="-lev $LIBS" 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 $? "libev not found See \`config.log' for more details" "$LINENO" 5 ; } fi LIBS="" ac_fn_c_check_header_mongrel "$LINENO" "yaml.h" "ac_cv_header_yaml_h" "$ac_includes_default" if test "x$ac_cv_header_yaml_h" = x""yes; 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 $? "libyaml header file not found See \`config.log' for more details" "$LINENO" 5 ; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for yaml_get_version_string in -lyaml" >&5 $as_echo_n "checking for yaml_get_version_string in -lyaml... " >&6; } if test "${ac_cv_lib_yaml_yaml_get_version_string+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lyaml $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 yaml_get_version_string (); int main () { return yaml_get_version_string (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_yaml_yaml_get_version_string=yes else ac_cv_lib_yaml_yaml_get_version_string=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_yaml_yaml_get_version_string" >&5 $as_echo "$ac_cv_lib_yaml_yaml_get_version_string" >&6; } if test "x$ac_cv_lib_yaml_yaml_get_version_string" = x""yes; then : cat >>confdefs.h <<_ACEOF @%:@define HAVE_LIBYAML 1 _ACEOF LIBS="-lyaml $LIBS" 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 $? "libyaml not found See \`config.log' for more details" "$LINENO" 5 ; } fi LIBS="" ac_fn_c_check_header_mongrel "$LINENO" "ltdl.h" "ac_cv_header_ltdl_h" "$ac_includes_default" if test "x$ac_cv_header_ltdl_h" = x""yes; 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 $? "libltdl (libtool) header file not found See \`config.log' for more details" "$LINENO" 5 ; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lt_dlinit in -lltdl" >&5 $as_echo_n "checking for lt_dlinit in -lltdl... " >&6; } if test "${ac_cv_lib_ltdl_lt_dlinit+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lltdl $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 lt_dlinit (); int main () { return lt_dlinit (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ltdl_lt_dlinit=yes else ac_cv_lib_ltdl_lt_dlinit=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_ltdl_lt_dlinit" >&5 $as_echo "$ac_cv_lib_ltdl_lt_dlinit" >&6; } if test "x$ac_cv_lib_ltdl_lt_dlinit" = x""yes; then : cat >>confdefs.h <<_ACEOF @%:@define HAVE_LIBLTDL 1 _ACEOF LIBS="-lltdl $LIBS" 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 $? "libltdl (libtool) not found See \`config.log' for more details" "$LINENO" 5 ; } fi LIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for variadic cpp macros" >&5 $as_echo_n "checking for variadic cpp macros... " >&6; } if test "${ac_cv_cpp_variadic_macros+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #define a(b,c...) printf(b,##c) int main () { a("foo");a("%s","bar");a("%s%s","baz","quux"); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_cpp_variadic_macros=yes else ac_cv_cpp_variadic_macros=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cpp_variadic_macros" >&5 $as_echo "$ac_cv_cpp_variadic_macros" >&6; } if test "${ac_cv_cpp_variadic_macros}" != "no"; then $as_echo "@%:@define HAVE_VARIADIC_MACROS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FE_CAN_2G_MODULATION" >&5 $as_echo_n "checking for FE_CAN_2G_MODULATION... " >&6; } if test "${ac_cv_fe_can_2g_modulation+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int a = FE_CAN_2G_MODULATION; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_fe_can_2g_modulation=yes else ac_cv_fe_can_2g_modulation=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fe_can_2g_modulation" >&5 $as_echo "$ac_cv_fe_can_2g_modulation" >&6; } if test "${ac_cv_fe_can_2g_modulation}" != "no"; then $as_echo "@%:@define HAVE_FE_CAN_2G_MODULATION 1" >>confdefs.h fi packagesrcdir=`cd $srcdir && pwd` if test "x${prefix}" = "xNONE"; then packageprefix=${ac_default_prefix} else packageprefix=${prefix} fi packagedatadir=share packagedocdir=doc/${PACKAGE} NO_PREFIX_PACKAGE_DATA_DIR="${packagedatadir}" PACKAGE_DATA_DIR="${packageprefix}/${packagedatadir}" NO_PREFIX_PACKAGE_DOC_DIR="${packagedocdir}" PACKAGE_DOC_DIR="${packageprefix}/${packagedocdir}" cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_DATA_DIR "${packageprefix}/${packagedatadir}" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_DOC_DIR "${packageprefix}/${packagedocdir}" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_SOURCE_DIR "${packagesrcdir}" _ACEOF if test "x$prefix" = xNONE; then prefix="${ac_default_prefix}" fi if test "x$exec_prefix" = xNONE; then exec_prefix='${prefix}' fi DVBSTREAMER_PLUGINDIR="$libdir/dvbstreamer/plugins" eval DVBSTREAMER_REL_PLUGINDIR="$DVBSTREAMER_PLUGINDIR" DVBSTREAMER_REL_PLUGINDIR=`eval echo "$DVBSTREAMER_REL_PLUGINDIR" | sed -e "s,^${prefix}/,,"` eval DVBSTREAMER_PLUGINPATH=`eval echo "$DVBSTREAMER_PLUGINDIR"` cat >>confdefs.h <<_ACEOF @%:@define DVBSTREAMER_PLUGINDIR "$DVBSTREAMER_PLUGINPATH" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define DVBSTREAMER_REL_PLUGINDIR "$DVBSTREAMER_REL_PLUGINDIR" _ACEOF ac_config_files="$ac_config_files Makefile include/Makefile include/dvbpsi/Makefile src/dvbpsi/Makefile src/Makefile src/plugins/Makefile" 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 test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file 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 : $LIB@&t@OBJS; 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 LIB@&t@OBJS=$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 "${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 "${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 "${ENABLE_ATSC_TRUE}" && test -z "${ENABLE_ATSC_FALSE}"; then as_fn_error $? "conditional \"ENABLE_ATSC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_DVB_TRUE}" && test -z "${ENABLE_DVB_FALSE}"; then as_fn_error $? "conditional \"ENABLE_DVB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_FSTREAMER_TRUE}" && test -z "${ENABLE_FSTREAMER_FALSE}"; then as_fn_error $? "conditional \"ENABLE_FSTREAMER\" 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. 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 @S|@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 @S|@? 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 @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) 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 "@S|@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 dvbstreamer $as_me 2.0.0, which was generated by GNU Autoconf 2.67. 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 the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ dvbstreamer config.status 2.0.0 configured by $0, generated by GNU Autoconf 2.67, 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' macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # Quote evaled strings. for var in SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ deplibs_check_method \ file_magic_cmd \ AR \ AR_FLAGS \ 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 \ SHELL \ ECHO \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ 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 \ fix_srcfile_path \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$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 \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec; do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Fix-up fallback echo if it was mangled by the above quoting rules. case \$lt_ECHO in *'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` ;; esac 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" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "include/dvbpsi/Makefile") CONFIG_FILES="$CONFIG_FILES include/dvbpsi/Makefile" ;; "src/dvbpsi/Makefile") CONFIG_FILES="$CONFIG_FILES src/dvbpsi/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/plugins/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/Makefile" ;; *) 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= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$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 -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 # 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 {' >"$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 >>"\$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 >>"\$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 < "$tmp/subs1.awk" > "$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 >"$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_t=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_t"; 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="$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 >"$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 "$tmp/subs.awk" >$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' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$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 "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$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 "$tmp/defines.awk"' "$ac_file_inputs" } >"$tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$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 "$tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$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 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 # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Assembler program. AS=$AS # DLL creation program. DLLTOOL=$DLLTOOL # Object dumper program. OBJDUMP=$OBJDUMP # Whether or not to build static libraries. build_old_libs=$enable_static # 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 # 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 # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # 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 # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # 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 # 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 # The name of the directory that contains temporary libtool files. objdir=$objdir # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that does not interpret backslashes. ECHO=$lt_ECHO # 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 # 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 # 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 # 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 # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path=$lt_fix_srcfile_path # 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 # 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 '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) case $xsi_shell in yes) cat << \_LT_EOF >> "$cfgfile" # 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 () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac } # func_basename file func_basename () { func_basename_result="${1##*/}" } # 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 () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}" } # 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_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}"} } # func_opt_split func_opt_split () { func_opt_split_opt=${1%%=*} func_opt_split_arg=${1#*=} } # func_lo2o object func_lo2o () { case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac } # func_xform libobj-or-source func_xform () { func_xform_result=${1%.*}.lo } # func_arith arithmetic-term... func_arith () { func_arith_result=$(( $* )) } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=${#1} } _LT_EOF ;; *) # Bourne compatible functions. cat << \_LT_EOF >> "$cfgfile" # 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 () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -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 file func_basename () { func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } # 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 "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; esac } # sed scripts: my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^-[^=]*=//' # func_opt_split func_opt_split () { func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` } # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` } # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` } # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "$@"` } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } _LT_EOF esac case $lt_shell_append in yes) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$1+=\$2" } _LT_EOF ;; *) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$1=\$$1\$2" } _LT_EOF ;; esac sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) 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 dvbstreamer-2.1.0/autom4te.cache/output.1000066400000000000000000016001171217721213100202610ustar00rootroot00000000000000@%:@! /bin/sh @%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by GNU Autoconf 2.67 for dvbstreamer 2.0.0. @%:@ @%:@ @%:@ 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. 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 \$(( 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. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL exec "$CONFIG_SHELL" "$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 about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do 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 @S|@? 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 "@S|@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 @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) 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 @S|@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'" # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$lt_ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac ECHO=${lt_ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then # Yippee, $ECHO works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <<_LT_EOF $* _LT_EOF exit 0 fi # 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 if test -z "$lt_ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if { echo_test_string=`eval $cmd`; } 2>/dev/null && { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null then break fi done fi if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$ECHO" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. ECHO='print -r' elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. ECHO='printf %s\n' if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL ECHO="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. ECHO=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. lt_ECHO=$ECHO if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi 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=. LIB@&t@OBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='dvbstreamer' PACKAGE_TARNAME='dvbstreamer' PACKAGE_VERSION='2.0.0' PACKAGE_STRING='dvbstreamer 2.0.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' # 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 LIB@&t@OBJS DVBSTREAMER_PLUGINDIR PACKAGE_DOC_DIR NO_PREFIX_PACKAGE_DOC_DIR PACKAGE_DATA_DIR NO_PREFIX_PACKAGE_DATA_DIR ICONV_LIB GETTIME_LIB READLINE_TERMCAP ENABLE_FSTREAMER_FALSE ENABLE_FSTREAMER_TRUE ENABLE_DVB_FALSE ENABLE_DVB_TRUE ENABLE_ATSC_FALSE ENABLE_ATSC_TRUE OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL lt_ECHO RANLIB AR LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP SED host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL OBJDUMP DLLTOOL AS EGREP GREP CPP 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 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 DVBSTREAMER_MICRO DVBSTREAMER_MINOR DVBSTREAMER_MAJOR 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_dependency_tracking enable_static enable_shared with_pic enable_fast_install with_gnu_ld enable_libtool_lock enable_atsc enable_dvb enable_getaddrinfo enable_file_streamer ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # 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 dvbstreamer 2.0.0 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 @<:@@S|@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/dvbstreamer@:>@ --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 dvbstreamer 2.0.0:";; 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] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --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-libtool-lock avoid locking (might break parallel builds) --disable-atsc Disable ATSC support, only use this if you know you don't need ATSC (most DVB users) this will make the complied application a bit smaller, but won't make a big difference. --disable-dvb Disable DVB support, only use this if you know you don't need DVB (most ATSC users) this will make the complied application a bit smaller, but won't make a big difference. --disable-getaddrinfo Disable use of the getaddrinfo function, this is needed for IPv6 support but some C libraries don't support it fully. --enable-file-streamer Enable building fdvbstreamer to allow play back of captured TS files. 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@:>@ 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 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 the package provider. _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 dvbstreamer configure 2.0.0 generated by GNU Autoconf 2.67 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.@S|@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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_compile @%:@ ac_fn_c_try_link LINENO @%:@ ----------------------- @%:@ Try to link conftest.@S|@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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_link @%:@ ac_fn_c_try_cpp LINENO @%:@ ---------------------- @%:@ Try to preprocess conftest.@S|@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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_cpp @%:@ ac_fn_c_try_run LINENO @%:@ ---------------------- @%:@ Try to link conftest.@S|@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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_run @%:@ 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 "test \"\${$3+set}\"" = set; 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } @%:@ ac_fn_c_check_header_compile @%:@ 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 "test \"\${$3+set}\"" = set; 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } @%:@ ac_fn_c_check_func @%:@ ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES @%:@ ------------------------------------------------------- @%:@ Tests whether HEADER exists, giving a warning if it cannot be compiled using @%:@ the include files in INCLUDES and setting the cache variable VAR @%:@ accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval "test \"\${$3+set}\"" = set; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 @%:@include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } @%:@ ac_fn_c_check_header_mongrel 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 dvbstreamer $as_me 2.0.0, which was generated by GNU Autoconf 2.67. 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 DVBSTREAMER_MAJOR=2 DVBSTREAMER_MINOR=0 DVBSTREAMER_MICRO=0 cat >>confdefs.h <<_ACEOF @%:@define DVBSTREAMER_MAJOR $DVBSTREAMER_MAJOR _ACEOF cat >>confdefs.h <<_ACEOF @%:@define DVBSTREAMER_MINOR $DVBSTREAMER_MINOR _ACEOF cat >>confdefs.h <<_ACEOF @%:@define DVBSTREAMER_MICRO $DVBSTREAMER_MINOR _ACEOF cat >>confdefs.h <<_ACEOF @%:@define DVBSTREAMER_VERSION ((DVBSTREAMER_MAJOR<<24) | (DVBSTREAMER_MINOR<<16) | DVBSTREAMER_MICRO ) _ACEOF SPEC_VERSION=$DVBSTREAMER_MAJOR.$DVBSTREAMER_MINOR.$DVBSTREAMER_MICRO 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 test "${ac_cv_path_install+set}" = set; 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 test "${ac_cv_prog_STRIP+set}" = set; 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 test "${ac_cv_prog_ac_ct_STRIP+set}" = set; 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 test "${ac_cv_path_mkdir+set}" = set; 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 test "${ac_cv_prog_AWK+set}" = set; 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 "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; 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="dvbstreamer" VERSION=$SPEC_VERSION 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 -' ac_config_headers="$ac_config_headers config.h" 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 test "${ac_cv_objext+set}" = set; 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 test "${ac_cv_c_compiler_gnu+set}" = set; 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 test "${ac_cv_prog_cc_g+set}" = set; 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 test "${ac_cv_prog_cc_c89+set}" = set; 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 test "${am_cv_CC_dependencies_compiler_type+set}" = set; 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 library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } if test "${ac_cv_search_strerror+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$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 strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_strerror+set}" = set; then : break fi done if test "${ac_cv_search_strerror+set}" = set; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 $as_echo "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 test "${ac_cv_c_compiler_gnu+set}" = set; 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 test "${ac_cv_prog_cc_g+set}" = set; 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 test "${ac_cv_prog_cc_c89+set}" = set; 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 test "${am_cv_CC_dependencies_compiler_type+set}" = set; 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 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 test "${ac_cv_c_compiler_gnu+set}" = set; 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 test "${ac_cv_prog_cc_g+set}" = set; 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 test "${ac_cv_prog_cc_c89+set}" = set; 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 test "${am_cv_CC_dependencies_compiler_type+set}" = set; 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 am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc 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 test "${ac_cv_prog_CPP+set}" = set; 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 grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if test "${ac_cv_path_GREP+set}" = set; 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 test "${ac_cv_path_EGREP+set}" = set; 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 ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; 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 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 "test \"\${ac_cv_prog_cc_${ac_cc}_c_o+set}\"" = set; 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 CFLAGS="$CFLAGS -fno-strict-aliasing" 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.2.6b' macro_revision='1.3017' ltmain="$ac_aux_dir/ltmain.sh" # 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 test "${ac_cv_build+set}" = set; 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 test "${ac_cv_host+set}" = set; 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 { $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 test "${ac_cv_path_SED+set}" = set; 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 fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if test "${ac_cv_path_FGREP+set}" = set; 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 test "${lt_cv_path_LD+set}" = set; 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 test "${lt_cv_prog_gnu_ld+set}" = set; 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 test "${lt_cv_path_NM+set}" = set; 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 "$ac_tool_prefix"; then for ac_prog in "dumpbin -symbols" "link -dump -symbols" 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 test "${ac_cv_prog_DUMPBIN+set}" = set; 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 -symbols" "link -dump -symbols" 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 test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; 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 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 test "${lt_cv_nm_interface+set}" = set; 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:__oline__: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:__oline__: 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 test "${lt_cv_sys_max_cmd_len+set}" = set; 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; ;; 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"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ = "XX$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"}, \ = c,a/b,, \ && 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 for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if test "${lt_cv_ld_reload_flag+set}" = set; 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 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 test "${ac_cv_prog_OBJDUMP+set}" = set; 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 test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; 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 test "${lt_cv_deplibs_check_method+set}" = set; 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. if ( 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 lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' 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 ;; 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]) 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_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}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AR+set}" = set; 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}ar" $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 fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_AR+set}" = set; 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="ar" $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 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 else AR="$ac_cv_prog_AR" fi test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru 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 test "${ac_cv_prog_STRIP+set}" = set; 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 test "${ac_cv_prog_ac_ct_STRIP+set}" = set; 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 test "${ac_cv_prog_RANLIB+set}" = set; 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 test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; 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 # 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 test "${lt_cv_sys_global_symbol_pipe+set}" = set; 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 # 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 #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. */ 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_save_LIBS="$LIBS" lt_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_save_LIBS" CFLAGS="$lt_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 @%:@ 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 __oline__ "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 test "${lt_cv_cc_needs_belf+set}" = set; 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" 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 test "${ac_cv_prog_DSYMUTIL+set}" = set; 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 test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; 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 test "${ac_cv_prog_NMEDIT+set}" = set; 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 test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; 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 test "${ac_cv_prog_LIPO+set}" = set; 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 test "${ac_cv_prog_ac_ct_LIPO+set}" = set; 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 test "${ac_cv_prog_OTOOL+set}" = set; 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 test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; 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 test "${ac_cv_prog_OTOOL64+set}" = set; 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 test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; 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 test "${lt_cv_apple_cc_single_mod+set}" = set; 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 test "${lt_cv_ld_exported_symbols_list+set}" = set; 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; } 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" != ":"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac # 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" = x""yes; then : cat >>confdefs.h <<_ACEOF @%:@define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=yes 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 test "${ac_cv_prog_AS+set}" = set; 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 test "${ac_cv_prog_ac_ct_AS+set}" = set; 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 test "${ac_cv_prog_DLLTOOL+set}" = set; 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 test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; 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 test "${ac_cv_prog_OBJDUMP+set}" = set; 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 test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; 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 @%:@ 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 @%:@ 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 test "${lt_cv_objdir+set}" = set; 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 # Sed substitution that helps us do robust quoting. It backslashifies # 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' # 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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "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 test "${lt_cv_path_MAGIC_CMD+set}" = set; 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 test "${lt_cv_path_MAGIC_CMD+set}" = set; 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* if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' { $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 test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; 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:__oline__: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:__oline__: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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= { $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 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' ;; 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 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' ;; pgcc* | pgf77* | pgf90* | pgf95*) # 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*) # IBM XL C 8.0/Fortran 10.1 on PPC lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Sun\ F*) # 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='' ;; 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*) 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@&t@ -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 $as_echo "$lt_prog_compiler_pic" >&6; } # # 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 test "${lt_cv_prog_compiler_pic_works+set}" = set; 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@&t@ -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:__oline__: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:__oline__: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 test "${lt_cv_prog_compiler_static_works+set}" = set; 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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/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 test "${lt_cv_prog_compiler_c_o+set}" = set; 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:__oline__: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:__oline__: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 test "${lt_cv_prog_compiler_c_o+set}" = set; 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:__oline__: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:__oline__: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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) link_all_deplibs=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = 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.9.1, 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 modify your PATH *** so that a non-GNU linker is found, and then restart. _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' 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/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' 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 ;; 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= 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; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # 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; $ECHO \"$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]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; 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; $ECHO \"$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*) # 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 $compiler_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 $compiler_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 $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' 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 $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 ;; 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 $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 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 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")) && (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. 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 } }' 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 "$aix_libpath"; then 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 "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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 $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; 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. 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 } }' 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 "$aix_libpath"; then 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 "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' 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. 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 `$ECHO "X$deplibs" | $Xsed -e '\''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' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='' 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=echo 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 -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 -fPIC ${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 -a "$with_gnu_ld" = no; then archive_cmds='$CC -shared -fPIC ${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 -a "$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 -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${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' ;; *) archive_cmds='$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 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 $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${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. 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) {} _ACEOF if ac_fn_c_try_link "$LINENO"; then : archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -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" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${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" && $ECHO "X-set_version $verstring" | $Xsed` -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} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${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" && $ECHO "X-set_version $verstring" | $Xsed` -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 "X-set_version $verstring" | $Xsed` -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 ${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 ${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; } $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 archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 $as_echo "$archive_cmds_need_lc" >&6; } ;; 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 lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then # 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 -e 's/;/ /g'` else lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # 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; } }'` sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` 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=`$ECHO "X$lib" | $Xsed -e '\''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,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) 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="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. 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 ;; 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 ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # 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 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' ;; 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 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 : 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 # 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;/^$/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 test "${ac_cv_lib_dl_dlopen+set}" = set; 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" = x""yes; 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" = x""yes; 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 test "${ac_cv_lib_dld_shl_load+set}" = set; 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" = x""yes; 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" = x""yes; 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 test "${ac_cv_lib_dl_dlopen+set}" = set; 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" = x""yes; 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 test "${ac_cv_lib_svld_dlopen+set}" = set; 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" = x""yes; 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 test "${ac_cv_lib_dld_dld_link+set}" = set; 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" = x""yes; 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 test "${lt_cv_dlopen_self+set}" = set; 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 __oline__ "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 void fnord() { int i=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; /* 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 test "${lt_cv_dlopen_self_static+set}" = set; 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 __oline__ "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 void fnord() { int i=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; /* 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: { $as_echo "$as_me:${as_lineno-$LINENO}: checking libdir name" >&5 $as_echo_n "checking libdir name... " >&6; } case $host in *-*-linux*) # Test if the compiler is 64bit echo 'int i;' > conftest.$ac_ext DVBSTREAMER_cv_cc_64bit_output=no 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 `"$MAGIC_CMD" conftest.$ac_objext` in *"ELF 64"*) DVBSTREAMER_cv_cc_64bit_output=yes ;; esac fi rm -rf conftest* ;; esac case $host_cpu:$DVBSTREAMER_cv_cc_64bit_output in powerpc64:yes | s390x:yes | sparc64:yes | x86_64:yes) DVBSTREAMER_LIBNAME="lib64" ;; *:*) DVBSTREAMER_LIBNAME="lib" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DVBSTREAMER_LIBNAME" >&5 $as_echo "$DVBSTREAMER_LIBNAME" >&6; } @%:@ Check whether --enable-atsc was given. if test "${enable_atsc+set}" = set; then : enableval=$enable_atsc; case "${enableval}" in yes) enable_atsc=true ;; no) enable_atsc=false ;; *) as_fn_error $? "bad value ${enableval} for --disable-atsc" "$LINENO" 5 ;; esac else enable_atsc=true fi @%:@ Check whether --enable-dvb was given. if test "${enable_dvb+set}" = set; then : enableval=$enable_dvb; case "${enableval}" in yes) enable_dvb=true ;; no) enable_dvb=false ;; *) as_fn_error $? "bad value ${enableval} for --disable-dvb" "$LINENO" 5 ;; esac else enable_dvb=true fi if test "${enable_dvb}" == "false"; then if test "${enable_atsc}" == "false"; then as_fn_error $? "Either ATSC or DVB needs to be enabled!" "$LINENO" 5 fi fi if test x$enable_atsc = xtrue; then ENABLE_ATSC_TRUE= ENABLE_ATSC_FALSE='#' else ENABLE_ATSC_TRUE='#' ENABLE_ATSC_FALSE= fi if test "${enable_atsc}" != "false"; then $as_echo "@%:@define ENABLE_ATSC 1" >>confdefs.h fi if test x$enable_dvb = xtrue; then ENABLE_DVB_TRUE= ENABLE_DVB_FALSE='#' else ENABLE_DVB_TRUE='#' ENABLE_DVB_FALSE= fi if test "${enable_dvb}" != "false"; then $as_echo "@%:@define ENABLE_DVB 1" >>confdefs.h fi @%:@ Check whether --enable-getaddrinfo was given. if test "${enable_getaddrinfo+set}" = set; then : enableval=$enable_getaddrinfo; case "${enableval}" in yes) use_getaddrinfo=true ;; no) use_getaddrinfo=false ;; *) as_fn_error $? "bad value ${enableval} for --disable-getaddrinfo" "$LINENO" 5 ;; esac else use_getaddrinfo=true fi if test "${use_getaddrinfo}" != "false"; then $as_echo "@%:@define USE_GETADDRINFO 1" >>confdefs.h fi @%:@ Check whether --enable-file-streamer was given. if test "${enable_file_streamer+set}" = set; then : enableval=$enable_file_streamer; case "${enableval}" in yes) enable_fstreamer=true ;; no) enable_fstreamer=false ;; *) as_fn_error $? "bad value ${enableval} for --enable-file-streamer" "$LINENO" 5 ;; esac else enable_fstreamer=false fi if test x$enable_fstreamer = xtrue; then ENABLE_FSTREAMER_TRUE= ENABLE_FSTREAMER_FALSE='#' else ENABLE_FSTREAMER_TRUE='#' ENABLE_FSTREAMER_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_libversion in -lsqlite3" >&5 $as_echo_n "checking for sqlite3_libversion in -lsqlite3... " >&6; } if test "${ac_cv_lib_sqlite3_sqlite3_libversion+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsqlite3 $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 sqlite3_libversion (); int main () { return sqlite3_libversion (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_sqlite3_sqlite3_libversion=yes else ac_cv_lib_sqlite3_sqlite3_libversion=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_sqlite3_sqlite3_libversion" >&5 $as_echo "$ac_cv_lib_sqlite3_sqlite3_libversion" >&6; } if test "x$ac_cv_lib_sqlite3_sqlite3_libversion" = x""yes; then : cat >>confdefs.h <<_ACEOF @%:@define HAVE_LIBSQLITE3 1 _ACEOF LIBS="-lsqlite3 $LIBS" 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 $? "sqlite3 not found See \`config.log' for more details" "$LINENO" 5 ; } fi LIBS="" ac_fn_c_check_header_mongrel "$LINENO" "readline/readline.h" "ac_cv_header_readline_readline_h" "$ac_includes_default" if test "x$ac_cv_header_readline_readline_h" = x""yes; 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 $? "readline header file not found See \`config.log' for more details" "$LINENO" 5 ; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for readline in -lreadline" >&5 $as_echo_n "checking for readline in -lreadline... " >&6; } if test "${ac_cv_lib_readline_readline+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lreadline -lncurses $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 readline (); int main () { return readline (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_readline_readline=yes else ac_cv_lib_readline_readline=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_readline_readline" >&5 $as_echo "$ac_cv_lib_readline_readline" >&6; } if test "x$ac_cv_lib_readline_readline" = x""yes; then : READLINE_TERMCAP="-lncurses" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for readline in -lreadline" >&5 $as_echo_n "checking for readline in -lreadline... " >&6; } if test "${ac_cv_lib_readline_readline+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lreadline -ltermcap $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 readline (); int main () { return readline (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_readline_readline=yes else ac_cv_lib_readline_readline=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_readline_readline" >&5 $as_echo "$ac_cv_lib_readline_readline" >&6; } if test "x$ac_cv_lib_readline_readline" = x""yes; then : READLINE_TERMCAP="-ltermcap" 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 $? "readline not found See \`config.log' for more details" "$LINENO" 5 ; } fi fi LIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 $as_echo_n "checking for library containing clock_gettime... " >&6; } if test "${ac_cv_search_clock_gettime+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$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 clock_gettime (); int main () { return clock_gettime (); ; return 0; } _ACEOF for ac_lib in '' rt; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_clock_gettime=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_clock_gettime+set}" = set; then : break fi done if test "${ac_cv_search_clock_gettime+set}" = set; then : else ac_cv_search_clock_gettime=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 $as_echo "$ac_cv_search_clock_gettime" >&6; } ac_res=$ac_cv_search_clock_gettime if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" GETTIME_LIB=$LIBS 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 $? "Failed to find a library defining clock_gettime See \`config.log' for more details" "$LINENO" 5 ; } fi LIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing iconv_open" >&5 $as_echo_n "checking for library containing iconv_open... " >&6; } if test "${ac_cv_search_iconv_open+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$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 iconv_open (); int main () { return iconv_open (); ; return 0; } _ACEOF for ac_lib in '' iconv; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_iconv_open=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_iconv_open+set}" = set; then : break fi done if test "${ac_cv_search_iconv_open+set}" = set; then : else ac_cv_search_iconv_open=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_iconv_open" >&5 $as_echo "$ac_cv_search_iconv_open" >&6; } ac_res=$ac_cv_search_iconv_open if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" ICONV_LIB=$LIBS else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing libiconv_open" >&5 $as_echo_n "checking for library containing libiconv_open... " >&6; } if test "${ac_cv_search_libiconv_open+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$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 libiconv_open (); int main () { return libiconv_open (); ; return 0; } _ACEOF for ac_lib in '' iconv; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_libiconv_open=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_libiconv_open+set}" = set; then : break fi done if test "${ac_cv_search_libiconv_open+set}" = set; then : else ac_cv_search_libiconv_open=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_libiconv_open" >&5 $as_echo "$ac_cv_search_libiconv_open" >&6; } ac_res=$ac_cv_search_libiconv_open if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" ICONV_LIB=$LIBS 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 $? "Failed to find a library defining iconv_open See \`config.log' for more details" "$LINENO" 5 ; } fi fi if test "x${ICONV_LIB}" == "x"; then $as_echo "@%:@define ICONV_INPUT_CAST char **" >>confdefs.h else $as_echo "@%:@define ICONV_INPUT_CAST const char **" >>confdefs.h fi LIBS="" ac_fn_c_check_header_mongrel "$LINENO" "ev.h" "ac_cv_header_ev_h" "$ac_includes_default" if test "x$ac_cv_header_ev_h" = x""yes; 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 $? "libev header file not found See \`config.log' for more details" "$LINENO" 5 ; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ev_loop in -lev" >&5 $as_echo_n "checking for ev_loop in -lev... " >&6; } if test "${ac_cv_lib_ev_ev_loop+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lev $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 ev_loop (); int main () { return ev_loop (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ev_ev_loop=yes else ac_cv_lib_ev_ev_loop=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_ev_ev_loop" >&5 $as_echo "$ac_cv_lib_ev_ev_loop" >&6; } if test "x$ac_cv_lib_ev_ev_loop" = x""yes; then : cat >>confdefs.h <<_ACEOF @%:@define HAVE_LIBEV 1 _ACEOF LIBS="-lev $LIBS" 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 $? "libev not found See \`config.log' for more details" "$LINENO" 5 ; } fi LIBS="" ac_fn_c_check_header_mongrel "$LINENO" "yaml.h" "ac_cv_header_yaml_h" "$ac_includes_default" if test "x$ac_cv_header_yaml_h" = x""yes; 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 $? "libyaml header file not found See \`config.log' for more details" "$LINENO" 5 ; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for yaml_get_version_string in -lyaml" >&5 $as_echo_n "checking for yaml_get_version_string in -lyaml... " >&6; } if test "${ac_cv_lib_yaml_yaml_get_version_string+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lyaml $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 yaml_get_version_string (); int main () { return yaml_get_version_string (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_yaml_yaml_get_version_string=yes else ac_cv_lib_yaml_yaml_get_version_string=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_yaml_yaml_get_version_string" >&5 $as_echo "$ac_cv_lib_yaml_yaml_get_version_string" >&6; } if test "x$ac_cv_lib_yaml_yaml_get_version_string" = x""yes; then : cat >>confdefs.h <<_ACEOF @%:@define HAVE_LIBYAML 1 _ACEOF LIBS="-lyaml $LIBS" 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 $? "libyaml not found See \`config.log' for more details" "$LINENO" 5 ; } fi LIBS="" ac_fn_c_check_header_mongrel "$LINENO" "ltdl.h" "ac_cv_header_ltdl_h" "$ac_includes_default" if test "x$ac_cv_header_ltdl_h" = x""yes; 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 $? "libltdl (libtool) header file not found See \`config.log' for more details" "$LINENO" 5 ; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lt_dlinit in -lltdl" >&5 $as_echo_n "checking for lt_dlinit in -lltdl... " >&6; } if test "${ac_cv_lib_ltdl_lt_dlinit+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lltdl $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 lt_dlinit (); int main () { return lt_dlinit (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ltdl_lt_dlinit=yes else ac_cv_lib_ltdl_lt_dlinit=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_ltdl_lt_dlinit" >&5 $as_echo "$ac_cv_lib_ltdl_lt_dlinit" >&6; } if test "x$ac_cv_lib_ltdl_lt_dlinit" = x""yes; then : cat >>confdefs.h <<_ACEOF @%:@define HAVE_LIBLTDL 1 _ACEOF LIBS="-lltdl $LIBS" 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 $? "libltdl (libtool) not found See \`config.log' for more details" "$LINENO" 5 ; } fi LIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for variadic cpp macros" >&5 $as_echo_n "checking for variadic cpp macros... " >&6; } if test "${ac_cv_cpp_variadic_macros+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #define a(b,c...) printf(b,##c) int main () { a("foo");a("%s","bar");a("%s%s","baz","quux"); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_cpp_variadic_macros=yes else ac_cv_cpp_variadic_macros=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cpp_variadic_macros" >&5 $as_echo "$ac_cv_cpp_variadic_macros" >&6; } if test "${ac_cv_cpp_variadic_macros}" != "no"; then $as_echo "@%:@define HAVE_VARIADIC_MACROS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FE_CAN_2G_MODULATION" >&5 $as_echo_n "checking for FE_CAN_2G_MODULATION... " >&6; } if test "${ac_cv_fe_can_2g_modulation+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int a = FE_CAN_2G_MODULATION; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_fe_can_2g_modulation=yes else ac_cv_fe_can_2g_modulation=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fe_can_2g_modulation" >&5 $as_echo "$ac_cv_fe_can_2g_modulation" >&6; } if test "${ac_cv_fe_can_2g_modulation}" != "no"; then $as_echo "@%:@define HAVE_FE_CAN_2G_MODULATION 1" >>confdefs.h fi packagesrcdir=`cd $srcdir && pwd` if test "x${prefix}" = "xNONE"; then packageprefix=${ac_default_prefix} else packageprefix=${prefix} fi packagedatadir=share packagedocdir=doc/${PACKAGE} NO_PREFIX_PACKAGE_DATA_DIR="${packagedatadir}" PACKAGE_DATA_DIR="${packageprefix}/${packagedatadir}" NO_PREFIX_PACKAGE_DOC_DIR="${packagedocdir}" PACKAGE_DOC_DIR="${packageprefix}/${packagedocdir}" cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_DATA_DIR "${packageprefix}/${packagedatadir}" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_DOC_DIR "${packageprefix}/${packagedocdir}" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_SOURCE_DIR "${packagesrcdir}" _ACEOF if test "x$prefix" = xNONE; then prefix="${ac_default_prefix}" fi if test "x$exec_prefix" = xNONE; then exec_prefix='${prefix}' fi DVBSTREAMER_PLUGINDIR="$libdir/dvbstreamer/plugins" eval DVBSTREAMER_REL_PLUGINDIR="$DVBSTREAMER_PLUGINDIR" DVBSTREAMER_REL_PLUGINDIR=`eval echo "$DVBSTREAMER_REL_PLUGINDIR" | sed -e "s,^${prefix}/,,"` eval DVBSTREAMER_PLUGINPATH=`eval echo "$DVBSTREAMER_PLUGINDIR"` cat >>confdefs.h <<_ACEOF @%:@define DVBSTREAMER_PLUGINDIR "$DVBSTREAMER_PLUGINPATH" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define DVBSTREAMER_REL_PLUGINDIR "$DVBSTREAMER_REL_PLUGINDIR" _ACEOF ac_config_files="$ac_config_files Makefile include/Makefile include/dvbpsi/Makefile src/dvbpsi/Makefile src/Makefile src/plugins/Makefile" 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 test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file 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 : $LIB@&t@OBJS; 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 LIB@&t@OBJS=$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 "${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 "${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 "${ENABLE_ATSC_TRUE}" && test -z "${ENABLE_ATSC_FALSE}"; then as_fn_error $? "conditional \"ENABLE_ATSC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_DVB_TRUE}" && test -z "${ENABLE_DVB_FALSE}"; then as_fn_error $? "conditional \"ENABLE_DVB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_FSTREAMER_TRUE}" && test -z "${ENABLE_FSTREAMER_FALSE}"; then as_fn_error $? "conditional \"ENABLE_FSTREAMER\" 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. 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 @S|@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 @S|@? 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 @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) 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 "@S|@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 dvbstreamer $as_me 2.0.0, which was generated by GNU Autoconf 2.67. 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 the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ dvbstreamer config.status 2.0.0 configured by $0, generated by GNU Autoconf 2.67, 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' macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # Quote evaled strings. for var in SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ deplibs_check_method \ file_magic_cmd \ AR \ AR_FLAGS \ 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 \ SHELL \ ECHO \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ 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 \ fix_srcfile_path \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$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 \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec; do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Fix-up fallback echo if it was mangled by the above quoting rules. case \$lt_ECHO in *'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` ;; esac 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" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "include/dvbpsi/Makefile") CONFIG_FILES="$CONFIG_FILES include/dvbpsi/Makefile" ;; "src/dvbpsi/Makefile") CONFIG_FILES="$CONFIG_FILES src/dvbpsi/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/plugins/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/Makefile" ;; *) 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= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$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 -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 # 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 {' >"$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 >>"\$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 >>"\$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 < "$tmp/subs1.awk" > "$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 >"$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_t=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_t"; 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="$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 >"$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 "$tmp/subs.awk" >$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' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$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 "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$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 "$tmp/defines.awk"' "$ac_file_inputs" } >"$tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$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 "$tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$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 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 # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Assembler program. AS=$AS # DLL creation program. DLLTOOL=$DLLTOOL # Object dumper program. OBJDUMP=$OBJDUMP # Whether or not to build static libraries. build_old_libs=$enable_static # 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 # 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 # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # 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 # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # 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 # 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 # The name of the directory that contains temporary libtool files. objdir=$objdir # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that does not interpret backslashes. ECHO=$lt_ECHO # 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 # 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 # 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 # 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 # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path=$lt_fix_srcfile_path # 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 # 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 '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) case $xsi_shell in yes) cat << \_LT_EOF >> "$cfgfile" # 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 () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac } # func_basename file func_basename () { func_basename_result="${1##*/}" } # 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 () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}" } # 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_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}"} } # func_opt_split func_opt_split () { func_opt_split_opt=${1%%=*} func_opt_split_arg=${1#*=} } # func_lo2o object func_lo2o () { case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac } # func_xform libobj-or-source func_xform () { func_xform_result=${1%.*}.lo } # func_arith arithmetic-term... func_arith () { func_arith_result=$(( $* )) } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=${#1} } _LT_EOF ;; *) # Bourne compatible functions. cat << \_LT_EOF >> "$cfgfile" # 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 () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -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 file func_basename () { func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } # 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 "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; esac } # sed scripts: my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^-[^=]*=//' # func_opt_split func_opt_split () { func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` } # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` } # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` } # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "$@"` } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } _LT_EOF esac case $lt_shell_append in yes) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$1+=\$2" } _LT_EOF ;; *) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$1=\$$1\$2" } _LT_EOF ;; esac sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) 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 dvbstreamer-2.1.0/autom4te.cache/requests000066400000000000000000000324241217721213100204340ustar00rootroot00000000000000# This file was generated by Autom4te Thu Aug 5 21:29:16 UTC 2010. # It contains the lists of macros which have been traced. # It can be safely removed. @request = ( bless( [ '0', 1, [ '/usr/share/autoconf' ], [ '/usr/share/autoconf/autoconf/autoconf.m4f', '/usr/share/aclocal/argz.m4', '/usr/share/aclocal/libtool.m4', '/usr/share/aclocal/ltdl.m4', '/usr/share/aclocal/ltoptions.m4', '/usr/share/aclocal/ltsugar.m4', '/usr/share/aclocal/ltversion.m4', '/usr/share/aclocal/lt~obsolete.m4', '/usr/share/aclocal-1.11/amversion.m4', '/usr/share/aclocal-1.11/auxdir.m4', '/usr/share/aclocal-1.11/ccstdc.m4', '/usr/share/aclocal-1.11/cond.m4', '/usr/share/aclocal-1.11/depend.m4', '/usr/share/aclocal-1.11/depout.m4', '/usr/share/aclocal-1.11/header.m4', '/usr/share/aclocal-1.11/init.m4', '/usr/share/aclocal-1.11/install-sh.m4', '/usr/share/aclocal-1.11/lead-dot.m4', '/usr/share/aclocal-1.11/make.m4', '/usr/share/aclocal-1.11/minuso.m4', '/usr/share/aclocal-1.11/missing.m4', '/usr/share/aclocal-1.11/mkdirp.m4', '/usr/share/aclocal-1.11/options.m4', '/usr/share/aclocal-1.11/runlog.m4', '/usr/share/aclocal-1.11/sanity.m4', '/usr/share/aclocal-1.11/silent.m4', '/usr/share/aclocal-1.11/strip.m4', '/usr/share/aclocal-1.11/substnot.m4', '/usr/share/aclocal-1.11/tar.m4', 'acinclude.m4', 'configure.in' ], { 'AM_ENABLE_STATIC' => 1, 'AC_LIBTOOL_LANG_RC_CONFIG' => 1, '_LT_AC_SHELL_INIT' => 1, 'AC_DEFUN' => 1, '_LT_AC_LANG_CXX_CONFIG' => 1, 'AC_PROG_LIBTOOL' => 1, 'AM_PROG_MKDIR_P' => 1, 'AM_AUTOMAKE_VERSION' => 1, 'AM_SUBST_NOTMAKE' => 1, 'AM_MISSING_PROG' => 1, 'AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH' => 1, '_LT_AC_LANG_C_CONFIG' => 1, 'AM_PROG_INSTALL_STRIP' => 1, '_m4_warn' => 1, 'AC_LIBTOOL_OBJDIR' => 1, 'gl_FUNC_ARGZ' => 1, 'LTOBSOLETE_VERSION' => 1, 'AM_SANITY_CHECK' => 1, 'AC_LIBTOOL_LANG_GCJ_CONFIG' => 1, 'AC_LIBTOOL_PROG_COMPILER_PIC' => 1, 'LT_LIB_M' => 1, '_LT_AC_CHECK_DLFCN' => 1, 'AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE' => 1, 'LTSUGAR_VERSION' => 1, '_LT_PROG_LTMAIN' => 1, 'LT_SYS_SYMBOL_USCORE' => 1, '_AM_PROG_TAR' => 1, 'AC_LIBTOOL_GCJ' => 1, 'LT_SYS_DLOPEN_DEPLIBS' => 1, 'LT_FUNC_DLSYM_USCORE' => 1, '_LT_AC_LANG_F77' => 1, 'AC_LIBTOOL_CONFIG' => 1, '_AM_SUBST_NOTMAKE' => 1, 'AC_LTDL_DLLIB' => 1, '_AM_AUTOCONF_VERSION' => 1, 'AM_DISABLE_SHARED' => 1, '_LTDL_SETUP' => 1, '_LT_AC_LANG_CXX' => 1, 'AM_PROG_LIBTOOL' => 1, 'AC_LIB_LTDL' => 1, '_LT_AC_FILE_LTDLL_C' => 1, 'AM_PROG_LD' => 1, 'AU_DEFUN' => 1, 'AC_PROG_NM' => 1, 'AC_LIBTOOL_DLOPEN' => 1, 'AC_PROG_LD' => 1, 'AC_PROG_LD_GNU' => 1, 'AC_ENABLE_FAST_INSTALL' => 1, 'AC_LIBTOOL_FC' => 1, 'LTDL_CONVENIENCE' => 1, '_AM_SET_OPTION' => 1, 'AC_LTDL_PREOPEN' => 1, '_LT_LINKER_BOILERPLATE' => 1, 'AC_LIBTOOL_LANG_CXX_CONFIG' => 1, 'AC_LIBTOOL_PROG_CC_C_O' => 1, 'gl_PREREQ_ARGZ' => 1, 'LT_SUPPORTED_TAG' => 1, 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, 'LT_PROG_RC' => 1, 'LT_SYS_MODULE_EXT' => 1, 'AC_DEFUN_ONCE' => 1, '_LT_AC_LANG_GCJ' => 1, 'AC_LTDL_OBJDIR' => 1, 'fp_PROG_CC_STDC' => 1, '_LT_PATH_TOOL_PREFIX' => 1, 'AC_LIBTOOL_RC' => 1, 'AM_SILENT_RULES' => 1, 'AC_DISABLE_FAST_INSTALL' => 1, '_LT_AC_PROG_ECHO_BACKSLASH' => 1, '_LT_AC_SYS_LIBPATH_AIX' => 1, '_LT_AC_TRY_DLOPEN_SELF' => 1, 'include' => 1, 'LT_AC_PROG_SED' => 1, 'AM_ENABLE_SHARED' => 1, 'LTDL_INSTALLABLE' => 1, '_LT_AC_LANG_GCJ_CONFIG' => 1, 'AC_ENABLE_SHARED' => 1, 'AC_ENABLE_STATIC' => 1, 'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1, 'AM_PROG_CC_C_O' => 1, '_LT_AC_TAGVAR' => 1, 'AC_LIBTOOL_LANG_F77_CONFIG' => 1, 'AM_CONDITIONAL' => 1, 'LT_LIB_DLLOAD' => 1, 'LTDL_INIT' => 1, 'LTVERSION_VERSION' => 1, 'AM_PROG_INSTALL_SH' => 1, 'm4_include' => 1, 'AC_PROG_EGREP' => 1, '_AC_AM_CONFIG_HEADER_HOOK' => 1, 'AC_PATH_MAGIC' => 1, 'AC_LTDL_SYSSEARCHPATH' => 1, 'AM_MAKE_INCLUDE' => 1, 'LT_CMD_MAX_LEN' => 1, '_LT_AC_TAGCONFIG' => 1, 'm4_pattern_forbid' => 1, '_LT_LINKER_OPTION' => 1, 'AC_LIBTOOL_COMPILER_OPTION' => 1, 'AC_DISABLE_SHARED' => 1, '_LT_COMPILER_BOILERPLATE' => 1, 'AC_LIBTOOL_WIN32_DLL' => 1, 'AC_LIBTOOL_SETUP' => 1, 'AC_PROG_LD_RELOAD_FLAG' => 1, 'AC_LTDL_DLSYM_USCORE' => 1, 'AM_MISSING_HAS_RUN' => 1, 'LT_LANG' => 1, 'LT_SYS_DLSEARCH_PATH' => 1, 'LT_CONFIG_LTDL_DIR' => 1, 'AC_LIBTOOL_DLOPEN_SELF' => 1, 'LT_OUTPUT' => 1, 'AC_LIBTOOL_PROG_LD_SHLIBS' => 1, 'AC_WITH_LTDL' => 1, 'AC_LIBTOOL_LINKER_OPTION' => 1, 'LT_AC_PROG_RC' => 1, 'AC_LIBTOOL_CXX' => 1, 'LT_INIT' => 1, 'LT_AC_PROG_GCJ' => 1, 'LT_SYS_DLOPEN_SELF' => 1, 'AM_DEP_TRACK' => 1, 'AM_DISABLE_STATIC' => 1, 'AM_CONFIG_HEADER' => 1, '_AC_PROG_LIBTOOL' => 1, 'AM_PROG_CC_STDC' => 1, '_AM_IF_OPTION' => 1, 'AC_PATH_TOOL_PREFIX' => 1, 'm4_pattern_allow' => 1, 'AC_LIBTOOL_F77' => 1, 'AM_SET_LEADING_DOT' => 1, 'LT_AC_PROG_EGREP' => 1, '_AM_DEPENDENCIES' => 1, 'AC_LIBTOOL_LANG_C_CONFIG' => 1, 'LTOPTIONS_VERSION' => 1, '_LT_AC_SYS_COMPILER' => 1, 'AM_PROG_NM' => 1, 'AC_LIBLTDL_CONVENIENCE' => 1, 'AC_DEPLIBS_CHECK_METHOD' => 1, 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, 'AC_LIBLTDL_INSTALLABLE' => 1, 'AC_LTDL_ENABLE_INSTALL' => 1, 'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1, 'LT_PROG_GCJ' => 1, 'AM_INIT_AUTOMAKE' => 1, 'AC_DISABLE_STATIC' => 1, 'LT_PATH_NM' => 1, 'AC_LTDL_SHLIBEXT' => 1, '_LT_AC_LOCK' => 1, '_LT_AC_LANG_RC_CONFIG' => 1, 'LT_SYS_MODULE_PATH' => 1, 'AC_LIBTOOL_POSTDEP_PREDEP' => 1, 'LT_WITH_LTDL' => 1, 'AC_LTDL_SHLIBPATH' => 1, 'AM_AUX_DIR_EXPAND' => 1, '_LT_AC_LANG_F77_CONFIG' => 1, 'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1, '_AM_SET_OPTIONS' => 1, '_LT_COMPILER_OPTION' => 1, '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, 'AM_RUN_LOG' => 1, 'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1, 'AC_LTDL_SYS_DLOPEN_DEPLIBS' => 1, 'AC_LIBTOOL_PICMODE' => 1, 'LT_PATH_LD' => 1, 'AC_CHECK_LIBM' => 1, 'AC_LIBTOOL_SYS_LIB_STRIP' => 1, '_AM_MANGLE_OPTION' => 1, 'AC_LTDL_SYMBOL_USCORE' => 1, 'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1, 'AM_SET_DEPDIR' => 1, '_LT_CC_BASENAME' => 1, '_LT_LIBOBJ' => 1 } ], 'Autom4te::Request' ), bless( [ '1', 1, [ '/usr/share/autoconf' ], [ '/usr/share/autoconf/autoconf/autoconf.m4f', 'aclocal.m4', 'configure.in' ], { '_LT_AC_TAGCONFIG' => 1, 'AM_PROG_F77_C_O' => 1, 'AC_INIT' => 1, 'm4_pattern_forbid' => 1, '_AM_COND_IF' => 1, 'AC_CANONICAL_TARGET' => 1, 'AC_SUBST' => 1, 'AC_CONFIG_LIBOBJ_DIR' => 1, 'AC_FC_SRCEXT' => 1, 'AC_CANONICAL_HOST' => 1, 'AC_PROG_LIBTOOL' => 1, 'AM_INIT_AUTOMAKE' => 1, 'AC_CONFIG_SUBDIRS' => 1, 'AM_AUTOMAKE_VERSION' => 1, 'LT_CONFIG_LTDL_DIR' => 1, 'AC_REQUIRE_AUX_FILE' => 1, 'AC_CONFIG_LINKS' => 1, 'm4_sinclude' => 1, 'LT_SUPPORTED_TAG' => 1, 'AM_MAINTAINER_MODE' => 1, 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, '_m4_warn' => 1, 'AM_PROG_CXX_C_O' => 1, '_AM_COND_ENDIF' => 1, 'AM_ENABLE_MULTILIB' => 1, 'AM_SILENT_RULES' => 1, 'AC_CONFIG_FILES' => 1, 'include' => 1, 'LT_INIT' => 1, 'AM_GNU_GETTEXT' => 1, 'AC_LIBSOURCE' => 1, 'AM_PROG_FC_C_O' => 1, 'AC_CANONICAL_BUILD' => 1, 'AC_FC_FREEFORM' => 1, 'AH_OUTPUT' => 1, '_AM_SUBST_NOTMAKE' => 1, 'AC_CONFIG_AUX_DIR' => 1, 'sinclude' => 1, 'AM_PROG_CC_C_O' => 1, 'm4_pattern_allow' => 1, 'AC_CANONICAL_SYSTEM' => 1, 'AM_CONDITIONAL' => 1, 'AC_CONFIG_HEADERS' => 1, 'AC_DEFINE_TRACE_LITERAL' => 1, 'm4_include' => 1, '_AM_COND_ELSE' => 1, 'AC_SUBST_TRACE' => 1 } ], 'Autom4te::Request' ) ); dvbstreamer-2.1.0/autom4te.cache/traces.0000066400000000000000000003257571217721213100202160ustar00rootroot00000000000000m4trace:/usr/share/aclocal/argz.m4:12: -1- AC_DEFUN([gl_FUNC_ARGZ], [gl_PREREQ_ARGZ AC_CHECK_HEADERS([argz.h], [], [], [AC_INCLUDES_DEFAULT]) AC_CHECK_TYPES([error_t], [], [AC_DEFINE([error_t], [int], [Define to a type to use for `error_t' if it is not otherwise available.]) AC_DEFINE([__error_t_defined], [1], [Define so that glibc/gnulib argp.h does not typedef error_t.])], [#if defined(HAVE_ARGZ_H) # include #endif]) ARGZ_H= AC_CHECK_FUNCS([argz_add argz_append argz_count argz_create_sep argz_insert \ argz_next argz_stringify], [], [ARGZ_H=argz.h; AC_LIBOBJ([argz])]) dnl if have system argz functions, allow forced use of dnl libltdl-supplied implementation (and default to do so dnl on "known bad" systems). Could use a runtime check, but dnl (a) detecting malloc issues is notoriously unreliable dnl (b) only known system that declares argz functions, dnl provides them, yet they are broken, is cygwin dnl releases prior to 16-Mar-2007 (1.5.24 and earlier) dnl So, it's more straightforward simply to special case dnl this for known bad systems. AS_IF([test -z "$ARGZ_H"], [AC_CACHE_CHECK( [if argz actually works], [lt_cv_sys_argz_works], [[case $host_os in #( *cygwin*) lt_cv_sys_argz_works=no if test "$cross_compiling" != no; then lt_cv_sys_argz_works="guessing no" else lt_sed_extract_leading_digits='s/^\([0-9\.]*\).*/\1/' save_IFS=$IFS IFS=-. set x `uname -r | sed -e "$lt_sed_extract_leading_digits"` IFS=$save_IFS lt_os_major=${2-0} lt_os_minor=${3-0} lt_os_micro=${4-0} if test "$lt_os_major" -gt 1 \ || { test "$lt_os_major" -eq 1 \ && { test "$lt_os_minor" -gt 5 \ || { test "$lt_os_minor" -eq 5 \ && test "$lt_os_micro" -gt 24; }; }; }; then lt_cv_sys_argz_works=yes fi fi ;; #( *) lt_cv_sys_argz_works=yes ;; esac]]) AS_IF([test $lt_cv_sys_argz_works = yes], [AC_DEFINE([HAVE_WORKING_ARGZ], 1, [This value is set to 1 to indicate that the system argz facility works])], [ARGZ_H=argz.h AC_LIBOBJ([argz])])]) AC_SUBST([ARGZ_H]) ]) m4trace:/usr/share/aclocal/argz.m4:79: -1- AC_DEFUN([gl_PREREQ_ARGZ], [:]) m4trace:/usr/share/aclocal/libtool.m4:67: -1- AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT 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 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]) ]) m4trace:/usr/share/aclocal/libtool.m4:102: -1- AU_DEFUN([AC_PROG_LIBTOOL], [m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) m4trace:/usr/share/aclocal/libtool.m4:102: -1- AC_DEFUN([AC_PROG_LIBTOOL], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_LIBTOOL' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) m4trace:/usr/share/aclocal/libtool.m4:103: -1- AU_DEFUN([AM_PROG_LIBTOOL], [m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) m4trace:/usr/share/aclocal/libtool.m4:103: -1- AC_DEFUN([AM_PROG_LIBTOOL], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_LIBTOOL' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) m4trace:/usr/share/aclocal/libtool.m4:562: -1- AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) cat >"$CONFIG_LT" <<_LTEOF #! $SHELL # Generated by $as_me. # Run this file to recreate a libtool stub with the current configuration. lt_cl_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 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) 2008 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. if test "$no_create" != yes; then 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) fi ]) m4trace:/usr/share/aclocal/libtool.m4:757: -1- AC_DEFUN([LT_SUPPORTED_TAG], []) m4trace:/usr/share/aclocal/libtool.m4:768: -1- 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 ]) m4trace:/usr/share/aclocal/libtool.m4:830: -1- AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) m4trace:/usr/share/aclocal/libtool.m4:830: -1- AC_DEFUN([AC_LIBTOOL_CXX], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_CXX' is obsolete. You should run autoupdate.])dnl LT_LANG(C++)]) m4trace:/usr/share/aclocal/libtool.m4:831: -1- AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) m4trace:/usr/share/aclocal/libtool.m4:831: -1- AC_DEFUN([AC_LIBTOOL_F77], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_F77' is obsolete. You should run autoupdate.])dnl LT_LANG(Fortran 77)]) m4trace:/usr/share/aclocal/libtool.m4:832: -1- AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) m4trace:/usr/share/aclocal/libtool.m4:832: -1- AC_DEFUN([AC_LIBTOOL_FC], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_FC' is obsolete. You should run autoupdate.])dnl LT_LANG(Fortran)]) m4trace:/usr/share/aclocal/libtool.m4:833: -1- AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) m4trace:/usr/share/aclocal/libtool.m4:833: -1- AC_DEFUN([AC_LIBTOOL_GCJ], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_GCJ' is obsolete. You should run autoupdate.])dnl LT_LANG(Java)]) m4trace:/usr/share/aclocal/libtool.m4:1402: -1- 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:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 ]) m4trace:/usr/share/aclocal/libtool.m4:1444: -1- AU_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [m4_if($#, 0, [_LT_COMPILER_OPTION], [_LT_COMPILER_OPTION($@)])]) m4trace:/usr/share/aclocal/libtool.m4:1444: -1- AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_COMPILER_OPTION' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [_LT_COMPILER_OPTION], [_LT_COMPILER_OPTION($@)])]) m4trace:/usr/share/aclocal/libtool.m4:1453: -1- 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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/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 ]) m4trace:/usr/share/aclocal/libtool.m4:1488: -1- AU_DEFUN([AC_LIBTOOL_LINKER_OPTION], [m4_if($#, 0, [_LT_LINKER_OPTION], [_LT_LINKER_OPTION($@)])]) m4trace:/usr/share/aclocal/libtool.m4:1488: -1- AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_LINKER_OPTION' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [_LT_LINKER_OPTION], [_LT_LINKER_OPTION($@)])]) m4trace:/usr/share/aclocal/libtool.m4:1495: -1- 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; ;; 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"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ = "XX$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?]) ]) m4trace:/usr/share/aclocal/libtool.m4:1623: -1- AU_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [m4_if($#, 0, [LT_CMD_MAX_LEN], [LT_CMD_MAX_LEN($@)])]) m4trace:/usr/share/aclocal/libtool.m4:1623: -1- AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_SYS_MAX_CMD_LEN' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_CMD_MAX_LEN], [LT_CMD_MAX_LEN($@)])]) m4trace:/usr/share/aclocal/libtool.m4:1724: -1- 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]) ]) m4trace:/usr/share/aclocal/libtool.m4:1841: -1- AU_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [m4_if($#, 0, [LT_SYS_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF($@)])]) m4trace:/usr/share/aclocal/libtool.m4:1841: -1- AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_DLOPEN_SELF' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_SYS_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF($@)])]) m4trace:/usr/share/aclocal/libtool.m4:2741: -1- 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 ]) m4trace:/usr/share/aclocal/libtool.m4:2803: -1- AU_DEFUN([AC_PATH_TOOL_PREFIX], [m4_if($#, 0, [_LT_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX($@)])]) m4trace:/usr/share/aclocal/libtool.m4:2803: -1- AC_DEFUN([AC_PATH_TOOL_PREFIX], [AC_DIAGNOSE([obsolete], [The macro `AC_PATH_TOOL_PREFIX' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [_LT_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX($@)])]) m4trace:/usr/share/aclocal/libtool.m4:2826: -1- 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 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 | 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. AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) 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:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:__oline__: $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:__oline__: 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*]) ]) m4trace:/usr/share/aclocal/libtool.m4:3257: -1- AU_DEFUN([AM_PROG_NM], [m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) m4trace:/usr/share/aclocal/libtool.m4:3257: -1- AC_DEFUN([AM_PROG_NM], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_NM' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) m4trace:/usr/share/aclocal/libtool.m4:3258: -1- AU_DEFUN([AC_PROG_NM], [m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) m4trace:/usr/share/aclocal/libtool.m4:3258: -1- AC_DEFUN([AC_PROG_NM], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_NM' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) m4trace:/usr/share/aclocal/libtool.m4:3267: -1- AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cygwin* | *-*-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]) ]) m4trace:/usr/share/aclocal/libtool.m4:3286: -1- AU_DEFUN([AC_CHECK_LIBM], [m4_if($#, 0, [LT_LIB_M], [LT_LIB_M($@)])]) m4trace:/usr/share/aclocal/libtool.m4:3286: -1- AC_DEFUN([AC_CHECK_LIBM], [AC_DIAGNOSE([obsolete], [The macro `AC_CHECK_LIBM' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_LIB_M], [LT_LIB_M($@)])]) m4trace:/usr/share/aclocal/libtool.m4:6987: -1- 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 ]) m4trace:/usr/share/aclocal/libtool.m4:6996: -1- AU_DEFUN([LT_AC_PROG_GCJ], [m4_if($#, 0, [LT_PROG_GCJ], [LT_PROG_GCJ($@)])]) m4trace:/usr/share/aclocal/libtool.m4:6996: -1- AC_DEFUN([LT_AC_PROG_GCJ], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_GCJ' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_PROG_GCJ], [LT_PROG_GCJ($@)])]) m4trace:/usr/share/aclocal/libtool.m4:7003: -1- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) m4trace:/usr/share/aclocal/libtool.m4:7008: -1- AU_DEFUN([LT_AC_PROG_RC], [m4_if($#, 0, [LT_PROG_RC], [LT_PROG_RC($@)])]) m4trace:/usr/share/aclocal/libtool.m4:7008: -1- AC_DEFUN([LT_AC_PROG_RC], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_RC' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_PROG_RC], [LT_PROG_RC($@)])]) m4trace:/usr/share/aclocal/libtool.m4:7119: -1- AU_DEFUN([LT_AC_PROG_SED], [m4_if($#, 0, [AC_PROG_SED], [AC_PROG_SED($@)])]) m4trace:/usr/share/aclocal/libtool.m4:7119: -1- AC_DEFUN([LT_AC_PROG_SED], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_SED' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [AC_PROG_SED], [AC_PROG_SED($@)])]) m4trace:/usr/share/aclocal/ltdl.m4:16: -1- AC_DEFUN([LT_CONFIG_LTDL_DIR], [AC_BEFORE([$0], [LTDL_INIT]) _$0($*) ]) m4trace:/usr/share/aclocal/ltdl.m4:68: -1- AC_DEFUN([LTDL_CONVENIENCE], [AC_BEFORE([$0], [LTDL_INIT])dnl dnl Although the argument is deprecated and no longer documented, dnl LTDL_CONVENIENCE used to take a DIRECTORY orgument, if we have one dnl here make sure it is the same as any other declaration of libltdl's dnl location! This also ensures lt_ltdl_dir is set when configure.ac is dnl not yet using an explicit LT_CONFIG_LTDL_DIR. m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl _$0() ]) m4trace:/usr/share/aclocal/ltdl.m4:81: -1- AU_DEFUN([AC_LIBLTDL_CONVENIENCE], [_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) _LTDL_CONVENIENCE]) m4trace:/usr/share/aclocal/ltdl.m4:81: -1- AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBLTDL_CONVENIENCE' is obsolete. You should run autoupdate.])dnl _LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) _LTDL_CONVENIENCE]) m4trace:/usr/share/aclocal/ltdl.m4:124: -1- AC_DEFUN([LTDL_INSTALLABLE], [AC_BEFORE([$0], [LTDL_INIT])dnl dnl Although the argument is deprecated and no longer documented, dnl LTDL_INSTALLABLE used to take a DIRECTORY orgument, if we have one dnl here make sure it is the same as any other declaration of libltdl's dnl location! This also ensures lt_ltdl_dir is set when configure.ac is dnl not yet using an explicit LT_CONFIG_LTDL_DIR. m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl _$0() ]) m4trace:/usr/share/aclocal/ltdl.m4:137: -1- AU_DEFUN([AC_LIBLTDL_INSTALLABLE], [_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) _LTDL_INSTALLABLE]) m4trace:/usr/share/aclocal/ltdl.m4:137: -1- AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBLTDL_INSTALLABLE' is obsolete. You should run autoupdate.])dnl _LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) _LTDL_INSTALLABLE]) m4trace:/usr/share/aclocal/ltdl.m4:213: -1- AC_DEFUN([_LT_LIBOBJ], [ m4_pattern_allow([^_LT_LIBOBJS$]) _LT_LIBOBJS="$_LT_LIBOBJS $1.$ac_objext" ]) m4trace:/usr/share/aclocal/ltdl.m4:226: -1- AC_DEFUN([LTDL_INIT], [dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) dnl We need to keep our own list of libobjs separate from our parent project, dnl and the easiest way to do that is redefine the AC_LIBOBJs macro while dnl we look for our own LIBOBJs. m4_pushdef([AC_LIBOBJ], m4_defn([_LT_LIBOBJ])) m4_pushdef([AC_LIBSOURCES]) dnl If not otherwise defined, default to the 1.5.x compatible subproject mode: m4_if(_LTDL_MODE, [], [m4_define([_LTDL_MODE], m4_default([$2], [subproject])) m4_if([-1], [m4_bregexp(_LTDL_MODE, [\(subproject\|\(non\)?recursive\)])], [m4_fatal([unknown libltdl mode: ]_LTDL_MODE)])]) AC_ARG_WITH([included_ltdl], [AS_HELP_STRING([--with-included-ltdl], [use the GNU ltdl sources included here])]) if test "x$with_included_ltdl" != xyes; then # We are not being forced to use the included libltdl sources, so # decide whether there is a useful installed version we can use. AC_CHECK_HEADER([ltdl.h], [AC_CHECK_DECL([lt_dlinterface_register], [AC_CHECK_LIB([ltdl], [lt_dladvise_preload], [with_included_ltdl=no], [with_included_ltdl=yes])], [with_included_ltdl=yes], [AC_INCLUDES_DEFAULT #include ])], [with_included_ltdl=yes], [AC_INCLUDES_DEFAULT] ) fi dnl If neither LT_CONFIG_LTDL_DIR, LTDL_CONVENIENCE nor LTDL_INSTALLABLE dnl was called yet, then for old times' sake, we assume libltdl is in an dnl eponymous directory: AC_PROVIDE_IFELSE([LT_CONFIG_LTDL_DIR], [], [_LT_CONFIG_LTDL_DIR([libltdl])]) AC_ARG_WITH([ltdl_include], [AS_HELP_STRING([--with-ltdl-include=DIR], [use the ltdl headers installed in DIR])]) if test -n "$with_ltdl_include"; then if test -f "$with_ltdl_include/ltdl.h"; then : else AC_MSG_ERROR([invalid ltdl include directory: `$with_ltdl_include']) fi else with_ltdl_include=no fi AC_ARG_WITH([ltdl_lib], [AS_HELP_STRING([--with-ltdl-lib=DIR], [use the libltdl.la installed in DIR])]) if test -n "$with_ltdl_lib"; then if test -f "$with_ltdl_lib/libltdl.la"; then : else AC_MSG_ERROR([invalid ltdl library directory: `$with_ltdl_lib']) fi else with_ltdl_lib=no fi case ,$with_included_ltdl,$with_ltdl_include,$with_ltdl_lib, in ,yes,no,no,) m4_case(m4_default(_LTDL_TYPE, [convenience]), [convenience], [_LTDL_CONVENIENCE], [installable], [_LTDL_INSTALLABLE], [m4_fatal([unknown libltdl build type: ]_LTDL_TYPE)]) ;; ,no,no,no,) # If the included ltdl is not to be used, then use the # preinstalled libltdl we found. AC_DEFINE([HAVE_LTDL], [1], [Define this if a modern libltdl is already installed]) LIBLTDL=-lltdl LTDLDEPS= LTDLINCL= ;; ,no*,no,*) AC_MSG_ERROR([`--with-ltdl-include' and `--with-ltdl-lib' options must be used together]) ;; *) with_included_ltdl=no LIBLTDL="-L$with_ltdl_lib -lltdl" LTDLDEPS= LTDLINCL="-I$with_ltdl_include" ;; esac INCLTDL="$LTDLINCL" # Report our decision... AC_MSG_CHECKING([where to find libltdl headers]) AC_MSG_RESULT([$LTDLINCL]) AC_MSG_CHECKING([where to find libltdl library]) AC_MSG_RESULT([$LIBLTDL]) _LTDL_SETUP dnl restore autoconf definition. m4_popdef([AC_LIBOBJ]) m4_popdef([AC_LIBSOURCES]) AC_CONFIG_COMMANDS_PRE([ _ltdl_libobjs= _ltdl_ltlibobjs= if test -n "$_LT_LIBOBJS"; then # Remove the extension. _lt_sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $_LT_LIBOBJS; do echo "$i"; done | sed "$_lt_sed_drop_objext" | sort -u`; do _ltdl_libobjs="$_ltdl_libobjs $lt_libobj_prefix$i.$ac_objext" _ltdl_ltlibobjs="$_ltdl_ltlibobjs $lt_libobj_prefix$i.lo" done fi AC_SUBST([ltdl_LIBOBJS], [$_ltdl_libobjs]) AC_SUBST([ltdl_LTLIBOBJS], [$_ltdl_ltlibobjs]) ]) # Only expand once: m4_define([LTDL_INIT]) ]) m4trace:/usr/share/aclocal/ltdl.m4:352: -1- AU_DEFUN([AC_LIB_LTDL], [LTDL_INIT($@)]) m4trace:/usr/share/aclocal/ltdl.m4:352: -1- AC_DEFUN([AC_LIB_LTDL], [AC_DIAGNOSE([obsolete], [The macro `AC_LIB_LTDL' is obsolete. You should run autoupdate.])dnl LTDL_INIT($@)]) m4trace:/usr/share/aclocal/ltdl.m4:353: -1- AU_DEFUN([AC_WITH_LTDL], [LTDL_INIT($@)]) m4trace:/usr/share/aclocal/ltdl.m4:353: -1- AC_DEFUN([AC_WITH_LTDL], [AC_DIAGNOSE([obsolete], [The macro `AC_WITH_LTDL' is obsolete. You should run autoupdate.])dnl LTDL_INIT($@)]) m4trace:/usr/share/aclocal/ltdl.m4:354: -1- AU_DEFUN([LT_WITH_LTDL], [LTDL_INIT($@)]) m4trace:/usr/share/aclocal/ltdl.m4:354: -1- AC_DEFUN([LT_WITH_LTDL], [AC_DIAGNOSE([obsolete], [The macro `LT_WITH_LTDL' is obsolete. You should run autoupdate.])dnl LTDL_INIT($@)]) m4trace:/usr/share/aclocal/ltdl.m4:367: -1- AC_DEFUN([_LTDL_SETUP], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_SYS_MODULE_EXT])dnl AC_REQUIRE([LT_SYS_MODULE_PATH])dnl AC_REQUIRE([LT_SYS_DLSEARCH_PATH])dnl AC_REQUIRE([LT_LIB_DLLOAD])dnl AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl AC_REQUIRE([LT_FUNC_DLSYM_USCORE])dnl AC_REQUIRE([LT_SYS_DLOPEN_DEPLIBS])dnl AC_REQUIRE([gl_FUNC_ARGZ])dnl m4_require([_LT_CHECK_OBJDIR])dnl m4_require([_LT_HEADER_DLFCN])dnl m4_require([_LT_CHECK_DLPREOPEN])dnl m4_require([_LT_DECL_SED])dnl dnl Don't require this, or it will be expanded earlier than the code dnl that sets the variables it relies on: _LT_ENABLE_INSTALL dnl _LTDL_MODE specific code must be called at least once: _LTDL_MODE_DISPATCH # In order that ltdl.c can compile, find out the first AC_CONFIG_HEADERS # the user used. This is so that ltdl.h can pick up the parent projects # config.h file, The first file in AC_CONFIG_HEADERS must contain the # definitions required by ltdl.c. # FIXME: Remove use of undocumented AC_LIST_HEADERS (2.59 compatibility). AC_CONFIG_COMMANDS_PRE([dnl m4_pattern_allow([^LT_CONFIG_H$])dnl m4_ifset([AH_HEADER], [LT_CONFIG_H=AH_HEADER], [m4_ifset([AC_LIST_HEADERS], [LT_CONFIG_H=`echo "AC_LIST_HEADERS" | $SED 's,^[[ ]]*,,;s,[[ :]].*$,,'`], [])])]) AC_SUBST([LT_CONFIG_H]) AC_CHECK_HEADERS([unistd.h dl.h sys/dl.h dld.h mach-o/dyld.h dirent.h], [], [], [AC_INCLUDES_DEFAULT]) AC_CHECK_FUNCS([closedir opendir readdir], [], [AC_LIBOBJ([lt__dirent])]) AC_CHECK_FUNCS([strlcat strlcpy], [], [AC_LIBOBJ([lt__strl])]) AC_DEFINE_UNQUOTED([LT_LIBEXT],["$libext"],[The archive extension]) name=ltdl LTDLOPEN=`eval "\\$ECHO \"$libname_spec\""` AC_SUBST([LTDLOPEN]) ]) m4trace:/usr/share/aclocal/ltdl.m4:437: -1- AC_DEFUN([LT_SYS_DLOPEN_DEPLIBS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_CACHE_CHECK([whether deplibs are loaded by dlopen], [lt_cv_sys_dlopen_deplibs], [# PORTME does your system automatically load deplibs for dlopen? # or its logical equivalent (e.g. shl_load for HP-UX < 11) # For now, we just catch OSes we know something about -- in the # future, we'll try test this programmatically. lt_cv_sys_dlopen_deplibs=unknown case $host_os in aix3*|aix4.1.*|aix4.2.*) # Unknown whether this is true for these versions of AIX, but # we want this `case' here to explicitly catch those versions. lt_cv_sys_dlopen_deplibs=unknown ;; aix[[4-9]]*) lt_cv_sys_dlopen_deplibs=yes ;; amigaos*) case $host_cpu in powerpc) lt_cv_sys_dlopen_deplibs=no ;; esac ;; darwin*) # Assuming the user has installed a libdl from somewhere, this is true # If you are looking for one http://www.opendarwin.org/projects/dlcompat lt_cv_sys_dlopen_deplibs=yes ;; freebsd* | dragonfly*) lt_cv_sys_dlopen_deplibs=yes ;; gnu* | linux* | k*bsd*-gnu | kopensolaris*-gnu) # GNU and its variants, using gnu ld.so (Glibc) lt_cv_sys_dlopen_deplibs=yes ;; hpux10*|hpux11*) lt_cv_sys_dlopen_deplibs=yes ;; interix*) lt_cv_sys_dlopen_deplibs=yes ;; irix[[12345]]*|irix6.[[01]]*) # Catch all versions of IRIX before 6.2, and indicate that we don't # know how it worked for any of those versions. lt_cv_sys_dlopen_deplibs=unknown ;; irix*) # The case above catches anything before 6.2, and it's known that # at 6.2 and later dlopen does load deplibs. lt_cv_sys_dlopen_deplibs=yes ;; netbsd* | netbsdelf*-gnu) lt_cv_sys_dlopen_deplibs=yes ;; openbsd*) lt_cv_sys_dlopen_deplibs=yes ;; osf[[1234]]*) # dlopen did load deplibs (at least at 4.x), but until the 5.x series, # it did *not* use an RPATH in a shared library to find objects the # library depends on, so we explicitly say `no'. lt_cv_sys_dlopen_deplibs=no ;; osf5.0|osf5.0a|osf5.1) # dlopen *does* load deplibs and with the right loader patch applied # it even uses RPATH in a shared library to search for shared objects # that the library depends on, but there's no easy way to know if that # patch is installed. Since this is the case, all we can really # say is unknown -- it depends on the patch being installed. If # it is, this changes to `yes'. Without it, it would be `no'. lt_cv_sys_dlopen_deplibs=unknown ;; osf*) # the two cases above should catch all versions of osf <= 5.1. Read # the comments above for what we know about them. # At > 5.1, deplibs are loaded *and* any RPATH in a shared library # is used to find them so we can finally say `yes'. lt_cv_sys_dlopen_deplibs=yes ;; qnx*) lt_cv_sys_dlopen_deplibs=yes ;; solaris*) lt_cv_sys_dlopen_deplibs=yes ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) libltdl_cv_sys_dlopen_deplibs=yes ;; esac ]) if test "$lt_cv_sys_dlopen_deplibs" != yes; then AC_DEFINE([LTDL_DLOPEN_DEPLIBS], [1], [Define if the OS needs help to load dependent libraries for dlopen().]) fi ]) m4trace:/usr/share/aclocal/ltdl.m4:536: -1- AU_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [m4_if($#, 0, [LT_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS($@)])]) m4trace:/usr/share/aclocal/ltdl.m4:536: -1- AC_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYS_DLOPEN_DEPLIBS' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS($@)])]) m4trace:/usr/share/aclocal/ltdl.m4:543: -1- AC_DEFUN([LT_SYS_MODULE_EXT], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl AC_CACHE_CHECK([which extension is used for runtime loadable modules], [libltdl_cv_shlibext], [ module=yes eval libltdl_cv_shlibext=$shrext_cmds ]) if test -n "$libltdl_cv_shlibext"; then m4_pattern_allow([LT_MODULE_EXT])dnl AC_DEFINE_UNQUOTED([LT_MODULE_EXT], ["$libltdl_cv_shlibext"], [Define to the extension used for runtime loadable modules, say, ".so".]) fi ]) m4trace:/usr/share/aclocal/ltdl.m4:559: -1- AU_DEFUN([AC_LTDL_SHLIBEXT], [m4_if($#, 0, [LT_SYS_MODULE_EXT], [LT_SYS_MODULE_EXT($@)])]) m4trace:/usr/share/aclocal/ltdl.m4:559: -1- AC_DEFUN([AC_LTDL_SHLIBEXT], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SHLIBEXT' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_SYS_MODULE_EXT], [LT_SYS_MODULE_EXT($@)])]) m4trace:/usr/share/aclocal/ltdl.m4:566: -1- AC_DEFUN([LT_SYS_MODULE_PATH], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl AC_CACHE_CHECK([which variable specifies run-time module search path], [lt_cv_module_path_var], [lt_cv_module_path_var="$shlibpath_var"]) if test -n "$lt_cv_module_path_var"; then m4_pattern_allow([LT_MODULE_PATH_VAR])dnl AC_DEFINE_UNQUOTED([LT_MODULE_PATH_VAR], ["$lt_cv_module_path_var"], [Define to the name of the environment variable that determines the run-time module search path.]) fi ]) m4trace:/usr/share/aclocal/ltdl.m4:578: -1- AU_DEFUN([AC_LTDL_SHLIBPATH], [m4_if($#, 0, [LT_SYS_MODULE_PATH], [LT_SYS_MODULE_PATH($@)])]) m4trace:/usr/share/aclocal/ltdl.m4:578: -1- AC_DEFUN([AC_LTDL_SHLIBPATH], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SHLIBPATH' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_SYS_MODULE_PATH], [LT_SYS_MODULE_PATH($@)])]) m4trace:/usr/share/aclocal/ltdl.m4:585: -1- AC_DEFUN([LT_SYS_DLSEARCH_PATH], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl AC_CACHE_CHECK([for the default library search path], [lt_cv_sys_dlsearch_path], [lt_cv_sys_dlsearch_path="$sys_lib_dlsearch_path_spec"]) if test -n "$lt_cv_sys_dlsearch_path"; then sys_dlsearch_path= for dir in $lt_cv_sys_dlsearch_path; do if test -z "$sys_dlsearch_path"; then sys_dlsearch_path="$dir" else sys_dlsearch_path="$sys_dlsearch_path$PATH_SEPARATOR$dir" fi done m4_pattern_allow([LT_DLSEARCH_PATH])dnl AC_DEFINE_UNQUOTED([LT_DLSEARCH_PATH], ["$sys_dlsearch_path"], [Define to the system default library search path.]) fi ]) m4trace:/usr/share/aclocal/ltdl.m4:606: -1- AU_DEFUN([AC_LTDL_SYSSEARCHPATH], [m4_if($#, 0, [LT_SYS_DLSEARCH_PATH], [LT_SYS_DLSEARCH_PATH($@)])]) m4trace:/usr/share/aclocal/ltdl.m4:606: -1- AC_DEFUN([AC_LTDL_SYSSEARCHPATH], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYSSEARCHPATH' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_SYS_DLSEARCH_PATH], [LT_SYS_DLSEARCH_PATH($@)])]) m4trace:/usr/share/aclocal/ltdl.m4:632: -1- AC_DEFUN([LT_LIB_DLLOAD], [m4_pattern_allow([^LT_DLLOADERS$]) LT_DLLOADERS= AC_SUBST([LT_DLLOADERS]) AC_LANG_PUSH([C]) LIBADD_DLOPEN= AC_SEARCH_LIBS([dlopen], [dl], [AC_DEFINE([HAVE_LIBDL], [1], [Define if you have the libdl library or equivalent.]) if test "$ac_cv_search_dlopen" != "none required" ; then LIBADD_DLOPEN="-ldl" fi libltdl_cv_lib_dl_dlopen="yes" LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#if HAVE_DLFCN_H # include #endif ]], [[dlopen(0, 0);]])], [AC_DEFINE([HAVE_LIBDL], [1], [Define if you have the libdl library or equivalent.]) libltdl_cv_func_dlopen="yes" LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"], [AC_CHECK_LIB([svld], [dlopen], [AC_DEFINE([HAVE_LIBDL], [1], [Define if you have the libdl library or equivalent.]) LIBADD_DLOPEN="-lsvld" libltdl_cv_func_dlopen="yes" LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"])])]) if test x"$libltdl_cv_func_dlopen" = xyes || test x"$libltdl_cv_lib_dl_dlopen" = xyes then lt_save_LIBS="$LIBS" LIBS="$LIBS $LIBADD_DLOPEN" AC_CHECK_FUNCS([dlerror]) LIBS="$lt_save_LIBS" fi AC_SUBST([LIBADD_DLOPEN]) LIBADD_SHL_LOAD= AC_CHECK_FUNC([shl_load], [AC_DEFINE([HAVE_SHL_LOAD], [1], [Define if you have the shl_load function.]) LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la"], [AC_CHECK_LIB([dld], [shl_load], [AC_DEFINE([HAVE_SHL_LOAD], [1], [Define if you have the shl_load function.]) LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la" LIBADD_SHL_LOAD="-ldld"])]) AC_SUBST([LIBADD_SHL_LOAD]) case $host_os in darwin[[1567]].*) # We only want this for pre-Mac OS X 10.4. AC_CHECK_FUNC([_dyld_func_lookup], [AC_DEFINE([HAVE_DYLD], [1], [Define if you have the _dyld_func_lookup function.]) LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dyld.la"]) ;; beos*) LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}load_add_on.la" ;; cygwin* | mingw* | os2* | pw32*) AC_CHECK_DECLS([cygwin_conv_path], [], [], [[#include ]]) LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}loadlibrary.la" ;; esac AC_CHECK_LIB([dld], [dld_link], [AC_DEFINE([HAVE_DLD], [1], [Define if you have the GNU dld library.]) LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dld_link.la"]) AC_SUBST([LIBADD_DLD_LINK]) m4_pattern_allow([^LT_DLPREOPEN$]) LT_DLPREOPEN= if test -n "$LT_DLLOADERS" then for lt_loader in $LT_DLLOADERS; do LT_DLPREOPEN="$LT_DLPREOPEN-dlpreopen $lt_loader " done AC_DEFINE([HAVE_LIBDLLOADER], [1], [Define if libdlloader will be built on this platform]) fi AC_SUBST([LT_DLPREOPEN]) dnl This isn't used anymore, but set it for backwards compatibility LIBADD_DL="$LIBADD_DLOPEN $LIBADD_SHL_LOAD" AC_SUBST([LIBADD_DL]) AC_LANG_POP ]) m4trace:/usr/share/aclocal/ltdl.m4:725: -1- AU_DEFUN([AC_LTDL_DLLIB], [m4_if($#, 0, [LT_LIB_DLLOAD], [LT_LIB_DLLOAD($@)])]) m4trace:/usr/share/aclocal/ltdl.m4:725: -1- AC_DEFUN([AC_LTDL_DLLIB], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_DLLIB' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_LIB_DLLOAD], [LT_LIB_DLLOAD($@)])]) m4trace:/usr/share/aclocal/ltdl.m4:733: -1- AC_DEFUN([LT_SYS_SYMBOL_USCORE], [m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl AC_CACHE_CHECK([for _ prefix in compiled symbols], [lt_cv_sys_symbol_underscore], [lt_cv_sys_symbol_underscore=no cat > conftest.$ac_ext <<_LT_EOF void nm_test_func(){} int main(){nm_test_func;return 0;} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. ac_nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then # See whether the symbols have a leading underscore. if grep '^. _nm_test_func' "$ac_nlist" >/dev/null; then lt_cv_sys_symbol_underscore=yes else if grep '^. nm_test_func ' "$ac_nlist" >/dev/null; then : else echo "configure: cannot find nm_test_func in $ac_nlist" >&AS_MESSAGE_LOG_FD fi fi else echo "configure: cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.c >&AS_MESSAGE_LOG_FD fi rm -rf conftest* ]) sys_symbol_underscore=$lt_cv_sys_symbol_underscore AC_SUBST([sys_symbol_underscore]) ]) m4trace:/usr/share/aclocal/ltdl.m4:770: -1- AU_DEFUN([AC_LTDL_SYMBOL_USCORE], [m4_if($#, 0, [LT_SYS_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE($@)])]) m4trace:/usr/share/aclocal/ltdl.m4:770: -1- AC_DEFUN([AC_LTDL_SYMBOL_USCORE], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYMBOL_USCORE' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_SYS_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE($@)])]) m4trace:/usr/share/aclocal/ltdl.m4:777: -1- AC_DEFUN([LT_FUNC_DLSYM_USCORE], [AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl if test x"$lt_cv_sys_symbol_underscore" = xyes; then if test x"$libltdl_cv_func_dlopen" = xyes || test x"$libltdl_cv_lib_dl_dlopen" = xyes ; then AC_CACHE_CHECK([whether we have to add an underscore for dlsym], [libltdl_cv_need_uscore], [libltdl_cv_need_uscore=unknown save_LIBS="$LIBS" LIBS="$LIBS $LIBADD_DLOPEN" _LT_TRY_DLOPEN_SELF( [libltdl_cv_need_uscore=no], [libltdl_cv_need_uscore=yes], [], [libltdl_cv_need_uscore=cross]) LIBS="$save_LIBS" ]) fi fi if test x"$libltdl_cv_need_uscore" = xyes; then AC_DEFINE([NEED_USCORE], [1], [Define if dlsym() requires a leading underscore in symbol names.]) fi ]) m4trace:/usr/share/aclocal/ltdl.m4:802: -1- AU_DEFUN([AC_LTDL_DLSYM_USCORE], [m4_if($#, 0, [LT_FUNC_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE($@)])]) m4trace:/usr/share/aclocal/ltdl.m4:802: -1- AC_DEFUN([AC_LTDL_DLSYM_USCORE], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_DLSYM_USCORE' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_FUNC_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE($@)])]) m4trace:/usr/share/aclocal/ltoptions.m4:13: -1- AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) m4trace:/usr/share/aclocal/ltoptions.m4:110: -1- 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.]) ]) m4trace:/usr/share/aclocal/ltoptions.m4:110: -1- AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_DLOPEN' is obsolete. You should run autoupdate.])dnl _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.]) ]) m4trace:/usr/share/aclocal/ltoptions.m4:145: -1- 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.]) ]) m4trace:/usr/share/aclocal/ltoptions.m4:145: -1- AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_WIN32_DLL' is obsolete. You should run autoupdate.])dnl 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.]) ]) m4trace:/usr/share/aclocal/ltoptions.m4:194: -1- AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) m4trace:/usr/share/aclocal/ltoptions.m4:198: -1- AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) m4trace:/usr/share/aclocal/ltoptions.m4:202: -1- AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) m4trace:/usr/share/aclocal/ltoptions.m4:202: -1- AC_DEFUN([AM_ENABLE_SHARED], [AC_DIAGNOSE([obsolete], [The macro `AM_ENABLE_SHARED' is obsolete. You should run autoupdate.])dnl AC_ENABLE_SHARED($@)]) m4trace:/usr/share/aclocal/ltoptions.m4:203: -1- AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) m4trace:/usr/share/aclocal/ltoptions.m4:203: -1- AC_DEFUN([AM_DISABLE_SHARED], [AC_DIAGNOSE([obsolete], [The macro `AM_DISABLE_SHARED' is obsolete. You should run autoupdate.])dnl AC_DISABLE_SHARED($@)]) m4trace:/usr/share/aclocal/ltoptions.m4:248: -1- AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) m4trace:/usr/share/aclocal/ltoptions.m4:252: -1- AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) m4trace:/usr/share/aclocal/ltoptions.m4:256: -1- AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) m4trace:/usr/share/aclocal/ltoptions.m4:256: -1- AC_DEFUN([AM_ENABLE_STATIC], [AC_DIAGNOSE([obsolete], [The macro `AM_ENABLE_STATIC' is obsolete. You should run autoupdate.])dnl AC_ENABLE_STATIC($@)]) m4trace:/usr/share/aclocal/ltoptions.m4:257: -1- AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) m4trace:/usr/share/aclocal/ltoptions.m4:257: -1- AC_DEFUN([AM_DISABLE_STATIC], [AC_DIAGNOSE([obsolete], [The macro `AM_DISABLE_STATIC' is obsolete. You should run autoupdate.])dnl AC_DISABLE_STATIC($@)]) m4trace:/usr/share/aclocal/ltoptions.m4:302: -1- 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.]) ]) m4trace:/usr/share/aclocal/ltoptions.m4:302: -1- AC_DEFUN([AC_ENABLE_FAST_INSTALL], [AC_DIAGNOSE([obsolete], [The macro `AC_ENABLE_FAST_INSTALL' is obsolete. You should run autoupdate.])dnl _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.]) ]) m4trace:/usr/share/aclocal/ltoptions.m4:309: -1- 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.]) ]) m4trace:/usr/share/aclocal/ltoptions.m4:309: -1- AC_DEFUN([AC_DISABLE_FAST_INSTALL], [AC_DIAGNOSE([obsolete], [The macro `AC_DISABLE_FAST_INSTALL' is obsolete. You should run autoupdate.])dnl _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.]) ]) m4trace:/usr/share/aclocal/ltoptions.m4:342: -1- 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.]) ]) m4trace:/usr/share/aclocal/ltoptions.m4:342: -1- AC_DEFUN([AC_LIBTOOL_PICMODE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_PICMODE' is obsolete. You should run autoupdate.])dnl _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.]) ]) m4trace:/usr/share/aclocal/ltsugar.m4:13: -1- AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) m4trace:/usr/share/aclocal/ltversion.m4:18: -1- AC_DEFUN([LTVERSION_VERSION], [macro_version='2.2.6b' macro_revision='1.3017' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) m4trace:/usr/share/aclocal/lt~obsolete.m4:36: -1- AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4trace:/usr/share/aclocal/lt~obsolete.m4:40: -1- AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH]) m4trace:/usr/share/aclocal/lt~obsolete.m4:41: -1- AC_DEFUN([_LT_AC_SHELL_INIT]) m4trace:/usr/share/aclocal/lt~obsolete.m4:42: -1- AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX]) m4trace:/usr/share/aclocal/lt~obsolete.m4:44: -1- AC_DEFUN([_LT_AC_TAGVAR]) m4trace:/usr/share/aclocal/lt~obsolete.m4:45: -1- AC_DEFUN([AC_LTDL_ENABLE_INSTALL]) m4trace:/usr/share/aclocal/lt~obsolete.m4:46: -1- AC_DEFUN([AC_LTDL_PREOPEN]) m4trace:/usr/share/aclocal/lt~obsolete.m4:47: -1- AC_DEFUN([_LT_AC_SYS_COMPILER]) m4trace:/usr/share/aclocal/lt~obsolete.m4:48: -1- AC_DEFUN([_LT_AC_LOCK]) m4trace:/usr/share/aclocal/lt~obsolete.m4:49: -1- AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE]) m4trace:/usr/share/aclocal/lt~obsolete.m4:50: -1- AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF]) m4trace:/usr/share/aclocal/lt~obsolete.m4:51: -1- AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O]) m4trace:/usr/share/aclocal/lt~obsolete.m4:52: -1- AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS]) m4trace:/usr/share/aclocal/lt~obsolete.m4:53: -1- AC_DEFUN([AC_LIBTOOL_OBJDIR]) m4trace:/usr/share/aclocal/lt~obsolete.m4:54: -1- AC_DEFUN([AC_LTDL_OBJDIR]) m4trace:/usr/share/aclocal/lt~obsolete.m4:55: -1- AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH]) m4trace:/usr/share/aclocal/lt~obsolete.m4:56: -1- AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP]) m4trace:/usr/share/aclocal/lt~obsolete.m4:57: -1- AC_DEFUN([AC_PATH_MAGIC]) m4trace:/usr/share/aclocal/lt~obsolete.m4:58: -1- AC_DEFUN([AC_PROG_LD_GNU]) m4trace:/usr/share/aclocal/lt~obsolete.m4:59: -1- AC_DEFUN([AC_PROG_LD_RELOAD_FLAG]) m4trace:/usr/share/aclocal/lt~obsolete.m4:60: -1- AC_DEFUN([AC_DEPLIBS_CHECK_METHOD]) m4trace:/usr/share/aclocal/lt~obsolete.m4:61: -1- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI]) m4trace:/usr/share/aclocal/lt~obsolete.m4:62: -1- AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE]) m4trace:/usr/share/aclocal/lt~obsolete.m4:63: -1- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC]) m4trace:/usr/share/aclocal/lt~obsolete.m4:64: -1- AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS]) m4trace:/usr/share/aclocal/lt~obsolete.m4:65: -1- AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP]) m4trace:/usr/share/aclocal/lt~obsolete.m4:66: -1- AC_DEFUN([LT_AC_PROG_EGREP]) m4trace:/usr/share/aclocal/lt~obsolete.m4:71: -1- AC_DEFUN([_AC_PROG_LIBTOOL]) m4trace:/usr/share/aclocal/lt~obsolete.m4:72: -1- AC_DEFUN([AC_LIBTOOL_SETUP]) m4trace:/usr/share/aclocal/lt~obsolete.m4:73: -1- AC_DEFUN([_LT_AC_CHECK_DLFCN]) m4trace:/usr/share/aclocal/lt~obsolete.m4:74: -1- AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER]) m4trace:/usr/share/aclocal/lt~obsolete.m4:75: -1- AC_DEFUN([_LT_AC_TAGCONFIG]) m4trace:/usr/share/aclocal/lt~obsolete.m4:77: -1- AC_DEFUN([_LT_AC_LANG_CXX]) m4trace:/usr/share/aclocal/lt~obsolete.m4:78: -1- AC_DEFUN([_LT_AC_LANG_F77]) m4trace:/usr/share/aclocal/lt~obsolete.m4:79: -1- AC_DEFUN([_LT_AC_LANG_GCJ]) m4trace:/usr/share/aclocal/lt~obsolete.m4:80: -1- AC_DEFUN([AC_LIBTOOL_RC]) m4trace:/usr/share/aclocal/lt~obsolete.m4:81: -1- AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG]) m4trace:/usr/share/aclocal/lt~obsolete.m4:82: -1- AC_DEFUN([_LT_AC_LANG_C_CONFIG]) m4trace:/usr/share/aclocal/lt~obsolete.m4:83: -1- AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG]) m4trace:/usr/share/aclocal/lt~obsolete.m4:84: -1- AC_DEFUN([_LT_AC_LANG_CXX_CONFIG]) m4trace:/usr/share/aclocal/lt~obsolete.m4:85: -1- AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG]) m4trace:/usr/share/aclocal/lt~obsolete.m4:86: -1- AC_DEFUN([_LT_AC_LANG_F77_CONFIG]) m4trace:/usr/share/aclocal/lt~obsolete.m4:87: -1- AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG]) m4trace:/usr/share/aclocal/lt~obsolete.m4:88: -1- AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG]) m4trace:/usr/share/aclocal/lt~obsolete.m4:89: -1- AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG]) m4trace:/usr/share/aclocal/lt~obsolete.m4:90: -1- AC_DEFUN([_LT_AC_LANG_RC_CONFIG]) m4trace:/usr/share/aclocal/lt~obsolete.m4:91: -1- AC_DEFUN([AC_LIBTOOL_CONFIG]) m4trace:/usr/share/aclocal/lt~obsolete.m4:92: -1- AC_DEFUN([_LT_AC_FILE_LTDLL_C]) m4trace:/usr/share/aclocal-1.11/amversion.m4:14: -1- 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 ]) m4trace:/usr/share/aclocal-1.11/amversion.m4:33: -1- 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]))]) m4trace:/usr/share/aclocal-1.11/auxdir.m4:47: -1- 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` ]) m4trace:/usr/share/aclocal-1.11/ccstdc.m4:17: -1- AU_DEFUN([AM_PROG_CC_STDC], [AC_PROG_CC AC_DIAGNOSE([obsolete], [$0: your code should no longer depend upon `am_cv_prog_cc_stdc', but upon `ac_cv_prog_cc_stdc'. Remove this warning and the assignment when you adjust the code. You can also remove the above call to AC_PROG_CC if you already called it elsewhere.]) am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc ]) m4trace:/usr/share/aclocal-1.11/ccstdc.m4:17: -1- AC_DEFUN([AM_PROG_CC_STDC], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_CC_STDC' is obsolete. You should run autoupdate.])dnl AC_PROG_CC AC_DIAGNOSE([obsolete], [$0: your code should no longer depend upon `am_cv_prog_cc_stdc', but upon `ac_cv_prog_cc_stdc'. Remove this warning and the assignment when you adjust the code. You can also remove the above call to AC_PROG_CC if you already called it elsewhere.]) am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc ]) m4trace:/usr/share/aclocal-1.11/ccstdc.m4:26: -1- AU_DEFUN([fp_PROG_CC_STDC]) m4trace:/usr/share/aclocal-1.11/ccstdc.m4:26: -1- AC_DEFUN([fp_PROG_CC_STDC], [AC_DIAGNOSE([obsolete], [The macro `fp_PROG_CC_STDC' is obsolete. You should run autoupdate.])dnl ]) m4trace:/usr/share/aclocal-1.11/cond.m4:15: -1- 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])]) m4trace:/usr/share/aclocal-1.11/depend.m4:28: -1- 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]) ]) m4trace:/usr/share/aclocal-1.11/depend.m4:163: -1- AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) m4trace:/usr/share/aclocal-1.11/depend.m4:171: -1- 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 ]) m4trace:/usr/share/aclocal-1.11/depout.m4:14: -1- 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 } ]) m4trace:/usr/share/aclocal-1.11/depout.m4:75: -1- 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"]) ]) m4trace:/usr/share/aclocal-1.11/header.m4:12: -1- AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) m4trace:/usr/share/aclocal-1.11/header.m4:12: -1- AC_DEFUN([AM_CONFIG_HEADER], [AC_DIAGNOSE([obsolete], [The macro `AM_CONFIG_HEADER' is obsolete. You should run autoupdate.])dnl AC_CONFIG_HEADERS($@)]) m4trace:/usr/share/aclocal-1.11/init.m4:26: -1- 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 ]) m4trace:/usr/share/aclocal-1.11/init.m4:126: -1- 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]) m4trace:/usr/share/aclocal-1.11/install-sh.m4:11: -1- 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)]) m4trace:/usr/share/aclocal-1.11/lead-dot.m4:12: -1- 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])]) m4trace:/usr/share/aclocal-1.11/make.m4:14: -1- 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 ]) m4trace:/usr/share/aclocal-1.11/minuso.m4:14: -1- 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])]) ]) m4trace:/usr/share/aclocal-1.11/missing.m4:14: -1- AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) m4trace:/usr/share/aclocal-1.11/missing.m4:24: -1- 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 ]) m4trace:/usr/share/aclocal-1.11/mkdirp.m4:11: -1- 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 ]) m4trace:/usr/share/aclocal-1.11/options.m4:13: -1- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) m4trace:/usr/share/aclocal-1.11/options.m4:19: -1- AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) m4trace:/usr/share/aclocal-1.11/options.m4:25: -1- AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) m4trace:/usr/share/aclocal-1.11/options.m4:31: -1- AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) m4trace:/usr/share/aclocal-1.11/runlog.m4:12: -1- AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) m4trace:/usr/share/aclocal-1.11/sanity.m4:14: -1- 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)]) m4trace:/usr/share/aclocal-1.11/silent.m4:14: -1- 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 ]) m4trace:/usr/share/aclocal-1.11/strip.m4:17: -1- 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])]) m4trace:/usr/share/aclocal-1.11/substnot.m4:14: -1- AC_DEFUN([_AM_SUBST_NOTMAKE]) m4trace:/usr/share/aclocal-1.11/substnot.m4:19: -1- AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) m4trace:/usr/share/aclocal-1.11/tar.m4:24: -1- 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]) ]) m4trace:configure.in:12: -1- m4_pattern_forbid([^_?A[CHUM]_]) m4trace:configure.in:12: -1- m4_pattern_forbid([_AC_]) m4trace:configure.in:12: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) m4trace:configure.in:12: -1- m4_pattern_allow([^AS_FLAGS$]) m4trace:configure.in:12: -1- m4_pattern_forbid([^_?m4_]) m4trace:configure.in:12: -1- m4_pattern_forbid([^dnl$]) m4trace:configure.in:12: -1- m4_pattern_forbid([^_?AS_]) m4trace:configure.in:12: -1- m4_pattern_allow([^SHELL$]) m4trace:configure.in:12: -1- m4_pattern_allow([^PATH_SEPARATOR$]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.in:12: -1- m4_pattern_allow([^exec_prefix$]) m4trace:configure.in:12: -1- m4_pattern_allow([^prefix$]) m4trace:configure.in:12: -1- m4_pattern_allow([^program_transform_name$]) m4trace:configure.in:12: -1- m4_pattern_allow([^bindir$]) m4trace:configure.in:12: -1- m4_pattern_allow([^sbindir$]) m4trace:configure.in:12: -1- m4_pattern_allow([^libexecdir$]) m4trace:configure.in:12: -1- m4_pattern_allow([^datarootdir$]) m4trace:configure.in:12: -1- m4_pattern_allow([^datadir$]) m4trace:configure.in:12: -1- m4_pattern_allow([^sysconfdir$]) m4trace:configure.in:12: -1- m4_pattern_allow([^sharedstatedir$]) m4trace:configure.in:12: -1- m4_pattern_allow([^localstatedir$]) m4trace:configure.in:12: -1- m4_pattern_allow([^includedir$]) m4trace:configure.in:12: -1- m4_pattern_allow([^oldincludedir$]) m4trace:configure.in:12: -1- m4_pattern_allow([^docdir$]) m4trace:configure.in:12: -1- m4_pattern_allow([^infodir$]) m4trace:configure.in:12: -1- m4_pattern_allow([^htmldir$]) m4trace:configure.in:12: -1- m4_pattern_allow([^dvidir$]) m4trace:configure.in:12: -1- m4_pattern_allow([^pdfdir$]) m4trace:configure.in:12: -1- m4_pattern_allow([^psdir$]) m4trace:configure.in:12: -1- m4_pattern_allow([^libdir$]) m4trace:configure.in:12: -1- m4_pattern_allow([^localedir$]) m4trace:configure.in:12: -1- m4_pattern_allow([^mandir$]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.in:12: -1- m4_pattern_allow([^DEFS$]) m4trace:configure.in:12: -1- m4_pattern_allow([^ECHO_C$]) m4trace:configure.in:12: -1- m4_pattern_allow([^ECHO_N$]) m4trace:configure.in:12: -1- m4_pattern_allow([^ECHO_T$]) m4trace:configure.in:12: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.in:12: -1- m4_pattern_allow([^build_alias$]) m4trace:configure.in:12: -1- m4_pattern_allow([^host_alias$]) m4trace:configure.in:12: -1- m4_pattern_allow([^target_alias$]) m4trace:configure.in:17: -1- m4_pattern_allow([^DVBSTREAMER_MAJOR$]) m4trace:configure.in:18: -1- m4_pattern_allow([^DVBSTREAMER_MINOR$]) m4trace:configure.in:19: -1- m4_pattern_allow([^DVBSTREAMER_MICRO$]) m4trace:configure.in:21: -1- m4_pattern_allow([^DVBSTREAMER_MAJOR$]) m4trace:configure.in:22: -1- m4_pattern_allow([^DVBSTREAMER_MINOR$]) m4trace:configure.in:23: -1- m4_pattern_allow([^DVBSTREAMER_MICRO$]) m4trace:configure.in:24: -1- m4_pattern_allow([^DVBSTREAMER_VERSION$]) m4trace:configure.in:27: -1- AM_INIT_AUTOMAKE(["dvbstreamer"], [$SPEC_VERSION]) m4trace:configure.in:27: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) m4trace:configure.in:27: -1- AM_SET_CURRENT_AUTOMAKE_VERSION m4trace:configure.in:27: -1- AM_AUTOMAKE_VERSION([1.11.1]) m4trace:configure.in:27: -1- _AM_AUTOCONF_VERSION([2.67]) m4trace:configure.in:27: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) m4trace:configure.in:27: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) m4trace:configure.in:27: -1- m4_pattern_allow([^INSTALL_DATA$]) m4trace:configure.in:27: -1- m4_pattern_allow([^am__isrc$]) m4trace:configure.in:27: -1- _AM_SUBST_NOTMAKE([am__isrc]) m4trace:configure.in:27: -1- m4_pattern_allow([^CYGPATH_W$]) m4trace:configure.in:27: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.in:27: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.in:27: -1- _AM_IF_OPTION([no-define], [], [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])]) m4trace:configure.in:27: -2- _AM_MANGLE_OPTION([no-define]) m4trace:configure.in:27: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.in:27: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.in:27: -1- AM_SANITY_CHECK m4trace:configure.in:27: -1- AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) m4trace:configure.in:27: -1- AM_MISSING_HAS_RUN m4trace:configure.in:27: -1- AM_AUX_DIR_EXPAND m4trace:configure.in:27: -1- m4_pattern_allow([^ACLOCAL$]) m4trace:configure.in:27: -1- AM_MISSING_PROG([AUTOCONF], [autoconf]) m4trace:configure.in:27: -1- m4_pattern_allow([^AUTOCONF$]) m4trace:configure.in:27: -1- AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) m4trace:configure.in:27: -1- m4_pattern_allow([^AUTOMAKE$]) m4trace:configure.in:27: -1- AM_MISSING_PROG([AUTOHEADER], [autoheader]) m4trace:configure.in:27: -1- m4_pattern_allow([^AUTOHEADER$]) m4trace:configure.in:27: -1- AM_MISSING_PROG([MAKEINFO], [makeinfo]) m4trace:configure.in:27: -1- m4_pattern_allow([^MAKEINFO$]) m4trace:configure.in:27: -1- AM_PROG_INSTALL_SH m4trace:configure.in:27: -1- m4_pattern_allow([^install_sh$]) m4trace:configure.in:27: -1- AM_PROG_INSTALL_STRIP m4trace:configure.in:27: -1- m4_pattern_allow([^STRIP$]) m4trace:configure.in:27: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) m4trace:configure.in:27: -1- AM_PROG_MKDIR_P m4trace:configure.in:27: -1- m4_pattern_allow([^MKDIR_P$]) m4trace:configure.in:27: -1- m4_pattern_allow([^mkdir_p$]) m4trace:configure.in:27: -1- m4_pattern_allow([^AWK$]) m4trace:configure.in:27: -1- m4_pattern_allow([^SET_MAKE$]) m4trace:configure.in:27: -1- AM_SET_LEADING_DOT m4trace:configure.in:27: -1- m4_pattern_allow([^am__leading_dot$]) m4trace:configure.in:27: -1- _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) m4trace:configure.in:27: -2- _AM_MANGLE_OPTION([tar-ustar]) m4trace:configure.in:27: -1- _AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])]) m4trace:configure.in:27: -2- _AM_MANGLE_OPTION([tar-pax]) m4trace:configure.in:27: -1- _AM_PROG_TAR([v7]) m4trace:configure.in:27: -1- AM_MISSING_PROG([AMTAR], [tar]) m4trace:configure.in:27: -1- m4_pattern_allow([^AMTAR$]) m4trace:configure.in:27: -1- m4_pattern_allow([^am__tar$]) m4trace:configure.in:27: -1- m4_pattern_allow([^am__untar$]) m4trace:configure.in:27: -1- _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 ]) m4trace:configure.in:27: -2- _AM_MANGLE_OPTION([no-dependencies]) m4trace:configure.in:27: -1- _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])]) m4trace:configure.in:27: -2- _AM_MANGLE_OPTION([silent-rules]) m4trace:configure.in:29: -1- AM_CONFIG_HEADER([config.h]) m4trace:configure.in:29: -1- _m4_warn([obsolete], [The macro `AM_CONFIG_HEADER' is obsolete. You should run autoupdate.], [/usr/share/aclocal-1.11/header.m4:12: AM_CONFIG_HEADER is expanded from... configure.in:29: the top level]) m4trace:configure.in:31: -1- _m4_warn([obsolete], [The macro `AC_ISC_POSIX' is obsolete. You should run autoupdate.], [../../lib/autoconf/specific.m4:442: AC_ISC_POSIX is expanded from... configure.in:31: the top level]) m4trace:configure.in:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:31: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.in:31: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.in:31: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.in:31: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.in:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:31: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.in:31: -1- m4_pattern_allow([^EXEEXT$]) m4trace:configure.in:31: -1- m4_pattern_allow([^OBJEXT$]) m4trace:configure.in:31: -1- _AM_DEPENDENCIES([CC]) m4trace:configure.in:31: -1- AM_SET_DEPDIR m4trace:configure.in:31: -1- m4_pattern_allow([^DEPDIR$]) m4trace:configure.in:31: -1- AM_OUTPUT_DEPENDENCY_COMMANDS m4trace:configure.in:31: -1- AM_MAKE_INCLUDE m4trace:configure.in:31: -1- m4_pattern_allow([^am__include$]) m4trace:configure.in:31: -1- m4_pattern_allow([^am__quote$]) m4trace:configure.in:31: -1- AM_DEP_TRACK m4trace:configure.in:31: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) m4trace:configure.in:31: -1- m4_pattern_allow([^AMDEP_TRUE$]) m4trace:configure.in:31: -1- m4_pattern_allow([^AMDEP_FALSE$]) m4trace:configure.in:31: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) m4trace:configure.in:31: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) m4trace:configure.in:31: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) m4trace:configure.in:31: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) m4trace:configure.in:31: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.in:31: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.in:31: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.in:31: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.in:31: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) m4trace:configure.in:31: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) m4trace:configure.in:32: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:32: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.in:32: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.in:32: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.in:32: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.in:32: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:32: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:32: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:32: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:32: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.in:32: -1- _AM_DEPENDENCIES([CC]) m4trace:configure.in:32: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.in:32: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.in:32: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.in:32: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.in:32: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) m4trace:configure.in:32: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) m4trace:configure.in:33: -1- AM_PROG_CC_STDC m4trace:configure.in:33: -1- _m4_warn([obsolete], [The macro `AM_PROG_CC_STDC' is obsolete. You should run autoupdate.], [/usr/share/aclocal-1.11/ccstdc.m4:17: AM_PROG_CC_STDC is expanded from... configure.in:33: the top level]) m4trace:configure.in:33: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:33: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.in:33: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.in:33: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.in:33: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.in:33: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:33: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:33: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:33: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:33: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.in:33: -1- _AM_DEPENDENCIES([CC]) m4trace:configure.in:33: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.in:33: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.in:33: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.in:33: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.in:33: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) m4trace:configure.in:33: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) m4trace:configure.in:33: -1- _m4_warn([obsolete], [AM_PROG_CC_STDC: your code should no longer depend upon `am_cv_prog_cc_stdc', but upon `ac_cv_prog_cc_stdc'. Remove this warning and the assignment when you adjust the code. You can also remove the above call to AC_PROG_CC if you already called it elsewhere.], [/usr/share/aclocal-1.11/ccstdc.m4:17: AM_PROG_CC_STDC is expanded from... configure.in:33: the top level]) m4trace:configure.in:34: -1- m4_pattern_allow([^CPP$]) m4trace:configure.in:34: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.in:34: -1- m4_pattern_allow([^CPP$]) m4trace:configure.in:34: -1- AC_PROG_EGREP m4trace:configure.in:34: -1- m4_pattern_allow([^GREP$]) m4trace:configure.in:34: -1- m4_pattern_allow([^EGREP$]) m4trace:configure.in:34: -1- m4_pattern_allow([^STDC_HEADERS$]) m4trace:configure.in:35: -1- AM_PROG_CC_C_O m4trace:configure.in:35: -1- m4_pattern_allow([^NO_MINUS_C_MINUS_O$]) m4trace:configure.in:46: -1- LT_INIT([dlopen win32-dll disable-static]) m4trace:configure.in:46: -1- m4_pattern_forbid([^_?LT_[A-Z_]+$]) m4trace:configure.in:46: -1- m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$]) m4trace:configure.in:46: -1- LTOPTIONS_VERSION m4trace:configure.in:46: -1- LTSUGAR_VERSION m4trace:configure.in:46: -1- LTVERSION_VERSION m4trace:configure.in:46: -1- LTOBSOLETE_VERSION m4trace:configure.in:46: -1- _LT_PROG_LTMAIN m4trace:configure.in:46: -1- m4_pattern_allow([^AS$]) m4trace:configure.in:46: -1- m4_pattern_allow([^DLLTOOL$]) m4trace:configure.in:46: -1- m4_pattern_allow([^OBJDUMP$]) m4trace:configure.in:46: -1- m4_pattern_allow([^LIBTOOL$]) m4trace:configure.in:46: -1- m4_pattern_allow([^build$]) m4trace:configure.in:46: -1- m4_pattern_allow([^build_cpu$]) m4trace:configure.in:46: -1- m4_pattern_allow([^build_vendor$]) m4trace:configure.in:46: -1- m4_pattern_allow([^build_os$]) m4trace:configure.in:46: -1- m4_pattern_allow([^host$]) m4trace:configure.in:46: -1- m4_pattern_allow([^host_cpu$]) m4trace:configure.in:46: -1- m4_pattern_allow([^host_vendor$]) m4trace:configure.in:46: -1- m4_pattern_allow([^host_os$]) m4trace:configure.in:46: -1- LT_PATH_LD m4trace:configure.in:46: -1- m4_pattern_allow([^SED$]) m4trace:configure.in:46: -1- m4_pattern_allow([^FGREP$]) m4trace:configure.in:46: -1- m4_pattern_allow([^GREP$]) m4trace:configure.in:46: -1- m4_pattern_allow([^LD$]) m4trace:configure.in:46: -1- LT_PATH_NM m4trace:configure.in:46: -1- m4_pattern_allow([^DUMPBIN$]) m4trace:configure.in:46: -1- m4_pattern_allow([^ac_ct_DUMPBIN$]) m4trace:configure.in:46: -1- m4_pattern_allow([^DUMPBIN$]) m4trace:configure.in:46: -1- m4_pattern_allow([^NM$]) m4trace:configure.in:46: -1- m4_pattern_allow([^LN_S$]) m4trace:configure.in:46: -1- LT_CMD_MAX_LEN m4trace:configure.in:46: -1- m4_pattern_allow([^OBJDUMP$]) m4trace:configure.in:46: -1- m4_pattern_allow([^OBJDUMP$]) m4trace:configure.in:46: -1- m4_pattern_allow([^AR$]) m4trace:configure.in:46: -1- m4_pattern_allow([^STRIP$]) m4trace:configure.in:46: -1- m4_pattern_allow([^RANLIB$]) m4trace:configure.in:46: -1- m4_pattern_allow([LT_OBJDIR]) m4trace:configure.in:46: -1- m4_pattern_allow([^LT_OBJDIR$]) m4trace:configure.in:46: -1- m4_pattern_allow([^lt_ECHO$]) m4trace:configure.in:46: -1- _LT_CC_BASENAME([$compiler]) m4trace:configure.in:46: -1- _LT_PATH_TOOL_PREFIX([${ac_tool_prefix}file], [/usr/bin$PATH_SEPARATOR$PATH]) m4trace:configure.in:46: -1- _LT_PATH_TOOL_PREFIX([file], [/usr/bin$PATH_SEPARATOR$PATH]) m4trace:configure.in:46: -1- LT_SUPPORTED_TAG([CC]) m4trace:configure.in:46: -1- _LT_COMPILER_BOILERPLATE m4trace:configure.in:46: -1- _LT_LINKER_BOILERPLATE m4trace:configure.in:46: -1- _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, )="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, ) -fno-rtti -fno-exceptions"]) m4trace:configure.in:46: -1- _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, ) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, )], [$_LT_TAGVAR(lt_prog_compiler_pic, )@&t@m4_if([],[],[ -DPIC],[m4_if([],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, ) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, )=" $_LT_TAGVAR(lt_prog_compiler_pic, )" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, )= _LT_TAGVAR(lt_prog_compiler_can_build_shared, )=no]) m4trace:configure.in:46: -1- _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], [lt_cv_prog_compiler_static_works], [$lt_tmp_static_flag], [], [_LT_TAGVAR(lt_prog_compiler_static, )=]) m4trace:configure.in:46: -1- m4_pattern_allow([^DSYMUTIL$]) m4trace:configure.in:46: -1- m4_pattern_allow([^NMEDIT$]) m4trace:configure.in:46: -1- m4_pattern_allow([^LIPO$]) m4trace:configure.in:46: -1- m4_pattern_allow([^OTOOL$]) m4trace:configure.in:46: -1- m4_pattern_allow([^OTOOL64$]) m4trace:configure.in:46: -1- LT_SYS_DLOPEN_SELF m4trace:configure.in:46: -1- m4_pattern_allow([^HAVE_DLFCN_H$]) m4trace:configure.in:103: -1- AM_CONDITIONAL([ENABLE_ATSC], [test x$enable_atsc = xtrue]) m4trace:configure.in:103: -1- m4_pattern_allow([^ENABLE_ATSC_TRUE$]) m4trace:configure.in:103: -1- m4_pattern_allow([^ENABLE_ATSC_FALSE$]) m4trace:configure.in:103: -1- _AM_SUBST_NOTMAKE([ENABLE_ATSC_TRUE]) m4trace:configure.in:103: -1- _AM_SUBST_NOTMAKE([ENABLE_ATSC_FALSE]) m4trace:configure.in:106: -1- m4_pattern_allow([^ENABLE_ATSC$]) m4trace:configure.in:109: -1- AM_CONDITIONAL([ENABLE_DVB], [test x$enable_dvb = xtrue]) m4trace:configure.in:109: -1- m4_pattern_allow([^ENABLE_DVB_TRUE$]) m4trace:configure.in:109: -1- m4_pattern_allow([^ENABLE_DVB_FALSE$]) m4trace:configure.in:109: -1- _AM_SUBST_NOTMAKE([ENABLE_DVB_TRUE]) m4trace:configure.in:109: -1- _AM_SUBST_NOTMAKE([ENABLE_DVB_FALSE]) m4trace:configure.in:112: -1- m4_pattern_allow([^ENABLE_DVB$]) m4trace:configure.in:128: -1- m4_pattern_allow([^USE_GETADDRINFO$]) m4trace:configure.in:139: -1- AM_CONDITIONAL([ENABLE_FSTREAMER], [test x$enable_fstreamer = xtrue]) m4trace:configure.in:139: -1- m4_pattern_allow([^ENABLE_FSTREAMER_TRUE$]) m4trace:configure.in:139: -1- m4_pattern_allow([^ENABLE_FSTREAMER_FALSE$]) m4trace:configure.in:139: -1- _AM_SUBST_NOTMAKE([ENABLE_FSTREAMER_TRUE]) m4trace:configure.in:139: -1- _AM_SUBST_NOTMAKE([ENABLE_FSTREAMER_FALSE]) m4trace:configure.in:144: -1- m4_pattern_allow([^HAVE_LIBSQLITE3$]) m4trace:configure.in:158: -1- m4_pattern_allow([^READLINE_TERMCAP$]) m4trace:configure.in:167: -1- m4_pattern_allow([^GETTIME_LIB$]) m4trace:configure.in:177: -1- m4_pattern_allow([^ICONV_LIB$]) m4trace:configure.in:180: -1- m4_pattern_allow([^ICONV_INPUT_CAST$]) m4trace:configure.in:182: -1- m4_pattern_allow([^ICONV_INPUT_CAST$]) m4trace:configure.in:191: -1- m4_pattern_allow([^HAVE_LIBEV$]) m4trace:configure.in:198: -1- m4_pattern_allow([^HAVE_LIBYAML$]) m4trace:configure.in:205: -1- m4_pattern_allow([^HAVE_LIBLTDL$]) m4trace:configure.in:211: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete. You should run autoupdate.], [../../lib/autoconf/general.m4:2602: AC_TRY_COMPILE is expanded from... ../../lib/m4sugar/m4sh.m4:598: AS_IF is expanded from... ../../lib/autoconf/general.m4:2019: AC_CACHE_VAL is expanded from... ../../lib/autoconf/general.m4:2040: AC_CACHE_CHECK is expanded from... configure.in:211: the top level]) m4trace:configure.in:220: -1- m4_pattern_allow([^HAVE_VARIADIC_MACROS$]) m4trace:configure.in:225: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete. You should run autoupdate.], [../../lib/autoconf/general.m4:2602: AC_TRY_COMPILE is expanded from... ../../lib/m4sugar/m4sh.m4:598: AS_IF is expanded from... ../../lib/autoconf/general.m4:2019: AC_CACHE_VAL is expanded from... ../../lib/autoconf/general.m4:2040: AC_CACHE_CHECK is expanded from... configure.in:225: the top level]) m4trace:configure.in:233: -1- m4_pattern_allow([^HAVE_FE_CAN_2G_MODULATION$]) m4trace:configure.in:255: -1- m4_pattern_allow([^NO_PREFIX_PACKAGE_DATA_DIR$]) m4trace:configure.in:257: -1- m4_pattern_allow([^PACKAGE_DATA_DIR$]) m4trace:configure.in:261: -1- m4_pattern_allow([^NO_PREFIX_PACKAGE_DOC_DIR$]) m4trace:configure.in:263: -1- m4_pattern_allow([^PACKAGE_DOC_DIR$]) m4trace:configure.in:265: -1- m4_pattern_allow([^PACKAGE_DATA_DIR$]) m4trace:configure.in:266: -1- m4_pattern_allow([^PACKAGE_DOC_DIR$]) m4trace:configure.in:267: -1- m4_pattern_allow([^PACKAGE_SOURCE_DIR$]) m4trace:configure.in:285: -1- m4_pattern_allow([^DVBSTREAMER_PLUGINDIR$]) m4trace:configure.in:286: -1- m4_pattern_allow([^DVBSTREAMER_REL_PLUGINDIR$]) m4trace:configure.in:287: -1- m4_pattern_allow([^DVBSTREAMER_PLUGINDIR$]) m4trace:configure.in:289: -1- _m4_warn([obsolete], [AC_OUTPUT should be used without arguments. You should run autoupdate.], []) m4trace:configure.in:289: -1- m4_pattern_allow([^LIB@&t@OBJS$]) m4trace:configure.in:289: -1- m4_pattern_allow([^LTLIBOBJS$]) m4trace:configure.in:289: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) m4trace:configure.in:289: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) m4trace:configure.in:289: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) m4trace:configure.in:289: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) m4trace:configure.in:289: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) m4trace:configure.in:289: -1- _AC_AM_CONFIG_HEADER_HOOK(["$ac_file"]) m4trace:configure.in:289: -1- _AM_OUTPUT_DEPENDENCY_COMMANDS m4trace:configure.in:289: -1- _LT_PROG_LTMAIN dvbstreamer-2.1.0/autom4te.cache/traces.1000066400000000000000000001324301217721213100201770ustar00rootroot00000000000000m4trace:aclocal.m4:8988: -1- m4_include([acinclude.m4]) m4trace:configure.in:12: -1- AC_INIT([dvbstreamer], [2.0.0]) m4trace:configure.in:12: -1- m4_pattern_forbid([^_?A[CHUM]_]) m4trace:configure.in:12: -1- m4_pattern_forbid([_AC_]) m4trace:configure.in:12: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) m4trace:configure.in:12: -1- m4_pattern_allow([^AS_FLAGS$]) m4trace:configure.in:12: -1- m4_pattern_forbid([^_?m4_]) m4trace:configure.in:12: -1- m4_pattern_forbid([^dnl$]) m4trace:configure.in:12: -1- m4_pattern_forbid([^_?AS_]) m4trace:configure.in:12: -1- AC_SUBST([SHELL]) m4trace:configure.in:12: -1- AC_SUBST_TRACE([SHELL]) m4trace:configure.in:12: -1- m4_pattern_allow([^SHELL$]) m4trace:configure.in:12: -1- AC_SUBST([PATH_SEPARATOR]) m4trace:configure.in:12: -1- AC_SUBST_TRACE([PATH_SEPARATOR]) m4trace:configure.in:12: -1- m4_pattern_allow([^PATH_SEPARATOR$]) m4trace:configure.in:12: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])]) m4trace:configure.in:12: -1- AC_SUBST_TRACE([PACKAGE_NAME]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.in:12: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])]) m4trace:configure.in:12: -1- AC_SUBST_TRACE([PACKAGE_TARNAME]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.in:12: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])]) m4trace:configure.in:12: -1- AC_SUBST_TRACE([PACKAGE_VERSION]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.in:12: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])]) m4trace:configure.in:12: -1- AC_SUBST_TRACE([PACKAGE_STRING]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.in:12: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])]) m4trace:configure.in:12: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.in:12: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])]) m4trace:configure.in:12: -1- AC_SUBST_TRACE([PACKAGE_URL]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.in:12: -1- AC_SUBST([exec_prefix], [NONE]) m4trace:configure.in:12: -1- AC_SUBST_TRACE([exec_prefix]) m4trace:configure.in:12: -1- m4_pattern_allow([^exec_prefix$]) m4trace:configure.in:12: -1- AC_SUBST([prefix], [NONE]) m4trace:configure.in:12: -1- AC_SUBST_TRACE([prefix]) m4trace:configure.in:12: -1- m4_pattern_allow([^prefix$]) m4trace:configure.in:12: -1- AC_SUBST([program_transform_name], [s,x,x,]) m4trace:configure.in:12: -1- AC_SUBST_TRACE([program_transform_name]) m4trace:configure.in:12: -1- m4_pattern_allow([^program_transform_name$]) m4trace:configure.in:12: -1- AC_SUBST([bindir], ['${exec_prefix}/bin']) m4trace:configure.in:12: -1- AC_SUBST_TRACE([bindir]) m4trace:configure.in:12: -1- m4_pattern_allow([^bindir$]) m4trace:configure.in:12: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin']) m4trace:configure.in:12: -1- AC_SUBST_TRACE([sbindir]) m4trace:configure.in:12: -1- m4_pattern_allow([^sbindir$]) m4trace:configure.in:12: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec']) m4trace:configure.in:12: -1- AC_SUBST_TRACE([libexecdir]) m4trace:configure.in:12: -1- m4_pattern_allow([^libexecdir$]) m4trace:configure.in:12: -1- AC_SUBST([datarootdir], ['${prefix}/share']) m4trace:configure.in:12: -1- AC_SUBST_TRACE([datarootdir]) m4trace:configure.in:12: -1- m4_pattern_allow([^datarootdir$]) m4trace:configure.in:12: -1- AC_SUBST([datadir], ['${datarootdir}']) m4trace:configure.in:12: -1- AC_SUBST_TRACE([datadir]) m4trace:configure.in:12: -1- m4_pattern_allow([^datadir$]) m4trace:configure.in:12: -1- AC_SUBST([sysconfdir], ['${prefix}/etc']) m4trace:configure.in:12: -1- AC_SUBST_TRACE([sysconfdir]) m4trace:configure.in:12: -1- m4_pattern_allow([^sysconfdir$]) m4trace:configure.in:12: -1- AC_SUBST([sharedstatedir], ['${prefix}/com']) m4trace:configure.in:12: -1- AC_SUBST_TRACE([sharedstatedir]) m4trace:configure.in:12: -1- m4_pattern_allow([^sharedstatedir$]) m4trace:configure.in:12: -1- AC_SUBST([localstatedir], ['${prefix}/var']) m4trace:configure.in:12: -1- AC_SUBST_TRACE([localstatedir]) m4trace:configure.in:12: -1- m4_pattern_allow([^localstatedir$]) m4trace:configure.in:12: -1- AC_SUBST([includedir], ['${prefix}/include']) m4trace:configure.in:12: -1- AC_SUBST_TRACE([includedir]) m4trace:configure.in:12: -1- m4_pattern_allow([^includedir$]) m4trace:configure.in:12: -1- AC_SUBST([oldincludedir], ['/usr/include']) m4trace:configure.in:12: -1- AC_SUBST_TRACE([oldincludedir]) m4trace:configure.in:12: -1- m4_pattern_allow([^oldincludedir$]) m4trace:configure.in:12: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], ['${datarootdir}/doc/${PACKAGE_TARNAME}'], ['${datarootdir}/doc/${PACKAGE}'])]) m4trace:configure.in:12: -1- AC_SUBST_TRACE([docdir]) m4trace:configure.in:12: -1- m4_pattern_allow([^docdir$]) m4trace:configure.in:12: -1- AC_SUBST([infodir], ['${datarootdir}/info']) m4trace:configure.in:12: -1- AC_SUBST_TRACE([infodir]) m4trace:configure.in:12: -1- m4_pattern_allow([^infodir$]) m4trace:configure.in:12: -1- AC_SUBST([htmldir], ['${docdir}']) m4trace:configure.in:12: -1- AC_SUBST_TRACE([htmldir]) m4trace:configure.in:12: -1- m4_pattern_allow([^htmldir$]) m4trace:configure.in:12: -1- AC_SUBST([dvidir], ['${docdir}']) m4trace:configure.in:12: -1- AC_SUBST_TRACE([dvidir]) m4trace:configure.in:12: -1- m4_pattern_allow([^dvidir$]) m4trace:configure.in:12: -1- AC_SUBST([pdfdir], ['${docdir}']) m4trace:configure.in:12: -1- AC_SUBST_TRACE([pdfdir]) m4trace:configure.in:12: -1- m4_pattern_allow([^pdfdir$]) m4trace:configure.in:12: -1- AC_SUBST([psdir], ['${docdir}']) m4trace:configure.in:12: -1- AC_SUBST_TRACE([psdir]) m4trace:configure.in:12: -1- m4_pattern_allow([^psdir$]) m4trace:configure.in:12: -1- AC_SUBST([libdir], ['${exec_prefix}/lib']) m4trace:configure.in:12: -1- AC_SUBST_TRACE([libdir]) m4trace:configure.in:12: -1- m4_pattern_allow([^libdir$]) m4trace:configure.in:12: -1- AC_SUBST([localedir], ['${datarootdir}/locale']) m4trace:configure.in:12: -1- AC_SUBST_TRACE([localedir]) m4trace:configure.in:12: -1- m4_pattern_allow([^localedir$]) m4trace:configure.in:12: -1- AC_SUBST([mandir], ['${datarootdir}/man']) m4trace:configure.in:12: -1- AC_SUBST_TRACE([mandir]) m4trace:configure.in:12: -1- m4_pattern_allow([^mandir$]) m4trace:configure.in:12: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.in:12: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */ @%:@undef PACKAGE_NAME]) m4trace:configure.in:12: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.in:12: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */ @%:@undef PACKAGE_TARNAME]) m4trace:configure.in:12: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.in:12: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */ @%:@undef PACKAGE_VERSION]) m4trace:configure.in:12: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.in:12: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */ @%:@undef PACKAGE_STRING]) m4trace:configure.in:12: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.in:12: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */ @%:@undef PACKAGE_BUGREPORT]) m4trace:configure.in:12: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL]) m4trace:configure.in:12: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.in:12: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */ @%:@undef PACKAGE_URL]) m4trace:configure.in:12: -1- AC_SUBST([DEFS]) m4trace:configure.in:12: -1- AC_SUBST_TRACE([DEFS]) m4trace:configure.in:12: -1- m4_pattern_allow([^DEFS$]) m4trace:configure.in:12: -1- AC_SUBST([ECHO_C]) m4trace:configure.in:12: -1- AC_SUBST_TRACE([ECHO_C]) m4trace:configure.in:12: -1- m4_pattern_allow([^ECHO_C$]) m4trace:configure.in:12: -1- AC_SUBST([ECHO_N]) m4trace:configure.in:12: -1- AC_SUBST_TRACE([ECHO_N]) m4trace:configure.in:12: -1- m4_pattern_allow([^ECHO_N$]) m4trace:configure.in:12: -1- AC_SUBST([ECHO_T]) m4trace:configure.in:12: -1- AC_SUBST_TRACE([ECHO_T]) m4trace:configure.in:12: -1- m4_pattern_allow([^ECHO_T$]) m4trace:configure.in:12: -1- AC_SUBST([LIBS]) m4trace:configure.in:12: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.in:12: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.in:12: -1- AC_SUBST([build_alias]) m4trace:configure.in:12: -1- AC_SUBST_TRACE([build_alias]) m4trace:configure.in:12: -1- m4_pattern_allow([^build_alias$]) m4trace:configure.in:12: -1- AC_SUBST([host_alias]) m4trace:configure.in:12: -1- AC_SUBST_TRACE([host_alias]) m4trace:configure.in:12: -1- m4_pattern_allow([^host_alias$]) m4trace:configure.in:12: -1- AC_SUBST([target_alias]) m4trace:configure.in:12: -1- AC_SUBST_TRACE([target_alias]) m4trace:configure.in:12: -1- m4_pattern_allow([^target_alias$]) m4trace:configure.in:17: -1- AC_SUBST([DVBSTREAMER_MAJOR]) m4trace:configure.in:17: -1- AC_SUBST_TRACE([DVBSTREAMER_MAJOR]) m4trace:configure.in:17: -1- m4_pattern_allow([^DVBSTREAMER_MAJOR$]) m4trace:configure.in:18: -1- AC_SUBST([DVBSTREAMER_MINOR]) m4trace:configure.in:18: -1- AC_SUBST_TRACE([DVBSTREAMER_MINOR]) m4trace:configure.in:18: -1- m4_pattern_allow([^DVBSTREAMER_MINOR$]) m4trace:configure.in:19: -1- AC_SUBST([DVBSTREAMER_MICRO]) m4trace:configure.in:19: -1- AC_SUBST_TRACE([DVBSTREAMER_MICRO]) m4trace:configure.in:19: -1- m4_pattern_allow([^DVBSTREAMER_MICRO$]) m4trace:configure.in:21: -1- AC_DEFINE_TRACE_LITERAL([DVBSTREAMER_MAJOR]) m4trace:configure.in:21: -1- m4_pattern_allow([^DVBSTREAMER_MAJOR$]) m4trace:configure.in:21: -1- AH_OUTPUT([DVBSTREAMER_MAJOR], [/* DVBStreamer Major version number */ @%:@undef DVBSTREAMER_MAJOR]) m4trace:configure.in:22: -1- AC_DEFINE_TRACE_LITERAL([DVBSTREAMER_MINOR]) m4trace:configure.in:22: -1- m4_pattern_allow([^DVBSTREAMER_MINOR$]) m4trace:configure.in:22: -1- AH_OUTPUT([DVBSTREAMER_MINOR], [/* DVBStreamer Minor version number */ @%:@undef DVBSTREAMER_MINOR]) m4trace:configure.in:23: -1- AC_DEFINE_TRACE_LITERAL([DVBSTREAMER_MICRO]) m4trace:configure.in:23: -1- m4_pattern_allow([^DVBSTREAMER_MICRO$]) m4trace:configure.in:23: -1- AH_OUTPUT([DVBSTREAMER_MICRO], [/* DVBStreamer Micro version number */ @%:@undef DVBSTREAMER_MICRO]) m4trace:configure.in:24: -1- AC_DEFINE_TRACE_LITERAL([DVBSTREAMER_VERSION]) m4trace:configure.in:24: -1- m4_pattern_allow([^DVBSTREAMER_VERSION$]) m4trace:configure.in:24: -1- AH_OUTPUT([DVBSTREAMER_VERSION], [/* DVBStreamer combined version number as an int */ @%:@undef DVBSTREAMER_VERSION]) m4trace:configure.in:27: -1- AM_INIT_AUTOMAKE(["dvbstreamer"], [$SPEC_VERSION]) m4trace:configure.in:27: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) m4trace:configure.in:27: -1- AM_AUTOMAKE_VERSION([1.11.1]) m4trace:configure.in:27: -1- AC_REQUIRE_AUX_FILE([install-sh]) m4trace:configure.in:27: -1- AC_SUBST([INSTALL_PROGRAM]) m4trace:configure.in:27: -1- AC_SUBST_TRACE([INSTALL_PROGRAM]) m4trace:configure.in:27: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) m4trace:configure.in:27: -1- AC_SUBST([INSTALL_SCRIPT]) m4trace:configure.in:27: -1- AC_SUBST_TRACE([INSTALL_SCRIPT]) m4trace:configure.in:27: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) m4trace:configure.in:27: -1- AC_SUBST([INSTALL_DATA]) m4trace:configure.in:27: -1- AC_SUBST_TRACE([INSTALL_DATA]) m4trace:configure.in:27: -1- m4_pattern_allow([^INSTALL_DATA$]) m4trace:configure.in:27: -1- AC_SUBST([am__isrc], [' -I$(srcdir)']) m4trace:configure.in:27: -1- AC_SUBST_TRACE([am__isrc]) m4trace:configure.in:27: -1- m4_pattern_allow([^am__isrc$]) m4trace:configure.in:27: -1- _AM_SUBST_NOTMAKE([am__isrc]) m4trace:configure.in:27: -1- AC_SUBST([CYGPATH_W]) m4trace:configure.in:27: -1- AC_SUBST_TRACE([CYGPATH_W]) m4trace:configure.in:27: -1- m4_pattern_allow([^CYGPATH_W$]) m4trace:configure.in:27: -1- AC_SUBST([PACKAGE], ["dvbstreamer"]) m4trace:configure.in:27: -1- AC_SUBST_TRACE([PACKAGE]) m4trace:configure.in:27: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.in:27: -1- AC_SUBST([VERSION], [$SPEC_VERSION]) m4trace:configure.in:27: -1- AC_SUBST_TRACE([VERSION]) m4trace:configure.in:27: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.in:27: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE]) m4trace:configure.in:27: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.in:27: -1- AH_OUTPUT([PACKAGE], [/* Name of package */ @%:@undef PACKAGE]) m4trace:configure.in:27: -1- AC_DEFINE_TRACE_LITERAL([VERSION]) m4trace:configure.in:27: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.in:27: -1- AH_OUTPUT([VERSION], [/* Version number of package */ @%:@undef VERSION]) m4trace:configure.in:27: -1- AC_REQUIRE_AUX_FILE([missing]) m4trace:configure.in:27: -1- AC_SUBST([ACLOCAL]) m4trace:configure.in:27: -1- AC_SUBST_TRACE([ACLOCAL]) m4trace:configure.in:27: -1- m4_pattern_allow([^ACLOCAL$]) m4trace:configure.in:27: -1- AC_SUBST([AUTOCONF]) m4trace:configure.in:27: -1- AC_SUBST_TRACE([AUTOCONF]) m4trace:configure.in:27: -1- m4_pattern_allow([^AUTOCONF$]) m4trace:configure.in:27: -1- AC_SUBST([AUTOMAKE]) m4trace:configure.in:27: -1- AC_SUBST_TRACE([AUTOMAKE]) m4trace:configure.in:27: -1- m4_pattern_allow([^AUTOMAKE$]) m4trace:configure.in:27: -1- AC_SUBST([AUTOHEADER]) m4trace:configure.in:27: -1- AC_SUBST_TRACE([AUTOHEADER]) m4trace:configure.in:27: -1- m4_pattern_allow([^AUTOHEADER$]) m4trace:configure.in:27: -1- AC_SUBST([MAKEINFO]) m4trace:configure.in:27: -1- AC_SUBST_TRACE([MAKEINFO]) m4trace:configure.in:27: -1- m4_pattern_allow([^MAKEINFO$]) m4trace:configure.in:27: -1- AC_SUBST([install_sh]) m4trace:configure.in:27: -1- AC_SUBST_TRACE([install_sh]) m4trace:configure.in:27: -1- m4_pattern_allow([^install_sh$]) m4trace:configure.in:27: -1- AC_SUBST([STRIP]) m4trace:configure.in:27: -1- AC_SUBST_TRACE([STRIP]) m4trace:configure.in:27: -1- m4_pattern_allow([^STRIP$]) m4trace:configure.in:27: -1- AC_SUBST([INSTALL_STRIP_PROGRAM]) m4trace:configure.in:27: -1- AC_SUBST_TRACE([INSTALL_STRIP_PROGRAM]) m4trace:configure.in:27: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) m4trace:configure.in:27: -1- AC_REQUIRE_AUX_FILE([install-sh]) m4trace:configure.in:27: -1- AC_SUBST([MKDIR_P]) m4trace:configure.in:27: -1- AC_SUBST_TRACE([MKDIR_P]) m4trace:configure.in:27: -1- m4_pattern_allow([^MKDIR_P$]) m4trace:configure.in:27: -1- AC_SUBST([mkdir_p], ["$MKDIR_P"]) m4trace:configure.in:27: -1- AC_SUBST_TRACE([mkdir_p]) m4trace:configure.in:27: -1- m4_pattern_allow([^mkdir_p$]) m4trace:configure.in:27: -1- AC_SUBST([AWK]) m4trace:configure.in:27: -1- AC_SUBST_TRACE([AWK]) m4trace:configure.in:27: -1- m4_pattern_allow([^AWK$]) m4trace:configure.in:27: -1- AC_SUBST([SET_MAKE]) m4trace:configure.in:27: -1- AC_SUBST_TRACE([SET_MAKE]) m4trace:configure.in:27: -1- m4_pattern_allow([^SET_MAKE$]) m4trace:configure.in:27: -1- AC_SUBST([am__leading_dot]) m4trace:configure.in:27: -1- AC_SUBST_TRACE([am__leading_dot]) m4trace:configure.in:27: -1- m4_pattern_allow([^am__leading_dot$]) m4trace:configure.in:27: -1- AC_SUBST([AMTAR]) m4trace:configure.in:27: -1- AC_SUBST_TRACE([AMTAR]) m4trace:configure.in:27: -1- m4_pattern_allow([^AMTAR$]) m4trace:configure.in:27: -1- AC_SUBST([am__tar]) m4trace:configure.in:27: -1- AC_SUBST_TRACE([am__tar]) m4trace:configure.in:27: -1- m4_pattern_allow([^am__tar$]) m4trace:configure.in:27: -1- AC_SUBST([am__untar]) m4trace:configure.in:27: -1- AC_SUBST_TRACE([am__untar]) m4trace:configure.in:27: -1- m4_pattern_allow([^am__untar$]) m4trace:configure.in:29: -1- _m4_warn([obsolete], [The macro `AM_CONFIG_HEADER' is obsolete. You should run autoupdate.], [aclocal.m4:8408: AM_CONFIG_HEADER is expanded from... configure.in:29: the top level]) m4trace:configure.in:29: -1- AC_CONFIG_HEADERS([config.h]) m4trace:configure.in:31: -1- _m4_warn([obsolete], [The macro `AC_ISC_POSIX' is obsolete. You should run autoupdate.], [../../lib/autoconf/specific.m4:442: AC_ISC_POSIX is expanded from... configure.in:31: the top level]) m4trace:configure.in:31: -1- AC_SUBST([CC]) m4trace:configure.in:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.in:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:31: -1- AC_SUBST([CFLAGS]) m4trace:configure.in:31: -1- AC_SUBST_TRACE([CFLAGS]) m4trace:configure.in:31: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.in:31: -1- AC_SUBST([LDFLAGS]) m4trace:configure.in:31: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.in:31: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.in:31: -1- AC_SUBST([LIBS]) m4trace:configure.in:31: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.in:31: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.in:31: -1- AC_SUBST([CPPFLAGS]) m4trace:configure.in:31: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:configure.in:31: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.in:31: -1- AC_SUBST([CC]) m4trace:configure.in:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.in:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:31: -1- AC_SUBST([CC]) m4trace:configure.in:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.in:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:31: -1- AC_SUBST([CC]) m4trace:configure.in:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.in:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:31: -1- AC_SUBST([CC]) m4trace:configure.in:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.in:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:31: -1- AC_SUBST([ac_ct_CC]) m4trace:configure.in:31: -1- AC_SUBST_TRACE([ac_ct_CC]) m4trace:configure.in:31: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.in:31: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext]) m4trace:configure.in:31: -1- AC_SUBST_TRACE([EXEEXT]) m4trace:configure.in:31: -1- m4_pattern_allow([^EXEEXT$]) m4trace:configure.in:31: -1- AC_SUBST([OBJEXT], [$ac_cv_objext]) m4trace:configure.in:31: -1- AC_SUBST_TRACE([OBJEXT]) m4trace:configure.in:31: -1- m4_pattern_allow([^OBJEXT$]) m4trace:configure.in:31: -1- AC_SUBST([DEPDIR], ["${am__leading_dot}deps"]) m4trace:configure.in:31: -1- AC_SUBST_TRACE([DEPDIR]) m4trace:configure.in:31: -1- m4_pattern_allow([^DEPDIR$]) m4trace:configure.in:31: -1- AC_SUBST([am__include]) m4trace:configure.in:31: -1- AC_SUBST_TRACE([am__include]) m4trace:configure.in:31: -1- m4_pattern_allow([^am__include$]) m4trace:configure.in:31: -1- AC_SUBST([am__quote]) m4trace:configure.in:31: -1- AC_SUBST_TRACE([am__quote]) m4trace:configure.in:31: -1- m4_pattern_allow([^am__quote$]) m4trace:configure.in:31: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) m4trace:configure.in:31: -1- AC_SUBST([AMDEP_TRUE]) m4trace:configure.in:31: -1- AC_SUBST_TRACE([AMDEP_TRUE]) m4trace:configure.in:31: -1- m4_pattern_allow([^AMDEP_TRUE$]) m4trace:configure.in:31: -1- AC_SUBST([AMDEP_FALSE]) m4trace:configure.in:31: -1- AC_SUBST_TRACE([AMDEP_FALSE]) m4trace:configure.in:31: -1- m4_pattern_allow([^AMDEP_FALSE$]) m4trace:configure.in:31: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) m4trace:configure.in:31: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) m4trace:configure.in:31: -1- AC_SUBST([AMDEPBACKSLASH]) m4trace:configure.in:31: -1- AC_SUBST_TRACE([AMDEPBACKSLASH]) m4trace:configure.in:31: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) m4trace:configure.in:31: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) m4trace:configure.in:31: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type]) m4trace:configure.in:31: -1- AC_SUBST_TRACE([CCDEPMODE]) m4trace:configure.in:31: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.in:31: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.in:31: -1- AC_SUBST([am__fastdepCC_TRUE]) m4trace:configure.in:31: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) m4trace:configure.in:31: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.in:31: -1- AC_SUBST([am__fastdepCC_FALSE]) m4trace:configure.in:31: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE]) m4trace:configure.in:31: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.in:31: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) m4trace:configure.in:31: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) m4trace:configure.in:32: -1- AC_SUBST([CC]) m4trace:configure.in:32: -1- AC_SUBST_TRACE([CC]) m4trace:configure.in:32: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:32: -1- AC_SUBST([CFLAGS]) m4trace:configure.in:32: -1- AC_SUBST_TRACE([CFLAGS]) m4trace:configure.in:32: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.in:32: -1- AC_SUBST([LDFLAGS]) m4trace:configure.in:32: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.in:32: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.in:32: -1- AC_SUBST([LIBS]) m4trace:configure.in:32: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.in:32: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.in:32: -1- AC_SUBST([CPPFLAGS]) m4trace:configure.in:32: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:configure.in:32: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.in:32: -1- AC_SUBST([CC]) m4trace:configure.in:32: -1- AC_SUBST_TRACE([CC]) m4trace:configure.in:32: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:32: -1- AC_SUBST([CC]) m4trace:configure.in:32: -1- AC_SUBST_TRACE([CC]) m4trace:configure.in:32: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:32: -1- AC_SUBST([CC]) m4trace:configure.in:32: -1- AC_SUBST_TRACE([CC]) m4trace:configure.in:32: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:32: -1- AC_SUBST([CC]) m4trace:configure.in:32: -1- AC_SUBST_TRACE([CC]) m4trace:configure.in:32: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:32: -1- AC_SUBST([ac_ct_CC]) m4trace:configure.in:32: -1- AC_SUBST_TRACE([ac_ct_CC]) m4trace:configure.in:32: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.in:32: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type]) m4trace:configure.in:32: -1- AC_SUBST_TRACE([CCDEPMODE]) m4trace:configure.in:32: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.in:32: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.in:32: -1- AC_SUBST([am__fastdepCC_TRUE]) m4trace:configure.in:32: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) m4trace:configure.in:32: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.in:32: -1- AC_SUBST([am__fastdepCC_FALSE]) m4trace:configure.in:32: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE]) m4trace:configure.in:32: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.in:32: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) m4trace:configure.in:32: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) m4trace:configure.in:33: -1- _m4_warn([obsolete], [The macro `AM_PROG_CC_STDC' is obsolete. You should run autoupdate.], [aclocal.m4:8089: AM_PROG_CC_STDC is expanded from... configure.in:33: the top level]) m4trace:configure.in:33: -1- AC_SUBST([CC]) m4trace:configure.in:33: -1- AC_SUBST_TRACE([CC]) m4trace:configure.in:33: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:33: -1- AC_SUBST([CFLAGS]) m4trace:configure.in:33: -1- AC_SUBST_TRACE([CFLAGS]) m4trace:configure.in:33: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.in:33: -1- AC_SUBST([LDFLAGS]) m4trace:configure.in:33: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.in:33: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.in:33: -1- AC_SUBST([LIBS]) m4trace:configure.in:33: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.in:33: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.in:33: -1- AC_SUBST([CPPFLAGS]) m4trace:configure.in:33: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:configure.in:33: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.in:33: -1- AC_SUBST([CC]) m4trace:configure.in:33: -1- AC_SUBST_TRACE([CC]) m4trace:configure.in:33: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:33: -1- AC_SUBST([CC]) m4trace:configure.in:33: -1- AC_SUBST_TRACE([CC]) m4trace:configure.in:33: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:33: -1- AC_SUBST([CC]) m4trace:configure.in:33: -1- AC_SUBST_TRACE([CC]) m4trace:configure.in:33: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:33: -1- AC_SUBST([CC]) m4trace:configure.in:33: -1- AC_SUBST_TRACE([CC]) m4trace:configure.in:33: -1- m4_pattern_allow([^CC$]) m4trace:configure.in:33: -1- AC_SUBST([ac_ct_CC]) m4trace:configure.in:33: -1- AC_SUBST_TRACE([ac_ct_CC]) m4trace:configure.in:33: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.in:33: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type]) m4trace:configure.in:33: -1- AC_SUBST_TRACE([CCDEPMODE]) m4trace:configure.in:33: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.in:33: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.in:33: -1- AC_SUBST([am__fastdepCC_TRUE]) m4trace:configure.in:33: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) m4trace:configure.in:33: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.in:33: -1- AC_SUBST([am__fastdepCC_FALSE]) m4trace:configure.in:33: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE]) m4trace:configure.in:33: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.in:33: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) m4trace:configure.in:33: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) m4trace:configure.in:33: -1- _m4_warn([obsolete], [AM_PROG_CC_STDC: your code should no longer depend upon `am_cv_prog_cc_stdc', but upon `ac_cv_prog_cc_stdc'. Remove this warning and the assignment when you adjust the code. You can also remove the above call to AC_PROG_CC if you already called it elsewhere.], [aclocal.m4:8089: AM_PROG_CC_STDC is expanded from... configure.in:33: the top level]) m4trace:configure.in:34: -1- AC_SUBST([CPP]) m4trace:configure.in:34: -1- AC_SUBST_TRACE([CPP]) m4trace:configure.in:34: -1- m4_pattern_allow([^CPP$]) m4trace:configure.in:34: -1- AC_SUBST([CPPFLAGS]) m4trace:configure.in:34: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:configure.in:34: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.in:34: -1- AC_SUBST([CPP]) m4trace:configure.in:34: -1- AC_SUBST_TRACE([CPP]) m4trace:configure.in:34: -1- m4_pattern_allow([^CPP$]) m4trace:configure.in:34: -1- AC_SUBST([GREP]) m4trace:configure.in:34: -1- AC_SUBST_TRACE([GREP]) m4trace:configure.in:34: -1- m4_pattern_allow([^GREP$]) m4trace:configure.in:34: -1- AC_SUBST([EGREP]) m4trace:configure.in:34: -1- AC_SUBST_TRACE([EGREP]) m4trace:configure.in:34: -1- m4_pattern_allow([^EGREP$]) m4trace:configure.in:34: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS]) m4trace:configure.in:34: -1- m4_pattern_allow([^STDC_HEADERS$]) m4trace:configure.in:34: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */ @%:@undef STDC_HEADERS]) m4trace:configure.in:35: -1- AM_PROG_CC_C_O m4trace:configure.in:35: -1- AC_DEFINE_TRACE_LITERAL([NO_MINUS_C_MINUS_O]) m4trace:configure.in:35: -1- m4_pattern_allow([^NO_MINUS_C_MINUS_O$]) m4trace:configure.in:35: -1- AH_OUTPUT([NO_MINUS_C_MINUS_O], [/* Define to 1 if your C compiler doesn\'t accept -c and -o together. */ @%:@undef NO_MINUS_C_MINUS_O]) m4trace:configure.in:35: -1- AC_REQUIRE_AUX_FILE([compile]) m4trace:configure.in:46: -1- LT_INIT([dlopen win32-dll disable-static]) m4trace:configure.in:46: -1- m4_pattern_forbid([^_?LT_[A-Z_]+$]) m4trace:configure.in:46: -1- m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$]) m4trace:configure.in:46: -1- AC_REQUIRE_AUX_FILE([ltmain.sh]) m4trace:configure.in:46: -1- AC_SUBST([AS]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([AS]) m4trace:configure.in:46: -1- m4_pattern_allow([^AS$]) m4trace:configure.in:46: -1- AC_SUBST([DLLTOOL]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([DLLTOOL]) m4trace:configure.in:46: -1- m4_pattern_allow([^DLLTOOL$]) m4trace:configure.in:46: -1- AC_SUBST([OBJDUMP]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([OBJDUMP]) m4trace:configure.in:46: -1- m4_pattern_allow([^OBJDUMP$]) m4trace:configure.in:46: -1- AC_SUBST([LIBTOOL]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([LIBTOOL]) m4trace:configure.in:46: -1- m4_pattern_allow([^LIBTOOL$]) m4trace:configure.in:46: -1- AC_CANONICAL_HOST m4trace:configure.in:46: -1- AC_CANONICAL_BUILD m4trace:configure.in:46: -1- AC_REQUIRE_AUX_FILE([config.sub]) m4trace:configure.in:46: -1- AC_REQUIRE_AUX_FILE([config.guess]) m4trace:configure.in:46: -1- AC_SUBST([build], [$ac_cv_build]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([build]) m4trace:configure.in:46: -1- m4_pattern_allow([^build$]) m4trace:configure.in:46: -1- AC_SUBST([build_cpu], [$[1]]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([build_cpu]) m4trace:configure.in:46: -1- m4_pattern_allow([^build_cpu$]) m4trace:configure.in:46: -1- AC_SUBST([build_vendor], [$[2]]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([build_vendor]) m4trace:configure.in:46: -1- m4_pattern_allow([^build_vendor$]) m4trace:configure.in:46: -1- AC_SUBST([build_os]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([build_os]) m4trace:configure.in:46: -1- m4_pattern_allow([^build_os$]) m4trace:configure.in:46: -1- AC_SUBST([host], [$ac_cv_host]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([host]) m4trace:configure.in:46: -1- m4_pattern_allow([^host$]) m4trace:configure.in:46: -1- AC_SUBST([host_cpu], [$[1]]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([host_cpu]) m4trace:configure.in:46: -1- m4_pattern_allow([^host_cpu$]) m4trace:configure.in:46: -1- AC_SUBST([host_vendor], [$[2]]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([host_vendor]) m4trace:configure.in:46: -1- m4_pattern_allow([^host_vendor$]) m4trace:configure.in:46: -1- AC_SUBST([host_os]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([host_os]) m4trace:configure.in:46: -1- m4_pattern_allow([^host_os$]) m4trace:configure.in:46: -1- AC_SUBST([SED]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([SED]) m4trace:configure.in:46: -1- m4_pattern_allow([^SED$]) m4trace:configure.in:46: -1- AC_SUBST([FGREP]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([FGREP]) m4trace:configure.in:46: -1- m4_pattern_allow([^FGREP$]) m4trace:configure.in:46: -1- AC_SUBST([GREP]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([GREP]) m4trace:configure.in:46: -1- m4_pattern_allow([^GREP$]) m4trace:configure.in:46: -1- AC_SUBST([LD]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([LD]) m4trace:configure.in:46: -1- m4_pattern_allow([^LD$]) m4trace:configure.in:46: -1- AC_SUBST([DUMPBIN]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([DUMPBIN]) m4trace:configure.in:46: -1- m4_pattern_allow([^DUMPBIN$]) m4trace:configure.in:46: -1- AC_SUBST([ac_ct_DUMPBIN]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([ac_ct_DUMPBIN]) m4trace:configure.in:46: -1- m4_pattern_allow([^ac_ct_DUMPBIN$]) m4trace:configure.in:46: -1- AC_SUBST([DUMPBIN]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([DUMPBIN]) m4trace:configure.in:46: -1- m4_pattern_allow([^DUMPBIN$]) m4trace:configure.in:46: -1- AC_SUBST([NM]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([NM]) m4trace:configure.in:46: -1- m4_pattern_allow([^NM$]) m4trace:configure.in:46: -1- AC_SUBST([LN_S], [$as_ln_s]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([LN_S]) m4trace:configure.in:46: -1- m4_pattern_allow([^LN_S$]) m4trace:configure.in:46: -1- AC_SUBST([OBJDUMP]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([OBJDUMP]) m4trace:configure.in:46: -1- m4_pattern_allow([^OBJDUMP$]) m4trace:configure.in:46: -1- AC_SUBST([OBJDUMP]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([OBJDUMP]) m4trace:configure.in:46: -1- m4_pattern_allow([^OBJDUMP$]) m4trace:configure.in:46: -1- AC_SUBST([AR]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([AR]) m4trace:configure.in:46: -1- m4_pattern_allow([^AR$]) m4trace:configure.in:46: -1- AC_SUBST([STRIP]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([STRIP]) m4trace:configure.in:46: -1- m4_pattern_allow([^STRIP$]) m4trace:configure.in:46: -1- AC_SUBST([RANLIB]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([RANLIB]) m4trace:configure.in:46: -1- m4_pattern_allow([^RANLIB$]) m4trace:configure.in:46: -1- m4_pattern_allow([LT_OBJDIR]) m4trace:configure.in:46: -1- AC_DEFINE_TRACE_LITERAL([LT_OBJDIR]) m4trace:configure.in:46: -1- m4_pattern_allow([^LT_OBJDIR$]) m4trace:configure.in:46: -1- AH_OUTPUT([LT_OBJDIR], [/* Define to the sub-directory in which libtool stores uninstalled libraries. */ @%:@undef LT_OBJDIR]) m4trace:configure.in:46: -1- AC_SUBST([lt_ECHO]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([lt_ECHO]) m4trace:configure.in:46: -1- m4_pattern_allow([^lt_ECHO$]) m4trace:configure.in:46: -1- LT_SUPPORTED_TAG([CC]) m4trace:configure.in:46: -1- AC_SUBST([DSYMUTIL]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([DSYMUTIL]) m4trace:configure.in:46: -1- m4_pattern_allow([^DSYMUTIL$]) m4trace:configure.in:46: -1- AC_SUBST([NMEDIT]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([NMEDIT]) m4trace:configure.in:46: -1- m4_pattern_allow([^NMEDIT$]) m4trace:configure.in:46: -1- AC_SUBST([LIPO]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([LIPO]) m4trace:configure.in:46: -1- m4_pattern_allow([^LIPO$]) m4trace:configure.in:46: -1- AC_SUBST([OTOOL]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([OTOOL]) m4trace:configure.in:46: -1- m4_pattern_allow([^OTOOL$]) m4trace:configure.in:46: -1- AC_SUBST([OTOOL64]) m4trace:configure.in:46: -1- AC_SUBST_TRACE([OTOOL64]) m4trace:configure.in:46: -1- m4_pattern_allow([^OTOOL64$]) m4trace:configure.in:46: -1- AH_OUTPUT([HAVE_DLFCN_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_DLFCN_H]) m4trace:configure.in:46: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_SYS_TYPES_H]) m4trace:configure.in:46: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_SYS_STAT_H]) m4trace:configure.in:46: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDLIB_H]) m4trace:configure.in:46: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STRING_H]) m4trace:configure.in:46: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_MEMORY_H]) m4trace:configure.in:46: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STRINGS_H]) m4trace:configure.in:46: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_INTTYPES_H]) m4trace:configure.in:46: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDINT_H]) m4trace:configure.in:46: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_UNISTD_H]) m4trace:configure.in:46: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DLFCN_H]) m4trace:configure.in:46: -1- m4_pattern_allow([^HAVE_DLFCN_H$]) m4trace:configure.in:103: -1- AM_CONDITIONAL([ENABLE_ATSC], [test x$enable_atsc = xtrue]) m4trace:configure.in:103: -1- AC_SUBST([ENABLE_ATSC_TRUE]) m4trace:configure.in:103: -1- AC_SUBST_TRACE([ENABLE_ATSC_TRUE]) m4trace:configure.in:103: -1- m4_pattern_allow([^ENABLE_ATSC_TRUE$]) m4trace:configure.in:103: -1- AC_SUBST([ENABLE_ATSC_FALSE]) m4trace:configure.in:103: -1- AC_SUBST_TRACE([ENABLE_ATSC_FALSE]) m4trace:configure.in:103: -1- m4_pattern_allow([^ENABLE_ATSC_FALSE$]) m4trace:configure.in:103: -1- _AM_SUBST_NOTMAKE([ENABLE_ATSC_TRUE]) m4trace:configure.in:103: -1- _AM_SUBST_NOTMAKE([ENABLE_ATSC_FALSE]) m4trace:configure.in:106: -1- AC_DEFINE_TRACE_LITERAL([ENABLE_ATSC]) m4trace:configure.in:106: -1- m4_pattern_allow([^ENABLE_ATSC$]) m4trace:configure.in:106: -1- AH_OUTPUT([ENABLE_ATSC], [/* Enable ATSC support */ @%:@undef ENABLE_ATSC]) m4trace:configure.in:109: -1- AM_CONDITIONAL([ENABLE_DVB], [test x$enable_dvb = xtrue]) m4trace:configure.in:109: -1- AC_SUBST([ENABLE_DVB_TRUE]) m4trace:configure.in:109: -1- AC_SUBST_TRACE([ENABLE_DVB_TRUE]) m4trace:configure.in:109: -1- m4_pattern_allow([^ENABLE_DVB_TRUE$]) m4trace:configure.in:109: -1- AC_SUBST([ENABLE_DVB_FALSE]) m4trace:configure.in:109: -1- AC_SUBST_TRACE([ENABLE_DVB_FALSE]) m4trace:configure.in:109: -1- m4_pattern_allow([^ENABLE_DVB_FALSE$]) m4trace:configure.in:109: -1- _AM_SUBST_NOTMAKE([ENABLE_DVB_TRUE]) m4trace:configure.in:109: -1- _AM_SUBST_NOTMAKE([ENABLE_DVB_FALSE]) m4trace:configure.in:112: -1- AC_DEFINE_TRACE_LITERAL([ENABLE_DVB]) m4trace:configure.in:112: -1- m4_pattern_allow([^ENABLE_DVB$]) m4trace:configure.in:112: -1- AH_OUTPUT([ENABLE_DVB], [/* Enable DVB support */ @%:@undef ENABLE_DVB]) m4trace:configure.in:128: -1- AC_DEFINE_TRACE_LITERAL([USE_GETADDRINFO]) m4trace:configure.in:128: -1- m4_pattern_allow([^USE_GETADDRINFO$]) m4trace:configure.in:128: -1- AH_OUTPUT([USE_GETADDRINFO], [/* Use getaddrinfo for address resolution */ @%:@undef USE_GETADDRINFO]) m4trace:configure.in:139: -1- AM_CONDITIONAL([ENABLE_FSTREAMER], [test x$enable_fstreamer = xtrue]) m4trace:configure.in:139: -1- AC_SUBST([ENABLE_FSTREAMER_TRUE]) m4trace:configure.in:139: -1- AC_SUBST_TRACE([ENABLE_FSTREAMER_TRUE]) m4trace:configure.in:139: -1- m4_pattern_allow([^ENABLE_FSTREAMER_TRUE$]) m4trace:configure.in:139: -1- AC_SUBST([ENABLE_FSTREAMER_FALSE]) m4trace:configure.in:139: -1- AC_SUBST_TRACE([ENABLE_FSTREAMER_FALSE]) m4trace:configure.in:139: -1- m4_pattern_allow([^ENABLE_FSTREAMER_FALSE$]) m4trace:configure.in:139: -1- _AM_SUBST_NOTMAKE([ENABLE_FSTREAMER_TRUE]) m4trace:configure.in:139: -1- _AM_SUBST_NOTMAKE([ENABLE_FSTREAMER_FALSE]) m4trace:configure.in:144: -1- AH_OUTPUT([HAVE_LIBSQLITE3], [/* Define to 1 if you have the `sqlite3\' library (-lsqlite3). */ @%:@undef HAVE_LIBSQLITE3]) m4trace:configure.in:144: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBSQLITE3]) m4trace:configure.in:144: -1- m4_pattern_allow([^HAVE_LIBSQLITE3$]) m4trace:configure.in:158: -1- AC_SUBST([READLINE_TERMCAP]) m4trace:configure.in:158: -1- AC_SUBST_TRACE([READLINE_TERMCAP]) m4trace:configure.in:158: -1- m4_pattern_allow([^READLINE_TERMCAP$]) m4trace:configure.in:167: -1- AC_SUBST([GETTIME_LIB]) m4trace:configure.in:167: -1- AC_SUBST_TRACE([GETTIME_LIB]) m4trace:configure.in:167: -1- m4_pattern_allow([^GETTIME_LIB$]) m4trace:configure.in:177: -1- AC_SUBST([ICONV_LIB]) m4trace:configure.in:177: -1- AC_SUBST_TRACE([ICONV_LIB]) m4trace:configure.in:177: -1- m4_pattern_allow([^ICONV_LIB$]) m4trace:configure.in:180: -1- AC_DEFINE_TRACE_LITERAL([ICONV_INPUT_CAST]) m4trace:configure.in:180: -1- m4_pattern_allow([^ICONV_INPUT_CAST$]) m4trace:configure.in:180: -1- AH_OUTPUT([ICONV_INPUT_CAST], [/* Glibc\'s prototype doesn\'t take a const char * */ @%:@undef ICONV_INPUT_CAST]) m4trace:configure.in:182: -1- AC_DEFINE_TRACE_LITERAL([ICONV_INPUT_CAST]) m4trace:configure.in:182: -1- m4_pattern_allow([^ICONV_INPUT_CAST$]) m4trace:configure.in:182: -1- AH_OUTPUT([ICONV_INPUT_CAST], [/* libiconv\'s prototype takes a const char * */ @%:@undef ICONV_INPUT_CAST]) m4trace:configure.in:191: -1- AH_OUTPUT([HAVE_LIBEV], [/* Define to 1 if you have the `ev\' library (-lev). */ @%:@undef HAVE_LIBEV]) m4trace:configure.in:191: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBEV]) m4trace:configure.in:191: -1- m4_pattern_allow([^HAVE_LIBEV$]) m4trace:configure.in:198: -1- AH_OUTPUT([HAVE_LIBYAML], [/* Define to 1 if you have the `yaml\' library (-lyaml). */ @%:@undef HAVE_LIBYAML]) m4trace:configure.in:198: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBYAML]) m4trace:configure.in:198: -1- m4_pattern_allow([^HAVE_LIBYAML$]) m4trace:configure.in:205: -1- AH_OUTPUT([HAVE_LIBLTDL], [/* Define to 1 if you have the `ltdl\' library (-lltdl). */ @%:@undef HAVE_LIBLTDL]) m4trace:configure.in:205: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBLTDL]) m4trace:configure.in:205: -1- m4_pattern_allow([^HAVE_LIBLTDL$]) m4trace:configure.in:211: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete. You should run autoupdate.], [../../lib/autoconf/general.m4:2602: AC_TRY_COMPILE is expanded from... ../../lib/m4sugar/m4sh.m4:598: AS_IF is expanded from... ../../lib/autoconf/general.m4:2019: AC_CACHE_VAL is expanded from... ../../lib/autoconf/general.m4:2040: AC_CACHE_CHECK is expanded from... configure.in:211: the top level]) m4trace:configure.in:220: -1- AC_DEFINE_TRACE_LITERAL([HAVE_VARIADIC_MACROS]) m4trace:configure.in:220: -1- m4_pattern_allow([^HAVE_VARIADIC_MACROS$]) m4trace:configure.in:220: -1- AH_OUTPUT([HAVE_VARIADIC_MACROS], [/* Support for variadic macros */ @%:@undef HAVE_VARIADIC_MACROS]) m4trace:configure.in:225: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete. You should run autoupdate.], [../../lib/autoconf/general.m4:2602: AC_TRY_COMPILE is expanded from... ../../lib/m4sugar/m4sh.m4:598: AS_IF is expanded from... ../../lib/autoconf/general.m4:2019: AC_CACHE_VAL is expanded from... ../../lib/autoconf/general.m4:2040: AC_CACHE_CHECK is expanded from... configure.in:225: the top level]) m4trace:configure.in:233: -1- AC_DEFINE_TRACE_LITERAL([HAVE_FE_CAN_2G_MODULATION]) m4trace:configure.in:233: -1- m4_pattern_allow([^HAVE_FE_CAN_2G_MODULATION$]) m4trace:configure.in:233: -1- AH_OUTPUT([HAVE_FE_CAN_2G_MODULATION], [/* Frontend enum exists for 2G modulation */ @%:@undef HAVE_FE_CAN_2G_MODULATION]) m4trace:configure.in:255: -1- AC_SUBST([NO_PREFIX_PACKAGE_DATA_DIR]) m4trace:configure.in:255: -1- AC_SUBST_TRACE([NO_PREFIX_PACKAGE_DATA_DIR]) m4trace:configure.in:255: -1- m4_pattern_allow([^NO_PREFIX_PACKAGE_DATA_DIR$]) m4trace:configure.in:257: -1- AC_SUBST([PACKAGE_DATA_DIR]) m4trace:configure.in:257: -1- AC_SUBST_TRACE([PACKAGE_DATA_DIR]) m4trace:configure.in:257: -1- m4_pattern_allow([^PACKAGE_DATA_DIR$]) m4trace:configure.in:261: -1- AC_SUBST([NO_PREFIX_PACKAGE_DOC_DIR]) m4trace:configure.in:261: -1- AC_SUBST_TRACE([NO_PREFIX_PACKAGE_DOC_DIR]) m4trace:configure.in:261: -1- m4_pattern_allow([^NO_PREFIX_PACKAGE_DOC_DIR$]) m4trace:configure.in:263: -1- AC_SUBST([PACKAGE_DOC_DIR]) m4trace:configure.in:263: -1- AC_SUBST_TRACE([PACKAGE_DOC_DIR]) m4trace:configure.in:263: -1- m4_pattern_allow([^PACKAGE_DOC_DIR$]) m4trace:configure.in:265: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_DATA_DIR]) m4trace:configure.in:265: -1- m4_pattern_allow([^PACKAGE_DATA_DIR$]) m4trace:configure.in:265: -1- AH_OUTPUT([PACKAGE_DATA_DIR], [/* Define this to data directory location */ @%:@undef PACKAGE_DATA_DIR]) m4trace:configure.in:266: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_DOC_DIR]) m4trace:configure.in:266: -1- m4_pattern_allow([^PACKAGE_DOC_DIR$]) m4trace:configure.in:266: -1- AH_OUTPUT([PACKAGE_DOC_DIR], [/* Define this to Docs directory location */ @%:@undef PACKAGE_DOC_DIR]) m4trace:configure.in:267: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_SOURCE_DIR]) m4trace:configure.in:267: -1- m4_pattern_allow([^PACKAGE_SOURCE_DIR$]) m4trace:configure.in:267: -1- AH_OUTPUT([PACKAGE_SOURCE_DIR], [/* Define this to source directory location */ @%:@undef PACKAGE_SOURCE_DIR]) m4trace:configure.in:285: -1- AC_DEFINE_TRACE_LITERAL([DVBSTREAMER_PLUGINDIR]) m4trace:configure.in:285: -1- m4_pattern_allow([^DVBSTREAMER_PLUGINDIR$]) m4trace:configure.in:285: -1- AH_OUTPUT([DVBSTREAMER_PLUGINDIR], [/* Define this to plugins directory location */ @%:@undef DVBSTREAMER_PLUGINDIR]) m4trace:configure.in:286: -1- AC_DEFINE_TRACE_LITERAL([DVBSTREAMER_REL_PLUGINDIR]) m4trace:configure.in:286: -1- m4_pattern_allow([^DVBSTREAMER_REL_PLUGINDIR$]) m4trace:configure.in:286: -1- AH_OUTPUT([DVBSTREAMER_REL_PLUGINDIR], [/* Define this to plugin directory relative to execution prefix */ @%:@undef DVBSTREAMER_REL_PLUGINDIR]) m4trace:configure.in:287: -1- AC_SUBST([DVBSTREAMER_PLUGINDIR]) m4trace:configure.in:287: -1- AC_SUBST_TRACE([DVBSTREAMER_PLUGINDIR]) m4trace:configure.in:287: -1- m4_pattern_allow([^DVBSTREAMER_PLUGINDIR$]) m4trace:configure.in:289: -1- AC_CONFIG_FILES([ Makefile include/Makefile include/dvbpsi/Makefile src/dvbpsi/Makefile src/Makefile src/plugins/Makefile ]) m4trace:configure.in:289: -1- _m4_warn([obsolete], [AC_OUTPUT should be used without arguments. You should run autoupdate.], []) m4trace:configure.in:289: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) m4trace:configure.in:289: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) m4trace:configure.in:289: -1- m4_pattern_allow([^LIB@&t@OBJS$]) m4trace:configure.in:289: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) m4trace:configure.in:289: -1- AC_SUBST_TRACE([LTLIBOBJS]) m4trace:configure.in:289: -1- m4_pattern_allow([^LTLIBOBJS$]) m4trace:configure.in:289: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) m4trace:configure.in:289: -1- AC_SUBST([am__EXEEXT_TRUE]) m4trace:configure.in:289: -1- AC_SUBST_TRACE([am__EXEEXT_TRUE]) m4trace:configure.in:289: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) m4trace:configure.in:289: -1- AC_SUBST([am__EXEEXT_FALSE]) m4trace:configure.in:289: -1- AC_SUBST_TRACE([am__EXEEXT_FALSE]) m4trace:configure.in:289: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) m4trace:configure.in:289: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) m4trace:configure.in:289: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) m4trace:configure.in:289: -1- AC_SUBST_TRACE([top_builddir]) m4trace:configure.in:289: -1- AC_SUBST_TRACE([top_build_prefix]) m4trace:configure.in:289: -1- AC_SUBST_TRACE([srcdir]) m4trace:configure.in:289: -1- AC_SUBST_TRACE([abs_srcdir]) m4trace:configure.in:289: -1- AC_SUBST_TRACE([top_srcdir]) m4trace:configure.in:289: -1- AC_SUBST_TRACE([abs_top_srcdir]) m4trace:configure.in:289: -1- AC_SUBST_TRACE([builddir]) m4trace:configure.in:289: -1- AC_SUBST_TRACE([abs_builddir]) m4trace:configure.in:289: -1- AC_SUBST_TRACE([abs_top_builddir]) m4trace:configure.in:289: -1- AC_SUBST_TRACE([INSTALL]) m4trace:configure.in:289: -1- AC_SUBST_TRACE([MKDIR_P]) m4trace:configure.in:289: -1- AC_REQUIRE_AUX_FILE([ltmain.sh]) dvbstreamer-2.1.0/compile000077500000000000000000000072711217721213100154120ustar00rootroot00000000000000#! /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: dvbstreamer-2.1.0/config.guess000077500000000000000000001276371217721213100163650ustar00rootroot00000000000000#! /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 # Free Software Foundation, Inc. timestamp='2009-12-30' # 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 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'` exit ;; 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:*:[456]) 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 echo ${UNAME_MACHINE}-unknown-linux-gnueabi 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 ;; 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 ;; 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: dvbstreamer-2.1.0/config.h.in000066400000000000000000000060101217721213100160450ustar00rootroot00000000000000/* config.h.in. Generated from configure.in by autoheader. */ /* DVBStreamer Major version number */ #undef DVBSTREAMER_MAJOR /* DVBStreamer Micro version number */ #undef DVBSTREAMER_MICRO /* DVBStreamer Minor version number */ #undef DVBSTREAMER_MINOR /* Define this to plugins directory location */ #undef DVBSTREAMER_PLUGINDIR /* Define this to plugin directory relative to execution prefix */ #undef DVBSTREAMER_REL_PLUGINDIR /* DVBStreamer combined version number as an int */ #undef DVBSTREAMER_VERSION /* Enable ATSC support */ #undef ENABLE_ATSC /* Enable DVB support */ #undef ENABLE_DVB /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Frontend enum exists for 2G modulation */ #undef HAVE_FE_CAN_2G_MODULATION /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `ev' library (-lev). */ #undef HAVE_LIBEV /* Define to 1 if you have the `ltdl' library (-lltdl). */ #undef HAVE_LIBLTDL /* Define to 1 if you have the `sqlite3' library (-lsqlite3). */ #undef HAVE_LIBSQLITE3 /* Define to 1 if you have the `yaml' library (-lyaml). */ #undef HAVE_LIBYAML /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* 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 /* Support for variadic macros */ #undef HAVE_VARIADIC_MACROS /* libiconv's prototype takes a const char * */ #undef ICONV_INPUT_CAST /* 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 this to data directory location */ #undef PACKAGE_DATA_DIR /* Define this to Docs directory location */ #undef PACKAGE_DOC_DIR /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define this to source directory location */ #undef PACKAGE_SOURCE_DIR /* 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 /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Use getaddrinfo for address resolution */ #undef USE_GETADDRINFO /* Version number of package */ #undef VERSION dvbstreamer-2.1.0/config.sub000077500000000000000000001034451217721213100160170ustar00rootroot00000000000000#! /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 # Free Software Foundation, Inc. timestamp='2010-01-22' # 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 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-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 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | 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 | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | ubicom32 \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-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 ;; # 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-* | c54x-* | c55x-* | c6x-* \ | 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-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | 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-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile-* | tilegx-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | 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 ;; 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) 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 ;; 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) basic_machine=powerpc-unknown ;; ppc-*) 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 ;; 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 ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; # 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 ;; 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-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 ;; # 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: dvbstreamer-2.1.0/configure000077500000000000000000015731761217721213100157600ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.67 for dvbstreamer 2.0.0. # # # 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. 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 \$(( 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. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL exec "$CONFIG_SHELL" "$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 about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do 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'" # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$lt_ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac ECHO=${lt_ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then # Yippee, $ECHO works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <<_LT_EOF $* _LT_EOF exit 0 fi # 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 if test -z "$lt_ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if { echo_test_string=`eval $cmd`; } 2>/dev/null && { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null then break fi done fi if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$ECHO" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. ECHO='print -r' elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. ECHO='printf %s\n' if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL ECHO="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. ECHO=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. lt_ECHO=$ECHO if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi 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='dvbstreamer' PACKAGE_TARNAME='dvbstreamer' PACKAGE_VERSION='2.0.0' PACKAGE_STRING='dvbstreamer 2.0.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' # 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 DVBSTREAMER_PLUGINDIR PACKAGE_DOC_DIR NO_PREFIX_PACKAGE_DOC_DIR PACKAGE_DATA_DIR NO_PREFIX_PACKAGE_DATA_DIR ICONV_LIB GETTIME_LIB READLINE_TERMCAP ENABLE_FSTREAMER_FALSE ENABLE_FSTREAMER_TRUE ENABLE_DVB_FALSE ENABLE_DVB_TRUE ENABLE_ATSC_FALSE ENABLE_ATSC_TRUE OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL lt_ECHO RANLIB AR LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP SED host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL OBJDUMP DLLTOOL AS EGREP GREP CPP 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 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 DVBSTREAMER_MICRO DVBSTREAMER_MINOR DVBSTREAMER_MAJOR 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_dependency_tracking enable_static enable_shared with_pic enable_fast_install with_gnu_ld enable_libtool_lock enable_atsc enable_dvb enable_getaddrinfo enable_file_streamer ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # 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 dvbstreamer 2.0.0 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/dvbstreamer] --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 dvbstreamer 2.0.0:";; 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] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --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-libtool-lock avoid locking (might break parallel builds) --disable-atsc Disable ATSC support, only use this if you know you don't need ATSC (most DVB users) this will make the complied application a bit smaller, but won't make a big difference. --disable-dvb Disable DVB support, only use this if you know you don't need DVB (most ATSC users) this will make the complied application a bit smaller, but won't make a big difference. --disable-getaddrinfo Disable use of the getaddrinfo function, this is needed for IPv6 support but some C libraries don't support it fully. --enable-file-streamer Enable building fdvbstreamer to allow play back of captured TS files. 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] 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 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 the package provider. _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 dvbstreamer configure 2.0.0 generated by GNU Autoconf 2.67 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; test "x$as_lineno_stack" = x && { as_lineno=; 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_link # 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; test "x$as_lineno_stack" = x && { as_lineno=; 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_run # 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 "test \"\${$3+set}\"" = set; 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_compile # 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 "test \"\${$3+set}\"" = set; 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_func # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval "test \"\${$3+set}\"" = set; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_mongrel 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 dvbstreamer $as_me 2.0.0, which was generated by GNU Autoconf 2.67. 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 DVBSTREAMER_MAJOR=2 DVBSTREAMER_MINOR=0 DVBSTREAMER_MICRO=0 cat >>confdefs.h <<_ACEOF #define DVBSTREAMER_MAJOR $DVBSTREAMER_MAJOR _ACEOF cat >>confdefs.h <<_ACEOF #define DVBSTREAMER_MINOR $DVBSTREAMER_MINOR _ACEOF cat >>confdefs.h <<_ACEOF #define DVBSTREAMER_MICRO $DVBSTREAMER_MINOR _ACEOF cat >>confdefs.h <<_ACEOF #define DVBSTREAMER_VERSION ((DVBSTREAMER_MAJOR<<24) | (DVBSTREAMER_MINOR<<16) | DVBSTREAMER_MICRO ) _ACEOF SPEC_VERSION=$DVBSTREAMER_MAJOR.$DVBSTREAMER_MINOR.$DVBSTREAMER_MICRO 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 test "${ac_cv_path_install+set}" = set; 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 test "${ac_cv_prog_STRIP+set}" = set; 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 test "${ac_cv_prog_ac_ct_STRIP+set}" = set; 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 test "${ac_cv_path_mkdir+set}" = set; 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 test "${ac_cv_prog_AWK+set}" = set; 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 "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; 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="dvbstreamer" VERSION=$SPEC_VERSION 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 -' ac_config_headers="$ac_config_headers config.h" 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 test "${ac_cv_objext+set}" = set; 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 test "${ac_cv_c_compiler_gnu+set}" = set; 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 test "${ac_cv_prog_cc_g+set}" = set; 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 test "${ac_cv_prog_cc_c89+set}" = set; 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 test "${am_cv_CC_dependencies_compiler_type+set}" = set; 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 library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } if test "${ac_cv_search_strerror+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$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 strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_strerror+set}" = set; then : break fi done if test "${ac_cv_search_strerror+set}" = set; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 $as_echo "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 test "${ac_cv_c_compiler_gnu+set}" = set; 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 test "${ac_cv_prog_cc_g+set}" = set; 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 test "${ac_cv_prog_cc_c89+set}" = set; 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 test "${am_cv_CC_dependencies_compiler_type+set}" = set; 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 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 test "${ac_cv_c_compiler_gnu+set}" = set; 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 test "${ac_cv_prog_cc_g+set}" = set; 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 test "${ac_cv_prog_cc_c89+set}" = set; 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 test "${am_cv_CC_dependencies_compiler_type+set}" = set; 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 am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc 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 test "${ac_cv_prog_CPP+set}" = set; 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 grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if test "${ac_cv_path_GREP+set}" = set; 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 test "${ac_cv_path_EGREP+set}" = set; 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 ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; 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 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 "test \"\${ac_cv_prog_cc_${ac_cc}_c_o+set}\"" = set; 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 CFLAGS="$CFLAGS -fno-strict-aliasing" 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.2.6b' macro_revision='1.3017' ltmain="$ac_aux_dir/ltmain.sh" # 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 test "${ac_cv_build+set}" = set; 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 test "${ac_cv_host+set}" = set; 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 { $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 test "${ac_cv_path_SED+set}" = set; 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 fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if test "${ac_cv_path_FGREP+set}" = set; 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 test "${lt_cv_path_LD+set}" = set; 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 test "${lt_cv_prog_gnu_ld+set}" = set; 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 test "${lt_cv_path_NM+set}" = set; 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 "$ac_tool_prefix"; then for ac_prog in "dumpbin -symbols" "link -dump -symbols" 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 test "${ac_cv_prog_DUMPBIN+set}" = set; 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 -symbols" "link -dump -symbols" 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 test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; 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 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 test "${lt_cv_nm_interface+set}" = set; 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:6305: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:6308: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:6311: 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 test "${lt_cv_sys_max_cmd_len+set}" = set; 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; ;; 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"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ = "XX$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"}, \ = c,a/b,, \ && 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 for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if test "${lt_cv_ld_reload_flag+set}" = set; 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 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 test "${ac_cv_prog_OBJDUMP+set}" = set; 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 test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; 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 test "${lt_cv_deplibs_check_method+set}" = set; 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. if ( 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 lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' 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 ;; 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]) 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_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}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AR+set}" = set; 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}ar" $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 fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_AR+set}" = set; 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="ar" $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 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 else AR="$ac_cv_prog_AR" fi test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru 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 test "${ac_cv_prog_STRIP+set}" = set; 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 test "${ac_cv_prog_ac_ct_STRIP+set}" = set; 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 test "${ac_cv_prog_RANLIB+set}" = set; 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 test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; 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 # 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 test "${lt_cv_sys_global_symbol_pipe+set}" = set; 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 # 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 #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. */ 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_save_LIBS="$LIBS" lt_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_save_LIBS" CFLAGS="$lt_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 # 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 7513 "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 test "${lt_cv_cc_needs_belf+set}" = set; 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" 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 test "${ac_cv_prog_DSYMUTIL+set}" = set; 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 test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; 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 test "${ac_cv_prog_NMEDIT+set}" = set; 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 test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; 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 test "${ac_cv_prog_LIPO+set}" = set; 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 test "${ac_cv_prog_ac_ct_LIPO+set}" = set; 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 test "${ac_cv_prog_OTOOL+set}" = set; 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 test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; 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 test "${ac_cv_prog_OTOOL64+set}" = set; 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 test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; 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 test "${lt_cv_apple_cc_single_mod+set}" = set; 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 test "${lt_cv_ld_exported_symbols_list+set}" = set; 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; } 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" != ":"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac # 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" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=yes 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 test "${ac_cv_prog_AS+set}" = set; 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 test "${ac_cv_prog_ac_ct_AS+set}" = set; 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 test "${ac_cv_prog_DLLTOOL+set}" = set; 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 test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; 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 test "${ac_cv_prog_OBJDUMP+set}" = set; 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 test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; 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 # 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 # 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 test "${lt_cv_objdir+set}" = set; 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 # Sed substitution that helps us do robust quoting. It backslashifies # 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' # 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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "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 test "${lt_cv_path_MAGIC_CMD+set}" = set; 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 test "${lt_cv_path_MAGIC_CMD+set}" = set; 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* if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' { $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 test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; 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:9084: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:9088: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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= { $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 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' ;; 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 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' ;; pgcc* | pgf77* | pgf90* | pgf95*) # 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*) # IBM XL C 8.0/Fortran 10.1 on PPC lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Sun\ F*) # 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='' ;; 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*) 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}: result: $lt_prog_compiler_pic" >&5 $as_echo "$lt_prog_compiler_pic" >&6; } # # 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 test "${lt_cv_prog_compiler_pic_works+set}" = set; 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:9423: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:9427: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 test "${lt_cv_prog_compiler_static_works+set}" = set; 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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/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 test "${lt_cv_prog_compiler_c_o+set}" = set; 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:9528: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:9532: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 test "${lt_cv_prog_compiler_c_o+set}" = set; 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:9583: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:9587: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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) link_all_deplibs=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = 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.9.1, 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 modify your PATH *** so that a non-GNU linker is found, and then restart. _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' 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/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' 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 ;; 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= 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; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # 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; $ECHO \"$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]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; 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; $ECHO \"$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*) # 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 $compiler_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 $compiler_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 $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' 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 $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 ;; 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 $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 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 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")) && (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. 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 } }' 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 "$aix_libpath"; then 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 "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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 $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; 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. 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 } }' 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 "$aix_libpath"; then 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 "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' 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. 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 `$ECHO "X$deplibs" | $Xsed -e '\''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' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='' 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=echo 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 -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 -fPIC ${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 -a "$with_gnu_ld" = no; then archive_cmds='$CC -shared -fPIC ${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 -a "$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 -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${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' ;; *) archive_cmds='$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 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 $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${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. 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) {} _ACEOF if ac_fn_c_try_link "$LINENO"; then : archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -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" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${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" && $ECHO "X-set_version $verstring" | $Xsed` -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} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${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" && $ECHO "X-set_version $verstring" | $Xsed` -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 "X-set_version $verstring" | $Xsed` -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 ${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 ${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; } $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 archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 $as_echo "$archive_cmds_need_lc" >&6; } ;; 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 lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then # 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 -e 's/;/ /g'` else lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # 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; } }'` sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` 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=`$ECHO "X$lib" | $Xsed -e '\''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,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) 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="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. 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 ;; 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 ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # 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 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' ;; 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 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 : 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 # 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;/^$/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 test "${ac_cv_lib_dl_dlopen+set}" = set; 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" = x""yes; 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" = x""yes; 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 test "${ac_cv_lib_dld_shl_load+set}" = set; 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" = x""yes; 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" = x""yes; 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 test "${ac_cv_lib_dl_dlopen+set}" = set; 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" = x""yes; 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 test "${ac_cv_lib_svld_dlopen+set}" = set; 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" = x""yes; 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 test "${ac_cv_lib_dld_dld_link+set}" = set; 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" = x""yes; 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 test "${lt_cv_dlopen_self+set}" = set; 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 11967 "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 void fnord() { int i=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; /* 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 test "${lt_cv_dlopen_self_static+set}" = set; 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 12063 "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 void fnord() { int i=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; /* 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: { $as_echo "$as_me:${as_lineno-$LINENO}: checking libdir name" >&5 $as_echo_n "checking libdir name... " >&6; } case $host in *-*-linux*) # Test if the compiler is 64bit echo 'int i;' > conftest.$ac_ext DVBSTREAMER_cv_cc_64bit_output=no 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 `"$MAGIC_CMD" conftest.$ac_objext` in *"ELF 64"*) DVBSTREAMER_cv_cc_64bit_output=yes ;; esac fi rm -rf conftest* ;; esac case $host_cpu:$DVBSTREAMER_cv_cc_64bit_output in powerpc64:yes | s390x:yes | sparc64:yes | x86_64:yes) DVBSTREAMER_LIBNAME="lib64" ;; *:*) DVBSTREAMER_LIBNAME="lib" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DVBSTREAMER_LIBNAME" >&5 $as_echo "$DVBSTREAMER_LIBNAME" >&6; } # Check whether --enable-atsc was given. if test "${enable_atsc+set}" = set; then : enableval=$enable_atsc; case "${enableval}" in yes) enable_atsc=true ;; no) enable_atsc=false ;; *) as_fn_error $? "bad value ${enableval} for --disable-atsc" "$LINENO" 5 ;; esac else enable_atsc=true fi # Check whether --enable-dvb was given. if test "${enable_dvb+set}" = set; then : enableval=$enable_dvb; case "${enableval}" in yes) enable_dvb=true ;; no) enable_dvb=false ;; *) as_fn_error $? "bad value ${enableval} for --disable-dvb" "$LINENO" 5 ;; esac else enable_dvb=true fi if test "${enable_dvb}" == "false"; then if test "${enable_atsc}" == "false"; then as_fn_error $? "Either ATSC or DVB needs to be enabled!" "$LINENO" 5 fi fi if test x$enable_atsc = xtrue; then ENABLE_ATSC_TRUE= ENABLE_ATSC_FALSE='#' else ENABLE_ATSC_TRUE='#' ENABLE_ATSC_FALSE= fi if test "${enable_atsc}" != "false"; then $as_echo "#define ENABLE_ATSC 1" >>confdefs.h fi if test x$enable_dvb = xtrue; then ENABLE_DVB_TRUE= ENABLE_DVB_FALSE='#' else ENABLE_DVB_TRUE='#' ENABLE_DVB_FALSE= fi if test "${enable_dvb}" != "false"; then $as_echo "#define ENABLE_DVB 1" >>confdefs.h fi # Check whether --enable-getaddrinfo was given. if test "${enable_getaddrinfo+set}" = set; then : enableval=$enable_getaddrinfo; case "${enableval}" in yes) use_getaddrinfo=true ;; no) use_getaddrinfo=false ;; *) as_fn_error $? "bad value ${enableval} for --disable-getaddrinfo" "$LINENO" 5 ;; esac else use_getaddrinfo=true fi if test "${use_getaddrinfo}" != "false"; then $as_echo "#define USE_GETADDRINFO 1" >>confdefs.h fi # Check whether --enable-file-streamer was given. if test "${enable_file_streamer+set}" = set; then : enableval=$enable_file_streamer; case "${enableval}" in yes) enable_fstreamer=true ;; no) enable_fstreamer=false ;; *) as_fn_error $? "bad value ${enableval} for --enable-file-streamer" "$LINENO" 5 ;; esac else enable_fstreamer=false fi if test x$enable_fstreamer = xtrue; then ENABLE_FSTREAMER_TRUE= ENABLE_FSTREAMER_FALSE='#' else ENABLE_FSTREAMER_TRUE='#' ENABLE_FSTREAMER_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_libversion in -lsqlite3" >&5 $as_echo_n "checking for sqlite3_libversion in -lsqlite3... " >&6; } if test "${ac_cv_lib_sqlite3_sqlite3_libversion+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsqlite3 $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 sqlite3_libversion (); int main () { return sqlite3_libversion (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_sqlite3_sqlite3_libversion=yes else ac_cv_lib_sqlite3_sqlite3_libversion=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_sqlite3_sqlite3_libversion" >&5 $as_echo "$ac_cv_lib_sqlite3_sqlite3_libversion" >&6; } if test "x$ac_cv_lib_sqlite3_sqlite3_libversion" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBSQLITE3 1 _ACEOF LIBS="-lsqlite3 $LIBS" 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 $? "sqlite3 not found See \`config.log' for more details" "$LINENO" 5 ; } fi LIBS="" ac_fn_c_check_header_mongrel "$LINENO" "readline/readline.h" "ac_cv_header_readline_readline_h" "$ac_includes_default" if test "x$ac_cv_header_readline_readline_h" = x""yes; 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 $? "readline header file not found See \`config.log' for more details" "$LINENO" 5 ; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for readline in -lreadline" >&5 $as_echo_n "checking for readline in -lreadline... " >&6; } if test "${ac_cv_lib_readline_readline+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lreadline -lncurses $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 readline (); int main () { return readline (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_readline_readline=yes else ac_cv_lib_readline_readline=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_readline_readline" >&5 $as_echo "$ac_cv_lib_readline_readline" >&6; } if test "x$ac_cv_lib_readline_readline" = x""yes; then : READLINE_TERMCAP="-lncurses" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for readline in -lreadline" >&5 $as_echo_n "checking for readline in -lreadline... " >&6; } if test "${ac_cv_lib_readline_readline+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lreadline -ltermcap $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 readline (); int main () { return readline (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_readline_readline=yes else ac_cv_lib_readline_readline=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_readline_readline" >&5 $as_echo "$ac_cv_lib_readline_readline" >&6; } if test "x$ac_cv_lib_readline_readline" = x""yes; then : READLINE_TERMCAP="-ltermcap" 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 $? "readline not found See \`config.log' for more details" "$LINENO" 5 ; } fi fi LIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 $as_echo_n "checking for library containing clock_gettime... " >&6; } if test "${ac_cv_search_clock_gettime+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$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 clock_gettime (); int main () { return clock_gettime (); ; return 0; } _ACEOF for ac_lib in '' rt; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_clock_gettime=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_clock_gettime+set}" = set; then : break fi done if test "${ac_cv_search_clock_gettime+set}" = set; then : else ac_cv_search_clock_gettime=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 $as_echo "$ac_cv_search_clock_gettime" >&6; } ac_res=$ac_cv_search_clock_gettime if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" GETTIME_LIB=$LIBS 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 $? "Failed to find a library defining clock_gettime See \`config.log' for more details" "$LINENO" 5 ; } fi LIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing iconv_open" >&5 $as_echo_n "checking for library containing iconv_open... " >&6; } if test "${ac_cv_search_iconv_open+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$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 iconv_open (); int main () { return iconv_open (); ; return 0; } _ACEOF for ac_lib in '' iconv; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_iconv_open=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_iconv_open+set}" = set; then : break fi done if test "${ac_cv_search_iconv_open+set}" = set; then : else ac_cv_search_iconv_open=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_iconv_open" >&5 $as_echo "$ac_cv_search_iconv_open" >&6; } ac_res=$ac_cv_search_iconv_open if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" ICONV_LIB=$LIBS else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing libiconv_open" >&5 $as_echo_n "checking for library containing libiconv_open... " >&6; } if test "${ac_cv_search_libiconv_open+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$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 libiconv_open (); int main () { return libiconv_open (); ; return 0; } _ACEOF for ac_lib in '' iconv; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_libiconv_open=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_libiconv_open+set}" = set; then : break fi done if test "${ac_cv_search_libiconv_open+set}" = set; then : else ac_cv_search_libiconv_open=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_libiconv_open" >&5 $as_echo "$ac_cv_search_libiconv_open" >&6; } ac_res=$ac_cv_search_libiconv_open if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" ICONV_LIB=$LIBS 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 $? "Failed to find a library defining iconv_open See \`config.log' for more details" "$LINENO" 5 ; } fi fi if test "x${ICONV_LIB}" == "x"; then $as_echo "#define ICONV_INPUT_CAST char **" >>confdefs.h else $as_echo "#define ICONV_INPUT_CAST const char **" >>confdefs.h fi LIBS="" ac_fn_c_check_header_mongrel "$LINENO" "ev.h" "ac_cv_header_ev_h" "$ac_includes_default" if test "x$ac_cv_header_ev_h" = x""yes; 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 $? "libev header file not found See \`config.log' for more details" "$LINENO" 5 ; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ev_loop in -lev" >&5 $as_echo_n "checking for ev_loop in -lev... " >&6; } if test "${ac_cv_lib_ev_ev_loop+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lev $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 ev_loop (); int main () { return ev_loop (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ev_ev_loop=yes else ac_cv_lib_ev_ev_loop=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_ev_ev_loop" >&5 $as_echo "$ac_cv_lib_ev_ev_loop" >&6; } if test "x$ac_cv_lib_ev_ev_loop" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBEV 1 _ACEOF LIBS="-lev $LIBS" 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 $? "libev not found See \`config.log' for more details" "$LINENO" 5 ; } fi LIBS="" ac_fn_c_check_header_mongrel "$LINENO" "yaml.h" "ac_cv_header_yaml_h" "$ac_includes_default" if test "x$ac_cv_header_yaml_h" = x""yes; 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 $? "libyaml header file not found See \`config.log' for more details" "$LINENO" 5 ; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for yaml_get_version_string in -lyaml" >&5 $as_echo_n "checking for yaml_get_version_string in -lyaml... " >&6; } if test "${ac_cv_lib_yaml_yaml_get_version_string+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lyaml $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 yaml_get_version_string (); int main () { return yaml_get_version_string (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_yaml_yaml_get_version_string=yes else ac_cv_lib_yaml_yaml_get_version_string=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_yaml_yaml_get_version_string" >&5 $as_echo "$ac_cv_lib_yaml_yaml_get_version_string" >&6; } if test "x$ac_cv_lib_yaml_yaml_get_version_string" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBYAML 1 _ACEOF LIBS="-lyaml $LIBS" 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 $? "libyaml not found See \`config.log' for more details" "$LINENO" 5 ; } fi LIBS="" ac_fn_c_check_header_mongrel "$LINENO" "ltdl.h" "ac_cv_header_ltdl_h" "$ac_includes_default" if test "x$ac_cv_header_ltdl_h" = x""yes; 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 $? "libltdl (libtool) header file not found See \`config.log' for more details" "$LINENO" 5 ; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lt_dlinit in -lltdl" >&5 $as_echo_n "checking for lt_dlinit in -lltdl... " >&6; } if test "${ac_cv_lib_ltdl_lt_dlinit+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lltdl $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 lt_dlinit (); int main () { return lt_dlinit (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ltdl_lt_dlinit=yes else ac_cv_lib_ltdl_lt_dlinit=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_ltdl_lt_dlinit" >&5 $as_echo "$ac_cv_lib_ltdl_lt_dlinit" >&6; } if test "x$ac_cv_lib_ltdl_lt_dlinit" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBLTDL 1 _ACEOF LIBS="-lltdl $LIBS" 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 $? "libltdl (libtool) not found See \`config.log' for more details" "$LINENO" 5 ; } fi LIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for variadic cpp macros" >&5 $as_echo_n "checking for variadic cpp macros... " >&6; } if test "${ac_cv_cpp_variadic_macros+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #define a(b,c...) printf(b,##c) int main () { a("foo");a("%s","bar");a("%s%s","baz","quux"); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_cpp_variadic_macros=yes else ac_cv_cpp_variadic_macros=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cpp_variadic_macros" >&5 $as_echo "$ac_cv_cpp_variadic_macros" >&6; } if test "${ac_cv_cpp_variadic_macros}" != "no"; then $as_echo "#define HAVE_VARIADIC_MACROS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FE_CAN_2G_MODULATION" >&5 $as_echo_n "checking for FE_CAN_2G_MODULATION... " >&6; } if test "${ac_cv_fe_can_2g_modulation+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int a = FE_CAN_2G_MODULATION; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_fe_can_2g_modulation=yes else ac_cv_fe_can_2g_modulation=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fe_can_2g_modulation" >&5 $as_echo "$ac_cv_fe_can_2g_modulation" >&6; } if test "${ac_cv_fe_can_2g_modulation}" != "no"; then $as_echo "#define HAVE_FE_CAN_2G_MODULATION 1" >>confdefs.h fi packagesrcdir=`cd $srcdir && pwd` if test "x${prefix}" = "xNONE"; then packageprefix=${ac_default_prefix} else packageprefix=${prefix} fi packagedatadir=share packagedocdir=doc/${PACKAGE} NO_PREFIX_PACKAGE_DATA_DIR="${packagedatadir}" PACKAGE_DATA_DIR="${packageprefix}/${packagedatadir}" NO_PREFIX_PACKAGE_DOC_DIR="${packagedocdir}" PACKAGE_DOC_DIR="${packageprefix}/${packagedocdir}" cat >>confdefs.h <<_ACEOF #define PACKAGE_DATA_DIR "${packageprefix}/${packagedatadir}" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_DOC_DIR "${packageprefix}/${packagedocdir}" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_SOURCE_DIR "${packagesrcdir}" _ACEOF if test "x$prefix" = xNONE; then prefix="${ac_default_prefix}" fi if test "x$exec_prefix" = xNONE; then exec_prefix='${prefix}' fi DVBSTREAMER_PLUGINDIR="$libdir/dvbstreamer/plugins" eval DVBSTREAMER_REL_PLUGINDIR="$DVBSTREAMER_PLUGINDIR" DVBSTREAMER_REL_PLUGINDIR=`eval echo "$DVBSTREAMER_REL_PLUGINDIR" | sed -e "s,^${prefix}/,,"` eval DVBSTREAMER_PLUGINPATH=`eval echo "$DVBSTREAMER_PLUGINDIR"` cat >>confdefs.h <<_ACEOF #define DVBSTREAMER_PLUGINDIR "$DVBSTREAMER_PLUGINPATH" _ACEOF cat >>confdefs.h <<_ACEOF #define DVBSTREAMER_REL_PLUGINDIR "$DVBSTREAMER_REL_PLUGINDIR" _ACEOF ac_config_files="$ac_config_files Makefile include/Makefile include/dvbpsi/Makefile src/dvbpsi/Makefile src/Makefile src/plugins/Makefile" 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 test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file 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 "${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 "${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 "${ENABLE_ATSC_TRUE}" && test -z "${ENABLE_ATSC_FALSE}"; then as_fn_error $? "conditional \"ENABLE_ATSC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_DVB_TRUE}" && test -z "${ENABLE_DVB_FALSE}"; then as_fn_error $? "conditional \"ENABLE_DVB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_FSTREAMER_TRUE}" && test -z "${ENABLE_FSTREAMER_FALSE}"; then as_fn_error $? "conditional \"ENABLE_FSTREAMER\" 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. 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 dvbstreamer $as_me 2.0.0, which was generated by GNU Autoconf 2.67. 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 the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ dvbstreamer config.status 2.0.0 configured by $0, generated by GNU Autoconf 2.67, 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' macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # Quote evaled strings. for var in SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ deplibs_check_method \ file_magic_cmd \ AR \ AR_FLAGS \ 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 \ SHELL \ ECHO \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ 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 \ fix_srcfile_path \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$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 \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec; do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Fix-up fallback echo if it was mangled by the above quoting rules. case \$lt_ECHO in *'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` ;; esac 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" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "include/dvbpsi/Makefile") CONFIG_FILES="$CONFIG_FILES include/dvbpsi/Makefile" ;; "src/dvbpsi/Makefile") CONFIG_FILES="$CONFIG_FILES src/dvbpsi/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/plugins/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/Makefile" ;; *) 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= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$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 -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 # 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 {' >"$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 >>"\$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 >>"\$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 < "$tmp/subs1.awk" > "$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 >"$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_t=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_t"; 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="$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 >"$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 "$tmp/subs.awk" >$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' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$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 "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$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 "$tmp/defines.awk"' "$ac_file_inputs" } >"$tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$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 "$tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$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 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 # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Assembler program. AS=$AS # DLL creation program. DLLTOOL=$DLLTOOL # Object dumper program. OBJDUMP=$OBJDUMP # Whether or not to build static libraries. build_old_libs=$enable_static # 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 # 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 # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # 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 # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # 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 # 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 # The name of the directory that contains temporary libtool files. objdir=$objdir # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that does not interpret backslashes. ECHO=$lt_ECHO # 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 # 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 # 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 # 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 # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path=$lt_fix_srcfile_path # 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 # 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 '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) case $xsi_shell in yes) cat << \_LT_EOF >> "$cfgfile" # 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 () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac } # func_basename file func_basename () { func_basename_result="${1##*/}" } # 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 () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}" } # 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_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}"} } # func_opt_split func_opt_split () { func_opt_split_opt=${1%%=*} func_opt_split_arg=${1#*=} } # func_lo2o object func_lo2o () { case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac } # func_xform libobj-or-source func_xform () { func_xform_result=${1%.*}.lo } # func_arith arithmetic-term... func_arith () { func_arith_result=$(( $* )) } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=${#1} } _LT_EOF ;; *) # Bourne compatible functions. cat << \_LT_EOF >> "$cfgfile" # 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 () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -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 file func_basename () { func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } # 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 "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; esac } # sed scripts: my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^-[^=]*=//' # func_opt_split func_opt_split () { func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` } # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` } # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` } # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "$@"` } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } _LT_EOF esac case $lt_shell_append in yes) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$1+=\$2" } _LT_EOF ;; *) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$1=\$$1\$2" } _LT_EOF ;; esac sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) 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 dvbstreamer-2.1.0/configure.in000066400000000000000000000267121217721213100163460ustar00rootroot00000000000000dnl Process this file with autoconf to produce a configure script. dnl --------------------------------------------------------------------------- dnl Versioning Information: dnl Increment Major more radical changes (ie re-writes) dnl Increment Minor more additional features which don't break things dnl Increment Micro when changes are only to fix bugs/build breaks no new features. dnl dnl Exception to this rule is the Major version 0, minor version will be dnl incremented until we are ready to say DVBStreamer is no longer alpha. dnl --------------------------------------------------------------------------- AC_INIT(dvbstreamer, 2.0.0) DVBSTREAMER_MAJOR=2 DVBSTREAMER_MINOR=0 DVBSTREAMER_MICRO=0 AC_SUBST(DVBSTREAMER_MAJOR) AC_SUBST(DVBSTREAMER_MINOR) AC_SUBST(DVBSTREAMER_MICRO) AC_DEFINE_UNQUOTED(DVBSTREAMER_MAJOR, $DVBSTREAMER_MAJOR, [DVBStreamer Major version number]) AC_DEFINE_UNQUOTED(DVBSTREAMER_MINOR, $DVBSTREAMER_MINOR, [DVBStreamer Minor version number]) AC_DEFINE_UNQUOTED(DVBSTREAMER_MICRO, $DVBSTREAMER_MINOR, [DVBStreamer Micro version number]) AC_DEFINE_UNQUOTED(DVBSTREAMER_VERSION, ((DVBSTREAMER_MAJOR<<24) | (DVBSTREAMER_MINOR<<16) | DVBSTREAMER_MICRO ), [DVBStreamer combined version number as an int]) SPEC_VERSION=$DVBSTREAMER_MAJOR.$DVBSTREAMER_MINOR.$DVBSTREAMER_MICRO AM_INIT_AUTOMAKE("dvbstreamer", $SPEC_VERSION) AM_CONFIG_HEADER(config.h) AC_ISC_POSIX AC_PROG_CC AM_PROG_CC_STDC AC_HEADER_STDC AM_PROG_CC_C_O dnl --------------------------------------------------------------------------- dnl Disable strict aliasing dnl --------------------------------------------------------------------------- CFLAGS="$CFLAGS -fno-strict-aliasing" dnl --------------------------------------------------------------------------- dnl Libltdl setup dnl --------------------------------------------------------------------------- LT_PREREQ([2.2.6]) LT_INIT([dlopen win32-dll disable-static]) dnl --------------------------------------------------------------------------- dnl Work out the libdir name (copied from xine-lib configure.ac) dnl --------------------------------------------------------------------------- AC_MSG_CHECKING([libdir name]) case $host in *-*-linux*) # Test if the compiler is 64bit echo 'int i;' > conftest.$ac_ext DVBSTREAMER_cv_cc_64bit_output=no if AC_TRY_EVAL(ac_compile); then case `"$MAGIC_CMD" conftest.$ac_objext` in *"ELF 64"*) DVBSTREAMER_cv_cc_64bit_output=yes ;; esac fi rm -rf conftest* ;; esac case $host_cpu:$DVBSTREAMER_cv_cc_64bit_output in powerpc64:yes | s390x:yes | sparc64:yes | x86_64:yes) DVBSTREAMER_LIBNAME="lib64" ;; *:*) DVBSTREAMER_LIBNAME="lib" ;; esac AC_MSG_RESULT([$DVBSTREAMER_LIBNAME]) dnl --------------------------------------------------------------------------- dnl ATSC/DVB Support dnl --------------------------------------------------------------------------- AC_ARG_ENABLE([atsc], AS_HELP_STRING([--disable-atsc], [ Disable ATSC support, only use this if you know you don't need ATSC (most DVB users) this will make the complied application a bit smaller, but won't make a big difference.]), [case "${enableval}" in yes) enable_atsc=true ;; no) enable_atsc=false ;; *) AC_MSG_ERROR([bad value ${enableval} for --disable-atsc]) ;; esac],[enable_atsc=true]) AC_ARG_ENABLE([dvb], AS_HELP_STRING([--disable-dvb], [ Disable DVB support, only use this if you know you don't need DVB (most ATSC users) this will make the complied application a bit smaller, but won't make a big difference.]), [case "${enableval}" in yes) enable_dvb=true ;; no) enable_dvb=false ;; *) AC_MSG_ERROR([bad value ${enableval} for --disable-dvb]) ;; esac],[enable_dvb=true]) if test "${enable_dvb}" == "false"; then if test "${enable_atsc}" == "false"; then AC_MSG_ERROR([Either ATSC or DVB needs to be enabled!]) fi fi AM_CONDITIONAL([ENABLE_ATSC], [test x$enable_atsc = xtrue]) if test "${enable_atsc}" != "false"; then AC_DEFINE(ENABLE_ATSC, 1, Enable ATSC support) fi AM_CONDITIONAL([ENABLE_DVB], [test x$enable_dvb = xtrue]) if test "${enable_dvb}" != "false"; then AC_DEFINE(ENABLE_DVB, 1, Enable DVB support) fi dnl --------------------------------------------------------------------------- dnl Misc. Enable args dnl --------------------------------------------------------------------------- AC_ARG_ENABLE([getaddrinfo], AS_HELP_STRING([--disable-getaddrinfo], [ Disable use of the getaddrinfo function, this is needed for IPv6 support but some C libraries don't support it fully.]), [case "${enableval}" in yes) use_getaddrinfo=true ;; no) use_getaddrinfo=false ;; *) AC_MSG_ERROR([bad value ${enableval} for --disable-getaddrinfo]) ;; esac],[use_getaddrinfo=true]) if test "${use_getaddrinfo}" != "false"; then AC_DEFINE(USE_GETADDRINFO, 1, Use getaddrinfo for address resolution) fi AC_ARG_ENABLE([file-streamer], AS_HELP_STRING([--enable-file-streamer], [ Enable building fdvbstreamer to allow play back of captured TS files.]), [case "${enableval}" in yes) enable_fstreamer=true ;; no) enable_fstreamer=false ;; *) AC_MSG_ERROR([bad value ${enableval} for --enable-file-streamer]) ;; esac],[enable_fstreamer=false]) AM_CONDITIONAL([ENABLE_FSTREAMER], [test x$enable_fstreamer = xtrue]) dnl --------------------------------------------------------------------------- dnl Check for sqlite 3 dnl --------------------------------------------------------------------------- AC_CHECK_LIB([sqlite3], [sqlite3_libversion], [], [AC_MSG_FAILURE([sqlite3 not found])]) LIBS="" dnl --------------------------------------------------------------------------- dnl Check for libreadline dnl --------------------------------------------------------------------------- AC_CHECK_HEADER([readline/readline.h], [], [AC_MSG_FAILURE([readline header file not found])]) AC_CHECK_LIB([readline], [readline], [READLINE_TERMCAP="-lncurses"], [AC_CHECK_LIB([readline], [readline], [READLINE_TERMCAP="-ltermcap"], [AC_MSG_FAILURE([readline not found])], [-ltermcap])], [-lncurses]) AC_SUBST(READLINE_TERMCAP) LIBS="" dnl --------------------------------------------------------------------------- dnl Check whether librt is needed. dnl --------------------------------------------------------------------------- AC_SEARCH_LIBS(clock_gettime, [rt], [GETTIME_LIB=$LIBS], [AC_MSG_FAILURE([Failed to find a library defining clock_gettime])]) AC_SUBST(GETTIME_LIB) LIBS="" dnl --------------------------------------------------------------------------- dnl Check whether libiconv is needed. dnl --------------------------------------------------------------------------- AC_SEARCH_LIBS(iconv_open, [iconv], [ICONV_LIB=$LIBS], AC_SEARCH_LIBS(libiconv_open, [iconv], [ICONV_LIB=$LIBS], [AC_MSG_FAILURE([Failed to find a library defining iconv_open])])) AC_SUBST(ICONV_LIB) if test "x${ICONV_LIB}" == "x"; then AC_DEFINE(ICONV_INPUT_CAST, [char **], [Glibc's prototype doesn't take a const char *]) else AC_DEFINE(ICONV_INPUT_CAST, [const char **], [libiconv's prototype takes a const char *]) fi LIBS="" dnl --------------------------------------------------------------------------- dnl Check for libev dnl --------------------------------------------------------------------------- AC_CHECK_HEADER([ev.h], [], [AC_MSG_FAILURE([libev header file not found])]) AC_CHECK_LIB([ev], [ev_loop], [], [AC_MSG_FAILURE([libev not found])]) LIBS="" dnl --------------------------------------------------------------------------- dnl Check for yaml dnl --------------------------------------------------------------------------- AC_CHECK_HEADER([yaml.h], [], [AC_MSG_FAILURE([libyaml header file not found])]) AC_CHECK_LIB([yaml], [yaml_get_version_string], [], [AC_MSG_FAILURE([libyaml not found])]) LIBS="" dnl --------------------------------------------------------------------------- dnl Check for ltdl dnl --------------------------------------------------------------------------- AC_CHECK_HEADER([ltdl.h], [], [AC_MSG_FAILURE([libltdl (libtool) header file not found])]) AC_CHECK_LIB([ltdl], [lt_dlinit], [], [AC_MSG_FAILURE([libltdl (libtool) not found])]) LIBS="" dnl --------------------------------------------------------------------------- dnl Check for variadic macros dnl --------------------------------------------------------------------------- AC_CACHE_CHECK([for variadic cpp macros], [ac_cv_cpp_variadic_macros], [AC_TRY_COMPILE( [#include #define a(b,c...) printf(b,##c)], [a("foo");a("%s","bar");a("%s%s","baz","quux");], ac_cv_cpp_variadic_macros=yes, ac_cv_cpp_variadic_macros=no)]) if test "${ac_cv_cpp_variadic_macros}" != "no"; then AC_DEFINE(HAVE_VARIADIC_MACROS, 1, Support for variadic macros) fi dnl --------------------------------------------------------------------------- dnl Check for FE_CAN_2G_MODULATION dnl --------------------------------------------------------------------------- AC_CACHE_CHECK([for FE_CAN_2G_MODULATION], [ac_cv_fe_can_2g_modulation], [AC_TRY_COMPILE( [#include ], [int a = FE_CAN_2G_MODULATION;], ac_cv_fe_can_2g_modulation=yes, ac_cv_fe_can_2g_modulation=no)]) if test "${ac_cv_fe_can_2g_modulation}" != "no"; then AC_DEFINE(HAVE_FE_CAN_2G_MODULATION, 1, Frontend enum exists for 2G modulation) fi dnl --------------------------------------------------------------------------- dnl Setup package directories dnl --------------------------------------------------------------------------- dnl Set PACKAGE SOURCE DIR in config.h. packagesrcdir=`cd $srcdir && pwd` dnl Set PACKAGE PREFIX if test "x${prefix}" = "xNONE"; then packageprefix=${ac_default_prefix} else packageprefix=${prefix} fi dnl Set PACKAGE DATA & DOC DIR packagedatadir=share packagedocdir=doc/${PACKAGE} dnl Subst PACKAGE_DATA_DIR. NO_PREFIX_PACKAGE_DATA_DIR="${packagedatadir}" AC_SUBST(NO_PREFIX_PACKAGE_DATA_DIR) PACKAGE_DATA_DIR="${packageprefix}/${packagedatadir}" AC_SUBST(PACKAGE_DATA_DIR) dnl Subst PACKAGE_DOC_DIR. NO_PREFIX_PACKAGE_DOC_DIR="${packagedocdir}" AC_SUBST(NO_PREFIX_PACKAGE_DOC_DIR) PACKAGE_DOC_DIR="${packageprefix}/${packagedocdir}" AC_SUBST(PACKAGE_DOC_DIR) AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${packageprefix}/${packagedatadir}", [Define this to data directory location]) AC_DEFINE_UNQUOTED(PACKAGE_DOC_DIR, "${packageprefix}/${packagedocdir}", [Define this to Docs directory location]) AC_DEFINE_UNQUOTED(PACKAGE_SOURCE_DIR, "${packagesrcdir}", [Define this to source directory location]) dnl --------------------------------------------------------------------------- dnl Work out the Plugins path (Copied from xine-lib configure.ac) dnl --------------------------------------------------------------------------- if test "x$prefix" = xNONE; then prefix="${ac_default_prefix}" fi if test "x$exec_prefix" = xNONE; then exec_prefix='${prefix}' fi DVBSTREAMER_PLUGINDIR="$libdir/dvbstreamer/plugins" eval DVBSTREAMER_REL_PLUGINDIR="$DVBSTREAMER_PLUGINDIR" DVBSTREAMER_REL_PLUGINDIR=`eval echo "$DVBSTREAMER_REL_PLUGINDIR" | sed -e "s,^${prefix}/,,"` eval DVBSTREAMER_PLUGINPATH=`eval echo "$DVBSTREAMER_PLUGINDIR"` AC_DEFINE_UNQUOTED(DVBSTREAMER_PLUGINDIR,"$DVBSTREAMER_PLUGINPATH",[Define this to plugins directory location]) AC_DEFINE_UNQUOTED(DVBSTREAMER_REL_PLUGINDIR,"$DVBSTREAMER_REL_PLUGINDIR",[Define this to plugin directory relative to execution prefix]) AC_SUBST(DVBSTREAMER_PLUGINDIR) AC_OUTPUT([ Makefile include/Makefile include/dvbpsi/Makefile src/dvbpsi/Makefile src/Makefile src/plugins/Makefile ]) dvbstreamer-2.1.0/depcomp000077500000000000000000000442671217721213100154170ustar00rootroot00000000000000#! /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: dvbstreamer-2.1.0/doc/000077500000000000000000000000001217721213100145725ustar00rootroot00000000000000dvbstreamer-2.1.0/doc/PluginInterface.txt000066400000000000000000000056641217721213100204250ustar00rootroot00000000000000DVBStreamer - Plugins Ideas Load all plugins found in a certain directory. Plugin can add commands. Plugin can add Processors/Filters. Plugin can add output methods. struct Plugin_t { unsigned int RequiredVersion; char *name; /* Name of the plugin */ char *version; /* String describing the version of the plugin */ char *description; /* Description of the plugin */ char *author; /* Author/Contact address for bugs */ Command_t *commands; /* NULL terminated array of commands or NULL for no commands */ PluginFeature_t *features; /* A PLUGIN_FEATURE_NONE terminated list of features or NULL for no features. */ } struct Command_t { char *command; bool tokenise; int minargs; int maxargs; char *shorthelp; char *longhelp; void (*commandfunc)(int argc, char **argv); } PLUGIN_FEATURE_TYPE_NONE 0x00 PLUGIN_FEATURE_TYPE_FILTER 0x01 PLUGIN_FEATURE_TYPE_PATPROCESSOR 0x02 PLUGIN_FEATURE_TYPE_PMTPROCESSOR 0x03 PLUGIN_FEATURE_TYPE_DELIVERYMETHOD 0x04 PLUGIN_FEATURE_TYPE_CHANNELCHANGE 0x05 struct PluginFeature_t { int type; void *details; } type = PLUGIN_FEATURE_TYPE_FILTER details = An instance of the following structure: struct FilterHandler_t { void (*InitFilter)(PIDFilter_t* filter); void (*DeInitFilter)(PIDFilter_t* filter); } type = PLUGIN_FEATURE_TYPE_PATPROCESSOR details = A function pointer to a function with the following prototype: void PluginPATProcessor(dvbpsi_pat_t* newpat); type = PLUGIN_FEATURE_TYPE_PMTPROCESSOR details = A function pointer to a function with the following prototype: void PluginPMTProcessor(dvbpsi_pmt_t* newpmt); type = PLUGIN_FEATURE_TYPE_DELIVERYMETHOD details = An instance of the following structure struct DeliveryMethodHandler_t { void (*CanHandle)(char *mrl); DeliveryMethodInstance_t* (*CreateInstance)(char *mrl); } mrl's will be in the form ://[,] For example udp could be (ppd == Packets Per Datagram) udp://localhost:1234,tos=25,ppd=7 Implementors should consider the following structure as the 'base class' and should extend it with the state they require for the output method. struct DeliveryMethodInstance_t { void (*SendPacket)(DeliveryMethodInstance *this, TSPacket_t packet); void (*DestroyInstance)(DeliveryMethodInstance_t *this); } For example: struct UDPOutputDeliveryMethodInstance_t { void (*SendPacket)(DeliveryMethodInstance_t *this, TSPacket_t packet); void (*DestroyInstance)(DeliveryMethodInstance_t *this); int tos; int packetsPerDatagram; Socket socketFD; int packetCount; char *buffer; } type = PLUGIN_FEATURE_TYPE_CHANNELCHANGE details = A function pointer to a function with the following prototype: void PluginChannelChanged(Multiplex_t *newMultiplex, Service_t *newService); PluginChannelChanged function pointer will be called every time the primary service filter is updated. newMultiplex will contain the current multiplex and newService will contain the currentService. dvbstreamer-2.1.0/doc/remotecontrol.txt000066400000000000000000000044711217721213100202350ustar00rootroot00000000000000Remote Control Protocol Specification ------------------------------------- Introduction ------------ After the initial implementation of the binary protocol was complete and working it was decided that it was in fact too complicated to implement outside of dvbstreamer and a need for a simpler text based remote control interface was identified. This document describes the text based remote control interface (the protocol and interactions between client and server) Connecting Stage ---------------- The client will make a TCP connection to port 54197 + (dvb adapter # - 1). For example DVBStreamer running on the first dvb adapter will be listening on port 54197 and an instance running on the third adapter will be listening on port 54199. After the TCP connection has been made the server will send the 'ready' line and the command stage of the connection can being. The 'ready' line is: DVBStreamer//0 Ready\n Where is the version of DVBStreamer that is running. The 0 after the second slash indicates an error code of OK. (Note \n here is the character 13/new line) If for some reason the server cannot accept the connection it will return an 'error' line and then close the connection. The error line will be in the form: DVBStreamer// \n Where is a 32bit hexdecimal integer, and is a string describing the error. Command Stage ------------- In this stage the client sends commands to the server as a single line of text (the same that would be entered on the console) terminated by '\n'. The server will then attempt to execute that command and send any output of the command to the client. Once the command has been executed the server will send an appropriate response line in the form. DVBStreamer// \n Where for a successful command will be 0. Once the response line has been received by the client a new command can be sent. Termination Stage ----------------- If no command is recieved by the server for 30 seconds the connection will be terminated. The connection may also be terminated by the client at anytime. Error Codes ----------- 0 - OK. 1 - Too many connections. 2 - Unknown command. 3 - Wrong number of arguments supplied. . . . ffff - Unspecified error. dvbstreamer-2.1.0/doxygen.config000066400000000000000000001426571217721213100167100ustar00rootroot00000000000000# Doxyfile 1.4.6 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = DVBStreamer # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = 2.0 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doc/api # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, # Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, # Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, # Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, # Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # This tag can be used to specify the encoding used in the generated output. # The encoding is not always determined by the language that is chosen, # but also whether or not the output is meant for Windows or non-Windows users. # In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES # forces the Windows encoding (this is the default for the Windows binary), # whereas setting the tag to NO uses a Unix-style encoding (the default for # all platforms other than Windows). USE_WINDOWS_ENCODING = NO # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like the Qt-style comments (thus requiring an # explicit @brief command for a brief description. JAVADOC_AUTOBRIEF = YES # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the DETAILS_AT_TOP tag is set to YES then Doxygen # will output the detailed description near the top, like JavaDoc. # If set to NO, the detailed description appears after the member # documentation. DETAILS_AT_TOP = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for Java. # For instance, namespaces will be presented as packages, qualified scopes # will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to # include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = NO # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = YES # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from the # version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = include # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py FILE_PATTERNS = # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = NO #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will # generate a call dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected # functions only using the \callgraph command. CALL_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_WIDTH = 1024 # The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_HEIGHT = 1024 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that a graph may be further truncated if the graph's # image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH # and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), # the graph is not depth-constrained. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, which results in a white background. # Warning: Depending on the platform used, enabling this option may lead to # badly anti-aliased labels on the edges of a graph (i.e. they become hard to # read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO dvbstreamer-2.1.0/include/000077500000000000000000000000001217721213100154505ustar00rootroot00000000000000dvbstreamer-2.1.0/include/Makefile.am000066400000000000000000000011411217721213100175010ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in ## Created by Anjuta - will be overwritten ## If you don't want it to overwrite it, ## Please disable it in the Anjuta project configuration pkginclude_DATA = \ types.h \ cache.h \ objects.h \ services.h \ multiplexes.h \ pids.h \ dbase.h \ dvbadapter.h \ main.h \ plugin.h \ ts.h \ logging.h \ list.h \ commands.h \ deliverymethod.h \ dispatchers.h\ dvbtext.h \ atsctext.h \ utf8.h \ messageq.h \ deferredproc.h \ events.h EXTRA_DIST = $(pkginclude_DATA) dvbstreamer-2.1.0/include/Makefile.in000066400000000000000000000277221217721213100175270ustar00rootroot00000000000000# 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 = include DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in 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 = 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)$(pkgincludedir)" DATA = $(pkginclude_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVBSTREAMER_MAJOR = @DVBSTREAMER_MAJOR@ DVBSTREAMER_MICRO = @DVBSTREAMER_MICRO@ DVBSTREAMER_MINOR = @DVBSTREAMER_MINOR@ DVBSTREAMER_PLUGINDIR = @DVBSTREAMER_PLUGINDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETTIME_LIB = @GETTIME_LIB@ GREP = @GREP@ ICONV_LIB = @ICONV_LIB@ 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@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ NO_PREFIX_PACKAGE_DATA_DIR = @NO_PREFIX_PACKAGE_DATA_DIR@ NO_PREFIX_PACKAGE_DOC_DIR = @NO_PREFIX_PACKAGE_DOC_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATA_DIR = @PACKAGE_DATA_DIR@ PACKAGE_DOC_DIR = @PACKAGE_DOC_DIR@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ READLINE_TERMCAP = @READLINE_TERMCAP@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ 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@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ 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@ pkginclude_DATA = \ types.h \ cache.h \ objects.h \ services.h \ multiplexes.h \ pids.h \ dbase.h \ dvbadapter.h \ main.h \ plugin.h \ ts.h \ logging.h \ list.h \ commands.h \ deliverymethod.h \ dispatchers.h\ dvbtext.h \ atsctext.h \ utf8.h \ messageq.h \ deferredproc.h \ events.h EXTRA_DIST = $(pkginclude_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(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 include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(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-pkgincludeDATA: $(pkginclude_DATA) @$(NORMAL_INSTALL) test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" @list='$(pkginclude_DATA)'; test -n "$(pkgincludedir)" || 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)$(pkgincludedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeDATA: @$(NORMAL_UNINSTALL) @list='$(pkginclude_DATA)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pkgincludedir)" && 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)$(pkgincludedir)"; 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-pkgincludeDATA 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-pkgincludeDATA .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-pkgincludeDATA 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-pkgincludeDATA # 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: dvbstreamer-2.1.0/include/atsctext.h000077500000000000000000000036621217721213100174720ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA atsctext.h ATSC Text Conversion functions. */ #ifndef _ATSCTEXT_H #define _ATSCTEXT_H #include /** * @addtogroup TextConversion Text Conversion * @{ */ /** * Structure to describe an ATSC string. */ typedef struct ATSCString_s { char lang[3]; /**< ISO639.2/B language code. */ char *text; /**< UTF-8 encoded text. */ }ATSCString_t; /** * Structure to describe multiple ATSC strings. */ typedef struct ATSCMultipleStrings_s { int number_of_strings; /**< Number of strings pointed to by strings. */ ATSCString_t *strings; /**< Pointer to the array of strings. */ }ATSCMultipleStrings_t; /** * Converts raw multiple string data into a ATSCMultipleStrings_t structure. * @param data Raw multiple string data. * @param len Length of the raw data. * @return A pointer to a ATSCMultipleStrings_t or NULL. * To free the returned structure ObjectRefDec should be used. */ ATSCMultipleStrings_t *ATSCMultipleStringsConvert(uint8_t *data, uint8_t len); /** * @internal * Initialise the ATSC multiple strings module. * @returns 0 on success. */ int ATSCMultipleStringsInit(void); /** * @internal * Deinitiaise the ATSC multiple strings module. */ void ATSCMultipleStringsDeInit(void); /** @} */ #endif dvbstreamer-2.1.0/include/cache.h000066400000000000000000000152461217721213100166740ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA cache.h Caches service and PID information from the database for the current multiplex. */ #ifndef _CACHE_H #define _CACHE_H #include "ts.h" #include "multiplexes.h" #include "services.h" #include "pids.h" /** * @defgroup DatabaseCache Database Cache Management * This module is used to allow changes to be recorded by the PID filters running * in the TS Filter thread without having the thread halted while the database * file is accessed. * * @note Functions in this module should only be used from within the TS Filter * thread, all other threads should access the database through Services and * Multiplexes modules * @{ */ /** * @internal * Initialise the cache module. */ int CacheInit(); /** * @internal * De-initialise the cache module, release all services and pids. */ void CacheDeInit(); /** * Load the cache with all the service in the specfied multiplex. * @param multiplex The multiplex to load all the services for. * @return 0 on success or an SQLite error code. */ int CacheLoad(Multiplex_t *multiplex); /** * Write any changes in the cache, back to the database. */ void CacheWriteback(); /** * Retrieve the Multiplex that the cache is currently managing the services of. * @return A Multiplex_t instance or NULL if the cache has not be loaded. */ Multiplex_t *CacheMultiplexGet(void); /** * Find a service in the cache by either name or fully qualified id (i.e. * \.\.\ where ids are in hex). * * @param name Name of the service or fully qualified id * @return A Service_t instance or NULL if not found. */ Service_t *CacheServiceFind(char *name); /** * Find a service in the cache with the specified id. * @param id The service/program id to search for. * @return A Service_t instance or NULL if not found. */ Service_t *CacheServiceFindId(int id); /** * Find a service with a given name in the cache. * @param name Name of the service to look for. * @return A Service_t instance or NULL if not found in the cache. */ Service_t *CacheServiceFindName(char *name); /** * Retrieve all the services currently in the cache and locks the cache to * prevent updates to the list. CacheServicesRelease() should be called when the * list is no longer needed. * * @param count Used to store the number of services in the cache. * @return An array of pointers to Service_t instances. */ Service_t **CacheServicesGet(int *count); /** * Releases the services retieved by CacheServiesGet and allows updates to the * cache. */ void CacheServicesRelease(void); /** * Retrieve the PIDs for a given service and locks the cache to prevent updates. * ObjectRefDec() should be called on the list when it is no longer needed. * * @param service Service to retrieve the PIDs for. * @return A ProgramInfo_t structure or NULL if no information is available. */ ProgramInfo_t* CacheProgramInfoGet(Service_t *service); /** * Update the specified Multiplex's pat version and TS id. * @param multiplex The multiplex to update. * @param patversion The new pat version. * @param tsid The new TS ID. */ void CacheUpdateMultiplex(Multiplex_t *multiplex, int patversion, int tsid); /** * Update the specified Multiplex's network id. * @param multiplex The multiplex to update. * @param netid The network id to set. */ void CacheUpdateNetworkId(Multiplex_t *multiplex, int netid); /** * Update the cached service with a new PMT PID. * @param service The service to update. * @param pmtpid The new PMT PID. */ void CacheUpdateServicePMTPID(Service_t *service, int pmtpid); /** * Update the cached service with a new name. * @param service The service to update. * @param name The new name. */ void CacheUpdateServiceName(Service_t *service, char *name); /** * Update the cached service with a new provider. * @param service The service to update. * @param provider The new provider name. */ void CacheUpdateServiceProvider(Service_t *service, char *provider); /** * Update the cached service with a new default authority, used by TVAnytime. * @param service The service to update. * @param defaultAuthority The new default authority. */ void CacheUpdateServiceDefaultAuthority(Service_t *service, char *defaultAuthority); /** * Update the cached service with a new source id. * @param service The service to update. * @param source The new source id. */ void CacheUpdateServiceSource(Service_t *service, uint16_t source); /** * Update the cached service with the new CA state of the service. * @param service The service to update. * @param ca The new CA state. */ void CacheUpdateServiceConditionalAccess(Service_t *service, bool ca); /** * Update the cached service with the new type of the service. * @param service The service to update. * @param type The new type of the service. */ void CacheUpdateServiceType(Service_t *service, ServiceType type); /** * Update the Program Info for the specified service. * @param service The service to update. * @param info A ProgramInfo_t object containing the new information. */ void CacheUpdateProgramInfo(Service_t *service, ProgramInfo_t *info); /** * Add a new Service to the cache. * @param id The new service/program id. * @param source The source Id for EPG information. */ Service_t *CacheServiceAdd(int id, int source); /** * Update the 'seen' state of the service. * If a service is seen in the PAT but not in the SDT/VCT or vice versa the service * still exists, but if the service is no longer seen in the PAT and SDT/VCT, the * service no longer exists and should be deleted. * @param service The service to update the 'seen' status of. * @param seen Whether the service has been seen or not. * @param pat If the services was (not) seen in the PAT, but in the SDT/VCT. * @return True if the service still exists, False otherwise. */ bool CacheServiceSeen(Service_t *service, bool seen, bool pat); /** * Delete a service from the cache. * @param service The service to be deleted when CacheWriteback() is called. */ void CacheServiceDelete(Service_t *service); /** @} */ #endif dvbstreamer-2.1.0/include/commands.h000077500000000000000000000162761217721213100174410ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA commands.h Command Processing and command functions. */ #ifndef _COMMANDS_H #define _COMMANDS_H #include #include #include #include "types.h" /** * @defgroup Commands Command Processing *@{ */ #define COMMAND_OK 0x0000 /**< Command completed OK. */ #define COMMAND_ERROR_TOO_MANY_CONNS 0x0001 /**< Too many connections, connection refused. */ #define COMMAND_ERROR_UNKNOWN_COMMAND 0x0002 /**< Command is not known. */ #define COMMAND_ERROR_WRONG_ARGS 0x0003 /**< Wrong number of arguments supplied for command. */ #define COMMAND_ERROR_AUTHENTICATION 0x0004 /**< Connection has not authenticated successfully. */ #define COMMAND_ERROR_GENERIC 0xffff /**< Unknown error code, the error message string should explain the problem. */ /** * Maximum length of the error message string. */ #define MAX_ERR_MSG 256 /** * Structure used to define a command. */ typedef struct Command_t { char *command; /**< Command name */ int minArgs; /**< Minimum number of args this command accepts. */ int maxArgs; /**< Maximum number of args this command accepts. */ char *shortHelp;/**< Short description of the command, displayed by help */ char *longHelp; /**< Long description of the command, displayed by help \ */ void (*commandfunc)(int argc, char **argv); /**< Function to call to execute command */ }Command_t; /** * Sentinel used to terminate an array of commands. */ #define COMMANDS_SENTINEL {NULL, 0, 0, NULL, NULL, NULL} /** * Function pointer to call when retrieve a variable. */ typedef void (*CommandVariableGet_t)(char *name); /** * Function pointer to call when setting a variable. */ typedef void (*CommandVariableSet_t)(char *name, int argc, char **argv); /** * Structure used to define a variable that can be retrieved/set item. */ typedef struct CommandVariable_t { char *name; /**< Name of the variable item as passed to the get/set command. This must not include space characters! */ char *description; /**< Short description of the variable. */ CommandVariableGet_t get; /**< Function to call when the get is requested. (May be NULL) */ CommandVariableSet_t set; /**< Function to call when the get is requested. (May be NULL) */ }CommandVariable_t; /** * Structure used to define the context a command is running in. */ typedef struct CommandContext_t { char *interface; /**< Human readable string containing the interface name, ie Console for console or an IP address if a remote connection.*/ bool remote; /**< Whether this is a remote connection, ie not via the console. */ FILE *infp; /**< FILE pointer to read data */ FILE *outfp; /**< FILE pointer to write data */ void *privateArg; /**< Private pointer for use by the owner of the context. */ Command_t *commands; /**< Commands specific to this context */ bool authenticated; /**< Whether this context has been authenticated against the admin username/password.*/ uint16_t errorNumber; /**< Error number from the last command executed. */ char errorMessage[MAX_ERR_MSG]; /**< Error message text from the last command executed. */ }CommandContext_t; /** * Macro for making error reporting simpler and consistent. */ #define CommandError(_errcode, _msgformat...) \ do{\ CommandContext_t *context = CommandContextGet();\ context->errorNumber = _errcode;\ snprintf(context->errorMessage, MAX_ERR_MSG,_msgformat);\ }while(0) /** * Macro to make checking a user has authenticated before executing a command * easier and consistent. */ #define CommandCheckAuthenticated() \ do{\ CommandContext_t *context = CommandContextGet();\ if (!context->authenticated)\ {\ CommandError(COMMAND_ERROR_AUTHENTICATION, "Not authenticated!");\ return;\ }\ }while(0) /** * Initialise the command processor. * @return 0 on success, non 0 on error. */ int CommandInit(void); /** * Deinitialise the command processor. */ void CommandDeInit(void); /** * Register an array of commands to be used by the command processor. * @param commands The command=NULL terminated array of commands to add, */ void CommandRegisterCommands(Command_t *commands); /** * Unregister an array of commands previously registered by a call to * CommandRegisterCommands. * @param commands The array of commands to remove. */ void CommandUnRegisterCommands(Command_t *commands); /** * Start interactive command loop. * This function returns when the user exits the command loop, or the ExitProgram variable is TRUE. */ void CommandLoop(void); /** * Load and process the command in file. * @param file Name of the file to process. * @return 0 on success, non 0 on error. */ int CommandProcessFile(char *file); /** * Execute a command in the console command context. * @param line The command line to execute. * @return TRUE if the command was found, FALSE otherwise. */ bool CommandExecuteConsole(char *line); /** * Execute the command line supplied. * @param context The context the command is being executed. * @param command The command line to execute. * @return true if the command was found, false otherwise. */ bool CommandExecute(CommandContext_t *context, char *command); /** * Printf style output function that should be in command functions to send * data to the user. * @param fmt Printf format. * @return Number of bytes printed. */ int CommandPrintf(const char *fmt, ...); /** * fgets style function to retrieve data from the control connection. * @param buffer The buffer to store the data in. * @param len Length of the buffer. * @return On success returns buffer, otherwise returns NULL. */ char *CommandGets(char *buffer, int len); /** * Retrieve the command context specific to the current thread. * @return A CommandContext_t instance or NULL if a command is not executing. */ CommandContext_t *CommandContextGet(void); /** * Register an info handler that will be invoked by the get/set command. * @param handler The details of the info handler. */ void CommandRegisterVariable(CommandVariable_t *handler); /** * UnRegister a variable handler that will be invoked by the get/set command. * @param handler The details of the variable handler. */ void CommandUnRegisterVariable(CommandVariable_t *handler); /** @} */ #endif dvbstreamer-2.1.0/include/dbase.h000066400000000000000000000247741217721213100167150ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dbase.h Opens/Closes and setups the sqlite database for use by the rest of the application. */ #ifndef _DBASE_H #define _DBASE_H #include /** @defgroup DatabaseConstants Database Constants * @{ */ /** * Constant for Services Table name */ #define SERVICES_TABLE "Services" /** * Constant for Service Table Column name */ #define SERVICE_MULTIPLEXUID "mplexuid" /** * Constant for Service Table Column name */ #define SERVICE_ID "id" /** * Constant for Service Table Column name */ #define SERVICE_SOURCE "source" /** * Constant for Service Table Column name */ #define SERVICE_CA "ca" /** * Constant for Service Table Column name */ #define SERVICE_NAME "name" /** * Constant for Service Table Column name */ #define SERVICE_TYPE "type" /** * Constant for Service Table Column name */ #define SERVICE_PMTPID "pmtpid" /** * Constant for Service Table Column name */ #define SERVICE_PMTVERSION "pmtversion" /** * Constant for Service Table Column name */ #define SERVICE_PCRPID "pcrpid" /** * Constant for Service Table Column name */ #define SERVICE_PROVIDER "provider" /** * Constant for Service Table Column name */ #define SERVICE_DEFAUTHORITY "defauthority" /** * Constant for the Multiplexes table name. */ #define MULTIPLEXES_TABLE "Multiplexes" /** * Constant for Multiplex column name */ #define MULTIPLEX_UID "uid" /** * Constant for Multiplex column name */ #define MULTIPLEX_TSID "tsid" /** * Constant for Multiplex column name */ #define MULTIPLEX_NETID "netid" /** * Constant for Multiplex column name */ #define MULTIPLEX_TYPE "type" /** * Constant for Multiplex column name */ #define MULTIPLEX_PATVERSION "patversion" /** * Constant for Multiplex column name */ #define MULTIPLEX_TUNINGPARAMS "tuningparams" /** * Constant for the PIDs table name, */ #define PIDS_TABLE "PIDs" /** * Constant for PID column name. */ #define PID_MULTIPLEXUID "mplexuid" /** * Constant for PID column name. */ #define PID_SERVICEID "serviceid" /** * Constant for PID column name. */ #define PID_PID "pid" /** * Constant for PID column name. */ #define PID_TYPE "type" /** * Constant for PID column name. */ #define PID_SUBTYPE "subtype" /** * Constant for PID column name. */ #define PID_PMTVERSION "pmtversion" /** * Constant for PID column name. */ #define PID_DESCRIPTORS "descriptors" /** * Constant for Metadata table name. */ #define METADATA_TABLE "Metadata" /** * Constant for Metadata column name. */ #define METADATA_NAME "name" /** * Constant for Metadata column name. */ #define METADATA_VALUE "value" /** * Constant for Metadata property for LNB settings. * String defining the name of the LNB being used. */ #define METADATA_NAME_LNB "lnb" /** * Constant for Metadata property for LNB settings. * unsigned long for low frequency setting. */ #define METADATA_NAME_LNB_LOW_FREQ "lnb.lowfreq" /** * Constant for Metadata property for LNB settings. * unsigned long for high frequency setting. */ #define METADATA_NAME_LNB_HIGH_FREQ "lnb.highfreq" /** * Constant for Metadata property for LNB settings. * unsigned long for switch frequency setting. */ #define METADATA_NAME_LNB_SWITCH_FREQ "lnb.switchfreq" /** * Constant for Metadata property to scan all multiplexes on startup. */ #define METADATA_NAME_SCAN_ALL "scan.all" /* This is the version of the database not the application!*/ #define METADATA_DBASE_VERSION "dbase_version" #define DBASE_VERSION 2.0 /** @} */ /** * @defgroup Database Database Management * @{ */ /** * Macro to define the varaiable required for executing an sql statement, * Only 1 call to STATEMENT_INIT per function is supported! */ #define STATEMENT_INIT int rc; sqlite3_stmt *stmt=NULL #ifndef DBASE_CONNECTION_GET /** * Macro for the function to call to get a database connection. */ #define DBASE_CONNECTION_GET DBaseConnectionGet #endif /** * Macro to prepare an sql statement. * @param _statement The sql statement to prepare. */ #define STATEMENT_PREPARE(_statement) rc = sqlite3_prepare( DBASE_CONNECTION_GET(), _statement, -1, &stmt, NULL) /** * Macro to prepare an sql statement with arguments. * @param _statement The sql statement to prepare. * @param _args The arguments to be inserted into the statement. */ #define STATEMENT_PREPAREVA(_statement, _args...) \ do{\ char *sqlstring;\ sqlstring = sqlite3_mprintf(_statement, _args);\ if (sqlstring)\ {\ STATEMENT_PREPARE(sqlstring);\ sqlite3_free(sqlstring);\ }\ else\ {\ rc = SQLITE_NOMEM;\ }\ }while(0) /** * Macro to perform a 'step' on an sql statement. */ #define STATEMENT_STEP() rc = sqlite3_step(stmt) /** * Macro to retrieve an int value from the result of a 'step'. * @param _index Column index of the result to retrieve. */ #define STATEMENT_COLUMN_INT(_index) sqlite3_column_int(stmt, _index) /** * Macro to retrieve a double value from the result of a 'step'. * @param _index Column index of the result to retrieve. */ #define STATEMENT_COLUMN_DOUBLE(_index) sqlite3_column_double(stmt, _index) /** * Macro to retrieve a string from the result of a 'step'. * The string should be free'd using the sqlite_free function when it is no * longer required. * @param _index Column index of the result to retrieve. */ #define STATEMENT_COLUMN_TEXT(_index) (char*)sqlite3_column_text( stmt, _index) /** * Macro to finalise an sql statement. */ #define STATEMENT_FINALIZE() rc = sqlite3_finalize(stmt) /** * Macro to log the last SQLite error. * This macro logs at the LOG_ERROR level. */ #define PRINTLOG_SQLITE3ERROR() \ do{\ LogModule(LOG_DEBUG, "dbase", "%s(%d): Failed with error code 0x%x=%s\n",\ __FUNCTION__,__LINE__, rc, sqlite3_errmsg(DBASE_CONNECTION_GET()));\ }while(0) /** * Macro to tidy up an sql statement and return the specified value if an error occured. * * This macro logs the sqlite error, finalises the sql statement and returns if * the error was not SQLITE_OK, SQLITE_ROW or SQLITE_DONE. * @param _result The value to return from the current function. */ #define RETURN_ON_ERROR(_result) \ do{\ if ((rc != SQLITE_OK) && (rc != SQLITE_ROW) && (rc != SQLITE_DONE))\ {\ PRINTLOG_SQLITE3ERROR();\ if (stmt)\ {\ STATEMENT_FINALIZE();\ }\ return _result;\ }\ }while(0) /** * Macro to tidy up an sql statemente and return the last result from an sqlite call. */ #define RETURN_RC_ON_ERROR RETURN_ON_ERROR(rc) /** * @internal * Initialise the database for the given adapter. * This function will create the database if one doesn't exist, * and upgrade the database if it is a different version to the one being used * by the application. * @param adapter The DVB adapter number to open the database of. * @return 0 on success, otherwise an SQLite error code. */ int DBaseInit(int adapter); /** * @internal * De-initialise the database. */ void DBaseDeInit(); /** * Get the sqlite3 connection object for this thread. * @return An sqlite3 connection object or NULL if the database could not be opened. */ sqlite3* DBaseConnectionGet(void); /** * Start a transaction on the database. * Can be used to increase the speed when reading from multiple tables. * @return 0 on success, otherwise an SQLite error code. */ int DBaseTransactionBegin(void); /** * Commit a transaction on the database. * @return 0 on success, otherwise an SQLite error code. */ int DBaseTransactionCommit(void); /** * Return the number of entries in the specified table. * @param table The table to count the entries in. * @param where Where clause, which may be null for all entries. * @return Number of entries in the table. */ int DBaseCount(char *table, char *where); /** * Retrieve the specified metadata property. * @param name The name of the property. * @param value The location to store the value in. This should must be free'd * once finished with. * @return 0 on success, otherwise an SQLite error code. */ int DBaseMetadataGet(char *name, char **value); /** * Set the specified metadata property to the string specified. * @param name The name of the property. * @param value The value to set it to. * @return 0 on success, otherwise an SQLite error code. */ int DBaseMetadataSet(char *name, char *value); /** * Retrieve the specified metadata property. * @param name The name of the property. * @param value The location to store the value in. * @return 0 on success, otherwise an SQLite error code. */ int DBaseMetadataGetInt(char *name, int *value); /** * Set the specified metadata property to the int specified. * @param name The name of the property. * @param value The value to set it to. * @return 0 on success, otherwise an SQLite error code. */ int DBaseMetadataSetInt(char *name, int value); /** * Retrieve the specified metadata property. * @param name The name of the property. * @param value The location to store the value in. * @return 0 on success, otherwise an SQLite error code. */ int DBaseMetadataGetDouble(char *name, double *value); /** * Set the specified metadata property to the double specified. * @param name The name of the property. * @param value The value to set it to. * @return 0 on success, otherwise an SQLite error code. */ int DBaseMetadataSetDouble(char *name, double value); /** * Delete the specified metadata property. * @param name The name of the property. * @return 0 on success, otherwise an SQLite error code. */ int DBaseMetadataDelete(char *name); /** @} */ #endif dvbstreamer-2.1.0/include/deferredproc.h000077500000000000000000000037531217721213100203000ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA deferredproc.h Deferred Processing. */ #ifndef _DVBSTREAMER_DEFERREDPROC_H #define _DVBSTREAMER_DEFERREDPROC_H #include "types.h" /** * @defgroup DeferredProc Deferred Processing *@{ */ /** * Function pointer to a function to be called by the deferred processing thread. */ typedef void (*DeferredProcessor_t)(void*); /** * Initialise the deferred processing module. * @return 0 on success. */ int DeferredProcessingInit(void); /** * Deinitialise the deferred processing module. Any job waiting to be processed * will be dropped. */ void DeferredProcessingDeinit(void); /** * Add a job to the queue of jobs to be executed in the deferred processing thread. * The function pointed to by processor will be called at an indeterminate time * with the argument specified by arg. * @param processor Function pointer to function to call in the deferred processing thread. * @param arg Argument to be passed to processor when called. This must have * been allocated using the Object memory system as the reference count will be * incremented on adding to the queue and decremented if the job is still on the * queue when the module is deinitialised. */ void DeferredProcessingAddJob(DeferredProcessor_t processor, void *arg); /** @} */ #endif dvbstreamer-2.1.0/include/deliverymethod.h000077500000000000000000000167631217721213100206650ustar00rootroot00000000000000/* Copyright (C) 2009 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA deliverymethod.h Delivery Method management functions. */ #ifndef _DELIVERYMETHOD_H #define _DELIVERYMETHOD_H #include "ts.h" /** * @defgroup DeliveryMethod Delivery Method Management * @{ */ /** * Structure to represent an instance of a delivery method. * Implementors should consider the following structure as the 'base class' and * should extend it with the state they require for the output method. * For example: * @code * struct UDPOutputDeliveryMethodInstance_t * { char *mrl; * void (*SendPacket)(DeliveryMethodInstance_t *this, TSPacket_t packet); * void (*DestroyInstance)(DeliveryMethodInstance_t *this); * int tos; * int packetsPerDatagram; * Socket socketFD; * int packetCount; * char *buffer; * } * @endcode */ typedef struct DeliveryMethodInstance_t { /** * The media resource locator used to create the instance. */ char *mrl; /** * Pointer to the table of functions used to manipulate this instance. */ struct DeliveryMethodInstanceOps_t const *ops; /** * Field used to hold private information for the type of instance. */ void *private; } DeliveryMethodInstance_t; /** * Structure used to define the functions used to manipulate a DeliveryMethodInstance. */ typedef struct DeliveryMethodInstanceOps_t { /** * Output a packet. * @param this The instance of the DeliveryMethodInstance_t to send the packet using. * @param packet The packet to send. */ void(*OutputPacket)(struct DeliveryMethodInstance_t *this, TSPacket_t *packet); /** * Output an opaque block of data. * @param this The instance of the DeliveryMethodInstance_t to send the packet using. * @param block Pointer to the data to send. * @param block_len The length of the data in bytes to send. */ void(*OutputBlock)(struct DeliveryMethodInstance_t *this, void *block, unsigned long blockLen); /** * Destroy an instace of DeliveryMethodInstance_t. * @param this The instance of the DeliveryMethodInstance_t to free. */ void(*DestroyInstance)(struct DeliveryMethodInstance_t *this); /** * Reserves space for the specified number of packets at the start of the * stream. * Until the header is set with SetHeader(), the header packets will be * stuffing packets. * This function must be called before any packets have been sent to this * instance. * * @param this The instance of the DeliveryMethodInstance_t to apply this to. * @param packets The number of packets to reserve space for. */ void (*ReserveHeaderSpace)(struct DeliveryMethodInstance_t *this, int packets); /** * Set the PAT and PMT header packets. This function can be called any time * after a call to ReserveHeaderSpace(). * @param this The instance of the DeliveryMethodInstance_t to apply this to. * @param packets The packets to write as the header. * @param count The number of packets to write. */ void (*SetHeader)(struct DeliveryMethodInstance_t *this, TSPacket_t *packets, int count); }DeliveryMethodInstanceOps_t; /** * Structure used to describe a Delivery Method Handler. * The handler should implement the CanHandle() function to test if it can handle * a Media Resource Locator passed to it. If it can it should then expect the * CreateInstance method to be called for the same mrl. * MRLs will be in the form \://\[,\] * For example udp could be (ppd == Packets Per Datagram) * udp://localhost:1234,tos=25,ppd=7 */ typedef struct DeliveryMethodHandler_t { bool (*CanHandle)(char *mrl); /**< Function callback to test if the handler can handle the specified mrl. */ DeliveryMethodInstance_t* (*CreateInstance)(char *mrl); /**< Function to create an instance for the specified mrl. */ }DeliveryMethodHandler_t; /** * @internal * Initialise the Delivery method manager. * @return 0 on success. */ int DeliveryMethodManagerInit(void); /** * @internal * De-Initialise the Delivery method manager. */ void DeliveryMethodManagerDeInit(void); /** * Register a Delivery Method handler with the manager. * @param handler The handler to register. */ void DeliveryMethodManagerRegister(DeliveryMethodHandler_t *handler); /** * Unregiser a Delivery Method handler with the manager. * @param handler The handler to remove from the available handlers. */ void DeliveryMethodManagerUnRegister(DeliveryMethodHandler_t *handler); /** * Create a new DeliveryMethodInstance_t that can handle the supplied MRL. * @param mrl The MRL the delivery method should handle. * @return A DeliveryMethodInstance_t if the supplied MRL can be handled or NULL. */ DeliveryMethodInstance_t *DeliveryMethodCreate(char *mrl); /** * Retrieve the mrl used to setup the output on the specified filter. * @param filter The PIDFilter to retrieve the MRL from. * @return The MRL string. */ char* DeliveryMethodGetMRL(DeliveryMethodInstance_t *instance); /** * Destory a DeliveryMethodInstance_t previously created by * DeliveryMethodCreate(). * @param instance The instance to free. */ void DeliveryMethodDestroy(DeliveryMethodInstance_t *instance); /** * @internal * Destroy all DeliveryMethodInstance_t instances. * NOTE: This function will be called before plugin manager shutsdown all * plugins. This is to ensure all delivery method instances are correctly closed * down. Plugins should not attempt to destroy delivery method instances, as the * plugin providing the method may have already been shutdown. */ void DeliveryMethodDestroyAll(); /** * Reserve the specified number of packets at the start of the stream to allow for a header. * @param instance The delievery method instance to use. * @param nrofPackets The number of packets to reserve. */ void DeliveryMethodReserveHeaderSpace(DeliveryMethodInstance_t *instance, int nrofPackets); /** * Set the header packets, previously reserved, to those specified. * @param instance The delievery method instance to use. * @param packets Pointer to an array of packets. * @param nrofPackets The number of packets to set as the header. */ void DeliveryMethodSetHeader(DeliveryMethodInstance_t *instance, TSPacket_t *packets, int nrofPackets); /** * Output a packet using the specified delivery method. * @param instance The delievery method instance to use. * @param packet The packet to output. */ void DeliveryMethodOutputPacket(DeliveryMethodInstance_t *instance, TSPacket_t* packet); /** * Output a block of data using the specified delivery method. * @param instance The delievery method instance to use. * @param block Start address of the block of data to output. * @param blockLen Length in bytes of the data to output. */ void DeliveryMethodOutputBlock(DeliveryMethodInstance_t *instance, void *block, unsigned long blockLen); /** @} */ #endif dvbstreamer-2.1.0/include/dispatchers.h000066400000000000000000000021731217721213100201350ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dispatchers.h File descriptor monitoring and event dispatching. */ #ifndef _DISPATCHERS_H #define _DISPATCHERS_H #include int DispatchersInit(void); int DispatchersDeInit(void); void DispatchersStart(bool sync); void DispatchersExitLoop(void); void DispatchersStop(void); struct ev_loop * DispatchersGetInput(void); struct ev_loop * DispatchersGetNetwork(void); struct ev_loop * DispatchersGetUserInput(void); #endif dvbstreamer-2.1.0/include/dvbadapter.h000066400000000000000000000233441217721213100177430ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dvb.h Opens/Closes and setups dvb adapter for use in the rest of the application. */ #ifndef _DVB_H #define _DVB_H #include #include #include #include #include #include #include "lnb.h" #include "types.h" /** * @defgroup DVBAdapter DVB Adapter access * The dvb module provides access to the linuxdvb API via a simple adapter model * that encompasses the frontend/demux/dvr device into one object. * By default the entire transport stream is routed to the DVR device, although * for hardware restricted devices it is possible to allocate PID filters that * are routed to the DVR device. * These PID filters are grouped into system and application filters, making it * easier to release a specific set of PID filters that are being used to filter * a service say. * * \section events Events Exported * * \li \ref locked Sent when the frontend acquires a signal lock. * \li \ref unlocked Sent when the frontend loses signal lock. * \li \ref tuneFailed Sent when the frontend fails to tune. * * \subsection locked DVBAdapter.Locked * This event is fired from the DVBAdapter monitor thread when it detects that * the frontend has acquired a signal lock. \n * \par * \c payload = The adapter that has locked. * * \subsection unlocked DVBAdapter.Unlocked * This event is fired from the DVBAdapter monitor thread when it detects that * the frontend has lost signal lock. \n * \par * \c payload = The adapter that has lost locked. * * \subsection tuneFailed DVBAdapter.TuneFailed * This event is fired when the frontend fails to tune, for example parameters * out of range etc. \n * \par * \c payload = The adapter that failed to tune. * @{ */ /** * Maximum number of PID filters when running in hardware restricted mode. */ #define DVB_MAX_PID_FILTERS 256 /** * Structure used to keep track of hardware pid filters. */ typedef struct DVBAdapterPIDFilter_s { int demuxFd; /**< File descriptor for the demux device. */ uint16_t pid; /**< PID that is being filtered. */ }DVBAdapterPIDFilter_t; typedef enum DVBDeliverySystem_e { DELSYS_DVBS, DELSYS_DVBC, DELSYS_DVBT, DELSYS_ATSC, DELSYS_DVBS2, DELSYS_DVBT2, DELSYS_ISDBT, DELSYS_MAX_SUPPORTED } DVBDeliverySystem_e; extern char *DVBDeliverySystemStr[]; typedef struct DVBSupportedDeliverySys_s { int nrofSystems; DVBDeliverySystem_e systems[0]; }DVBSupportedDeliverySys_t; typedef enum DVBFrontEndStatus_e { FESTATUS_HAS_SIGNAL = 0x01, /**< Found something above the noise level */ FESTATUS_HAS_CARRIER= 0x02, /**< Found a DVB signal */ FESTATUS_HAS_VITERBI= 0x04, /**< FEC is stable */ FESTATUS_HAS_SYNC = 0x08, /**< Found sync bytes */ FESTATUS_HAS_LOCK = 0x10, /**< Everything is working... */ FESTATUS_TIMEDOUT = 0x20, /**< No lock within the last ~2 seconds */ FESTATUS_REINIT = 0x40 /**< Frontend was reinitialized */ } DVBFrontEndStatus_e; /** * Structure representing a DVB Adapter, that is a frontend, a demux and a dvr * device. * Currently only supports the first frontend/demux/dvr per adapter. */ typedef struct DVBAdapter_s DVBAdapter_t; /** * Open a DVB Adapter. * This will open the frontend, demux and dvr devices. * @param adapter The adapter number of the devices to open. * @param hwRestricted Whether the adapter can only stream a portion of the * transport stream. * @param forceISDB Force only ISDB to be supported. * @return a DVBAdapter_t structure or NULL if the adapter could not be opened. */ DVBAdapter_t *DVBInit(int adapter, bool hwRestricted, bool forceISDB); /** * Close a DVPAdapter. * Close the frontend,demux and dvr devices and free the DVBAdapter_t structure. * @param adapter The DVBAdapter_t structure to free. */ void DVBDispose(DVBAdapter_t *adapter); /** * Retieve the supported delivery systems for the specified DVB adapter. * @param adapter The adapter to retrieve the delivery systems supported from. * @return Pointer to a structure containing the supported delivery systems. */ DVBSupportedDeliverySys_t *DVBFrontEndGetDeliverySystems(DVBAdapter_t *adapter); /** * Tune the frontend to the specified parameters. * @param adapter The adapter to tune. * @param system The delivery system to use. * @param params String containing the tuning paramaters in a yaml document. * @return 0 on success, non-zero otherwise. */ int DVBFrontEndTune(DVBAdapter_t *adapter, DVBDeliverySystem_e system, char *params); /** * Retrieve the current tuning parameters. * @param adapter The adapter to get the parameters from. * @param system Pointer to store the current delivery system use in. * @return A string containing a YAML document, it is the callers job to free the * returned string. */ char* DVBFrontEndParametersGet(DVBAdapter_t *adapter, DVBDeliverySystem_e *system); /** * Set the LNB LO frequencies. * @param adapter The adapter to set the LNB information on. * @param lnbInfo Pointer to an LNBInfo structure. */ void DVBFrontEndLNBInfoSet(DVBAdapter_t *adapter, LNBInfo_t *lnbInfo); /** * Get the LNB LO frequencies. * @param adapter The adapter to get the LNB information on. * @param lnbInfo Pointer to an LNBInfo structure to store the LNB information in. */ void DVBFrontEndLNBInfoGet(DVBAdapter_t *adapter, LNBInfo_t *lnbInfo); /** * Retrieve the status of the frontend of the specified adapter. * @param adapter The adapter to check. * @param status Used to return the status flags (may be NULL). * @param ber Used to return the Bit Error Rate (may be NULL). * @param strength Used to return the signal strength (may be NULL). * @param snr Used to return the signal to noise ratio (may be NULL). * @param ucblocks Used to return the uncorrected block count (may be NULL). * @return 0 on success, non-zero otherwise. */ int DVBFrontEndStatus(DVBAdapter_t *adapter, DVBFrontEndStatus_e *status, unsigned int *ber, unsigned int *strength, unsigned int *snr, unsigned int *ucblocks); /** * Query the adapter to determine if the frontend is locked. * @param adapter The adapter to query. * @return TRUE if the frontend is locked, FALSE otherwise. */ bool DVBFrontEndIsLocked(DVBAdapter_t *adapter); /** * Check whether the frontend supports the parameter and value specified. * @param adapter The adapter to query. * @param system The delivery system to query. * @param param The name of the parameter to check. * @param value The value of the parameter to check. * @return TRUE if the paramater and value are supported for the delivery system and by the frontend. */ bool DVBFrontEndParameterSupported(DVBAdapter_t *adapter, DVBDeliverySystem_e system, char *param, char *value); /** * Check whether the frontend supports the specified delivery system. * @param adapter The adapter to query. * @param system The delivery system to query. * @return TRUE if the delivery system is supported, FALSE otherwise. */ bool DVBFrontEndDeliverySystemSupported(DVBAdapter_t *adapter, DVBDeliverySystem_e system); /** * Set the size of the circular buffer used by the demux. * @param adapter The adapter to set size of the buffer on. * @param size Size of the buffer to set. * @return 0 on success, non-zero otherwise. */ int DVBDemuxSetBufferSize(DVBAdapter_t *adapter, unsigned long size); /** * Determine whether the demux is hardware restricted to a set number of * filters and cannot return the full transport stream. * @param adapter The adapter to query. * @return TRUE if the demux is restricted, FALSE if the demux can return the whole TS. */ bool DVBDemuxIsHardwareRestricted(DVBAdapter_t *adapter); /** * Get the maximum number of PID filters supported by the adapter. * @param adapter The adapter to get the number of filters from. * @return The maximum number of filters. */ int DVBDemuxGetMaxFilters(DVBAdapter_t *adapter); /** * Get the number of available filters. * @param adapter The adapter to get the number of filters from. * @return The number of filters available. */ int DVBDemuxGetAvailableFilters(DVBAdapter_t *adapter); /** * Allocate a new PID Filter, indicating whether it is a system PID or not. * @param adapter The adapter to allocate the filter on, * @param pid The PID to filter. * @return 0 on success, non-zero otherwise. */ int DVBDemuxAllocateFilter(DVBAdapter_t *adapter, uint16_t pid); /** * Release a specific PID filter. * @param adapter The adapter to release the filter on. * @param pid The PID of the filter to release. * @return 0 on success, non-zero otherwise. */ int DVBDemuxReleaseFilter(DVBAdapter_t *adapter, uint16_t pid); /** * Release all application or system PID filters. * @param adapter The adapter to release the filters on. * @return 0 on success, non-zero otherwise. */ int DVBDemuxReleaseAllFilters(DVBAdapter_t *adapter); /** * Get the file descriptor for the DVR device to use in poll() etc. * @param adapter The adapter to get the DVR fd from. */ int DVBDVRGetFD(DVBAdapter_t *adapter); /** @} */ #endif dvbstreamer-2.1.0/include/dvbpsi/000077500000000000000000000000001217721213100167375ustar00rootroot00000000000000dvbstreamer-2.1.0/include/dvbpsi/Makefile.am000066400000000000000000000013531217721213100207750ustar00rootroot00000000000000dvbpsidir = $(pkgincludedir)/dvbpsi dvbpsiatscdir = $(pkgincludedir)/dvbpsi/atsc dvbpsi_DATA = \ demux.h \ sections.h \ descriptor.h \ datetime.h \ dr_02.h \ dr_03.h \ dr_04.h \ dr_05.h \ dr_06.h \ dr_07.h \ dr_08.h \ dr_09.h \ dr_0a.h \ dr_0b.h \ dr_0c.h \ dr_0d.h \ dr_0e.h \ dr_0f.h \ dr_13.h \ dr_14.h \ dr_42.h \ dr_43.h \ dr_47.h \ dr_48.h \ dr_4d.h \ dr_4e.h \ dr_52.h \ dr_55.h \ dr_56.h \ dr_59.h \ dr_5a.h \ dr_62.h \ dr_66.h \ dr_69.h \ dr_73.h \ dr_76.h \ dr_83.h \ dr.h \ dvbpsi.h \ eit.h \ nit.h \ pat.h \ pmt.h \ psi.h \ sdt.h \ tdttot.h \ cat.h dvbpsiatsc_DATA =\ atsc/mgt.h \ atsc/stt.h \ atsc/vct.h \ atsc/eit.h \ atsc/ett.h EXTRA_DIST = $(dvbpsi_DATA) $(dvbpsiatsc_DATA) dvbstreamer-2.1.0/include/dvbpsi/Makefile.in000066400000000000000000000323371217721213100210140ustar00rootroot00000000000000# 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 = include/dvbpsi DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in 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 = 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)$(dvbpsidir)" \ "$(DESTDIR)$(dvbpsiatscdir)" DATA = $(dvbpsi_DATA) $(dvbpsiatsc_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVBSTREAMER_MAJOR = @DVBSTREAMER_MAJOR@ DVBSTREAMER_MICRO = @DVBSTREAMER_MICRO@ DVBSTREAMER_MINOR = @DVBSTREAMER_MINOR@ DVBSTREAMER_PLUGINDIR = @DVBSTREAMER_PLUGINDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETTIME_LIB = @GETTIME_LIB@ GREP = @GREP@ ICONV_LIB = @ICONV_LIB@ 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@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ NO_PREFIX_PACKAGE_DATA_DIR = @NO_PREFIX_PACKAGE_DATA_DIR@ NO_PREFIX_PACKAGE_DOC_DIR = @NO_PREFIX_PACKAGE_DOC_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATA_DIR = @PACKAGE_DATA_DIR@ PACKAGE_DOC_DIR = @PACKAGE_DOC_DIR@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ READLINE_TERMCAP = @READLINE_TERMCAP@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ 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@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ 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@ dvbpsidir = $(pkgincludedir)/dvbpsi dvbpsiatscdir = $(pkgincludedir)/dvbpsi/atsc dvbpsi_DATA = \ demux.h \ sections.h \ descriptor.h \ datetime.h \ dr_02.h \ dr_03.h \ dr_04.h \ dr_05.h \ dr_06.h \ dr_07.h \ dr_08.h \ dr_09.h \ dr_0a.h \ dr_0b.h \ dr_0c.h \ dr_0d.h \ dr_0e.h \ dr_0f.h \ dr_13.h \ dr_14.h \ dr_42.h \ dr_43.h \ dr_47.h \ dr_48.h \ dr_4d.h \ dr_4e.h \ dr_52.h \ dr_55.h \ dr_56.h \ dr_59.h \ dr_5a.h \ dr_62.h \ dr_66.h \ dr_69.h \ dr_73.h \ dr_76.h \ dr_83.h \ dr.h \ dvbpsi.h \ eit.h \ nit.h \ pat.h \ pmt.h \ psi.h \ sdt.h \ tdttot.h \ cat.h dvbpsiatsc_DATA = \ atsc/mgt.h \ atsc/stt.h \ atsc/vct.h \ atsc/eit.h \ atsc/ett.h EXTRA_DIST = $(dvbpsi_DATA) $(dvbpsiatsc_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(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 include/dvbpsi/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/dvbpsi/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(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-dvbpsiDATA: $(dvbpsi_DATA) @$(NORMAL_INSTALL) test -z "$(dvbpsidir)" || $(MKDIR_P) "$(DESTDIR)$(dvbpsidir)" @list='$(dvbpsi_DATA)'; test -n "$(dvbpsidir)" || 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)$(dvbpsidir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvbpsidir)" || exit $$?; \ done uninstall-dvbpsiDATA: @$(NORMAL_UNINSTALL) @list='$(dvbpsi_DATA)'; test -n "$(dvbpsidir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(dvbpsidir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(dvbpsidir)" && rm -f $$files install-dvbpsiatscDATA: $(dvbpsiatsc_DATA) @$(NORMAL_INSTALL) test -z "$(dvbpsiatscdir)" || $(MKDIR_P) "$(DESTDIR)$(dvbpsiatscdir)" @list='$(dvbpsiatsc_DATA)'; test -n "$(dvbpsiatscdir)" || 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)$(dvbpsiatscdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvbpsiatscdir)" || exit $$?; \ done uninstall-dvbpsiatscDATA: @$(NORMAL_UNINSTALL) @list='$(dvbpsiatsc_DATA)'; test -n "$(dvbpsiatscdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(dvbpsiatscdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(dvbpsiatscdir)" && 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)$(dvbpsidir)" "$(DESTDIR)$(dvbpsiatscdir)"; 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-dvbpsiDATA install-dvbpsiatscDATA 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-dvbpsiDATA uninstall-dvbpsiatscDATA .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-dvbpsiDATA \ install-dvbpsiatscDATA 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 \ uninstall-dvbpsiDATA uninstall-dvbpsiatscDATA # 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: dvbstreamer-2.1.0/include/dvbpsi/atsc/000077500000000000000000000000001217721213100176715ustar00rootroot00000000000000dvbstreamer-2.1.0/include/dvbpsi/atsc/eit.h000077500000000000000000000157051217721213100206360ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA eit.h Decode PSIP Event Information Table. */ #ifndef _ATSC_EIT_H #define _ATSC_EIT_H /***************************************************************************** * dvbpsi_atsc_eit_event_t *****************************************************************************/ /*! * \struct dvbpsi_atsc_eit_event_s * \brief EIT Event structure. * * This structure is used to store decoded event information. */ /*! * \typedef struct dvbpsi_atsc_eit_event_s dvbpsi_atsc_eit_event_t * \brief dvbpsi_atsc_eit_event_t type definition. */ typedef struct dvbpsi_atsc_eit_event_s { uint16_t i_event_id; /*!< Event ID */ uint32_t i_start_time; /*!< Start time in GPS seconds */ uint8_t i_etm_location; /*!< Extended Text Message location. */ uint32_t i_length_seconds;/*!< Length of program in seconds. */ uint8_t i_title_length; /*!< Length of the title in bytes */ uint8_t i_title[256]; /*!< Title in multiple string structure format. */ dvbpsi_descriptor_t *p_first_descriptor; /*!< First descriptor structure. */ struct dvbpsi_atsc_eit_event_s *p_next;/*!< Next event information structure. */ } dvbpsi_atsc_eit_event_t; /***************************************************************************** * dvbpsi_atsc_eit_t *****************************************************************************/ /*! * \struct dvbpsi_atsc_eit_s * \brief EIT structure. * * This structure is used to store a decoded EIT. */ /*! * \typedef struct dvbpsi_atsc_eit_s dvbpsi_atsc_eit_t * \brief dvbpsi_atsc_eit_t type definition. */ typedef struct dvbpsi_atsc_eit_s { uint8_t i_version; /*!< version_number */ int b_current_next; /*!< current_next_indicator */ uint16_t i_source_id; /*!< Source id used to match against channels */ uint8_t i_protocol; /*!< PSIP Protocol version */ dvbpsi_atsc_eit_event_t *p_first_event; /*!< First event information structure. */ } dvbpsi_atsc_eit_t; /***************************************************************************** * dvbpsi_eit_callback *****************************************************************************/ /*! * \typedef void (* dvbpsi_atsc_eit_callback)(void* p_cb_data, dvbpsi_atsc_eit_t* p_new_eit) * \brief Callback type definition. */ typedef void (* dvbpsi_atsc_eit_callback)(void* p_cb_data, dvbpsi_atsc_eit_t* p_new_eit); /***************************************************************************** * dvbpsi_atsc_AttachEIT *****************************************************************************/ /*! * \fn void dvbpsi_atsc_AttachEIT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, dvbpsi_atsc_eit_callback pf_callback, void* p_cb_data) * * \brief Creation and initialization of a EIT decoder. * \param p_demux Subtable demultiplexor to which the decoder is attached. * \param i_table_id Table ID, 0xCB. * \param i_extension Table ID extension, here TS ID. * \param pf_callback function to call back on new EIT. * \param p_cb_data private data given in argument to the callback. * \return 0 if everything went ok. */ int dvbpsi_atsc_AttachEIT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, uint16_t i_extension, dvbpsi_atsc_eit_callback pf_callback, void* p_cb_data); /***************************************************************************** * dvbpsi_DetachEIT *****************************************************************************/ /*! * \fn void dvbpsi_atsc_DetachEIT(dvbpsi_demux_t * p_demux, uint8_t i_table_id) * * \brief Destroy a EIT decoder. * \param p_demux Subtable demultiplexor to which the decoder is attached. * \param i_table_id Table ID, 0xCB. * \param i_extension Table ID extension, here TS ID. * \return nothing. */ void dvbpsi_atsc_DetachEIT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_t i_extension); /***************************************************************************** * dvbpsi_atsc_InitEIT/dvbpsi_atsc_NewEIT *****************************************************************************/ /*! * \fn void dvbpsi_atsc_InitEIT(dvbpsi_atsc_eit_t* p_eit, uint8_t i_version, int b_current_next, uint8_t i_protocol, uint16_t i_source_id) * \brief Initialize a user-allocated dvbpsi_atsc_eit_t structure. * \param p_eit pointer to the EIT structure * \param i_version EIT version * \param b_current_next current next indicator * \param i_protocol PSIP Protocol version. * \param i_source_id Source id. * \return nothing. */ void dvbpsi_atsc_InitEIT(dvbpsi_atsc_eit_t* p_eit,uint8_t i_version, int b_current_next, uint8_t i_protocol, uint16_t i_source_id); /*! * \def dvbpsi_atsc_NewEIT(p_eit, i_network_id, i_version, b_current_next, i_protocol i_source_id) * \brief Allocate and initialize a new dvbpsi_eit_t structure. Use ObjectRefDec to delete it. * \param p_eit pointer to the EIT structure * \param i_network_id network id * \param i_version EIT version * \param b_current_next current next indicator * \param i_protocol PSIP Protocol version. * \param b_cable_eit Whether this is CEIT or a TEIT. * \return nothing. */ #define dvbpsi_atsc_NewEIT(p_eit, i_version, b_current_next, i_protocol,\ i_source_id) \ do { \ ObjectRegisterTypeDestructor(dvbpsi_atsc_eit_t, (ObjectDestructor_t)dvbpsi_atsc_EmptyEIT);\ p_eit = (dvbpsi_atsc_eit_t*)ObjectCreateType(dvbpsi_atsc_eit_t); \ if(p_eit != NULL) \ dvbpsi_atsc_InitEIT(p_eit, i_version, b_current_next, i_protocol, \ i_source_id); \ } while(0); /***************************************************************************** * dvbpsi_atsc_EmptyEIT *****************************************************************************/ /*! * \fn void dvbpsi_atsc_EmptyEIT(dvbpsi_atsc_eit_t* p_eit) * \brief Clean a dvbpsi_eit_t structure. * \param p_eit pointer to the EIT structure * \return nothing. */ void dvbpsi_atsc_EmptyEIT(dvbpsi_atsc_eit_t *p_eit); #endif dvbstreamer-2.1.0/include/dvbpsi/atsc/ett.h000077500000000000000000000132231217721213100206420ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ett.h Decode PSIP Extended Text Table. */ #ifndef _ATSC_ETT_H #define _ATSC_ETT_H /***************************************************************************** * dvbpsi_atsc_ett_t *****************************************************************************/ /*! * \struct dvbpsi_atsc_ett_s * \brief ETT structure. * * This structure is used to store a decoded ETT. */ /*! * \typedef struct dvbpsi_atsc_ett_s dvbpsi_atsc_ett_t * \brief dvbpsi_atsc_ett_t type definition. */ typedef struct dvbpsi_atsc_ett_s { uint8_t i_version; /*!< version_number */ int b_current_next; /*!< current_next_indicator */ uint8_t i_protocol; /*!< PSIP Protocol version */ uint16_t i_ett_table_id; /*!< ETT Table ID extension, normally 0x0000 */ uint32_t i_etm_id; /*!< ETM Identifier, made up of source id and event id (or 0 for channel ETT) */ uint16_t i_etm_length; uint8_t* p_etm; } dvbpsi_atsc_ett_t; /***************************************************************************** * dvbpsi_atsc_ett_callback *****************************************************************************/ /*! * \typedef void (* dvbpsi_atsc_ett_callback)(void* p_cb_data, dvbpsi_atsc_ett_t* p_new_ett) * \brief Callback type definition. */ typedef void (* dvbpsi_atsc_ett_callback)(void* p_cb_data, dvbpsi_atsc_ett_t* p_new_ett); /***************************************************************************** * dvbpsi_atsc_AttachETT *****************************************************************************/ /*! * \fn void dvbpsi_atsc_AttachETT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, dvbpsi_atsc_ett_callback pf_callback, void* p_cb_data) * * \brief Creation and initialization of a ETT decoder. * \param pf_callback function to call back on new ETT. * \param p_cb_data private data given in argument to the callback. * \return 0 if everything went ok. */ dvbpsi_handle dvbpsi_atsc_AttachETT(dvbpsi_atsc_ett_callback pf_callback, void* p_cb_data); /***************************************************************************** * dvbpsi_atsc_DetachETT *****************************************************************************/ /*! * \fn void dvbpsi_atsc_DetachETT(dvbpsi_demux_t * p_demux, uint8_t i_table_id) * * \brief Destroy a ETT decoder. * \param p_demux Subtable demultiplexor to which the decoder is attached. * \param i_table_id Table ID, 0xCD. * \param i_extension Table extension, ignored as this should always be 0. * (Required to match prototype for demux) * \return nothing. */ void dvbpsi_atsc_DetachETT(dvbpsi_handle h_dvbpsi); /***************************************************************************** * dvbpsi_atsc_InitETT/dvbpsi_atsc_NewETT *****************************************************************************/ /*! * \fn void dvbpsi_atsc_InitETT(dvbpsi_atsc_ett_t* p_ett, uint8_t i_version, int b_current_next, uint8_t i_protocol) * \brief Initialize a user-allocated dvbpsi_atsc_ett_t structure. * \param p_ett pointer to the ETT structure * \param i_version version * \param b_current_next current next indicator * \param i_protocol PSIP Protocol version. * \param i_ett_table_id Table ID (Normally 0x0000) * \param i_etm_id ETM Identifier. * \return nothing. */ void dvbpsi_atsc_InitETT(dvbpsi_atsc_ett_t *p_ett, uint8_t i_version, int b_current_next, uint8_t i_protocol, uint16_t i_ett_table_id, uint32_t i_etm_id); /*! * \def dvbpsi_NewETT(p_ett, i_network_id, i_version, b_current_next) * \brief Allocate and initialize a new dvbpsi_atsc_ett_t structure. Use ObjectRefDec to delete it. * \param p_ett pointer to the ETT structure * \param i_protocol PSIP Protocol version. * \param i_ett_table_id Table ID (Normally 0x0000) * \param i_etm_id ETM Identifier. * \return nothing. */ #define dvbpsi_atsc_NewETT(p_ett, i_version, b_current_next, i_protocol, i_ett_table_id, i_etm_id) \ do { \ ObjectRegisterTypeDestructor(dvbpsi_atsc_ett_t, (ObjectDestructor_t)dvbpsi_atsc_EmptyETT); \ p_ett = (dvbpsi_atsc_ett_t*)ObjectCreateType(dvbpsi_atsc_ett_t); \ if(p_ett != NULL) \ dvbpsi_atsc_InitETT(p_ett, i_version, b_current_next, i_protocol, i_ett_table_id, i_etm_id); \ } while(0); /***************************************************************************** * dvbpsi_atsc_EmptyETT *****************************************************************************/ /*! * \fn void dvbpsi_atsc_EmptyETT(dvbpsi_atsc_ett_t* p_ett) * \brief Clean a dvbpsi_atsc_ett_t structure. * \param p_ett pointer to the ETT structure * \return nothing. */ void dvbpsi_atsc_EmptyETT(dvbpsi_atsc_ett_t *p_ett); #endif dvbstreamer-2.1.0/include/dvbpsi/atsc/mgt.h000077500000000000000000000146671217721213100206520ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA mgt.h Decode PSIP Master Guide Table. */ #ifndef _ATSC_MGT_H #define _ATSC_MGT_H /***************************************************************************** * dvbpsi_atsc_mgt_table_t *****************************************************************************/ /*! * \struct dvbpsi_atsc_mgt_table_s * \brief MGT Table structure. * * This structure is used to store a decoded MGT table information. */ /*! * \typedef struct dvbpsi_atsc_mgt_table_s dvbpsi_mgt_table_t * \brief dvbpsi_atsc_mgt_table_t type definition. */ typedef struct dvbpsi_atsc_mgt_table_s { uint16_t i_type; /*!< Type of the table being described. */ uint16_t i_pid; /*!< PID the table is being sent on. */ uint8_t i_version; /*!< Current version number of this table */ uint32_t i_number_bytes; /*!< Number of bytes used by this table. */ dvbpsi_descriptor_t *p_first_descriptor; /*!< First descriptor for this table. */ struct dvbpsi_atsc_mgt_table_s *p_next; /*!< next element of the list */ } dvbpsi_atsc_mgt_table_t; /***************************************************************************** * dvbpsi_atsc_mgt_t *****************************************************************************/ /*! * \struct dvbpsi_atsc_mgt_s * \brief MGT structure. * * This structure is used to store a decoded MGT. */ /*! * \typedef struct dvbpsi_mgt_s dvbpsi_mgt_t * \brief dvbpsi_mgt_t type definition. */ typedef struct dvbpsi_atsc_mgt_s { uint8_t i_version; /*!< version_number */ int b_current_next; /*!< current_next_indicator */ uint8_t i_protocol; /*!< PSIP Protocol version */ dvbpsi_atsc_mgt_table_t *p_first_table; /*!< First table information structure. */ dvbpsi_descriptor_t *p_first_descriptor; /*!< First descriptor. */ } dvbpsi_atsc_mgt_t; /***************************************************************************** * dvbpsi_mgt_callback *****************************************************************************/ /*! * \typedef void (* dvbpsi_mgt_callback)(void* p_cb_data, dvbpsi_mgt_t* p_new_mgt) * \brief Callback type definition. */ typedef void (* dvbpsi_atsc_mgt_callback)(void* p_cb_data, dvbpsi_atsc_mgt_t* p_new_mgt); /***************************************************************************** * dvbpsi_atsc_AttachMGT *****************************************************************************/ /*! * \fn void dvbpsi_AttachMGT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, dvbpsi_mgt_callback pf_callback, void* p_cb_data) * * \brief Creation and initialization of a MGT decoder. * \param p_demux Subtable demultiplexor to which the decoder is attached. * \param i_table_id Table ID, 0xC7. * \param pf_callback function to call back on new MGT. * \param p_cb_data private data given in argument to the callback. * \return 0 if everything went ok. */ int dvbpsi_atsc_AttachMGT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, dvbpsi_atsc_mgt_callback pf_callback, void* p_cb_data); /***************************************************************************** * dvbpsi_DetachMGT *****************************************************************************/ /*! * \fn void dvbpsi_DetachMGT(dvbpsi_demux_t * p_demux, uint8_t i_table_id) * * \brief Destroy a MGT decoder. * \param p_demux Subtable demultiplexor to which the decoder is attached. * \param i_table_id Table ID, 0xC7. * \param i_extension Table extension, ignored as this should always be 0. * (Required to match prototype for demux) * \return nothing. */ void dvbpsi_atsc_DetachMGT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_t i_extension); /***************************************************************************** * dvbpsi_atsc_InitMGT/dvbpsi_atsc_NewMGT *****************************************************************************/ /*! * \fn void dvbpsi_atsc_InitMGT(dvbpsi_mgt_t* p_mgt, uint8_t i_version, int b_current_next, uint8_t i_protocol) * \brief Initialize a user-allocated dvbpsi_mgt_t structure. * \param p_mgt pointer to the MGT structure * \param i_version MGT version * \param b_current_next current next indicator * \param i_protocol PSIP Protocol version. * \return nothing. */ void dvbpsi_atsc_InitMGT(dvbpsi_atsc_mgt_t *p_mgt, uint8_t i_version, int b_current_next, uint8_t i_protocol); /*! * \def dvbpsi_atsc_NewMGT(p_mgt, i_network_id, i_version, b_current_next) * \brief Allocate and initialize a new dvbpsi_mgt_t structure. Use ObjectRefDec to delete it. * \param p_mgt pointer to the MGT structure * \param i_network_id network id * \param i_version MGT version * \param b_current_next current next indicator * \return nothing. */ #define dvbpsi_atsc_NewMGT(p_mgt, i_version, b_current_next, i_protocol) \ do { \ ObjectRegisterTypeDestructor(dvbpsi_atsc_mgt_t, (ObjectDestructor_t)dvbpsi_atsc_EmptyMGT); \ p_mgt = (dvbpsi_atsc_mgt_t*)ObjectCreateType(dvbpsi_atsc_mgt_t); \ if(p_mgt != NULL) \ dvbpsi_atsc_InitMGT(p_mgt, i_version, b_current_next, i_protocol); \ } while(0); /***************************************************************************** * dvbpsi_EmptyMGT *****************************************************************************/ /*! * \fn void dvbpsi_EmptyMGT(dvbpsi_mgt_t* p_mgt) * \brief Clean a dvbpsi_mgt_t structure. * \param p_mgt pointer to the MGT structure * \return nothing. */ void dvbpsi_atsc_EmptyMGT(dvbpsi_atsc_mgt_t *p_mgt); #endif dvbstreamer-2.1.0/include/dvbpsi/atsc/stt.h000077500000000000000000000126051217721213100206630ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA stt.h Decode PSIP System Time Table. */ #ifndef _ATSC_STT_H #define _ATSC_STT_H #define dvbpsi_atsc_unix_epoch_offset (315964800) /***************************************************************************** * dvbpsi_atsc_stt_t *****************************************************************************/ /*! * \struct dvbpsi_atsc_stt_s * \brief STT structure. * * This structure is used to store a decoded STT. */ /*! * \typedef struct dvbpsi_atsc_stt_s dvbpsi_atsc_stt_t * \brief dvbpsi_atsc_stt_t type definition. */ typedef struct dvbpsi_atsc_stt_s { uint8_t i_protocol; /*!< PSIP Protocol version */ uint32_t i_system_time; /*!< GPS seconds since 1 January 1980 00:00:00 UTC. */ uint8_t i_gps_utc_offset; /*!< Seconds offset between GPS and UTC time. */ uint16_t i_daylight_savings; /*!< Daylight savings control bytes. */ dvbpsi_descriptor_t *p_first_descriptor; /*!< First descriptor. */ } dvbpsi_atsc_stt_t; /***************************************************************************** * dvbpsi_atsc_stt_callback *****************************************************************************/ /*! * \typedef void (* dvbpsi_atsc_stt_callback)(void* p_cb_data, dvbpsi_atsc_stt_t* p_new_stt) * \brief Callback type definition. */ typedef void (* dvbpsi_atsc_stt_callback)(void* p_cb_data, dvbpsi_atsc_stt_t* p_new_stt); /***************************************************************************** * dvbpsi_atsc_AttachSTT *****************************************************************************/ /*! * \fn void dvbpsi_atsc_AttachSTT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, dvbpsi_atsc_stt_callback pf_callback, void* p_cb_data) * * \brief Creation and initialization of a STT decoder. * \param p_demux Subtable demultiplexor to which the decoder is attached. * \param i_table_id Table ID, 0xCD. * \param pf_callback function to call back on new STT. * \param p_cb_data private data given in argument to the callback. * \return 0 if everything went ok. */ int dvbpsi_atsc_AttachSTT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, dvbpsi_atsc_stt_callback pf_callback, void* p_cb_data); /***************************************************************************** * dvbpsi_atsc_DetachSTT *****************************************************************************/ /*! * \fn void dvbpsi_atsc_DetachSTT(dvbpsi_demux_t * p_demux, uint8_t i_table_id) * * \brief Destroy a STT decoder. * \param p_demux Subtable demultiplexor to which the decoder is attached. * \param i_table_id Table ID, 0xCD. * \param i_extension Table extension, ignored as this should always be 0. * (Required to match prototype for demux) * \return nothing. */ void dvbpsi_atsc_DetachSTT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_t i_externsion); /***************************************************************************** * dvbpsi_atsc_InitSTT/dvbpsi_atsc_NewSTT *****************************************************************************/ /*! * \fn void dvbpsi_atsc_InitSTT(dvbpsi_atsc_stt_t* p_stt, uint8_t i_version, int b_current_next, uint8_t i_protocol) * \brief Initialize a user-allocated dvbpsi_atsc_stt_t structure. * \param p_stt pointer to the STT structure * \param i_protocol PSIP Protocol version. * \return nothing. */ void dvbpsi_atsc_InitSTT(dvbpsi_atsc_stt_t *p_stt,uint8_t i_protocol); /*! * \def dvbpsi_NewSTT(p_stt, i_network_id, i_version, b_current_next) * \brief Allocate and initialize a new dvbpsi_atsc_stt_t structure. Use ObjectRefDec to delete it. * \param p_stt pointer to the STT structure * \param i_protocol PSIP Protocol version. * \return nothing. */ #define dvbpsi_atsc_NewSTT(p_stt, i_protocol) \ do { \ ObjectRegisterTypeDestructor(dvbpsi_atsc_stt_t, (ObjectDestructor_t)dvbpsi_atsc_EmptySTT); \ p_stt = (dvbpsi_atsc_stt_t*)ObjectCreateType(dvbpsi_atsc_stt_t); \ if(p_stt != NULL) \ dvbpsi_atsc_InitSTT(p_stt, i_protocol); \ } while(0); /***************************************************************************** * dvbpsi_atsc_EmptySTT *****************************************************************************/ /*! * \fn void dvbpsi_atsc_EmptySTT(dvbpsi_atsc_stt_t* p_stt) * \brief Clean a dvbpsi_atsc_stt_t structure. * \param p_stt pointer to the STT structure * \return nothing. */ void dvbpsi_atsc_EmptySTT(dvbpsi_atsc_stt_t *p_stt); #endif dvbstreamer-2.1.0/include/dvbpsi/atsc/vct.h000077500000000000000000000202221217721213100206370ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA vct.h Decode PSIP Virtual Channel Table. */ #ifndef _ATSC_VCT_H #define _ATSC_VCT_H /***************************************************************************** * dvbpsi_atsc_vct_channel_t *****************************************************************************/ /*! * \struct dvbpsi_atsc_vct_channel_s * \brief VCT channel structure. * * This structure is used to store a decoded VCT channel information. */ /*! * \typedef struct dvbpsi_atsc_vct_channel_s dvbpsi_atsc_vct_channel_t * \brief dvbpsi_atsc_vct_channel_t type definition. */ typedef struct dvbpsi_atsc_vct_channel_s { uint8_t i_short_name[14];/*!< Channel name (7*UTF16-BE)*/ uint16_t i_major_number; /*!< Channel major number */ uint16_t i_minor_number; /*!< Channel minor number */ uint8_t i_modulation; /*!< Modulation mode. */ uint32_t i_carrier_freq; /*!< Carrier center frequency. */ uint16_t i_channel_tsid; /*!< Channel Transport stream id. */ uint16_t i_program_number;/*!< Channel MPEG program number. */ uint8_t i_etm_location; /*!< Extended Text Message location. */ int b_access_controlled; /*!< Whether the channel is scrambled. */ int b_path_select; /*!< Path selection, only used by CVCT. */ int b_out_of_band; /*!< Whether the channel is carried on the out-of-band physical transmission channel, only used by CVCT. */ int b_hidden; /*!< Not accessible directly by the user. */ int b_hide_guide; /*!< Whether the channel should not be displayed in the guide. */ uint8_t i_service_type; /*!< Channel type. */ uint16_t i_source_id; /*!< Programming source associated with the channel.*/ dvbpsi_descriptor_t *p_first_descriptor; /*!< First descriptor. */ struct dvbpsi_atsc_vct_channel_s *p_next; /*!< next element of the list */ } dvbpsi_atsc_vct_channel_t; /***************************************************************************** * dvbpsi_atsc_vct_t *****************************************************************************/ /*! * \struct dvbpsi_atsc_vct_s * \brief VCT structure. * * This structure is used to store a decoded VCT. */ /*! * \typedef struct dvbpsi_atsc_vct_s dvbpsi_atsc_vct_t * \brief dvbpsi_atsc_vct_t type definition. */ typedef struct dvbpsi_atsc_vct_s { uint8_t i_version; /*!< version_number */ int b_current_next; /*!< current_next_indicator */ uint16_t i_ts_id; /*!< transport stream id */ uint8_t i_protocol; /*!< PSIP Protocol version */ int b_cable_vct; /*!< 1 if this is a cable VCT, 0 if it is a Terrestrial VCT. */ dvbpsi_atsc_vct_channel_t *p_first_channel; /*!< First channel information structure. */ dvbpsi_descriptor_t *p_first_descriptor; /*!< First descriptor. */ } dvbpsi_atsc_vct_t; /***************************************************************************** * dvbpsi_vct_callback *****************************************************************************/ /*! * \typedef void (* dvbpsi_atsc_vct_callback)(void* p_cb_data, dvbpsi_atsc_vct_t* p_new_vct) * \brief Callback type definition. */ typedef void (* dvbpsi_atsc_vct_callback)(void* p_cb_data, dvbpsi_atsc_vct_t* p_new_vct); /***************************************************************************** * dvbpsi_atsc_AttachVCT *****************************************************************************/ /*! * \fn void dvbpsi_atsc_AttachVCT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, dvbpsi_atsc_vct_callback pf_callback, void* p_cb_data) * * \brief Creation and initialization of a VCT decoder. * \param p_demux Subtable demultiplexor to which the decoder is attached. * \param i_table_id Table ID, 0xC8 or 0xC9. * \param i_extension Table ID extension, here TS ID. * \param pf_callback function to call back on new VCT. * \param p_cb_data private data given in argument to the callback. * \return 0 if everything went ok. */ int dvbpsi_atsc_AttachVCT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, uint16_t i_extension, dvbpsi_atsc_vct_callback pf_callback, void* p_cb_data); /***************************************************************************** * dvbpsi_DetachVCT *****************************************************************************/ /*! * \fn void dvbpsi_atsc_DetachVCT(dvbpsi_demux_t * p_demux, uint8_t i_table_id) * * \brief Destroy a VCT decoder. * \param p_demux Subtable demultiplexor to which the decoder is attached. * \param i_table_id Table ID, 0xC8 or 0xC9. * \param i_extension Table ID extension, here TS ID. * \return nothing. */ void dvbpsi_atsc_DetachVCT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_t i_extension); /***************************************************************************** * dvbpsi_atsc_InitVCT/dvbpsi_atsc_NewVCT *****************************************************************************/ /*! * \fn void dvbpsi_atsc_InitVCT(dvbpsi_atsc_vct_t* p_vct, uint8_t i_version, int b_current_next, uint8_t i_protocol) * \brief Initialize a user-allocated dvbpsi_atsc_vct_t structure. * \param p_vct pointer to the VCT structure * \param i_version VCT version * \param b_current_next current next indicator * \param i_protocol PSIP Protocol version. * \param i_ts_id Transport Stream id. * \param b_cable_vct Whether this is CVCT or a TVCT. * \return nothing. */ void dvbpsi_atsc_InitVCT(dvbpsi_atsc_vct_t* p_vct,uint8_t i_version, int b_current_next, uint8_t i_protocol, uint16_t i_ts_id, int b_cable_vct); /*! * \def dvbpsi_atsc_NewVCT(p_vct, i_network_id, i_version, b_current_next) * \brief Allocate and initialize a new dvbpsi_vct_t structure. * \param p_vct pointer to the VCT structure * \param i_network_id network id * \param i_version VCT version * \param b_current_next current next indicator * \param i_protocol PSIP Protocol version. * \param b_cable_vct Whether this is CVCT or a TVCT. * \return nothing. */ #define dvbpsi_atsc_NewVCT(p_vct, i_version, b_current_next, i_protocol, \ i_ts_id, b_cable_vct) \ do { \ ObjectRegisterTypeDestructor(dvbpsi_atsc_vct_t, (ObjectDestructor_t)dvbpsi_atsc_EmptyVCT); \ p_vct = (dvbpsi_atsc_vct_t*)ObjectCreateType(dvbpsi_atsc_vct_t); \ if(p_vct != NULL) \ dvbpsi_atsc_InitVCT(p_vct, i_version, b_current_next, i_protocol, \ i_ts_id, b_cable_vct); \ } while(0); /***************************************************************************** * dvbpsi_atsc_EmptyVCT *****************************************************************************/ /*! * \fn void dvbpsi_atsc_EmptyVCT(dvbpsi_atsc_vct_t* p_vct) * \brief Clean a dvbpsi_vct_t structure. * \param p_vct pointer to the VCT structure * \return nothing. */ void dvbpsi_atsc_EmptyVCT(dvbpsi_atsc_vct_t *p_vct); #endif dvbstreamer-2.1.0/include/dvbpsi/cat.h000077500000000000000000000162011217721213100176620ustar00rootroot00000000000000/***************************************************************************** * cat.h * (c)2001-2007 VideoLAN * $Id: cat.h 145 2007-10-05 17:53:35Z jpsaman $ * * Authors: Johann Hanne * heavily based on pmt.h which was written by * Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ /*! * \file * \author Arnaud de Bossoreille de Ribou * \brief Application interface for the CAT decoder and the CAT generator. * * Application interface for the CAT decoder and the CAT generator. New * decoded CAT tables are sent by callback to the application. If a table * wasn't active (b_current_next == 0) and the next is the same but active * (b_current_next == 1) then the two lists are empty and should be * caught from the previous structure. */ #ifndef _DVBPSI_CAT_H_ #define _DVBPSI_CAT_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_cat_t *****************************************************************************/ /*! * \struct dvbpsi_cat_s * \brief CAT structure. * * This structure is used to store a decoded CAT. * (ISO/IEC 13818-1 section 2.4.4.6). */ /*! * \typedef struct dvbpsi_cat_s dvbpsi_cat_t * \brief dvbpsi_cat_t type definition. */ typedef struct dvbpsi_cat_s { uint8_t i_version; /*!< version_number */ int b_current_next; /*!< current_next_indicator */ dvbpsi_descriptor_t * p_first_descriptor; /*!< descriptor list */ } dvbpsi_cat_t; /***************************************************************************** * dvbpsi_cat_callback *****************************************************************************/ /*! * \typedef void (* dvbpsi_cat_callback)(void* p_cb_data, dvbpsi_cat_t* p_new_cat) * \brief Callback type definition. */ typedef void (* dvbpsi_cat_callback)(void* p_cb_data, dvbpsi_cat_t* p_new_cat); /***************************************************************************** * dvbpsi_AttachCAT *****************************************************************************/ /*! * \fn dvbpsi_handle dvbpsi_AttachCAT(dvbpsi_cat_callback pf_callback, void* p_cb_data) * \brief Creation and initialization of a CAT decoder. * \param pf_callback function to call back on new CAT * \param p_cb_data private data given in argument to the callback * \return a pointer to the decoder for future calls. */ dvbpsi_handle dvbpsi_AttachCAT(dvbpsi_cat_callback pf_callback, void* p_cb_data); /***************************************************************************** * dvbpsi_DetachCAT *****************************************************************************/ /*! * \fn void dvbpsi_DetachCAT(dvbpsi_handle h_dvbpsi) * \brief Destroy a CAT decoder. * \param h_dvbpsi handle to the decoder * \return nothing. * * The handle isn't valid any more. */ void dvbpsi_DetachCAT(dvbpsi_handle h_dvbpsi); /***************************************************************************** * dvbpsi_InitCAT/dvbpsi_NewCAT *****************************************************************************/ /*! * \fn void dvbpsi_InitCAT(dvbpsi_cat_t* p_cat, uint8_t i_version, int b_current_next) * \brief Initialize a user-allocated dvbpsi_cat_t structure. * \param p_cat pointer to the CAT structure * \param i_version CAT version * \param b_current_next current next indicator * \return nothing. */ void dvbpsi_InitCAT(dvbpsi_cat_t* p_cat, uint8_t i_version, int b_current_next); /*! * \def dvbpsi_NewCAT(p_cat, i_version, b_current_next) * \brief Allocate and initialize a new dvbpsi_cat_t structure. Use ObjectRefDec to release delete it. * \param p_cat pointer to the CAT structure * \param i_version CAT version * \param b_current_next current next indicator * \return nothing. */ #define dvbpsi_NewCAT(p_cat, \ i_version, b_current_next) \ do { \ ObjectRegisterTypeDestructor(dvbpsi_cat_t, (ObjectDestructor_t)dvbpsi_EmptyCAT); \ p_cat = (dvbpsi_cat_t*)ObjectCreateType(dvbpsi_cat_t); \ if(p_cat != NULL) \ dvbpsi_InitCAT(p_cat, i_version, b_current_next); \ } while(0); /***************************************************************************** * dvbpsi_EmptyCAT *****************************************************************************/ /*! * \fn void dvbpsi_EmptyCAT(dvbpsi_cat_t* p_cat) * \brief Clean a dvbpsi_cat_t structure. * \param p_cat pointer to the CAT structure * \return nothing. */ void dvbpsi_EmptyCAT(dvbpsi_cat_t* p_cat); /***************************************************************************** * dvbpsi_CATAddDescriptor *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t* dvbpsi_CATAddDescriptor(dvbpsi_cat_t* p_cat, uint8_t i_tag, uint8_t i_length, uint8_t* p_data) * \brief Add a descriptor in the CAT. * \param p_cat pointer to the CAT structure * \param i_tag descriptor's tag * \param i_length descriptor's length * \param p_data descriptor's data * \return a pointer to the added descriptor. */ dvbpsi_descriptor_t* dvbpsi_CATAddDescriptor(dvbpsi_cat_t* p_cat, uint8_t i_tag, uint8_t i_length, uint8_t* p_data); /***************************************************************************** * dvbpsi_GenCATSections *****************************************************************************/ /*! * \fn dvbpsi_psi_section_t* dvbpsi_GenCATSections(dvbpsi_cat_t* p_cat) * \brief CAT generator * \param p_cat CAT structure * \return a pointer to the list of generated PSI sections. * * Generate CAT sections based on the dvbpsi_cat_t structure. */ dvbpsi_psi_section_t* dvbpsi_GenCATSections(dvbpsi_cat_t* p_cat); #ifdef __cplusplus }; #endif #else #error "Multiple inclusions of cat.h" #endif dvbstreamer-2.1.0/include/dvbpsi/datetime.h000077500000000000000000000026321217721213100207120ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA datetime.h Date and Time decoding functions. */ #ifndef _DATETIME_H #define _DATETIME_H #include /***************************************************************************** * dvbpsi_DecodeMJDUTC *****************************************************************************/ /*! * \fn void dvbpsi_DecodeMJDUTC(uint8_t *p_mjdutc, struct tm *p_date_time) * \brief Decode date/time encoded in MJD UTC format into its constituent parts. * \param p_mjdutc pointer to MJD UTC encoded date time. * \param p_date_time pointer to a tm structure to hold the converted date. */ void dvbpsi_DecodeMJDUTC(uint8_t *p_mjdutc, struct tm *p_date_time); #endif /*_DATETIME_H*/ dvbstreamer-2.1.0/include/dvbpsi/demux.h000066400000000000000000000153541217721213100202420ustar00rootroot00000000000000/***************************************************************************** * demux.h * (c)2001-2002 VideoLAN * $Id: demux.h 108 2005-04-19 12:33:21Z gbazin $ * * Authors: Johan Bilien * * 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. * *****************************************************************************/ /*! * \file * \author Johan Bilien * \brief Subtable demutiplexor. * * Subtable demultiplexor structure */ #ifndef _DVBPSI_DEMUX_H_ #define _DVBPSI_DEMUX_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_demux_new_cb_t *****************************************************************************/ /*! * \typedef void(* dvbpsi_demux_new_cb_t) (void * p_cb_data, dvbpsi_handle h_dvbpsi, uint8_t i_table_id, uint16_t i_extension); * \brief Callback used in case of a new subtable detected. */ typedef void (*dvbpsi_demux_new_cb_t) (void * p_cb_data, dvbpsi_handle h_dvbpsi, uint8_t i_table_id, uint16_t i_extension); /***************************************************************************** * dvbpsi_demux_subdec_cb_t *****************************************************************************/ /*! * \typedef void (*dvbpsi_demux_subdec_cb_t) (dvbpsi_decoder_t* p_psi_decoder, void* p_private_decoder, dvbpsi_psi_section_t* p_section); * \brief Subtable specific decoder. */ typedef void (*dvbpsi_demux_subdec_cb_t) (dvbpsi_decoder_t* p_psi_decoder, void* p_private_decoder, dvbpsi_psi_section_t* p_section); /***************************************************************************** * dvbpsi_demux_subdec_t *****************************************************************************/ /*! * \struct dvbpsi_demux_subdec_s * \brief Subtable decoder structure * * This structure contains the data specific to the decoding of one * subtable. */ /*! * \typedef struct dvbpsi_demux_subdec_s dvbpsi_demux_subdec_t * \brief dvbpsi_demux_subdec_t type definition. */ struct dvbpsi_demux_s; typedef struct dvbpsi_demux_subdec_s { uint32_t i_id; dvbpsi_demux_subdec_cb_t pf_callback; void * p_cb_data; struct dvbpsi_demux_subdec_s * p_next; void (*pf_detach)(struct dvbpsi_demux_s *, uint8_t, uint16_t); } dvbpsi_demux_subdec_t; /***************************************************************************** * dvbpsi_demux_t *****************************************************************************/ /*! * \struct dvbpsi_demux_s * \brief subtable demultiplexor structure * * This structure contains the subtables demultiplexor data, such as the * decoders and new subtable callback. */ /*! * \typedef struct dvbpsi_demux_s dvbpsi_demux_t * \brief dvbpsi_demux_t type definition. */ typedef struct dvbpsi_demux_s { dvbpsi_handle p_decoder; /*!< Parent PSI Decoder */ dvbpsi_demux_subdec_t * p_first_subdec; /*!< First subtable decoder */ /* New subtable callback */ dvbpsi_demux_new_cb_t pf_new_callback; /*!< New subtable callback */ void * p_new_cb_data; /*!< Data provided to the previous callback */ } dvbpsi_demux_t; /***************************************************************************** * dvbpsi_AttachDemux *****************************************************************************/ /*! * \fn dvbpsi_handle_t dvbpsi_NewPSISection(dvbpsi_demux_new_cb_t pf_new_cb, void * p_new_cb_data) * \brief Creates a new demux structure. * \param pf_new_cb A callcack called when a new type of subtable is found. * \param p_new_cb_data Data given to the previous callback. * \return a handle to the new demux structure. */ dvbpsi_handle dvbpsi_AttachDemux(dvbpsi_demux_new_cb_t pf_new_cb, void * p_new_cb_data); /***************************************************************************** * dvbpsi_DetachDemux *****************************************************************************/ /*! * \fn void dvbpsi_DetachDemux(dvbpsi_handle h_dvbpsi) * \brief Destroys a demux structure. * \param h_dvbpsi The handle of the demux to be destroyed. */ void dvbpsi_DetachDemux(dvbpsi_handle h_dvbpsi); /***************************************************************************** * dvbpsi_demuxGetSubDec *****************************************************************************/ /*! * \fn dvbpsi_demux_subdec_t * dvbpsi_demuxGetSubDec(dvbpsi_demux_t *, uint8_t, uint16_t) * \brief Looks for a subtable decoder, given the subtable ID. * \param p_demux Pointer to the demux structure. * \param i_table_id Table ID of the wanted subtable. * \param i_extension Table ID extension of the wanted subtable. * \return a pointer to the found subdecoder, or NULL. * */ dvbpsi_demux_subdec_t * dvbpsi_demuxGetSubDec(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_t i_extension); /***************************************************************************** * dvbpsi_Demux *****************************************************************************/ /*! * \fn void dvbpsi_Demux(dvbpsi_handle h_dvbpsi, dvbpsi_psi_section_t * p_section) * \brief Sends the PSI sections to the right subtable decoder according to their table ID and extension. * \param h_dvbpsi PSI decoder handle. * \param p_section PSI section. */ void dvbpsi_Demux(dvbpsi_handle h_dvbpsi, dvbpsi_psi_section_t * p_section); #ifdef __cplusplus }; #endif #else #error "Multiple inclusions of demux.h" #endif dvbstreamer-2.1.0/include/dvbpsi/descriptor.h000066400000000000000000000067451217721213100213020ustar00rootroot00000000000000/***************************************************************************** * descriptor.h * (c)2001-2002 VideoLAN * $Id: descriptor.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ /*! * \file * \author Arnaud de Bossoreille de Ribou * \brief Common descriptor tools. * * Descriptor structure and its Manipulation tools. */ #ifndef _DVBPSI_DESCRIPTOR_H_ #define _DVBPSI_DESCRIPTOR_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_descriptor_t *****************************************************************************/ /*! * \struct dvbpsi_descriptor_s * \brief Descriptor structure. * * This structure is used to store a descriptor. * (ISO/IEC 13818-1 section 2.6). */ /*! * \typedef struct dvbpsi_descriptor_s dvbpsi_descriptor_t * \brief dvbpsi_descriptor_t type definition. */ typedef struct dvbpsi_descriptor_s { uint8_t i_tag; /*!< descriptor_tag */ uint8_t i_length; /*!< descriptor_length */ uint8_t * p_data; /*!< content */ struct dvbpsi_descriptor_s * p_next; /*!< next element of the list */ void * p_decoded; /*!< decoded descriptor */ } dvbpsi_descriptor_t; /***************************************************************************** * dvbpsi_NewDescriptor *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t* dvbpsi_NewDescriptor(uint8_t i_tag, uint8_t i_length, uint8_t* p_data) * \brief Creation of a new dvbpsi_descriptor_t structure. * \param i_tag descriptor's tag * \param i_length descriptor's length * \param p_data descriptor's data * \return a pointer to the descriptor. */ dvbpsi_descriptor_t* dvbpsi_NewDescriptor(uint8_t i_tag, uint8_t i_length, uint8_t* p_data); /***************************************************************************** * dvbpsi_DeleteDescriptors *****************************************************************************/ /*! * \fn void dvbpsi_DeleteDescriptors(dvbpsi_descriptor_t* p_descriptor) * \brief Destruction of a dvbpsi_descriptor_t structure. * \param p_descriptor pointer to the first descriptor structure * \return nothing. */ void dvbpsi_DeleteDescriptors(dvbpsi_descriptor_t* p_descriptor); #ifdef __cplusplus }; #endif #else #error "Multiple inclusions of descriptor.h" #endif dvbstreamer-2.1.0/include/dvbpsi/dr.h000066400000000000000000000035641217721213100175250ustar00rootroot00000000000000/***************************************************************************** * dr.h * (c)2001-2002 VideoLAN * $Id: dr.h 157 2007-10-16 18:01:15Z jpsaman $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ /*! * \file * \author Arnaud de Bossoreille de Ribou * \brief Gather all dr_*.h into one. * * Gathers all dr_*.h into one. Use this header if you need a lot of them. */ #ifndef _DVBPSI_DR_H_ #define _DVBPSI_DR_H_ #include "dr_02.h" #include "dr_03.h" #include "dr_04.h" #include "dr_05.h" #include "dr_06.h" #include "dr_07.h" #include "dr_08.h" #include "dr_09.h" #include "dr_0a.h" #include "dr_0b.h" #include "dr_0c.h" #include "dr_0d.h" #include "dr_0e.h" #include "dr_0f.h" #include "dr_13.h" #include "dr_14.h" #include "dr_42.h" #include "dr_43.h" #include "dr_47.h" #include "dr_48.h" #include "dr_4d.h" #include "dr_4e.h" #include "dr_52.h" #include "dr_55.h" #include "dr_56.h" #include "dr_59.h" #include "dr_5a.h" #include "dr_62.h" #include "dr_66.h" #include "dr_69.h" #include "dr_73.h" #include "dr_76.h" #include "dr_83.h" #endif dvbstreamer-2.1.0/include/dvbpsi/dr_02.h000066400000000000000000000076651217721213100200340ustar00rootroot00000000000000/***************************************************************************** * dr_02.h * (c)2001-2002 VideoLAN * $Id: dr_02.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ /*! * \file * \author Arnaud de Bossoreille de Ribou * \brief Application interface for the MPEG 2 "video stream" descriptor * decoder and generator. * * Application interface for the MPEG 2 "video stream" descriptor * decoder and generator. This descriptor's definition can be found in * ISO/IEC 13818-1 section 2.6.2. */ #ifndef _DVBPSI_DR_02_H_ #define _DVBPSI_DR_02_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_vstream_dr_t *****************************************************************************/ /*! * \struct dvbpsi_vstream_dr_s * \brief "video stream" descriptor structure. * * This structure is used to store a decoded "video stream" descriptor. * (ISO/IEC 13818-1 section 2.6.2). */ /*! * \typedef struct dvbpsi_vstream_dr_s dvbpsi_vstream_dr_t * \brief dvbpsi_vstream_dr_t type definition. */ typedef struct dvbpsi_vstream_dr_s { int b_multiple_frame_rate; /*!< multiple_frame_rate_flag */ uint8_t i_frame_rate_code; /*!< frame_rate_code */ int b_mpeg2; /*!< MPEG_2_flag */ int b_constrained_parameter; /*!< constrained_parameter_flag */ int b_still_picture; /*!< still_picture_flag */ /* used if b_mpeg2 is true */ uint8_t i_profile_level_indication; /*!< profile_and_level_indication */ uint8_t i_chroma_format; /*!< chroma_format */ int b_frame_rate_extension; /*!< frame_rate_extension_flag */ } dvbpsi_vstream_dr_t; /***************************************************************************** * dvbpsi_DecodeVStreamDr *****************************************************************************/ /*! * \fn dvbpsi_vstream_dr_t * dvbpsi_DecodeVStreamDr( dvbpsi_descriptor_t * p_descriptor) * \brief "video stream" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "video stream" descriptor structure which * contains the decoded data. */ dvbpsi_vstream_dr_t* dvbpsi_DecodeVStreamDr(dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenVStreamDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenVStreamDr( dvbpsi_vstream_dr_t * p_decoded, int b_duplicate) * \brief "video stream" descriptor generator. * \param p_decoded pointer to a decoded "video stream" descriptor structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenVStreamDr(dvbpsi_vstream_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_03.h000066400000000000000000000070421217721213100200220ustar00rootroot00000000000000/***************************************************************************** * dr_03.h * (c)2001-2002 VideoLAN * $Id: dr_03.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ /*! * \file * \author Arnaud de Bossoreille de Ribou * \brief Application interface for the MPEG 2 "audio stream" descriptor * decoder and generator. * * Application interface for the MPEG 2 "audio stream" descriptor * decoder and generator. This descriptor's definition can be found in * ISO/IEC 13818-1 section 2.6.4. */ #ifndef _DVBPSI_DR_03_H_ #define _DVBPSI_DR_03_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_astream_dr_t *****************************************************************************/ /*! * \struct dvbpsi_astream_dr_s * \brief "audio stream" descriptor structure. * * This structure is used to store a decoded "audio stream" descriptor. * (ISO/IEC 13818-1 section 2.6.4). */ /*! * \typedef struct dvbpsi_astream_dr_s dvbpsi_astream_dr_t * \brief dvbpsi_astream_dr_t type definition. */ typedef struct dvbpsi_astream_dr_s { int b_free_format; /*!< free_format_flag */ uint8_t i_id; /*!< ID */ uint8_t i_layer; /*!< layer */ } dvbpsi_astream_dr_t; /***************************************************************************** * dvbpsi_DecodeAStreamDr *****************************************************************************/ /*! * \fn dvbpsi_astream_dr_t * dvbpsi_DecodeAStreamDr( dvbpsi_descriptor_t * p_descriptor) * \brief "audio stream" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "audio stream" descriptor structure which * contains the decoded data. */ dvbpsi_astream_dr_t* dvbpsi_DecodeAStreamDr(dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenAStreamDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenAStreamDr( dvbpsi_astream_dr_t * p_decoded, int b_duplicate) * \brief "audio stream" descriptor generator. * \param p_decoded pointer to a decoded "video stream" descriptor structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenAStreamDr(dvbpsi_astream_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_04.h000066400000000000000000000072621217721213100200270ustar00rootroot00000000000000/***************************************************************************** * dr_04.h * (c)2001-2002 VideoLAN * $Id: dr_04.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ /*! * \file * \author Arnaud de Bossoreille de Ribou * \brief Application interface for the MPEG 2 "hierarchy" descriptor * decoder and generator. * * Application interface for the MPEG 2 "hierarchy" descriptor * decoder and generator. This descriptor's definition can be found in * ISO/IEC 13818-1 section 2.6.6. */ #ifndef _DVBPSI_DR_04_H_ #define _DVBPSI_DR_04_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_hierarchy_dr_t *****************************************************************************/ /*! * \struct dvbpsi_hierarchy_dr_s * \brief "hierarchy" descriptor structure. * * This structure is used to store a decoded "hierarchy" descriptor. * (ISO/IEC 13818-1 section 2.6.6). */ /*! * \typedef struct dvbpsi_hierarchy_dr_s dvbpsi_hierarchy_dr_t * \brief dvbpsi_hierarchy_dr_t type definition. */ typedef struct dvbpsi_hierarchy_dr_s { uint8_t i_h_type; /*!< hierarchy_type */ uint8_t i_h_layer_index; /*!< hierarchy_layer_index */ uint8_t i_h_embedded_layer; /*!< hierarchy_embedded_layer */ uint8_t i_h_priority; /*!< hierarchy_priority */ } dvbpsi_hierarchy_dr_t; /***************************************************************************** * dvbpsi_DecodeHierarchyDr *****************************************************************************/ /*! * \fn dvbpsi_hierarchy_dr_t * dvbpsi_DecodeHierarchyDr( dvbpsi_descriptor_t * p_descriptor) * \brief "hierarchy" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "hierarchy" descriptor structure which * contains the decoded data. */ dvbpsi_hierarchy_dr_t* dvbpsi_DecodeHierarchyDr( dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenHierarchyDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenHierarchyDr( dvbpsi_hierarchy_dr_t * p_decoded, int b_duplicate) * \brief "hierarchy" descriptor generator. * \param p_decoded pointer to a decoded "hierarchy" descriptor structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenHierarchyDr(dvbpsi_hierarchy_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_05.h000066400000000000000000000074451217721213100200330ustar00rootroot00000000000000/***************************************************************************** * dr_05.h * (c)2001-2002 VideoLAN * $Id: dr_05.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ /*! * \file * \author Arnaud de Bossoreille de Ribou * \brief Application interface for the MPEG 2 "registration" descriptor * decoder and generator. * * Application interface for the MPEG 2 "registration" descriptor * decoder and generator. This descriptor's definition can be found in * ISO/IEC 13818-1 section 2.6.8. */ #ifndef _DVBPSI_DR_05_H_ #define _DVBPSI_DR_05_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_registration_dr_t *****************************************************************************/ /*! * \struct dvbpsi_registration_dr_s * \brief "registration" descriptor structure. * * This structure is used to store a decoded "registration" descriptor. * (ISO/IEC 13818-1 section 2.6.8). */ /*! * \typedef struct dvbpsi_registration_dr_s dvbpsi_registration_dr_t * \brief dvbpsi_registration_dr_t type definition. */ typedef struct dvbpsi_registration_dr_s { uint32_t i_format_identifier; /*!< format_identifier */ uint8_t i_additional_length; /*!< length of the i_additional_info array */ uint8_t i_additional_info[251]; /*!< additional_identification_info */ } dvbpsi_registration_dr_t; /***************************************************************************** * dvbpsi_DecodeRegistrationDr *****************************************************************************/ /*! * \fn dvbpsi_registration_dr_t * dvbpsi_DecodeRegistrationDr( dvbpsi_descriptor_t * p_descriptor) * \brief "registration" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "registration" descriptor structure which * contains the decoded data. */ dvbpsi_registration_dr_t* dvbpsi_DecodeRegistrationDr( dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenRegistrationDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenRegistrationDr( dvbpsi_registration_dr_t * p_decoded, int b_duplicate) * \brief "registration" descriptor generator. * \param p_decoded pointer to a decoded "registration" descriptor structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenRegistrationDr( dvbpsi_registration_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_06.h000066400000000000000000000072271217721213100200320ustar00rootroot00000000000000/***************************************************************************** * dr_06.h * (c)2001-2002 VideoLAN * $Id: dr_06.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ /*! * \file * \author Arnaud de Bossoreille de Ribou * \brief Application interface for the MPEG 2 "data stream alignment" * descriptor decoder and generator. * * Application interface for the MPEG 2 "data stream alignment" descriptor * decoder and generator. This descriptor's definition can be found in * ISO/IEC 13818-1 section 2.6.10. */ #ifndef _DVBPSI_DR_06_H_ #define _DVBPSI_DR_06_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_ds_alignment_dr_t *****************************************************************************/ /*! * \struct dvbpsi_ds_alignment_dr_s * \brief "data stream alignment" descriptor structure. * * This structure is used to store a decoded "data stream alignment" * descriptor. (ISO/IEC 13818-1 section 2.6.10). */ /*! * \typedef struct dvbpsi_ds_alignment_dr_s dvbpsi_ds_alignment_dr_t * \brief dvbpsi_ds_alignment_dr_t type definition. */ typedef struct dvbpsi_ds_alignment_dr_s { uint8_t i_alignment_type; /*!< alignment_type */ } dvbpsi_ds_alignment_dr_t; /***************************************************************************** * dvbpsi_DecodeDSAlignmentDr *****************************************************************************/ /*! * \fn dvbpsi_ds_alignment_dr_t * dvbpsi_DecodeDSAlignmentDr( dvbpsi_descriptor_t * p_descriptor) * \brief "data stream alignment" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "data stream alignment" descriptor structure * which contains the decoded data. */ dvbpsi_ds_alignment_dr_t* dvbpsi_DecodeDSAlignmentDr( dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenDSAlignmentDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenDSAlignmentDr( dvbpsi_ds_alignment_dr_t * p_decoded, int b_duplicate) * \brief "data stream alignment" descriptor generator. * \param p_decoded pointer to a decoded "data stream alignment" descriptor * structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenDSAlignmentDr( dvbpsi_ds_alignment_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_07.h000066400000000000000000000074631217721213100200350ustar00rootroot00000000000000/***************************************************************************** * dr_07.h * (c)2001-2002 VideoLAN * $Id: dr_07.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ /*! * \file * \author Arnaud de Bossoreille de Ribou * \brief Application interface for the MPEG 2 "target background grid" * descriptor decoder and generator. * * Application interface for the MPEG 2 "target background grid" descriptor * decoder and generator. This descriptor's definition can be found in * ISO/IEC 13818-1 section 2.6.12. */ #ifndef _DVBPSI_DR_07_H_ #define _DVBPSI_DR_07_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_target_bg_grid_dr_t *****************************************************************************/ /*! * \struct dvbpsi_target_bg_grid_dr_s * \brief "target background grid" descriptor structure. * * This structure is used to store a decoded "target background grid" * descriptor. (ISO/IEC 13818-1 section 2.6.12). */ /*! * \typedef struct dvbpsi_target_bg_grid_dr_s dvbpsi_target_bg_grid_dr_t * \brief dvbpsi_target_bg_grid_dr_t type definition. */ typedef struct dvbpsi_target_bg_grid_dr_s { uint16_t i_horizontal_size; /*!< horizontal_size */ uint16_t i_vertical_size; /*!< vertical_size */ uint8_t i_pel_aspect_ratio; /*!< pel_aspect_ratio */ } dvbpsi_target_bg_grid_dr_t; /***************************************************************************** * dvbpsi_DecodeTargetBgGridDr *****************************************************************************/ /*! * \fn dvbpsi_target_bg_grid_dr_t * dvbpsi_DecodeTargetBgGridDr( dvbpsi_descriptor_t * p_descriptor) * \brief "target background grid" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "target background grid" descriptor structure * which contains the decoded data. */ dvbpsi_target_bg_grid_dr_t* dvbpsi_DecodeTargetBgGridDr( dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenTargetBgGridDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenTargetBgGridDr( dvbpsi_target_bg_grid_dr_t * p_decoded, int b_duplicate) * \brief "target background grid" descriptor generator. * \param p_decoded pointer to a decoded "target background grid" descriptor * structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenTargetBgGridDr( dvbpsi_target_bg_grid_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_08.h000066400000000000000000000070601217721213100200270ustar00rootroot00000000000000/***************************************************************************** * dr_08.h * (c)2001-2002 VideoLAN * $Id: dr_08.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ /*! * \file * \author Arnaud de Bossoreille de Ribou * \brief Application interface for the MPEG 2 "video window" * descriptor decoder and generator. * * Application interface for the MPEG 2 "video window" descriptor * decoder and generator. This descriptor's definition can be found in * ISO/IEC 13818-1 section 2.6.14. */ #ifndef _DVBPSI_DR_08_H_ #define _DVBPSI_DR_08_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_vwindow_dr_t *****************************************************************************/ /*! * \struct dvbpsi_vwindow_dr_s * \brief "video window" descriptor structure. * * This structure is used to store a decoded "video window" * descriptor. (ISO/IEC 13818-1 section 2.6.14). */ /*! * \typedef struct dvbpsi_vwindow_dr_s dvbpsi_vwindow_dr_t * \brief dvbpsi_vwindow_dr_t type definition. */ typedef struct dvbpsi_vwindow_dr_s { uint16_t i_horizontal_offset; /*!< horizontal_offset */ uint16_t i_vertical_offset; /*!< vertical_offset */ uint8_t i_window_priority; /*!< window_priority */ } dvbpsi_vwindow_dr_t; /***************************************************************************** * dvbpsi_DecodeVWindowDr *****************************************************************************/ /*! * \fn dvbpsi_vwindow_dr_t * dvbpsi_DecodeVWindowDr( dvbpsi_descriptor_t * p_descriptor) * \brief "video window" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "video window" descriptor structure which * contains the decoded data. */ dvbpsi_vwindow_dr_t* dvbpsi_DecodeVWindowDr(dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenVWindowDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenVWindowDr( dvbpsi_vwindow_dr_t * p_decoded, int b_duplicate) * \brief "video window" descriptor generator. * \param p_decoded pointer to a decoded "video window" descriptor structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenVWindowDr(dvbpsi_vwindow_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_09.h000066400000000000000000000072051217721213100200310ustar00rootroot00000000000000/***************************************************************************** * dr_09.h * (c)2001-2002 VideoLAN * $Id: dr_09.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ /*! * \file * \author Arnaud de Bossoreille de Ribou * \brief Application interface for the MPEG 2 "conditional access" * descriptor decoder and generator. * * Application interface for the MPEG 2 "conditional access" descriptor * decoder and generator. This descriptor's definition can be found in * ISO/IEC 13818-1 section 2.6.16. */ #ifndef _DVBPSI_DR_09_H_ #define _DVBPSI_DR_09_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_ca_dr_t *****************************************************************************/ /*! * \struct dvbpsi_ca_dr_s * \brief "conditional access" descriptor structure. * * This structure is used to store a decoded "conditional access" * descriptor. (ISO/IEC 13818-1 section 2.6.16). */ /*! * \typedef struct dvbpsi_ca_dr_s dvbpsi_ca_dr_t * \brief dvbpsi_ca_dr_t type definition. */ typedef struct dvbpsi_ca_dr_s { uint16_t i_ca_system_id; /*!< CA_system_ID */ uint16_t i_ca_pid; /*!< CA_PID */ uint8_t i_private_length; /*!< length of the i_private_data array */ uint8_t i_private_data[251]; /*!< private_data_byte */ } dvbpsi_ca_dr_t; /***************************************************************************** * dvbpsi_DecodeCADr *****************************************************************************/ /*! * \fn dvbpsi_ca_dr_t * dvbpsi_DecodeCADr( dvbpsi_descriptor_t * p_descriptor) * \brief "conditional access" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "conditional access" descriptor structure which * contains the decoded data. */ dvbpsi_ca_dr_t* dvbpsi_DecodeCADr(dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenCADr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenCADr( dvbpsi_ca_dr_t * p_decoded, int b_duplicate) * \brief "conditional access" descriptor generator. * \param p_decoded pointer to a decoded "conditional access" descriptor * structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenCADr(dvbpsi_ca_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_0a.h000066400000000000000000000073601217721213100201030ustar00rootroot00000000000000/***************************************************************************** * dr_0a.h * (c)2001-2002 VideoLAN * $Id: dr_0a.h 132 2006-07-18 08:34:12Z sigmunau $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ /*! * \file * \author Arnaud de Bossoreille de Ribou * \brief Application interface for the MPEG 2 "ISO 639 language" * descriptor decoder and generator. * * Application interface for the MPEG 2 "ISO 639 language" descriptor * decoder and generator. This descriptor's definition can be found in * ISO/IEC 13818-1 section 2.6.18. */ #ifndef _DVBPSI_DR_0A_H_ #define _DVBPSI_DR_0A_H_ #ifdef __cplusplus extern "C" { #endif #define DR_0A_API_VER 2 typedef uint8_t iso_639_language_code_t[3]; /***************************************************************************** * dvbpsi_iso639_dr_t *****************************************************************************/ /*! * \struct dvbpsi_iso639_dr_s * \brief "ISO 639 language" descriptor structure. * * This structure is used to store a decoded "ISO 639 language" * descriptor. (ISO/IEC 13818-1 section 2.6.18). */ /*! * \typedef struct dvbpsi_iso639_dr_s dvbpsi_iso639_dr_t * \brief dvbpsi_iso639_dr_t type definition. */ typedef struct dvbpsi_iso639_dr_s { uint8_t i_code_count; /*!< length of the i_iso_639_code array */ struct { iso_639_language_code_t iso_639_code; /*!< ISO_639_language_code */ uint8_t i_audio_type; /*!< audio_type */ } code[64]; } dvbpsi_iso639_dr_t; /***************************************************************************** * dvbpsi_DecodeISO639Dr *****************************************************************************/ /*! * \fn dvbpsi_iso639_dr_t * dvbpsi_DecodeISO639Dr( dvbpsi_descriptor_t * p_descriptor) * \brief "ISO 639 language" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "ISO 639 language" descriptor structure which * contains the decoded data. */ dvbpsi_iso639_dr_t* dvbpsi_DecodeISO639Dr(dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenISO639Dr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenISO639Dr( dvbpsi_iso639_dr_t * p_decoded, int b_duplicate) * \brief "ISO 639 language" descriptor generator. * \param p_decoded pointer to a decoded "ISO 639 language" descriptor * structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenISO639Dr(dvbpsi_iso639_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_0b.h000066400000000000000000000074371217721213100201110ustar00rootroot00000000000000/***************************************************************************** * dr_0b.h * (c)2001-2002 VideoLAN * $Id: dr_0b.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ /*! * \file * \author Arnaud de Bossoreille de Ribou * \brief Application interface for the MPEG 2 "system clock" * descriptor decoder and generator. * * Application interface for the MPEG 2 "system clock" descriptor * decoder and generator. This descriptor's definition can be found in * ISO/IEC 13818-1 section 2.6.20. */ #ifndef _DVBPSI_DR_0B_H_ #define _DVBPSI_DR_0B_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_system_clock_dr_t *****************************************************************************/ /*! * \struct dvbpsi_system_clock_dr_s * \brief "system clock" descriptor structure. * * This structure is used to store a decoded "system clock" * descriptor. (ISO/IEC 13818-1 section 2.6.20). */ /*! * \typedef struct dvbpsi_system_clock_dr_s dvbpsi_system_clock_dr_t * \brief dvbpsi_system_clock_dr_t type definition. */ typedef struct dvbpsi_system_clock_dr_s { int b_external_clock_ref; /*!< external_clock_reference_indicator */ uint8_t i_clock_accuracy_integer; /*!< clock_accuracy_integer */ uint8_t i_clock_accuracy_exponent; /*!< clock_accuracy_exponent */ } dvbpsi_system_clock_dr_t; /***************************************************************************** * dvbpsi_DecodeSystemClockDr *****************************************************************************/ /*! * \fn dvbpsi_system_clock_dr_t * dvbpsi_DecodeSystemClockDr( dvbpsi_descriptor_t * p_descriptor) * \brief "system clock" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "system clock" descriptor structure which * contains the decoded data. */ dvbpsi_system_clock_dr_t* dvbpsi_DecodeSystemClockDr( dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenSystemClockDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenSystemClockDr( dvbpsi_system_clock_dr_t * p_decoded, int b_duplicate) * \brief "system clock" descriptor generator. * \param p_decoded pointer to a decoded "system clock" descriptor * structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenSystemClockDr( dvbpsi_system_clock_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_0c.h000066400000000000000000000076351217721213100201120ustar00rootroot00000000000000/***************************************************************************** * dr_0c.h * (c)2001-2002 VideoLAN * $Id: dr_0c.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ /*! * \file * \author Arnaud de Bossoreille de Ribou * \brief Application interface for the MPEG 2 "multiplex buffer utilization" * descriptor decoder and generator. * * Application interface for the MPEG 2 "multiplex buffer utilization" * descriptor decoder and generator. This descriptor's definition can be found * in ISO/IEC 13818-1 section 2.6.22. */ #ifndef _DVBPSI_DR_0C_H_ #define _DVBPSI_DR_0C_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_mx_buff_utilization_dr_t *****************************************************************************/ /*! * \struct dvbpsi_mx_buff_utilization_dr_s * \brief "multiplex buffer utilization" descriptor structure. * * This structure is used to store a decoded "multiplex buffer utilization" * descriptor. (ISO/IEC 13818-1 section 2.6.22). */ /*! * \typedef struct dvbpsi_mx_buff_utilization_dr_s dvbpsi_mx_buff_utilization_dr_t * \brief dvbpsi_systemclock_dr_t type definition. */ typedef struct dvbpsi_mx_buff_utilization_dr_s { int b_mdv_valid; /*!< mdv_valid_flag */ uint16_t i_mx_delay_variation; /*!< multiplex_delay_variation */ uint8_t i_mx_strategy; /*!< multiplex_strategy */ } dvbpsi_mx_buff_utilization_dr_t; /***************************************************************************** * dvbpsi_DecodeMxBuffUtilizationDr *****************************************************************************/ /*! * \fn dvbpsi_mx_buff_utilization_dr_t * dvbpsi_DecodeMxBuffUtilizationDr( dvbpsi_descriptor_t * p_descriptor) * \brief "multiplex buffer utilization" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "multiplex buffer utilization" descriptor * structure which contains the decoded data. */ dvbpsi_mx_buff_utilization_dr_t* dvbpsi_DecodeMxBuffUtilizationDr( dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenMxBuffUtilizationDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenMxBuffUtilizationDr( dvbpsi_mx_buff_utilization_dr_t * p_decoded, int b_duplicate) * \brief "multiplex buffer utilization" descriptor generator. * \param p_decoded pointer to a decoded "system clock" descriptor * structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenMxBuffUtilizationDr( dvbpsi_mx_buff_utilization_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_0d.h000066400000000000000000000073321217721213100201050ustar00rootroot00000000000000/***************************************************************************** * dr_0d.h * (c)2001-2002 VideoLAN * $Id: dr_0d.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ /*! * \file * \author Arnaud de Bossoreille de Ribou * \brief Application interface for the MPEG 2 "copyright" descriptor * decoder and generator. * * Application interface for the MPEG 2 "copyright" descriptor * decoder and generator. This descriptor's definition can be found in * ISO/IEC 13818-1 section 2.6.24. */ #ifndef _DVBPSI_DR_0D_H_ #define _DVBPSI_DR_0D_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_copyright_dr_t *****************************************************************************/ /*! * \struct dvbpsi_copyright_dr_s * \brief "copyright" descriptor structure. * * This structure is used to store a decoded "copyright" descriptor. * (ISO/IEC 13818-1 section 2.6.24). */ /*! * \typedef struct dvbpsi_copyright_dr_s dvbpsi_copyright_dr_t * \brief dvbpsi_copyright_dr_t type definition. */ typedef struct dvbpsi_copyright_dr_s { uint32_t i_copyright_identifier; /*!< copyright_identifier */ uint8_t i_additional_length; /*!< length of the i_additional_info array */ uint8_t i_additional_info[251]; /*!< additional_copyright_info */ } dvbpsi_copyright_dr_t; /***************************************************************************** * dvbpsi_DecodeCopyrightDr *****************************************************************************/ /*! * \fn dvbpsi_copyright_dr_t * dvbpsi_DecodeCopyrightDr( dvbpsi_descriptor_t * p_descriptor) * \brief "copyright" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "copyright" descriptor structure which * contains the decoded data. */ dvbpsi_copyright_dr_t* dvbpsi_DecodeCopyrightDr( dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenCopyrightDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenCopyrightDr( dvbpsi_copyright_dr_t * p_decoded, int b_duplicate) * \brief "copyright" descriptor generator. * \param p_decoded pointer to a decoded "copyright" descriptor structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenCopyrightDr( dvbpsi_copyright_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_0e.h000066400000000000000000000071241217721213100201050ustar00rootroot00000000000000/***************************************************************************** * dr_0e.h * (c)2001-2002 VideoLAN * $Id: dr_0e.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ /*! * \file * \author Arnaud de Bossoreille de Ribou * \brief Application interface for the MPEG 2 "maximum bitrate" descriptor * decoder and generator. * * Application interface for the MPEG 2 "maximum bitrate" descriptor * decoder and generator. This descriptor's definition can be found in * ISO/IEC 13818-1 section 2.6.26. */ #ifndef _DVBPSI_DR_0E_H_ #define _DVBPSI_DR_0E_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_max_bitrate_dr_t *****************************************************************************/ /*! * \struct dvbpsi_max_bitrate_dr_s * \brief "maximum bitrate" descriptor structure. * * This structure is used to store a decoded "maximum bitrate" descriptor. * (ISO/IEC 13818-1 section 2.6.26). */ /*! * \typedef struct dvbpsi_max_bitrate_dr_s dvbpsi_max_bitrate_dr_t * \brief dvbpsi_max_bitrate_dr_t type definition. */ typedef struct dvbpsi_max_bitrate_dr_s { uint32_t i_max_bitrate; /*!< maximum_bitrate */ } dvbpsi_max_bitrate_dr_t; /***************************************************************************** * dvbpsi_DecodeMaxBitrateDr *****************************************************************************/ /*! * \fn dvbpsi_max_bitrate_dr_t * dvbpsi_DecodeMaxBitrateDr( dvbpsi_descriptor_t * p_descriptor) * \brief "maximum bitrate" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "maximum bitrate" descriptor structure which * contains the decoded data. */ dvbpsi_max_bitrate_dr_t* dvbpsi_DecodeMaxBitrateDr( dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenMaxBitrateDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenMaxBitrateDr( dvbpsi_max_bitrate_dr_t * p_decoded, int b_duplicate) * \brief "maximum bitrate" descriptor generator. * \param p_decoded pointer to a decoded "maximum bitrate" descriptor structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenMaxBitrateDr( dvbpsi_max_bitrate_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_0f.h000066400000000000000000000072471217721213100201140ustar00rootroot00000000000000/***************************************************************************** * dr_0f.h * (c)2001-2002 VideoLAN * $Id: dr_0f.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ /*! * \file * \author Arnaud de Bossoreille de Ribou * \brief Application interface for the MPEG 2 "private data indicator" * descriptor decoder and generator. * * Application interface for the MPEG 2 "private data indicator" descriptor * decoder and generator. This descriptor's definition can be found in * ISO/IEC 13818-1 section 2.6.28. */ #ifndef _DVBPSI_DR_0F_H_ #define _DVBPSI_DR_0F_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_private_data_dr_t *****************************************************************************/ /*! * \struct dvbpsi_private_data_dr_s * \brief "private data indicator" descriptor structure. * * This structure is used to store a decoded "private data indicator" * descriptor. (ISO/IEC 13818-1 section 2.6.28). */ /*! * \typedef struct dvbpsi_private_data_dr_s dvbpsi_private_data_dr_t * \brief dvbpsi_private_data_dr_t type definition. */ typedef struct dvbpsi_private_data_dr_s { uint32_t i_private_data; /*!< private_data_indicator */ } dvbpsi_private_data_dr_t; /***************************************************************************** * dvbpsi_DecodePrivateDataDr *****************************************************************************/ /*! * \fn dvbpsi_private_data_dr_t * dvbpsi_DecodePrivateDataDr( dvbpsi_descriptor_t * p_descriptor) * \brief "private data indicator" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "private data indicator" descriptor structure * which contains the decoded data. */ dvbpsi_private_data_dr_t* dvbpsi_DecodePrivateDataDr( dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenPrivateDataDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenPrivateDataDr( dvbpsi_private_data_dr_t * p_decoded, int b_duplicate) * \brief "private data indicator" descriptor generator. * \param p_decoded pointer to a decoded "private data indicator" descriptor * structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenPrivateDataDr( dvbpsi_private_data_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_13.h000066400000000000000000000037751217721213100200340ustar00rootroot00000000000000/* Copyright (C) 2010 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dr_13.h Decode Carousel id Descriptor. */ #ifndef _DR_13_H #define _DR_13_H /***************************************************************************** * dvbpsi_carousel_id_dr_s *****************************************************************************/ /*! * \struct dvbpsi_carousel_id_dr_s * \brief Data Broadcast id Descriptor * * This structure is used to store a decoded Carsouel ID descriptor. */ /*! * \typedef struct dvbpsi_carousel_id_dr_s dvbpsi_carousel_id_dr_t * \brief dvbpsi_carousel_id_dr_t type definition. */ typedef struct dvbpsi_carousel_id_dr_s { uint32_t i_carousel_id; uint8_t i_private_data_len; uint8_t s_private_data[0]; }dvbpsi_carousel_id_dr_t; /***************************************************************************** * dvbpsi_DecodeCarouselIdDr *****************************************************************************/ /*! * \fn dvbpsi_carousel_id_dr_t *dvbpsi_DecodeCarouselIdDr( * dvbpsi_descriptor_t *p_descriptor) * \brief Decode a Carousel id descriptor (tag 0x13) * \param p_descriptor Raw descriptor to decode. * \return NULL if the descriptor could not be decoded or a pointer to a * dvbpsi_carousel_id_dr_t structure. */ dvbpsi_carousel_id_dr_t *dvbpsi_DecodeCarouselIdDr(dvbpsi_descriptor_t *p_descriptor); #endif dvbstreamer-2.1.0/include/dvbpsi/dr_14.h000066400000000000000000000042021217721213100200170ustar00rootroot00000000000000/* Copyright (C) 2010 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dr_14.h Decode Association Tag Descriptor. */ #ifndef _DR_14_H #define _DR_14_H /***************************************************************************** * dvbpsi_association_tag_dr_s *****************************************************************************/ /*! * \struct dvbpsi_association_tag_dr_s * \brief Data Broadcast id Descriptor * * This structure is used to store a decoded Association Tag descriptor. */ /*! * \typedef struct dvbpsi_association_tag_dr_s dvbpsi_association_tag_dr_t * \brief dvbpsi_association_tag_dr_t type definition. */ typedef struct dvbpsi_association_tag_dr_s { uint16_t i_tag; uint16_t i_use; uint8_t i_selector_len; uint8_t *p_selector; uint8_t i_private_data_len; uint8_t *p_private_data; }dvbpsi_association_tag_dr_t; /***************************************************************************** * dvbpsi_DecodeAssociationTagDr *****************************************************************************/ /*! * \fn dvbpsi_association_tag_dr_t *dvbpsi_DecodeAssociationTagDr( * dvbpsi_descriptor_t *p_descriptor) * \brief Decode a Association Tag descriptor (tag 0x14) * \param p_descriptor Raw descriptor to decode. * \return NULL if the descriptor could not be decoded or a pointer to a * dvbpsi_association_tag_dr_t structure. */ dvbpsi_association_tag_dr_t *dvbpsi_DecodeAssociationTagDr(dvbpsi_descriptor_t *p_descriptor); #endif dvbstreamer-2.1.0/include/dvbpsi/dr_42.h000066400000000000000000000072451217721213100200320ustar00rootroot00000000000000/***************************************************************************** * dr_42.h * (c)2001-2002 VideoLAN * $Id: dr_42.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * Johan Bilien * * 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. * *****************************************************************************/ /*! * \file * \author Johan Bilien * \brief Application interface for the DVB "stuffing" * descriptor decoder and generator. * * Application interface for the DVB "stuffing" descriptor * decoder and generator. This descriptor's definition can be found in * ETSI EN 300 468 section 6.2.35. */ #ifndef _DVBPSI_DR_42_H_ #define _DVBPSI_DR_42_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_stuffing_dr_t *****************************************************************************/ /*! * \struct dvbpsi_stuffing_dr_s * \brief "stuffing" descriptor structure. * * This structure is used to store a decoded "stuffing" * descriptor. (ETSI EN 300 468 section 6.2.35). */ /*! * \typedef struct dvbpsi_stuffing_dr_s dvbpsi_stuffing_dr_t * \brief dvbpsi_stuffing_dr_t type definition. */ typedef struct dvbpsi_stuffing_dr_s { uint8_t i_stuffing_length; /*!< length of the i_stuffing_byte array */ uint8_t i_stuffing_byte[255]; /*!< stuffing_bytes */ } dvbpsi_stuffing_dr_t; /***************************************************************************** * dvbpsi_DecodeStuffingDataDr *****************************************************************************/ /*! * \fn dvbpsi_stuffing_dr_t * dvbpsi_DecodeStuffingDr( dvbpsi_descriptor_t * p_descriptor) * \brief "stuffing" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "stuffing" descriptor structure * which contains the decoded data. */ dvbpsi_stuffing_dr_t* dvbpsi_DecodeStuffingDr( dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenStuffingDataDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenStuffingDr( dvbpsi_stuffing_data_dr_t * p_decoded, int b_duplicate) * \brief "stuffing" descriptor generator. * \param p_decoded pointer to a decoded "stuffing" descriptor * structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenStuffingDataDr( dvbpsi_stuffing_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_43.h000077500000000000000000000103261217721213100200300ustar00rootroot00000000000000/***************************************************************************** * dr_43.h * (c)2001-2008 VideoLAN * $Id$ * * Authors: Johann Hanne * * 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. * *****************************************************************************/ /*! * \file * \author Johann Hanne * \brief Application interface for the DVB satellite delivery system * descriptor decoder and generator. * * Application interface for the DVB satellite delivery system descriptor * decoder and generator. This descriptor's definition can be found in * ETSI EN 300 468 section 6.2.13.2. */ #ifndef _DVBPSI_DR_43_H_ #define _DVBPSI_DR_43_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_sat_deliv_sys_dr_t *****************************************************************************/ /*! * \struct dvbpsi_sat_deliv_sys_dr_s * \brief satellite delivery system descriptor structure. * * This structure is used to store a decoded satellite delivery system * descriptor. (ETSI EN 300 468 section 6.2.13.2). */ /*! * \typedef struct dvbpsi_sat_deliv_sys_dr_s dvbpsi_sat_deliv_sys_dr_t * \brief dvbpsi_sat_deliv_sys_dr_t type definition. */ typedef struct dvbpsi_sat_deliv_sys_dr_s { uint32_t i_frequency; /*!< frequency */ uint16_t i_orbital_position; /*!< orbital position */ uint8_t i_west_east_flag; /*!< west east flag */ uint8_t i_polarization; /*!< polarization */ uint8_t i_roll_off; /*!< roll off */ uint8_t i_modulation_system; /*!< modulation system */ uint8_t i_modulation_type; /*!< modulation type */ uint32_t i_symbol_rate; /*!< symbol rate */ uint8_t i_fec_inner; /*!< FEC inner */ } dvbpsi_sat_deliv_sys_dr_t; /***************************************************************************** * dvbpsi_DecodeSatDelivSysDr *****************************************************************************/ /*! * \fn dvbpsi_sat_deliv_sys_dr_t * dvbpsi_DecodeSatDelivSysDr( dvbpsi_descriptor_t * p_descriptor) * \brief satellite delivery system descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new satellite delivery system descriptor structure * which contains the decoded data. */ dvbpsi_sat_deliv_sys_dr_t* dvbpsi_DecodeSatDelivSysDr( dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenSatDelivSysDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenSatDelivSysDr( dvbpsi_sat_deliv_sys_dr_t * p_decoded, int b_duplicate) * \brief satellite delivery system descriptor generator. * \param p_decoded pointer to a decoded satellite delivery system descriptor * descriptor structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenSatDelivSysDr( dvbpsi_sat_deliv_sys_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #else #error "Multiple inclusions of dr_43.h" #endif dvbstreamer-2.1.0/include/dvbpsi/dr_47.h000066400000000000000000000072311217721213100200320ustar00rootroot00000000000000/***************************************************************************** * dr_47.h * (c)2001-2002 VideoLAN * $Id: dr_47.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * Johan Bilien * * 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. * *****************************************************************************/ /*! * \file * \author Johan Bilien * \brief Application interface for the DVB "bouquet name" * descriptor decoder and generator. * * Application interface for the MPEG 2 "bouquet name" descriptor * decoder and generator. This descriptor's definition can be found in * ETSI EN 300 468 section 6.2.3. */ #ifndef _DVBPSI_DR_47_H_ #define _DVBPSI_DR_47_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_bouquet_name_dr_t *****************************************************************************/ /*! * \struct dvbpsi_bouquet_name_dr_s * \brief "bouquet name" descriptor structure. * * This structure is used to store a decoded "bouquet name" * descriptor. (ETSI EN 300 468 section 6.2.3). */ /*! * \typedef struct dvbpsi_bouquet_name_dr_s dvbpsi_bouquet_name_dr_t * \brief dvbpsi_bouquet_name_dr_t type definition. */ typedef struct dvbpsi_bouquet_name_dr_s { uint8_t i_name_length; /*!< length of thr i_char array */ uint8_t i_char[255]; /*!< char */ } dvbpsi_bouquet_name_dr_t; /***************************************************************************** * dvbpsi_DecodeBouquetNameDr *****************************************************************************/ /*! * \fn dvbpsi_bouquet_name_dr_t * dvbpsi_DecodeBouquetNameDr( dvbpsi_descriptor_t * p_descriptor) * \brief "bouquet name" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "bouquet name" descriptor structure * which contains the decoded data. */ dvbpsi_bouquet_name_dr_t* dvbpsi_DecodeBouquetNameDr( dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenBouquetNameDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenStuffingDr( dvbpsi_bouquet_name_dr_t * p_decoded, int b_duplicate) * \brief "bouquet name" descriptor generator. * \param p_decoded pointer to a decoded "bouquet name" descriptor * structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenBouquetNameDr( dvbpsi_bouquet_name_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_48.h000066400000000000000000000076431217721213100200420ustar00rootroot00000000000000/***************************************************************************** * dr_48.h * (c)2001-2002 VideoLAN * $Id: dr_48.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * Johan Bilien * * 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. * *****************************************************************************/ /*! * \file * \author Johan Bilien * \brief Application interface for the DVB "service" * descriptor decoder and generator. * * Application interface for the DVB "service" descriptor * decoder and generator. This descriptor's definition can be found in * ETSI EN 300 468 section 6.2.30. */ #ifndef _DVBPSI_DR_48_H_ #define _DVBPSI_DR_48_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_service_dr_t *****************************************************************************/ /*! * \struct dvbpsi_service_dr_s * \brief "service" descriptor structure. * * This structure is used to store a decoded "service" * descriptor. (ETSI EN 300 468 section 6.2.30). */ /*! * \typedef struct dvbpsi_service_dr_s dvbpsi_service_dr_t * \brief dvbpsi_service_dr_t type definition. */ typedef struct dvbpsi_service_dr_s { uint8_t i_service_type; /*!< service_type*/ uint8_t i_service_provider_name_length; /*!< length of the i_service_provider_name array*/ uint8_t i_service_provider_name[252];/*!< name of the service provider */ uint8_t i_service_name_length; /*!< length of the i_service_name array*/ uint8_t i_service_name[252]; /*!< name of the service */ } dvbpsi_service_dr_t; /***************************************************************************** * dvbpsi_DecodeServiceDataDr *****************************************************************************/ /*! * \fn dvbpsi_service_dr_t * dvbpsi_DecodeServiceDr( dvbpsi_descriptor_t * p_descriptor) * \brief "service" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "service" descriptor structure * which contains the decoded data. */ dvbpsi_service_dr_t* dvbpsi_DecodeServiceDr( dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenServiceDataDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenServiceDr( dvbpsi_service_dr_t * p_decoded, int b_duplicate) * \brief "service" descriptor generator. * \param p_decoded pointer to a decoded "service" descriptor * structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenServiceDr( dvbpsi_service_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_4d.h000066400000000000000000000067421217721213100201150ustar00rootroot00000000000000/***************************************************************************** * dr_4d.h * (c)2005 VideoLAN * $Id: dr_4d.h,v 1.3 2002/05/10 23:50:36 bozo Exp $ * * Authors: Laurent Aimar * * 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. * *****************************************************************************/ /*! * \file * \author Laurent Aimar * \brief Application interface for the "Short event" descriptor * decoder and generator. * * Application interface for the "Short event" descriptor * decoder and generator. This descriptor's definition can be found in * ETSI EN 300 468 section 6.2.35. */ #ifndef _DVBPSI_DR_4D_H_ #define _DVBPSI_DR_4D_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_short_event_dr_t *****************************************************************************/ /*! * \struct dvbpsi_short_event_dr_s * \brief "short event" descriptor structure. * * This structure is used to store a decoded "short event" descriptor. */ /*! * \typedef struct dvbpsi_short_event_dr_s dvbpsi_short_event_dr_t * \brief dvbpsi_short_event_dr_t type definition. */ typedef struct dvbpsi_short_event_dr_s { uint8_t i_iso_639_code[3]; int i_event_name_length; uint8_t i_event_name[256]; int i_text_length; uint8_t i_text[256]; } dvbpsi_short_event_dr_t; /***************************************************************************** * dvbpsi_DecodeShortEventDr *****************************************************************************/ /*! * \fn dvbpsi_short_event_dr_t * dvbpsi_DecodeShortEventDr( dvbpsi_descriptor_t * p_descriptor) * \brief "short event" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "short event" descriptor structure which * contains the decoded data. */ dvbpsi_short_event_dr_t* dvbpsi_DecodeShortEventDr(dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenShortEventDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenShortEventDr( dvbpsi_short_event_dr_t * p_decoded, int b_duplicate) * \brief "short event" descriptor generator. * \param p_decoded pointer to a decoded "video stream" descriptor structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenShortEventDr(dvbpsi_short_event_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_4e.h000066400000000000000000000073451217721213100201160ustar00rootroot00000000000000/***************************************************************************** * dr_4e.h * (c)2005 VideoLAN * $Id: dr_4d.h,v 1.3 2002/05/10 23:50:36 bozo Exp $ * * Authors: Laurent Aimar * * 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. * *****************************************************************************/ /*! * \file * \author Laurent Aimar * \brief Application interface for the "Extended event" descriptor * decoder and generator. * * Application interface for the "Extended event" descriptor * decoder and generator. This descriptor's definition can be found in * ETSI EN 300 468 section 6.2.15. */ #ifndef _DVBPSI_DR_4E_H_ #define _DVBPSI_DR_4E_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_extended_event_dr_t *****************************************************************************/ /*! * \struct dvbpsi_short_event_dr_s * \brief "short event" descriptor structure. * * This structure is used to store a decoded "short event" descriptor. */ /*! * \typedef struct dvbpsi_short_event_dr_s dvbpsi_extended_event_dr_t * \brief dvbpsi_extended_event_dr_t type definition. */ typedef struct dvbpsi_extended_event_dr_s { uint8_t i_descriptor_number; uint8_t i_last_descriptor_number; uint8_t i_iso_639_code[3]; int i_entry_count; uint8_t i_item_description_length[126]; uint8_t *i_item_description[126]; uint8_t i_item_length[126]; uint8_t *i_item[126]; int i_text_length; uint8_t *i_text; uint8_t i_buffer[256]; /* do not use */ } dvbpsi_extended_event_dr_t; /***************************************************************************** * dvbpsi_DecodeExtendedEventDr *****************************************************************************/ /*! * \fn dvbpsi_extended_event_dr_t * dvbpsi_DecodeExtendedEventDr( dvbpsi_descriptor_t * p_descriptor) * \brief "short event" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "short event" descriptor structure which * contains the decoded data. */ dvbpsi_extended_event_dr_t* dvbpsi_DecodeExtendedEventDr(dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenExtendedEventDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenExtendedEventDr( dvbpsi_extended_event_dr_t * p_decoded, int b_duplicate) * \brief "short event" descriptor generator. * \param p_decoded pointer to a decoded "video stream" descriptor structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenExtendedEventDr(dvbpsi_extended_event_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_52.h000066400000000000000000000071261217721213100200310ustar00rootroot00000000000000/***************************************************************************** * dr_52.h * (c)2005 Andrew John Hughes * * Authors: Andrew John Hughes * * 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. * *****************************************************************************/ /*! * \file * \author Andrew John Hughes * \brief Application interface for the DVB "stream identifier" * descriptor decoder and generator. * * Application interface for the DVB "stream identifier" descriptor * decoder and generator. This descriptor's definition can be found in * ETSI EN 300 468 section 6.2.37. */ #ifndef _DVBPSI_DR_52_H_ #define _DVBPSI_DR_52_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_service_dr_t *****************************************************************************/ /*! * \struct dvbpsi_service_dr_s * \brief "stream identifier" descriptor structure. * * This structure is used to store a decoded "stream identifier" * descriptor. (ETSI EN 300 468 section 6.2.37). */ /*! * \typedef struct dvbpsi_service_dr_s dvbpsi_stream_identifier_dr_t * \brief dvbpsi_stream_identifier_dr_t type definition. */ typedef struct dvbpsi_stream_identifier_dr_s { uint8_t i_component_tag; /*!< component tag*/ } dvbpsi_stream_identifier_dr_t; /***************************************************************************** * dvbpsi_DecodeStreamIdentifierDr *****************************************************************************/ /*! * \fn dvbpsi_stream_identifier_dr_t * dvbpsi_DecodeStreamIdentifierDr( dvbpsi_descriptor_t * p_descriptor) * \brief "stream identifier" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "stream identifier" descriptor structure * which contains the decoded data. */ dvbpsi_stream_identifier_dr_t* dvbpsi_DecodeStreamIdentifierDr( dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenStreamIdentifierDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenStreamIdentifierDr( dvbpsi_service_dr_t * p_decoded, int b_duplicate) * \brief "stream identifier" descriptor generator. * \param p_decoded pointer to a decoded "stream identifier" descriptor * structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenStreamIdentifierDr( dvbpsi_stream_identifier_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_55.h000066400000000000000000000102111217721213100200210ustar00rootroot00000000000000/***************************************************************************** * dr_55.h * (c)2004 VideoLAN * $Id: dr_55.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Christophe Massiot * * 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. * *****************************************************************************/ /*! * \file * \author Christophe Massiot * \brief Parental rating descriptor parsing. * * Parental rating descriptor parsing, according to ETSI EN 300 468 * section 6.2.26. */ #ifndef _DVBPSI_DR_55_H_ #define _DVBPSI_DR_55_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_parental_rating_t *****************************************************************************/ /*! * \struct dvbpsi_parental_rating_s * \brief one subtitle structure. * * This structure is used since parental_rating_descriptor will contain several * coutry/rating pairs. */ /*! * \typedef struct dvbpsi_parental_rating_s dvbpsi_parental_rating_t * \brief dvbpsi_parental_rating_t type definition. */ typedef struct dvbpsi_parental_rating_s { uint32_t i_country_code; uint8_t i_rating; } dvbpsi_parental_rating_t; /***************************************************************************** * dvbpsi_parental_rating_dr_t *****************************************************************************/ /*! * \struct dvbpsi_parental_rating_dr_s * \brief "parental_rating" descriptor structure. * * This structure is used to store a decoded "parental_rating" * descriptor. (ETSI EN 300 468 section 6.2.26). */ /*! * \typedef struct dvbpsi_parental_rating_dr_s dvbpsi_parental_rating_dr_t * \brief dvbpsi_parental_rating_dr_t type definition. */ typedef struct dvbpsi_parental_rating_dr_s { uint8_t i_ratings_number; dvbpsi_parental_rating_t p_parental_rating[64]; } dvbpsi_parental_rating_dr_t; /***************************************************************************** * dvbpsi_DecodeParentalRatingDataDr *****************************************************************************/ /*! * \fn dvbpsi_parental_rating_dr_t * dvbpsi_DecodeParentalRatingDr( dvbpsi_descriptor_t * p_descriptor) * \brief "parental_rating" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "parental_rating" descriptor structure * which contains the decoded data. */ dvbpsi_parental_rating_dr_t* dvbpsi_DecodeParentalRatingDr( dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenParentalRatingDataDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenParentalRatingDr( dvbpsi_parental_rating_dr_t * p_decoded, int b_duplicate) * \brief "parental_rating" descriptor generator. * \param p_decoded pointer to a decoded "parental_rating" descriptor * structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenParentalRatingDr( dvbpsi_parental_rating_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_56.h000066400000000000000000000102701217721213100200270ustar00rootroot00000000000000/***************************************************************************** * dr_56.h * (c)2004-2007 VideoLAN * $Id: dr_56.h 93 2004-10-19 19:17:49Z massiot $ * * Authors: Derk-Jan Hartman * * 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. * *****************************************************************************/ /*! * \file * \author Derk-Jan Hartman * \brief EBU Teletext descriptor parsing. * * DVB EBU Teletext descriptor parsing, according to ETSI EN 300 468 * section 6.2.41. * * NOTE: this descriptor is known by tag value 0x56 AND 0x46 */ #ifndef _DVBPSI_DR_56_H_ #define _DVBPSI_DR_56_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_teletext_t *****************************************************************************/ /*! * \struct dvbpsi_teletextpage_t * \brief one teletext page structure. * * This structure is used since teletext_descriptor will contain several * pages */ /*! * \typedef struct dvbpsi_teletextpage_s dvbpsi_teletextpage_t * \brief dvbpsi_teletextpage_t type definition. */ typedef struct dvbpsi_teletextpage_s { uint8_t i_iso6392_language_code[3]; /* 24 bits */ uint8_t i_teletext_type; /* 5 bits */ uint8_t i_teletext_magazine_number; /* 3 bits */ uint8_t i_teletext_page_number; /* 8 bits */ } dvbpsi_teletextpage_t; /***************************************************************************** * dvbpsi_teletext_dr_t *****************************************************************************/ /*! * \struct dvbpsi_teletext_dr_s * \brief "teletext" descriptor structure. * * This structure is used to store a decoded "teletext" * descriptor. (ETSI EN 300 468 section 6.2.41). */ /*! * \typedef struct dvbpsi_teletext_dr_s dvbpsi_teletext_dr_t * \brief dvbpsi_teletext_dr_t type definition. */ typedef struct dvbpsi_teletext_dr_s { uint8_t i_pages_number; dvbpsi_teletextpage_t p_pages[64]; } dvbpsi_teletext_dr_t; /***************************************************************************** * dvbpsi_DecodeTeletextDataDr *****************************************************************************/ /*! * \fn dvbpsi_teletext_dr_t * dvbpsi_DecodeTeletextDataDr( dvbpsi_descriptor_t * p_descriptor) * \brief "teletext" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "teletext" descriptor structure * which contains the decoded data. */ dvbpsi_teletext_dr_t* dvbpsi_DecodeTeletextDr( dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenTeletextDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenTeletextDr( dvbpsi_teletext_dr_t * p_decoded, int b_duplicate) * \brief "teletext" descriptor generator. * \param p_decoded pointer to a decoded "teletext" descriptor * structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenTeletextDr( dvbpsi_teletext_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_59.h000066400000000000000000000102061217721213100200310ustar00rootroot00000000000000/***************************************************************************** * dr_59.h * (c)2001-2002 VideoLAN * $Id: dr_59.h 93 2004-10-19 19:17:49Z massiot $ * * Authors: Arnaud de Bossoreille de Ribou * Tristan Leteurtre * * 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. * *****************************************************************************/ /*! * \file * \author Tristan Leteurtre * \brief DVB subtitling descriptor parsing. * * DVB subtitling descriptor parsing, according to ETSI EN 300 468 * section 6.2.36. */ #ifndef _DVBPSI_DR_59_H_ #define _DVBPSI_DR_59_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_subtitle_t *****************************************************************************/ /*! * \struct dvbpsi_subtitle_s * \brief one subtitle structure. * * This structure is used since subtitling_descriptor will contain several * subtitles */ /*! * \typedef struct dvbpsi_subtitle_s dvbpsi_subtitle_t * \brief dvbpsi_subtitle_t type definition. */ typedef struct dvbpsi_subtitle_s { uint8_t i_iso6392_language_code[3]; uint8_t i_subtitling_type; uint16_t i_composition_page_id; uint16_t i_ancillary_page_id; } dvbpsi_subtitle_t; /***************************************************************************** * dvbpsi_subtitling_dr_t *****************************************************************************/ /*! * \struct dvbpsi_subtitling_dr_s * \brief "subtitling" descriptor structure. * * This structure is used to store a decoded "subtitling" * descriptor. (ETSI EN 300 468 section 6.2.30). */ /*! * \typedef struct dvbpsi_subtitling_dr_s dvbpsi_subtitling_dr_t * \brief dvbpsi_subtitling_dr_t type definition. */ typedef struct dvbpsi_subtitling_dr_s { uint8_t i_subtitles_number; dvbpsi_subtitle_t p_subtitle[20]; } dvbpsi_subtitling_dr_t; /***************************************************************************** * dvbpsi_DecodeSubtitlingDataDr *****************************************************************************/ /*! * \fn dvbpsi_subtitling_dr_t * dvbpsi_DecodeSubtitlingDr( dvbpsi_descriptor_t * p_descriptor) * \brief "subtitling" descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "subtitling" descriptor structure * which contains the decoded data. */ dvbpsi_subtitling_dr_t* dvbpsi_DecodeSubtitlingDr( dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenSubtitlingDataDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenSubtitlingDr( dvbpsi_subtitling_dr_t * p_decoded, int b_duplicate) * \brief "subtitling" descriptor generator. * \param p_decoded pointer to a decoded "subtitling" descriptor * structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenSubtitlingDr( dvbpsi_subtitling_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/dr_5a.h000077500000000000000000000107221217721213100201070ustar00rootroot00000000000000/***************************************************************************** * dr_5a.h * (c)2001-2008 VideoLAN * $Id$ * * Authors: Johann Hanne * * 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. * *****************************************************************************/ /*! * \file * \author Johann Hanne * \brief Application interface for the DVB terrestrial delivery system * descriptor decoder and generator. * * Application interface for the DVB terrestrial delivery system descriptor * decoder and generator. This descriptor's definition can be found in * ETSI EN 300 468 section 6.2.13.4. */ #ifndef _DVBPSI_DR_5A_H_ #define _DVBPSI_DR_5A_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_terr_deliv_sys_dr_t *****************************************************************************/ /*! * \struct dvbpsi_terr_deliv_sys_dr_s * \brief terrestrial delivery system descriptor structure. * * This structure is used to store a decoded terrestrial delivery system * descriptor. (ETSI EN 300 468 section 6.2.13.4). */ /*! * \typedef struct dvbpsi_terr_deliv_sys_dr_s dvbpsi_terr_deliv_sys_dr_t * \brief dvbpsi_terr_deliv_sys_dr_t type definition. */ typedef struct dvbpsi_terr_deliv_sys_dr_s { uint32_t i_centre_frequency; /*!< centre frequency */ uint8_t i_bandwidth; /*!< bandwidth */ uint8_t i_priority; /*!< priority */ uint8_t i_time_slice_indicator; /*!< Time_Slicing_indicator */ uint8_t i_mpe_fec_indicator; /*!< MPE-FEC_indicator */ uint8_t i_constellation; /*!< constellation */ uint8_t i_hierarchy_information; /*!< hierarchy_information */ uint8_t i_code_rate_hp_stream; /*!< code_rate-HP_stream */ uint8_t i_code_rate_lp_stream; /*!< code_rate-LP_stream */ uint8_t i_guard_interval; /*!< guard_interval */ uint8_t i_transmission_mode; /*!< transmission_mode */ uint8_t i_other_frequency_flag; /*!< other_frequency_flag */ } dvbpsi_terr_deliv_sys_dr_t; /***************************************************************************** * dvbpsi_DecodeTerrDelivSysDr *****************************************************************************/ /*! * \fn dvbpsi_terr_deliv_sys_dr_t * dvbpsi_DecodeTerrDelivSysDr( dvbpsi_descriptor_t * p_descriptor) * \brief terrestrial delivery system descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new terrestrial delivery system descriptor structure * which contains the decoded data. */ dvbpsi_terr_deliv_sys_dr_t* dvbpsi_DecodeTerrDelivSysDr( dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenTerrDelivSysDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenTerrDelivSysDr( dvbpsi_terr_deliv_sys_dr_t * p_decoded, int b_duplicate) * \brief terrestrial delivery system descriptor generator. * \param p_decoded pointer to a decoded terrestrial delivery system descriptor * descriptor structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenTerrDelivSysDr( dvbpsi_terr_deliv_sys_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #else #error "Multiple inclusions of dr_5a.h" #endif dvbstreamer-2.1.0/include/dvbpsi/dr_62.h000066400000000000000000000053061217721213100200300ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dr_62.h Decode Frequency List Descriptor. */ #ifndef _DR_62_H #define _DR_62_H /***************************************************************************** * dvbpsi_frequency_list_dr_s *****************************************************************************/ /*! * \struct dvbpsi_frequency_list_dr_s * \brief Frequency List Descriptor * * This structure is used to store a decoded Frequency List descriptor. */ /*! * \typedef struct dvbpsi_frequency_list_dr_s dvbpsi_frequency_list_dr_t * \brief dvbpsi_frequency_list_dr_t type definition. */ typedef struct dvbpsi_frequency_list_dr_s { uint8_t i_coding_type; /*!< Coding type, 1 = Satellite, 2 = Cable, 3 = Terrestrial */ uint8_t i_number_of_frequencies; /*!< Number of center frequencies present */ uint32_t p_center_frequencies[63]; /*!< Center frequency as defined by a delivery_system_descriptor */ }dvbpsi_frequency_list_dr_t; /***************************************************************************** * dvbpsi_DecodeFrequencyListDr *****************************************************************************/ /*! * \fn dvbpsi_frequency_list_dr_t *dvbpsi_DecodeFrequencyListDr( * dvbpsi_descriptor_t *p_descriptor) * \brief Decode a Frequency List descriptor (tag 0x62) * \param p_descriptor Raw descriptor to decode. * \return NULL if the descriptor could not be decoded or a pointer to a * dvbpsi_frequency_list_dr_t structure. */ dvbpsi_frequency_list_dr_t *dvbpsi_DecodeFrequencyListDr(dvbpsi_descriptor_t *p_descriptor); /***************************************************************************** * dvbpsi_Bcd8ToUint32 *****************************************************************************/ /*! * \fn uint32_t dvbpsi_Bcd8ToUint32(uint32_t bcd) * \brief Decode an 8 character BCD encoded number into a uint32_t. * \param bcd BCD value to convert. * \return Decoded value as a uint32_t. */ uint32_t dvbpsi_Bcd8ToUint32(uint32_t bcd); #endif dvbstreamer-2.1.0/include/dvbpsi/dr_66.h000066400000000000000000000042331217721213100200320ustar00rootroot00000000000000/* Copyright (C) 2010 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dr_66.h Decode Data Broadcast id Descriptor. */ #ifndef _DR_66_H #define _DR_66_H /***************************************************************************** * dvbpsi_data_broadcast_id_dr_s *****************************************************************************/ /*! * \struct dvbpsi_data_broadcast_id_dr_s * \brief Data Broadcast id Descriptor * * This structure is used to store a decoded Data Broadcast id descriptor. */ /*! * \typedef struct dvbpsi_data_broadcast_id_dr_s dvbpsi_data_broadcast_id_dr_t * \brief dvbpsi_data_broadcast_id_dr_t type definition. */ typedef struct dvbpsi_data_broadcast_id_dr_s { uint16_t i_data_broadcast_id; uint8_t i_id_selector_len; uint8_t s_id_selector[0]; }dvbpsi_data_broadcast_id_dr_t; /***************************************************************************** * dvbpsi_DecodeDataBroadcastIdDr *****************************************************************************/ /*! * \fn dvbpsi_data_broadcast_id_dr_t *dvbpsi_DecodeDataBroadcastIdDr( * dvbpsi_descriptor_t *p_descriptor) * \brief Decode a Data broadcast id descriptor (tag 0x66) * \param p_descriptor Raw descriptor to decode. * \return NULL if the descriptor could not be decoded or a pointer to a * dvbpsi_data_broadcast_id_dr_t structure. */ dvbpsi_data_broadcast_id_dr_t *dvbpsi_DecodeDataBroadcastIdDr(dvbpsi_descriptor_t *p_descriptor); #endif dvbstreamer-2.1.0/include/dvbpsi/dr_69.h000077500000000000000000000065261217721213100200470ustar00rootroot00000000000000/***************************************************************************** * dr_69.h * (c)2007 VideoLAN * $Id: dr_69.h 153 2007-10-12 21:05:05Z jpsaman $ * * Authors: Pinkava Jiri * * 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. * *****************************************************************************/ /*! * \file * \author Jiri Pinkava * \brief Application interface for the PDC (Programme Delivery Control) * descriptor decoder and generator. * * Application interface for the MPEG 2 TS PDC descriptor decoder and generator * This descriptor's definition can be found in ETSC EN 300 231 */ #ifndef _DVBPSI_DR_69_H_ #define _DVBPSI_DR_69_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_PDC_dr_t *****************************************************************************/ /*! * \struct dvbpsi_PDC_dr_s * \brief PDC descriptor structure. * * This structure is used to store a decoded PDC descriptor. * (ETSI EN 300 231). */ /*! * \typedef struct dvbpsi_PDC_dr_s dvbpsi_PDC_dr_t * \brief dvbpsi_PDC_dr_t type definition. */ typedef struct dvbpsi_PDC_dr_s { /* pdc[0] ~= day; PDC[1] ~= month; PDC[2] ~= hour; PDC[3] ~= min; */ uint8_t i_PDC[4]; /*!< PDC */ } dvbpsi_PDC_dr_t; /***************************************************************************** * dvbpsi_DecodePDCDr *****************************************************************************/ /*! * \fn dvbpsi_PDC_dr_t * dvbpsi_DecodePDCDr( dvbpsi_descriptor_t * p_descriptor) * \brief PDC descriptor decoder. * \param p_descriptor pointer to the descriptor structure * \return a pointer to a new "video stream" descriptor structure which * contains the decoded data. */ dvbpsi_PDC_dr_t* dvbpsi_DecodePDCDr(dvbpsi_descriptor_t * p_descriptor); /***************************************************************************** * dvbpsi_GenPDCDr *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t * dvbpsi_GenVStreamDr( dvbpsi_PDC_dr_t * p_decoded, int b_duplicate) * \brief PDC descriptor generator. * \param p_decoded pointer to a decoded PDC descriptor structure * \param b_duplicate if non zero then duplicate the p_decoded structure into * the descriptor * \return a pointer to a new descriptor structure which contains encoded data. */ dvbpsi_descriptor_t * dvbpsi_GenPDCDr(dvbpsi_PDC_dr_t * p_decoded, int b_duplicate); #ifdef __cplusplus }; #endif #else #error "Multiple inclusions of dr_69.h" #endif dvbstreamer-2.1.0/include/dvbpsi/dr_73.h000077500000000000000000000040221217721213100200270ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dr_73.h Decode Default Authority Descriptor. */ #ifndef _DR_73_H #define _DR_73_H /***************************************************************************** * dvbpsi_content_id_dr_s *****************************************************************************/ /*! * \struct dvbpsi_default_authority_dr_s * \brief Default Authority Descriptor * * This structure is used to store a decoded Default Authority descriptor. */ /*! * \typedef struct dvbpsi_default_authority_dr_s dvbpsi_default_authority_dr_t * \brief dvbpsi_default_authority_dr_t type definition. */ typedef struct dvbpsi_default_authority_dr_s { uint8_t authority[255]; }dvbpsi_default_authority_dr_t; /***************************************************************************** * dvbpsi_DecodeLCNDr *****************************************************************************/ /*! * \fn dvbpsi_default_authority_dr_t *dvbpsi_DecodeDefaultAuthorityDr(dvbpsi_descriptor_t *p_descriptor) * \brief Decode a Default Authority descriptor (tag 0x73) * \param p_descriptor Raw descriptor to decode. * \return NULL if the descriptor could not be decoded or a pointer to a * dvbpsi_default_authority_dr_t structure. */ dvbpsi_default_authority_dr_t *dvbpsi_DecodeDefaultAuthorityDr(dvbpsi_descriptor_t *p_descriptor); #endif dvbstreamer-2.1.0/include/dvbpsi/dr_76.h000077500000000000000000000056031217721213100200400ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dr_76.h Decode Content Identifier Descriptor. */ #ifndef _DR_76_H #define _DR_76_H #define CRID_TYPE_UNDEFINED 0 #define CRID_TYPE_CONTENT 1 #define CRID_TYPE_SERIES 2 #define CRID_TYPE_RECOMMENDATION 3 #define CRID_LOCATION_DESCRIPTOR 0 #define CRID_LOCATION_CIT 1 /***************************************************************************** * dvbpsi_lcn_entry_t *****************************************************************************/ /*! * \struct dvbpsi_crid_entry_s * \brief CRID Entry * * This structure is used to store a decoded CRID entry. */ /*! * \typedef struct dvbpsi_crid_entry_s dvbpsi_crid_entry_t * \brief dvbpsi_crid_entry_t type definition. */ typedef struct dvbpsi_crid_entry_s { uint8_t i_type; uint8_t i_location; union { uint8_t path[253]; uint16_t ref; }value; }dvbpsi_crid_entry_t; /***************************************************************************** * dvbpsi_content_id_dr_s *****************************************************************************/ /*! * \struct dvbpsi_content_id_dr_s * \brief Content Identifier Descriptor * * This structure is used to store a decoded Content Identifier descriptor. */ /*! * \typedef struct dvbpsi_content_id_dr_s dvbpsi_content_id_dr_t * \brief dvbpsi_content_id_dr_t type definition. */ typedef struct dvbpsi_content_id_dr_s { uint8_t i_number_of_entries; /*!< Number of CRID entries present. */ dvbpsi_crid_entry_t p_entries[85];/*!< Array of CRID entries. */ }dvbpsi_content_id_dr_t; /***************************************************************************** * dvbpsi_DecodeLCNDr *****************************************************************************/ /*! * \fn dvbpsi_content_id_dr_s dvbpsi_DecodeContentIdDr(dvbpsi_descriptor_t *p_descriptor) * \brief Decode a Content Identifier descriptor (tag 0x76) * \param p_descriptor Raw descriptor to decode. * \return NULL if the descriptor could not be decoded or a pointer to a * dvbpsi_content_id_dr_t structure. */ dvbpsi_content_id_dr_t *dvbpsi_DecodeContentIdDr(dvbpsi_descriptor_t *p_descriptor); #endif dvbstreamer-2.1.0/include/dvbpsi/dr_83.h000077500000000000000000000053651217721213100200430ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dr_83.h Decode Logical Channel Number Descriptor. */ #ifndef _DR_83_H #define _DR_83_H /***************************************************************************** * dvbpsi_lcn_entry_t *****************************************************************************/ /*! * \struct dvbpsi_lcn_entry_s * \brief Logical Channel Number Entry * * This structure is used to store a decoded Logical Channel Number entry. */ /*! * \typedef struct dvbpsi_lcn_entry_s dvbpsi_lcn_entry_t * \brief dvbpsi_lcn_entry_t type definition. */ typedef struct dvbpsi_lcn_entry_s { uint16_t i_service_id; /*!< Service ID this logical channel number refers to */ int b_visible_service_flag; /*!< Whether this LCN should be visible to the user. */ uint16_t i_logical_channel_number; /*! * * 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. * *****************************************************************************/ /*! * \file * \author Arnaud de Bossoreille de Ribou * \brief Application interface for all DVB/PSI decoders. * * Application interface for all DVB/PSI decoders. The generic decoder * structure is public so that external decoders are allowed. */ #ifndef _DVBPSI_DVBPSI_H_ #define _DVBPSI_DVBPSI_H_ #define DVBPSI_VERSION 0.1.6 #define DVBPSI_VERSION_INT ((0<<16)+(1<<8)+6) #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_handle *****************************************************************************/ /*! * \typedef struct dvbpsi_decoder_s * dvbpsi_handle * \brief Decoder abstration. */ typedef struct dvbpsi_decoder_s * dvbpsi_handle; /***************************************************************************** * dvbpsi_PushPacket *****************************************************************************/ /*! * \fn void dvbpsi_PushPacket(dvbpsi_handle h_dvbpsi, uint8_t* p_data) * \brief Injection of a TS packet into a PSI decoder. * \param h_dvbpsi handle to the decoder * \param p_data pointer to a 188 bytes playload of a TS packet * \return nothing. * * Injection of a TS packet into a PSI decoder. */ void dvbpsi_PushPacket(dvbpsi_handle h_dvbpsi, uint8_t* p_data); /***************************************************************************** * The following definitions are just here to allow external decoders but * shouldn't be used for any other purpose. *****************************************************************************/ /*! * \typedef struct dvbpsi_psi_section_s dvbpsi_psi_section_t * \brief dvbpsi_psi_section_t type definition. */ typedef struct dvbpsi_psi_section_s dvbpsi_psi_section_t; /***************************************************************************** * dvbpsi_callback *****************************************************************************/ /*! * \typedef void (* dvbpsi_callback)(dvbpsi_handle p_decoder, dvbpsi_psi_section_t* p_section) * \brief Callback type definition. */ typedef void (* dvbpsi_callback)(dvbpsi_handle p_decoder, dvbpsi_psi_section_t* p_section); /***************************************************************************** * dvbpsi_decoder_t *****************************************************************************/ /*! * \struct dvbpsi_decoder_s * \brief PSI decoder structure. * * This structure shouldn't be used but if you want to write an external * decoder. */ /*! * \typedef struct dvbpsi_decoder_s dvbpsi_decoder_t * \brief dvbpsi_decoder_t type definition. */ typedef struct dvbpsi_decoder_s { dvbpsi_callback pf_callback; /*!< PSI decoder's callback */ void * p_private_decoder; /*!< specific decoder */ int i_section_max_size; /*!< Max size of a section for this decoder */ uint8_t i_continuity_counter; /*!< Continuity counter */ int b_discontinuity; /*!< Discontinuity flag */ dvbpsi_psi_section_t * p_free_sections; /*!< Available sections */ dvbpsi_psi_section_t * p_current_section; /*!< Current section */ int i_need; /*!< Bytes needed */ int b_complete_header; /*!< Flag for header completion */ } dvbpsi_decoder_t; #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/eit.h000066400000000000000000000240251217721213100176740ustar00rootroot00000000000000/***************************************************************************** * eit.h * (c)2004 VideoLAN * $Id: eit.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Christophe Massiot * * 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. * *****************************************************************************/ /*! * \file * \author Christophe Massiot * \brief Application interface for the EIT decoder and the EIT generator. * * Application interface for the EIT decoder and the EIT generator. New * decoded EIT are sent by callback to the application. If a table * wasn't active (b_current_next == 0) and the next is the same but active * (b_current_next == 1) then the event information list is empty and should * be caught from the previous structure. */ #ifndef _DVBPSI_EIT_H_ #define _DVBPSI_EIT_H_ #ifdef __cplusplus extern "C" { #endif #define PID_EIT 0x12 #define TABLE_ID_PF_ACTUAL 0x4e #define TABLE_ID_PF_OTHER 0x4f /***************************************************************************** * dvbpsi_eit_event_duration_t *****************************************************************************/ typedef struct dvbpsi_eit_event_duration_s { unsigned int i_hours; unsigned int i_minutes; unsigned int i_seconds; }dvbpsi_eit_event_duration_t; /***************************************************************************** * dvbpsi_eit_event_t *****************************************************************************/ /*! * \struct dvbpsi_eit_event_s * \brief EIT service description structure. * * This structure is used to store a decoded EIT event description. * (ETSI EN 300 468 V1.5.1 section 5.2.4). */ /*! * \typedef struct dvbpsi_eit_service_s dvbpsi_eit_event_t * \brief dvbpsi_eit_event_t type definition. */ typedef struct dvbpsi_eit_event_s { uint16_t i_event_id; /*!< event_id */ struct tm t_start_time; /*!< start_time */ uint32_t i_duration; /*!< duration */ uint8_t i_running_status; /*!< Running status */ int b_free_ca; /*!< Free CA mode flag */ uint16_t i_descriptors_length; /*!< Descriptors loop length */ dvbpsi_descriptor_t * p_first_descriptor; /*!< First of the following DVB descriptors */ struct dvbpsi_eit_event_s * p_next; /*!< next element of the list */ } dvbpsi_eit_event_t; /***************************************************************************** * dvbpsi_eit_t *****************************************************************************/ /*! * \struct dvbpsi_eit_s * \brief EIT structure. * * This structure is used to store a decoded EIT. * (ETSI EN 300 468 V1.5.1 section 5.2.4). */ /*! * \typedef struct dvbpsi_eit_s dvbpsi_eit_t * \brief dvbpsi_eit_t type definition. */ typedef struct dvbpsi_eit_s { uint16_t i_service_id; /*!< service_id */ uint8_t i_version; /*!< version_number */ int b_current_next; /*!< current_next_indicator */ uint16_t i_ts_id; /*!< transport stream id */ uint16_t i_network_id; /*!< original network id */ uint8_t i_segment_last_section_number; /*!< segment last section number */ uint8_t i_last_table_id; /*!< last table id */ dvbpsi_eit_event_t * p_first_event; /*!< event information list */ } dvbpsi_eit_t; /***************************************************************************** * dvbpsi_eit_callback *****************************************************************************/ /*! * \typedef void (* dvbpsi_eit_callback)(void* p_cb_data, dvbpsi_eit_t* p_new_eit) * \brief Callback type definition. */ typedef void (* dvbpsi_eit_callback)(void* p_cb_data, dvbpsi_eit_t* p_new_eit); /***************************************************************************** * dvbpsi_AttachEIT *****************************************************************************/ /*! * \fn void dvbpsi_AttachEIT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_t i_extension, dvbpsi_eit_callback pf_callback, void* p_cb_data) * \brief Creation and initialization of a EIT decoder. * \param p_demux Subtable demultiplexor to which the decoder is attached. * \param i_table_id Table ID, 0x4E, 0x4F, or 0x50-0x6F. * \param i_extension Table ID extension, here service ID. * \param pf_callback function to call back on new EIT. * \param p_cb_data private data given in argument to the callback. * \return 0 if everything went ok. */ int dvbpsi_AttachEIT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, uint16_t i_extension, dvbpsi_eit_callback pf_callback, void* p_cb_data); /***************************************************************************** * dvbpsi_DetachEIT *****************************************************************************/ /*! * \fn void dvbpsi_DetachEIT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_t i_extension) * \brief Destroy a EIT decoder. * \param p_demux Subtable demultiplexor to which the decoder is attached. * \param i_table_id Table ID, 0x4E, 0x4F, or 0x50-0x6F. * \param i_extension Table ID extension, here service ID. * \return nothing. */ void dvbpsi_DetachEIT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_t i_extension); /***************************************************************************** * dvbpsi_InitEIT/dvbpsi_NewEIT *****************************************************************************/ /*! * \fn void dvbpsi_InitEIT(dvbpsi_eit_t* p_eit, uint16_t i_service_id, uint8_t i_version, int b_current_next, uint16_t i_ts_id, uint16_t i_network_id, uint8_t i_segment_last_section_number, uint8_t i_last_table_id) * \brief Initialize a user-allocated dvbpsi_eit_t structure. * \param p_eit pointer to the EIT structure * \param i_service_id service ID * \param i_version EIT version * \param b_current_next current next indicator * \param i_ts_id transport stream ID * \param i_network_id original network id * \param i_segment_last_section_number segment_last_section_number * \param i_last_table_id i_last_table_id * \return nothing. */ void dvbpsi_InitEIT(dvbpsi_eit_t* p_eit, uint16_t i_service_id, uint8_t i_version, int b_current_next, uint16_t i_ts_id, uint16_t i_network_id, uint8_t i_segment_last_section_number, uint8_t i_last_table_id); /*! * \def dvbpsi_NewEIT(p_eit, i_ts_id, i_version, b_current_next, i_network_id) * \brief Allocate and initialize a new dvbpsi_eit_t structure. Use ObjectRefDec to release delete it. * \param p_eit pointer to the EIT structure * \param i_ts_id transport stream ID * \param i_version EIT version * \param b_current_next current next indicator * \param i_network_id original network id * \return nothing. */ #define dvbpsi_NewEIT(p_eit, i_service_id, i_version, b_current_next, i_ts_id, i_network_id, i_segment_last_section_number, i_last_table_id) \ do { \ ObjectRegisterTypeDestructor(dvbpsi_eit_t, (ObjectDestructor_t)dvbpsi_EmptyEIT); \ p_eit = (dvbpsi_eit_t*)ObjectCreateType(dvbpsi_eit_t); \ if(p_eit != NULL) \ dvbpsi_InitEIT(p_eit, i_service_id, i_version, b_current_next, i_ts_id, i_network_id, i_segment_last_section_number, i_last_table_id); \ } while(0); /***************************************************************************** * dvbpsi_EmptyEIT *****************************************************************************/ /*! * \fn void dvbpsi_EmptyEIT(dvbpsi_eit_t* p_eit) * \brief Clean a dvbpsi_eit_t structure. * \param p_eit pointer to the EIT structure * \return nothing. */ void dvbpsi_EmptyEIT(dvbpsi_eit_t* p_eit); /***************************************************************************** * dvbpsi_EITAddEvent *****************************************************************************/ /*! * \fn dvbpsi_eit_event_t* dvbpsi_EITAddEvent(dvbpsi_eit_t* p_eit, * uint16_t i_event_id, * dvbpsi_date_time_t t_start_time, * dvbpsi_eit_event_duration_t t_duration, * uint8_t i_running_status, * int b_free_ca) * \brief Add a service description at the end of the EIT. * \param p_eit pointer to the EIT structure * \param i_event_id Event ID * \param t_start_time Start Time * \param t_duration Duration * \param i_running_status Running status * \param b_free_ca Free CA flag * \return a pointer to the added service description. */ dvbpsi_eit_event_t* dvbpsi_EITAddEvent(dvbpsi_eit_t* p_eit, uint16_t i_event_id, struct tm *p_start_time, uint32_t i_duration, uint8_t i_running_status, int b_free_ca); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/nit.h000066400000000000000000000154401217721213100177060ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA nitdecoder.h Decode Network Information Tables. */ #ifndef _NIT_H #define _NIT_H #define PID_NIT 0x0010 #define TABLE_ID_NIT_ACTUAL 0x40 #define TABLE_ID_NIT_OTHER 0x41 /***************************************************************************** * dvbpsi_nit_service_t *****************************************************************************/ /*! * \struct dvbpsi_nit_service_s * \brief NIT service description structure. * * This structure is used to store a decoded NIT service description. * (ETSI EN 300 468 V1.4.1 section 5.2.3). */ /*! * \typedef struct dvbpsi_nit_transport_s dvbpsi_nit_transport_t * \brief dvbpsi_nit_transport_t type definition. */ typedef struct dvbpsi_nit_transport_s { uint16_t i_ts_id; /*!< transport_stream_id */ uint16_t i_original_network_id; /*!< original_network_id */ dvbpsi_descriptor_t * p_first_descriptor; /*!< First of the following DVB descriptors */ struct dvbpsi_nit_transport_s * p_next; /*!< next element of the list */ } dvbpsi_nit_transport_t; /***************************************************************************** * dvbpsi_nit_t *****************************************************************************/ /*! * \struct dvbpsi_nit_s * \brief NIT structure. * * This structure is used to store a decoded NIT. * (ETSI EN 300 468 V1.4.1 section 5.2.1). */ /*! * \typedef struct dvbpsi_nit_s dvbpsi_nit_t * \brief dvbpsi_nit_t type definition. */ typedef struct dvbpsi_nit_s { int b_actual; /*!< TRUE if NIT(Actual) or FALSE if NIT(Other)*/ uint16_t i_network_id; /*!< network_id */ uint8_t i_version; /*!< version_number */ int b_current_next; /*!< current_next_indicator */ dvbpsi_descriptor_t * p_first_descriptor; /*!< First of the following Network descriptors */ dvbpsi_nit_transport_t * p_first_transport; /*!< First of the following transports */ } dvbpsi_nit_t; /***************************************************************************** * dvbpsi_nit_callback *****************************************************************************/ /*! * \typedef void (* dvbpsi_nit_callback)(void* p_cb_data, dvbpsi_nit_t* p_new_nit) * \brief Callback type definition. */ typedef void (* dvbpsi_nit_callback)(void* p_cb_data, dvbpsi_nit_t* p_new_nit); /***************************************************************************** * dvbpsi_AttachNIT *****************************************************************************/ /*! * \fn void dvbpsi_AttachNIT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_t i_extension, dvbpsi_nit_callback pf_callback, void* p_cb_data) * \brief Creation and initialization of a NIT decoder. * \param p_demux Subtable demultiplexor to which the decoder is attached. * \param i_table_id Table ID, 0x40 or 0x41. * \param i_extension Table ID extension, here Network ID. * \param pf_callback function to call back on new NIT. * \param p_cb_data private data given in argument to the callback. * \return 0 if everything went ok. */ int dvbpsi_AttachNIT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, uint16_t i_extension, dvbpsi_nit_callback pf_callback, void* p_cb_data); /***************************************************************************** * dvbpsi_DetachNIT *****************************************************************************/ /*! * \fn void dvbpsi_DetachNIT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_t i_extension) * \brief Destroy a NIT decoder. * \param p_demux Subtable demultiplexor to which the decoder is attached. * \param i_table_id Table ID, 0x42 or 0x46. * \param i_extension Table ID extension, here TS ID. * \return nothing. */ void dvbpsi_DetachNIT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_t i_extension); /***************************************************************************** * dvbpsi_InitNIT/dvbpsi_NewNIT *****************************************************************************/ /*! * \fn void dvbpsi_InitNIT(dvbpsi_nit_t* p_nit, uint16_t i_network_id, uint8_t i_version, int b_current_next) * \brief Initialize a user-allocated dvbpsi_nit_t structure. * \param p_nit pointer to the NIT structure * \param b_actual True if this is the NIT(actual), false if NIT(other) * \param i_network_id network id * \param i_version NIT version * \param b_current_next current next indicator * \return nothing. */ void dvbpsi_InitNIT(dvbpsi_nit_t *p_nit, int b_actual, uint16_t i_network_id, uint8_t i_version, int b_current_next); /*! * \def dvbpsi_NewNIT(p_nit, i_network_id, i_version, b_current_next) * \brief Allocate and initialize a new dvbpsi_nit_t structure. Use ObjectRefDec to release delete it. * \param p_nit pointer to the NIT structure * \param i_network_id network id * \param i_version NIT version * \param b_current_next current next indicator * \return nothing. */ #define dvbpsi_NewNIT(p_nit, b_actual, i_network_id, i_version, b_current_next) \ do { \ ObjectRegisterTypeDestructor(dvbpsi_nit_t, (ObjectDestructor_t)dvbpsi_EmptyNIT); \ p_nit = (dvbpsi_nit_t*)ObjectCreateType(dvbpsi_nit_t); \ if(p_nit != NULL) \ dvbpsi_InitNIT(p_nit, b_actual, i_network_id, i_version, b_current_next); \ } while(0); /***************************************************************************** * dvbpsi_EmptyNIT *****************************************************************************/ /*! * \fn void dvbpsi_EmptyNIT(dvbpsi_nit_t* p_nit) * \brief Clean a dvbpsi_nit_t structure. * \param p_nit pointer to the NIT structure * \return nothing. */ void dvbpsi_EmptyNIT(dvbpsi_nit_t *p_nit); #endif dvbstreamer-2.1.0/include/dvbpsi/pat.h000066400000000000000000000177561217721213100177140ustar00rootroot00000000000000/***************************************************************************** * pat.h * (c)2001-2002 VideoLAN * $Id: pat.h 103 2005-01-21 14:34:51Z massiot $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ /*! * \file * \author Arnaud de Bossoreille de Ribou * \brief Application interface for the PAT decoder and the PAT generator. * * Application interface for the PAT decoder and the PAT generator. New * decoded PAT tables are sent by callback to the application. If a table * wasn't active (b_current_next == 0) and the next is the same but active * (b_current_next == 1) then the program list is empty and should be * caught from the previous structure. */ #ifndef _DVBPSI_PAT_H_ #define _DVBPSI_PAT_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_pat_program_t *****************************************************************************/ /*! * \struct dvbpsi_pat_program_s * \brief PAT program structure. * * This structure is used to store a decoded PAT program. * (ISO/IEC 13818-1 section 2.4.4.3). */ /*! * \typedef struct dvbpsi_pat_program_s dvbpsi_pat_program_t * \brief dvbpsi_pat_program_t type definition. */ typedef struct dvbpsi_pat_program_s { uint16_t i_number; /*!< program_number */ uint16_t i_pid; /*!< PID of NIT/PMT */ struct dvbpsi_pat_program_s * p_next; /*!< next element of the list */ } dvbpsi_pat_program_t; /***************************************************************************** * dvbpsi_pat_t *****************************************************************************/ /*! * \struct dvbpsi_pat_s * \brief PAT structure. * * This structure is used to store a decoded PAT. * (ISO/IEC 13818-1 section 2.4.4.3). */ /*! * \typedef struct dvbpsi_pat_s dvbpsi_pat_t * \brief dvbpsi_pat_t type definition. */ typedef struct dvbpsi_pat_s { uint16_t i_ts_id; /*!< transport_stream_id */ uint8_t i_version; /*!< version_number */ int b_current_next; /*!< current_next_indicator */ dvbpsi_pat_program_t * p_first_program; /*!< program list */ } dvbpsi_pat_t; /***************************************************************************** * dvbpsi_pat_callback *****************************************************************************/ /*! * \typedef void (* dvbpsi_pat_callback)(void* p_cb_data, dvbpsi_pat_t* p_new_pat) * \brief Callback type definition. */ typedef void (* dvbpsi_pat_callback)(void* p_cb_data, dvbpsi_pat_t* p_new_pat); /***************************************************************************** * dvbpsi_AttachPAT *****************************************************************************/ /*! * \fn dvbpsi_handle dvbpsi_AttachPAT(dvbpsi_pat_callback pf_callback, void* p_cb_data) * \brief Creation and initialization of a PAT decoder. * \param pf_callback function to call back on new PAT * \param p_cb_data private data given in argument to the callback * \return a pointer to the decoder for future calls. */ dvbpsi_handle dvbpsi_AttachPAT(dvbpsi_pat_callback pf_callback, void* p_cb_data); /***************************************************************************** * dvbpsi_DetachPAT *****************************************************************************/ /*! * \fn void dvbpsi_DetachPAT(dvbpsi_handle h_dvbpsi) * \brief Destroy a PAT decoder. * \param h_dvbpsi handle to the decoder * \return nothing. * * The handle isn't valid any more. */ void dvbpsi_DetachPAT(dvbpsi_handle h_dvbpsi); /***************************************************************************** * dvbpsi_InitPAT/dvbpsi_NewPAT *****************************************************************************/ /*! * \fn void dvbpsi_InitPAT(dvbpsi_pat_t* p_pat, uint16_t i_ts_id, uint8_t i_version, int b_current_next) * \brief Initialize a user-allocated dvbpsi_pat_t structure. * \param p_pat pointer to the PAT structure * \param i_ts_id transport stream ID * \param i_version PAT version * \param b_current_next current next indicator * \return nothing. */ void dvbpsi_InitPAT(dvbpsi_pat_t* p_pat, uint16_t i_ts_id, uint8_t i_version, int b_current_next); /*! * \def dvbpsi_NewPAT(p_pat, i_ts_id, i_version, b_current_next) * \brief Allocate and initialize a new dvbpsi_pat_t structure. Use ObjectRefDec to release delete it. * \param p_pat pointer to the PAT structure * \param i_ts_id transport stream ID * \param i_version PAT version * \param b_current_next current next indicator * \return nothing. */ #define dvbpsi_NewPAT(p_pat, i_ts_id, i_version, b_current_next) \ do { \ ObjectRegisterTypeDestructor(dvbpsi_pat_t, (ObjectDestructor_t)dvbpsi_EmptyPAT); \ p_pat = (dvbpsi_pat_t*)ObjectCreateType(dvbpsi_pat_t); \ if(p_pat != NULL) \ dvbpsi_InitPAT(p_pat, i_ts_id, i_version, b_current_next); \ } while(0); /***************************************************************************** * dvbpsi_EmptyPAT *****************************************************************************/ /*! * \fn void dvbpsi_EmptyPAT(dvbpsi_pat_t* p_pat) * \brief Clean a dvbpsi_pat_t structure. * \param p_pat pointer to the PAT structure * \return nothing. */ void dvbpsi_EmptyPAT(dvbpsi_pat_t* p_pat); /***************************************************************************** * dvbpsi_PATAddProgram *****************************************************************************/ /*! * \fn dvbpsi_pat_program_t* dvbpsi_PATAddProgram(dvbpsi_pat_t* p_pat, uint16_t i_number, uint16_t i_pid) * \brief Add a program at the end of the PAT. * \param p_pat pointer to the PAT structure * \param i_number program number * \param i_pid PID of the NIT/PMT * \return a pointer to the added program. */ dvbpsi_pat_program_t* dvbpsi_PATAddProgram(dvbpsi_pat_t* p_pat, uint16_t i_number, uint16_t i_pid); /***************************************************************************** * dvbpsi_GenPATSections *****************************************************************************/ /*! * \fn dvbpsi_psi_section_t* dvbpsi_GenPATSections(dvbpsi_pat_t* p_pat, int i_max_pps); * \brief PAT generator. * \param p_pat pointer to the PAT structure * \param i_max_pps limitation of the number of program in each section * (max: 253). * \return a pointer to the list of generated PSI sections. * * Generate PAT sections based on the dvbpsi_pat_t structure. */ dvbpsi_psi_section_t* dvbpsi_GenPATSections(dvbpsi_pat_t* p_pat, int i_max_pps); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/pmt.h000066400000000000000000000241501217721213100177120ustar00rootroot00000000000000/***************************************************************************** * pmt.h * (c)2001-2002 VideoLAN * $Id: pmt.h 103 2005-01-21 14:34:51Z massiot $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ /*! * \file * \author Arnaud de Bossoreille de Ribou * \brief Application interface for the PMT decoder and the PMT generator. * * Application interface for the PMT decoder and the PMT generator. New * decoded PMT tables are sent by callback to the application. If a table * wasn't active (b_current_next == 0) and the next is the same but active * (b_current_next == 1) then the two lists are empty and should be * caught from the previous structure. */ #ifndef _DVBPSI_PMT_H_ #define _DVBPSI_PMT_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_pmt_es_t *****************************************************************************/ /*! * \struct dvbpsi_pmt_es_s * \brief PMT ES structure. * * This structure is used to store a decoded ES description. * (ISO/IEC 13818-1 section 2.4.4.8). */ /*! * \typedef struct dvbpsi_pmt_es_s dvbpsi_pmt_es_t * \brief dvbpsi_pmt_es_t type definition. */ typedef struct dvbpsi_pmt_es_s { uint8_t i_type; /*!< stream_type */ uint16_t i_pid; /*!< elementary_PID */ dvbpsi_descriptor_t * p_first_descriptor; /*!< descriptor list */ struct dvbpsi_pmt_es_s * p_next; /*!< next element of the list */ } dvbpsi_pmt_es_t; /***************************************************************************** * dvbpsi_pmt_t *****************************************************************************/ /*! * \struct dvbpsi_pmt_s * \brief PMT structure. * * This structure is used to store a decoded PMT. * (ISO/IEC 13818-1 section 2.4.4.8). */ /*! * \typedef struct dvbpsi_pmt_s dvbpsi_pmt_t * \brief dvbpsi_pmt_t type definition. */ typedef struct dvbpsi_pmt_s { uint16_t i_program_number; /*!< program_number */ uint8_t i_version; /*!< version_number */ int b_current_next; /*!< current_next_indicator */ uint16_t i_pcr_pid; /*!< PCR_PID */ dvbpsi_descriptor_t * p_first_descriptor; /*!< descriptor list */ dvbpsi_pmt_es_t * p_first_es; /*!< ES list */ } dvbpsi_pmt_t; /***************************************************************************** * dvbpsi_pmt_callback *****************************************************************************/ /*! * \typedef void (* dvbpsi_pmt_callback)(void* p_cb_data, dvbpsi_pmt_t* p_new_pmt) * \brief Callback type definition. */ typedef void (* dvbpsi_pmt_callback)(void* p_cb_data, dvbpsi_pmt_t* p_new_pmt); /***************************************************************************** * dvbpsi_AttachPMT *****************************************************************************/ /*! * \fn dvbpsi_handle dvbpsi_AttachPMT(uint16_t i_program_number, dvbpsi_pmt_callback pf_callback, void* p_cb_data) * \brief Creation and initialization of a PMT decoder. * \param i_program_number program number * \param pf_callback function to call back on new PMT * \param p_cb_data private data given in argument to the callback * \return a pointer to the decoder for future calls. */ dvbpsi_handle dvbpsi_AttachPMT(uint16_t i_program_number, dvbpsi_pmt_callback pf_callback, void* p_cb_data); /***************************************************************************** * dvbpsi_DetachPMT *****************************************************************************/ /*! * \fn void dvbpsi_DetachPMT(dvbpsi_handle h_dvbpsi) * \brief Destroy a PMT decoder. * \param h_dvbpsi handle to the decoder * \return nothing. * * The handle isn't valid any more. */ void dvbpsi_DetachPMT(dvbpsi_handle h_dvbpsi); /***************************************************************************** * dvbpsi_InitPMT/dvbpsi_NewPMT *****************************************************************************/ /*! * \fn void dvbpsi_InitPMT(dvbpsi_pmt_t* p_pmt, uint16_t i_program_number, uint8_t i_version, int b_current_next, uint16_t i_pcr_pid) * \brief Initialize a user-allocated dvbpsi_pmt_t structure. * \param p_pmt pointer to the PMT structure * \param i_program_number program number * \param i_version PMT version * \param b_current_next current next indicator * \param i_pcr_pid PCR_PID * \return nothing. */ void dvbpsi_InitPMT(dvbpsi_pmt_t* p_pmt, uint16_t i_program_number, uint8_t i_version, int b_current_next, uint16_t i_pcr_pid); /*! * \def dvbpsi_NewPMT(p_pmt, i_program_number, i_version, b_current_next, i_pcr_pid) * \brief Allocate and initialize a new dvbpsi_pmt_t structure. Use ObjectRefDec to release delete it. * \param p_pmt pointer to the PMT structure * \param i_program_number program number * \param i_version PMT version * \param b_current_next current next indicator * \param i_pcr_pid PCR_PID * \return nothing. */ #define dvbpsi_NewPMT(p_pmt, i_program_number, \ i_version, b_current_next, i_pcr_pid) \ do { \ ObjectRegisterTypeDestructor(dvbpsi_pmt_t, (ObjectDestructor_t)dvbpsi_EmptyPMT); \ p_pmt = (dvbpsi_pmt_t*)ObjectCreateType(dvbpsi_pmt_t); \ if(p_pmt != NULL) \ dvbpsi_InitPMT(p_pmt, i_program_number, i_version, b_current_next, \ i_pcr_pid); \ } while(0); /***************************************************************************** * dvbpsi_EmptyPMT *****************************************************************************/ /*! * \fn void dvbpsi_EmptyPMT(dvbpsi_pmt_t* p_pmt) * \brief Clean a dvbpsi_pmt_t structure. * \param p_pmt pointer to the PMT structure * \return nothing. */ void dvbpsi_EmptyPMT(dvbpsi_pmt_t* p_pmt); /***************************************************************************** * dvbpsi_PMTAddDescriptor *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t* dvbpsi_PMTAddDescriptor(dvbpsi_pmt_t* p_pmt, uint8_t i_tag, uint8_t i_length, uint8_t* p_data) * \brief Add a descriptor in the PMT. * \param p_pmt pointer to the PMT structure * \param i_tag descriptor's tag * \param i_length descriptor's length * \param p_data descriptor's data * \return a pointer to the added descriptor. */ dvbpsi_descriptor_t* dvbpsi_PMTAddDescriptor(dvbpsi_pmt_t* p_pmt, uint8_t i_tag, uint8_t i_length, uint8_t* p_data); /***************************************************************************** * dvbpsi_PMTAddES *****************************************************************************/ /*! * \fn dvbpsi_pmt_es_t* dvbpsi_PMTAddES(dvbpsi_pmt_t* p_pmt, uint8_t i_type, uint16_t i_pid) * \brief Add an ES in the PMT. * \param p_pmt pointer to the PMT structure * \param i_type type of ES * \param i_pid PID of the ES * \return a pointer to the added ES. */ dvbpsi_pmt_es_t* dvbpsi_PMTAddES(dvbpsi_pmt_t* p_pmt, uint8_t i_type, uint16_t i_pid); /***************************************************************************** * dvbpsi_PMTESAddDescriptor *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t* dvbpsi_PMTESAddDescriptor(dvbpsi_pmt_es_t* p_es, uint8_t i_tag, uint8_t i_length, uint8_t* p_data) * \brief Add a descriptor in the PMT ES. * \param p_es pointer to the ES structure * \param i_tag descriptor's tag * \param i_length descriptor's length * \param p_data descriptor's data * \return a pointer to the added descriptor. */ dvbpsi_descriptor_t* dvbpsi_PMTESAddDescriptor(dvbpsi_pmt_es_t* p_es, uint8_t i_tag, uint8_t i_length, uint8_t* p_data); /***************************************************************************** * dvbpsi_GenPMTSections *****************************************************************************/ /*! * \fn dvbpsi_psi_section_t* dvbpsi_GenPMTSections(dvbpsi_pmt_t* p_pmt) * \brief PMT generator * \param p_pmt PMT structure * \return a pointer to the list of generated PSI sections. * * Generate PMT sections based on the dvbpsi_pmt_t structure. */ dvbpsi_psi_section_t* dvbpsi_GenPMTSections(dvbpsi_pmt_t* p_pmt); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/psi.h000066400000000000000000000173011217721213100177050ustar00rootroot00000000000000/***************************************************************************** * psi.h * (c)2001-2002 VideoLAN * $Id: psi.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ /*! * \file * \author Arnaud de Bossoreille de Ribou * \brief Common PSI tools. * * PSI section structure and its Manipulation tools. */ #ifndef _DVBPSI_PSI_H_ #define _DVBPSI_PSI_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_psi_section_t *****************************************************************************/ /*! * \struct dvbpsi_psi_section_s * \brief PSI section structure. * * This structure is used to store a PSI section. The common information are * decoded (ISO/IEC 13818-1 section 2.4.4.10). * * dvbpsi_psi_section_s::p_data stores the complete section including the * header. * * When dvbpsi_psi_section_s::b_syntax_indicator == 0, * dvbpsi_psi_section_s::p_payload_start points immediately after the * section_length field and dvbpsi_psi_section_s::p_payload_end points * immediately after the end of the section (don't try to access this byte). * * When dvbpsi_psi_section_s::b_syntax_indicator != 0, * dvbpsi_psi_section_s::p_payload_start points immediately after the * last_section_number field and dvbpsi_psi_section_s::p_payload_end points to * the first byte of the CRC_32 field. * * When dvbpsi_psi_section_s::b_syntax_indicator == 0 * dvbpsi_psi_section_s::i_extension, dvbpsi_psi_section_s::i_version, * dvbpsi_psi_section_s::b_current_next, dvbpsi_psi_section_s::i_number, * dvbpsi_psi_section_s::i_last_number, and dvbpsi_psi_section_s::i_crc are * undefined. */ struct dvbpsi_psi_section_s { /* non-specific section data */ uint8_t i_table_id; /*!< table_id */ int b_syntax_indicator; /*!< section_syntax_indicator */ int b_private_indicator; /*!< private_indicator */ uint16_t i_length; /*!< section_length */ /* used if b_syntax_indicator is true */ uint16_t i_extension; /*!< table_id_extension */ /*!< transport_stream_id for a PAT section */ uint8_t i_version; /*!< version_number */ int b_current_next; /*!< current_next_indicator */ uint8_t i_number; /*!< section_number */ uint8_t i_last_number; /*!< last_section_number */ /* non-specific section data */ /* the content is table-specific */ uint8_t * p_data; /*!< complete section */ uint8_t * p_payload_start; /*!< payload start */ uint8_t * p_payload_end; /*!< payload end */ /* used if b_syntax_indicator is true */ uint32_t i_crc; /*!< CRC_32 */ /* for reusing this section */ uint32_t i_max_size; /*!< maximum size of p_data */ /* list handling */ struct dvbpsi_psi_section_s * p_next; /*!< next element of the list */ }; /***************************************************************************** * dvbpsi_ClaimPSISection *****************************************************************************/ /*! * \fn dvbpsi_psi_section_t * dvbpsi_ClaimPSISection(int i_max_size) * \brief Return a previously released section if one is available or create a new one. * \param h_dvbpsi Handle to retrieve the currently unused section from. * \param i_max_size max size in bytes of the section * \return a pointer to the new PSI section structure. */ dvbpsi_psi_section_t * dvbpsi_ClaimPSISection(dvbpsi_handle h_dvbpsi, int i_max_size); /***************************************************************************** * dvbpsi_ReleasePSISections *****************************************************************************/ /*! * \fn void dvbpsi_ReleasePSISections(dvbpsi_psi_section_t * p_section) * \brief Release a section so it can be reused. * \param h_dvbpsi Handle to store the unused sections in. * \param p_section pointer to the first PSI section structure * \return nothing. */ void dvbpsi_ReleasePSISections(dvbpsi_handle h_dvbpsi, dvbpsi_psi_section_t * p_section); /***************************************************************************** * dvbpsi_ClonePSISection *****************************************************************************/ /*! * \fn void dvbpsi_ClonePSISection(dvbpsi_handle h_dvbpsi, dvbpsi_psi_section_t * p_section) * \brief Release a section so it can be reused. * \param h_dvbpsi Handle to retrieve the currently unused section from. * \param p_section pointer to the PSI section structure to clone. * \return a pointer to the new PSI section structure. */ dvbpsi_psi_section_t * dvbpsi_ClonePSISection(dvbpsi_handle h_dvbpsi, dvbpsi_psi_section_t * p_section); /***************************************************************************** * dvbpsi_NewPSISection *****************************************************************************/ /*! * \fn dvbpsi_psi_section_t * dvbpsi_NewPSISection(int i_max_size) * \brief Creation of a new dvbpsi_psi_section_t structure. * \param i_max_size max size in bytes of the section * \return a pointer to the new PSI section structure. */ dvbpsi_psi_section_t * dvbpsi_NewPSISection(int i_max_size); /***************************************************************************** * dvbpsi_DeletePSISections *****************************************************************************/ /*! * \fn void dvbpsi_DeletePSISections(dvbpsi_psi_section_t * p_section) * \brief Destruction of a dvbpsi_psi_section_t structure. * \param p_section pointer to the first PSI section structure * \return nothing. */ void dvbpsi_DeletePSISections(dvbpsi_psi_section_t * p_section); /***************************************************************************** * dvbpsi_ValidPSISection *****************************************************************************/ /*! * \fn int dvbpsi_ValidPSISection(dvbpsi_psi_section_t* p_section) * \brief Validity check of a PSI section. * \param p_section pointer to the PSI section structure * \return boolean value (0 if the section is not valid). * * Check the CRC_32 if the section has b_syntax_indicator set. */ int dvbpsi_ValidPSISection(dvbpsi_psi_section_t* p_section); /***************************************************************************** * dvbpsi_BuildPSISection *****************************************************************************/ /*! * \fn void dvbpsi_BuildPSISection(dvbpsi_psi_section_t* p_section) * \brief Build a valid section based on the information in the structure. * \param p_section pointer to the PSI section structure * \return nothing. */ void dvbpsi_BuildPSISection(dvbpsi_psi_section_t* p_section); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/sdt.h000066400000000000000000000245711217721213100177130ustar00rootroot00000000000000/***************************************************************************** * sdt.h * (c)2001-2002 VideoLAN * $Id: sdt.h 118 2005-09-14 19:16:53Z massiot $ * * Authors: Johan Bilien * * 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. * *****************************************************************************/ /*! * \file * \author Johan Bilien * \brief Application interface for the SDT decoder and the SDT generator. * * Application interface for the SDT decoder and the SDT generator. New * decoded SDT are sent by callback to the application. If a table * wasn't active (b_current_next == 0) and the next is the same but active * (b_current_next == 1) then the service description list is empty and should * be caught from the previous structure. */ #ifndef _DVBPSI_SDT_H_ #define _DVBPSI_SDT_H_ #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * dvbpsi_sdt_service_t *****************************************************************************/ /*! * \struct dvbpsi_sdt_service_s * \brief SDT service description structure. * * This structure is used to store a decoded SDT service description. * (ETSI EN 300 468 V1.4.1 section 5.2.3). */ /*! * \typedef struct dvbpsi_sdt_service_s dvbpsi_sdt_service_t * \brief dvbpsi_sdt_service_t type definition. */ typedef struct dvbpsi_sdt_service_s { uint16_t i_service_id; /*!< service_id */ int b_eit_schedule; /*!< EIT schedule flag */ int b_eit_present; /*!< EIT present/following flag */ uint8_t i_running_status; /*!< Running status */ int b_free_ca; /*!< Free CA mode flag */ uint16_t i_descriptors_length; /*!< Descriptors loop length */ dvbpsi_descriptor_t * p_first_descriptor; /*!< First of the following DVB descriptors */ struct dvbpsi_sdt_service_s * p_next; /*!< next element of the list */ } dvbpsi_sdt_service_t; /***************************************************************************** * dvbpsi_sdt_t *****************************************************************************/ /*! * \struct dvbpsi_sdt_s * \brief SDT structure. * * This structure is used to store a decoded SDT. * (ETSI EN 300 468 V1.4.1 section 5.2.3). */ /*! * \typedef struct dvbpsi_sdt_s dvbpsi_sdt_t * \brief dvbpsi_sdt_t type definition. */ typedef struct dvbpsi_sdt_s { uint16_t i_ts_id; /*!< transport_stream_id */ uint8_t i_version; /*!< version_number */ int b_current_next; /*!< current_next_indicator */ uint16_t i_network_id; /*!< original network id */ dvbpsi_sdt_service_t * p_first_service; /*!< service description list */ } dvbpsi_sdt_t; /***************************************************************************** * dvbpsi_sdt_callback *****************************************************************************/ /*! * \typedef void (* dvbpsi_sdt_callback)(void* p_cb_data, dvbpsi_sdt_t* p_new_sdt) * \brief Callback type definition. */ typedef void (* dvbpsi_sdt_callback)(void* p_cb_data, dvbpsi_sdt_t* p_new_sdt); /***************************************************************************** * dvbpsi_AttachSDT *****************************************************************************/ /*! * \fn void dvbpsi_AttachSDT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_t i_extension, dvbpsi_sdt_callback pf_callback, void* p_cb_data) * \brief Creation and initialization of a SDT decoder. * \param p_demux Subtable demultiplexor to which the decoder is attached. * \param i_table_id Table ID, 0x42 or 0x46. * \param i_extension Table ID extension, here TS ID. * \param pf_callback function to call back on new SDT. * \param p_cb_data private data given in argument to the callback. * \return 0 if everything went ok. */ int dvbpsi_AttachSDT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, uint16_t i_extension, dvbpsi_sdt_callback pf_callback, void* p_cb_data); /***************************************************************************** * dvbpsi_DetachSDT *****************************************************************************/ /*! * \fn void dvbpsi_DetachSDT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_t i_extension) * \brief Destroy a SDT decoder. * \param p_demux Subtable demultiplexor to which the decoder is attached. * \param i_table_id Table ID, 0x42 or 0x46. * \param i_extension Table ID extension, here TS ID. * \return nothing. */ void dvbpsi_DetachSDT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_t i_extension); /***************************************************************************** * dvbpsi_InitSDT/dvbpsi_NewSDT *****************************************************************************/ /*! * \fn void dvbpsi_InitSDT(dvbpsi_sdt_t* p_sdt, uint16_t i_ts_id, uint8_t i_version, int b_current_next, uint16_t i_network_id) * \brief Initialize a user-allocated dvbpsi_sdt_t structure. * \param p_sdt pointer to the SDT structure * \param i_ts_id transport stream ID * \param i_version SDT version * \param b_current_next current next indicator * \param i_network_id original network id * \return nothing. */ void dvbpsi_InitSDT(dvbpsi_sdt_t *p_sdt, uint16_t i_ts_id, uint8_t i_version, int b_current_next, uint16_t i_network_id); /*! * \def dvbpsi_NewSDT(p_sdt, i_ts_id, i_version, b_current_next, i_network_id) * \brief Allocate and initialize a new dvbpsi_sdt_t structure. Use ObjectRefDec to release delete it. * \param p_sdt pointer to the SDT structure * \param i_ts_id transport stream ID * \param i_version SDT version * \param b_current_next current next indicator * \param i_network_id original network id * \return nothing. */ #define dvbpsi_NewSDT(p_sdt, i_ts_id, i_version, b_current_next,i_network_id) \ do { \ ObjectRegisterTypeDestructor(dvbpsi_sdt_t, (ObjectDestructor_t)dvbpsi_EmptySDT); \ p_sdt = (dvbpsi_sdt_t*)ObjectCreateType(dvbpsi_sdt_t); \ if(p_sdt != NULL) \ dvbpsi_InitSDT(p_sdt, i_ts_id, i_version, b_current_next, i_network_id); \ } while(0); /***************************************************************************** * dvbpsi_EmptySDT *****************************************************************************/ /*! * \fn void dvbpsi_EmptySDT(dvbpsi_sdt_t* p_sdt) * \brief Clean a dvbpsi_sdt_t structure. * \param p_sdt pointer to the SDT structure * \return nothing. */ void dvbpsi_EmptySDT(dvbpsi_sdt_t *p_sdt); /***************************************************************************** * dvbpsi_SDTAddService *****************************************************************************/ /*! * \fn dvbpsi_sdt_service_t* dvbpsi_SDTAddService(dvbpsi_sdt_t* p_sdt, uint16_t i_service_id, int b_eit_schedule, int b_eit_present, uint8_t i_running_status, int b_free_ca) * \brief Add a service description at the end of the SDT. * \param p_sdt pointer to the SDT structure * \param i_service_id Service ID * \param b_eit_schedule EIT Schedule flag * \param b_eit_present EIT Present/Following flag * \param i_running_status Running status * \param b_free_ca Free CA flag * \return a pointer to the added service description. */ dvbpsi_sdt_service_t *dvbpsi_SDTAddService(dvbpsi_sdt_t* p_sdt, uint16_t i_service_id, int b_eit_schedule, int b_eit_present, uint8_t i_running_status,int b_free_ca); /***************************************************************************** * dvbpsi_SDTServiceAddDescriptor *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t *dvbpsi_SDTServiceAddDescriptor( dvbpsi_sdt_service_t *p_service, uint8_t i_tag, uint8_t i_length, uint8_t *p_data) * \brief Add a descriptor in the SDT service. * \param p_service pointer to the service structure * \param i_tag descriptor's tag * \param i_length descriptor's length * \param p_data descriptor's data * \return a pointer to the added descriptor. */ dvbpsi_descriptor_t *dvbpsi_SDTServiceAddDescriptor( dvbpsi_sdt_service_t *p_service, uint8_t i_tag, uint8_t i_length, uint8_t *p_data); /***************************************************************************** * dvbpsi_GenSDTSections ***************************************************************************** * Generate SDT sections based on the dvbpsi_sdt_t structure. *****************************************************************************/ dvbpsi_psi_section_t *dvbpsi_GenSDTSections(dvbpsi_sdt_t * p_sdt); #ifdef __cplusplus }; #endif #endif dvbstreamer-2.1.0/include/dvbpsi/sections.h000066400000000000000000000027631217721213100207470ustar00rootroot00000000000000#ifndef _DVBPSI_SECTIONS_H_ #define _DVBPSI_SECTIONS_H_ #ifdef __cplusplus extern "C" { #endif typedef void (*dvbpsi_sections_new_cb_t) (void * p_cb_data, dvbpsi_handle h_dvbpsi, dvbpsi_psi_section_t* p_section); /***************************************************************************** * dvbpsi_sections_t *****************************************************************************/ /*! * \struct dvbpsi_demux_s * \brief subtable demultiplexor structure * * This structure contains the subtables demultiplexor data, such as the * decoders and new subtable callback. */ /*! * \typedef struct dvbpsi_demux_s dvbpsi_demux_t * \brief dvbpsi_demux_t type definition. */ typedef struct dvbpsi_sections_s { dvbpsi_handle p_decoder; /*!< Parent PSI Decoder */ /* New subtable callback */ dvbpsi_sections_new_cb_t pf_new_callback; /*!< New subtable callback */ void * p_new_cb_data; /*!< Data provided to the previous callback */ } dvbpsi_sections_t; dvbpsi_handle dvbpsi_AttachSections(dvbpsi_sections_new_cb_t pf_new_cb, void * p_new_cb_data); void dvbpsi_DetachSections(dvbpsi_handle h_dvbpsi); void dvbpsi_PushSection(dvbpsi_handle h_dvbpsi, dvbpsi_psi_section_t* p_section); #ifdef __cplusplus }; #endif #else #error "Multiple inclusions of demux.h" #endif dvbstreamer-2.1.0/include/dvbpsi/tdttot.h000066400000000000000000000133631217721213100204400ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA tdttot.h Time Date Table and Time Offset Table. */ #ifndef _TDTTOT_H #define _TDTTOT_H #define PID_TDT 0x14 #define TABLE_ID_TDT 0x40 #define TABLE_ID_TOT 0x41 /***************************************************************************** * dvbpsi_tdt_t *****************************************************************************/ /*! * \struct dvbpsi_tdt_tot_t * \brief TDT/TOT structure. * * This structure is used to store a decoded TDT/TOT. * (ETSI EN 300 468 V1.4.1 section 5.2.5/6). */ /*! * \typedef struct dvbpsi_tdt_tot_s dvbpsi_tdt_tot_t * \brief dvbpsi_tdt_tot_t type definition. */ typedef struct dvbpsi_tdt_tot_s { struct tm t_date_time; /*!< UTC Date/Time */ dvbpsi_descriptor_t* p_first_descriptor; /*!< TOT descriptors, only present if the table was a TOT */ } dvbpsi_tdt_tot_t; /***************************************************************************** * dvbpsi_tdt_tot_callback *****************************************************************************/ /*! * \typedef void (* dvbpsi_tdt_tot_callback)(void* p_cb_data, dvbpsi_tdt_tot_t* p_new_tdt_tot) * \brief Callback type definition. */ typedef void (* dvbpsi_tdt_tot_callback)(void* p_cb_data, dvbpsi_tdt_tot_t* p_new_tdt_tot); /***************************************************************************** * dvbpsi_AttachTDTTOT *****************************************************************************/ /*! * \fn void dvbpsi_AttachTDTTOT(dvbpsi_tdt_tot_callback pf_callback, void* p_cb_data) * \brief Creation and initialization of a TDT/TOT decoder. * \param pf_callback function to call back on new NIT. * \param p_cb_data private data given in argument to the callback. * \return a pointer to the decoder for future calls. */ dvbpsi_handle dvbpsi_AttachTDTTOT(dvbpsi_tdt_tot_callback pf_callback, void* p_cb_data); /***************************************************************************** * dvbpsi_DetachTDTTOT *****************************************************************************/ /*! * \fn void dvbpsi_DetachTDTTOT(dvbpsi_handle h_dvbpsi) * \brief Destroy a TDT/TOT decoder. * \param h_dvbpsi handle to the decoder * \return nothing. * * The handle isn't valid any more. */ void dvbpsi_DetachTDTTOT(dvbpsi_handle h_dvbpsi); /***************************************************************************** * dvbpsi_InitTDTTOT/dvbpsi_NewTDTTOT *****************************************************************************/ /*! * \fn void dvbpsi_InitTDTTOT(dvbpsi_nit_t* p_nit, uint16_t i_network_id, uint8_t i_version, int b_current_next) * \brief Initialize a user-allocated dvbpsi_tdt_tot_t structure. * \param p_tdt_tot pointer to the TDT/TOT structure * \param p_date_time pointer to a tm structure to initialise the table or NULL * to set all to 0. * \return nothing. */ void dvbpsi_InitTDTTOT(dvbpsi_tdt_tot_t *p_tdt_tot, struct tm *p_date_time); /*! * \def dvbpsi_NewTDTTOT(p_nit, i_network_id, i_version, b_current_next) * \brief Allocate and initialize a new dvbpsi_nit_t structure. * \param p_tdt_tot pointer to the TDT/TOT structure * \param p_date_time pointer to a tm structure to initialise the table or NULL * to set all to 0. * \return nothing. */ #define dvbpsi_NewTDTTOT(p_tdt_tot,p_date_time) \ do { \ ObjectRegisterTypeDestructor(dvbpsi_tdt_tot_t, (ObjectDestructor_t)dvbpsi_EmptyTDTTOT);\ p_tdt_tot = (dvbpsi_tdt_tot_t*)ObjectCreateType(dvbpsi_tdt_tot_t);\ if(p_tdt_tot != NULL) \ dvbpsi_InitTDTTOT(p_tdt_tot, p_date_time); \ } while(0); /***************************************************************************** * dvbpsi_EmptyTDTTOT *****************************************************************************/ /*! * \fn void dvbpsi_EmptyTDTTOT(dvbpsi_tdt_tot_t* p_tdt_tot) * \brief Clean a dvbpsi_tdt_tot_t structure. * \param p_tdt_tot pointer to the TDT/TOT structure * \return nothing. */ void dvbpsi_EmptyTDTTOT(dvbpsi_tdt_tot_t *p_tdt_tot); /***************************************************************************** * dvbpsi_TOTAddDescriptor *****************************************************************************/ /*! * \fn dvbpsi_descriptor_t* dvbpsi_TOTAddDescriptor(vbpsi_tdt_tot_t *p_tot, uint8_t i_tag, uint8_t i_length, uint8_t* p_data) * \brief Add a descriptor in the TOT. * \param p_tot pointer to the TOT structure * \param i_tag descriptor's tag * \param i_length descriptor's length * \param p_data descriptor's data * \return a pointer to the added descriptor. */ dvbpsi_descriptor_t* dvbpsi_TOTAddDescriptor(dvbpsi_tdt_tot_t *p_tot, uint8_t i_tag, uint8_t i_length, uint8_t* p_data); #endif dvbstreamer-2.1.0/include/dvbtext.h000077500000000000000000000027651217721213100173160ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dvbtext.h DVB Text Conversion functions. */ #ifndef _DVBTEXT_H #define _DVBTEXT_H #include /** * @addtogroup TextConversion Text Conversion * @{ */ /** * Converts the supplied string to UTF-8. The input string should be in DVB * format (see ETSI EN 300 468 Annex A2). * The returned pointer is to a static buffer that will be reused by future calls * to this method so the calling function should copy out the contents before calling * this function again. * * @param toConvert The string to convert to UTF-8. * @param toConvertLen The length of the string to convert. * @return A pointer to a buffer containing the input string in UTF-8 format, or * NULL if the conversion failed. */ char *DVBTextToUTF8(char *toConvert, size_t toConvertLen); /** @} */ #endif dvbstreamer-2.1.0/include/epgchannel.h000066400000000000000000000037261217721213100177350ustar00rootroot00000000000000/* Copyright (C) 2009 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA epgchannel.h EPG Functions and structures for sending/listening for EPG information. */ #ifndef _EPGCHANNEL_H #define _EPGCHANNEL_H #include "messageq.h" #include "epgtypes.h" /** * @defgroup EPGChannel EPG Channel * This module is used to send EPG information from the decoders to interested parties.\n * @{ */ typedef enum { EPGChannelMessageType_Event, EPGChannelMessageType_Detail, EPGChannelMessageType_Rating }EPGChannelMessageType; typedef struct EPGChannelMessage_s{ EPGChannelMessageType type; EPGEventRef_t eventRef; union { EPGEvent_t event; EPGEventDetail_t detail; EPGEventRating_t rating; }data; }EPGChannelMessage_t; /** * Initialises the EPG object types. * @return 0 on success. */ int EPGChannelInit(void); /** * Deinitialises the EPG object types. * @return 0 on success. */ int EPGChannelDeInit(void); int EPGChannelRegisterListener(MessageQ_t msgQ); int EPGChannelUnregisterListener(MessageQ_t msgQ); int EPGChannelNewEvent(EPGEventRef_t *eventRef, struct tm *startTime, struct tm *endTime, bool ca); int EPGChannelNewRating(EPGEventRef_t *eventRef, char *system, char *rating); int EPGChannelNewDetail(EPGEventRef_t *eventRef, char *lang, char * name, char *value); /**@}*/ #endif dvbstreamer-2.1.0/include/epgtypes.h000066400000000000000000000052021217721213100174600ustar00rootroot00000000000000/* Copyright (C) 2009 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA epgtypes.h EPG Type Functions and structures. */ #ifndef _EPGTYPES_H #define _EPGTYPES_H #include #include "types.h" /** * @defgroup EPGType EPG Types * This module is used to define the types used to descibe EPG events.\n * @{ */ /** * Constant for an events title. */ #define EPG_EVENT_DETAIL_TITLE "title" /** * Constant for an events descripton. */ #define EPG_EVENT_DETAIL_DESCRIPTION "description" /** * Structure used to identify a service in the EPG database. */ typedef struct EPGServiceRef_s { unsigned int netId; /**< Original network id. */ unsigned int tsId; /**< Transport stream id. */ unsigned int serviceId; /**< Service id. */ }EPGServiceRef_t; /** * Structure used to identify an event. */ typedef struct EPGEventRef_s { EPGServiceRef_t serviceRef; /**< Service the event is happening on. */ unsigned int eventId; /**< Event id. */ }EPGEventRef_t; /** * Structure used to describe an EPG event. */ typedef struct EPGEvent_s { struct tm startTime; /**< Start time of the event.*/ struct tm endTime; /**< Finish time of the event. */ bool ca; /**< Whether the event is encrypted. */ }EPGEvent_t; /** * Structure describing a rating for an event. */ typedef struct EPGEventRating_s { char *system; /**< System the rating pertains to. */ char *rating; /**< Rating of the event. */ }EPGEventRating_t; /** * Structure describing a detail of an event. */ typedef struct EPGEventDetail_s { char lang[4]; /**< 3 character language code + \0 */ char *name; /**< Name of the information in question, ie title/description/director etc. */ char *value; /**< The actual information. */ }EPGEventDetail_t; /** * Initialises the EPG object types. * @return 0 on success. */ int EPGTypesInit(void); /** * Deinitialises the EPG object types. * @return 0 on success. */ int EPGTypesDeInit(void); /**@}*/ #endif dvbstreamer-2.1.0/include/events.h000077500000000000000000000204301217721213100171270ustar00rootroot00000000000000/* Copyright (C) 2008 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA events.h Events management functions */ #ifndef _DVBSTREAMER_EVENTS_H #define _DVBSTREAMER_EVENTS_H #include "types.h" #include "yaml.h" /** * @defgroup Events Event Management * The Events module is used as means for any modue to register events of * interest and allow other modules to listen for those events, all events from * a source or any event. * Events are located based on the following naming convention: * \.\ * The '.' is used as the delimiter and should not appear in event source names. * The source and event names should follow the Pascal or UpperCamelCase naming * convention. * * The Events module itself exports the single event "Events.Unregistered", with * the event being destroyed as the payload, to inform interested parties when an * event is destroyed. * * \section events Events Exported * * \li \ref unregistered Sent when an event is being unregistered. * * \subsection unregistered Events.Unregistered * This event is fired just before the event is removed from the source. \n * \par * \c payload = The event being unregistered. *@{ */ /** * Event Source handle. * An event source has a number of events (Event_t instances) associated with it. */ typedef struct EventSource_s *EventSource_t; /** * Event handle. * An event is associated with an event source (EventSource_t). */ typedef struct Event_s *Event_t; /** * Pointer to a function that converts an event and its payload into a human * readable string. * @param document YAML Document to add nodes to. * @param event The event to convert. * @param payload The payload for the event to convert. * @return A node id to be mapped to from the event "Details" key. */ typedef int (*EventToString_t)(yaml_document_t *document, Event_t event, void *payload); /** * Callback function that is to be executed when an event is fired. * @param arg A user defined argument to pass to the function. * @param event The event being fired. * @param payload The details of the event. */ typedef void (*EventListener_t)(void *arg, Event_t event, void *payload); /** * @internal * Initialises the Events subsystem. * @returns 0 on success. */ int EventsInit(void); /** * @internal * Deinitialises the Events subsystem. * @returns 0 on success. */ int EventsDeInit(void); /** * Register a listener callback using the name. * The name can be "" for a global listener or * "" to register a source listener or * "." to register a listener for a specific event. * @param name The name of the event to register with. * @param listener The callback function to register. * @param arg The user defined argument to pass to the callback when an event is fired. */ void EventsRegisterListenerByName(const char *event, EventListener_t listener, void *arg); /** * Unregister a listener callback using the name. * @param name The name of the event to unregister with. * @param listener The callback function to unregister. * @param arg The user defined argument to pass to the callback when an event is fired. */ void EventsUnregisterListenerByName(const char *event, EventListener_t listener, void *arg); /** * Register a listener to receive ALL events. * @param listener The callback function to register. * @param arg The user defined argument to pass to the callback when an event is fired. */ void EventsRegisterListener(EventListener_t listener, void *arg); /** * Unregister a listener from receiving all events. * @param listener The callback function to unregister. * @param arg The user defined argument to pass to the callback when an event is fired. */ void EventsUnregisterListener(EventListener_t listener, void *arg); /** * Register a new event source. The name of the source must not contain * @param name The name of the source. * @return An EventSource_t instance or NULL if the registration failed. */ EventSource_t EventsRegisterSource(char *name); /** * Removes a previously registered source and all the sources associated events * and listeners. * @param source The source to unregister. */ void EventsUnregisterSource(EventSource_t source); /** * Find an event source with the given name. * @param name The name of the event source to find. * @return An EventSource_t or NULL if no source matched the supplied name. */ EventSource_t EventsFindSource(const char *name); /** * Register a listener for a specific source. * @param source The source to register with. * @param listener The callback function to register. * @param arg The user defined argument to pass to the callback when an event is fired. */ void EventsRegisterSourceListener(EventSource_t source, EventListener_t listener, void *arg); /** * Unregister a listener from receiving events from a source. * @param source The source to unregister with. * @param listener The callback function to unregister. * @param arg The user defined argument to pass to the callback when an event is fired. */ void EventsUnregisterSourceListener(EventSource_t source, EventListener_t listener, void *arg); /** * Register a new event with an event source. * The toString function is used for debugging purposes and to allow the event * to be translated into useful information for external applications that may * receive event information over TCP for example. * * @param source The source the event is linked to. * @param name The name of the event. * @param toString A function to return a textual representation of the event. */ Event_t EventsRegisterEvent(EventSource_t source, char *name, EventToString_t toString); /** * Unregisters an event. * @param event The event to unregister from its assocated source. */ void EventsUnregisterEvent(Event_t event); /** * Given a name in the form \.\ find the Event_t object and return it. * @param name The fully qualified name of the event to find. * @return An Event_t object or NULL if the event could not be found. */ Event_t EventsFindEvent(const char *name); /** * Calls all listeners that have register to receive events in the following order * - Global listeners * - Source listeners * - Event Listeners * * @note All callbacks are called on the calling thread! * * @param event The event to fire. * @param payload The private information associated with the event. */ void EventsFireEventListeners(Event_t event, void *payload); /** * Register a listener for a specific event. * @param event The event to register with. * @param listener The callback function to register. * @param arg The user defined argument to pass to the callback when an event is fired. */ void EventsRegisterEventListener(Event_t event, EventListener_t listener, void *arg); /** * Unregister a listener from receiving an event. * @param event The event to unregister with. * @param listener The callback function to unregister. * @param arg The user defined argument to pass to the callback when an event is fired. */ void EventsUnregisterEventListener(Event_t event, EventListener_t listener, void *arg); /** * This function converts the event into a human readable form by combining the * name of the event, with the output of the event specifc toString function * (if supplied when the event was created). * @param event The event to convert. * @param payload The payload of the event. * @return A YAML document describing the event. */ char *EventsEventToString(Event_t event, void *payload); /** * This function returns the name ("\.\") of the specified event. * @param event The event to convert. * @return A string containing the name of the event. */ char *EventsEventName(Event_t event); /** @} */ #endif dvbstreamer-2.1.0/include/list.h000077500000000000000000000155501217721213100166050ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA list.h Generic list management functions. */ #ifndef _DVBSTREAMER_LIST_H #define _DVBSTREAMER_LIST_H #include "types.h" /** * @defgroup List Generic Linked List *@{ */ /** * Structure used to hold an entry in a double linked list. */ typedef struct ListEntry_s { void *data; /**< Pointer to the user data. */ struct ListEntry_s *next; /**< Pointer to the next list entry. */ struct ListEntry_s *prev; /**< Pointer to the previous list entry. */ }ListEntry_t; /** * Structure describing a double linked list. */ typedef struct List_s { int count; /**< Number of entries in the list. */ ListEntry_t *head;/**< First entry in the list. */ ListEntry_t *tail;/**< Last entry in the list. */ }List_t; /** * Structure to hold the state of a list iterator. */ typedef struct ListIterator_s { List_t *list; /**< The list being iterated over. */ ListEntry_t *current; /**< The current entry of the list */ }ListIterator_t; /** * Function pointer to a function to call with each entry->data in a list when * the list is being freed. */ typedef void (*ListDataDestructor_t)(void *); /** * Initialise a ListIterator_t instance to point to the first entry in the list. * Example use of a ListIterator_t * @code * ListIterator_t iterator; * for ( ListIterator_Init(iterator, list); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) * { * printf("Data = %p\n", ListIterator_Current(iterator)); * } * @endcode * * @param _iterator The iterator to initialise (not a pointer), * @param _list The list to initialise the iterator to use. */ #define ListIterator_Init(_iterator, _list) (_iterator).current = (_list)->head, (_iterator).list = _list /** * Move to the next entry. * @param _iterator Iterator to update. */ #define ListIterator_Next(_iterator) ((_iterator).current = ((_iterator).current?((_iterator).current->next):NULL)) /** * Retrieve the data stored at current entry. * @param _iterator The iterator to retrieve the data from. * @return The data stored at the current entry. */ #define ListIterator_Current(_iterator) ((_iterator).current->data) /** * Determine whether there are any more entries in the list. * @param _iterator The iterator to test. * @return True if there are more entries, false otherwise. */ #define ListIterator_MoreEntries(_iterator) ((_iterator).current) /** * Set the data at the current iterator location. * @param _iterator The iterator containing the location to set. * @param _data The new data to set. */ #define ListIterator_SetCurrent(_iterator, _data) (_iterator).current->data = (_data) /** * Convenience macro for defining a for loop to iterate over all items in a list. * @param _iterator The iterator to initialise (not a pointer), * @param _list The list to initialise the iterator to use. */ #define ListIterator_ForEach(_iterator, _list) \ for (ListIterator_Init(_iterator, _list); ListIterator_MoreEntries(_iterator); ListIterator_Next(_iterator)) /** * Creates a new double linked list. * @return A new List_t instance or NULL if there is not enough memory. */ List_t *ListCreate(); /** * Alias for ListCreate(). * Creates a list that will only be used to hold objects. * @return A new List_t instance or NULL if there is not enough memory. */ #define ObjectListCreate() ListCreate() /** * Free a list and all the entries calling the destructor function for each entry. * @param list The list to free. * @param destructor Function to call on each item in the list. */ void ListFree(List_t *list, void (*destructor)(void *data)); /** * Free a list that only contains objects. * Any objects still in the list will have their reference counts decremented. * @param list The list to free. */ #define ObjectListFree(list) ListFree(list, ListFreeObject); /** * @internal * Function used by the ObjectListFree() macro to decrement object ref counts. */ void ListFreeObject(void *ptr); /** * Add an entry to the end of the list. * @param list The list to add to. * @param data The data entry to add. * @return TRUE if the data was added, false otherwise. */ bool ListAdd(List_t *list, void *data); /** * Retrieve data stored in the list at the specified index. * @param list The list to retrieve the data from. * @param index Index into the list. * @param data Pointer to store the data pointer in. * @return TRUE if the data was retrieved, FALSE otherwise. */ bool ListGet(List_t * list, int index, void * * data); /** * Remove the first instance of data from the list. * @param list The list to remove the data from. * @param data The data to remove. * @return true if the data was found. */ bool ListRemove(List_t *list, void *data); /** * Replace the first instance of old data in the list with new data. * @param list The list to replace the old data in. * @param oldData The data to replace. * @param newData The data to set. * @return true if the old data was found. */ bool ListReplace(List_t *list, void *oldData, void *newData); /** * Insert an entry before the current entry in a list. * @param iterator Current point in the list to insert the entry. * @param data The data to insert. * @return TRUE if the data was added, false otherwise. */ bool ListInsertBeforeCurrent(ListIterator_t *iterator, void *data); /** * Insert an entry after the current entry in a list. * @param iterator Current point in the list to insert the entry. * @param data The data to insert. * @return TRUE if the data was added, false otherwise. */ bool ListInsertAfterCurrent(ListIterator_t *iterator, void *data); /** * Remove the current entry in the list pointed to by the iterator. * After this function complete the iterator will point to the next entry in * the list. * @param iterator Iterator pointer to the current entry in the list to remove. */ void ListRemoveCurrent(ListIterator_t *iterator); /** * Returns the number of entries in the specified list. * @param _list The list to retrieve the number of entries from. * @return The number of entries in the list. */ #define ListCount(_list) (_list)->count /** * Dump the structure of a list. * @param list the list to dump. */ void ListDump(List_t *list); /** @} */ #endif dvbstreamer-2.1.0/include/lnb.h000077500000000000000000000026511217721213100164030ustar00rootroot00000000000000/* From linuxtv.org's szap utility, just cleaned up a bit and made more dvbstreamer like. */ #ifndef _LNB_H #define _LNB_H #include "types.h" /** * Structure describing an LNB type. */ typedef struct LNBInfo_s { char *name; /**< Name of the LNB type.*/ char **desc; /**< Description of this LNB.*/ unsigned long lowFrequency; /**< Low band LO frequency. */ unsigned long highFrequency; /**< zero indicates no hiband */ unsigned long switchFrequency; /**< zero indicates no hiband */ }LNBInfo_t; /** * Enumerate through standard types of LNB's until NULL returned. * Increment curno each time. */ LNBInfo_t *LNBEnumerate(int curno); /** * Decode an lnb type, for example given on a command line * If alpha and standard type, e.g. "Universal" then match that * otherwise low[,high[,switch]] */ int LNBDecode(char *str, LNBInfo_t *lnb); /** * Convert a transponder frequency to the intermediate frequency to use with the * specified LNB. * @param info The LNB to use to convert the transponder frequency. * @param freq The transponder frequency to convert. * @param tone Pointer to a bool to store whether the 22Khz tone should be enabled for this * transponder. * @return The intermediate frequency to tune to. */ unsigned long LNBTransponderToIntermediateFreq(LNBInfo_t *info, unsigned long freq, bool *tone); #endif dvbstreamer-2.1.0/include/logging.h000066400000000000000000000074041217721213100172540ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA logging.h Logging levels and functions. */ #ifndef _LOGGING_H #define _LOGGING_H #include #include #include "types.h" /** * Error logging level, always printed used for fatal error messages. */ #define LOG_ERROR 0 /** * Information logging level, used for warnings and other information. */ #define LOG_INFO 1 /** * Verbose Information logging level, less important than information level but * not quite debugging. */ #define LOG_INFOV 2 /* Verbose information */ /** * Debug Logging Level, useful debugging information. */ #define LOG_DEBUG 3 /** * Verbose Debugging Level, less useful debugging information. */ #define LOG_DEBUGV 4 /* Verbose debugging info */ /** * Diarrhee level, lots and lots of pointless text. */ #define LOG_DIARRHEA 10 /** * @internal * Initialises logging, by first attempting to create the log file in /var/log, * then if unsuccessful in ~/.dvbstreamer * @param filename Name of the log file to create. * @param logLevel The initial logging/verbosity level. * @return 0 on success. */ int LoggingInit(char *filename, int logLevel); /** * @internal * Initialises logging by using the file path specified as the log file. * @param filepath File path of the file to use for logging. * @param logLevel The initial logging/verbosity level. * @return 0 on success. */ int LoggingInitFile(char *filename, int logLevel); /** * @internal * Redirects STDOUT and STDERR file descriptors to use the file descriptor opened * for log output. */ void LoggingRedirectStdErrStdOut(void); /** * @internal * Deinitialise logging. */ void LoggingDeInit(void); /** * Set the current logging level. * @param level The new level to set. */ void LogLevelSet(int level); /** * Retrieves the current logging level. * @return The current logging level. */ int LogLevelGet(void); /** * Increase the logging level by 1. */ void LogLevelInc(void); /** * Decrease the logging level by 1. */ void LogLevelDec(void); /** * Determine if the specified logging level is enabled. * @param level The level to check. * @return TRUE if the level is enabled, FALSE otherwise. */ bool LogLevelIsEnabled(int level); /** * Load module/level settings so that levels can be set for specific modules. * @param path Path to file to load. */ void LogLoadModuleLevels(const char *path); /** * Register a name for a pthread. The name will be used instead of the numeric * id in the log output. * @param thread pthread to register. * @param name Name of the thread. */ void LogRegisterThread(pthread_t thread, const char *name); /** * Unregister a name of a pthread. * @param thread pthread to unregister. */ void LogUnregisterThread(pthread_t thread); /** * Write the text describe by format to the log output, if the current verbosity * level is greater or equal to level. * @param level The level at which to output this text. * @param module The module that is doing the logging. * @param format String in printf format to output. */ extern void LogModule(int level, const char *module, char *format, ...); #endif dvbstreamer-2.1.0/include/main.h000066400000000000000000000046001217721213100165450ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA main.h Entry point to the application. */ #ifndef _MAIN_H #define _MAIN_H #include "types.h" #include "dvbadapter.h" #include "ts.h" #include "servicefilter.h" #include "services.h" #include "multiplexes.h" #include "plugin.h" /** * Boolean used to signal the program to terminate. */ extern volatile bool ExitProgram; /** * Boolean indicating whether DVBStreamer is in daemon mode. */ extern bool DaemonMode; /** * Constant for the PrimaryService output name */ extern const char PrimaryService[]; /** * Directory path where DVBStreamer stores its data. */ extern char DataDirectory[]; /** * Writes any changes in the cache back to the database, ensuring the TS Filter is disabled. */ void UpdateDatabase(); /** * Retrieve the main Transport Stream Filter object. * @return The main TSReader_t object. */ TSReader_t *MainTSReaderGet(void); /** * Retrieve the DVBAdapter_t object being used by the main TSReader_t object. * @return The main DVBAdapter_t object. */ DVBAdapter_t *MainDVBAdapterGet(void); /** * Retrieve the Primary Service Filter object. * @return A ServiceFilter_t object representing the primary filter. */ ServiceFilter_t MainServiceFilterGetPrimary(void); /** * Used to determine whether DVBStreamer is using a DVB frontend. * @return TRUE if the frontend is a DVB frontend, FALSE if it is not. */ bool MainIsDVB(); /** * Used to determine whether DVBStreamer is using a ATSC frontend. * @return TRUE if the frontend is a ATSC frontend, FALSE if it is not. */ bool MainIsATSC(); /** * Used to determine whether DVBStreamer is using a ISDB frontend. * @return TRUE if the frontend is a ISDB frontend, FALSE if it is not. */ bool MainIsISDB(); #endif dvbstreamer-2.1.0/include/messageq.h000077500000000000000000000065601217721213100174400ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA messageq.h Thread safe message queue. */ #ifndef _DVBSTREAMER_MESSAGEQ_H #define _DVBSTREAMER_MESSAGEQ_H #include "types.h" /** * @defgroup MessageQ Thread safe message queue *@{ */ /** * Message Queue handle. */ typedef struct MessageQ_s *MessageQ_t; /** * Creates a new double linked list. * @return A new MessageQ_t instance or NULL if there is not enough memory. */ MessageQ_t MessageQCreate(); /** * Frees the specified message queue. * @param msgQ The message queue to free. */ void MessageQDestroy(MessageQ_t msgQ); /** * Sends the specified msg to the message queue. msg must be allocated * using Object(Alloc/Create) as on adding to the queue they will have their * reference count increased using ObjectRefInc and any messages are left in the * queue when it is destroyed they will first be unref'ed using ObjectRefDec(). * * @param msgQ The message queue to send the message to. * @param msg The object to send. */ void MessageQSend(MessageQ_t msgQ, void *msg); /** * Returns the number of messages waiting in the queue. * @param msgQ The message queue to count the waiting messages in. * @return The number of waiting messages. */ int MessageQAvailable(MessageQ_t msgQ); /** * Receive a message from the queue, the return object should be unref'ed once * finished with via ObjectRefDec. * If the quit flag is set on the message queue NULL will be returned. * @param msgQ The queue to receive a message from. * @return A pointer to an object or NULL if quit is set. */ void *MessageQReceive(MessageQ_t msgQ); /** * Receive a message from the queue waiting for upto timeout milliseconds. * The return object should be unref'ed once finished with via ObjectRefDec. * If the quit flag is set on the message queue NULL will be returned. * @param msgQ The queue to receive a message from. * @param timeout The number of milliseconds to wait for a message. * @return A pointer to an object or NULL if quit is set. */ void *MessageQReceiveTimed(MessageQ_t msgQ, ulong timeout); /** * Set the quit flag on the specified message queue. Once set all current and * future calls to MessageQReceive will return NULL. * @param msgQ The message queue to set the quit flag on. */ void MessageQSetQuit(MessageQ_t msgQ); /** * Reset the quit flag on the specified message queue so messages can once again * be received. * @param msgQ The message queue to reset the quit flag on. */ void MessageQResetQuit(MessageQ_t msgQ); /** * Test whether the quit flag is set on the specified message queue. * @param msgQ The message queue to check. * @return TRUE if the quit flag is set, FALSE otherwise. */ bool MessageQIsQuitSet(MessageQ_t msgQ); /** @} */ #endif dvbstreamer-2.1.0/include/multiplexes.h000066400000000000000000000153371217721213100202050ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA multiplexes.h Manage multiplexes and tuning parameters. */ #ifndef _MULTIPLEX_H_ #define _MULTIPLEX_H_ #include #include #include #include "objects.h" #include "dvbadapter.h" #include "list.h" #include "dbase.h" #include "events.h" /** * @defgroup Multiplex Multiplex information * This module is used to store and retrieve the multiplex information in the * adapters database. * @{ */ /** * Structure describing a multiplex. */ typedef struct Multiplex_s { int uid; /**< Unique ID for this multiplex */ int tsId; /**< Transport Stream ID. */ int networkId; /**< Network ID */ int patVersion; /**< Last processed version of the PAT */ DVBDeliverySystem_e deliverySystem; /**< Delivery system used to broadcast this multiplex */ char *tuningParams; /**< Tuning parameters */ }Multiplex_t; /** * A Collection of Multiplex_t objects. */ typedef struct MultiplexList_s { int nrofMultiplexes; /**< Number of multiplex objects contained in this list. */ Multiplex_t *multiplexes[0]; /**< Array of pointers to multiplex objects. */ }MultiplexList_t; /** * Handle for enumerating multiplexes. */ typedef void * MultiplexEnumerator_t; /** * Macro to compare 2 Multiplex_t structures. */ #define MultiplexAreEqual(_multiplex1, _multiplex2) \ ((_multiplex1)->uid == (_multiplex2)->uid) /** * Initialise the multiplex module for use. * @return 0 on success. */ int MultiplexInit(void); /** * Release resources used by the multiplex module. * @return 0 on success. */ int MultiplexDeInit(void); /** * Number of multiplexes stored in the database. * @return The number of multiplexes in the database. */ #define MultiplexCount() DBaseCount(MULTIPLEXES_TABLE, NULL) /** * Retrieve a Multiplex_t structure for the string mux. * mux is tried as (in order) UID, netid.tsid and finally frequency. * @return A Mulitplex_t or NULL if the frequency could not be found. */ Multiplex_t *MultiplexFind(char *mux); /** * Retrieve the Multiplex_t structure for the UID. * The returned structured should be released using MultiplexRefDec. * @param uid Unique ID of the multiplex to retrieve. * @return A Mulitplex_t or NULL if the frequency could not be found. */ Multiplex_t *MultiplexFindUID(int uid); /** * Retrieve the Multiplex_t structure for the network and TS id. * The returned structured should be released using MultiplexRefDec. * @param netid Network id to find. * @param tsid Transport stream id to find. * @return A Mulitplex_t or NULL if the frequency could not be found. */ Multiplex_t *MultiplexFindId(int netid, int tsid); /** * Retrieve an enumerator for all the multiplexes in the database. * @return An enumerator instance or NULL if there was not enough memory. */ MultiplexEnumerator_t MultiplexEnumeratorGet(); /** * Retrieve a MultiplexList_t object containing all the multiplexes in the database. * @return A MultiplexList_t instance containing Multiplex_t objects or NULL if there was * not enough memory. */ MultiplexList_t *MultiplexGetAll(); /** * Destroy an enumerator return by MultiplexEnumeratorGet(). * @param enumerator The enumerator to free. */ void MultiplexEnumeratorDestroy(MultiplexEnumerator_t enumerator); /** * Retrieve the next multiplex from an enumerator. * The returned structured should be free'd using free(). * @param enumerator The enumerator to retrieve the next multiplex from. * @return A Multiplex_t instance or NULL if there are no more multiplexes. */ Multiplex_t *MultiplexGetNext(MultiplexEnumerator_t enumerator); /** * Add a multiplex to the database. * @param type The type of frontend used to receive this transport stream. * @param tuningParams String containing a YAML Document describing the tuning parameters. * @param mux On exit, if successful, contains a pointer to a Multiplex_t object. * @return 0 on success, otherwise an SQLite error code. */ int MultiplexAdd(DVBDeliverySystem_e type, char *tuningParams, Multiplex_t **mux); /** * Remove a multiplex and all its services from the database. * @param multiplex The multiplex to delete. * @return 0 on success, otherwise an SQLite error code. */ int MultiplexDelete(Multiplex_t *multiplex); /** * Set the PAT version of a multiplex. * @param multiplex The multiplex to update. * @param patversion The version of the PAT to set. * @return 0 on success, otherwise an SQLite error code. */ int MultiplexPATVersionSet(Multiplex_t *multiplex, int patversion); /** * Set the TS ID of the multiplex. * @param multiplex The multiplex to update. * @param tsid The ID of TS set. * @return 0 on success, otherwise an SQLite error code. */ int MultiplexTSIdSet(Multiplex_t *multiplex, int tsid); /** * Set the network ID of the multiplex. * @param multiplex The multiplex to update. * @param netid The network id to set. * @return 0 on success, otherwise an SQLite error code. */ int MultiplexNetworkIdSet(Multiplex_t *multiplex, int netid); /** * Create a new multiplex object. */ #define MultiplexNew() (Multiplex_t*)ObjectCreateType(Multiplex_t) /** * Increment the references to the specified multiplex object. * @param __multiplex The multiplex instance to increment the reference count of. (Multiplex can be NULL.) */ #define MultiplexRefInc(__multiplex) \ do{ \ if ((__multiplex)) \ { \ ObjectRefInc((__multiplex)); \ } \ }while(0) /** * Decrement the references of the specified multiplex object. If the reference * count reaches 0 the instance is free'd. * @param __multiplex The multiplex instance to decrement the reference count of. (Multiplex can be NULL.) */ #define MultiplexRefDec(__multiplex) \ do{ \ if ((__multiplex)) \ { \ ObjectRefDec((__multiplex)); \ } \ }while(0) /** * Use as the toString parameter when registering an event where the payload will * be a multiplex object. */ int MultiplexEventToString(yaml_document_t *document, Event_t event,void * payload); /** @} */ #endif dvbstreamer-2.1.0/include/nitprocessor.h000066400000000000000000000020001217721213100203430ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA nitprocessor.h Process Network Information Tables. */ #ifndef _NITPROCESSOR_H #define _NITPROCESSOR_H #include "plugin.h" #include "ts.h" typedef struct NITProcessor_s *NITProcessor_t; NITProcessor_t NITProcessorCreate(TSReader_t *reader); void NITProcessorDestroy(NITProcessor_t processor); #endif dvbstreamer-2.1.0/include/objects.h000077500000000000000000000213211217721213100172540ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Objects.h Object memory management. */ #ifndef _OBJECTS_H #define _OBJECTS_H #include "types.h" /** * @defgroup Object Object Memory Managment *@{ */ #define OBJECT_OK 0 /**< OK (No Error). */ #define OBJECT_ERR_OUT_OF_MEMORY 1 /**< Out of memory. */ #define OBJECT_ERR_CLASS_REGISTERED 2 /**< Class already registered. */ #define OBJECT_ERR_CLASS_NOT_FOUND 3 /**< Class could not be found. */ /** * A collection of entries with a count. */ typedef struct ObjectCollection_s{ unsigned int nrofEntries; /**< Number of entries in the collection */ }ObjectCollection_t; /** * Type for a function to call when free'ing an object. * ptr is the pointer to the object being freed. */ typedef void (*ObjectDestructor_t)(void *ptr); /** * Initialise object memory system. * @returns 0 on success. */ int ObjectInit(void); /** * Deinitialise object memory system. * @returns 0 on success. */ int ObjectDeinit(void); /** * Register a class of object to use with the ObjectCreate function. * @param classname Name of the class being registered. * @param size Size of the memory need for the object. * @param destructor Function to call when the reference count reach zero for an * object. This is only required if the object includes references to other * object/malloc memory that needs to be freed. * @return 0 on success. */ int ObjectRegisterClass(char *classname, unsigned int size, ObjectDestructor_t destructor); /** * Register a new of object collection to use with the ObjectCollectionCreate function. * @param classname Name of the collection being registered. * @param size Size of the memory need for the object. * @param destructor Function to call when the reference count reach zero for an * object. This is only required if the object includes references to other * object/malloc memory that needs to be freed. * @return 0 on success. */ int ObjectRegisterCollection(char *name, unsigned entrysize, ObjectDestructor_t destructor); /** * Helper macro to register a type as an object class. * @param _type The type to register with the object system. */ #define ObjectRegisterType(_type) ObjectRegisterClass(TOSTRING(_type), sizeof(_type), NULL) /** * Helper macro to register a type as an object class. * @param _type The type to register with the object system. * @param _destructor Function to call when free'ing an object of the type being * registered. */ #define ObjectRegisterTypeDestructor(_type, _destructor) ObjectRegisterClass(TOSTRING(_type), sizeof(_type), _destructor) /** * Create a new object of class \. The initial reference count for the * returned object will be 1. * @param _classname Class of object to create. * @return A pointer to the new object or NULL. */ #define ObjectCreate(_classname) ObjectCreateImpl(_classname, __FILE__, __LINE__) /** * Create a new collection of class \. The initial reference count for the * returned object will be 1. * @param _classname Class of object to create. * @param _entries The number of entries in the collection. * @return A pointer to the new object or NULL. */ #define ObjectCollectionCreate(_classname, _entries) ObjectCollectionCreateImpl(_classname, _entries,__FILE__, __LINE__) /** * Create a new object of class \. The initial reference count for the * returned object will be 1. * * @note This function should not be used instead the macro ObjectCreate should be used. * * @param classname Class of object to create. * @param file The file this function is being called from. * @param line The line this function is being called from. * @return A pointer to the new object or NULL. */ void *ObjectCreateImpl(char *classname, char *file, int line); /** * Helper macro to create a new object of the specfied type. * @param _type The new type of the object to create. */ #define ObjectCreateType(_type) ObjectCreate(TOSTRING(_type)) /** * Create a new collection of class \. The initial reference count for the * returned object will be 1. * * @note This function should not be used instead the macro ObjectCollectionCreate should be used. * * @param classname Class of object to create. * @param entries The number of entries the collection should contain. * @param file The file this function is being called from. * @param line The line this function is being called from. * @return A pointer to the new object or NULL. */ ObjectCollection_t *ObjectCollectionCreateImpl(char *classname, unsigned int entries, char *file, int line); /** * Increment the reference count for the specified object. * @param _ptr Pointer to the object to increment the ref. count of. */ #define ObjectRefInc(_ptr) ObjectRefIncImpl(_ptr, __FILE__, __LINE__) /** * Increment the reference count for the specified object. * @note This function should not be used instead the macro ObjectRefInc should be used. * @param ptr Pointer to the object to increment the ref. count of. * @param file The file this function is being called from. * @param line The line this function is being called from. */ void ObjectRefIncImpl(void *ptr, char *file, int line); /** * Decrement the reference count for the specified object. If the reference count * reaches zero the object's class's destructor will be called and the memory freed. * @param _ptr Pointer to the object to decrement the ref. count of. * @return True if there are more references to the object, false if not. */ #define ObjectRefDec(_ptr) ObjectRefDecImpl(_ptr, __FILE__, __LINE__) /** * Decrement the reference count for the specified object. If the reference count * @note This function should not be used instead the macro ObjectRefDec should be used. * @param ptr Pointer to the object to decrement the ref. count of. * @param file The file this function is being called from. * @param line The line this function is being called from. */ bool ObjectRefDecImpl(void *ptr, char *file, int line); /** * Retrieve the current reference count of the specific object. * @param ptr Pointer to the object to get the reference count of. * @return The reference count of the object. */ int ObjectRefCount(void *ptr); /** * Queries the supplied pointer to determine if it is an object instance. * @param ptr Pointer to check to see if it is an object pointer. * @return True if the pointer is an object pointer, false otherwise. */ bool ObjectIsObject(void *ptr); /** * Queries the supplied object pointer to determine the class of the object. * @param ptr Pointer to check. * @return The name of the class of the object or NULL if a alloc'ed block. */ char *ObjectGetObjectClass(void * ptr); /** * Replacement for malloc, with the addition that it also clears the memory to zero. * @param _size Size of the block to allocated. * @return Pointer to the new memory block or NULL. */ #define ObjectAlloc(_size) ObjectAllocImpl(_size, __FILE__, __LINE__) /** * Replacement for malloc with the addition that it also clears the memory to zero. * @note This function should not be used instead the macro ObjectAlloc should be used. * @param size Size of the block to allocated. * @param file The file this function is being called from. * @param line The line this function is being called from. * @return Pointer to the new memory block or NULL. */ void *ObjectAllocImpl(int size, char * file, int line); /** * Replacement for free. Releases memory previously allocated by ObjectAlloc. * @param _ptr The memory block to free. */ #define ObjectFree(_ptr) ObjectFreeImpl(_ptr, __FILE__, __LINE__) /** * Replacement for free. Releases memory previously allocated by ObjectAlloc. * @note This function should not be used instead the macro ObjectFree should be used. * @param _ptr The memory block to free. * @param file The file this function is being called from. * @param line The line this function is being called from. */ void ObjectFreeImpl(void * ptr, char * file, int line); /** * Print out debugging information about the object. * @param ptr Pointer to the object to dump information on. */ void ObjectDump(void *ptr); /** @} */ #endif dvbstreamer-2.1.0/include/parsezap.h000066400000000000000000000020131217721213100174420ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA parsezap.h Parse channels.conf file and add services to the database. Majority of the parsing code taken from the xine input_dvb plugin code. */ #ifndef _PARSEZAP_H #define _PARSEZAP_H #include "dvbadapter.h" int parsezapfile(char *path, DVBDeliverySystem_e delSys); #endif dvbstreamer-2.1.0/include/patprocessor.h000066400000000000000000000020421217721213100203430ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA patprocessor.h Process Program Association Tables and update the services information. */ #ifndef _PATPROCESSOR_H #define _PATPROCESSOR_H #include "plugin.h" #include "ts.h" typedef struct PATProcessor_s *PATProcessor_t; PATProcessor_t PATProcessorCreate(TSReader_t *reader); void PATProcessorDestroy(PATProcessor_t processor); #endif dvbstreamer-2.1.0/include/pids.h000077500000000000000000000055671217721213100166000ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA pids.h Manage PIDs. */ #ifndef _PIDS_H #define _PIDS_H #include #ifndef _DVBPSI_DESCRIPTOR_H_ #include #endif #include "types.h" #include "multiplexes.h" #include "services.h" #define PID_MASK (0x1fff) #define PID_STUFFING (0x1fff) #define PID_ALL (0x2000) #define PID_INVALID (0xFFFF) /** * Structure describing a PID used by a program. */ typedef struct StreamInfo_t { int pid; /**< PID in question. */ int type; /**< Type of data this PID is used to transmit. */ dvbpsi_descriptor_t *descriptors; /**< Linked list of descriptors for this stream */ }StreamInfo_t; /** * Structure used to store a collection of streams for a specific program. */ typedef struct StreamInfoList_t { int nrofStreams; /**< Number of streams in the streams array */ StreamInfo_t streams[0]; /**< Array of streams. */ }StreamInfoList_t; /** * Structure describing a program (MPEG2). */ typedef struct ProgramInfo_s { dvbpsi_descriptor_t *descriptors; /**< Linked list of descriptors from PMT */ int pcrPID; /**< PCR PID */ StreamInfoList_t *streamInfoList; /**< List of streams for this program */ }ProgramInfo_t; /** * Create a ProgramInfo object with the specified number of entries for streams. * @param nrofStreams Number of streams to allocate. * @return A new ProgramInfo_t structure or null. */ ProgramInfo_t *ProgramInfoNew(int nrofStreams); /** * Set the ProgramInfo for the specified service. * * @param service The service the pids belong to. * @param info The program info to set for the service. * @return 0 on success otherwise an sqlite3 error code. */ int ProgramInfoSet(Service_t *service, ProgramInfo_t *info); /** * Retrieve the ProgramInfo for the specified service. * @param service The service to retrieve the pids for. * @return A ProgramInfo_t structure or null if no PIDs could be retreieved. */ ProgramInfo_t *ProgramInfoGet(Service_t *service); /** * Remove all pids for the specified service. * @param service The service to remove pids from. * @return 0 on success otherwise an sqlite3 error code. */ int ProgramInfoRemove(Service_t *service); #endif dvbstreamer-2.1.0/include/plugin.h000077500000000000000000000315301217721213100171240ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA plugin.h Plugin Interface structures and macros. */ #ifndef _PLUGIN_H #define _PLUGIN_H /* Annoyingly libdvbpsi causes a preprocessor warning when its header files are included more than once! */ #ifndef _DVBPSI_DVBPSI_H_ #include #endif #ifndef _DVBPSI_DESCRIPTOR_H_ #include #endif #ifndef _DVBPSI_PSI_H_ #include #endif #ifndef _DVBPSI_PAT_H_ #include #endif #ifndef _DVBPSI_PMT_H_ #include #endif #ifndef _DVBPSI_DEMUX_H_ #include #endif #ifndef _DVBPSI_SDT_H_ #include #endif #include "dvbpsi/datetime.h" #include "dvbpsi/nit.h" #include "dvbpsi/tdttot.h" #include "dvbpsi/atsc/mgt.h" #include "dvbpsi/atsc/stt.h" #include "dvbpsi/atsc/vct.h" #include "config.h" #include "types.h" #include "ts.h" #include "commands.h" #include "events.h" #include "deliverymethod.h" /** * @defgroup Plugin Plugin Interface * @{ */ /** * Constant for No Feature, use to end a list of features. */ #define PLUGIN_FEATURE_TYPE_NONE 0x00 /** * Constant for Event Listener callback. */ #define PLUGIN_FEATURE_TYPE_EVENT_LISTENER 0x01 /** * Constant for a PAT processor plugin feature. */ #define PLUGIN_FEATURE_TYPE_PATPROCESSOR 0x02 /** * Constant for a PMT processor plugin feature. */ #define PLUGIN_FEATURE_TYPE_PMTPROCESSOR 0x03 /** * Constant for a Delivery Method plugin feature. */ #define PLUGIN_FEATURE_TYPE_DELIVERYMETHOD 0x04 /** * Constant for a SDT processor plugin feature. */ #define PLUGIN_FEATURE_TYPE_SDTPROCESSOR 0x05 /** * Constant for a NIT processor plugin feature. */ #define PLUGIN_FEATURE_TYPE_NITPROCESSOR 0x06 /** * Constant for a TDT/TOT processor plugin feature. */ #define PLUGIN_FEATURE_TYPE_TDTPROCESSOR 0x07 /** * Constant for a MGT processor plugin feature. */ #define PLUGIN_FEATURE_TYPE_MGTPROCESSOR 0x08 /** * Constant for a STT processor plugin feature. */ #define PLUGIN_FEATURE_TYPE_STTPROCESSOR 0x09 /** * Constant for a VCT processor plugin feature. */ #define PLUGIN_FEATURE_TYPE_VCTPROCESSOR 0x0A /** * Constant for the plugin installed feature. */ #define PLUGIN_FEATURE_TYPE_INSTALL 0xFF typedef struct PluginEventListenerDetails_s { char *name; EventListener_t callback; void *arg; }PluginEventListenerDetails_t; /** * Function pointer to function to call when a new PAT arrives. * For use with the PLUGIN_FEATURE_TYPE_PATPROCESSOR feature type, only 1 per * plugin is expected (allowed). */ typedef void (*PluginPATProcessor_t)(dvbpsi_pat_t* newpat); /** * Function pointer to function to call when a new PMT arrives. * For use with the PLUGIN_FEATURE_TYPE_PMTPROCESSOR feature type, only 1 per * plugin is expected (allowed). */ typedef void (*PluginPMTProcessor_t)(dvbpsi_pmt_t* newpmt); /** * Function pointer to function to call when a new SDT arrives. * For use with the PLUGIN_FEATURE_TYPE_SDTPROCESSOR feature type, only 1 per * plugin is expected (allowed). */ typedef void (*PluginSDTProcessor_t)(dvbpsi_sdt_t* newsdt); /** * Function pointer to function to call when a new NIT arrives. * For use with the PLUGIN_FEATURE_TYPE_NITPROCESSOR feature type, only 1 per * plugin is expected (allowed). */ typedef void (*PluginNITProcessor_t)(dvbpsi_nit_t* newnit); /** * Function pointer to function to call when a new TDT/TOT arrives. * For use with the PLUGIN_FEATURE_TYPE_TDTPROCESSOR feature type, only 1 per * plugin is expected (allowed). */ typedef void (*PluginTDTProcessor_t)(dvbpsi_tdt_tot_t* newtdttot); /** * Function pointer to function to call when a new MGT arrives. * For use with the PLUGIN_FEATURE_TYPE_MGTPROCESSOR feature type, only 1 per * plugin is expected (allowed). */ typedef void (*PluginMGTProcessor_t)(dvbpsi_atsc_mgt_t* newmgt); /** * Function pointer to function to call when a new STT arrives. * For use with the PLUGIN_FEATURE_TYPE_STTPROCESSOR feature type, only 1 per * plugin is expected (allowed). */ typedef void (*PluginSTTProcessor_t)(dvbpsi_atsc_stt_t* newstt); /** * Function pointer to function to call when a new VCT arrives. * For use with the PLUGIN_FEATURE_TYPE_VCTPROCESSOR feature type, only 1 per * plugin is expected (allowed). */ typedef void (*PluginVCTProcessor_t)(dvbpsi_atsc_vct_t* newvct); /** * Function pointer to function to call after the primary service * filter is updated. The newMultiplex argument will contain the multiplex currently * being used and the newService will contain the service now being filtered. * For use with the PLUGIN_FEATURE_TYPE_CHANNELCHANGED feature type, only 1 per * plugin is expected (allowed). */ typedef void (*PluginChannelChanged_t)(Multiplex_t *newMultiplex, Service_t *newService); /** * Function pointer to a function to call when the plugin is (un)installed. * installed is TRUE when the plugin is installed and FALSE when being uninstalled. */ typedef void (*PluginInstallCallback_t)(bool installed); /** * Structure used to describe a single 'feature' of a plugin. */ typedef struct PluginFeature_t { int type; /**< Type of this feature. Use PLUGIN_FEATURE_TYPE_NONE to end a list.*/ union{ PluginEventListenerDetails_t eventDetails; DeliveryMethodHandler_t dmHandler; PluginPMTProcessor_t patCB; PluginPMTProcessor_t pmtCB; PluginSDTProcessor_t sdtCB; PluginNITProcessor_t nitCB; PluginTDTProcessor_t tdtCB; PluginMGTProcessor_t mgtCB; PluginSTTProcessor_t sttCB; PluginVCTProcessor_t vctCB; PluginChannelChanged_t channelChangeCB; PluginInstallCallback_t installCB; }details; }PluginFeature_t; /** * Constant for a plugin that is just for use when processing DVB signals. */ #define PLUGIN_FOR_DVB 0x01 /** * Constant for a plugin this is just for use when processing ATSC signals. */ #define PLUGIN_FOR_ATSC 0x02 /** * Constant for a plugin that should be loaded for any type of signal. */ #define PLUGIN_FOR_ALL 0xff /** * Structure used to define a plugin. * To create a plugin the shared object should have a global variable of this * type called PluginInterface. * @code * * Command_t myCommands[] = {..., * {NULL, FALSE, 0, 0, NULL,NULL} * }; * * PluginFeature_t myFeatures[] = {..., * {PLUGIN_FEATURE_TYPE_NONE, NULL} * }; * * Plugin_t PluginInterface = { * DVBSTREAMER_VERSION, * "Example", * "0.1", * "Example Plugin", * "An Author", * myCommands, * myFeatures * }; * @endcode */ typedef struct Plugin_t { unsigned int requiredVersion; /**< Version of DVBStreamer required to run this plugin */ unsigned int pluginFor; /**< What type of transport stream this plugin is meant for. */ char *name; /**< Name of the plugin */ char *version; /**< String describing the version of the plugin */ char *description; /**< Description of the plugin */ char *author; /**< Author/Contact address for bugs */ Command_t *commands; /**< NULL terminated array of commands or NULL for no commands */ PluginFeature_t *features; /**< A PLUGIN_FEATURE_NONE terminated list of features or NULL for no features. */ }Plugin_t; /** * Simple macro to help in defining the Plugin Interface with only commands. */ #define PLUGIN_INTERFACE_C(_for, _name, _version, _desc, _author) \ Plugin_t PluginInterface = { DVBSTREAMER_VERSION, _for, _name, _version, _desc, _author, PluginCommands, NULL} /** * Simple macro to help in defining the Plugin Interface with only features. */ #define PLUGIN_INTERFACE_F(_for, _name, _version, _desc, _author) \ Plugin_t PluginInterface = { DVBSTREAMER_VERSION, _for, _name, _version, _desc, _author, NULL, PluginFeatures} /** * Simple macro to help in defining the Plugin Interface with both commands and * features */ #define PLUGIN_INTERFACE_CF(_for, _name, _version, _desc, _author) \ Plugin_t PluginInterface = { DVBSTREAMER_VERSION, _for, _name, _version, _desc, _author, PluginCommands, PluginFeatures} /** * Use this macro to define the commands a plugin provides. * This should be used before PLUGININTERFACE. * for example: * @code * PLUGIN_COMMANDS({"example", TRUE, 1, 1,"An example command", "example \nPrint out ",ExampleCommand}); * PLUGININTERFACE("Example", "0.1", "An example plugin", "A Coder"); * @endcode */ #define PLUGIN_COMMANDS(_commands...) \ static Command_t PluginCommands[] = {\ _commands,\ COMMANDS_SENTINEL\ } /** * Use this macro to define the features a plugin provides. * This should be used before PLUGININTERFACE. * for example: * @code * PLUGIN_FEATURES( * PLUGIN_FEATURE_FILTER(myfilterfeature) * ); * PLUGININTERFACE("Example", "0.1", "An example plugin", "A Coder"); * @endcode * @param _features A list of features provided by this plugin. */ #define PLUGIN_FEATURES(_features...) \ static PluginFeature_t PluginFeatures[] = {\ _features,\ {PLUGIN_FEATURE_TYPE_NONE, .details.installCB=NULL}\ } /** * Simple macro to define an event listener feature. * @param _details A PluginEventListenerDetails_t containing the event name and * the callback to call when the event occurs. */ #define PLUGIN_FEATURE_EVENT_LISTENER(_event, _listener, _arg)\ {.type=PLUGIN_FEATURE_TYPE_EVENT_LISTENER, .details.eventDetails={_event, _listener, _arg}} /** * Simple macro to define a PAT Processor feature. * @param _processor Function to call when a new PAT arrives. */ #define PLUGIN_FEATURE_PATPROCESSOR(_processor)\ {.type=PLUGIN_FEATURE_TYPE_PATPROCESSOR, .details.patCB=_processor} /** * Simple macro to define a PMT Processor feature. * @param _processor Function to call when a new PMT arrives. */ #define PLUGIN_FEATURE_PMTPROCESSOR(_processor)\ {.type=PLUGIN_FEATURE_TYPE_PMTPROCESSOR, .details.pmtCB=_processor} /** * Simple macro to define a delivery method feature. * @param _method A DeliveryMethod_t instance (will be dereferenced). */ #define PLUGIN_FEATURE_DELIVERYMETHOD(_canHandle, _newInstance)\ {.type=PLUGIN_FEATURE_TYPE_DELIVERYMETHOD, .details.dmHandler={_canHandle,_newInstance}} /** * Simple macro to define a Channel Changed feature. * @param _cchanged Function to call when the Primary service filter is updated. */ #define PLUGIN_FEATURE_CHANNELCHANGED(_cchanged)\ {.type=PLUGIN_FEATURE_TYPE_CHANNELCHANGED, .details.channelChangeCB =_cchanged} /** * Simple macro to define a SDT Processor feature. * @param _processor Function to call when a new SDT arrives. */ #define PLUGIN_FEATURE_SDTPROCESSOR(_processor)\ {.type=PLUGIN_FEATURE_TYPE_SDTPROCESSOR, .details.sdtCB=_processor} /** * Simple macro to define a NIT Processor feature. * @param _processor Function to call when a new NIT arrives. */ #define PLUGIN_FEATURE_NITPROCESSOR(_processor)\ {.type=PLUGIN_FEATURE_TYPE_NITPROCESSOR, .details.nitCB=_processor} /** * Simple macro to define a TDT/TOT Processor feature. * @param _processor Function to call when a new TDT or TOT arrives. */ #define PLUGIN_FEATURE_TDTPROCESSOR(_processor)\ {.type=PLUGIN_FEATURE_TYPE_TDTPROCESSOR, .details.tdtCB=_processor} /** * Simple macro to define a MGT Processor feature. * @param _processor Function to call when a new MGT arrives. */ #define PLUGIN_FEATURE_MGTPROCESSOR(_processor)\ {.type=PLUGIN_FEATURE_TYPE_MGTPROCESSOR, .details.mgtCB=_processor} /** * Simple macro to define a STT Processor feature. * @param _processor Function to call when a new STT arrives. */ #define PLUGIN_FEATURE_STTPROCESSOR(_processor)\ {.type=PLUGIN_FEATURE_TYPE_STTPROCESSOR, .details.sttCB=_processor} /** * Simple macro to define a VCT Processor feature. * @param _processor Function to call when a new VCT arrives. */ #define PLUGIN_FEATURE_VCTPROCESSOR(_processor)\ {.type=PLUGIN_FEATURE_TYPE_VCTPROCESSOR, .details.vctCB=_processor} /** * Simple macro to define an install callback. * @param _callback A PluginInstallCallback_t to call when the plugin is (un)installed. */ #define PLUGIN_FEATURE_INSTALL(_callback)\ {.type=PLUGIN_FEATURE_TYPE_INSTALL, .details.installCB=_callback} /** @} */ #endif dvbstreamer-2.1.0/include/pluginmgr.h000077500000000000000000000015531217721213100176340ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA pluginmgr.c Plugin Manager functions. */ #ifndef _PLUGINMGR_H #define _PLUGINMGR_H int PluginManagerInit(void); void PluginManagerDeInit(void); #endif dvbstreamer-2.1.0/include/pmtprocessor.h000066400000000000000000000020441217721213100203610ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA pmtprocessor.h Process Program Map Tables and update the services information and PIDs. */ #ifndef _PMTPROCESSOR_H #define _PMTPROCESSOR_H #include "plugin.h" #include "ts.h" typedef struct PMTProcessor_s *PMTProcessor_t; PMTProcessor_t PMTProcessorCreate(TSReader_t *reader); void PMTProcessorDestroy(PMTProcessor_t processor); #endif dvbstreamer-2.1.0/include/properties.h000077500000000000000000000123651217721213100200270ustar00rootroot00000000000000/* Copyright (C) 2008 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA properties.h Expose internal properties to the user. */ #ifndef _PROPERTIES_H #define _PROPERTIES_H #include "types.h" #include "stdint.h" #define PROPERTIES_PATH_MAX 255 #define PROPERTIES_TABLE_COLUMNS_MAX 10 typedef enum PropertyType_e { PropertyType_None, /**< Special internal type, do not use. */ /* Standard types */ PropertyType_Int, /**< 32bit Integer */ PropertyType_Float, /**< Floating point (double)*/ PropertyType_Boolean, /**< True/False Value */ PropertyType_String, /**< Null terminated string */ PropertyType_Char, /**< Single character */ /* Special types */ PropertyType_PID, /**< 12Bit unsigned integer, special value of 8192 allowed for all PIDs*/ PropertyType_IPAddress, /**< IPv4 or IPv6 IP address/hostname */ }PropertyType_e; typedef void *PropertiesEnumerator_t; #define PropertiesEnumMoreEntries(_pos) ((_pos) != NULL) typedef struct PropertyValue_s{ PropertyType_e type; union { int integer; double fp; bool boolean; char *string; char ch; uint16_t pid; }u; }PropertyValue_t; typedef struct PropertyInfo_s { char *name; char *desc; PropertyType_e type; bool readable; bool writeable; bool hasChildren; }PropertyInfo_t; typedef int (*PropertySimpleAccessor_t)(void *userArg, PropertyValue_t *value); #define PROPERTY_MAX_PATH_ELEMENTS 256 typedef struct PropertyPathElements_s { int nrofElements; char *elements[PROPERTY_MAX_PATH_ELEMENTS]; }PropertyPathElements_t; /** * Initialise properties module. * @return 0 on success. */ int PropertiesInit(void); /** * De-initialise properties module. * @return 0 on success. */ int PropertiesDeInit(void); int PropertiesAddProperty(const char *path, const char *name, const char *desc, PropertyType_e type, void *userArg, PropertySimpleAccessor_t get, PropertySimpleAccessor_t set); int PropertiesRemoveProperty(const char *path, const char *name); int PropertiesRemoveAllProperties(const char *path); int PropertiesSet(char *path, PropertyValue_t *value); int PropertiesGet(char *path, PropertyValue_t *value); int PropertiesSetStr(char *path, char *value); int PropertiesEnumerate(char *path, PropertiesEnumerator_t *pos); PropertiesEnumerator_t PropertiesEnumNext(PropertiesEnumerator_t pos); void PropertiesEnumGetInfo(PropertiesEnumerator_t pos, PropertyInfo_t *propInfo); int PropertiesGetInfo(char *path, PropertyInfo_t *propInfo); /** * Simple properties getter that returns the value stored at userArg. * For use as the get parameter in ProperiesAddProperty for simple values that * don't need computing or locking. * * @param userArg Pointer to value to return. (for strings this must be the address of the pointer to the string (ie char**)) * @param value Pointer to location to store value. * @return 0 if the property type was supported, -1 otherwise. */ int PropertiesSimplePropertyGet(void *userArg, PropertyValue_t *value); /** * Simple properties setter that sets the value stored at userArg. * For use as the set parameter in ProperiesAddProperty for simple values that * don't need computing or locking. * * @param userArg Pointer to value to set. (for strings this must be the address of the pointer to the string (ie char**)) * @param value Pointer to location to store value. * @return 0 if the property type was supported, -1 otherwise. */ int PropertiesSimplePropertySet(void *userArg, PropertyValue_t *value); /** * Mode flag indicating the simple property is readable. */ #define SIMPLEPROPERTY_R 1 /** * Mode flag indicating the simple property is writeable. */ #define SIMPLEPROPERTY_W 2 /** * Mode flag indicating the simple property is both readable and writeable. */ #define SIMPLEPROPERTY_RW (SIMPLEPROPERTY_R|SIMPLEPROPERTY_W) /** * Helper macro to a add simple property accessor. * @param path Path to the parent to add this property to. * @param name Name of the property to add. * @param desc Description of this property. * @param type Type of this property. * @param valueptr Pointer to the location the value of this property is stored. * @param mode Whether this property is readable/writable (see SIMPLEPROPTERY_[R/W/RW]). * @return 0 on success, 1 otherwise. */ #define PropertiesAddSimpleProperty(path, name, desc, type, valueptr, mode) \ PropertiesAddProperty(path, name, desc, type, valueptr, \ ((mode) & SIMPLEPROPERTY_R)?PropertiesSimplePropertyGet:NULL,\ ((mode) & SIMPLEPROPERTY_W)?PropertiesSimplePropertySet:NULL) #endif dvbstreamer-2.1.0/include/psipprocessor.h000077500000000000000000000017551217721213100205470ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA psipprocessor.h Process ATSC PSIP Tables. */ #ifndef _PSIPPROCESSOR_H #define _PSIPPROCESSOR_H #include "ts.h" typedef struct PSIPProcessor_s *PSIPProcessor_t; PSIPProcessor_t PSIPProcessorCreate(TSReader_t *tsfilter); void PSIPProcessorDestroy(PSIPProcessor_t processor); #endif dvbstreamer-2.1.0/include/remoteintf.h000066400000000000000000000020131217721213100177710ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA remoteintf.h Remote Interface functions. */ #ifndef _REMOTEINTF_H #define _REMOTEINTF_H #include "types.h" #define REMOTEINTERFACE_PORT 54197 // 0xd3b5 ~= DVBS int RemoteInterfaceInit(int adapter, char *streamerName, char *bindAddress, char *username, char *password); void RemoteInterfaceDeInit(void); #endif dvbstreamer-2.1.0/include/sdtprocessor.h000066400000000000000000000020161217721213100203520ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA sdtprocessor.h Process Service Description Tables and update the services information. */ #ifndef _SDTPROCESSOR_H #define _SDTPROCESSOR_H #include "ts.h" typedef struct SDTProcessor_s *SDTProcessor_t; SDTProcessor_t SDTProcessorCreate(TSReader_t *reader); void SDTProcessorDestroy(SDTProcessor_t processor); #endif dvbstreamer-2.1.0/include/servicefilter.h000077500000000000000000000107301217721213100204730ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA servicefilter.h Filter all packets for a service include the PMT, rewriting the PAT sent out in the output to only include this service. */ #ifndef _SERVICFILTER_H #define _SERVICFILTER_H #include "ts.h" #include "deliverymethod.h" /** * @defgroup ServiceFilter Service Filter management * * This module exports the following events: * - servicefilter.added - Is invoked when a filter is created. * - servicefilter.servicechanged - Is invoked when the service the filter is filtering is set. * - servicefilter.removed - Is invoked when a filter is destroyed. * * @{ */ /** * String constant used to signify that a TSFilterGroup_t instance is being used as a * service filter. */ extern char ServiceFilterGroupType[]; typedef struct ServiceFilter_s *ServiceFilter_t; /** * @internal * Initialise the service filter module. * @return 0 on success, anything else on error. */ int ServiceFilterInit(void); /** * @internal * De-initialise the service filter module. * @return 0 on success, anything else on error. */ int ServiceFilterDeInit(void); /** * Creates a new Service Filter linked to the supplied TS Reader. * @param reader The TS Reader to link the ServiceFilter to. * @param name The name of this filter. * @return A new ServiceFilter_t instance that will be used to filter PIDs. */ ServiceFilter_t ServiceFilterCreate(TSReader_t *reader, char *name); /** * Destroy a service filter created by ServiceFilterCreate(). * @param filter The service filter to destroy. */ void ServiceFilterDestroy(ServiceFilter_t filter); /** * Destroy all service filters linked to the specified TS Filter. * @param reader The TS Reader to remove all ServiceFilters from. */ void ServiceFilterDestroyAll(TSReader_t *reader); char *ServiceFilterNameGet(ServiceFilter_t filter); /** * Set the service filtered by the specified service filter. * @param filter The service filter to set the service being filtered on or * NULL to stop filtering. * @param service The new service to filter. */ void ServiceFilterServiceSet(ServiceFilter_t filter, Service_t *service); /** * Get the service being filtered by the specified service filter. * @param filter The service filter to retrieve the service from. * @return A Service_t instance or NULL if no service is being filtered. */ Service_t *ServiceFilterServiceGet(ServiceFilter_t filter); /** * Set whether to filter out any PIDs that are not being used by Audio/Video or * subtitle (AVS) streams. This also rewrites the PMT (when enabled) to contain * only the first available video/audio/subtitle PIDs. * @param filter The service filter to change the AVS only setting on. * @param enable TRUE to enable AVS only, FALSE to disable and filter all PIDS * related to the service. */ void ServiceFilterAVSOnlySet(ServiceFilter_t filter, bool enable); /** * Get whether the specified service filter is only filtering Audio/Video or * subtitle PIDs. * @param filter The service filter to check. * @return TRUE if only AVS PIDs are being filtered, FALSE otherwise. */ bool ServiceFilterAVSOnlyGet(ServiceFilter_t filter); /** * Set the delivery method associated with the specified service filter. * @param filter The service filter to change the delivery method of. * @param instance The new delivery method to set. */ void ServiceFilterDeliveryMethodSet(ServiceFilter_t filter, DeliveryMethodInstance_t *instance); /** * Get the delivery method associated with the specified service filter. * @param filter The service filter to interrogate. * @return A DeliveryMethodInstance_t or NULL if not delivery method has been set. */ DeliveryMethodInstance_t * ServiceFilterDeliveryMethodGet(ServiceFilter_t filter); ServiceFilter_t ServiceFilterFindFilter(TSReader_t *reader, const char *name); /**@}*/ #endif dvbstreamer-2.1.0/include/services.h000066400000000000000000000310401217721213100174420ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA services.h Manage services and PIDs. */ #ifndef _SERVICES_H #define _SERVICES_H #include #ifndef _DVBPSI_DESCRIPTOR_H_ #include #endif #include "types.h" #include "objects.h" #include "dbase.h" #include "events.h" #include "multiplexes.h" /** * @defgroup Service Service information * Provides access to the underlying database to add/remove and modify services. * * \section events Events Exported * * \li \ref added Sent when a new service is added to the database. * \li \ref deleted Sent when a service is removed from the database. * * \subsection added Services.Added * This event is fired after a service has been added to the database. \n * \par * \c payload = A Service_t representing the service that has been added. * * \subsection deleted Services.Deleted * This event is fired before a service is removed from the database. \n * \par * \c payload = A Service_t representing the service that is to be removed. * @{ */ /** * Enumeration to describe the type of a service. */ typedef enum { ServiceType_TV, /**< Digital TV service type. */ ServiceType_Radio, /**< Digital Radio service type. */ ServiceType_Data, /**< Digital Data service type. */ ServiceType_Unknown /**< Service type not known. */ }ServiceType; /** * Structure describing a digital TV service. */ typedef struct Service_t { char *name; /**< Name of the service. */ int multiplexUID; /**< Multiplex frequency this service is broadcast on. */ int networkId; /**< Network ID the service is part of */ int tsId; /**< Transport stream ID the service is part of */ int id; /**< Service/Program ID of the service. */ int source; /**< Source id of this service (for DVB this is the same as the service ID for ATSC this is the channels source id) */ bool conditionalAccess; /**< Whether 1 or more streams in this service are controlled by CA */ ServiceType type; /**< The type of this service (TV, Radio, Data ...) */ int pmtPID; /**< PID the PMT for this service is sent on. */ char *provider; /**< Provider of the service */ char *defaultAuthority; /**< TVAnytime default authority for this service. */ } Service_t; /** * A collection of service. */ typedef struct ServiceList_s { unsigned int nrofServices; Service_t *services[0]; }ServiceList_t; /** * Handle for enumerating services. */ typedef void *ServiceEnumerator_t; /** * Macro to compare 2 service structures. */ #define ServiceAreEqual(_service1, _service2) \ (((_service1)->multiplexUID == (_service2)->multiplexUID) && \ ((_service1)->id == (_service2)->id)) /** * Initialise the service module for use. * @return 0 on success. */ int ServiceInit(void); /** * Release resources used by the service module. * @return 0 on success. */ int ServiceDeInit(void); /** * Return the number of services in the database. * @return The number of services in the database. */ #define ServiceCount() DBaseCount(SERVICES_TABLE, NULL) /** * Remove a service from the database. * @param service The service to remove from the database. * @return 0 on success, otherwise an SQLite error code. */ int ServiceDelete(Service_t *service); /** * Remove all service for a specific multiplex from the database. * @param mux The multiplex to remove all services for. * @return 0 on success, otherwise an SQLite error code. */ int ServiceDeleteAll(Multiplex_t *mux); /** * Add a service to the database. * @param multiplexuid The multiplex the service is broadcast on. * @param name Name of the service. * @param id The service/program id of the service. * @param source The service/channels source id. * @return 0 on success, otherwise an SQLite error code. */ int ServiceAdd(int multiplexuid, char *name, int id, int source); /** * Set the PMT PID for the given service. * @param service The service to update. * @param pmtpid The new PID of the PMT. * @return 0 on success, otherwise an SQLite error code. */ int ServicePMTPIDSet(Service_t *service, int pmtpid); /** * Set the service name for the given service. * @param service The service to update. * @param name The new name of the service. * @return 0 on success, otherwise an SQLite error code. */ int ServiceNameSet(Service_t *service, char *name); /** * Set the service name for the given service. * @param service The service to update. * @param source The new source id of the service. * @return 0 on success, otherwise an SQLite error code. */ int ServiceSourceSet(Service_t *service, int source); /** * Set whether the service is conditional access of not. * @param service The service to update. * @param ca The new state of the service * @return 0 on success, otherwise an SQLite error code. */ int ServiceConditionalAccessSet(Service_t *service, bool ca); /** * Set the type of the specified service. * @param service The service to update. * @param type The new type of the service * @return 0 on success, otherwise an SQLite error code. */ int ServiceTypeSet(Service_t *service, ServiceType type); /** * Set the service provider name for the given service. * @param service The service to update. * @param provider The new provider name of the service. * @return 0 on success, otherwise an SQLite error code. */ int ServiceProviderSet(Service_t *service, char *provider); /** * Set the default authority for the given service. * @param service The service to update. * @param defaultAuthority The new authority of the service. * @return 0 on success, otherwise an SQLite error code. */ int ServiceDefaultAuthoritySet(Service_t *service, char *defaultAuthority); /** * Find a service based either on service name or fully qualified id. * @see ServiceFindName() * @see ServiceFindFQIDStr() * @param name Service name or fully qualified id. * @return A service structure or NULL if the service was not found. */ Service_t *ServiceFind(char *name); /** * Find the service with the given name. * The returned service should be released with ServiceRefDec. * @param name The name of the service to find. * @return A service structure or NULL if the service was not found. */ Service_t *ServiceFindName(char *name); /** * Find the service with the given id. * The returned service should be released with ServiceRefDec. * @param multiplex The multiplex the service is broadcast on. * @param id The id of the service to find. * @return A service structure or NULL if the service was not found. */ Service_t *ServiceFindId(Multiplex_t *multiplex, int id); /** * Find the service based on the fully qualified ID. * The returned service should be released with ServiceRefDec. * @param networkId Network ID of the multiplex this service is on. * @param tsId TS ID of the multiplex this service is on. * @param serviceId ID of the service to find. * @return A service structure or NULL if the service was not found. */ Service_t *ServiceFindFQID(uint16_t networkId, uint16_t tsId, uint16_t serviceId); /** * Find the service based on the fully qualified ID string. * A fully qualified ID string is in the form "..", * where all the IDs are 16bit hex numbers. * The returned service should be released with ServiceRefDec. * @param FQIdStr String to extract the network, ts and service IDs from. * @return A service structure or NULL if the service was not found. */ Service_t *ServiceFindFQIDStr(char *FQIdStr); /** * Retrieve an enumerator for the entire service table. * @return A service enumerator or NULL if there is not enough memory. * @deprecated Please use ServiceListAll(). */ ServiceEnumerator_t ServiceEnumeratorGet(); /** * Retrieve a List_t object containing all services in the service table. * @return A List_t object of Service_t objects, use ObjectListFree() to * free the list and the Service objects. */ List_t *ServiceListAll(); /** * Retrieve an enumerator for the specified multiplex. * @param multiplex The multiplex the service is broadcast on. * @return A service enumerator or NULL if there is not enough memory. * @deprecated Please use ServiceListForMultiplex. */ ServiceEnumerator_t ServiceEnumeratorForMultiplex(Multiplex_t *multiplex); /** * Retrieve a List_t object containing all services for the specified multiplex. * @param multiplex The multiplex the service is broadcast on. * @return A List_t object of Service_t objects, use ObjectListFree() to * free the list and the Service objects. */ List_t *ServiceListForMultiplex(Multiplex_t * multiplex); /** * Retrieve an enumerator for the names that match the query string. * This function uses the SQL LIKE syntax for the query string. * @param query An SQL LIKE formated string of the name to search for. * @return A service enumerator or NULL if there is not enough memory. * @deprecated Please use ServiceListForNameLike. */ ServiceEnumerator_t ServiceQueryNameLike(char *query); /** * Retrieve a List_t object containing all services with names that match the * query string. * This function uses the SQL LIKE syntax for the query string. * @param query An SQL LIKE formated string of the name to search for. * @return A List_t object of Service_t objects, use ObjectListFree() to * free the list and the Service objects. */ List_t *ServiceListForNameLike(char * query); /** * Free an enumerator. */ void ServiceEnumeratorDestroy(ServiceEnumerator_t enumerator); /** * Retrieve the next service from an enumerator. * The returned service should be released with ServiceRefDec. * @param enumerator The enumerator to retrieve the next service from. * @return A Service_t structure or NULL if there are no more services (with * the reference count set to 1) * @deprecated Please use the ServiceList* equivalent functions. */ Service_t *ServiceGetNext(ServiceEnumerator_t enumerator); #define SERVICE_ID_STRING_LENGTH (4 + 1 + 4 + 1 + 4 + 1) /** * Retreive a string containing the NetID.TSID.ServiceId. * @param service The service to return the id string for. * @param buffer The buffer to store the string in (size must be >=SERVICE_ID_STRING_LENGTH) or * NULL to allocate a buffer of size SERVICE_ID_STRING_LENGTH. * @return Pointer to the buffer containing the string or NULL. */ char * ServiceGetIDStr(Service_t * service, char * buffer); /** * Retrieve a string containing the DVB Id (as returned by ServiceGetIDStr()) * followed by ' : ' and the name of the service in quotes. * * For example: * 0001.0002.0003 : "A Channel" * * @param service The service to return the id string for. * @param buffer The buffer to store the string in (size must be * >= (SERVICE_ID_STRING_LENGTH + 5 + service name length)) or NULL to allocate * a buffer of the correct size. * @return Pointer to the buffer containing the string or NULL. */ char *ServiceGetIDNameStr(Service_t *service, char *buffer); /** * Create a new service object. */ #define ServiceNew() (Service_t*)ObjectCreateType(Service_t) /** * Increment the references to the specified service object. * @param __service The service instance to increment the reference count of. */ #define ServiceRefInc(__service) \ do{ \ if ((__service)) \ { \ ObjectRefInc(__service); \ } \ }while(0) /** * Decrement the references of the specified service object. If the reference * count reaches 0 the instance is free'd. * @param __service The service instance to decrement the reference count of. */ #define ServiceRefDec(__service) \ do{ \ if ((__service)) \ { \ ObjectRefDec(__service); \ } \ }while(0) /** * Use as the toString parameter when registering an event where the payload will * be a service object. */ int ServiceEventToString(yaml_document_t *document, Event_t event,void * payload); /** @} */ #endif dvbstreamer-2.1.0/include/standard/000077500000000000000000000000001217721213100172505ustar00rootroot00000000000000dvbstreamer-2.1.0/include/standard/atsc.h000066400000000000000000000017321217721213100203560ustar00rootroot00000000000000/* Copyright (C) 2009 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA atsc.h ATSC Broadcast standard. */ #ifndef _STANDARD_ATSC_H #define _STANDARD_ATSC_H #include "ts.h" extern EventSource_t ATSCEventSource; extern char ATSCFilterType[]; int ATSCStandardInit(TSReader_t *reader); int ATSCStandardDeinit(TSReader_t *reader); #endif dvbstreamer-2.1.0/include/standard/dvb.h000066400000000000000000000017221217721213100201760ustar00rootroot00000000000000/* Copyright (C) 2009 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dvb.h DVB Broadcast standard. */ #ifndef _STANDARD_DVB_H #define _STANDARD_DVB_H #include "ts.h" extern EventSource_t DVBEventSource; extern char DVBFilterType[]; int DVBStandardInit(TSReader_t *reader); int DVBStandardDeinit(TSReader_t *reader); #endif dvbstreamer-2.1.0/include/standard/mpeg2.h000066400000000000000000000017661217721213100204450ustar00rootroot00000000000000/* Copyright (C) 2009 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA mpeg2.h MPEG2 Broadcast standard. */ #ifndef _STANDARD_MPEG2_H #define _STANDARD_MPEG2_H #include "events.h" #include "ts.h" extern EventSource_t MPEG2EventSource; extern char MPEG2FilterType[]; int MPEG2StandardInit(TSReader_t *reader); int MPEG2StandardDeinit(TSReader_t *reader); #endif dvbstreamer-2.1.0/include/tdtprocessor.h000066400000000000000000000020051217721213100203510ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA tdtprocessor.h Process Time/Date and Time offset Tables. */ #ifndef _TDTPROCESSOR_H #define _TDTPROCESSOR_H #include "plugin.h" #include "ts.h" typedef struct TDTProcessor_s *TDTProcessor_t; TDTProcessor_t TDTProcessorCreate(TSReader_t *reader); void TDTProcessorDestroy(TDTProcessor_t processor); #endif dvbstreamer-2.1.0/include/ts.h000066400000000000000000000262331217721213100162550ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ts.h Transport stream processing and filter management. */ #ifndef _TS_H #define _TS_H #include #include #include #include "dvbpsi/dvbpsi.h" #include "types.h" #include "dvbadapter.h" #include "services.h" #include "multiplexes.h" #include "list.h" /*------ Transport Stream Packet Structures and macros ----*/ /** * @defgroup TSPacket Transport Stream Packet Access * @{ */ /** * Maximum number of pids in a transport stream. */ #define TS_MAX_PIDS 8192 /** * Constant for the size of a transport packet with out hamming code. */ #define TSPACKET_SIZE (188) /** * Structure representing an MPEG2 Transport Stream packet * with out hamming codes. */ typedef struct TSPacket_t { uint8_t header[4]; /**< Packet Header fields */ uint8_t payload[TSPACKET_SIZE - 4]; /**< Data contained in the packet */ } TSPacket_t; /** * Retrieves the PID of packet from the packet header * @param packet The packet to extract the PID from. * @return The PID of the packet as a 16bit integer. */ #define TSPACKET_GETPID(packet) \ (((((packet).header[1] & 0x1f) << 8) | ((packet).header[2] & 0xff))) /** * Sets the PID of the packet in the packet header. * @param packet The packet to update. * @param pid The new PID to set. */ #define TSPACKET_SETPID(packet, pid) \ do{ \ (packet).header[1] = ((packet).header[1] & 0xe0) | ((pid >> 8) & 0x1f); \ (packet).header[2] = pid & 0xff; \ }while(0) /** * Retrieves the packet sequence count. * @param packet The packet to extract the count from. * @return The packet sequence count as a 4 bit integer. */ #define TSPACKET_GETCOUNT(packet) \ ((packet).header[3] & 0x0f) /** * Sets the packet sequence count. * @param packet The packet to update. * @param count The new sequence count to set. */ #define TSPACKET_SETCOUNT(packet, count) \ ((packet).header[3] = ((packet).header[3] & 0xf0) | ((count) & 0x0f)) /** * Boolean test to determine whether this packet is the start of a payload. * @param packet The packet to check. */ #define TSPACKET_ISPAYLOADUNITSTART(packet) \ (((packet).header[1] & 0x40) == 0x40) /** * Boolean test to determine whether this packet is valid, transport_error_indicator * is not set. * @param packet The packet to check. * @return True if the packet is valid, false otherwise. */ #define TSPACKET_ISVALID(packet) \ (((packet).header[1] & 0x80) == 0x00) /** * Retrieves the priority field of the packet. * @param packet The packet to check. * @return The packet priority. */ #define TSPACKET_GETPRIORITY(packet) \ (((packet).header[1] & 0x20) >> 4) /** * Set the priority field of the packet. * @param packet The packet to update. * @param priority Either 1 or 0 to indicate that this is a priority packet. */ #define TSPACKET_SETPRIORITY(packet, priority) \ ((packet).header[1] = ((packet).header[1] & 0xdf) | (((priority) << 4) & 0x20)) /** * Retrieve whether the packet has an adaptation field. * @param packet The packet to check. * @return The adapatation field control flags. */ #define TSPACKET_GETADAPTATION(packet) \ (((packet).header[3] & 0x30) >> 4) /** * Set whether the packet has an adaptation field. * @param packet The packet to update. * @param adaptation The new adaptation field flags. */ #define TSPACKET_SETADAPTATION(packet, adaptation) \ ((packet).header[3] = ((packet).header[3] & 0xcf) | (((adaptation) << 4) & 0x30)) /** * Retrieves the adaptation field length. * @param packet The packet to check. * @return The length of the adaptation field. */ #define TSPACKET_GETADAPTATION_LEN(packet) \ ((packet).payload[0]) /**@}*/ /*---- Transport Stream Reader structure ----*/ /** * @defgroup TSReader Transport Stream Reader * @{ */ /** * Maximum number of packets to read from the DVB adapter in one go, */ #define TSREADER_MAX_PACKETS 20 typedef enum TSFilterEventType_e { TSFilterEventType_MuxChanged, TSFilterEventType_StructureChanged }TSFilterEventType_e; struct TSFilterGroup_t; typedef void (*TSFilterGroupEventCallback_t)(void *userArg, struct TSFilterGroup_t *group, TSFilterEventType_e event, void *details); typedef void (*TSPacketFilterCallback_t)(void *userArg, struct TSFilterGroup_t *group, TSPacket_t *packet); typedef struct TSPacketFilter_t { uint16_t pid; TSPacketFilterCallback_t callback; void *userArg; struct TSFilterGroup_t *group; struct TSPacketFilter_t *next; struct TSPacketFilter_t *flNext; }TSPacketFilter_t; typedef struct TSSectionFilter_t { uint16_t pid; int priority; dvbpsi_handle sectionHandle; struct TSFilterGroup_t *group; struct TSSectionFilter_t *next; }TSSectionFilter_t; #define TSSectFilterListFlags_PAYLOAD_START 1 #define TSSectFilterListFlags_PRIORITY_OVERRIDE 2 typedef struct TSSectionFilterList_t { uint16_t pid; uint32_t flags; int priority; List_t *filters; dvbpsi_handle sectionHandle; TSPacketFilter_t *packetFilter; struct TSReader_t *tsReader; }TSSectionFilterList_t; typedef struct TSFilterGroup_t { char *name; char *type; struct TSReader_t *tsReader; /**< TS Reader instance this filter group belongs to. */ TSFilterGroupEventCallback_t eventCallback; void *userArg; TSSectionFilter_t *sectionFilters; TSPacketFilter_t *packetFilters; volatile unsigned long long packetsProcessed; volatile unsigned long long sectionsProcessed; }TSFilterGroup_t; #define TSREADER_PID_ALL 8192 #define TSREADER_NROF_FILTERS 8193 #define TSREADER_PIDFILTER_BUCKETS 8 /** * Structure describing a Transport Stream Filter instance. */ typedef struct TSReader_t { bool quit; /**< Whether the filters thread should finish. */ DVBAdapter_t *adapter; /**< DVBAdapter packets should be read from */ bool enabled; /**< Whether packets should be read/processed */ pthread_mutex_t mutex; /**< Mutex used to protect access to this structure */ bool multiplexChanged; /**< Whether the multiplex has been changed. */ Multiplex_t *multiplex; /**< The multiplex the transport stream is coming from. */ bool tsStructureChanged; /**< Whether the underlying TS structure has changed. */ volatile unsigned long long totalPackets; /**< Total number of packets processed by this instance. */ volatile unsigned long bitrate; /**< Approximate bit rate of the transport stream being processed. */ bool promiscuousMode; /**< Whether no filtering is applied at the adapter level all packets are available to PID filters. */ List_t *groups; /**< List of TS Filter groups. */ uint16_t currentlyProcessingPid; TSPacketFilter_t *packetFilters[TSREADER_NROF_FILTERS]; List_t *sectionFilters; /**< List of section filters that are awaiting scheduling */ List_t *activeSectionFilters; /**< List of active section filters. */ ev_io dvrWatcher; ev_timer bitrateWatcher; ev_async notificationWatcher; unsigned long long prevTotalPackets; ev_tstamp prevTime; TSPacket_t buffer[TSREADER_MAX_PACKETS]; } TSReader_t; typedef struct TSFilterGroupStats_t { char *name; unsigned long long packetsProcessed; unsigned long long sectionsProcessed; struct TSFilterGroupStats_t *next; }TSFilterGroupStats_t; typedef struct TSFilterGroupTypeStats_t { char *type; TSFilterGroupStats_t *groups; struct TSFilterGroupTypeStats_t *next; }TSFilterGroupTypeStats_t; typedef struct TSReaderStats_t { unsigned long long totalPackets; /**< Total number of packets processed by this instance. */ unsigned long bitrate; /**< Approximate bit rate of the transport stream being processed. */ TSFilterGroupTypeStats_t *types; }TSReaderStats_t; /** * Create a new TSReader_t instance that is processing packets from the specified * DVBAdapter instance. * @param adapter The DVBAdapter to read packets from. * @return A new TSReader_t instance or NULL if one could not be created. */ TSReader_t* TSReaderCreate(DVBAdapter_t *adapter); /** * Stop and Destroy the specified TSReader_t instance. * @param reader The TSReader_t instance to destroy. */ void TSReaderDestroy(TSReader_t * reader); /** * Enable/Disable processing of packets by the specified TSReader_t instance. * @param reader The instance to enable or disable packet processing on. * @param enable TRUE to enable processing packets, FALSE to disable processing. */ void TSReaderEnable(TSReader_t * reader, bool enable); /** * Extract information about the number of packets/sections processed and the approximate * TS bitrate. * @param reader The instance to extract the stats from. * @return A TSReaderStats_t instance containing available stats (use ObjectRefDec to free the structure). */ TSReaderStats_t *TSReaderExtractStats(TSReader_t *reader); /** * Zero total packets and bit rate fields as well as all packet statistics fields * in all PIDFilters. * @param reader TSReader_t instance to zero the stats of. */ void TSReaderZeroStats(TSReader_t *reader); /** * Informs all PID filters that the multiplex has changed to newmultiplex. * @param reader TSReader_t instance to inform. * @param newmultiplex The new multiplex that the DVB adapter is now tuned to. */ void TSReaderMultiplexChanged(TSReader_t *reader, Multiplex_t *newmultiplex); /** * Lock access to the TSReader_t structure to this thread. * @param reader The instance to lock access to. */ #define TSReaderLock(reader) pthread_mutex_lock(&(reader)->mutex) /** * Unlock access to the TSReader_t structure. * @param reader The instance to unlock access to. */ #define TSReaderUnLock(reader) pthread_mutex_unlock(&(reader)->mutex) TSFilterGroup_t* TSReaderCreateFilterGroup(TSReader_t *reader, const char *name, const char *type, TSFilterGroupEventCallback_t callback, void *userArg ); TSFilterGroup_t* TSReaderFindFilterGroup(TSReader_t *reader, const char *name, const char *type); void TSFilterGroupDestroy(TSFilterGroup_t* group); void TSFilterGroupRemoveAllFilters(TSFilterGroup_t* group); void TSFilterGroupAddSectionFilter(TSFilterGroup_t *group, uint16_t pid, int priority, dvbpsi_handle handle); void TSFilterGroupRemoveSectionFilter(TSFilterGroup_t *group, uint16_t pid); bool TSFilterGroupAddPacketFilter(TSFilterGroup_t *group, uint16_t pid, TSPacketFilterCallback_t callback, void *userArg); void TSFilterGroupRemovePacketFilter(TSFilterGroup_t *group, uint16_t pid); /**@}*/ #endif dvbstreamer-2.1.0/include/tuning.h000077500000000000000000000073501217721213100171350ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA tuning.h Frontend Tuner control. */ #ifndef _TUNING_H #define _TUNING_H #include #include "types.h" #include "dvbadapter.h" #include "multiplexes.h" #include "services.h" #include "plugin.h" /** @defgroup Tuning High level Frontend Control * This module controls tuning of the frontend and attempts to keep retunes to a minimum. * * When an new service is selected with TuningCurrentServiceSet the new service * checked to see if it is encapsulated in the currently tuned multiplex. If it * is the frontend is not retuned, if the new service is not in the current * multiplex then the frontend is tuned to the multiplex the service is a member of. * * \section events Events Exported * * \li \ref servicechanged Fired when the primary service is changed. * \li \ref multiplexchanged Fired when the current multiplex changes. * * \subsection servicechanged Tuning.ServiceChanged * Fired when the primary service filter service is changed. \n * \par * \c payload = The new Service_t. \n * * \subsection multiplexchanged Tuning.MultiplexChanged * Fired when the tuned multiplex changes. \n * \par * \c payload = The new Multiplex_t. * @{ */ /** * Initialise the Tuning module for use. * @return 0 on success. */ int TuningInit(void); /** * Deinitialise the Tuning module. * @return 0 on success. */ int TuningDeInit(void); /** * Prevent the primary service being changed. * @return TRUE if the lock was set, FALSE if it was already set. */ bool TuningCurrentServiceLock(void); /** * Allow the primary service to be changed. */ void TuningCurrentServiceUnlock(void); /** * Determine whether the primary service lock is set. * @return TRUE if the lock is set, FALSE otherwise. */ bool TuningCurrentServiceIsLocked(void); /** * Retrieve the current (primary) service. * @return The current service or NULL if no service is selected. Service should * be released with a call to ServiceRefDec when no longer needed. */ Service_t *TuningCurrentServiceGet(void); /** * Set the current (primary) service to the one specified. * Note: Make sure you have called UpdateDatabase() prior to calling this function * otherwise any changes to the multiplex/services will be lost. * * @param service The new service to tune to. * @return TRUE if the service was changed. */ bool TuningCurrentServiceSet(Service_t *service); /** * Force the frontend to retune to the multiplex for the current primary service. */ void TuningCurrentServiceRetune(void); /** * Retrieve the multiplex the frontend is currently tuned to. * @return The current multiplex or NULL if no service/multiplex has been selected. * Multiplex should be released when no longer needed with a call to MultiplexRefDec. */ Multiplex_t *TuningCurrentMultiplexGet(void); /** * Set the current multiplex (independently of the service). * This function is useful for scanning as no service is required to tune to * a specific multiplex. * @param multiplex The new multiplex to tune to. */ void TuningCurrentMultiplexSet(Multiplex_t *multiplex); /** @} */ #endif dvbstreamer-2.1.0/include/types.h000077500000000000000000000024531217721213100167740ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA types.h Generic type definitions. */ #ifndef _DVBSTREAMER_TYPES_H #define _DVBSTREAMER_TYPES_H /** * @defgroup GlobalTypes Global types *@{ */ /** * 2nd part of the 2 stage macro (TOSTRING) to turn an unquoted identifier into a string. * @param x identifer to turn into a string. */ #define STRINGIFY(x) #x /** * Macro to turn an unquoted identifier into a string. * @param x identifer to turn into a string. */ #define TOSTRING(x) STRINGIFY(x) /** * True value. */ #define TRUE 1 /** * False value. */ #define FALSE 0 /** * Boolean type */ #include /** @} */ #endif dvbstreamer-2.1.0/include/udp.h000066400000000000000000000046401217721213100164150ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA udp.h Simplify UDP socket creation and packet sending. */ #ifndef _UDP_H #define _UDP_H #include /** * @defgroup UDP UDP Socket functions * @{ */ /** * Constant for the size of ethernet frame. * This is a conservative estimate. */ #define MTU 1400 /** * Constant for the size of the IP Header. */ #define IP_HEADER (5*4) /** * Constant for the size of the UDP header. */ #define UDP_HEADER (2*4) /** * Constant for maximum UDP packet payload size. * This is a conservative estimate. */ #define UDP_PAYLOAD_SIZE (MTU - (IP_HEADER + UDP_HEADER)) /** * Creates a UDP socket for the given family. * The socket family is intended to be either PF_INET or PF_INET6. * @param family Either PF_INET or PF_INET6. */ int UDPCreateSocket(sa_family_t family); /** * Macro to simplify sending data to a socket. * @param _socketfd The socket file descriptor to send the data to. * @param _data Buffer containing the data to send. * @param _data_len Length of the data to send. * @param _to The buffer containing the address to send the data to. * @param _to_len Length of the _to buffer, */ #define UDPSendTo(_socketfd, _data, _data_len, _to, _to_len) \ sendto(_socketfd, _data, _data_len, 0, _to, _to_len) /** * Macro to simplify receiving data from a socket. * @param _socketfd The socket file descriptor to receive data from. * @param _data The buffer to receive the data in. * @param _data_len The length of the buffer. * @param _from Address buffer to receive the address of the sender. * @param _from_len The length of the _from buffer. */ #define UDPReceiveFrom(_socketfd, _data, _data_len, _from, _from_len) \ recvfrom(_socketfd, _data, _data_len, 0, _from, _from_len) /** @} */ #endif dvbstreamer-2.1.0/include/utf8.h000077500000000000000000000045751217721213100165250ustar00rootroot00000000000000/* UTF8 code from http://www.cprogramming.com/ */ #ifndef _UTF8_H #define _UTF8_H #include /* is c the start of a utf8 sequence? */ #define isutf(c) (((c)&0xC0)!=0x80) /* convert UTF-8 data to wide character */ int UTF8_toucs(u_int32_t *dest, int sz, char *src, int srcsz); /* the opposite conversion */ int UTF8_toutf8(char *dest, int sz, u_int32_t *src, int srcsz); /* single character to UTF-8 */ int UTF8_wc_toutf8(char *dest, u_int32_t ch); /* character number to byte offset */ int UTF8_offset(char *str, int charnum); /* byte offset to character number */ int UTF8_charnum(char *s, int offset); /* return next character, updating an index variable */ u_int32_t UTF8_nextchar(char *s, int *i); /* move to next character */ void UTF8_inc(char *s, int *i); /* move to previous character */ void UTF8_dec(char *s, int *i); /* returns length of next utf-8 sequence */ int UTF8_seqlen(char *s); /* assuming src points to the character after a backslash, read an escape sequence, storing the result in dest and returning the number of input characters processed */ int UTF8_read_escape_sequence(char *src, u_int32_t *dest); /* given a wide character, convert it to an ASCII escape sequence stored in buf, where buf is "sz" bytes. returns the number of characters output. */ int UTF8_escape_wchar(char *buf, int sz, u_int32_t ch); /* convert a string "src" containing escape sequences to UTF-8 */ int UTF8_unescape(char *buf, int sz, char *src); /* convert UTF-8 "src" to ASCII with escape sequences. if escape_quotes is nonzero, quote characters will be preceded by backslashes as well. */ int UTF8_escape(char *buf, int sz, char *src, int escape_quotes); /* return a pointer to the first occurrence of ch in s, or NULL if not found. character index of found character returned in *charn. */ char *UTF8_strchr(char *s, u_int32_t ch, int *charn); /* same as the above, but searches a buffer of a given size instead of a NUL-terminated string. */ char *UTF8_memchr(char *s, u_int32_t ch, size_t sz, int *charn); /* count the number of characters in a UTF-8 string */ int UTF8_strlen(char *s); int UTF8_is_locale_utf8(char *locale); /* printf where the format string and arguments may be in UTF-8. you can avoid this function and just use ordinary printf() if the current locale is UTF-8. */ int UTF8_vprintf(char *fmt, va_list ap); int UTF8_printf(char *fmt, ...); #endif dvbstreamer-2.1.0/include/yamlutils.h000066400000000000000000000053441217721213100176520ustar00rootroot00000000000000/* Copyright (C) 2010 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA yamlutils.h Misc functions for processing YAML. */ #ifndef _YAMLUTILS_H #define _YAMLUTILS_H #include "yaml.h" /** * Parses the supplied string into the supplied doucment. * @param str The string to parse. * @param document The document object to store the parsed yaml in. * @return 1 on success, 0 on error. */ int YamlUtils_Parse(char *str, yaml_document_t *document); /** * Find the specified key in the supplied mapping node. * @param document The YAML document the mapping node belongs to. * @param node The mapping node to search. * @param key The key to find in the mappng node. * @return A yaml_node_t pointer pointing to the value node if the key is found, or NULL. */ yaml_node_t *YamlUtils_MappingFind(yaml_document_t *document, yaml_node_t *node, const char *key); /** * Helper macro to retrieve a key from a root mapping node. * @note The _document parameter must not produce side-effects as it is used more than once. */ #define YamlUtils_RootMappingFind(_document, _key) \ YamlUtils_MappingFind(_document, yaml_document_get_root_node(_document), _key) /** * Helper function to add 2 scalar nodes (key, value) and then append these to a mapping. * @param document The document to add to. * @param mapping The mapping node id to add to. * @param key The key string to add to the mapping. * @param value The string value the key should map to. * @return 1 on success, 0 on error. */ int YamlUtils_MappingAdd(yaml_document_t *document, int mapping, const char *key, const char *value); /** * Convert the supplied document into a string, destorying the document in the process. * @param document The document to convert. * @param removeDocStartEnd Whether to include document start and end markers. * @param outputStr Where to store the string created after converting the document. * @return The number of bytes written to the string. */ int YamlUtils_DocumentToString(yaml_document_t *document, bool removeDocStartEnd, char **outputStr); #endif dvbstreamer-2.1.0/install-sh000077500000000000000000000325371217721213100160430ustar00rootroot00000000000000#!/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: dvbstreamer-2.1.0/ltmain.sh000077500000000000000000007334151217721213100156650ustar00rootroot00000000000000# Generated from ltmain.m4sh. # ltmain.sh (GNU libtool) 2.2.6b # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 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 # --tag=TAG use configuration variables from tag TAG # -v, --verbose print informational messages (default) # --version print version information # -h, --help print short or long 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. # 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.2.6b Debian-2.2.6b-2ubuntu1 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . PROGRAM=ltmain.sh PACKAGE=libtool VERSION="2.2.6b Debian-2.2.6b-2ubuntu1" TIMESTAMP="" package_revision=1.3017 # 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 # NLS nuisances: We save the old values to restore during execute mode. # Only set LANG and LC_ALL to C if already set. # These must not be set unconditionally because not all systems understand # e.g. LANG=C (notably SCO). 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 $lt_unset CDPATH : ${CP="cp -f"} : ${ECHO="echo"} : ${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_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 "X${1}" | $Xsed -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 "X${1}" | $Xsed -e "$basename"` } # Generated shell functions inserted here. # 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" # The name of this program: # In the unlikely event $progname began with a '-', it would play havoc with # func_echo (imagine progname=-n), so we prepend ./ in that case: func_dirname_and_basename "$progpath" progname=$func_basename_result case $progname in -*) progname=./$progname ;; esac # 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' # 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${mode+: }$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_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname${mode+: }$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 "X$my_directory_path" | $Xsed -e "$dirname"` done my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e '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 "X$my_tmpdir" | $Xsed } # 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 "X$1" | $Xsed -e "$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 "X$1" | $Xsed \ -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_version # Echo version message to standard output and exit. func_version () { $SED -n '/^# '$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 () { $SED -n '/^# Usage:/,/# -h/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" $ECHO $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help # Echo long help message to standard output and exit. func_help () { $SED -n '/^# Usage:/,/# Report bugs to/ { 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 }' < "$progpath" exit $? } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { func_error "missing argument for $1" exit_cmd=exit } exit_cmd=: # Check that we have a working $ECHO. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then # Yippee, $ECHO works! : else # Restart under the correct shell, and then maybe $ECHO will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </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 } # Parse options once, thoroughly. This comes as soon as possible in # the script to make things like `libtool --version' happen quickly. { # 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 # Parse non-mode specific arguments: while test "$#" -gt 0; do opt="$1" shift case $opt in --config) func_config ;; --debug) preserve_args="$preserve_args $opt" func_echo "enabling shell trace mode" opt_debug='set -x' $opt_debug ;; -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break execute_dlfiles="$execute_dlfiles $1" shift ;; --dry-run | -n) opt_dry_run=: ;; --features) func_features ;; --finish) mode="finish" ;; --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break case $1 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 mode="$1" shift ;; --preserve-dup-deps) opt_duplicate_deps=: ;; --quiet|--silent) preserve_args="$preserve_args $opt" opt_silent=: ;; --verbose| -v) preserve_args="$preserve_args $opt" opt_silent=false ;; --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break preserve_args="$preserve_args $opt $1" func_enable_tag "$1" # tagname is set here shift ;; # Separate optargs to long options: -dlopen=*|--mode=*|--tag=*) func_opt_split "$opt" set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} shift ;; -\?|-h) func_usage ;; --help) opt_help=: ;; --version) func_version ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) nonopt="$opt" break ;; esac done 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_duplicate_deps ;; esac # Having warned about all mis-specified options, bail out if # anything was wrong. $exit_cmd $EXIT_FAILURE } # 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 } ## ----------- ## ## Main. ## ## ----------- ## $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 test -z "$mode" && func_fatal_error "error: you must specify a MODE." # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$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=$mode' for more information." } # 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_ltwrapper_scriptname_result="" if func_ltwrapper_executable_p "$1"; then func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" fi } # 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_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_quote_for_eval "$arg" CC_quoted="$CC_quoted $func_quote_for_eval_result" done 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 "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; # 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_quote_for_eval "$arg" CC_quoted="$CC_quoted $func_quote_for_eval_result" done case "$@ " in " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) # 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 <?"'"'"' &()|`$[]' \ && 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 "X$srcfile" | $Xsed -e 's%^.*/%%' -e '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 removelist="$removelist $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist removelist="$removelist $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi 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 command="$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 command="$command -o $obj" fi # Suppress compiler output if we already did a PIC compilation. command="$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 "$mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $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 building PIC objects only -prefer-non-pic try to building 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 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 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 -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 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 \`$mode'" ;; esac $ECHO $ECHO "Try \`$progname --help' for more information about other modes." exit $? } # Now that we've collected a possible --mode arg, show help if necessary $opt_help && func_mode_help # 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 $execute_dlfiles; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) # 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 dir="$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 -*) ;; *) # 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_quote_for_eval "$file" args="$args $func_quote_for_eval_result" 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 "$mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done 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" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS $ECHO "X----------------------------------------------------------------------" | $Xsed $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 "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS } test "$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. $ECHO "X$nonopt" | $GREP shtool >/dev/null; 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" install_prog="$install_prog$func_quote_for_eval_result" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" install_prog="$install_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 -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. staticlibs="$staticlibs $file" ;; *.la) # 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 "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -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 "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "X$relink_command" | $Xsed -e "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_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" && staticlibs="$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 "X$lib" | $Xsed -e '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 "X$relink_command" | $Xsed -e '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 "X$file$stripped_ext" | $Xsed -e "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 "$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 /* 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 "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for progfile in $progfiles; do func_verbose "extracting global C symbols from \`$progfile'" $opt_dry_run || eval "$NM $progfile | $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" $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" } 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; " case $host in *cygwin* | *mingw* | *cegcc* ) $ECHO >> "$output_objdir/$my_dlsyms" "\ /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */" lt_dlsym_const= ;; *osf5*) echo >> "$output_objdir/$my_dlsyms" "\ /* This system does not cope well with relocations in const data */" lt_dlsym_const= ;; *) lt_dlsym_const=const ;; esac $ECHO >> "$output_objdir/$my_dlsyms" "\ 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) ;; *) symtab_cflags="$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 "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "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 "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "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. 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 if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | $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_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' 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 | $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 | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper_part1 [arg=no] # # Emit the first part of a libtool wrapper script on stdout. # For more information, see the description associated with # func_emit_wrapper(), below. func_emit_wrapper_part1 () { func_emit_wrapper_part1_arg1=no if test -n "$1" ; then func_emit_wrapper_part1_arg1=$1 fi $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. Xsed='${SED} -e 1s/^X//' 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 ECHO=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then # Yippee, \$ECHO works! : else # Restart under the correct shell, and then maybe \$ECHO will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $ECHO "\ # Find the directory that this script lives in. thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done " } # end: func_emit_wrapper_part1 # func_emit_wrapper_part2 [arg=no] # # Emit the second part of a libtool wrapper script on stdout. # For more information, see the description associated with # func_emit_wrapper(), below. func_emit_wrapper_part2 () { func_emit_wrapper_part2_arg1=no if test -n "$1" ; then func_emit_wrapper_part2_arg1=$1 fi $ECHO "\ # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_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 \"X\$thisdir\" | \$Xsed -e '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" # 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 \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 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\ " } # end: func_emit_wrapper_part2 # 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=no if test -n "$1" ; then func_emit_wrapper_arg1=$1 fi # split this up so that func_emit_cwrapperexe_src # can call each part independently. func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" } # func_to_host_path arg # # Convert paths to host format when used with build tools. # Intended for use with "native" mingw (where libtool itself # is running under the msys shell), or in the following cross- # build environments: # $build $host # mingw (msys) mingw [e.g. native] # cygwin mingw # *nix + wine mingw # where wine is equipped with the `winepath' executable. # In the native mingw case, the (msys) shell automatically # converts paths for any non-msys applications it launches, # but that facility isn't available from inside the cwrapper. # Similar accommodations are necessary for $host mingw and # $build cygwin. Calling this function does no harm for other # $host/$build combinations not listed above. # # ARG is the path (on $build) that should be converted to # the proper representation for $host. The result is stored # in $func_to_host_path_result. func_to_host_path () { func_to_host_path_result="$1" if test -n "$1" ; then case $host in *mingw* ) lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' case $build in *mingw* ) # actually, msys # awkward: cmd appends spaces to result lt_sed_strip_trailing_spaces="s/[ ]*\$//" func_to_host_path_tmp1=`( cmd //c echo "$1" |\ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` ;; *cygwin* ) func_to_host_path_tmp1=`cygpath -w "$1"` func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` ;; * ) # Unfortunately, winepath does not exit with a non-zero # error code, so we are forced to check the contents of # stdout. On the other hand, if the command is not # found, the shell will set an exit code of 127 and print # *an error message* to stdout. So we must check for both # error code of zero AND non-empty stdout, which explains # the odd construction: func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` else # Allow warning below. func_to_host_path_result="" fi ;; esac if test -z "$func_to_host_path_result" ; then func_error "Could not determine host path corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_path_result="$1" fi ;; esac fi } # end: func_to_host_path # func_to_host_pathlist arg # # Convert pathlists to host format when used with build tools. # See func_to_host_path(), above. This function supports the # following $build/$host combinations (but does no harm for # combinations not listed here): # $build $host # mingw (msys) mingw [e.g. native] # cygwin mingw # *nix + wine mingw # # 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. # # ARG is a pathlist (on $build) that should be converted to # the proper representation on $host. The result is stored # in $func_to_host_pathlist_result. func_to_host_pathlist () { func_to_host_pathlist_result="$1" if test -n "$1" ; then case $host in *mingw* ) lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # 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_to_host_pathlist_tmp2="$1" # Once set for this call, this variable should not be # reassigned. It is used in tha fallback case. func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e 's|^:*||' -e 's|:*$||'` case $build in *mingw* ) # Actually, msys. # Awkward: cmd appends spaces to result. lt_sed_strip_trailing_spaces="s/[ ]*\$//" func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e "$lt_sed_naive_backslashify"` ;; *cygwin* ) func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e "$lt_sed_naive_backslashify"` ;; * ) # unfortunately, winepath doesn't convert pathlists func_to_host_pathlist_result="" func_to_host_pathlist_oldIFS=$IFS IFS=: for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do IFS=$func_to_host_pathlist_oldIFS if test -n "$func_to_host_pathlist_f" ; then func_to_host_path "$func_to_host_pathlist_f" if test -n "$func_to_host_path_result" ; then if test -z "$func_to_host_pathlist_result" ; then func_to_host_pathlist_result="$func_to_host_path_result" else func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" fi fi fi IFS=: done IFS=$func_to_host_pathlist_oldIFS ;; esac if test -z "$func_to_host_pathlist_result" ; then func_error "Could not determine the host path(s) corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This may break if $1 contains DOS-style drive # specifications. The fix is not to complicate the expression # below, but for the user to provide a working wine installation # with winepath so that path translation in the cross-to-mingw # case works properly. lt_replace_pathsep_nix_to_dos="s|:|;|g" func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ $SED -e "$lt_replace_pathsep_nix_to_dos"` fi # Now, add the leading and trailing path separators back case "$1" in :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" ;; esac case "$1" in *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" ;; esac ;; esac fi } # end: func_to_host_pathlist # 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 # define setmode _setmode #else # include # include # ifdef __CYGWIN__ # include # define HAVE_SETENV # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif # endif #endif #include #include #include #include #include #include #include #include #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 #ifdef _MSC_VER # define S_IXUSR _S_IEXEC # define stat _stat # ifndef _INTPTR_T_DEFINED # define intptr_t int # endif #endif #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 */ #ifdef __CYGWIN__ # define FOPEN_WB "wb" #endif #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) #undef LTWRAPPER_DEBUGPRINTF #if defined DEBUGWRAPPER # define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args static void ltwrapper_debugprintf (const char *fmt, ...) { va_list args; va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } #else # define LTWRAPPER_DEBUGPRINTF(args) #endif const char *program_name = NULL; 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_fatal (const char *message, ...); 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_opt_process_env_set (const char *arg); void lt_opt_process_env_prepend (const char *arg); void lt_opt_process_env_append (const char *arg); int lt_split_name_value (const char *arg, char** name, char** value); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); static const char *script_text_part1 = EOF func_emit_wrapper_part1 yes | $SED -e 's/\([\\"]\)/\\\1/g' \ -e 's/^/ "/' -e 's/$/\\n"/' echo ";" cat <"))); for (i = 0; i < newargc; i++) { LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); } EOF case $host_os in mingw*) cat <<"EOF" /* execv doesn't actually work on mingw as expected on unix */ rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); if (rval == -1) { /* failed to start process */ LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); return 127; } return rval; EOF ;; *) cat <<"EOF" execv (lt_argv_zero, newargz); return rval; /* =127, but avoids unused variable warning */ EOF ;; esac cat <<"EOF" } void * xmalloc (size_t num) { void *p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char) name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable (const char *path) { struct stat st; LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!")); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 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; LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!")); 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; LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); 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 ("getcwd failed"); 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 ("getcwd failed"); 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) { LTWRAPPER_DEBUGPRINTF (("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 { char *errstr = strerror (errno); lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal ("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; } static void lt_error_core (int exit_status, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } void lt_setenv (const char *name, const char *value) { LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", (name ? name : ""), (value ? 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; } int lt_split_name_value (const char *arg, char** name, char** value) { const char *p; int len; if (!arg || !*arg) return 1; p = strchr (arg, (int)'='); if (!p) return 1; *value = xstrdup (++p); len = strlen (arg) - strlen (*value); *name = XMALLOC (char, len); strncpy (*name, arg, len-1); (*name)[len - 1] = '\0'; return 0; } void lt_opt_process_env_set (const char *arg) { char *name = NULL; char *value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); } lt_setenv (name, value); XFREE (name); XFREE (value); } void lt_opt_process_env_prepend (const char *arg) { char *name = NULL; char *value = NULL; char *new_value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); } new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); XFREE (name); XFREE (value); } void lt_opt_process_env_append (const char *arg) { char *name = NULL; char *value = NULL; char *new_value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); } new_value = lt_extend_str (getenv (name), value, 1); lt_setenv (name, new_value); XFREE (new_value); XFREE (name); XFREE (value); } void lt_update_exe_path (const char *name, const char *value) { LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", (name ? name : ""), (value ? 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) { LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", (name ? name : ""), (value ? 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 } # end: func_emit_cwrapperexe_src # 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 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 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 dlfiles="$dlfiles $arg" else dlprefiles="$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 "*) ;; *) deplibs="$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 # moreargs="$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 dlfiles="$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. dlprefiles="$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 "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) weak_libs="$weak_libs $arg" prev= continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$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 ;; -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" dir=$func_stripname_result if test -z "$dir"; 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 # 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 "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath="$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*) # 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 deplibs="$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 deplibs="$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) compiler_flags="$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) compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) new_inherited_linker_flags="$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_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$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" arg="$arg $wl$func_quote_for_eval_result" compiler_flags="$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" arg="$arg $wl$func_quote_for_eval_result" compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" linker_flags="$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" ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -F/path gives path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" compiler_flags="$compiler_flags $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. objs="$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 dlfiles="$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. dlprefiles="$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. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" 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 \"X\${$shlibpath_var}\" \| \$Xsed -e \'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" # 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_duplicate_deps ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$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 "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$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= case $lib in *.la) func_source "$lib" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` case " $weak_libs " in *" $deplib_base "*) ;; *) deplibs="$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 compiler_flags="$compiler_flags $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) new_inherited_linker_flags="$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 "*) ;; * ) new_inherited_linker_flags="$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" newlib_search_path="$newlib_search_path $func_stripname_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" newlib_search_path="$newlib_search_path $func_stripname_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" dir=$func_stripname_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$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 \"X$deplib\"" 2>/dev/null | $Xsed -e 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. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$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 "X$inherited_linker_flags" | $Xsed -e '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 "*) ;; *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e '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" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$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. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$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= for l in $old_library $library_names; do linklib="$l" done 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. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$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 "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$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 notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$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 # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$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" && \ dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi 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 newlib_search_path="$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" newlib_search_path="$newlib_search_path $func_stripname_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_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$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:"*) ;; *) temp_rpath="$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 "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 notinst_deplibs="$notinst_deplibs $lib" need_relink=no ;; *) if test "$installed" = no; then notinst_deplibs="$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 "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 "$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 [\\/]*) add_dir="$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:"*) ;; *) compile_shlibpath="$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:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$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:"*) ;; *) finalize_shlibpath="$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 [\\/]*) add_dir="$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 "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$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" if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" 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_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 compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" linker_flags="$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 "X $new_inherited_linker_flags" | $Xsed -e '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 "*) ;; *) lib_search_path="$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 "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$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 tmp_libs="$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" objs="$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!" libobjs="$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|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. verstring="$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" libobjs="$libobjs $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$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 removelist="$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 oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "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 temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 "*) ;; *) dlfiles="$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 "*) ;; *) dlprefiles="$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*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$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 deplibs="$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` 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 "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$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. newdeplibs="$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 "*) newdeplibs="$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 \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$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. newdeplibs="$newdeplibs $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ -e 's/ -lc$//' -e '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 "X $tmp_deplibs" | $Xsed -e "s,$i,,"` done fi if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | $GREP . >/dev/null; then $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 fi ;; 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 "X $newdeplibs" | $Xsed -e '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 "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO "X $deplibs" | $Xsed -e '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 "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$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 "$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 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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$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 rpath="$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 "$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 linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$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" delfiles="$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 cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" func_len " $cmd" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then func_show_eval "$cmd" 'exit $?' 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 "X$include_expsyms" | $Xsed | $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 delfiles="$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 "*) ;; *) tmp_deplibs="$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" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$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\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$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 output_la=`$ECHO "X$output" | $Xsed -e "$basename"` # 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 $ECHO "$obj" >> $output done $ECHO ')' >> $output delfiles="$delfiles $output" 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 $ECHO "$obj" >> $output done delfiles="$delfiles $output" output=$firstobj\"$file_list_spec$output\" 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. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$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~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi delfiles="$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 "$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 "X$include_expsyms" | $Xsed | $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 delfiles="$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" generated="$generated $gentop" func_extract_archives $gentop $dlprefiles libobjs="$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 "$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 "$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 "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$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 "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e '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]) compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e '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 "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$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 "*) ;; *) finalize_rpath="$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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$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;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath="$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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$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 "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$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 *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *cegcc) # Disable wrappers for cegcc, we are cross compiling anyway. wrappers_required=no ;; *) 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 "X$compile_command" | $Xsed -e '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=$?' # 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 rpath="$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 rpath="$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 "X$link_command" | $Xsed -e '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 $?' 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 "X$compile_var$compile_command$compile_rpath" | $Xsed -e '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 "X$link_command" | $Xsed -e '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 $?' # 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 "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $ECHO for shipping. if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$ECHO "X$ECHO" | $Xsed -e "$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 oldobjs="$oldobjs $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$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" generated="$generated $gentop" func_extract_archives $gentop $dlprefiles oldobjs="$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" generated="$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" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$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 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 "X$relink_command" | $Xsed -e "$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" newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$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" newdlfiles="$newdlfiles $libdir/$name" ;; *) newdlfiles="$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" newdlprefiles="$newdlprefiles $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 newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; 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 "$mode" = link || test "$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) RM="$RM $arg"; rmforce=yes ;; -*) RM="$RM $arg" ;; *) files="$files $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= origobjdir="$objdir" for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then objdir="$origobjdir" else objdir="$dir/$origobjdir" fi func_basename "$file" name="$func_basename_result" test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; 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 rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${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 rmfiles="$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 rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$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 rmfiles="$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 rmfiles="$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 rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done objdir="$origobjdir" # 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 "$mode" = uninstall || test "$mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$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 dvbstreamer-2.1.0/misc/000077500000000000000000000000001217721213100147605ustar00rootroot00000000000000dvbstreamer-2.1.0/misc/libdvbpsi-claimrelease.patch000077500000000000000000000467621217721213100224250ustar00rootroot00000000000000Only in libdvbpsi4-0.1.5-mod: Makefile Only in libdvbpsi4-0.1.5-mod: config.h Only in libdvbpsi4-0.1.5-mod: config.log Only in libdvbpsi4-0.1.5-mod: config.status Only in libdvbpsi4-0.1.5-mod/debian: Makefile Only in libdvbpsi4-0.1.5-mod/doc: Makefile Only in libdvbpsi4-0.1.5-mod/examples: .deps Only in libdvbpsi4-0.1.5-mod/examples: .libs Only in libdvbpsi4-0.1.5-mod/examples: Makefile Only in libdvbpsi4-0.1.5-mod/examples: decode_pat.exe Only in libdvbpsi4-0.1.5-mod/examples: decode_pat.o Only in libdvbpsi4-0.1.5-mod/examples: decode_pmt.exe Only in libdvbpsi4-0.1.5-mod/examples: decode_pmt.o Only in libdvbpsi4-0.1.5-mod/examples: decode_sdt.exe Only in libdvbpsi4-0.1.5-mod/examples: decode_sdt.o Only in libdvbpsi4-0.1.5-mod: libtool Only in libdvbpsi4-0.1.5-mod/misc: .deps Only in libdvbpsi4-0.1.5-mod/misc: .libs Only in libdvbpsi4-0.1.5-mod/misc: Makefile Only in libdvbpsi4-0.1.5-mod/misc: gen_crc.exe Only in libdvbpsi4-0.1.5-mod/misc: gen_crc.o Only in libdvbpsi4-0.1.5-mod/misc: gen_pat.exe Only in libdvbpsi4-0.1.5-mod/misc: gen_pat.o Only in libdvbpsi4-0.1.5-mod/misc: gen_pmt.exe Only in libdvbpsi4-0.1.5-mod/misc: gen_pmt.o Only in libdvbpsi4-0.1.5-mod/misc: test_dr.exe Only in libdvbpsi4-0.1.5-mod/misc: test_dr.o Only in libdvbpsi4-0.1.5-mod/src: .deps Only in libdvbpsi4-0.1.5-mod/src: .libs Only in libdvbpsi4-0.1.5-mod/src: Makefile diff -u -r libdvbpsi4-0.1.5/src/demux.c libdvbpsi4-0.1.5-mod/src/demux.c --- libdvbpsi4-0.1.5/src/demux.c 2005-05-17 18:35:24.000000000 +0100 +++ libdvbpsi4-0.1.5-mod/src/demux.c 2007-02-27 13:11:57.163329600 +0000 @@ -71,6 +71,7 @@ h_dvbpsi->i_continuity_counter = 31; h_dvbpsi->b_discontinuity = 1; h_dvbpsi->p_current_section = NULL; + h_dvbpsi->p_free_sections = NULL; /* Sutables demux configuration */ p_demux->p_decoder = h_dvbpsi; @@ -138,7 +139,7 @@ } else { - dvbpsi_DeletePSISections(p_section); + dvbpsi_ReleasePSISections(p_decoder, p_section); } } @@ -168,5 +169,9 @@ free(p_demux); if(h_dvbpsi->p_current_section) dvbpsi_DeletePSISections(h_dvbpsi->p_current_section); + + if(h_dvbpsi->p_free_sections) + dvbpsi_DeletePSISections(h_dvbpsi->p_free_sections); + free(h_dvbpsi); } Only in libdvbpsi4-0.1.5-mod/src: demux.lo Only in libdvbpsi4-0.1.5-mod/src: demux.o Only in libdvbpsi4-0.1.5-mod/src: descriptor.lo Only in libdvbpsi4-0.1.5-mod/src: descriptor.o Only in libdvbpsi4-0.1.5-mod/src: dr_02.lo Only in libdvbpsi4-0.1.5-mod/src: dr_02.o Only in libdvbpsi4-0.1.5-mod/src: dr_03.lo Only in libdvbpsi4-0.1.5-mod/src: dr_03.o Only in libdvbpsi4-0.1.5-mod/src: dr_04.lo Only in libdvbpsi4-0.1.5-mod/src: dr_04.o Only in libdvbpsi4-0.1.5-mod/src: dr_05.lo Only in libdvbpsi4-0.1.5-mod/src: dr_05.o Only in libdvbpsi4-0.1.5-mod/src: dr_06.lo Only in libdvbpsi4-0.1.5-mod/src: dr_06.o Only in libdvbpsi4-0.1.5-mod/src: dr_07.lo Only in libdvbpsi4-0.1.5-mod/src: dr_07.o Only in libdvbpsi4-0.1.5-mod/src: dr_08.lo Only in libdvbpsi4-0.1.5-mod/src: dr_08.o Only in libdvbpsi4-0.1.5-mod/src: dr_09.lo Only in libdvbpsi4-0.1.5-mod/src: dr_09.o Only in libdvbpsi4-0.1.5-mod/src: dr_0a.lo Only in libdvbpsi4-0.1.5-mod/src: dr_0a.o Only in libdvbpsi4-0.1.5-mod/src: dr_0b.lo Only in libdvbpsi4-0.1.5-mod/src: dr_0b.o Only in libdvbpsi4-0.1.5-mod/src: dr_0c.lo Only in libdvbpsi4-0.1.5-mod/src: dr_0c.o Only in libdvbpsi4-0.1.5-mod/src: dr_0d.lo Only in libdvbpsi4-0.1.5-mod/src: dr_0d.o Only in libdvbpsi4-0.1.5-mod/src: dr_0e.lo Only in libdvbpsi4-0.1.5-mod/src: dr_0e.o Only in libdvbpsi4-0.1.5-mod/src: dr_0f.lo Only in libdvbpsi4-0.1.5-mod/src: dr_0f.o Only in libdvbpsi4-0.1.5-mod/src: dr_42.lo Only in libdvbpsi4-0.1.5-mod/src: dr_42.o Only in libdvbpsi4-0.1.5-mod/src: dr_47.lo Only in libdvbpsi4-0.1.5-mod/src: dr_47.o Only in libdvbpsi4-0.1.5-mod/src: dr_48.lo Only in libdvbpsi4-0.1.5-mod/src: dr_48.o Only in libdvbpsi4-0.1.5-mod/src: dr_4d.lo Only in libdvbpsi4-0.1.5-mod/src: dr_4d.o Only in libdvbpsi4-0.1.5-mod/src: dr_4e.lo Only in libdvbpsi4-0.1.5-mod/src: dr_4e.o Only in libdvbpsi4-0.1.5-mod/src: dr_52.lo Only in libdvbpsi4-0.1.5-mod/src: dr_52.o Only in libdvbpsi4-0.1.5-mod/src: dr_55.lo Only in libdvbpsi4-0.1.5-mod/src: dr_55.o Only in libdvbpsi4-0.1.5-mod/src: dr_56.lo Only in libdvbpsi4-0.1.5-mod/src: dr_56.o Only in libdvbpsi4-0.1.5-mod/src: dr_59.lo Only in libdvbpsi4-0.1.5-mod/src: dr_59.o diff -u -r libdvbpsi4-0.1.5/src/dvbpsi.c libdvbpsi4-0.1.5-mod/src/dvbpsi.c --- libdvbpsi4-0.1.5/src/dvbpsi.c 2005-07-04 16:21:29.000000000 +0100 +++ libdvbpsi4-0.1.5-mod/src/dvbpsi.c 2007-02-27 13:09:38.367662000 +0000 @@ -87,7 +87,7 @@ h_dvbpsi->b_discontinuity = 1; if(h_dvbpsi->p_current_section) { - dvbpsi_DeletePSISections(h_dvbpsi->p_current_section); + dvbpsi_ReleasePSISections(h_dvbpsi, h_dvbpsi->p_current_section); h_dvbpsi->p_current_section = NULL; } } @@ -122,7 +122,7 @@ /* Allocation of the structure */ h_dvbpsi->p_current_section = p_section - = dvbpsi_NewPSISection(h_dvbpsi->i_section_max_size); + = dvbpsi_ClaimPSISection(h_dvbpsi, h_dvbpsi->i_section_max_size); /* Update the position in the packet */ p_payload_pos = p_new_pos; /* New section is being handled */ @@ -164,7 +164,7 @@ if(h_dvbpsi->i_need > h_dvbpsi->i_section_max_size - 3) { DVBPSI_ERROR("PSI decoder", "PSI section too long"); - dvbpsi_DeletePSISections(p_section); + dvbpsi_ReleasePSISections(h_dvbpsi, p_section); h_dvbpsi->p_current_section = NULL; /* If there is a new section not being handled then go forward in the packet */ @@ -172,7 +172,7 @@ { h_dvbpsi->p_current_section = p_section - = dvbpsi_NewPSISection(h_dvbpsi->i_section_max_size); + = dvbpsi_ClaimPSISection(h_dvbpsi, h_dvbpsi->i_section_max_size); p_payload_pos = p_new_pos; p_new_pos = NULL; h_dvbpsi->i_need = 3; @@ -219,7 +219,7 @@ else { /* PSI section isn't valid => trash it */ - dvbpsi_DeletePSISections(p_section); + dvbpsi_ReleasePSISections(h_dvbpsi, p_section); h_dvbpsi->p_current_section = NULL; } @@ -235,7 +235,7 @@ { h_dvbpsi->p_current_section = p_section - = dvbpsi_NewPSISection(h_dvbpsi->i_section_max_size); + = dvbpsi_ClaimPSISection(h_dvbpsi, h_dvbpsi->i_section_max_size); p_payload_pos = p_new_pos; p_new_pos = NULL; h_dvbpsi->i_need = 3; diff -u -r libdvbpsi4-0.1.5/src/dvbpsi.h libdvbpsi4-0.1.5-mod/src/dvbpsi.h --- libdvbpsi4-0.1.5/src/dvbpsi.h 2004-06-01 17:42:49.000000000 +0100 +++ libdvbpsi4-0.1.5-mod/src/dvbpsi.h 2007-02-27 12:57:16.964896900 +0000 @@ -118,6 +118,8 @@ int b_discontinuity; /*!< Discontinuity flag */ + dvbpsi_psi_section_t * p_free_sections; /*!< Available sections */ + dvbpsi_psi_section_t * p_current_section; /*!< Current section */ int i_need; /*!< Bytes needed */ int b_complete_header; /*!< Flag for header Only in libdvbpsi4-0.1.5-mod/src: dvbpsi.lo Only in libdvbpsi4-0.1.5-mod/src: dvbpsi.o Only in libdvbpsi4-0.1.5-mod/src: eit.lo Only in libdvbpsi4-0.1.5-mod/src: eit.o Only in libdvbpsi4-0.1.5-mod/src: libdvbpsi.la Only in libdvbpsi4-0.1.5-mod/src: pat.lo Only in libdvbpsi4-0.1.5-mod/src: pat.o Only in libdvbpsi4-0.1.5-mod/src: pmt.lo Only in libdvbpsi4-0.1.5-mod/src: pmt.o diff -u -r libdvbpsi4-0.1.5/src/psi.c libdvbpsi4-0.1.5-mod/src/psi.c --- libdvbpsi4-0.1.5/src/psi.c 2005-05-17 18:35:24.000000000 +0100 +++ libdvbpsi4-0.1.5-mod/src/psi.c 2007-02-27 13:02:08.315588900 +0000 @@ -136,6 +136,59 @@ 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4 }; +/***************************************************************************** + * dvbpsi_ClaimPSISection + ***************************************************************************** + * Return a previously released section if one is available or create a new one. + *****************************************************************************/ +dvbpsi_psi_section_t * dvbpsi_ClaimPSISection(dvbpsi_handle h_dvbpsi, int i_max_size) +{ + dvbpsi_psi_section_t *p_current = h_dvbpsi->p_free_sections; + dvbpsi_psi_section_t *p_prev = NULL; + + while (p_current) + { + if (p_current->i_max_size == i_max_size) + { + p_current->p_payload_end = p_current->p_data; + + if (p_prev) + { + p_prev->p_next = p_current->p_next; + } + else + { + h_dvbpsi->p_free_sections = p_current->p_next; + } + + p_current->p_next = NULL; + return p_current; + } + p_prev = p_current; + p_current = p_current->p_next; + } + + return dvbpsi_NewPSISection(i_max_size); +} + +/***************************************************************************** + * dvbpsi_ReleasePSISections + ***************************************************************************** + * Release sections so they can be reused. + *****************************************************************************/ +void dvbpsi_ReleasePSISections(dvbpsi_handle h_dvbpsi, dvbpsi_psi_section_t * p_section) +{ + dvbpsi_psi_section_t *p_tail = p_section; + /* find the last section in the sections to release */ + while (p_tail->p_next) + { + p_tail = p_tail->p_next; + } + + p_tail->p_next = h_dvbpsi->p_free_sections; + h_dvbpsi->p_free_sections = p_section; +} + /***************************************************************************** * dvbpsi_NewPSISection @@ -155,6 +208,7 @@ if(p_section->p_data != NULL) { + p_section->i_max_size = i_max_size; p_section->p_payload_end = p_section->p_data; } else @@ -169,7 +223,6 @@ return p_section; } - /***************************************************************************** * dvbpsi_DeletePSISections ***************************************************************************** diff -u -r libdvbpsi4-0.1.5/src/psi.h libdvbpsi4-0.1.5-mod/src/psi.h --- libdvbpsi4-0.1.5/src/psi.h 2004-06-01 17:42:49.000000000 +0100 +++ libdvbpsi4-0.1.5-mod/src/psi.h 2007-02-27 13:03:55.193702900 +0000 @@ -92,12 +92,37 @@ /* used if b_syntax_indicator is true */ uint32_t i_crc; /*!< CRC_32 */ + /* for reusing this section */ + uint32_t i_max_size; /*!< maximum size of p_data */ + /* list handling */ struct dvbpsi_psi_section_s * p_next; /*!< next element of the list */ }; +/***************************************************************************** + * dvbpsi_ClaimPSISection + *****************************************************************************/ +/*! + * \fn dvbpsi_psi_section_t * dvbpsi_ClaimPSISection(int i_max_size) + * \brief Return a previously released section if one is available or create a new one. + * \param h_dvbpsi Handle to retrieve the currently unused section from. + * \param i_max_size max size in bytes of the section + * \return a pointer to the new PSI section structure. + */ +dvbpsi_psi_section_t * dvbpsi_ClaimPSISection(dvbpsi_handle h_dvbpsi, int i_max_size); +/***************************************************************************** + * dvbpsi_ReleasePSISections + *****************************************************************************/ + /*! + * \fn void dvbpsi_ReleasePSISections(dvbpsi_psi_section_t * p_section) + * \brief Release a section so it can be reused. + * \param h_dvbpsi Handle to store the unused sections in. + * \param p_section pointer to the first PSI section structure + * \return nothing. + */ +void dvbpsi_ReleasePSISections(dvbpsi_handle h_dvbpsi, dvbpsi_psi_section_t * p_section); /***************************************************************************** * dvbpsi_NewPSISection Only in libdvbpsi4-0.1.5-mod/src: psi.lo Only in libdvbpsi4-0.1.5-mod/src: psi.o Only in libdvbpsi4-0.1.5-mod/src: sdt.lo Only in libdvbpsi4-0.1.5-mod/src: sdt.o diff -u -r libdvbpsi4-0.1.5/src/tables/eit.c libdvbpsi4-0.1.5-mod/src/tables/eit.c --- libdvbpsi4-0.1.5/src/tables/eit.c 2005-05-17 18:35:24.000000000 +0100 +++ libdvbpsi4-0.1.5-mod/src/tables/eit.c 2007-02-27 13:13:30.924414800 +0000 @@ -378,7 +378,7 @@ { if(p_eit_decoder->ap_sections[i] != NULL) { - dvbpsi_DeletePSISections(p_eit_decoder->ap_sections[i]); + dvbpsi_ReleasePSISections(p_psi_decoder, p_eit_decoder->ap_sections[i]); p_eit_decoder->ap_sections[i] = NULL; } } @@ -412,7 +412,7 @@ { DVBPSI_DEBUG_ARG("EIT decoder", "overwrite section number %d", p_section->i_number); - dvbpsi_DeletePSISections(p_eit_decoder->ap_sections[p_section->i_number]); + dvbpsi_ReleasePSISections(p_psi_decoder, p_eit_decoder->ap_sections[p_section->i_number]); } p_eit_decoder->ap_sections[p_section->i_number] = p_section; @@ -443,7 +443,7 @@ dvbpsi_DecodeEITSections(p_eit_decoder->p_building_eit, p_eit_decoder->ap_sections[0]); /* Delete the sections */ - dvbpsi_DeletePSISections(p_eit_decoder->ap_sections[0]); + dvbpsi_ReleasePSISections(p_psi_decoder, p_eit_decoder->ap_sections[0]); /* signal the new EIT */ p_eit_decoder->pf_callback(p_eit_decoder->p_cb_data, p_eit_decoder->p_building_eit); @@ -455,7 +455,7 @@ } else { - dvbpsi_DeletePSISections(p_section); + dvbpsi_ReleasePSISections(p_psi_decoder, p_section); } } diff -u -r libdvbpsi4-0.1.5/src/tables/pat.c libdvbpsi4-0.1.5-mod/src/tables/pat.c --- libdvbpsi4-0.1.5/src/tables/pat.c 2005-05-17 18:35:24.000000000 +0100 +++ libdvbpsi4-0.1.5-mod/src/tables/pat.c 2007-02-27 13:11:23.452542000 +0000 @@ -74,6 +74,7 @@ h_dvbpsi->i_continuity_counter = 31; h_dvbpsi->b_discontinuity = 1; h_dvbpsi->p_current_section = NULL; + h_dvbpsi->p_free_sections = NULL; /* PAT decoder information */ p_pat_decoder->pf_callback = pf_callback; @@ -110,6 +111,8 @@ free(h_dvbpsi->p_private_decoder); if(h_dvbpsi->p_current_section) dvbpsi_DeletePSISections(h_dvbpsi->p_current_section); + if(h_dvbpsi->p_free_sections) + dvbpsi_DeletePSISections(h_dvbpsi->p_free_sections); free(h_dvbpsi); } @@ -301,7 +304,7 @@ { if(p_pat_decoder->ap_sections[i] != NULL) { - dvbpsi_DeletePSISections(p_pat_decoder->ap_sections[i]); + dvbpsi_ReleasePSISections(p_decoder, p_pat_decoder->ap_sections[i]); p_pat_decoder->ap_sections[i] = NULL; } } @@ -329,7 +332,7 @@ { DVBPSI_DEBUG_ARG("PAT decoder", "overwrite section number %d", p_section->i_number); - dvbpsi_DeletePSISections(p_pat_decoder->ap_sections[p_section->i_number]); + dvbpsi_ReleasePSISections(p_decoder, p_pat_decoder->ap_sections[p_section->i_number]); } p_pat_decoder->ap_sections[p_section->i_number] = p_section; @@ -360,7 +363,7 @@ dvbpsi_DecodePATSections(p_pat_decoder->p_building_pat, p_pat_decoder->ap_sections[0]); /* Delete the sections */ - dvbpsi_DeletePSISections(p_pat_decoder->ap_sections[0]); + dvbpsi_ReleasePSISections(p_decoder, p_pat_decoder->ap_sections[0]); /* signal the new PAT */ p_pat_decoder->pf_callback(p_pat_decoder->p_cb_data, p_pat_decoder->p_building_pat); @@ -372,7 +375,7 @@ } else { - dvbpsi_DeletePSISections(p_section); + dvbpsi_ReleasePSISections(p_decoder, p_section); } } diff -u -r libdvbpsi4-0.1.5/src/tables/pmt.c libdvbpsi4-0.1.5-mod/src/tables/pmt.c --- libdvbpsi4-0.1.5/src/tables/pmt.c 2005-05-17 18:35:24.000000000 +0100 +++ libdvbpsi4-0.1.5-mod/src/tables/pmt.c 2007-02-27 13:11:31.026949200 +0000 @@ -77,6 +77,7 @@ h_dvbpsi->i_continuity_counter = 31; h_dvbpsi->b_discontinuity = 1; h_dvbpsi->p_current_section = NULL; + h_dvbpsi->p_free_sections = NULL; /* PMT decoder configuration */ p_pmt_decoder->i_program_number = i_program_number; @@ -114,6 +115,8 @@ free(h_dvbpsi->p_private_decoder); if(h_dvbpsi->p_current_section) dvbpsi_DeletePSISections(h_dvbpsi->p_current_section); + if(h_dvbpsi->p_free_sections) + dvbpsi_DeletePSISections(h_dvbpsi->p_free_sections); free(h_dvbpsi); } @@ -374,7 +377,7 @@ { if(p_pmt_decoder->ap_sections[i] != NULL) { - dvbpsi_DeletePSISections(p_pmt_decoder->ap_sections[i]); + dvbpsi_ReleasePSISections(p_decoder, p_pmt_decoder->ap_sections[i]); p_pmt_decoder->ap_sections[i] = NULL; } } @@ -404,7 +407,7 @@ { DVBPSI_DEBUG_ARG("PMT decoder", "overwrite section number %d", p_section->i_number); - dvbpsi_DeletePSISections(p_pmt_decoder->ap_sections[p_section->i_number]); + dvbpsi_ReleasePSISections(p_decoder, p_pmt_decoder->ap_sections[p_section->i_number]); } p_pmt_decoder->ap_sections[p_section->i_number] = p_section; @@ -435,7 +438,7 @@ dvbpsi_DecodePMTSections(p_pmt_decoder->p_building_pmt, p_pmt_decoder->ap_sections[0]); /* Delete the sections */ - dvbpsi_DeletePSISections(p_pmt_decoder->ap_sections[0]); + dvbpsi_ReleasePSISections(p_decoder, p_pmt_decoder->ap_sections[0]); /* signal the new PMT */ p_pmt_decoder->pf_callback(p_pmt_decoder->p_cb_data, p_pmt_decoder->p_building_pmt); @@ -447,7 +450,7 @@ } else { - dvbpsi_DeletePSISections(p_section); + dvbpsi_ReleasePSISections(p_decoder, p_section); } } diff -u -r libdvbpsi4-0.1.5/src/tables/sdt.c libdvbpsi4-0.1.5-mod/src/tables/sdt.c --- libdvbpsi4-0.1.5/src/tables/sdt.c 2005-07-04 16:14:57.000000000 +0100 +++ libdvbpsi4-0.1.5-mod/src/tables/sdt.c 2007-02-27 13:13:39.839263600 +0000 @@ -375,7 +375,7 @@ { if(p_sdt_decoder->ap_sections[i] != NULL) { - dvbpsi_DeletePSISections(p_sdt_decoder->ap_sections[i]); + dvbpsi_ReleasePSISections(p_psi_decoder, p_sdt_decoder->ap_sections[i]); p_sdt_decoder->ap_sections[i] = NULL; } } @@ -405,7 +405,7 @@ { DVBPSI_DEBUG_ARG("SDT decoder", "overwrite section number %d", p_section->i_number); - dvbpsi_DeletePSISections(p_sdt_decoder->ap_sections[p_section->i_number]); + dvbpsi_ReleasePSISections(p_psi_decoder, p_sdt_decoder->ap_sections[p_section->i_number]); } p_sdt_decoder->ap_sections[p_section->i_number] = p_section; @@ -436,7 +436,7 @@ dvbpsi_DecodeSDTSections(p_sdt_decoder->p_building_sdt, p_sdt_decoder->ap_sections[0]); /* Delete the sections */ - dvbpsi_DeletePSISections(p_sdt_decoder->ap_sections[0]); + dvbpsi_ReleasePSISections(p_psi_decoder,p_sdt_decoder->ap_sections[0]); /* signal the new SDT */ p_sdt_decoder->pf_callback(p_sdt_decoder->p_cb_data, p_sdt_decoder->p_building_sdt); @@ -448,7 +448,7 @@ } else { - dvbpsi_DeletePSISections(p_section); + dvbpsi_ReleasePSISections(p_psi_decoder,p_section); } } Only in libdvbpsi4-0.1.5-mod: stamp-h1 Only in libdvbpsi4-0.1.5-mod/wince: Makefile dvbstreamer-2.1.0/missing000077500000000000000000000262331217721213100154320ustar00rootroot00000000000000#! /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: dvbstreamer-2.1.0/src/000077500000000000000000000000001217721213100146145ustar00rootroot00000000000000dvbstreamer-2.1.0/src/Makefile.am000066400000000000000000000047331217721213100166570ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in AM_CFLAGS =\ -I$(top_srcdir)/include -D_GNU_SOURCE bin_PROGRAMS = dvbstreamer dvbctrl setupdvbstreamer $(fstreamer_app) convertdvbdb common_src = \ main.c\ tuning.c \ ts.c\ multiplexes.c\ services.c\ pids.c\ dbase.c\ standard/mpeg2/mpeg2.c\ standard/mpeg2/patprocessor.c\ standard/mpeg2/pmtprocessor.c\ servicefilter.c\ cache.c\ commands.c\ commands/cmd_servicefilter.c\ commands/cmd_info.c\ commands/cmd_scanning.c\ commands/cmd_epg.c\ dispatchers.c \ remoteintf.c\ deliverymethod.c\ pluginmgr.c \ epgtypes.c \ epgchannel.c \ utf8.c \ events.c \ objects.c \ list.c\ logging.c\ properties.c \ threading/messageq.c \ threading/deferredproc.c \ lnb.c \ yamlutils.c \ constants.c if ENABLE_ATSC atsc_src =\ standard/atsc/atsc.c \ standard/atsc/atsctext.c \ standard/atsc/psipprocessor.c else atsc_src = endif if ENABLE_DVB dvb_src =\ standard/dvb/dvb.c\ standard/dvb/sdtprocessor.c\ standard/dvb/nitprocessor.c \ standard/dvb/tdtprocessor.c \ standard/dvb/dvbtext.c else dvb_src = endif # # DVBStreamer # dvbstreamer_SOURCES = \ dvbadapter.c\ $(common_src) \ $(atsc_src) \ $(dvb_src) dvbstreamer_LDFLAGS = -rdynamic -Wl,-whole-archive -Wl,dvbpsi/libdvbpsi.a -Wl,-no-whole-archive dvbstreamer_LDADD = \ -lpthread -lsqlite3 -lreadline -lev -lyaml @GETTIME_LIB@ @ICONV_LIB@ @READLINE_TERMCAP@ -lltdl if ENABLE_FSTREAMER fstreamer_app = fdvbstreamer # # File DVBStreamer # fdvbstreamer_SOURCES = \ fileadapter.c\ $(common_src) \ $(atsc_src) \ $(dvb_src) fdvbstreamer_LDFLAGS = -rdynamic -Wl,-whole-archive -Wl,dvbpsi/libdvbpsi.a -Wl,-no-whole-archive fdvbstreamer_LDADD = \ -lpthread -lsqlite3 -lreadline -lev -lyaml @GETTIME_LIB@ @ICONV_LIB@ @READLINE_TERMCAP@ -lltdl else fstreamer_app = endif # # dvbctrl # dvbctrl_SOURCES = \ dvbctrl.c\ logging.c dvbctrl_LDFLAGS = dvbctrl_LDADD = -lreadline @READLINE_TERMCAP@ # # setupdvbstreamer # setupdvbstreamer_SOURCES = \ setup.c\ logging.c\ parsezap.c\ multiplexes.c\ services.c\ dbase.c \ objects.c \ events.c \ list.c \ lnb.c \ yamlutils.c setupdvbstreamer_LDFLAGS = setupdvbstreamer_LDADD = -lsqlite3 -lpthread -lyaml # # convertdvbdb # convertdvbdb_SOURCE = \ convertdvbdb.c convertdvbdb_LDFLAGS = convertdvbdb_LDADD =-lsqlite3 dvbstreamer-2.1.0/src/Makefile.in000066400000000000000000001605261217721213100166730ustar00rootroot00000000000000# 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@ bin_PROGRAMS = dvbstreamer$(EXEEXT) dvbctrl$(EXEEXT) \ setupdvbstreamer$(EXEEXT) $(am__EXEEXT_1) \ convertdvbdb$(EXEEXT) subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in 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 = @ENABLE_FSTREAMER_TRUE@am__EXEEXT_1 = fdvbstreamer$(EXEEXT) am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) convertdvbdb_SOURCES = convertdvbdb.c convertdvbdb_OBJECTS = convertdvbdb.$(OBJEXT) convertdvbdb_DEPENDENCIES = convertdvbdb_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(convertdvbdb_LDFLAGS) $(LDFLAGS) -o $@ am_dvbctrl_OBJECTS = dvbctrl.$(OBJEXT) logging.$(OBJEXT) dvbctrl_OBJECTS = $(am_dvbctrl_OBJECTS) dvbctrl_DEPENDENCIES = dvbctrl_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(dvbctrl_LDFLAGS) \ $(LDFLAGS) -o $@ am__dvbstreamer_SOURCES_DIST = dvbadapter.c main.c tuning.c ts.c \ multiplexes.c services.c pids.c dbase.c standard/mpeg2/mpeg2.c \ standard/mpeg2/patprocessor.c standard/mpeg2/pmtprocessor.c \ servicefilter.c cache.c commands.c \ commands/cmd_servicefilter.c commands/cmd_info.c \ commands/cmd_scanning.c commands/cmd_epg.c dispatchers.c \ remoteintf.c deliverymethod.c pluginmgr.c epgtypes.c \ epgchannel.c utf8.c events.c objects.c list.c logging.c \ properties.c threading/messageq.c threading/deferredproc.c \ lnb.c yamlutils.c constants.c standard/atsc/atsc.c \ standard/atsc/atsctext.c standard/atsc/psipprocessor.c \ standard/dvb/dvb.c standard/dvb/sdtprocessor.c \ standard/dvb/nitprocessor.c standard/dvb/tdtprocessor.c \ standard/dvb/dvbtext.c am__objects_1 = main.$(OBJEXT) tuning.$(OBJEXT) ts.$(OBJEXT) \ multiplexes.$(OBJEXT) services.$(OBJEXT) pids.$(OBJEXT) \ dbase.$(OBJEXT) mpeg2.$(OBJEXT) patprocessor.$(OBJEXT) \ pmtprocessor.$(OBJEXT) servicefilter.$(OBJEXT) cache.$(OBJEXT) \ commands.$(OBJEXT) cmd_servicefilter.$(OBJEXT) \ cmd_info.$(OBJEXT) cmd_scanning.$(OBJEXT) cmd_epg.$(OBJEXT) \ dispatchers.$(OBJEXT) remoteintf.$(OBJEXT) \ deliverymethod.$(OBJEXT) pluginmgr.$(OBJEXT) \ epgtypes.$(OBJEXT) epgchannel.$(OBJEXT) utf8.$(OBJEXT) \ events.$(OBJEXT) objects.$(OBJEXT) list.$(OBJEXT) \ logging.$(OBJEXT) properties.$(OBJEXT) messageq.$(OBJEXT) \ deferredproc.$(OBJEXT) lnb.$(OBJEXT) yamlutils.$(OBJEXT) \ constants.$(OBJEXT) @ENABLE_ATSC_TRUE@am__objects_2 = atsc.$(OBJEXT) atsctext.$(OBJEXT) \ @ENABLE_ATSC_TRUE@ psipprocessor.$(OBJEXT) @ENABLE_DVB_TRUE@am__objects_3 = dvb.$(OBJEXT) sdtprocessor.$(OBJEXT) \ @ENABLE_DVB_TRUE@ nitprocessor.$(OBJEXT) tdtprocessor.$(OBJEXT) \ @ENABLE_DVB_TRUE@ dvbtext.$(OBJEXT) am_dvbstreamer_OBJECTS = dvbadapter.$(OBJEXT) $(am__objects_1) \ $(am__objects_2) $(am__objects_3) dvbstreamer_OBJECTS = $(am_dvbstreamer_OBJECTS) dvbstreamer_DEPENDENCIES = dvbstreamer_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(dvbstreamer_LDFLAGS) $(LDFLAGS) -o $@ am__fdvbstreamer_SOURCES_DIST = fileadapter.c main.c tuning.c ts.c \ multiplexes.c services.c pids.c dbase.c standard/mpeg2/mpeg2.c \ standard/mpeg2/patprocessor.c standard/mpeg2/pmtprocessor.c \ servicefilter.c cache.c commands.c \ commands/cmd_servicefilter.c commands/cmd_info.c \ commands/cmd_scanning.c commands/cmd_epg.c dispatchers.c \ remoteintf.c deliverymethod.c pluginmgr.c epgtypes.c \ epgchannel.c utf8.c events.c objects.c list.c logging.c \ properties.c threading/messageq.c threading/deferredproc.c \ lnb.c yamlutils.c constants.c standard/atsc/atsc.c \ standard/atsc/atsctext.c standard/atsc/psipprocessor.c \ standard/dvb/dvb.c standard/dvb/sdtprocessor.c \ standard/dvb/nitprocessor.c standard/dvb/tdtprocessor.c \ standard/dvb/dvbtext.c @ENABLE_FSTREAMER_TRUE@am_fdvbstreamer_OBJECTS = \ @ENABLE_FSTREAMER_TRUE@ fileadapter.$(OBJEXT) $(am__objects_1) \ @ENABLE_FSTREAMER_TRUE@ $(am__objects_2) $(am__objects_3) fdvbstreamer_OBJECTS = $(am_fdvbstreamer_OBJECTS) fdvbstreamer_DEPENDENCIES = fdvbstreamer_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(fdvbstreamer_LDFLAGS) $(LDFLAGS) -o $@ am_setupdvbstreamer_OBJECTS = setup.$(OBJEXT) logging.$(OBJEXT) \ parsezap.$(OBJEXT) multiplexes.$(OBJEXT) services.$(OBJEXT) \ dbase.$(OBJEXT) objects.$(OBJEXT) events.$(OBJEXT) \ list.$(OBJEXT) lnb.$(OBJEXT) yamlutils.$(OBJEXT) setupdvbstreamer_OBJECTS = $(am_setupdvbstreamer_OBJECTS) setupdvbstreamer_DEPENDENCIES = setupdvbstreamer_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(setupdvbstreamer_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) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = convertdvbdb.c $(dvbctrl_SOURCES) $(dvbstreamer_SOURCES) \ $(fdvbstreamer_SOURCES) $(setupdvbstreamer_SOURCES) DIST_SOURCES = convertdvbdb.c $(dvbctrl_SOURCES) \ $(am__dvbstreamer_SOURCES_DIST) \ $(am__fdvbstreamer_SOURCES_DIST) $(setupdvbstreamer_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVBSTREAMER_MAJOR = @DVBSTREAMER_MAJOR@ DVBSTREAMER_MICRO = @DVBSTREAMER_MICRO@ DVBSTREAMER_MINOR = @DVBSTREAMER_MINOR@ DVBSTREAMER_PLUGINDIR = @DVBSTREAMER_PLUGINDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETTIME_LIB = @GETTIME_LIB@ GREP = @GREP@ ICONV_LIB = @ICONV_LIB@ 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@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ NO_PREFIX_PACKAGE_DATA_DIR = @NO_PREFIX_PACKAGE_DATA_DIR@ NO_PREFIX_PACKAGE_DOC_DIR = @NO_PREFIX_PACKAGE_DOC_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATA_DIR = @PACKAGE_DATA_DIR@ PACKAGE_DOC_DIR = @PACKAGE_DOC_DIR@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ READLINE_TERMCAP = @READLINE_TERMCAP@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ 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@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ 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@ AM_CFLAGS = \ -I$(top_srcdir)/include -D_GNU_SOURCE common_src = \ main.c\ tuning.c \ ts.c\ multiplexes.c\ services.c\ pids.c\ dbase.c\ standard/mpeg2/mpeg2.c\ standard/mpeg2/patprocessor.c\ standard/mpeg2/pmtprocessor.c\ servicefilter.c\ cache.c\ commands.c\ commands/cmd_servicefilter.c\ commands/cmd_info.c\ commands/cmd_scanning.c\ commands/cmd_epg.c\ dispatchers.c \ remoteintf.c\ deliverymethod.c\ pluginmgr.c \ epgtypes.c \ epgchannel.c \ utf8.c \ events.c \ objects.c \ list.c\ logging.c\ properties.c \ threading/messageq.c \ threading/deferredproc.c \ lnb.c \ yamlutils.c \ constants.c @ENABLE_ATSC_FALSE@atsc_src = @ENABLE_ATSC_TRUE@atsc_src = \ @ENABLE_ATSC_TRUE@ standard/atsc/atsc.c \ @ENABLE_ATSC_TRUE@ standard/atsc/atsctext.c \ @ENABLE_ATSC_TRUE@ standard/atsc/psipprocessor.c @ENABLE_DVB_FALSE@dvb_src = @ENABLE_DVB_TRUE@dvb_src = \ @ENABLE_DVB_TRUE@ standard/dvb/dvb.c\ @ENABLE_DVB_TRUE@ standard/dvb/sdtprocessor.c\ @ENABLE_DVB_TRUE@ standard/dvb/nitprocessor.c \ @ENABLE_DVB_TRUE@ standard/dvb/tdtprocessor.c \ @ENABLE_DVB_TRUE@ standard/dvb/dvbtext.c # # DVBStreamer # dvbstreamer_SOURCES = \ dvbadapter.c\ $(common_src) \ $(atsc_src) \ $(dvb_src) dvbstreamer_LDFLAGS = -rdynamic -Wl,-whole-archive -Wl,dvbpsi/libdvbpsi.a -Wl,-no-whole-archive dvbstreamer_LDADD = \ -lpthread -lsqlite3 -lreadline -lev -lyaml @GETTIME_LIB@ @ICONV_LIB@ @READLINE_TERMCAP@ -lltdl @ENABLE_FSTREAMER_FALSE@fstreamer_app = @ENABLE_FSTREAMER_TRUE@fstreamer_app = fdvbstreamer # # File DVBStreamer # @ENABLE_FSTREAMER_TRUE@fdvbstreamer_SOURCES = \ @ENABLE_FSTREAMER_TRUE@ fileadapter.c\ @ENABLE_FSTREAMER_TRUE@ $(common_src) \ @ENABLE_FSTREAMER_TRUE@ $(atsc_src) \ @ENABLE_FSTREAMER_TRUE@ $(dvb_src) @ENABLE_FSTREAMER_TRUE@fdvbstreamer_LDFLAGS = -rdynamic -Wl,-whole-archive -Wl,dvbpsi/libdvbpsi.a -Wl,-no-whole-archive @ENABLE_FSTREAMER_TRUE@fdvbstreamer_LDADD = \ @ENABLE_FSTREAMER_TRUE@ -lpthread -lsqlite3 -lreadline -lev -lyaml @GETTIME_LIB@ @ICONV_LIB@ @READLINE_TERMCAP@ -lltdl # # dvbctrl # dvbctrl_SOURCES = \ dvbctrl.c\ logging.c dvbctrl_LDFLAGS = dvbctrl_LDADD = -lreadline @READLINE_TERMCAP@ # # setupdvbstreamer # setupdvbstreamer_SOURCES = \ setup.c\ logging.c\ parsezap.c\ multiplexes.c\ services.c\ dbase.c \ objects.c \ events.c \ list.c \ lnb.c \ yamlutils.c setupdvbstreamer_LDFLAGS = setupdvbstreamer_LDADD = -lsqlite3 -lpthread -lyaml # # convertdvbdb # convertdvbdb_SOURCE = \ convertdvbdb.c convertdvbdb_LDFLAGS = convertdvbdb_LDADD = -lsqlite3 all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(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 src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list convertdvbdb$(EXEEXT): $(convertdvbdb_OBJECTS) $(convertdvbdb_DEPENDENCIES) @rm -f convertdvbdb$(EXEEXT) $(convertdvbdb_LINK) $(convertdvbdb_OBJECTS) $(convertdvbdb_LDADD) $(LIBS) dvbctrl$(EXEEXT): $(dvbctrl_OBJECTS) $(dvbctrl_DEPENDENCIES) @rm -f dvbctrl$(EXEEXT) $(dvbctrl_LINK) $(dvbctrl_OBJECTS) $(dvbctrl_LDADD) $(LIBS) dvbstreamer$(EXEEXT): $(dvbstreamer_OBJECTS) $(dvbstreamer_DEPENDENCIES) @rm -f dvbstreamer$(EXEEXT) $(dvbstreamer_LINK) $(dvbstreamer_OBJECTS) $(dvbstreamer_LDADD) $(LIBS) fdvbstreamer$(EXEEXT): $(fdvbstreamer_OBJECTS) $(fdvbstreamer_DEPENDENCIES) @rm -f fdvbstreamer$(EXEEXT) $(fdvbstreamer_LINK) $(fdvbstreamer_OBJECTS) $(fdvbstreamer_LDADD) $(LIBS) setupdvbstreamer$(EXEEXT): $(setupdvbstreamer_OBJECTS) $(setupdvbstreamer_DEPENDENCIES) @rm -f setupdvbstreamer$(EXEEXT) $(setupdvbstreamer_LINK) $(setupdvbstreamer_OBJECTS) $(setupdvbstreamer_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atsc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atsctext.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cache.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmd_epg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmd_info.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmd_scanning.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmd_servicefilter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/commands.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/constants.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convertdvbdb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbase.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deferredproc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deliverymethod.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dispatchers.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvbadapter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvbctrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvbtext.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/epgchannel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/epgtypes.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/events.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileadapter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lnb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logging.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/messageq.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpeg2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multiplexes.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nitprocessor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/objects.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parsezap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/patprocessor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pids.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pluginmgr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pmtprocessor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/properties.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/psipprocessor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remoteintf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdtprocessor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/servicefilter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/services.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setup.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tdtprocessor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ts.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tuning.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utf8.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yamlutils.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @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@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @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@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @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 $@ $< mpeg2.o: standard/mpeg2/mpeg2.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpeg2.o -MD -MP -MF $(DEPDIR)/mpeg2.Tpo -c -o mpeg2.o `test -f 'standard/mpeg2/mpeg2.c' || echo '$(srcdir)/'`standard/mpeg2/mpeg2.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mpeg2.Tpo $(DEPDIR)/mpeg2.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='standard/mpeg2/mpeg2.c' object='mpeg2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpeg2.o `test -f 'standard/mpeg2/mpeg2.c' || echo '$(srcdir)/'`standard/mpeg2/mpeg2.c mpeg2.obj: standard/mpeg2/mpeg2.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpeg2.obj -MD -MP -MF $(DEPDIR)/mpeg2.Tpo -c -o mpeg2.obj `if test -f 'standard/mpeg2/mpeg2.c'; then $(CYGPATH_W) 'standard/mpeg2/mpeg2.c'; else $(CYGPATH_W) '$(srcdir)/standard/mpeg2/mpeg2.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mpeg2.Tpo $(DEPDIR)/mpeg2.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='standard/mpeg2/mpeg2.c' object='mpeg2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpeg2.obj `if test -f 'standard/mpeg2/mpeg2.c'; then $(CYGPATH_W) 'standard/mpeg2/mpeg2.c'; else $(CYGPATH_W) '$(srcdir)/standard/mpeg2/mpeg2.c'; fi` patprocessor.o: standard/mpeg2/patprocessor.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT patprocessor.o -MD -MP -MF $(DEPDIR)/patprocessor.Tpo -c -o patprocessor.o `test -f 'standard/mpeg2/patprocessor.c' || echo '$(srcdir)/'`standard/mpeg2/patprocessor.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/patprocessor.Tpo $(DEPDIR)/patprocessor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='standard/mpeg2/patprocessor.c' object='patprocessor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o patprocessor.o `test -f 'standard/mpeg2/patprocessor.c' || echo '$(srcdir)/'`standard/mpeg2/patprocessor.c patprocessor.obj: standard/mpeg2/patprocessor.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT patprocessor.obj -MD -MP -MF $(DEPDIR)/patprocessor.Tpo -c -o patprocessor.obj `if test -f 'standard/mpeg2/patprocessor.c'; then $(CYGPATH_W) 'standard/mpeg2/patprocessor.c'; else $(CYGPATH_W) '$(srcdir)/standard/mpeg2/patprocessor.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/patprocessor.Tpo $(DEPDIR)/patprocessor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='standard/mpeg2/patprocessor.c' object='patprocessor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o patprocessor.obj `if test -f 'standard/mpeg2/patprocessor.c'; then $(CYGPATH_W) 'standard/mpeg2/patprocessor.c'; else $(CYGPATH_W) '$(srcdir)/standard/mpeg2/patprocessor.c'; fi` pmtprocessor.o: standard/mpeg2/pmtprocessor.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pmtprocessor.o -MD -MP -MF $(DEPDIR)/pmtprocessor.Tpo -c -o pmtprocessor.o `test -f 'standard/mpeg2/pmtprocessor.c' || echo '$(srcdir)/'`standard/mpeg2/pmtprocessor.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/pmtprocessor.Tpo $(DEPDIR)/pmtprocessor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='standard/mpeg2/pmtprocessor.c' object='pmtprocessor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pmtprocessor.o `test -f 'standard/mpeg2/pmtprocessor.c' || echo '$(srcdir)/'`standard/mpeg2/pmtprocessor.c pmtprocessor.obj: standard/mpeg2/pmtprocessor.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pmtprocessor.obj -MD -MP -MF $(DEPDIR)/pmtprocessor.Tpo -c -o pmtprocessor.obj `if test -f 'standard/mpeg2/pmtprocessor.c'; then $(CYGPATH_W) 'standard/mpeg2/pmtprocessor.c'; else $(CYGPATH_W) '$(srcdir)/standard/mpeg2/pmtprocessor.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/pmtprocessor.Tpo $(DEPDIR)/pmtprocessor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='standard/mpeg2/pmtprocessor.c' object='pmtprocessor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pmtprocessor.obj `if test -f 'standard/mpeg2/pmtprocessor.c'; then $(CYGPATH_W) 'standard/mpeg2/pmtprocessor.c'; else $(CYGPATH_W) '$(srcdir)/standard/mpeg2/pmtprocessor.c'; fi` cmd_servicefilter.o: commands/cmd_servicefilter.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cmd_servicefilter.o -MD -MP -MF $(DEPDIR)/cmd_servicefilter.Tpo -c -o cmd_servicefilter.o `test -f 'commands/cmd_servicefilter.c' || echo '$(srcdir)/'`commands/cmd_servicefilter.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/cmd_servicefilter.Tpo $(DEPDIR)/cmd_servicefilter.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='commands/cmd_servicefilter.c' object='cmd_servicefilter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cmd_servicefilter.o `test -f 'commands/cmd_servicefilter.c' || echo '$(srcdir)/'`commands/cmd_servicefilter.c cmd_servicefilter.obj: commands/cmd_servicefilter.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cmd_servicefilter.obj -MD -MP -MF $(DEPDIR)/cmd_servicefilter.Tpo -c -o cmd_servicefilter.obj `if test -f 'commands/cmd_servicefilter.c'; then $(CYGPATH_W) 'commands/cmd_servicefilter.c'; else $(CYGPATH_W) '$(srcdir)/commands/cmd_servicefilter.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/cmd_servicefilter.Tpo $(DEPDIR)/cmd_servicefilter.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='commands/cmd_servicefilter.c' object='cmd_servicefilter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cmd_servicefilter.obj `if test -f 'commands/cmd_servicefilter.c'; then $(CYGPATH_W) 'commands/cmd_servicefilter.c'; else $(CYGPATH_W) '$(srcdir)/commands/cmd_servicefilter.c'; fi` cmd_info.o: commands/cmd_info.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cmd_info.o -MD -MP -MF $(DEPDIR)/cmd_info.Tpo -c -o cmd_info.o `test -f 'commands/cmd_info.c' || echo '$(srcdir)/'`commands/cmd_info.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/cmd_info.Tpo $(DEPDIR)/cmd_info.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='commands/cmd_info.c' object='cmd_info.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cmd_info.o `test -f 'commands/cmd_info.c' || echo '$(srcdir)/'`commands/cmd_info.c cmd_info.obj: commands/cmd_info.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cmd_info.obj -MD -MP -MF $(DEPDIR)/cmd_info.Tpo -c -o cmd_info.obj `if test -f 'commands/cmd_info.c'; then $(CYGPATH_W) 'commands/cmd_info.c'; else $(CYGPATH_W) '$(srcdir)/commands/cmd_info.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/cmd_info.Tpo $(DEPDIR)/cmd_info.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='commands/cmd_info.c' object='cmd_info.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cmd_info.obj `if test -f 'commands/cmd_info.c'; then $(CYGPATH_W) 'commands/cmd_info.c'; else $(CYGPATH_W) '$(srcdir)/commands/cmd_info.c'; fi` cmd_scanning.o: commands/cmd_scanning.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cmd_scanning.o -MD -MP -MF $(DEPDIR)/cmd_scanning.Tpo -c -o cmd_scanning.o `test -f 'commands/cmd_scanning.c' || echo '$(srcdir)/'`commands/cmd_scanning.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/cmd_scanning.Tpo $(DEPDIR)/cmd_scanning.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='commands/cmd_scanning.c' object='cmd_scanning.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cmd_scanning.o `test -f 'commands/cmd_scanning.c' || echo '$(srcdir)/'`commands/cmd_scanning.c cmd_scanning.obj: commands/cmd_scanning.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cmd_scanning.obj -MD -MP -MF $(DEPDIR)/cmd_scanning.Tpo -c -o cmd_scanning.obj `if test -f 'commands/cmd_scanning.c'; then $(CYGPATH_W) 'commands/cmd_scanning.c'; else $(CYGPATH_W) '$(srcdir)/commands/cmd_scanning.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/cmd_scanning.Tpo $(DEPDIR)/cmd_scanning.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='commands/cmd_scanning.c' object='cmd_scanning.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cmd_scanning.obj `if test -f 'commands/cmd_scanning.c'; then $(CYGPATH_W) 'commands/cmd_scanning.c'; else $(CYGPATH_W) '$(srcdir)/commands/cmd_scanning.c'; fi` cmd_epg.o: commands/cmd_epg.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cmd_epg.o -MD -MP -MF $(DEPDIR)/cmd_epg.Tpo -c -o cmd_epg.o `test -f 'commands/cmd_epg.c' || echo '$(srcdir)/'`commands/cmd_epg.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/cmd_epg.Tpo $(DEPDIR)/cmd_epg.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='commands/cmd_epg.c' object='cmd_epg.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cmd_epg.o `test -f 'commands/cmd_epg.c' || echo '$(srcdir)/'`commands/cmd_epg.c cmd_epg.obj: commands/cmd_epg.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cmd_epg.obj -MD -MP -MF $(DEPDIR)/cmd_epg.Tpo -c -o cmd_epg.obj `if test -f 'commands/cmd_epg.c'; then $(CYGPATH_W) 'commands/cmd_epg.c'; else $(CYGPATH_W) '$(srcdir)/commands/cmd_epg.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/cmd_epg.Tpo $(DEPDIR)/cmd_epg.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='commands/cmd_epg.c' object='cmd_epg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cmd_epg.obj `if test -f 'commands/cmd_epg.c'; then $(CYGPATH_W) 'commands/cmd_epg.c'; else $(CYGPATH_W) '$(srcdir)/commands/cmd_epg.c'; fi` messageq.o: threading/messageq.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT messageq.o -MD -MP -MF $(DEPDIR)/messageq.Tpo -c -o messageq.o `test -f 'threading/messageq.c' || echo '$(srcdir)/'`threading/messageq.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/messageq.Tpo $(DEPDIR)/messageq.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='threading/messageq.c' object='messageq.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o messageq.o `test -f 'threading/messageq.c' || echo '$(srcdir)/'`threading/messageq.c messageq.obj: threading/messageq.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT messageq.obj -MD -MP -MF $(DEPDIR)/messageq.Tpo -c -o messageq.obj `if test -f 'threading/messageq.c'; then $(CYGPATH_W) 'threading/messageq.c'; else $(CYGPATH_W) '$(srcdir)/threading/messageq.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/messageq.Tpo $(DEPDIR)/messageq.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='threading/messageq.c' object='messageq.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o messageq.obj `if test -f 'threading/messageq.c'; then $(CYGPATH_W) 'threading/messageq.c'; else $(CYGPATH_W) '$(srcdir)/threading/messageq.c'; fi` deferredproc.o: threading/deferredproc.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT deferredproc.o -MD -MP -MF $(DEPDIR)/deferredproc.Tpo -c -o deferredproc.o `test -f 'threading/deferredproc.c' || echo '$(srcdir)/'`threading/deferredproc.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/deferredproc.Tpo $(DEPDIR)/deferredproc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='threading/deferredproc.c' object='deferredproc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o deferredproc.o `test -f 'threading/deferredproc.c' || echo '$(srcdir)/'`threading/deferredproc.c deferredproc.obj: threading/deferredproc.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT deferredproc.obj -MD -MP -MF $(DEPDIR)/deferredproc.Tpo -c -o deferredproc.obj `if test -f 'threading/deferredproc.c'; then $(CYGPATH_W) 'threading/deferredproc.c'; else $(CYGPATH_W) '$(srcdir)/threading/deferredproc.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/deferredproc.Tpo $(DEPDIR)/deferredproc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='threading/deferredproc.c' object='deferredproc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o deferredproc.obj `if test -f 'threading/deferredproc.c'; then $(CYGPATH_W) 'threading/deferredproc.c'; else $(CYGPATH_W) '$(srcdir)/threading/deferredproc.c'; fi` atsc.o: standard/atsc/atsc.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atsc.o -MD -MP -MF $(DEPDIR)/atsc.Tpo -c -o atsc.o `test -f 'standard/atsc/atsc.c' || echo '$(srcdir)/'`standard/atsc/atsc.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/atsc.Tpo $(DEPDIR)/atsc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='standard/atsc/atsc.c' object='atsc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atsc.o `test -f 'standard/atsc/atsc.c' || echo '$(srcdir)/'`standard/atsc/atsc.c atsc.obj: standard/atsc/atsc.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atsc.obj -MD -MP -MF $(DEPDIR)/atsc.Tpo -c -o atsc.obj `if test -f 'standard/atsc/atsc.c'; then $(CYGPATH_W) 'standard/atsc/atsc.c'; else $(CYGPATH_W) '$(srcdir)/standard/atsc/atsc.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/atsc.Tpo $(DEPDIR)/atsc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='standard/atsc/atsc.c' object='atsc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atsc.obj `if test -f 'standard/atsc/atsc.c'; then $(CYGPATH_W) 'standard/atsc/atsc.c'; else $(CYGPATH_W) '$(srcdir)/standard/atsc/atsc.c'; fi` atsctext.o: standard/atsc/atsctext.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atsctext.o -MD -MP -MF $(DEPDIR)/atsctext.Tpo -c -o atsctext.o `test -f 'standard/atsc/atsctext.c' || echo '$(srcdir)/'`standard/atsc/atsctext.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/atsctext.Tpo $(DEPDIR)/atsctext.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='standard/atsc/atsctext.c' object='atsctext.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atsctext.o `test -f 'standard/atsc/atsctext.c' || echo '$(srcdir)/'`standard/atsc/atsctext.c atsctext.obj: standard/atsc/atsctext.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atsctext.obj -MD -MP -MF $(DEPDIR)/atsctext.Tpo -c -o atsctext.obj `if test -f 'standard/atsc/atsctext.c'; then $(CYGPATH_W) 'standard/atsc/atsctext.c'; else $(CYGPATH_W) '$(srcdir)/standard/atsc/atsctext.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/atsctext.Tpo $(DEPDIR)/atsctext.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='standard/atsc/atsctext.c' object='atsctext.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atsctext.obj `if test -f 'standard/atsc/atsctext.c'; then $(CYGPATH_W) 'standard/atsc/atsctext.c'; else $(CYGPATH_W) '$(srcdir)/standard/atsc/atsctext.c'; fi` psipprocessor.o: standard/atsc/psipprocessor.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT psipprocessor.o -MD -MP -MF $(DEPDIR)/psipprocessor.Tpo -c -o psipprocessor.o `test -f 'standard/atsc/psipprocessor.c' || echo '$(srcdir)/'`standard/atsc/psipprocessor.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/psipprocessor.Tpo $(DEPDIR)/psipprocessor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='standard/atsc/psipprocessor.c' object='psipprocessor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o psipprocessor.o `test -f 'standard/atsc/psipprocessor.c' || echo '$(srcdir)/'`standard/atsc/psipprocessor.c psipprocessor.obj: standard/atsc/psipprocessor.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT psipprocessor.obj -MD -MP -MF $(DEPDIR)/psipprocessor.Tpo -c -o psipprocessor.obj `if test -f 'standard/atsc/psipprocessor.c'; then $(CYGPATH_W) 'standard/atsc/psipprocessor.c'; else $(CYGPATH_W) '$(srcdir)/standard/atsc/psipprocessor.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/psipprocessor.Tpo $(DEPDIR)/psipprocessor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='standard/atsc/psipprocessor.c' object='psipprocessor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o psipprocessor.obj `if test -f 'standard/atsc/psipprocessor.c'; then $(CYGPATH_W) 'standard/atsc/psipprocessor.c'; else $(CYGPATH_W) '$(srcdir)/standard/atsc/psipprocessor.c'; fi` dvb.o: standard/dvb/dvb.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dvb.o -MD -MP -MF $(DEPDIR)/dvb.Tpo -c -o dvb.o `test -f 'standard/dvb/dvb.c' || echo '$(srcdir)/'`standard/dvb/dvb.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dvb.Tpo $(DEPDIR)/dvb.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='standard/dvb/dvb.c' object='dvb.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dvb.o `test -f 'standard/dvb/dvb.c' || echo '$(srcdir)/'`standard/dvb/dvb.c dvb.obj: standard/dvb/dvb.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dvb.obj -MD -MP -MF $(DEPDIR)/dvb.Tpo -c -o dvb.obj `if test -f 'standard/dvb/dvb.c'; then $(CYGPATH_W) 'standard/dvb/dvb.c'; else $(CYGPATH_W) '$(srcdir)/standard/dvb/dvb.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dvb.Tpo $(DEPDIR)/dvb.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='standard/dvb/dvb.c' object='dvb.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dvb.obj `if test -f 'standard/dvb/dvb.c'; then $(CYGPATH_W) 'standard/dvb/dvb.c'; else $(CYGPATH_W) '$(srcdir)/standard/dvb/dvb.c'; fi` sdtprocessor.o: standard/dvb/sdtprocessor.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sdtprocessor.o -MD -MP -MF $(DEPDIR)/sdtprocessor.Tpo -c -o sdtprocessor.o `test -f 'standard/dvb/sdtprocessor.c' || echo '$(srcdir)/'`standard/dvb/sdtprocessor.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/sdtprocessor.Tpo $(DEPDIR)/sdtprocessor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='standard/dvb/sdtprocessor.c' object='sdtprocessor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sdtprocessor.o `test -f 'standard/dvb/sdtprocessor.c' || echo '$(srcdir)/'`standard/dvb/sdtprocessor.c sdtprocessor.obj: standard/dvb/sdtprocessor.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sdtprocessor.obj -MD -MP -MF $(DEPDIR)/sdtprocessor.Tpo -c -o sdtprocessor.obj `if test -f 'standard/dvb/sdtprocessor.c'; then $(CYGPATH_W) 'standard/dvb/sdtprocessor.c'; else $(CYGPATH_W) '$(srcdir)/standard/dvb/sdtprocessor.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/sdtprocessor.Tpo $(DEPDIR)/sdtprocessor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='standard/dvb/sdtprocessor.c' object='sdtprocessor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sdtprocessor.obj `if test -f 'standard/dvb/sdtprocessor.c'; then $(CYGPATH_W) 'standard/dvb/sdtprocessor.c'; else $(CYGPATH_W) '$(srcdir)/standard/dvb/sdtprocessor.c'; fi` nitprocessor.o: standard/dvb/nitprocessor.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nitprocessor.o -MD -MP -MF $(DEPDIR)/nitprocessor.Tpo -c -o nitprocessor.o `test -f 'standard/dvb/nitprocessor.c' || echo '$(srcdir)/'`standard/dvb/nitprocessor.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/nitprocessor.Tpo $(DEPDIR)/nitprocessor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='standard/dvb/nitprocessor.c' object='nitprocessor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nitprocessor.o `test -f 'standard/dvb/nitprocessor.c' || echo '$(srcdir)/'`standard/dvb/nitprocessor.c nitprocessor.obj: standard/dvb/nitprocessor.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nitprocessor.obj -MD -MP -MF $(DEPDIR)/nitprocessor.Tpo -c -o nitprocessor.obj `if test -f 'standard/dvb/nitprocessor.c'; then $(CYGPATH_W) 'standard/dvb/nitprocessor.c'; else $(CYGPATH_W) '$(srcdir)/standard/dvb/nitprocessor.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/nitprocessor.Tpo $(DEPDIR)/nitprocessor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='standard/dvb/nitprocessor.c' object='nitprocessor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nitprocessor.obj `if test -f 'standard/dvb/nitprocessor.c'; then $(CYGPATH_W) 'standard/dvb/nitprocessor.c'; else $(CYGPATH_W) '$(srcdir)/standard/dvb/nitprocessor.c'; fi` tdtprocessor.o: standard/dvb/tdtprocessor.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tdtprocessor.o -MD -MP -MF $(DEPDIR)/tdtprocessor.Tpo -c -o tdtprocessor.o `test -f 'standard/dvb/tdtprocessor.c' || echo '$(srcdir)/'`standard/dvb/tdtprocessor.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tdtprocessor.Tpo $(DEPDIR)/tdtprocessor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='standard/dvb/tdtprocessor.c' object='tdtprocessor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tdtprocessor.o `test -f 'standard/dvb/tdtprocessor.c' || echo '$(srcdir)/'`standard/dvb/tdtprocessor.c tdtprocessor.obj: standard/dvb/tdtprocessor.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tdtprocessor.obj -MD -MP -MF $(DEPDIR)/tdtprocessor.Tpo -c -o tdtprocessor.obj `if test -f 'standard/dvb/tdtprocessor.c'; then $(CYGPATH_W) 'standard/dvb/tdtprocessor.c'; else $(CYGPATH_W) '$(srcdir)/standard/dvb/tdtprocessor.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tdtprocessor.Tpo $(DEPDIR)/tdtprocessor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='standard/dvb/tdtprocessor.c' object='tdtprocessor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tdtprocessor.obj `if test -f 'standard/dvb/tdtprocessor.c'; then $(CYGPATH_W) 'standard/dvb/tdtprocessor.c'; else $(CYGPATH_W) '$(srcdir)/standard/dvb/tdtprocessor.c'; fi` dvbtext.o: standard/dvb/dvbtext.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dvbtext.o -MD -MP -MF $(DEPDIR)/dvbtext.Tpo -c -o dvbtext.o `test -f 'standard/dvb/dvbtext.c' || echo '$(srcdir)/'`standard/dvb/dvbtext.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dvbtext.Tpo $(DEPDIR)/dvbtext.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='standard/dvb/dvbtext.c' object='dvbtext.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dvbtext.o `test -f 'standard/dvb/dvbtext.c' || echo '$(srcdir)/'`standard/dvb/dvbtext.c dvbtext.obj: standard/dvb/dvbtext.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dvbtext.obj -MD -MP -MF $(DEPDIR)/dvbtext.Tpo -c -o dvbtext.obj `if test -f 'standard/dvb/dvbtext.c'; then $(CYGPATH_W) 'standard/dvb/dvbtext.c'; else $(CYGPATH_W) '$(srcdir)/standard/dvb/dvbtext.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dvbtext.Tpo $(DEPDIR)/dvbtext.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='standard/dvb/dvbtext.c' object='dvbtext.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dvbtext.obj `if test -f 'standard/dvb/dvbtext.c'; then $(CYGPATH_W) 'standard/dvb/dvbtext.c'; else $(CYGPATH_W) '$(srcdir)/standard/dvb/dvbtext.c'; fi` 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 $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; 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-binPROGRAMS clean-generic clean-libtool 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-binPROGRAMS 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-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS 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 \ uninstall-binPROGRAMS # 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: dvbstreamer-2.1.0/src/cache.c000066400000000000000000000703561217721213100160360ustar00rootroot00000000000000/* Copyright (C) 2010 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA cache.c Caches service and PID information from the database for the current multiplex. */ #include #include #include #include #include "ts.h" #include "multiplexes.h" #include "services.h" #include "pids.h" #include "logging.h" #include "cache.h" #include "dbase.h" #include "main.h" #include "deferredproc.h" #include "events.h" /******************************************************************************* * Defines * *******************************************************************************/ #define SERVICES_MAX (256) /******************************************************************************* * Typedefs * *******************************************************************************/ enum CacheFlags { CacheFlag_Clean = 0x0000, CacheFlag_Dirty_PMTPID = 0x0001, CacheFlag_Dirty_ProgramInfo = 0x0002, /* Also means PMT Version and PCR PID needs to be updated */ CacheFlag_Dirty_Name = 0x0004, CacheFlag_Dirty_Source = 0x0008, CacheFlag_Dirty_CA = 0x0010, CacheFlag_Dirty_Type = 0x0020, CacheFlag_Dirty_Provider = 0x0040, CacheFlag_Dirty_DefAuth = 0x0060, CacheFlag_Not_Seen_In_SDT = 0x2000, CacheFlag_Not_Seen_In_PAT = 0x4000, CacheFlag_Dirty_Added = 0x8000, }; enum CacheUpdateType { CacheUpdate_Multiplex_TS_id, CacheUpdate_Multiplex_Network_id, CacheUpdate_Service_PMT_PID, CacheUpdate_Service_PIDs, CacheUpdate_Service_Name, CacheUpdate_Service_Source, CacheUpdate_Service_CA, CacheUpdate_Service_Type, CacheUpdate_Service_Provider, CacheUpdate_Service_Default_Auth, CacheUpdate_Service_Added, CacheUpdate_Service_Deleted, }; typedef struct CacheUpdateMessage_s { enum CacheUpdateType type; union { struct { Multiplex_t *multiplex; int tsId; }multiplexTSId; struct { Multiplex_t *multiplex; int networkId; }multiplexNetworkId; struct { Service_t *service; int pmtPid; }servicePMTPID; struct { Service_t *service; ProgramInfo_t *info; }servicePIDs; struct { Service_t *service; char *name; }serviceName; struct { Service_t *service; uint16_t source; }serviceSource; struct { Service_t *service; bool ca; }serviceCA; struct { Service_t *service; ServiceType type; }serviceType; struct { Service_t *service; char *provider; }serviceProvider; struct { Service_t *service; char *defaultAuthority; }serviceDefaultAuthority; struct { int id; int source; int multiplexUID; char *name; }serviceAdd; struct { Service_t *service; }serviceDelete; }details; }CacheUpdateMessage_t; /******************************************************************************* * Prototypes * *******************************************************************************/ static void CacheServicesFree(void); static void CacheProcessUpdateMessage(void *ptr); /******************************************************************************* * Global variables * *******************************************************************************/ static char CACHE[] = "Cache"; static EventSource_t eventSource; static Event_t pidsUpdatedEvent; static Multiplex_t *cachedServicesMultiplex = NULL; static int cachedServicesCount = 0; static pthread_mutex_t cacheUpdateMutex; static enum CacheFlags cacheFlags[SERVICES_MAX]; static Service_t* cachedServices[SERVICES_MAX]; static ProgramInfo_t* cachedPIDs[SERVICES_MAX]; /******************************************************************************* * Global functions * *******************************************************************************/ int CacheInit() { pthread_mutexattr_t mutexAttr; pthread_mutexattr_init(&mutexAttr); pthread_mutexattr_settype(&mutexAttr, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init(&cacheUpdateMutex, &mutexAttr); pthread_mutexattr_destroy(&mutexAttr); eventSource = EventsRegisterSource("Cache"); pidsUpdatedEvent = EventsRegisterEvent(eventSource, "PIDsUpdated", NULL); ObjectRegisterType(CacheUpdateMessage_t); return 0; } void CacheDeInit() { CacheServicesFree(); pthread_mutex_destroy(&cacheUpdateMutex); } int CacheLoad(Multiplex_t *multiplex) { int result = 1; List_t *list = NULL; pthread_mutex_lock(&cacheUpdateMutex); LogModule(LOG_DEBUG, CACHE, "Freeing services\n"); /* Free the services and PIDs from the previous multiplex */ CacheServicesFree(); list = ServiceListForMultiplex(multiplex); LogModule(LOG_DEBUG, CACHE, "Loading %d services for %d\n", ListCount(list), multiplex->uid); cachedServicesCount = ListCount(list); if (ListCount(list) > 0) { ListIterator_t iterator; int i = 0; for (ListIterator_Init(iterator, list); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator), i++) { cachedServices[i] = (Service_t*)ListIterator_Current(iterator); LogModule(LOG_DEBUG,CACHE, "Loaded 0x%04x %s\n", cachedServices[i]->id, cachedServices[i]->name); cachedPIDs[i] = ProgramInfoGet(cachedServices[i]); cacheFlags[i] = CacheFlag_Clean; } /* Use ListFree with no destructor as we don't want to free the objects * only the list. */ ListFree(list, NULL); } MultiplexRefInc(multiplex); cachedServicesMultiplex = multiplex; result = 0; pthread_mutex_unlock(&cacheUpdateMutex); return result; } Multiplex_t *CacheMultiplexGet(void) { return cachedServicesMultiplex; } Service_t *CacheServiceFind(char *name) { Service_t *result = NULL; int netId; int tsId; int serviceId; result = CacheServiceFindName(name); if (!result) { if (sscanf(name,"%x.%x.%x", &netId, &tsId, &serviceId) == 3) { if ((cachedServicesMultiplex->networkId == netId) && (cachedServicesMultiplex->tsId== tsId)) { result = CacheServiceFindId(serviceId); } } } return result; } Service_t *CacheServiceFindId(int id) { Service_t *result = NULL; int i; for (i = 0; i < cachedServicesCount; i ++) { if (cachedServices[i]->id == id) { result = cachedServices[i]; ServiceRefInc(result); break; } } return result; } Service_t *CacheServiceFindName(char *name) { Service_t *result = NULL; int i; LogModule(LOG_DEBUGV,CACHE, "Checking cached services for \"%s\"\n", name); for (i = 0; i < cachedServicesCount; i ++) { LogModule(LOG_DEBUGV, CACHE, "cachedServices[%d]->name = %s\n", i, cachedServices[i]->name); if (strcmp(cachedServices[i]->name, name) == 0) { result = cachedServices[i]; ServiceRefInc(result); LogModule(LOG_DEBUGV, CACHE, "Found in cached services!\n"); break; } } if (result == NULL) { LogModule(LOG_DEBUGV, CACHE, "Not found in cached services\n"); } return result; } Service_t **CacheServicesGet(int *count) { pthread_mutex_lock(&cacheUpdateMutex); *count = cachedServicesCount; return cachedServices; } void CacheServicesRelease(void) { pthread_mutex_unlock(&cacheUpdateMutex); } ProgramInfo_t *CacheProgramInfoGet(Service_t *service) { ProgramInfo_t *result = NULL; int i; pthread_mutex_lock(&cacheUpdateMutex); for (i = 0; i < cachedServicesCount; i ++) { if ((cachedServices[i]) && ServiceAreEqual(service, cachedServices[i])) { result = cachedPIDs[i]; if (result) { ObjectRefInc(result); } break; } } pthread_mutex_unlock(&cacheUpdateMutex); return result; } void CacheUpdateMultiplex(Multiplex_t *multiplex, int patversion, int tsid) { CacheUpdateMessage_t *msg; int i; pthread_mutex_lock(&cacheUpdateMutex); if (cachedServicesMultiplex && MultiplexAreEqual(multiplex, cachedServicesMultiplex)) { cachedServicesMultiplex->patVersion = patversion; cachedServicesMultiplex->tsId = tsid; for (i = 0; i < cachedServicesCount; i ++) { cachedServices[i]->tsId = tsid; } msg = ObjectCreateType(CacheUpdateMessage_t); if (msg) { msg->type = CacheUpdate_Multiplex_TS_id; ObjectRefInc(multiplex); msg->details.multiplexTSId.multiplex = multiplex; msg->details.multiplexTSId.tsId = tsid; DeferredProcessingAddJob(CacheProcessUpdateMessage, msg); ObjectRefDec(msg); } } pthread_mutex_unlock(&cacheUpdateMutex); } void CacheUpdateNetworkId(Multiplex_t *multiplex, int netid) { CacheUpdateMessage_t *msg; int i; pthread_mutex_lock(&cacheUpdateMutex); if (cachedServicesMultiplex && MultiplexAreEqual(multiplex, cachedServicesMultiplex)) { cachedServicesMultiplex->networkId = netid; for (i = 0; i < cachedServicesCount; i ++) { cachedServices[i]->networkId = netid; } msg = ObjectCreateType(CacheUpdateMessage_t); if (msg) { msg->type = CacheUpdate_Multiplex_Network_id; ObjectRefInc(multiplex); msg->details.multiplexNetworkId.multiplex = multiplex; msg->details.multiplexNetworkId.networkId = netid; DeferredProcessingAddJob(CacheProcessUpdateMessage, msg); ObjectRefDec(msg); } } pthread_mutex_unlock(&cacheUpdateMutex); } void CacheUpdateServicePMTPID(Service_t *service, int pmtpid) { CacheUpdateMessage_t *msg; int i; pthread_mutex_lock(&cacheUpdateMutex); for (i = 0; i < cachedServicesCount; i ++) { if ((cachedServices[i]) && ServiceAreEqual(service, cachedServices[i])) { cachedServices[i]->pmtPID = pmtpid; msg = ObjectCreateType(CacheUpdateMessage_t); if (msg) { msg->type = CacheUpdate_Service_PMT_PID; ObjectRefInc(service); msg->details.servicePMTPID.service = service; msg->details.servicePMTPID.pmtPid = pmtpid; DeferredProcessingAddJob(CacheProcessUpdateMessage, msg); ObjectRefDec(msg); } break; } } pthread_mutex_unlock(&cacheUpdateMutex); } void CacheUpdateServiceName(Service_t *service, char *name) { CacheUpdateMessage_t *msg; int i; pthread_mutex_lock(&cacheUpdateMutex); for (i = 0; i < cachedServicesCount; i ++) { if ((cachedServices[i]) && ServiceAreEqual(service, cachedServices[i])) { if (cachedServices[i]->name) { free(cachedServices[i]->name); } if (name) { cachedServices[i]->name = strdup(name); } else { cachedServices[i]->name = NULL; } msg = ObjectCreateType(CacheUpdateMessage_t); if (msg) { msg->type = CacheUpdate_Service_Name; ObjectRefInc(service); msg->details.serviceName.service = service; if (name) { msg->details.serviceName.name = strdup(name); } DeferredProcessingAddJob(CacheProcessUpdateMessage, msg); ObjectRefDec(msg); } break; } } pthread_mutex_unlock(&cacheUpdateMutex); } void CacheUpdateServiceProvider(Service_t *service, char *provider) { CacheUpdateMessage_t *msg; int i; pthread_mutex_lock(&cacheUpdateMutex); for (i = 0; i < cachedServicesCount; i ++) { if ((cachedServices[i]) && ServiceAreEqual(service, cachedServices[i])) { if (cachedServices[i]->provider) { free(cachedServices[i]->provider); } if (provider) { cachedServices[i]->provider = strdup(provider); } else { cachedServices[i]->provider = NULL; } msg = ObjectCreateType(CacheUpdateMessage_t); if (msg) { msg->type = CacheUpdate_Service_Provider; ObjectRefInc(service); msg->details.serviceProvider.service = service; if (provider) { msg->details.serviceProvider.provider = strdup(provider); } DeferredProcessingAddJob(CacheProcessUpdateMessage, msg); ObjectRefDec(msg); } break; } } pthread_mutex_unlock(&cacheUpdateMutex); } void CacheUpdateServiceDefaultAuthority(Service_t *service, char *defaultAuthority) { CacheUpdateMessage_t *msg; int i; pthread_mutex_lock(&cacheUpdateMutex); for (i = 0; i < cachedServicesCount; i ++) { if ((cachedServices[i]) && ServiceAreEqual(service, cachedServices[i])) { if (cachedServices[i]->defaultAuthority) { free(cachedServices[i]->defaultAuthority); } if (defaultAuthority) { cachedServices[i]->defaultAuthority = strdup(defaultAuthority); } else { cachedServices[i]->defaultAuthority = NULL; } msg = ObjectCreateType(CacheUpdateMessage_t); if (msg) { msg->type = CacheUpdate_Service_Default_Auth; ObjectRefInc(service); msg->details.serviceDefaultAuthority.service = service; if (defaultAuthority) { msg->details.serviceDefaultAuthority.defaultAuthority = strdup(defaultAuthority); } DeferredProcessingAddJob(CacheProcessUpdateMessage, msg); ObjectRefDec(msg); } break; } } pthread_mutex_unlock(&cacheUpdateMutex); } void CacheUpdateServiceSource(Service_t *service, uint16_t source) { CacheUpdateMessage_t *msg; int i; pthread_mutex_lock(&cacheUpdateMutex); for (i = 0; i < cachedServicesCount; i ++) { if ((cachedServices[i]) && ServiceAreEqual(service, cachedServices[i])) { cachedServices[i]->source = source; msg = ObjectCreateType(CacheUpdateMessage_t); if (msg) { msg->type = CacheUpdate_Service_Source; ObjectRefInc(service); msg->details.serviceSource.service = service; msg->details.serviceSource.source = source; DeferredProcessingAddJob(CacheProcessUpdateMessage, msg); ObjectRefDec(msg); } break; } } pthread_mutex_unlock(&cacheUpdateMutex); } void CacheUpdateServiceConditionalAccess(Service_t *service, bool ca) { CacheUpdateMessage_t *msg; int i; pthread_mutex_lock(&cacheUpdateMutex); for (i = 0; i < cachedServicesCount; i ++) { if ((cachedServices[i]) && ServiceAreEqual(service, cachedServices[i])) { cachedServices[i]->conditionalAccess = ca; msg = ObjectCreateType(CacheUpdateMessage_t); if (msg) { msg->type = CacheUpdate_Service_CA; ObjectRefInc(service); msg->details.serviceCA.service = service; msg->details.serviceCA.ca = ca; DeferredProcessingAddJob(CacheProcessUpdateMessage, msg); ObjectRefDec(msg); } break; } } pthread_mutex_unlock(&cacheUpdateMutex); } void CacheUpdateServiceType(Service_t *service, ServiceType type) { CacheUpdateMessage_t *msg; int i; pthread_mutex_lock(&cacheUpdateMutex); for (i = 0; i < cachedServicesCount; i ++) { if ((cachedServices[i]) && ServiceAreEqual(service, cachedServices[i])) { cachedServices[i]->type = type; msg = ObjectCreateType(CacheUpdateMessage_t); if (msg) { msg->type = CacheUpdate_Service_Type; ObjectRefInc(service); msg->details.serviceType.service = service; msg->details.serviceType.type = type; DeferredProcessingAddJob(CacheProcessUpdateMessage, msg); ObjectRefDec(msg); } break; } } pthread_mutex_unlock(&cacheUpdateMutex); } void CacheUpdateProgramInfo(Service_t *service, ProgramInfo_t *info) { CacheUpdateMessage_t *msg; int i; pthread_mutex_lock(&cacheUpdateMutex); for (i = 0; i < cachedServicesCount; i ++) { if ((cachedServices[i]) && ServiceAreEqual(service, cachedServices[i])) { if (cachedPIDs[i]) { ObjectRefDec(cachedPIDs[i]); } cachedPIDs[i] = info; msg = ObjectCreateType(CacheUpdateMessage_t); if (msg) { msg->type = CacheUpdate_Service_PIDs; ObjectRefInc(service); msg->details.servicePIDs.service = service; ObjectRefInc(info); msg->details.servicePIDs.info = info; DeferredProcessingAddJob(CacheProcessUpdateMessage, msg); ObjectRefDec(msg); } EventsFireEventListeners(pidsUpdatedEvent, cachedServices[i]); break; } } pthread_mutex_unlock(&cacheUpdateMutex); } Service_t *CacheServiceAdd(int id, int source) { CacheUpdateMessage_t *msg; Service_t *result = ServiceNew(); if (result) { result->id = id; result->source = source; result->pmtPID = 8191; /* Use the stuffing PID until we have an id */ if (asprintf(&result->name, "%04x", id) == -1) { LogModule(LOG_ERROR, CACHE, "Failed to allocate memory for default service name (0x%04x).\n", result->id); result->name = NULL; } result->multiplexUID = cachedServicesMultiplex->uid; pthread_mutex_lock(&cacheUpdateMutex); LogModule(LOG_DEBUG, CACHE, "Added service %04x at %d\n", result->id, cachedServicesCount); ServiceRefInc(result); cachedServices[cachedServicesCount] = result; cachedPIDs[cachedServicesCount] = NULL; cacheFlags[cachedServicesCount] = CacheFlag_Clean; cachedServicesCount ++; msg = ObjectCreateType(CacheUpdateMessage_t); if (msg) { msg->type = CacheUpdate_Service_Added; msg->details.serviceAdd.id = id; msg->details.serviceAdd.multiplexUID = cachedServicesMultiplex->uid; msg->details.serviceAdd.source = result->source; msg->details.serviceAdd.name = strdup(result->name); DeferredProcessingAddJob(CacheProcessUpdateMessage, msg); ObjectRefDec(msg); } pthread_mutex_unlock(&cacheUpdateMutex); } return result; } bool CacheServiceSeen(Service_t *service, bool seen, bool pat) { bool exists = FALSE; int seenIndex = -1; int i; for (i = 0; i < cachedServicesCount; i ++) { if ((cachedServices[i]) && ServiceAreEqual(service, cachedServices[i])) { seenIndex = i; break; } } if (seenIndex != -1) { int flag = pat ? CacheFlag_Not_Seen_In_PAT : CacheFlag_Not_Seen_In_SDT; if (seen) { cacheFlags[seenIndex] &= ~flag; } else { cacheFlags[seenIndex] |= flag; } if ((cacheFlags[seenIndex] & CacheFlag_Not_Seen_In_PAT) && (cacheFlags[seenIndex] & CacheFlag_Not_Seen_In_SDT)) { exists = FALSE; } else { exists = TRUE; } } return exists; } void CacheServiceDelete(Service_t *service) { CacheUpdateMessage_t *msg; int deletedIndex = -1; int i; pthread_mutex_lock(&cacheUpdateMutex); for (i = 0; i < cachedServicesCount; i ++) { if ((cachedServices[i]) && ServiceAreEqual(service, cachedServices[i])) { deletedIndex = i; break; } } if (deletedIndex != -1) { LogModule(LOG_DEBUG, CACHE, "Removing service at index %d\n", deletedIndex); if (cachedPIDs[deletedIndex]) { /* Get rid of the pids as we don't need them any more! */ ObjectRefDec(cachedPIDs[deletedIndex]); } cachedServicesCount --; /* Remove the deleted service from the list */ for (i = deletedIndex; i < cachedServicesCount; i ++) { LogModule(LOG_DEBUG, CACHE, "Moving %s (%x) to %d\n", cachedServices[i + 1]->name, cachedServices[i + 1]->id, i); cachedPIDs[i] = cachedPIDs[i + 1]; cachedServices[i] = cachedServices[i + 1]; cacheFlags[i] = cacheFlags [i + 1]; } msg = ObjectCreateType(CacheUpdateMessage_t); if (msg) { msg->type = CacheUpdate_Service_Deleted; ObjectRefInc(service); msg->details.serviceDelete.service = service; DeferredProcessingAddJob(CacheProcessUpdateMessage, msg); ObjectRefDec(msg); } } pthread_mutex_unlock(&cacheUpdateMutex); } void CacheWriteback() { /* Do nothing, move to CacheUpdateProcessor. */ } static void CacheServicesFree() { int i; for (i = 0; i < cachedServicesCount; i ++) { if (cachedServices[i]) { ServiceRefDec(cachedServices[i]); cachedServices[i] = NULL; } if (cachedPIDs[i]) { ObjectRefDec(cachedPIDs[i]); cachedPIDs[i] = NULL; } } cachedServicesCount = 0; MultiplexRefDec(cachedServicesMultiplex); cachedServicesMultiplex = NULL; } static void CacheProcessUpdateMessage(void *ptr) { CacheUpdateMessage_t *msg = ptr; int rc; Multiplex_t *mux = NULL; Service_t *service = NULL; DBaseTransactionBegin(); switch(msg->type) { case CacheUpdate_Multiplex_TS_id: LogModule(LOG_DEBUG, CACHE, "Updating Multiplex TS id\n"); mux = msg->details.multiplexTSId.multiplex; rc = MultiplexTSIdSet(mux, msg->details.multiplexTSId.tsId); if (rc) { LogModule(LOG_ERROR, CACHE, "Failed to update Multiplex TS id (0x%x)\n", rc); } break; case CacheUpdate_Multiplex_Network_id: LogModule(LOG_DEBUG, CACHE, "Updating Multiplex Original Network id\n"); mux = msg->details.multiplexNetworkId.multiplex; rc = MultiplexNetworkIdSet(mux, msg->details.multiplexNetworkId.networkId); if (rc) { LogModule(LOG_ERROR, CACHE, "Failed to update Multiplex Original Network id (0x%x)\n", rc); } break; case CacheUpdate_Service_PMT_PID: service = msg->details.servicePMTPID.service; LogModule(LOG_DEBUG, CACHE, "Updating PMT PID for %s\n", service->name); ServicePMTPIDSet(service, msg->details.servicePMTPID.pmtPid); break; case CacheUpdate_Service_PIDs: service = msg->details.servicePIDs.service; LogModule(LOG_DEBUG, CACHE, "Updating PIDs for %s\n", service->name); ProgramInfoRemove(service); ProgramInfoSet(service, msg->details.servicePIDs.info); ObjectRefDec(msg->details.servicePIDs.info); break; case CacheUpdate_Service_Name: service = msg->details.serviceName.service; LogModule(LOG_DEBUG, CACHE, "Updating name for 0x%04x new name %s\n", service->id, msg->details.serviceName.name); ServiceNameSet(service, msg->details.serviceName.name); free(msg->details.serviceName.name); break; case CacheUpdate_Service_Source: service = msg->details.serviceSource.service; LogModule(LOG_DEBUG, CACHE, "Updating source for 0x%04x new source %x\n", service->id, msg->details.serviceSource.source); ServiceSourceSet(service, msg->details.serviceSource.source); break; case CacheUpdate_Service_CA: service = msg->details.serviceCA.service; LogModule(LOG_DEBUG, CACHE, "Updating CA state for 0x%04x new CA state %s\n", service->id, msg->details.serviceCA.ca ? "CA":"FTA"); ServiceConditionalAccessSet(service, msg->details.serviceCA.ca); break; case CacheUpdate_Service_Type: service = msg->details.serviceType.service; LogModule(LOG_DEBUG, CACHE, "Updating Type for 0x%04x new Type %d\n", service->id, msg->details.serviceType.type); ServiceTypeSet(service, msg->details.serviceType.type); break; case CacheUpdate_Service_Provider: service = msg->details.serviceProvider.service; LogModule(LOG_DEBUG, CACHE, "Updating provider for 0x%04x new provider %s\n", service->id, service->provider); ServiceProviderSet(service, msg->details.serviceProvider.provider); free(msg->details.serviceProvider.provider); break; case CacheUpdate_Service_Default_Auth: service = msg->details.serviceDefaultAuthority.service; LogModule(LOG_DEBUG, CACHE, "Updating default authority for 0x%04x new authority %s\n", service->id, msg->details.serviceDefaultAuthority.defaultAuthority); ServiceDefaultAuthoritySet(service, msg->details.serviceDefaultAuthority.defaultAuthority); free(msg->details.serviceDefaultAuthority.defaultAuthority); break; case CacheUpdate_Service_Added: LogModule(LOG_DEBUG, CACHE, "Adding service 0x%04x\n", msg->details.serviceAdd.id); ServiceAdd(msg->details.serviceAdd.multiplexUID, msg->details.serviceAdd.name, msg->details.serviceAdd.id, msg->details.serviceAdd.source); free(msg->details.serviceAdd.name); break; case CacheUpdate_Service_Deleted: service = msg->details.serviceDelete.service; LogModule(LOG_DEBUG, CACHE, "Deleting service %s (0x%04x)\n", service->name, service->id); ServiceDelete(service); ProgramInfoRemove(service); break; } DBaseTransactionCommit(); if (mux) { ObjectRefDec(mux); } if (service) { ObjectRefDec(service); } ObjectRefDec(msg); } dvbstreamer-2.1.0/src/commands.c000066400000000000000000000375201217721213100165700ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA commands.c Command Processing and command functions. */ #include #include #include #include #include #include #include #include #include #include #include #include #include "commands.h" #include "multiplexes.h" #include "services.h" #include "dvbadapter.h" #include "ts.h" #include "logging.h" #include "cache.h" #include "main.h" #include "deliverymethod.h" #include "plugin.h" #include "servicefilter.h" #include "tuning.h" #include "patprocessor.h" #include "pmtprocessor.h" #include "sdtprocessor.h" #include "psipprocessor.h" /******************************************************************************* * Defines * *******************************************************************************/ #define PROMPT "DVBStreamer>" #define MAX_ARGS (10) /******************************************************************************* * Prototypes * *******************************************************************************/ /* Context Prototypes. */ static void CommandContextSet(CommandContext_t *context); /* File Prototypes */ static char **AttemptComplete (const char *text, int start, int end); static char *CompleteCommand(const char *text, int state); static bool ProcessCommand(CommandContext_t *context, char *command, char *argument); static Command_t *FindCommand(Command_t *commands, char *command); static char **Tokenise(char *arguments, int *argc); static void ParseLine(char *line, char **command, char **argument); static void CommandQuit(int argc, char **argv); static void CommandHelp(int argc, char **argv); /******************************************************************************* * Global variables * *******************************************************************************/ static CommandContext_t ConsoleCommandContext = { "console", FALSE, NULL, NULL, NULL, NULL, TRUE, 0, {0} }; static Command_t coreCommands[] = { { "quit", 0, 0, "Exit the program.", "Exit the program, can be used in the startup file to stop further processing.", CommandQuit }, { "help", 0, 1, "Display the list of commands or help on a specific command.", "help []\n" "List all available commands or displays specific help for the command specifed.", CommandHelp }, COMMANDS_SENTINEL }; static bool quit = FALSE; static List_t *CommandsList; static pthread_mutex_t CommandMutex = PTHREAD_MUTEX_INITIALIZER; static pthread_key_t commandContextKey; static char COMMAND[] = "Command"; /******************************************************************************* * Global functions * *******************************************************************************/ int CommandInit(void) { rl_readline_name = "DVBStreamer"; rl_attempted_completion_function = AttemptComplete; CommandsList = ListCreate(); if (!CommandsList) { LogModule(LOG_ERROR, COMMAND, "Failed to allocate CommandsList!\n"); return -1; } ListAdd( CommandsList, coreCommands); pthread_key_create(&commandContextKey, NULL); ConsoleCommandContext.outfp = stdout; ConsoleCommandContext.infp = stdin; return 0; } void CommandDeInit(void) { ListFree( CommandsList, NULL); } void CommandRegisterCommands(Command_t *commands) { pthread_mutex_lock(&CommandMutex); ListAdd( CommandsList, commands); pthread_mutex_unlock(&CommandMutex); } void CommandUnRegisterCommands(Command_t *commands) { pthread_mutex_lock(&CommandMutex); ListRemove( CommandsList, commands); pthread_mutex_unlock(&CommandMutex); } static void CommandContextSet(CommandContext_t *context) { pthread_setspecific(commandContextKey, context); } CommandContext_t *CommandContextGet(void) { return pthread_getspecific(commandContextKey); } int CommandPrintf(const char* fmt, ...) { va_list args; int result = 0; CommandContext_t *context = CommandContextGet(); va_start(args, fmt); result = vfprintf(context->outfp, fmt, args); va_end(args); return result; } char *CommandGets(char *buffer, int len) { CommandContext_t *context = CommandContextGet(); return fgets(buffer, len, context->infp); } /******************************************************************************* * Command Loop/Startup file functions * *******************************************************************************/ void CommandLoop(void) { quit = FALSE; /* Start Command loop */ while(!quit && !ExitProgram) { char *line = readline(PROMPT); if (line) { CommandExecuteConsole(line); free(line); } } } int CommandProcessFile(char *file) { int lineno = 0; FILE *fp; char line[256]; char *nl; fp = fopen(file, "r"); if (!fp) { return 1; } quit = FALSE; while(!feof(fp) && !quit) { if (fgets(line, sizeof(line), fp)) { nl = strchr(line, '\n'); if (nl) { *nl = 0; } nl = strchr(line, '\r'); if (nl) { *nl = 0; } lineno ++; if (strlen(line) > 0) { CommandExecute(&ConsoleCommandContext, line); if (ConsoleCommandContext.errorNumber != COMMAND_OK) { if (ConsoleCommandContext.errorNumber == COMMAND_ERROR_UNKNOWN_COMMAND) { fprintf(stderr, "%s(%d): Unknown command \"%s\"\n", file, lineno, line); } else { fprintf(stderr, "%s(%d): %s\n", file, lineno, ConsoleCommandContext.errorMessage); } } } } } fclose(fp); return 0; } bool CommandExecuteConsole(char *line) { bool found = FALSE; if (CommandExecute(&ConsoleCommandContext, line)) { add_history(line); found = TRUE; } if (ConsoleCommandContext.errorNumber != COMMAND_OK) { printf("%s\n", ConsoleCommandContext.errorMessage); } return found; } bool CommandExecute(CommandContext_t *context, char *line) { bool commandFound = FALSE; char *command = NULL; char *argument = NULL; CommandContextSet(context); CommandError(COMMAND_OK, "OK"); ParseLine(line, &command, &argument); if (command && (strlen(command) > 0)) { commandFound = ProcessCommand(context, command, argument); free(command); if (argument) { free(argument); } if (!commandFound) { CommandError(COMMAND_ERROR_UNKNOWN_COMMAND, "Unknown command"); } } CommandContextSet(NULL); return commandFound; } /******************************************************************************* * Command parsing functions * *******************************************************************************/ static char **AttemptComplete (const char *text, int start, int end) { char **matches = (char **)NULL; if (start == 0) { matches = rl_completion_matches (text, CompleteCommand); } else { rl_attempted_completion_over = 1; } return (matches); } static char *CompleteCommand(const char *text, int state) { static int lastIndex = -1, textlen; static ListIterator_t iterator; int i; if (state == 0) { lastIndex = -1; textlen = strlen(text); ListIterator_Init(iterator, CommandsList); } while(ListIterator_MoreEntries(iterator)) { Command_t *commands = ListIterator_Current(iterator); for ( i = lastIndex + 1; commands[i].command; i ++) { if (strncasecmp(text, commands[i].command, textlen) == 0) { lastIndex = i; return strdup(commands[i].command); } } ListIterator_Next(iterator); lastIndex = -1; } return NULL; } static bool ProcessCommand(CommandContext_t *context, char *command, char *argument) { char **argv = NULL; int argc = 0; bool commandFound = FALSE; ListIterator_t iterator; Command_t *commandInfo = NULL; pthread_mutex_lock(&CommandMutex); if (context->commands) { commandInfo = FindCommand(context->commands, command); } if (!commandInfo) { for ( ListIterator_Init(iterator, CommandsList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { Command_t *commands = ListIterator_Current(iterator); commandInfo = FindCommand(commands, command); if (commandInfo) { break; } } } pthread_mutex_unlock(&CommandMutex); if (commandInfo) { if (argument) { argv = Tokenise(argument, &argc); } else { argc = 0; argv = calloc(sizeof(char*), 1); argv[0] = NULL; } if ((argc >= commandInfo->minArgs) && (argc <= commandInfo->maxArgs)) { commandInfo->commandfunc(argc, argv ); } else { CommandError(COMMAND_ERROR_WRONG_ARGS, "Incorrect number of arguments!"); } for (; argc > 0; argc --) { free(argv[argc - 1]); } free(argv); commandFound = TRUE; } return commandFound; } static Command_t *FindCommand(Command_t *commands, char *command) { int i; for (i = 0; commands[i].command; i ++) { if (strcasecmp(command,commands[i].command) == 0) { return &commands[i]; } } return NULL; } static void ParseLine(char *line, char **command, char **argument) { long eol = 0; long eoc = 0; char *resultCmd = NULL; char *resultArg = NULL; /* Trim leading spaces */ for (;*line && isspace(*line); line ++); /* Handle null/comment lines */ if (*line == '#') { return; } /* Handle end of line comments */ for (eol = 0; line[eol] && (line[eol] != '#'); eol ++); /* Find first space after command */ for (eoc = 0; line[eoc] && (eoc < eol); eoc ++) { if (isspace(line[eoc])) { break; } } if (eoc != eol) { long argStart; long argEnd; long argLen; for (argStart = eoc + 1;(argStart < eol) && isspace(line[argStart]); argStart ++); for (argEnd = eol - 1; (argEnd > argStart) && isspace(line[argEnd]); argEnd --); argLen = (argEnd - argStart) + 1; if (argLen > 0) { resultArg = malloc(argLen + 1); if (resultArg) { strncpy(resultArg, line + argStart, argLen); resultArg[argLen] = 0; } } } if(eoc) { resultCmd = malloc(eoc + 1); if (resultCmd) { strncpy(resultCmd, line, eoc); resultCmd[eoc] = 0; } } *command = resultCmd; *argument = resultArg; } static char **Tokenise(char *arguments, int *argc) { int currentarg = 0; char *start = arguments; char *end; char t; char **args; args = calloc(sizeof(char *), MAX_ARGS); while (*start) { bool doubleQuotesOpen = FALSE; bool singleQuotesOpen = FALSE; /* Trim spaces from the start */ for (; *start && isspace(*start); start ++); if (start[0] == '"') { doubleQuotesOpen = TRUE; start ++; } if (start[0] == '\'') { singleQuotesOpen = TRUE; start ++; } /* Work out the end of the argument */ for (end = start; *end; end ++) { if (doubleQuotesOpen) { if (*end== '"') { break; } } else if (singleQuotesOpen) { if (*end== '\'') { break; } } else if (isspace(*end)) { break; } } t = end[0]; end[0] = 0; args[currentarg] = strdup(start); end[0] = t; start = end; if (doubleQuotesOpen || singleQuotesOpen) { start ++; } currentarg ++; if (currentarg >= MAX_ARGS) { break; } } *argc = currentarg; return args; } /******************************************************************************* * Command Functions * *******************************************************************************/ static void CommandQuit(int argc, char **argv) { CommandContext_t *context = CommandContextGet(); if (context->remote) { CommandError(COMMAND_ERROR_GENERIC, "Only console sessions can do that!"); } else { quit = TRUE; } } static void CommandHelp(int argc, char **argv) { int i; ListIterator_t iterator; CommandContext_t *context = CommandContextGet(); if (argc) { Command_t *requestedcmd = NULL; if (context->commands) { requestedcmd = FindCommand( context->commands, argv[0]); } if (!requestedcmd) { for ( ListIterator_Init(iterator, CommandsList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { Command_t *commands = ListIterator_Current(iterator); requestedcmd = FindCommand( commands, argv[0]); if (requestedcmd) { break; } } } if (requestedcmd) { CommandPrintf("%s\n\n", requestedcmd->longHelp); } else { CommandError(COMMAND_ERROR_GENERIC,"No help for unknown command!"); } } else { for ( ListIterator_Init(iterator, CommandsList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { Command_t *commands = ListIterator_Current(iterator); for (i = 0; commands[i].command; i ++) { CommandPrintf("%12s - %s\n", commands[i].command, commands[i].shortHelp); } } if (context->commands) { for (i = 0; context->commands[i].command; i ++) { CommandPrintf("%12s - %s\n", context->commands[i].command, context->commands[i].shortHelp); } } } } dvbstreamer-2.1.0/src/commands/000077500000000000000000000000001217721213100164155ustar00rootroot00000000000000dvbstreamer-2.1.0/src/commands/cmd_epg.c000066400000000000000000000140471217721213100201650ustar00rootroot00000000000000/* Copyright (C) 2009 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA cmd_epg.c Command functions to access EPG information. */ #include #include #include #include #include #include #include #include #include #include #include "commands.h" #include "logging.h" #include "epgchannel.h" #include "main.h" #include "utf8.h" /******************************************************************************* * Prototypes * *******************************************************************************/ static void CommandEPGData(int argc, char **argv); static void PrintXmlified(char *text); /******************************************************************************* * Global variables * *******************************************************************************/ Command_t CommandEPGInfo[] = { { "epgdata", 0, 0, "Register to receive EPG data in XML format.", "EPG data is output to the command context in XML format until DVBStreamer" "terminates or the command context is closed (ie the socket is disconnected).", CommandEPGData }, COMMANDS_SENTINEL }; /******************************************************************************* * Global functions * *******************************************************************************/ void CommandInstallEPG(void) { CommandRegisterCommands(CommandEPGInfo); } void CommandUnInstallEPG(void) { CommandUnRegisterCommands(CommandEPGInfo); } /******************************************************************************* * Local Functions * *******************************************************************************/ static void CommandEPGData(int argc, char **argv) { MessageQ_t msgQ = MessageQCreate(); char startTimeStr[25]; char endTimeStr[25]; CommandContext_t *cmdContext = CommandContextGet(); EPGChannelRegisterListener(msgQ); CommandPrintf("\n"); fflush(cmdContext->outfp); while (!ferror(cmdContext->outfp) && !MessageQIsQuitSet(msgQ) && !ExitProgram) { EPGChannelMessage_t *msg = MessageQReceiveTimed(msgQ, 400); if (msg != NULL) { CommandPrintf("\n", msg->eventRef.serviceRef.netId, msg->eventRef.serviceRef.tsId, msg->eventRef.serviceRef.serviceId, msg->eventRef.eventId); switch(msg->type) { case EPGChannelMessageType_Event: strftime(startTimeStr, sizeof(startTimeStr), "%Y-%m-%d %T", &msg->data.event.startTime); strftime(endTimeStr, sizeof(startTimeStr), "%Y-%m-%d %T", &msg->data.event.endTime); CommandPrintf("\n", startTimeStr, endTimeStr, msg->data.event.ca ? "yes":"no"); break; case EPGChannelMessageType_Detail: CommandPrintf("", msg->data.detail.lang, msg->data.detail.name); PrintXmlified(msg->data.detail.value); CommandPrintf("\n"); break; case EPGChannelMessageType_Rating: CommandPrintf("\n", msg->data.rating.system, msg->data.rating.rating); break; } CommandPrintf("\n"); fflush(cmdContext->outfp); ObjectRefDec(msg); } } EPGChannelUnregisterListener(msgQ); MessageQDestroy(msgQ); } static void PrintXmlified(char *text) { char buffer[256]; char temp[10]; int bufferIndex = 0; int i; int utf8CharLen; int len = strlen(text); buffer[0] = 0; for (i = 0; i < len;) { unsigned int ch = UTF8_nextchar(text, &i); switch (ch) { case '\t': case '\n': case ' ' ... '%': // & case '\'' ... ';': // < case '=': // > case '?' ... 0x7E: temp[0] = (char)ch; temp[1] = 0; break; case '&': strcpy(temp, "&"); break; case '<': strcpy(temp, "<"); break; case '>': strcpy(temp, ">"); break; case 0x0000 ... 0x0008: case 0x000B ... 0x001F: case 0x007F: fprintf(stderr, "Illegal char %04x\n", i); default: utf8CharLen = UTF8_wc_toutf8(temp, ch); temp[utf8CharLen] = 0; break; } // switch if (strlen(temp) + bufferIndex >= sizeof(buffer) - 1) { CommandPrintf("%s", buffer); bufferIndex = 0; buffer[0] = 0; } strcat(buffer, temp); bufferIndex += strlen(temp); } if (bufferIndex) { CommandPrintf("%s", buffer); } } dvbstreamer-2.1.0/src/commands/cmd_info.c000077500000000000000000000742341217721213100203540ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA info.c Command functions to supply the user with information about the system. */ #include #include #include #include #include #include #include #include #include #include #include #include #include "commands.h" #include "multiplexes.h" #include "services.h" #include "dvbadapter.h" #include "ts.h" #include "logging.h" #include "cache.h" #include "main.h" #include "deliverymethod.h" #include "plugin.h" #include "servicefilter.h" #include "tuning.h" #include "properties.h" /******************************************************************************* * Defines * *******************************************************************************/ #define FILTER_TYPE_NOT_USED 0 #define FILTER_TYPE_TV 1 #define FILTER_TYPE_RADIO 2 #define FILTER_TYPE_DATA 4 #define FILTER_TYPE_UNKNOWN 8 #define FILTER_ACCESS_NOT_USED 0 #define FILTER_ACCESS_FTA 1 #define FILTER_ACCESS_CA 2 /******************************************************************************* * Prototypes * *******************************************************************************/ static void CommandListServices(int argc, char **argv); static bool FilterService(Service_t *service, uint32_t filterByType, uint32_t filterByAccess, char* provider); static void CommandListMuxes(int argc, char **argv); static void CommandListPids(int argc, char **argv); static char *GetStreamTypeString(int type); static void CommandCurrent(int argc, char **argv); static void CommandServiceInfo(int argc, char **argv); static void CommandMuxInfo(int argc, char **argv); static void CommandStats(int argc, char **argv); static void CommandFEStatus(int argc, char **argv); static void CommandFEParams(int argc, char **argv); static void CommandListProperties(int argc, char **argv); static void CommandGetProperty(int argc, char **argv); static void CommandSetProperty(int argc, char **argv); static void CommandPropertyInfo(int argc, char **argv); static void CommandDumpTSReader(int argc, char **argv); static void CommandListLNBs(int argc, char **argv); static char* GetPropertyTypeString(PropertyType_e type); /******************************************************************************* * Global variables * *******************************************************************************/ Command_t CommandDetailsInfo[] = { { "lsservices", 0, 6, "List all services or for a specific multiplex.", "lsservices [-id] [filters] [-q query|[multiplex]]\n" "Lists selected services, by default all services on all multiplex are displayed.\n" "\n" "-id\n" "List the services fully quailified id.\n" "\n" "filters (tv, radio, data, unknown)\n" "Multiple filters can be specified or if no filters are specified all selected" " services will be displayed\n" "\n" "-q query\n" "List names that match the specified query, %% can be used as a wild card character\n" "\n" "multiplex (\'mux\'| uid | netid.tsid | frequency)\n" "Select only services on the specified multiplex, where \'mux\' indiciated the current multiplex.", CommandListServices }, { "lsmuxes", 0, 1, "List multiplexes.", "lsmuxes [-id]\n" "List all available multiplex UIDs.\n" "\n" "-id\n" "List the multiplexes network id.ts id", CommandListMuxes }, { "lspids", 1, 2, "List the PIDs for a specified service.", "lspids \n" "List all the PIDs specified in PMT.", CommandListPids }, { "current", 0, 0, "Print out the service currently being streamed.", "Shows the service that is currently being streamed to the default output.", CommandCurrent }, { "serviceinfo", 1, 1, "Display information about a service.", "serviceinfo \n" "Displays information about the specified service.", CommandServiceInfo }, { "muxinfo", 1, 2, "Display information about a mux.", "muxinfo or\n" "muxinfo .\n" "muxinfo \n" "Displays information about the specified service.", CommandMuxInfo }, { "stats", 0, 0, "Display the stats for the PAT,PMT and service PID filters.", "Display the number of packets processed for the PSI/SI filters and the number of" " packets filtered for each service filter and manual output.", CommandStats }, { "festatus", 0, 0, "Displays the status of the tuner.", "Displays whether the front end is locked, the bit error rate and signal to noise" "ratio and the signal strength", CommandFEStatus }, { "feparams", 0, 0, "Get current frontend parameters.", "Displays the current frontend parameters as a yaml document.", CommandFEParams, }, { "lsprops", 0, 2, "List available properties.", "lsprops [-l] []\n" "List all available properties at the specified path or the root if not supplied." "Use -l to show type and whether the property is readable/writable and has any children.", CommandListProperties }, { "getprop", 1, 1, "Get the value of a property.", "getprop \n" "Get the value of the specified property.", CommandGetProperty }, { "setprop", 2, 2, "Set the value of a property.", "setprop \n" "Set the value of the specified property to that of .", CommandSetProperty }, { "propinfo", 1, 1, "Display information about a property.", "propinfo \n" "Display information about the specified property.", CommandPropertyInfo }, { "dumptsr", 0,0, "Dump information from the TSReader", "Dump information from the TSReader", CommandDumpTSReader }, { "lslnbs", 0,0, "List known LNBs", "List the LNBs that dvbstreamer knows about and the name used to select them", CommandListLNBs }, COMMANDS_SENTINEL }; static time_t StartTime; /******************************************************************************* * Global functions * *******************************************************************************/ void CommandInstallInfo(void) { CommandRegisterCommands(CommandDetailsInfo); StartTime = time(NULL); } void CommandUnInstallInfo(void) { CommandUnRegisterCommands(CommandDetailsInfo); } /******************************************************************************* * Local Functions * *******************************************************************************/ static void CommandListServices(int argc, char **argv) { List_t *list = NULL; Service_t *service; Multiplex_t *multiplex = NULL; int i; bool dvbIds = FALSE; char *query = NULL; uint32_t filterByType = FILTER_TYPE_NOT_USED; uint32_t filterByAccess = FILTER_ACCESS_NOT_USED; char *provider = NULL; char *providerStr = "provider="; /* Make sure the database is up-to-date before displaying the names */ UpdateDatabase(); for (i = 0; i < argc; i ++) { if (strcmp(argv[i], "-id") == 0) { dvbIds = TRUE; } else if (strcmp(argv[i], "-q") == 0) { if (multiplex) { CommandError(COMMAND_ERROR_GENERIC, "Cannot specify a multiplex and a query string!"); return; } if (argc <= i +1) { CommandError(COMMAND_ERROR_GENERIC, "Missing query string"); return; } i ++; query = argv[i]; } else if (strcmp(argv[i], "mux") == 0) { if (query) { CommandError(COMMAND_ERROR_GENERIC, "Cannot specify a multiplex and a query string!"); return; } if (multiplex) { MultiplexRefDec(multiplex); } multiplex = TuningCurrentMultiplexGet(); if (!multiplex) { CommandError(COMMAND_ERROR_GENERIC, "No multiplex currently selected!"); return; } } else if (strcmp(argv[i], "tv") == 0) { filterByType |= FILTER_TYPE_TV; } else if (strcmp(argv[i], "radio") == 0) { filterByType |= FILTER_TYPE_RADIO; } else if (strcmp(argv[i], "data") == 0) { filterByType |= FILTER_TYPE_DATA; } else if (strcmp(argv[i], "unknown") == 0) { filterByType |= FILTER_TYPE_UNKNOWN; } else if (strcmp(argv[i], "fta") == 0) { filterByAccess |= FILTER_ACCESS_FTA; } else if (strcmp(argv[i], "ca") == 0) { filterByAccess |= FILTER_ACCESS_CA; } else if (strncmp(argv[i], providerStr, strlen(providerStr)) == 0) { provider = argv[i] + strlen(providerStr); } else { if (multiplex) { MultiplexRefDec(multiplex); } multiplex = MultiplexFind(argv[i]); if (!multiplex) { CommandError(COMMAND_ERROR_GENERIC, "Failed to find multiplex \"%s\"\n", argv[i]); return; } } } if (query) { list = ServiceListForNameLike(query); } else if (multiplex) { list = ServiceListForMultiplex(multiplex); MultiplexRefDec(multiplex); } else { list = ServiceListAll(); } if (list != NULL) { ListIterator_t iterator; for (ListIterator_Init(iterator, list); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { service = ListIterator_Current(iterator); if (FilterService(service, filterByType, filterByAccess, provider)) { if (dvbIds) { char *idName = ServiceGetIDNameStr(service, NULL); CommandPrintf("%s\n", idName); free(idName); } else { CommandPrintf("%s\n", service->name); } } } ObjectListFree(list); } } static bool FilterService(Service_t *service, uint32_t filterByType, uint32_t filterByAccess, char* provider) { bool filterByTypeResult = FALSE; bool filterByAccessResult = FALSE; bool filterByProviderResult = FALSE; if (filterByType) { if ((filterByType & FILTER_TYPE_TV )&& (service->type == ServiceType_TV)) { filterByTypeResult = TRUE; } if ((filterByType & FILTER_TYPE_RADIO)&& (service->type == ServiceType_Radio)) { filterByTypeResult = TRUE; } if ((filterByType & FILTER_TYPE_DATA)&& (service->type == ServiceType_Data)) { filterByTypeResult = TRUE; } if ((filterByType & FILTER_TYPE_UNKNOWN)&& (service->type == ServiceType_Unknown)) { filterByTypeResult = TRUE; } } else { filterByTypeResult = TRUE; } if (filterByAccess) { if ((filterByAccess & FILTER_ACCESS_FTA) && !service->conditionalAccess) { filterByAccessResult = TRUE; } if ((filterByAccess & FILTER_ACCESS_CA) && service->conditionalAccess) { filterByAccessResult = TRUE; } } else { filterByAccessResult = TRUE; } if (provider) { filterByProviderResult = service->provider && (strcmp(provider, service->provider) == 0); } else { filterByProviderResult = TRUE; } return filterByTypeResult && filterByAccessResult && filterByProviderResult; } static void CommandListMuxes(int argc, char **argv) { int i; MultiplexList_t *list; Multiplex_t *multiplex = NULL; bool ids = FALSE; if ((argc == 1) && (strcmp(argv[0], "-id") == 0)) { ids = TRUE; } list = MultiplexGetAll(); for (i = 0; i < list->nrofMultiplexes; i ++) { multiplex = (Multiplex_t*)list->multiplexes[i]; if (ids) { CommandPrintf("%04x.%04x : %d \n", multiplex->networkId & 0xffff, multiplex->tsId & 0xffff, multiplex->uid); } else { CommandPrintf("%d\n", multiplex->uid); } } ObjectRefDec(list); } static void CommandCurrent(int argc, char **argv) { Service_t *service = TuningCurrentServiceGet(); if ( service) { char *idName = ServiceGetIDNameStr(service, NULL); CommandPrintf("%s\n", idName); free(idName); ServiceRefDec(service); } } static void CommandServiceInfo(int argc, char **argv) { Service_t *service; UpdateDatabase(); service = ServiceFind(argv[0]); if (service) { static const char *serviceType[]= {"Digital TV", "Digital Radio", "Data", "Unknown"}; CommandPrintf("Name : \"%s\"\n", service->name); CommandPrintf("Provider : \"%s\"\n", service->provider); CommandPrintf("Type : %s\n", serviceType[service->type]); CommandPrintf("Conditional Access? : %s\n", service->conditionalAccess ? "CA":"Free to Air"); CommandPrintf("ID : %04x.%04x.%04x\n", service->networkId, service->tsId, service->id); CommandPrintf("Multiplex UID : %d\n", service->multiplexUID); CommandPrintf("Source : 0x%04x\n", service->source); CommandPrintf("Default Authority : \"%s\"\n", service->defaultAuthority); CommandPrintf("PMT PID : 0x%04x\n", service->pmtPID); ServiceRefDec(service); } else { CommandError(COMMAND_ERROR_GENERIC, "Service not found!"); } } static void CommandMuxInfo(int argc, char **argv) { Multiplex_t *multiplex = NULL; if (argc == 1) { multiplex = MultiplexFind(argv[0]); } if (argc == 2) { int netId = 0; int tsId = 0; sscanf(argv[0], "%x", &netId); sscanf(argv[1], "%x", &tsId); multiplex = MultiplexFindId(netId, tsId); } if (multiplex) { char *line; CommandPrintf("UID : %d\n", multiplex->uid); CommandPrintf("ID : %04x.%04x\n", multiplex->networkId, multiplex->tsId); CommandPrintf("PAT Version : %d\n", multiplex->patVersion); CommandPrintf("Tuning Parameters: \n"); CommandPrintf(" Type: %s\n", DVBDeliverySystemStr[multiplex->deliverySystem]); line = strtok(multiplex->tuningParams, "\n"); while (line) { CommandPrintf(" %s\n", line); line = strtok(NULL, "\n"); } MultiplexRefDec(multiplex); } else { CommandError(COMMAND_ERROR_GENERIC, "Multiplex not found!"); } } static void CommandStats(int argc, char **argv) { TSReader_t *tsReader = MainTSReaderGet(); TSReaderStats_t *stats = TSReaderExtractStats(tsReader); TSFilterGroupTypeStats_t *typeStats; for (typeStats = stats->types; typeStats; typeStats = typeStats->next) { TSFilterGroupStats_t *groupStats; CommandPrintf("%s: \n", typeStats->type); for (groupStats = typeStats->groups; groupStats; groupStats = groupStats->next) { CommandPrintf(" %20s : %lld (%lld)\n", groupStats->name, groupStats->packetsProcessed, groupStats->sectionsProcessed); } CommandPrintf("\n"); } CommandPrintf("Total packets processed: %lld\n", stats->totalPackets); CommandPrintf("Approximate TS bitrate : %gMbs\n", ((double)stats->bitrate / (1024.0 * 1024.0))); ObjectRefDec(stats); } static void CommandFEStatus(int argc, char **argv) { DVBFrontEndStatus_e status; unsigned int ber, strength, snr, ucblocks; if (DVBFrontEndStatus(MainDVBAdapterGet(), &status, &ber, &strength, &snr, &ucblocks)) { CommandPrintf("Failed to get frontend status!\n"); return; } CommandPrintf("Tuner status: [ %s%s%s%s%s%s ]\n", (status & FESTATUS_HAS_SIGNAL)?"Signal, ":"", (status & FESTATUS_TIMEDOUT)?"Timed out, ":"", (status & FESTATUS_HAS_LOCK)?"Lock, ":"", (status & FESTATUS_HAS_CARRIER)?"Carrier, ":"", (status & FESTATUS_HAS_VITERBI)?"VITERBI, ":"", (status & FESTATUS_HAS_SYNC)?"Sync ":""); CommandPrintf("Signal Strength: %d%%\nSNR: %d%%\nBER: %d\nUncorrected Blocks: %d\n", (strength * 100) / 0xffff, (snr * 100) / 0xffff, ber, ucblocks); } static void CommandFEParams(int argc, char **argv) { DVBAdapter_t *adapter = MainDVBAdapterGet(); DVBDeliverySystem_e system; char *params = DVBFrontEndParametersGet(adapter,&system); CommandPrintf("Delivery System: %s\n", DVBDeliverySystemStr[system]); CommandPrintf("%s\n", params); free(params); } static void CommandListPids(int argc, char **argv) { Service_t *service; service = ServiceFind(argv[0]); if (service) { bool cached = TRUE; int i; ProgramInfo_t *info; bool numericOutput = FALSE; if ((argc == 2) && (strcmp(argv[1], "-n") == 0)) { numericOutput =TRUE; } info = CacheProgramInfoGet(service); if (info == NULL) { info = ProgramInfoGet(service); cached = FALSE; } if (info) { bool pcrPresent = FALSE; CommandPrintf("%d PIDs for \"%s\"%s\n", info->streamInfoList->nrofStreams, argv[0], cached ? " (Cached)":""); for (i = 0; i < info->streamInfoList->nrofStreams; i ++) { if (info->streamInfoList->streams[i].pid == info->pcrPID) { pcrPresent = TRUE; } if (numericOutput) { CommandPrintf("%4d: { type: %d }\n",info->streamInfoList->streams[i].pid, info->streamInfoList->streams[i].type); } else { CommandPrintf("%4d: { type: \"%s\" }\n", info->streamInfoList->streams[i].pid, GetStreamTypeString(info->streamInfoList->streams[i].type)); } } if (!pcrPresent) { if (numericOutput) { CommandPrintf("%4d: { type: -1 }\n",info->pcrPID); } else { CommandPrintf("%4d: { type: PCR }\n", info->pcrPID); } } ObjectRefDec(info); } else { CommandPrintf("0 PIDs for \"%s\"\n",argv[0]); } ServiceRefDec(service); } else { CommandError(COMMAND_ERROR_GENERIC, "Service not found!"); } } static char *GetStreamTypeString(int type) { char *result= "Unknown"; switch(type) { case 0x00 : result ="ITU-T | ISO/IEC Reserved"; break; case 0x01 : result ="ISO/IEC 11172 Video"; break; case 0x02 : result ="ITU-T Rec. H.262 | ISO/IEC 13818-2 Video or ISO/IEC 11172-2 constrained parameter video stream"; break; case 0x03 : result ="ISO/IEC 11172 Audio"; break; case 0x04 : result ="ISO/IEC 13818-3 Audio"; break; case 0x05 : result ="ITU-T Rec. H.222.0 | ISO/IEC 13818-1 private_sections"; break; case 0x06 : result ="ITU-T Rec. H.222.0 | ISO/IEC 13818-1 PES packets containing private data"; break; case 0x07 : result ="ISO/IEC 13522 MHEG"; break; case 0x08 : result ="ITU-T Rec. H.222.0 | ISO/IEC 13818-1 Annex A DSM-CC"; break; case 0x09 : result ="ITU-T Rec. H.222.1"; break; case 0x0A : result ="ISO/IEC 13818-6 type A"; break; case 0x0B : result ="ISO/IEC 13818-6 type B"; break; case 0x0C : result ="ISO/IEC 13818-6 type C"; break; case 0x0D : result ="ISO/IEC 13818-6 type D"; break; case 0x0E : result ="ITU-T Rec. H.222.0 | ISO/IEC 13818-1 auxiliary"; break; case 0x0F : result ="ISO/IEC 13818-7 Audio with ADTS transport syntax"; break; case 0x10 : result ="ISO/IEC 14496-2 Visual"; break; case 0x11 : result ="ISO/IEC 14496-3 Audio with the LATM transport syntax as defined in ISO/IEC 14496-3 / AMD 1"; break; case 0x12 : result ="ISO/IEC 14496-1 SL-packetized stream or FlexMux stream carried in PES packets"; break; case 0x13 : result ="ISO/IEC 14496-1 SL-packetized stream or FlexMux stream carried in ISO/IEC14496_sections."; break; case 0x14 : result ="ISO/IEC 13818-6 Synchronized Download Protocol"; break; case 0x15 : result ="Metadata carried in PES packets"; break; case 0x16 : result ="Metadata carried in metadata_sections"; break; case 0x17 : result ="Metadata carried in ISO/IEC 13818-6 Data Carousel"; break; case 0x18 : result ="Metadata carried in ISO/IEC 13818-6 Object Carousel"; break; case 0x19 : result ="Metadata carried in ISO/IEC 13818-6 Synchronized Download Protocol"; break; case 0x1A : result ="IPMP stream (defined in ISO/IEC 13818-11, MPEG-2 IPMP)"; break; case 0x1B : result ="AVC video stream as defined in ITU-T Rec. H.264 | ISO/IEC 14496-10 Video"; break; case 0x1C ... 0x7E : result ="ITU-T Rec. H.222.0 | ISO/IEC 13818-1 Reserved"; break; case 0x7F : result ="IPMP stream"; break; case 0x80 ... 0xFF : result ="User Private"; break; default: break; } return result; } static void CommandListProperties(int argc, char **argv) { PropertiesEnumerator_t pos; PropertyInfo_t propInfo; char *path = NULL; char *typeStr; int i; bool list = FALSE; for (i = 0; i < argc; i++) { if (strcmp("-l", argv[i]) == 0) { list = TRUE; } else if (path == NULL) { path = argv[i]; } } if (PropertiesEnumerate(path, &pos) == 0) { if (PropertiesEnumMoreEntries(pos)) { for (; PropertiesEnumMoreEntries(pos); pos = PropertiesEnumNext(pos)) { PropertiesEnumGetInfo(pos, &propInfo); if (list) { typeStr = GetPropertyTypeString(propInfo.type); CommandPrintf("%c%c%c %-10s %s\n", propInfo.hasChildren == TRUE ? 'D':'-', propInfo.readable == TRUE ? 'R':'-', propInfo.writeable == TRUE ? 'W':'-', typeStr, propInfo.name); } else { CommandPrintf("%s\n", propInfo.name); } } } else { CommandError(COMMAND_ERROR_GENERIC, "Property %s does not have any children!", path); } } else { CommandError(COMMAND_ERROR_GENERIC, "Couldn\'t find property \"%s\"", path); } } static void CommandGetProperty(int argc, char **argv) { PropertyValue_t value; if (PropertiesGet(argv[0], &value) == 0) { switch(value.type) { case PropertyType_Int: CommandPrintf("%d\n", value.u.integer); break; case PropertyType_Float: CommandPrintf("%lf\n", value.u.fp); break; case PropertyType_Boolean: CommandPrintf("%s\n", value.u.boolean ? "True":"False"); break; case PropertyType_String: CommandPrintf("%s\n", value.u.string); free(value.u.string); break; case PropertyType_Char: CommandPrintf("%c\n", value.u.ch); break; case PropertyType_PID: CommandPrintf("%u\n", value.u.pid); break; case PropertyType_IPAddress: CommandPrintf("%s\n", value.u.string); break; default: break; } } } static void CommandSetProperty(int argc, char **argv) { CommandCheckAuthenticated(); if (PropertiesSetStr(argv[0], argv[1]) != 0) { CommandError(COMMAND_ERROR_GENERIC, "Failed to set property \"%s\"", argv[0]); } } static void CommandPropertyInfo(int argc, char **argv) { PropertyInfo_t propInfo; if (PropertiesGetInfo(argv[0], &propInfo) == 0) { CommandPrintf("Type : %s\n", GetPropertyTypeString(propInfo.type)); CommandPrintf("Readable : %s\n", propInfo.readable == TRUE ? "Yes":"No"); CommandPrintf("Writeable : %s\n", propInfo.writeable == TRUE ? "Yes":"No"); CommandPrintf("Has Children : %s\n", propInfo.hasChildren == TRUE ? "Yes":"No"); CommandPrintf("Description : |\n %s\n", propInfo.desc == NULL ? "":propInfo.desc); } else { CommandError(COMMAND_ERROR_GENERIC, "Couldn\'t find property \"%s\"", argv[0]); } } static void CommandDumpTSReader(int argc, char **argv) { TSReader_t *reader = MainTSReaderGet(); ListIterator_t iterator; int p; int count = 0; TSReaderLock(reader); for (p = 0; p < TSREADER_NROF_FILTERS; p ++) { count += reader->packetFilters[p] == NULL ? 0:1; } CommandPrintf("PID Filters (%d)\n",count); for (p = 0; p < TSREADER_NROF_FILTERS; p ++) { TSPacketFilter_t *filter; if (reader->packetFilters[p] == NULL) { continue; } CommandPrintf(" 0x%04x : ", p); for (filter = reader->packetFilters[p]; filter; filter = filter->flNext) { if (filter->group) { CommandPrintf("\"%s\"", filter->group->name); } else { CommandPrintf("
"); } if (filter->flNext) { CommandPrintf(", "); } else { CommandPrintf("\n"); } } } CommandPrintf("Section filters - Active (%d)\n", ListCount(reader->activeSectionFilters)); ListIterator_ForEach(iterator, reader->activeSectionFilters) { ListIterator_t iterator_sf; TSSectionFilterList_t *sfList = ListIterator_Current(iterator); TSSectionFilter_t *sf; CommandPrintf(" 0x%04x\n", sfList->pid); ListIterator_ForEach(iterator_sf, sfList->filters) { sf = ListIterator_Current(iterator_sf); CommandPrintf(" %s\n", sf->group->name); } } CommandPrintf("Section filters - Awaiting scheduling (%d)\n", ListCount(reader->sectionFilters)); ListIterator_ForEach(iterator, reader->sectionFilters) { ListIterator_t iterator_sf; TSSectionFilterList_t *sfList = ListIterator_Current(iterator); TSSectionFilter_t *sf; CommandPrintf(" 0x%04x\n", sfList->pid); ListIterator_ForEach(iterator_sf, sfList->filters) { sf = ListIterator_Current(iterator_sf); CommandPrintf(" %s\n", sf->group->name); } } TSReaderUnLock(reader); } static void CommandListLNBs(int argc, char **argv) { LNBInfo_t *knownLNB; int i = 0; for (i = 0; (knownLNB = LNBEnumerate(i)); i ++) { char **desclines; CommandPrintf("%s :\n", knownLNB->name); for (desclines = knownLNB->desc; *desclines; desclines ++) { CommandPrintf(" %s\n", *desclines); } CommandPrintf("\n"); } } static char* GetPropertyTypeString(PropertyType_e type) { char *typeStr = NULL; switch(type) { case PropertyType_None: typeStr = "None"; break; case PropertyType_Int: typeStr = "Integer"; break; case PropertyType_Float: typeStr = "Float"; break; case PropertyType_Boolean: typeStr = "Boolean"; break; case PropertyType_String: typeStr = "String"; break; case PropertyType_Char: typeStr = "Character"; break; case PropertyType_PID: typeStr = "PID"; break; case PropertyType_IPAddress: typeStr = "IP Address"; break; default: typeStr = "Unknown"; break; } return typeStr; } dvbstreamer-2.1.0/src/commands/cmd_scanning.c000077500000000000000000002054471217721213100212230ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA scanning.c Command functions related to scanning multiplex and frequency bands. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "commands.h" #include "multiplexes.h" #include "services.h" #include "dvbadapter.h" #include "ts.h" #include "logging.h" #include "cache.h" #include "main.h" #include "deliverymethod.h" #include "plugin.h" #include "servicefilter.h" #include "tuning.h" #include "patprocessor.h" #include "pmtprocessor.h" #include "sdtprocessor.h" #include "nitprocessor.h" #include "psipprocessor.h" #include "events.h" #include "properties.h" #include "yamlutils.h" #include "dispatchers.h" #include "dvbpsi/dr.h" /******************************************************************************* * Defines * *******************************************************************************/ #define MAX_PMT_COUNT 253 /******************************************************************************* * Typedefs * *******************************************************************************/ struct PMTReceived_t { uint16_t id; uint16_t pid; bool received; }; typedef struct TransponderEntry_s { int netId; int tsId; unsigned int frequency; char *polarisation; DVBDeliverySystem_e delSys; char *tuningParams; struct TransponderEntry_s *next; }TransponderEntry_t; typedef struct TuningParamDocs_s { int nrofDocs; char *docs[0]; }TuningParamDocs_t; typedef struct ScanEntry_s { DVBDeliverySystem_e system; Multiplex_t *mux; TuningParamDocs_t *params; struct ScanEntry_s *next; }ScanEntry_t; typedef struct ScanList_s { ScanEntry_t *start; ScanEntry_t *end; ScanEntry_t *current; int count; int pos; }ScanList_t; typedef struct MuxFrequency_s { unsigned int frequency; char polarisation[11]; int satNumber; }MuxFrequency_t; typedef struct MuxFrequencies_s { int nrofFrequencies; MuxFrequency_t frequencies[0]; }MuxFrequencies_t; enum ScanType_e { ScanType_List, ScanType_Network }; enum ScanEvent_e { ScanEvent_NoEvent, ScanEvent_StateEntered, ScanEvent_FELocked, ScanEvent_NextTuningParams, ScanEvent_PATReceived, ScanEvent_PMTsReceived, ScanEvent_SDTReceived, ScanEvent_Cancel, ScanEvent_TimerTick, }; enum ScanState_e { ScanState_Init, ScanState_NextMux, ScanState_WaitingForTables, ScanState_WaitingForNIT, ScanState_Stopping, ScanState_Stopped, ScanState_Canceling, }; /******************************************************************************* * Prototypes * *******************************************************************************/ static void CommandScan(int argc, char **argv); static void CommandScanCancel(int argc, char **argv); static void ScanCurrentMultiplexes(void); #if defined(ENABLE_DVB) static void ScanFullDVBT(void); static void ScanFullDVBC(void); static void TryTuneDVBC(MultiplexList_t *muxList, MuxFrequencies_t *muxFreqList, unsigned int freq, char *inversion, char *code_rate, __u32 *symbolRates, int nrofSymbolRates, char **modulations, int nrofModulations); static void SDTEventListener(void *arg, Event_t event, void *payload); static void NITEventListener(void *arg, Event_t event, void *payload); static bool FindTransponder(int freq, char *polarisation); static double BCDFixedPoint3_7ToDouble(uint32_t bcd); #endif #if defined(ENABLE_ATSC) static void ScanFullATSC(void); static void VCTEventListener(void *arg, Event_t event, void *payload); #endif static void ScanNetwork(char *initialdata); static struct PMTReceived_t* PMTsRecievedFindOrAdd(uint16_t id); static void CheckPMTsReceived(void); static void PATEventListener(void *arg, Event_t event, void *payload); static void PMTEventListener(void *arg, Event_t event, void *payload); static void FELockedEventListener(void *arg, Event_t event, void *payload); static void ScanEntryDestructor(void *ptr); static void TuningParamDocsDestructor(void *ptr); static void TransponderEntryDestructor(void *ptr); static MuxFrequencies_t *ParseMuxListFrequencies(MultiplexList_t *muxList); static Multiplex_t *FindMultiplexFrequency(MultiplexList_t *muxList, MuxFrequencies_t *muxFreqList, unsigned long freq, int range, char *polarisation, int satNumber); static void ScanStartStopWatcher(struct ev_loop *loop, ev_async *w, int revents); static void TimeoutWatcher(struct ev_loop * loop,ev_timer * w,int revents); static void ScanStart(enum ScanType_e scanType); static void ScanStop(void); static void ScanStateMachine(enum ScanEvent_e event); static void ScanListReset(void); static void ScanListAddEntry(DVBDeliverySystem_e delSys, Multiplex_t *mux, TuningParamDocs_t *docs); static ScanEntry_t *ScanListNextEntry(void); static int ScanEventToString(yaml_document_t *document, Event_t event, void *payload); static int ScanningInProgressGet(void *userArg, PropertyValue_t *value); /******************************************************************************* * Global variables * *******************************************************************************/ Command_t CommandDetailsScanning[] = { { "scan", 1,2, "Scan the specified multiplex(es) for services.", "scan \n" "Tunes to the specified multiplex and waits for up to 5 seconds to acquire service information.\n" "scan all\n" "Tunes to all known multiplexes and waits for up to 5 seconds on each multiplex to acquire service information.\n" "scan full\n" "Performs a full spectrum scan looking for available multiplexes. This method only supports DVB-T/C and ATSC.\n" "scan net \n" "Performs a network scan using the initial tuning data provided this is in the same format as supplied in the initial tuning data files supplied with the dvb-utils from linuxtv.org.\n" "The tuning data should be quoted, ie\n" "scan net \"T 489833000 8MHz 3/4 NONE QAM16 2k 1/32 NONE\"\n" "Networks can be scan by calling this command more than once with different initial tuning data.\n", CommandScan }, { "cancelscan", 0, 0, "Cancel the any scan that is in progress.", "cancelscan\n" "Cancels any scans that are currently in progress.", CommandScanCancel }, COMMANDS_SENTINEL }; static char SCANNING[]="Scanning"; static char propertyParent[] = "commands.scan"; static bool cancelScan = FALSE; static Service_t *currentService; static char *AUTO = "AUTO"; static char *NONE = "NONE"; #if defined(ENABLE_DVB) static char *bandwidthTable[] = {"8000000", "7000000", "6000000", "AUTO", "AUTO", "AUTO", "AUTO", "AUTO"}; static char *ofdmCodeRateTable[] = {"1/2", "2/3", "3/4", "4/5","5/6", "7/8", "NONE", "NONE"}; static char *ofdmConstellationTable[] = {"QPSK", "16QAM", "64QAM", "AUTO"}; static char *ofdmHierarchyTable[] = {"NONE", "1", "2", "4", "NONE", "1", "2", "4"}; static char *ofdmGuardIntTable[] = {"1/32", "1/16", "1/8", "1/4"}; static char *ofdmTransmitModeTable[] = { "2000", "8000", "AUTO", "AUTO"}; static char *fecInnerTable[] = {"NONE", "1/2", "2/3", "3/4", "5/6", "7/8", "8/9", "AUTO", "4/5", "AUTO", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE"}; static char* polarisationTable[] = {"Horizontal", "Vertical", "Left", "Right"}; static char* rollOffTable[] = {"0.35", "0.25", "0.20", ""}; #endif static ScanList_t toScan = {NULL, NULL, NULL, 0, 0}; static List_t *transponderList = NULL; static int PMTCount = 0; static struct PMTReceived_t PMTsReceived[MAX_PMT_COUNT]; static pthread_mutex_t scanningmutex = PTHREAD_MUTEX_INITIALIZER; /* Property variables */ static int lockTimeoutT = 30; static int lockTimeoutS = 60; static int lockTimeoutC = 60; static int tablesTimeout = 60; static bool removeFailedFreqs = TRUE; #if defined(ENABLE_DVB) /* DVB-T Related variables */ static bool DVBTScanVHF = TRUE; static bool DVBTScanUHF = TRUE; /* DVB-S Related variables */ static int DVBSSatNumber = 0; #endif #if defined(ENABLE_ATSC) /* ATSC Related variables */ static bool ATSCScanOTA = TRUE; static bool ATSCScanCable = TRUE; #endif int deliverySystemRanges[] = { 0, /* DELSYS_DVBS */ 0, /* DELSYS_DVBC */ 166670, /* DELSYS_DVBT */ 28615, /* DELSYS_ATSC */ 0, /* DELSYS_DVBS2 */ }; static enum ScanType_e scanType = ScanType_List; static enum ScanState_e currentScanState = ScanState_Stopped, previousScanState = ScanState_Stopped; static ev_async scanStartAsync; static ev_timer timeoutTimer; static EventSource_t scanEventSource; static Event_t scanStartEvent; static Event_t scanEndEvent; static Event_t scanCanceledEvent; static Event_t scanTryingMuxEvent; static Event_t scanMuxAddedEvent; /******************************************************************************* * Global functions * *******************************************************************************/ void CommandInstallScanning(void) { struct ev_loop *loop; Event_t feLockedEvent; char propertyName[PROPERTIES_PATH_MAX]; LogModule(LOG_DEBUG,SCANNING,"Starting to install scanning.\n"); ObjectRegisterTypeDestructor(ScanEntry_t, ScanEntryDestructor); ObjectRegisterTypeDestructor(TransponderEntry_t, TransponderEntryDestructor); ObjectRegisterCollection(TOSTRING(TuningParamDocs_t),sizeof(char *),TuningParamDocsDestructor); ObjectRegisterCollection(TOSTRING(MuxFrequencies_t), sizeof(MuxFrequency_t), NULL); scanEventSource = EventsRegisterSource("Scan"); scanStartEvent = EventsRegisterEvent(scanEventSource, "Started", ScanEventToString); /* TODO Add ToString func */ scanEndEvent = EventsRegisterEvent(scanEventSource, "Finished", NULL); /* TODO Add ToString func */ scanCanceledEvent = EventsRegisterEvent(scanEventSource, "Cancel", NULL); /* TODO Add ToString func */ scanTryingMuxEvent = EventsRegisterEvent(scanEventSource, "Trying", ScanEventToString); /* TODO Add ToString func */ scanMuxAddedEvent = EventsRegisterEvent(scanEventSource, "Found", NULL); /* TODO Add ToString func */ loop = DispatchersGetInput(); ev_async_init(&scanStartAsync, ScanStartStopWatcher); ev_timer_init(&timeoutTimer, TimeoutWatcher, 1.0, 1.0); ev_async_start(loop, &scanStartAsync); #if defined(ENABLE_DVB) if (MainIsDVB()) { EventsRegisterEventListener(EventsFindEvent("DVB.SDT"),SDTEventListener,NULL); EventsRegisterEventListener(EventsFindEvent("DVB.NIT"),NITEventListener, NULL); } #endif #if defined(ENABLE_ATSC) if (MainIsATSC()) { EventsRegisterEventListener(EventsFindEvent("ATSC.VCT"),VCTEventListener, NULL); } #endif EventsRegisterEventListener(EventsFindEvent("MPEG2.PAT"),PATEventListener, NULL); EventsRegisterEventListener(EventsFindEvent("MPEG2.PMT"),PMTEventListener, NULL); LogModule(LOG_DEBUG,SCANNING,"Finding fe locked event.\n"); feLockedEvent = EventsFindEvent("DVBAdapter.Locked"); EventsRegisterEventListener(feLockedEvent, FELockedEventListener, NULL); PropertiesAddProperty(propertyParent, "inprogress","Whether an scan is currently in progress", PropertyType_Boolean, NULL , ScanningInProgressGet, NULL); PropertiesAddSimpleProperty(propertyParent, "state", "Get the current state id of the scanning state machine.", PropertyType_Int, ¤tScanState, SIMPLEPROPERTY_R); PropertiesAddSimpleProperty(propertyParent, "position", "Get the current position within the list of frequencies to scan.", PropertyType_Int, &toScan.pos, SIMPLEPROPERTY_R); PropertiesAddSimpleProperty(propertyParent, "total", "Get the total number of frequencies to scan.", PropertyType_Int, &toScan.count, SIMPLEPROPERTY_R); PropertiesAddSimpleProperty(propertyParent, "removefailed", "Whether frequencies currently in the database that fail to lock should be removed.", PropertyType_Boolean, &removeFailedFreqs, SIMPLEPROPERTY_RW); sprintf(propertyName, "%s.locktimeout", propertyParent); PropertiesAddSimpleProperty(propertyName, "terrestrial", "Number of seconds to wait for the frontent to lock (DVB-T and ATSC).", PropertyType_Int, &lockTimeoutT, SIMPLEPROPERTY_RW); PropertiesAddSimpleProperty(propertyName, "satellite", "Number of seconds to wait for the frontent to lock (DVB-S/S2).", PropertyType_Int, &lockTimeoutS, SIMPLEPROPERTY_RW); PropertiesAddSimpleProperty(propertyName, "satellite", "Number of seconds to wait for the frontent to lock (DVB-C).", PropertyType_Int, &lockTimeoutC, SIMPLEPROPERTY_RW); PropertiesAddSimpleProperty(propertyParent, "tablestimeout", "Number of seconds to wait for the required tables.", PropertyType_Int, &tablesTimeout, SIMPLEPROPERTY_RW); #if defined(ENABLE_DVB) /* DVB-T Properties */ sprintf(propertyName, "%s.dvb.t", propertyParent); PropertiesAddSimpleProperty(propertyName, "scanvhf", "Whether VHF channels should be scanned when doing a full spectrum scan", PropertyType_Boolean, &DVBTScanVHF, SIMPLEPROPERTY_RW); PropertiesAddSimpleProperty(propertyName, "scanuhf", "Whether UHF channels should be scanned when doing a full spectrum scan", PropertyType_Boolean, &DVBTScanUHF, SIMPLEPROPERTY_RW); /* DVB-S Properties */ sprintf(propertyName, "%s.dvb.s", propertyParent); PropertiesAddSimpleProperty(propertyName, "scansatnumber", "The switch position/satellite number to scan.", PropertyType_Int, &DVBSSatNumber, SIMPLEPROPERTY_RW); #endif /* ATSC Properties */ #if defined(ENABLE_ATSC) sprintf(propertyName, "%s.atsc", propertyParent); PropertiesAddSimpleProperty(propertyName, "scanota", "Whether OTA ATSC signals should be scanned for.", PropertyType_Boolean, &ATSCScanOTA, SIMPLEPROPERTY_RW); PropertiesAddSimpleProperty(propertyName, "scancable", "Whether ATSC cable signals should be scanned for.", PropertyType_Boolean, &ATSCScanOTA, SIMPLEPROPERTY_RW); #endif CommandRegisterCommands(CommandDetailsScanning); } void CommandUnInstallScanning(void) { struct ev_loop *loop = DispatchersGetInput(); ev_async_stop(loop, &scanStartAsync); CommandUnRegisterCommands(CommandDetailsScanning); PropertiesRemoveAllProperties(propertyParent); EventsUnregisterEventListener(EventsFindEvent("DVBAdapter.Locked"),FELockedEventListener, NULL); EventsUnregisterEventListener(EventsFindEvent("MPEG2.PAT"),PATEventListener, NULL); EventsUnregisterEventListener(EventsFindEvent("MPEG2.PMT"),PMTEventListener, NULL); #if defined(ENABLE_DVB) if (MainIsDVB()) { EventsUnregisterEventListener(EventsFindEvent("DVB.SDT"),SDTEventListener, NULL); EventsUnregisterEventListener(EventsFindEvent("DVB.NIT"),NITEventListener, NULL); } #endif #if defined(ENABLE_ATSC) if (MainIsATSC()) { EventsUnregisterEventListener(EventsFindEvent("ATSC.VCT"),VCTEventListener, NULL); } #endif } /******************************************************************************* * Local Functions * *******************************************************************************/ static void CommandScan(int argc, char **argv) { Multiplex_t *multiplex; int i; DVBAdapter_t *adapter; DVBSupportedDeliverySys_t *supportedDelSys; CommandCheckAuthenticated(); pthread_mutex_lock(&scanningmutex); if (currentScanState != ScanState_Stopped) { CommandError(COMMAND_ERROR_GENERIC,"Scan in progress!"); } else if(TuningCurrentServiceIsLocked()) { CommandError(COMMAND_ERROR_GENERIC,"Current Service is locked!"); } else { if (strcmp(argv[0], "all") == 0) { ScanCurrentMultiplexes(); } else if (strcmp(argv[0], "full") == 0) { adapter = MainDVBAdapterGet(); supportedDelSys = DVBFrontEndGetDeliverySystems(adapter); for (i = 0; i < supportedDelSys->nrofSystems; i ++) { switch(supportedDelSys->systems[i]) { #if defined(ENABLE_DVB) case DELSYS_DVBT: ScanFullDVBT(); break; case DELSYS_DVBC: ScanFullDVBC(); break; #endif #if defined(ENABLE_ATSC) case DELSYS_ATSC: ScanFullATSC(); break; #endif default: CommandError(COMMAND_ERROR_GENERIC, "Frontend type doesn't support a full spectrum scan mode!"); break; } } ScanStart(ScanType_List); } else if (strcmp(argv[0], "net") == 0) { if (argc == 2) { ScanNetwork(argv[1]); } else { CommandError(COMMAND_ERROR_WRONG_ARGS, "Expected quoted initial tuning data!"); } } else { multiplex = MultiplexFind(argv[0]); if (multiplex) { CommandPrintf("Scanning %d\n", multiplex->uid); ScanListAddEntry(multiplex->deliverySystem, multiplex, NULL); ScanStart(ScanType_List); } else { CommandError(COMMAND_ERROR_GENERIC, "Failed to find multiplex to scan!"); } } } pthread_mutex_unlock(&scanningmutex); } static void CommandScanCancel(int argc, char **argv) { ScanStop(); } /************************** Scan Callback Functions **************************/ static void ScanCurrentMultiplexes(void) { int i; MultiplexList_t *list; list = MultiplexGetAll(); if (list) { for (i = 0; (i < list->nrofMultiplexes) && !ExitProgram; i ++) { ScanListAddEntry(list->multiplexes[i]->deliverySystem, list->multiplexes[i], NULL); ObjectRefInc(list->multiplexes[i]); } ObjectRefDec(list); } ScanStart(ScanType_List); } #if defined(ENABLE_DVB) static void ScanFullDVBT(void) { char *inversion; char *constellation; char *transmit_mode; char *guard_interval; char *hierarchy; char *code_rate; DVBAdapter_t *adapter = MainDVBAdapterGet(); int channel; int channelCount = 0; int totalChannels = 0; MultiplexList_t *muxList = MultiplexGetAll(); MuxFrequencies_t *muxFreqList = ParseMuxListFrequencies(muxList); Multiplex_t *mux; int offsetIndex = 0; unsigned int frequency; unsigned int offsets[] = {-166670, 0, 166670}; if (DVBFrontEndParameterSupported(adapter, DELSYS_DVBT, "Inversion", AUTO)) { inversion = AUTO; } else { LogModule(LOG_INFO, SCANNING, "INVERSION_AUTO not supported, trying INVERSION_OFF.\n"); inversion = "OFF"; } if (DVBFrontEndParameterSupported(adapter, DELSYS_DVBT, "Modulation", AUTO)) { constellation = AUTO; } else { LogModule(LOG_INFO, SCANNING, "QAM_AUTO not supported, trying QAM_64.\n"); constellation = "QAM64"; } if (DVBFrontEndParameterSupported(adapter, DELSYS_DVBT, "Transmission Mode", AUTO)) { transmit_mode = AUTO; } else { LogModule(LOG_INFO, SCANNING, "TRANSMISSION_MODE not supported, trying TRANSMISSION_MODE_8K.\n"); transmit_mode = "8K"; } if (DVBFrontEndParameterSupported(adapter, DELSYS_DVBT, "Guard Interval", AUTO)) { guard_interval = AUTO; } else { LogModule(LOG_INFO, SCANNING, "GUARD_INTERVAL_AUTO not supported, trying GUARD_INTERVAL_1_8.\n"); guard_interval = "1/8"; } if (DVBFrontEndParameterSupported(adapter, DELSYS_DVBT, "Hierarchy", AUTO)) { hierarchy = AUTO; } else { LogModule(LOG_INFO, SCANNING, "HIERARCHY_AUTO not supported, trying HIERARCHY_NONE.\n"); hierarchy = NONE; } if (DVBFrontEndParameterSupported(adapter, DELSYS_DVBT, "FEC", AUTO)) { code_rate = AUTO; } else { LogModule(LOG_INFO, SCANNING, "FEC_AUTO not supported, trying FEC_NONE.\n"); code_rate = NONE; } if (DVBTScanVHF) { totalChannels += 8; } if (DVBTScanUHF) { totalChannels += 49; } CommandPrintf("Scanning %d frequencies\n", totalChannels); if (DVBTScanVHF) { for (channel = 5; (channel <= 12) && !cancelScan; channel++) { frequency = 142500000 + (channel * 7000000); channelCount ++; for (offsetIndex = 0; offsetIndex < 3; offsetIndex ++) { mux = FindMultiplexFrequency(muxList, muxFreqList, frequency + offsets[offsetIndex], 0, NULL, 0); if (mux) { break; } } if (mux) { ScanListAddEntry(DELSYS_DVBT, mux, NULL); } else { TuningParamDocs_t *docs = (TuningParamDocs_t*)ObjectCollectionCreate(TOSTRING(TuningParamDocs_t), 3); for (offsetIndex = 0; offsetIndex < 3; offsetIndex ++) { asprintf(&docs->docs[offsetIndex], "Frequency: %d\n" "Inversion: %s\n" "Bandwidth: 7Mhz\n" "FEC LP: %s\n" "FEC HP: %s\n" "Constellation: %s\n" "Transmission Mode: %s\n" "Guard Interval: %s\n" "Hierarchy: %s\n", frequency + offsets[offsetIndex], inversion, code_rate, code_rate, constellation, transmit_mode, guard_interval, hierarchy); } ScanListAddEntry(DELSYS_DVBT, NULL, docs); } } } if (DVBTScanUHF) { for (channel = 21; (channel <= 69) && !cancelScan; channel++) { frequency = 306000000 + (channel * 8000000); channelCount ++; for (offsetIndex = 0; offsetIndex < 3; offsetIndex ++) { mux = FindMultiplexFrequency(muxList, muxFreqList, frequency + offsets[offsetIndex], 0, NULL, 0); if (mux) { break; } } if (mux) { ScanListAddEntry(DELSYS_DVBT, mux, NULL); } else { TuningParamDocs_t *docs = (TuningParamDocs_t*)ObjectCollectionCreate(TOSTRING(TuningParamDocs_t), 3); for (offsetIndex = 0; offsetIndex < 3; offsetIndex ++) { asprintf(&docs->docs[offsetIndex], "Frequency: %d\n" "Inversion: %s\n" "Bandwidth: 8Mhz\n" "FEC LP: %s\n" "FEC HP: %s\n" "Constellation: %s\n" "Transmission Mode: %s\n" "Guard Interval: %s\n" "Hierarchy: %s\n", frequency + offsets[offsetIndex], inversion, code_rate, code_rate, constellation, transmit_mode, guard_interval, hierarchy); } ScanListAddEntry(DELSYS_DVBT, NULL, docs); } } } ObjectRefDec(muxList); ObjectRefDec(muxFreqList); } static void ScanFullDVBC(void) { int channel; char *inversion; #define MAX_MODULATIONS 6 char *modulations[MAX_MODULATIONS]; int nrofModulations = 0; __u32 symbolRates[] = { 6900000, 6875000}; int nrofSymbolRates = 2; char *code_rate; DVBAdapter_t *adapter = MainDVBAdapterGet(); MultiplexList_t *muxList = MultiplexGetAll(); MuxFrequencies_t *muxFreqList = ParseMuxListFrequencies(muxList); if (DVBFrontEndParameterSupported(adapter, DELSYS_DVBC, "Inversion", AUTO)) { inversion = AUTO; } else { LogModule(LOG_INFO, SCANNING, "INVERSION_AUTO not supported, trying INVERSION_OFF.\n"); inversion = "OFF"; } if (DVBFrontEndParameterSupported(adapter, DELSYS_DVBC, "Modulation", AUTO)) { modulations[0] = AUTO; nrofModulations = 1; } else { LogModule(LOG_INFO, SCANNING, "QAM_AUTO not supported, trying QAM_64.\n"); modulations[0] = "QAM64"; modulations[1] = "QAM128"; modulations[2] = "QAM256"; nrofModulations = 3; } if (DVBFrontEndParameterSupported(adapter, DELSYS_DVBC, "FEC", AUTO)) { code_rate = AUTO; } else { LogModule(LOG_INFO, SCANNING, "FEC_AUTO not supported, trying FEC_NONE.\n"); code_rate = NONE; } for (channel=2; (channel <= 4) && !cancelScan; channel++) { TryTuneDVBC(muxList, muxFreqList, 36500000 + (channel * 7000000), inversion, code_rate, symbolRates, nrofSymbolRates, modulations, nrofModulations); } for (channel=1; (channel <= 10) && !cancelScan; channel++) { TryTuneDVBC(muxList, muxFreqList, 100500000 + (channel * 7000000), inversion, code_rate, symbolRates, nrofSymbolRates, modulations, nrofModulations); } for (channel=1; (channel <= 9) && !cancelScan; channel++) { TryTuneDVBC(muxList, muxFreqList, 97000000 + (channel * 8000000), inversion, code_rate, symbolRates, nrofSymbolRates, modulations, nrofModulations); } for (channel=5; (channel <= 22) && !cancelScan; channel++) { TryTuneDVBC(muxList, muxFreqList, 142500000 + (channel * 7000000), inversion, code_rate, symbolRates, nrofSymbolRates, modulations, nrofModulations); } for (channel=21; (channel <= 90) && !cancelScan; channel++) { TryTuneDVBC(muxList, muxFreqList, 138000000 + (channel * 8000000), inversion, code_rate, symbolRates, nrofSymbolRates, modulations, nrofModulations); } ObjectRefDec(muxList); ObjectRefDec(muxFreqList); } static void TryTuneDVBC(MultiplexList_t *muxList, MuxFrequencies_t *muxFreqList, unsigned int freq, char *inversion, char *code_rate, __u32 *symbolRates, int nrofSymbolRates, char **modulations, int nrofModulations) { Multiplex_t *mux; TuningParamDocs_t *docs; int s, m; mux = FindMultiplexFrequency(muxList, muxFreqList, freq, 0, NULL, 0); if (mux) { ScanListAddEntry(DELSYS_DVBC, mux, NULL); } else { docs = (TuningParamDocs_t *)ObjectCollectionCreate(TOSTRING(TuningParamDocs_t), nrofSymbolRates * nrofModulations); for (s = 0; s < nrofSymbolRates; s ++) { for (m = 0; m < nrofModulations; m ++) { asprintf(&docs->docs[s*m], "Frequency: %u\n" "Inversion: %s\n" "FEC: %s\n" "Symbol Rate: %u\n" "Modulation: %s\n", freq, inversion, code_rate, symbolRates[s], modulations[m]); ScanListAddEntry(DELSYS_DVBC, NULL, docs); } } } } #endif #if defined(ENABLE_ATSC) static void ScanFullATSC(void) { MultiplexList_t *muxList = MultiplexGetAll(); MuxFrequencies_t *muxFreqList = ParseMuxListFrequencies(muxList); Multiplex_t *mux; int channel; int base_offset = 0; unsigned int freq; if (ATSCScanOTA) { for (channel = 2; (channel <= 69) && !cancelScan; channel++) { if (channel < 5) { base_offset = 45028615; } else if (channel < 7) { base_offset = 49028615; } else if (channel < 14) { base_offset = 135028615; } else { base_offset = 389028615; } freq = base_offset + (channel * 6000000); mux = FindMultiplexFrequency(muxList, muxFreqList, freq, 28615, NULL, 0); if (mux) { ScanListAddEntry(DELSYS_ATSC, mux, NULL); } else { TuningParamDocs_t *docs = (TuningParamDocs_t *)ObjectCollectionCreate(TOSTRING(TuningParamDocs_t), 1); asprintf(&docs->docs[0], "Frequency: %u\n" "Inversion: AUTO\n" "Modulation: 8VSB\n", freq); ScanListAddEntry(DELSYS_ATSC, NULL, docs); } } } if (ATSCScanCable) { for (channel = 2; (channel <= 133) && !cancelScan; channel++) { if (channel < 5) base_offset = 45000000; else if (channel < 7) base_offset = 49000000; else if (channel < 14) base_offset = 135000000; else if (channel < 17) base_offset = 39012500; else if (channel < 23) base_offset = 39000000; else if (channel < 25) base_offset = 81000000; else if (channel < 54) base_offset = 81012500; else if (channel < 95) base_offset = 81000000; else if (channel < 98) base_offset = -477000000; else if (channel < 100) base_offset = -476987500; else base_offset = 51000000; freq = base_offset + (channel * 6000000); mux = FindMultiplexFrequency(muxList, muxFreqList, freq, 0, NULL, 0); if (mux) { ScanListAddEntry(DELSYS_ATSC, mux, NULL); } else { TuningParamDocs_t *docs = (TuningParamDocs_t *)ObjectCollectionCreate(TOSTRING(TuningParamDocs_t), 1); asprintf(&docs->docs[0], "Frequency: %u\n" "Inversion: AUTO\n" "Modulation: QAM256\n", freq); ScanListAddEntry(DELSYS_ATSC, NULL, docs); } } } ObjectRefDec(muxList); ObjectRefDec(muxFreqList); } #endif static void ScanNetwork(char *initialdata) { Multiplex_t *mux; bool parsed = FALSE; char modStr[7]; #if defined(ENABLE_DVB) __u32 symbolRate; char bwStr[5]; char fecHiStr[5]; char fecLoStr[5]; char transModeStr[5]; char guardIntStr[5]; char hierarchyStr[5]; char polarisationStr[2]; #endif char params[256]; char *polarisation = NULL; char *inversion; DVBDeliverySystem_e delSys = DELSYS_MAX_SUPPORTED; unsigned int frequency; MultiplexList_t *muxList = MultiplexGetAll(); MuxFrequencies_t *muxFreqList = ParseMuxListFrequencies(muxList); DVBAdapter_t *adapter = MainDVBAdapterGet(); int muxFindRange = 0; /* Initial Tuning data formats: * * DVB-T * T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy * * DVB-C * C freq sr fec mod * * DVB-S * S freq pol sr fec * * ATSC * A freq mod */ switch (initialdata[0]) { case 'T': delSys = DELSYS_DVBT; break; case 'S': delSys = DELSYS_DVBS; break; case 'C': delSys = DELSYS_DVBC; break; case 'A': delSys = DELSYS_ATSC; break; } if (!DVBFrontEndDeliverySystemSupported(adapter, delSys)) { CommandError(COMMAND_ERROR_GENERIC, "Frontend doesn't support the required delivery system!"); return; } if (DVBFrontEndParameterSupported(adapter, delSys, "Inversion", AUTO)) { inversion = AUTO; } else { LogModule(LOG_INFO, SCANNING, "INVERSION_AUTO not supported, trying INVERSION_OFF.\n"); inversion = "OFF"; } switch (delSys) { #if defined(ENABLE_DVB) case DELSYS_DVBT: if (sscanf(initialdata, "T %u %4s %4s %4s %6s %4s %4s %4s", &frequency, bwStr, fecHiStr, fecLoStr, modStr, transModeStr, guardIntStr, hierarchyStr) == 8) { sprintf(params, "Frequency: %u\n" "Inversion: %s\n" "Bandwidth: %s\n" "FEC HP: %s\n" "FEC LP: %s\n" "Constellation: %s\n" "Transmission Mode: %s\n" "Guard Interval: %s\n" "Hierarchy: %s\n", frequency, inversion, bwStr, fecHiStr, fecLoStr, modStr, transModeStr, guardIntStr, hierarchyStr); muxFindRange = 166670; parsed = TRUE; } break; case DELSYS_DVBC: if (sscanf(initialdata, "C %u %u %4s %6s", &frequency, &symbolRate, fecHiStr, modStr) == 4) { sprintf(params, "Frequency: %u\n" "Inversion: %s\n" "Symbol Rate: %u\n" "FEC: %s\n" "Modulation: %s\n", frequency, inversion, symbolRate, fecHiStr, modStr); muxFindRange = 0; parsed = TRUE; } break; case DELSYS_DVBS: if (sscanf(initialdata, "S %u %1[HVLR] %u %4s\n", &frequency, polarisationStr, &symbolRate, fecHiStr) == 4) { switch(polarisationStr[0]) { case 'L': polarisation = "Left"; break; case 'R': polarisation = "Right"; break; case 'H': polarisation = "Horizontal"; break; case 'V': default: /* fall-through */ polarisation = "Vertical"; break; } sprintf(params, "Frequency: %u\n" "Inversion: %s\n" "Symbol Rate: %u\n" "FEC: %s\n" "Polarisation: %s\n" "Satellite Number: %d\n", frequency, inversion, symbolRate, fecHiStr, polarisation, DVBSSatNumber); muxFindRange = 0; parsed = TRUE; } break; #endif #if defined(ENABLE_ATSC) case DELSYS_ATSC: if (sscanf(initialdata, "A %u %7s\n", &frequency, modStr) == 2) { sprintf(params, "Frequency: %u\n" "Inversion: %s\n" "Modulation: %s\n", frequency, inversion, modStr); muxFindRange = 28615; parsed = TRUE; } break; #endif default: break; } if (parsed) { transponderList = ListCreate(); mux = FindMultiplexFrequency(muxList, muxFreqList, frequency, muxFindRange, polarisation, DVBSSatNumber); if (mux) { ScanListAddEntry(delSys, mux, NULL); } else { TuningParamDocs_t *docs = (TuningParamDocs_t *)ObjectCollectionCreate(TOSTRING(TuningParamDocs_t), 1); docs->docs[0] = strdup(params); ScanListAddEntry(delSys, NULL, docs); } ScanStart(ScanType_Network); } else { CommandError(COMMAND_ERROR_GENERIC, "Failed to parse initial tuning data!"); } } static struct PMTReceived_t* PMTsRecievedFindOrAdd(uint16_t id) { int i; for (i = 0; i < MAX_PMT_COUNT; i ++) { if (id == PMTsReceived[i].id) { LogModule(LOG_INFO, SCANNING, "Found id %d @ %d", id, i); return &PMTsReceived[i]; } if (PMTsReceived[i].id == 0) { LogModule(LOG_INFO, SCANNING, "Adding id %d @ %d", id, i); /* reached the end of the table */ PMTsReceived[i].id = id; return &PMTsReceived[i]; } } LogModule(LOG_INFO, SCANNING, "Out of space while adding PMT"); return NULL; } static void CheckPMTsReceived(void) { int i; bool all = TRUE; for (i = 0; i < PMTCount; i ++) { if (!PMTsReceived[i].received) { all = FALSE; } } if (all) { ScanStateMachine(ScanEvent_PMTsReceived); } } static void PATEventListener(void *arg, Event_t event, void *payload) { dvbpsi_pat_t* newpat = payload; if (currentScanState == ScanState_WaitingForTables) { int i; dvbpsi_pat_program_t *patentry = newpat->p_first_program; patentry = newpat->p_first_program; i = 0; PMTCount = 0; while(patentry) { if (patentry->i_number != 0x0000) { struct PMTReceived_t *pr = PMTsRecievedFindOrAdd(patentry->i_number); if (pr) { pr->pid = patentry->i_pid; PMTCount ++; } i ++; } patentry = patentry->p_next; } ScanStateMachine(ScanEvent_PATReceived); CheckPMTsReceived(); } } static void PMTEventListener(void *arg, Event_t event, void *payload) { dvbpsi_pmt_t *newpmt = payload; if (currentScanState == ScanState_WaitingForTables) { struct PMTReceived_t *pr = PMTsRecievedFindOrAdd(newpmt->i_program_number); if (pr) { pr->received = TRUE; } CheckPMTsReceived(); } } #if defined(ENABLE_DVB) static void SDTEventListener(void *arg, Event_t event, void *payload) { if (currentScanState == ScanState_WaitingForTables) { ScanStateMachine(ScanEvent_SDTReceived); } } static void NITEventListener(void *arg, Event_t event, void *payload) { dvbpsi_nit_t* newnit = payload; DVBAdapter_t *adapter = MainDVBAdapterGet(); TransponderEntry_t *tpEntry; int i; dvbpsi_nit_transport_t *transport = NULL; unsigned int frequency; char tparams[256]; char sparams[256]; char *polarisation = NULL; DVBDeliverySystem_e delSys = DELSYS_MAX_SUPPORTED; tparams[0] = 0; sparams[0] = 0; #define ADD_TRANSPONDER(_params) \ do {\ if (!FindTransponder(frequency, polarisation)) \ {\ tpEntry = ObjectCreateType(TransponderEntry_t);\ if (tpEntry != NULL)\ {\ tpEntry->delSys = delSys;\ asprintf(&tpEntry->tuningParams, "Frequency: %u\n%s", frequency, _params);\ tpEntry->frequency = frequency;\ tpEntry->netId = transport->i_original_network_id;\ tpEntry->tsId = transport->i_ts_id;\ ListAdd(transponderList, tpEntry);\ }\ }\ }while(FALSE) if (((currentScanState == ScanState_WaitingForTables) || (currentScanState == ScanState_WaitingForNIT)) && (scanType == ScanType_Network) && (transponderList != NULL)) { for (transport = newnit->p_first_transport; transport; transport = transport->p_next) { dvbpsi_descriptor_t *descriptor; for (descriptor = transport->p_first_descriptor; descriptor; descriptor = descriptor->p_next) { switch(descriptor->i_tag) { case 0x43: sparams[0] = 0; dvbpsi_sat_deliv_sys_dr_t *satDelSysDr = dvbpsi_DecodeSatDelivSysDr(descriptor); polarisation = polarisationTable[satDelSysDr->i_polarization]; if (DVBFrontEndDeliverySystemSupported(adapter, DELSYS_DVBS) && (satDelSysDr->i_modulation_system != 1)) { double freq = BCDFixedPoint3_7ToDouble(satDelSysDr->i_frequency); double symbolRate = BCDFixedPoint3_7ToDouble(satDelSysDr->i_symbol_rate << 4); frequency = (unsigned int)(freq * 1000000.0); sprintf(tparams, "Inversion: AUTO\n" "FEC: %s\n" "Symbol Rate: %u\n" "Polarisation: %s\n" "Satellite Number: %d\n", fecInnerTable[satDelSysDr->i_fec_inner], (unsigned int)(symbolRate * 1000000.0), polarisation, DVBSSatNumber); delSys = DELSYS_DVBS; ADD_TRANSPONDER(sparams); } if (DVBFrontEndDeliverySystemSupported(adapter, DELSYS_DVBS2) && (satDelSysDr->i_modulation_system == 1)) { double freq = BCDFixedPoint3_7ToDouble(satDelSysDr->i_frequency); double symbolRate = BCDFixedPoint3_7ToDouble(satDelSysDr->i_symbol_rate << 4); frequency = (unsigned int)(freq * 1000000.0); sprintf(tparams, "Inversion: AUTO\n" "FEC: %s\n" "Symbol Rate: %u\n" "Roll Off: %s\n" "Polarisation: %s\n" "Satellite Number: %d\n", fecInnerTable[satDelSysDr->i_fec_inner], (unsigned int)(symbolRate * 1000000.0), rollOffTable[satDelSysDr->i_roll_off], polarisationTable[satDelSysDr->i_polarization], DVBSSatNumber); delSys = DELSYS_DVBS2; ADD_TRANSPONDER(sparams); } break; case 0x5a: polarisation = NULL; tparams[0] = 0; if (DVBFrontEndDeliverySystemSupported(adapter, DELSYS_DVBT)) { dvbpsi_terr_deliv_sys_dr_t *terrDelSysDr = dvbpsi_DecodeTerrDelivSysDr(descriptor); if (terrDelSysDr) { frequency = terrDelSysDr->i_centre_frequency * 10; sprintf(tparams, "Inversion: AUTO\n" "Bandwidth: %s\n" "FEC HP: %s\n" "FEC LP: %s\n" "Constellation: %s\n" "Guard Interval: %s\n" "Hierarchy: %s\n" "Transmission Mode: %s\n", bandwidthTable[terrDelSysDr->i_bandwidth], ofdmCodeRateTable[terrDelSysDr->i_code_rate_hp_stream], ofdmCodeRateTable[terrDelSysDr->i_code_rate_lp_stream], ofdmConstellationTable[terrDelSysDr->i_constellation], ofdmGuardIntTable[terrDelSysDr->i_guard_interval], ofdmHierarchyTable[terrDelSysDr->i_hierarchy_information], ofdmTransmitModeTable[terrDelSysDr->i_transmission_mode]); delSys = DELSYS_DVBT; ADD_TRANSPONDER(tparams); if (terrDelSysDr->i_other_frequency_flag == 0) { tparams[0] = 0; } } } break; case 0x62: { dvbpsi_frequency_list_dr_t *freqListDr = dvbpsi_DecodeFrequencyListDr(descriptor); switch(freqListDr->i_coding_type) { case 1: if (sparams[0]) { for (i = 0; i < freqListDr->i_number_of_frequencies; i ++) { double freq = BCDFixedPoint3_7ToDouble(freqListDr->p_center_frequencies[i]); frequency = (unsigned int)(freq * 1000000.0); ADD_TRANSPONDER(sparams); } } break; case 2: break; case 3: if (tparams[0]) { for (i = 0; i < freqListDr->i_number_of_frequencies; i ++) { frequency = freqListDr->p_center_frequencies[i] * 10; ADD_TRANSPONDER(tparams); } } break; } } break; } } } } } static bool FindTransponder(int freq, char *polarisation) { ListIterator_t iterator; for (ListIterator_Init(iterator, transponderList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { TransponderEntry_t *entry = (TransponderEntry_t *)ListIterator_Current(iterator); if (entry->frequency == freq) { if (polarisation && entry->polarisation && (strcmp(entry->polarisation, polarisation) == 0)) { return TRUE; } } } return FALSE; } static double BCDFixedPoint3_7ToDouble(uint32_t bcd) { int integer; int fraction; integer = (((bcd >> 28) & 0xf) * 100) + (((bcd >> 24) & 0xf) * 10) + (((bcd >> 20) & 0xf)); fraction = (((bcd >> 16) & 0xf) * 10000) + (((bcd >> 12) & 0xf) * 1000) + (((bcd >> 8) & 0xf) * 100) + (((bcd >> 4) & 0xf) * 10) + (((bcd ) & 0xf)); return (double)integer + ((double)fraction / 100000.0); } #endif #if defined(ENABLE_ATSC) static void VCTEventListener(void *arg, Event_t event, void *payload) { if (currentScanState == ScanState_WaitingForTables) { ScanStateMachine(ScanEvent_SDTReceived); } } #endif static void FELockedEventListener(void *arg, Event_t event, void *payload) { if (currentScanState == ScanState_NextMux) { ScanStateMachine(ScanEvent_FELocked); } } static MuxFrequencies_t *ParseMuxListFrequencies(MultiplexList_t *muxList) { int i; MuxFrequencies_t *result = (MuxFrequencies_t *)ObjectCollectionCreate(TOSTRING(MuxFrequencies_t), muxList->nrofMultiplexes); if (result) { for (i = 0;i < muxList->nrofMultiplexes; i ++) { yaml_document_t document; memset(&document, 0, sizeof(document)); if (YamlUtils_Parse(muxList->multiplexes[i]->tuningParams, &document)) { yaml_node_t *node = YamlUtils_RootMappingFind(&document, "Frequency"); if (node && (node->type == YAML_SCALAR_NODE)) { result->frequencies[i].frequency = strtoul((const char *)node->data.scalar.value, NULL, 10); } if ((muxList->multiplexes[i]->deliverySystem == DELSYS_DVBS) || (muxList->multiplexes[i]->deliverySystem == DELSYS_DVBS2)) { node = YamlUtils_RootMappingFind(&document, "Polarisation"); if (node && (node->type == YAML_SCALAR_NODE)) { strncpy(result->frequencies[i].polarisation, (const char *)node->data.scalar.value, sizeof(result->frequencies[i].polarisation)); } node = YamlUtils_RootMappingFind(&document, "Satellite Number"); if (node && (node->type == YAML_SCALAR_NODE)) { result->frequencies[i].satNumber = atoi((const char *)node->data.scalar.value); } } } yaml_document_delete(&document); } } return result; } static Multiplex_t *FindMultiplexFrequency(MultiplexList_t *muxList, MuxFrequencies_t *muxFreqList, unsigned long freq, int range, char *polarisation, int satNumber) { int i; for (i = 0; i < muxList->nrofMultiplexes; i ++) { if ((muxFreqList->frequencies[i].frequency >= freq - range) && (muxFreqList->frequencies[i].frequency <= freq + range)) { bool found = TRUE; if (polarisation) { found = (muxFreqList->frequencies[i].polarisation && (strcmp(polarisation, muxFreqList->frequencies[i].polarisation) == 0) && (muxFreqList->frequencies[i].satNumber == satNumber)); } if (found) { ObjectRefInc(muxList->multiplexes[i]); return muxList->multiplexes[i]; } } } return NULL; } static void ProcessTransponderList(void) { Multiplex_t *mux; ListIterator_t iterator; MultiplexList_t *muxList = MultiplexGetAll(); MuxFrequencies_t *muxFreqList = ParseMuxListFrequencies(muxList); if (ListCount(transponderList) > 0) { for (ListIterator_Init(iterator, transponderList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { TransponderEntry_t *entry = (TransponderEntry_t*)ListIterator_Current(iterator); mux = MultiplexFindId(entry->netId, entry->tsId); if (mux) { /* Skip as we already have this network/ts combo */ MultiplexRefDec(mux); } else { mux = FindMultiplexFrequency(muxList, muxFreqList, entry->frequency, deliverySystemRanges[entry->delSys], entry->polarisation, DVBSSatNumber); if (mux) { ScanListAddEntry(entry->delSys, mux, NULL); } else { TuningParamDocs_t *docs = (TuningParamDocs_t *)ObjectCollectionCreate(TOSTRING(TuningParamDocs_t), 1); docs->docs[0] = entry->tuningParams; entry->tuningParams = NULL; ScanListAddEntry(entry->delSys, NULL, docs); } } } } ObjectRefDec(muxList); ObjectRefDec(muxFreqList); } static void ScanStart(enum ScanType_e type) { scanType = type; cancelScan = FALSE; ev_async_send(DispatchersGetInput(), &scanStartAsync); } static void ScanStop(void) { cancelScan = TRUE; ev_async_send(DispatchersGetInput(), &scanStartAsync); } static void ScanStartStopWatcher(struct ev_loop *loop, ev_async *w, int revents) { if (cancelScan) { ScanStateMachine(ScanEvent_Cancel); } else { currentScanState = ScanState_Init; previousScanState = currentScanState; ScanStateMachine(ScanEvent_StateEntered); } } static void TimeoutWatcher(struct ev_loop *loop, ev_timer *w, int revents) { ScanStateMachine(ScanEvent_TimerTick); ev_timer_again(loop, w); } static void ScanStateMachine(enum ScanEvent_e event) { static bool PATReceived = FALSE; static bool PMTReceived = FALSE; static bool SDTReceived = FALSE; static ScanEntry_t *currentEntry = NULL; static int currentTuningParams = 0; static int timeout = 0; enum ScanEvent_e nextEvent; DVBDeliverySystem_e delSys; char *tuningParams; LogModule(LOG_INFOV, SCANNING, "ScanStateMachine: event = %d", event); for (; event!= ScanEvent_NoEvent; event = nextEvent) { nextEvent = ScanEvent_NoEvent; previousScanState = currentScanState; switch (currentScanState) { case ScanState_Init: if (event == ScanEvent_StateEntered) { EventsFireEventListeners(scanStartEvent,NULL); ev_timer_start(DispatchersGetInput(), &timeoutTimer); currentService = TuningCurrentServiceGet(); TuningCurrentServiceLock(); PMTCount = MAX_PMT_COUNT; memset(PMTsReceived, 0, sizeof(PMTsReceived)); toScan.current = toScan.start; currentScanState = ScanState_NextMux; } break; case ScanState_NextMux: switch (event) { case ScanEvent_StateEntered: EventsFireEventListeners(scanTryingMuxEvent,NULL); currentTuningParams = -1; currentEntry = ScanListNextEntry(); if (currentEntry) { nextEvent = ScanEvent_NextTuningParams; } else { currentScanState = ScanState_Stopping; } break; case ScanEvent_NextTuningParams: currentTuningParams ++; tuningParams = NULL; if (currentEntry->mux) { if (currentTuningParams == 0) { delSys = currentEntry->mux->deliverySystem; tuningParams = currentEntry->mux->tuningParams; } } else { if (currentTuningParams < currentEntry->params->nrofDocs) { delSys = currentEntry->system; tuningParams = currentEntry->params->docs[currentTuningParams]; } } switch(delSys) { case DELSYS_DVBT: case DELSYS_ATSC: timeout = lockTimeoutT; break; case DELSYS_DVBC: timeout = lockTimeoutC; break; case DELSYS_DVBS: case DELSYS_DVBS2: default: timeout = lockTimeoutS; break; } if (tuningParams) { TSReader_t *tsReader = MainTSReaderGet(); DVBAdapter_t *adapter = MainDVBAdapterGet(); TSReaderEnable(tsReader, FALSE); DVBFrontEndTune(adapter, delSys, tuningParams); } else { nextEvent = ScanEvent_StateEntered; } break; case ScanEvent_FELocked: if (currentEntry->mux == NULL) { DVBAdapter_t *adapter = MainDVBAdapterGet(); DVBDeliverySystem_e delSys; char *tuningParams = DVBFrontEndParametersGet(adapter, &delSys); MultiplexAdd(delSys, tuningParams, ¤tEntry->mux); free(tuningParams); EventsFireEventListeners(scanMuxAddedEvent,NULL); } TuningCurrentMultiplexSet(currentEntry->mux); currentScanState = ScanState_WaitingForTables; break; case ScanEvent_TimerTick: timeout --; if (timeout <= 0) { nextEvent = ScanEvent_NextTuningParams; if (removeFailedFreqs && currentEntry->mux) { MultiplexDelete(currentEntry->mux); } } break; default: break; } break; case ScanState_WaitingForTables: switch (event) { case ScanEvent_StateEntered: PATReceived = FALSE; PMTReceived = FALSE; SDTReceived = FALSE; timeout = tablesTimeout; break; case ScanEvent_PATReceived: PATReceived = TRUE; break; case ScanEvent_PMTsReceived: PMTReceived = TRUE; break; case ScanEvent_SDTReceived: SDTReceived = TRUE; break; case ScanEvent_TimerTick: timeout --; if (timeout <= 0) { currentScanState = ScanState_NextMux; } break; default: break; } if (PATReceived && PMTReceived && SDTReceived) { #if defined(ENABLE_DVB) if ((scanType == ScanType_Network) && (MainIsDVB())) { currentScanState = ScanState_WaitingForNIT; } else #endif { currentScanState = ScanState_NextMux; } } break; case ScanState_WaitingForNIT: switch (event) { case ScanEvent_StateEntered: timeout = tablesTimeout; break; case ScanEvent_TimerTick: timeout --; if (timeout <= 0) { ProcessTransponderList(); currentScanState = ScanState_NextMux; } break; default: break; } break; case ScanState_Canceling: if (event == ScanEvent_StateEntered) { EventsFireEventListeners(scanCanceledEvent, NULL); currentScanState = ScanState_Stopping; } break; case ScanState_Stopping: if (event == ScanEvent_StateEntered) { TuningCurrentServiceUnlock(); TuningCurrentServiceRetune(); if (transponderList) { ObjectListFree(transponderList); transponderList = NULL; } ScanListReset(); ev_timer_stop(DispatchersGetInput(), &timeoutTimer); currentScanState = ScanState_Stopped; } break; case ScanState_Stopped: if (event == ScanEvent_StateEntered) { EventsFireEventListeners(scanEndEvent, NULL); } else if (event == ScanEvent_Cancel) { event = ScanEvent_NoEvent; } break; } if (event == ScanEvent_Cancel) { currentScanState = ScanState_Canceling; } if (currentScanState != previousScanState) { LogModule(LOG_INFOV,SCANNING,"Previous State (%d) != Current State(%d)", previousScanState, currentScanState); nextEvent = ScanEvent_StateEntered; } LogModule(LOG_INFOV,SCANNING, "State %d Next Event = %d", currentScanState, nextEvent); } } static void ScanListReset(void) { ScanEntry_t *entry; for (entry = toScan.start; entry; entry = entry->next) { ObjectRefDec(entry); } toScan.start = NULL; toScan.end = NULL; toScan.current = NULL; toScan.count = 0; toScan.pos = 0; } static void ScanListAddEntry(DVBDeliverySystem_e delSys, Multiplex_t *mux, TuningParamDocs_t *docs) { ScanEntry_t *entry; entry = ObjectCreateType(ScanEntry_t); entry->system = delSys; entry->mux = mux; entry->params = docs; if (toScan.start == NULL) { toScan.start = entry; toScan.current = entry; } else { toScan.end->next = entry; } toScan.end = entry; toScan.count ++; } static ScanEntry_t *ScanListNextEntry(void) { ScanEntry_t *entry = NULL; if (toScan.current) { entry = toScan.current; toScan.current = entry->next; toScan.pos ++; } return entry; } static void ScanEntryDestructor(void *ptr) { ScanEntry_t *entry = ptr; if (entry->mux) { ObjectRefDec(entry->mux); } if (entry->params) { ObjectRefDec(entry->params); } } static void TransponderEntryDestructor(void *ptr) { TransponderEntry_t *entry = ptr; if (entry->tuningParams) { free(entry->tuningParams); } } static void TuningParamDocsDestructor(void *ptr) { TuningParamDocs_t *docs = ptr; int i; for (i = 0; i < docs->nrofDocs; i ++) { if (docs->docs[i]) { free(docs->docs[i]); } } } static int ScanEventToString(yaml_document_t *document, Event_t event, void *payload) { char temp[5]; int mappingId = yaml_document_add_mapping(document, (yaml_char_t*)YAML_MAP_TAG, YAML_ANY_MAPPING_STYLE); //if (event == scanStartEvent) { sprintf(temp, "%d", toScan.count); YamlUtils_MappingAdd(document, mappingId, "Total transponders", temp); } //if (event == scanTryingMuxEvent) { sprintf(temp, "%d", toScan.pos); YamlUtils_MappingAdd(document, mappingId, "Transponder", temp); } LogModule(LOG_INFO,SCANNING,"Total %d Current %d", toScan.count, toScan.pos); return mappingId; } static int ScanningInProgressGet(void *userArg, PropertyValue_t *value) { value->type = PropertyType_Boolean; value->u.boolean = (currentScanState != ScanState_Stopped); return 0; } dvbstreamer-2.1.0/src/commands/cmd_servicefilter.c000077500000000000000000000320001217721213100222500ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA servicefilter.c Command functions for service filter related tasks */ #include #include #include #include #include #include #include #include #include #include #include #include #include "commands.h" #include "multiplexes.h" #include "services.h" #include "dvbadapter.h" #include "ts.h" #include "logging.h" #include "cache.h" #include "main.h" #include "deliverymethod.h" #include "plugin.h" #include "servicefilter.h" #include "tuning.h" #include "patprocessor.h" #include "pmtprocessor.h" #include "sdtprocessor.h" #include "psipprocessor.h" /******************************************************************************* * Defines * *******************************************************************************/ #define FIND_SERVICE_FILTER(_name) \ {\ TSReader_t *reader = MainTSReaderGet();\ filter = ServiceFilterFindFilter(reader, _name); \ if (filter == NULL) \ {\ CommandError(COMMAND_ERROR_GENERIC, "Service filter not found!"); \ return; \ }\ } /******************************************************************************* * Prototypes * *******************************************************************************/ static void CommandSelect(int argc, char **argv); static void CommandSetMRL(int argc, char **argv); static void CommandGetMRL(int argc, char **argv); static void CommandAddSF(int argc, char **argv); static void CommandRemoveSF(int argc, char **argv); static void CommandListSF(int argc, char **argv); static void CommandSetSFAVSOnly(int argc, char **argv); static void CommandGetSFAVSOnly(int argc, char **argv); static void CommandSetSFService(int argc, char **argv); static void CommandGetSFService(int argc, char **argv); static void CommandSetSFMRL(int argc, char **argv); static void CommandGetSFMRL(int argc, char **argv); /******************************************************************************* * Global variables * *******************************************************************************/ Command_t CommandDetailsServiceFilter[] = { { "select", 1, 1, "Select a new service to stream.", "select \n" "Sets as the current service, this may mean tuning to a different " "multiplex.", CommandSelect }, { "setmrl", 1,1, "Set the MRL of the primary service filter.", "setmrl \n" "Set the MRL of the primary service filter.\n" "NOTE: This is actually an alias of setsfmrl called with as the service filter name.", CommandSetMRL }, { "getmrl", 0,0, "Get the primary service filter MRL.", "getmrl\n" "Get the MRL of the primary service filter.\n" "NOTE: This is actually an alias of getsfmrl called with as the service filter name.", CommandGetMRL }, { "addsf", 2, 2, "Add a service filter.", "addsf \n" "Adds a new destination for sending a secondary service to.", CommandAddSF }, { "rmsf", 1, 1, "Remove a service filter.", "rmsf \n" "Remove a destination for sending secondary services to.", CommandRemoveSF }, { "lssfs", 0, 1, "List all service filters.", "List all service filters their names, destinations and currently selected service.", CommandListSF }, { "setsf", 2, 2, "Set the service to be filtered by a service filter.", "setsf \n" "Selects the service to be filtered by the service filter.\n" "Cannot be used for the primary service filter (), use \'select\' instead", CommandSetSFService }, { "getsf", 1, 1, "Get the service to stream to a secondary service output.", "setsf \n" "Stream the specified service to the secondary service output.", CommandGetSFService }, { "setsfmrl", 2, 2, "Set the service filter's MRL.", "setsfmrl \n" "Change the destination for packets sent to this service filters output." "If the MRL cannot be parsed no change will be made to the service filter.", CommandSetSFMRL }, { "getsfmrl", 1, 1, "Get the service filter's MRL.", "getsfmrl \n" "Retrieve the current MRL for the specified service filter.", CommandGetSFMRL }, { "setsfavsonly", 2, 2, "Enable/disable streaming of Audio/Video/Subtitles only.", "setsfavsonly on|off\n" "Enabling AVS Only cause the PMT to be rewritten to only include the first " "video stream, normal audio stream and the subtitles stream only.\n" "(Default: off)", CommandSetSFAVSOnly }, { "getsfavsonly", 1, 1, "Get whether Audio/Video/Subtitles only streaming is enabled.", "getsfavsonly \n" "Retrieves whether Audio/Video/Subtitles only streaming is enabled.", CommandGetSFAVSOnly }, COMMANDS_SENTINEL }; /******************************************************************************* * Global functions * *******************************************************************************/ void CommandInstallServiceFilter(void) { CommandRegisterCommands(CommandDetailsServiceFilter); } void CommandUnInstallServiceFilter(void) { CommandUnRegisterCommands(CommandDetailsServiceFilter); } /******************************************************************************* * Local Functions * *******************************************************************************/ static void CommandSelect(int argc, char **argv) { Service_t *service; CommandCheckAuthenticated(); UpdateDatabase(); service = ServiceFind(argv[0]); if (service) { char *idName; TuningCurrentServiceSet(service); idName = ServiceGetIDNameStr(service, NULL); CommandPrintf("%s\n",idName); free(idName); ServiceRefDec(service); } else { CommandError(COMMAND_ERROR_GENERIC, "Service not found!"); } } static void CommandSetMRL(int argc, char **argv) { char *tmpArgs[2]; tmpArgs[0] = (char*)PrimaryService; tmpArgs[1] = argv[0]; CommandSetSFMRL(2, tmpArgs); } static void CommandGetMRL(int argc, char **argv) { char *tmpArgs[1]; tmpArgs[0] = (char*)PrimaryService; CommandGetSFMRL(1, tmpArgs); } static void CommandAddSF(int argc, char **argv) { TSReader_t *tsReader = MainTSReaderGet(); ServiceFilter_t filter; CommandCheckAuthenticated(); filter = ServiceFilterFindFilter(tsReader, argv[0]); if (filter) { CommandError(COMMAND_ERROR_GENERIC, "Service Filter of that name already exists!"); } else { DeliveryMethodInstance_t *instance; filter = ServiceFilterCreate(tsReader, strdup(argv[0])); instance = DeliveryMethodCreate(argv[1]); if (!instance) { instance = DeliveryMethodCreate("null://"); } ServiceFilterDeliveryMethodSet(filter, instance); } } static void CommandRemoveSF(int argc, char **argv) { ServiceFilter_t filter; CommandCheckAuthenticated(); if (strcmp(argv[0], PrimaryService) == 0) { CommandError(COMMAND_ERROR_GENERIC,"You cannot remove the primary service!"); return; } FIND_SERVICE_FILTER(argv[0]); ServiceFilterDestroy(filter); } static void CommandListSF(int argc, char **argv) { ListIterator_t iterator; TSReader_t *reader = MainTSReaderGet(); bool fullListing = FALSE; if (argc == 1) { if (strcmp("-l", argv[0]) == 0) { fullListing = TRUE; } } ListIterator_ForEach(iterator, reader->groups) { TSFilterGroup_t *group = ListIterator_Current(iterator); if (strcmp(group->type, ServiceFilterGroupType) == 0) { ServiceFilter_t filter = group->userArg; char *name = ServiceFilterNameGet(filter); if (fullListing) { Service_t *service = ServiceFilterServiceGet(filter); char *serviceIdName = NULL; if (service) { serviceIdName = ServiceGetIDNameStr(service, NULL); } DeliveryMethodInstance_t *dmInstance = ServiceFilterDeliveryMethodGet(filter); CommandPrintf("%-10s : { mrl: \"%s\", service: { %s } }\n", name, DeliveryMethodGetMRL(dmInstance), serviceIdName ? serviceIdName:""); if (serviceIdName) { free(serviceIdName); } } else { CommandPrintf("%s\n", name); } } } } static void CommandSetSFService(int argc, char **argv) { ServiceFilter_t filter; char *outputName = argv[0]; char *serviceName = argv[1]; Service_t *service; char *idName; CommandCheckAuthenticated(); if (strcmp(outputName, PrimaryService) == 0) { CommandError(COMMAND_ERROR_GENERIC,"Use \'select\' to change the primary service!"); return; } FIND_SERVICE_FILTER(outputName); service = ServiceFindName(serviceName); if (service == NULL) { /* Attempt to look up the service using the fully qualified name */ service = ServiceFindFQIDStr(serviceName); } if (service == NULL) { CommandError(COMMAND_ERROR_GENERIC,"Service not found!"); return; } ServiceFilterServiceSet(filter,service); idName = ServiceGetIDNameStr(service, NULL); CommandPrintf("%s\n",idName); free(idName); ServiceRefDec(service); } static void CommandGetSFService(int argc, char **argv) { ServiceFilter_t filter; Service_t *service; char *idName; FIND_SERVICE_FILTER(argv[0]); service = ServiceFilterServiceGet(filter); if (service) { idName = ServiceGetIDNameStr(service, NULL); CommandPrintf("%s\n",idName); free(idName); } } static void CommandSetSFMRL(int argc, char **argv) { ServiceFilter_t filter; DeliveryMethodInstance_t *instance; CommandCheckAuthenticated(); FIND_SERVICE_FILTER(argv[0]); instance = DeliveryMethodCreate(argv[1]); if (instance) { ServiceFilterDeliveryMethodSet(filter, instance); CommandPrintf("MRL set to \"%s\" for %s\n", DeliveryMethodGetMRL(ServiceFilterDeliveryMethodGet(filter)), argv[0]); } else { CommandError(COMMAND_ERROR_GENERIC,"Failed to set MRL!"); } } static void CommandGetSFMRL(int argc, char **argv) { ServiceFilter_t filter; CommandCheckAuthenticated(); FIND_SERVICE_FILTER(argv[0]); CommandPrintf("%s\n", DeliveryMethodGetMRL(ServiceFilterDeliveryMethodGet(filter))); } static void CommandSetSFAVSOnly(int argc, char **argv) { ServiceFilter_t filter; CommandCheckAuthenticated(); FIND_SERVICE_FILTER(argv[0]); if (strcasecmp(argv[1], "on") == 0) { ServiceFilterAVSOnlySet(filter, TRUE); } else if (strcasecmp(argv[1], "off") == 0) { ServiceFilterAVSOnlySet(filter, FALSE); } else { CommandError(COMMAND_ERROR_WRONG_ARGS, "Need to specify on or off.\n"); } } static void CommandGetSFAVSOnly(int argc, char **argv) { ServiceFilter_t filter; bool avsOnly; CommandCheckAuthenticated(); FIND_SERVICE_FILTER(argv[0]); avsOnly = ServiceFilterAVSOnlyGet(filter); CommandPrintf("%s : A/V/S Only = %s\n", argv[0], avsOnly ? "On":"Off"); } dvbstreamer-2.1.0/src/constants.c000066400000000000000000000002161217721213100167730ustar00rootroot00000000000000 char *DVBDeliverySystemStr[] = { "DVB-S", "DVB-C", "DVB-T", "ATSC", "DVB-S2", "DVB-T2", "Invalid" }; dvbstreamer-2.1.0/src/convertdvbdb.c000066400000000000000000000404251217721213100174470ustar00rootroot00000000000000#include #include #include "dbase.h" #include "main.h" #include "logging.h" /******************************************************************************* * Defines * *******************************************************************************/ /* v0.6 defines */ #define OFDMPARAMS_TABLE "OFDMParameters" #define OFDMPARAM_MULTIPLEXUID "mplexuid" #define OFDMPARAM_FREQ "freq" #define OFDMPARAM_INVERSION "inversion" #define OFDMPARAM_BW "bw" #define OFDMPARAM_FEC_HP "fec_hp" #define OFDMPARAM_FEC_LP "fec_lp" #define OFDMPARAM_QAM "qam" #define OFDMPARAM_TRANSMISSIONM "transmissionm" #define OFDMPARAM_GUARDLIST "guardlist" #define OFDMPARAM_HIERARCHINFO "hierarchinfo" #define QPSKPARAMS_TABLE "QPSKParameters" #define QPSKPARAM_MULTIPLEXUID "mplexuid" #define QPSKPARAM_FREQ "freq" #define QPSKPARAM_INVERSION "inversion" #define QPSKPARAM_SYMBOL_RATE "symbol_rate" #define QPSKPARAM_FEC_INNER "fec_inner" #define QPSKPARAM_POLARISATION "polarisation" #define QPSKPARAM_SATNUMBER "satnumber" #define QAMPARAMS_TABLE "QAMParameters" #define QAMPARAM_MULTIPLEXUID "mplexuid" #define QAMPARAM_FREQ "freq" #define QAMPARAM_INVERSION "inversion" #define QAMPARAM_SYMBOL_RATE "symbol_rate" #define QAMPARAM_FEC_INNER "fec_inner" #define QAMPARAM_MODULATION "modulation" #define VSBPARAMS_TABLE "VSBParameters" #define VSBPARAM_MULTIPLEXUID "mplexuid" #define VSBPARAM_FREQ "freq" #define VSBPARAM_MODULATION "modulation" /******************************************************************************* * Typedefs * *******************************************************************************/ struct Converter_s{ double version; int (*convert)(void); }; typedef struct Param_s { char *str; int value; }Param_t; /******************************************************************************* * Prototypes * *******************************************************************************/ static int UpdateDatabaseVersion(void); static char *findParameter(const Param_t *params, int value); static int convert0_6(void); /******************************************************************************* * Global variables * *******************************************************************************/ static sqlite3 *connection; static const struct Converter_s converters[]= { { 0.6, convert0_6}, }; static const Param_t inversion_list [] = { { "OFF", INVERSION_OFF }, { "ON", INVERSION_ON }, { "AUTO", INVERSION_AUTO }, { NULL, 0 } }; static const Param_t bw_list [] = { { "6Mhz", BANDWIDTH_6_MHZ }, { "7Mhz", BANDWIDTH_7_MHZ }, { "8Mhz", BANDWIDTH_8_MHZ }, { "AUTO", BANDWIDTH_AUTO }, { NULL, 0 } }; static const Param_t fec_list [] = { { "AUTO", FEC_AUTO }, { "1/2", FEC_1_2 }, { "2/3", FEC_2_3 }, { "3/4", FEC_3_4 }, { "4/5", FEC_4_5 }, { "5/6", FEC_5_6 }, { "6/7", FEC_6_7 }, { "7/8", FEC_7_8 }, { "8/9", FEC_8_9 }, { "NONE", FEC_NONE }, { NULL, 0 } }; static const Param_t guard_list [] = { {"1/16", GUARD_INTERVAL_1_16 }, {"1/32", GUARD_INTERVAL_1_32 }, {"1/4", GUARD_INTERVAL_1_4 }, {"1/8", GUARD_INTERVAL_1_8 }, {"AUTO", GUARD_INTERVAL_AUTO }, { NULL, 0 } }; static const Param_t hierarchy_list [] = { { "NONE", HIERARCHY_NONE }, { "1", HIERARCHY_1 }, { "2", HIERARCHY_2 }, { "4", HIERARCHY_4 }, { "AUTO", HIERARCHY_AUTO }, { NULL, 0 } }; static const Param_t modulation_list [] = { { "QPSK", QPSK }, { "16QAM", QAM_16 }, { "32QAM", QAM_32 }, { "64QAM", QAM_64 }, { "128QAM", QAM_128 }, { "256QAM", QAM_256 }, { "AUTO", QAM_AUTO }, { "8VSB", VSB_8 }, { "16VSB", VSB_16 }, { NULL, 0 } }; static const Param_t transmissionmode_list [] = { { "2K", TRANSMISSION_MODE_2K }, { "8K", TRANSMISSION_MODE_8K }, { "AUTO", TRANSMISSION_MODE_AUTO }, { NULL, 0 } }; static const Param_t polarisation_list[] = { {"Horizontal", 0}, {"Vertical", 1}, { NULL, 0} }; /******************************************************************************* * Global functions * *******************************************************************************/ int main(int argc, char *argv[]) { sqlite3_stmt *stmt; int rc; double version; int i; if (argc < 2) { fprintf(stderr, "Missing database file to convert!\n"); return 1; } rc = sqlite3_open(argv[1], &connection); if (rc != SQLITE_OK) { fprintf(stderr, "Can\'t open database: %s\n", sqlite3_errmsg(connection)); sqlite3_close(connection); return 1; } rc = sqlite3_prepare( connection, "SELECT " METADATA_VALUE " " "FROM " METADATA_TABLE " " "WHERE " METADATA_NAME "=\"" METADATA_DBASE_VERSION "\";", -1, &stmt, NULL); if (rc != SQLITE_OK) { fprintf(stderr, "Failed to prepare version statement: %s\n", sqlite3_errmsg(connection)); return 1; } rc = sqlite3_step(stmt); if (rc != SQLITE_ROW) { fprintf(stderr, "Failed to retrieve version: %s\n", sqlite3_errmsg(connection)); return 1; } version = sqlite3_column_double(stmt, 0); sqlite3_finalize(stmt); printf("Current version of database is %.2f\n", version); for (i = 0; i < sizeof(converters)/sizeof(struct Converter_s); i ++) { if (version <= converters[i].version) { rc = converters[i].convert(); if (rc) { break; } } } if (rc == SQLITE_OK) { UpdateDatabaseVersion(); } sqlite3_close(connection); return 0; } /******************************************************************************* * Local Functions * *******************************************************************************/ static int convert0_6(void) { int rc; sqlite3_stmt *stmt; char **muxTable; char *errMsg; int rows, columns; int m; char statement[256]; char buffer[256]; char *update; rc = sqlite3_exec(connection, "ALTER TABLE " MULTIPLEXES_TABLE " ADD " MULTIPLEX_TUNINGPARAMS ";", NULL, NULL, NULL); if (rc) { fprintf(stderr, "Failed to add tuning parameters column to mulitplexes table: %s\n", sqlite3_errmsg(connection)); return rc; } rc = sqlite3_get_table(connection, "SELECT " MULTIPLEX_UID "," MULTIPLEX_TYPE " FROM " MULTIPLEXES_TABLE ";", &muxTable, &rows, &columns, &errMsg); if (rc) { fprintf(stderr, "Failed to retrieve multiplexes: %s\n", errMsg); sqlite3_free(errMsg); return rc; } for (m = 1; m < rows+1; m ++) { switch(muxTable[(m * 2) + 1][0]) { case '0': /* QPSK */ sprintf(statement, "SELECT " QPSKPARAM_FREQ "," QPSKPARAM_INVERSION "," QPSKPARAM_FEC_INNER "," QPSKPARAM_SYMBOL_RATE "," QPSKPARAM_POLARISATION "," QPSKPARAM_SATNUMBER " FROM " QPSKPARAMS_TABLE " WHERE "QPSKPARAM_MULTIPLEXUID "=%s;", muxTable[m*2]); rc = sqlite3_prepare(connection, statement, -1, &stmt, NULL); if (rc == SQLITE_OK) { char *pol, *inversion, *fec; rc = sqlite3_step(stmt); inversion = findParameter(inversion_list, sqlite3_column_int(stmt, 1)); fec = findParameter(fec_list, sqlite3_column_int(stmt, 2)); pol = findParameter(polarisation_list, sqlite3_column_int(stmt, 4)); sprintf(buffer, "Frequency: %d\n" "FEC: %s\n" "Inversion: %s\n" "Symbol Rate: %d\n" "Polarisation: %s\n" "Satellite Number: %d\n", sqlite3_column_int(stmt, 0), fec, inversion, sqlite3_column_int(stmt, 3), pol, sqlite3_column_int(stmt, 5)); sqlite3_finalize(stmt); } else { fprintf(stderr, "Failed prepare qpsk select: %s\n", sqlite3_errmsg(connection)); } break; case '1': /* QAM */ sprintf(statement, "SELECT " QAMPARAM_FREQ "," QAMPARAM_INVERSION "," QAMPARAM_FEC_INNER "," QAMPARAM_MODULATION "," QAMPARAM_SYMBOL_RATE " FROM " QAMPARAMS_TABLE " WHERE " QAMPARAM_MULTIPLEXUID "=%s;", muxTable[m*2]); rc = sqlite3_prepare(connection, statement, -1, &stmt, NULL); if (rc == SQLITE_OK) { char *mod, *inversion, *fec; rc = sqlite3_step(stmt); inversion = findParameter(inversion_list, sqlite3_column_int(stmt, 1)); fec = findParameter(fec_list, sqlite3_column_int(stmt, 2)); mod = findParameter(modulation_list, sqlite3_column_int(stmt, 3)); sprintf(buffer, "Frequency: %d\n" "FEC: %s\n" "Inversion: %s\n" "Symbol Rate: %d\n" "Modulation: %s\n", sqlite3_column_int(stmt, 0), fec, inversion, sqlite3_column_int(stmt, 4), mod); sqlite3_finalize(stmt); } else { fprintf(stderr, "Failed prepare qam select: %s\n", sqlite3_errmsg(connection)); } break; case '2': /* OFDM */ sprintf(statement, "SELECT " OFDMPARAM_FREQ "," OFDMPARAM_INVERSION "," OFDMPARAM_BW "," OFDMPARAM_FEC_LP "," OFDMPARAM_FEC_HP "," OFDMPARAM_QAM "," OFDMPARAM_TRANSMISSIONM "," OFDMPARAM_GUARDLIST "," OFDMPARAM_HIERARCHINFO " FROM " OFDMPARAMS_TABLE " WHERE " OFDMPARAM_MULTIPLEXUID "=%s;", muxTable[m*2]); rc = sqlite3_prepare(connection, statement, -1, &stmt, NULL); if (rc == SQLITE_OK) { char *mod, *inversion, *bw, *fec_lp, *fec_hp, *transmission, *guardlist, *hierarchy; rc = sqlite3_step(stmt); inversion = findParameter(inversion_list, sqlite3_column_int(stmt, 1)); bw = findParameter(bw_list, sqlite3_column_int(stmt, 2)); fec_lp = findParameter(fec_list, sqlite3_column_int(stmt, 3)); fec_hp = findParameter(fec_list, sqlite3_column_int(stmt, 4)); mod = findParameter(modulation_list, sqlite3_column_int(stmt, 5)); transmission = findParameter(transmissionmode_list, sqlite3_column_int(stmt, 6)); guardlist = findParameter(modulation_list, sqlite3_column_int(stmt, 7)); hierarchy = findParameter(hierarchy_list, sqlite3_column_int(stmt, 9)); sprintf(buffer, "Frequency: %d\n" "Inversion: %s\n" "Bandwidth: %s\n" "FEC LP: %s\n" "FEC HP: %s\n" "Constellation: %s\n" "Transmission Mode: %s\n" "Guard Interval: %s\n" "Hierarchy: %s\n", sqlite3_column_int(stmt, 0), inversion, bw, fec_lp, fec_hp, mod, transmission, guardlist, hierarchy); sqlite3_finalize(stmt); } else { fprintf(stderr, "Failed prepare ofdm select: %s\n", sqlite3_errmsg(connection)); } break; case '3': /* ATSC */ sprintf(statement, "SELECT " VSBPARAM_FREQ "," VSBPARAM_MODULATION " FROM " VSBPARAMS_TABLE " WHERE " VSBPARAM_MULTIPLEXUID "=%s;", muxTable[m*2]); rc = sqlite3_prepare(connection, statement, -1, &stmt, NULL); if (rc == SQLITE_OK) { char *mod; rc = sqlite3_step(stmt); mod = findParameter(modulation_list, sqlite3_column_int(stmt, 1)); sprintf(buffer, "Frequency: %d\n" "Modulation: %s\n", sqlite3_column_int(stmt, 0), mod); sqlite3_finalize(stmt); } else { fprintf(stderr, "Failed prepare vsb select: %s\n", sqlite3_errmsg(connection)); } break; default: break; } update = sqlite3_mprintf("UPDATE " MULTIPLEXES_TABLE " SET " MULTIPLEX_TUNINGPARAMS "=%Q WHERE " MULTIPLEX_UID"=%s;", buffer, muxTable[m*2]); rc = sqlite3_prepare(connection, update, -1, &stmt, NULL); if (rc == SQLITE_OK) { sqlite3_step(stmt); } sqlite3_finalize(stmt); sqlite3_free(update); } sqlite3_free_table(muxTable); rc = sqlite3_exec(connection, "DROP TABLE " OFDMPARAMS_TABLE ";", NULL, NULL, NULL); rc = sqlite3_exec(connection, "DROP TABLE " QPSKPARAMS_TABLE ";", NULL, NULL, NULL); rc = sqlite3_exec(connection, "DROP TABLE " QAMPARAMS_TABLE ";", NULL, NULL, NULL); rc = sqlite3_exec(connection, "DROP TABLE " VSBPARAMS_TABLE ";", NULL, NULL, NULL); /* Remove all descriptors, bug in 1.x means these are invalid. */ rc = sqlite3_exec(connection, "UPDATE " PIDS_TABLE " SET " PID_DESCRIPTORS "=NULL;", NULL, NULL, NULL); return rc; } static int UpdateDatabaseVersion(void) { char statement[256]; sprintf(statement, "INSERT OR REPLACE INTO " METADATA_TABLE " " "(" METADATA_NAME "," METADATA_VALUE ") " "VALUES('" METADATA_DBASE_VERSION "',%e);", DBASE_VERSION); return sqlite3_exec(connection, statement, NULL, NULL, NULL); } static char *findParameter(const Param_t *params, int value) { int i; for (i = 0; params[i].str; i ++) { if (params[i].value == value) { return params[i].str; } } return NULL; } dvbstreamer-2.1.0/src/dbase.c000066400000000000000000000256051217721213100160460ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dbase.c Opens/Closes and setups the sqlite database for use by the rest of the application. */ #include #include #include #include #include #include #include #include "dbase.h" #include "types.h" #include "main.h" #include "logging.h" #include "objects.h" #include "deferredproc.h" /******************************************************************************* * Prototypes * *******************************************************************************/ static int DBaseCreateTables(void); static int DBaseCheckVersion(); /******************************************************************************* * Global variables * *******************************************************************************/ static sqlite3 *DBaseInstance; static char DBASE[] = "dbase"; static char dbaseFile[PATH_MAX]; static pthread_key_t dbaseKey; /******************************************************************************* * Global functions * *******************************************************************************/ int DBaseInit(int adapter) { int rc; pthread_key_create(&dbaseKey, (void(*)(void *))sqlite3_close); sprintf(dbaseFile, "%s/adapter%d.db", DataDirectory, adapter); rc = sqlite3_open(dbaseFile, &DBaseInstance); if (rc) { LogModule(LOG_ERROR, DBASE, "Can't open database: %s\n", sqlite3_errmsg(DBaseInstance)); sqlite3_close(DBaseInstance); } else { pthread_setspecific(dbaseKey, (void*)DBaseInstance); sqlite3_busy_timeout(DBaseInstance, 500); rc = DBaseCheckVersion(); } return rc; } void DBaseDeInit() { pthread_setspecific(dbaseKey, NULL); sqlite3_close(DBaseInstance); } sqlite3* DBaseConnectionGet(void) { sqlite3 *connection = pthread_getspecific(dbaseKey); if (connection == NULL) { int rc = sqlite3_open(dbaseFile, &connection); if (rc) { LogModule(LOG_ERROR, DBASE, "Can't open database: %s\n", sqlite3_errmsg(connection)); sqlite3_close(connection); connection = NULL; } else { LogModule(LOG_DEBUG, DBASE, "Database opened successfully. (%p)\n", connection); sqlite3_busy_timeout(connection, 500); pthread_setspecific(dbaseKey, (void*)connection); } } return connection; } int DBaseTransactionBegin(void) { sqlite3 *connection = DBaseConnectionGet(); return sqlite3_exec(connection, "BEGIN TRANSACTION;", NULL, NULL, NULL); } int DBaseTransactionCommit(void) { sqlite3 *connection = DBaseConnectionGet(); return sqlite3_exec(connection, "COMMIT TRANSACTION;", NULL, NULL, NULL); } int DBaseCount(char *table, char *where) { STATEMENT_INIT; int result = -1; if (where == NULL) { STATEMENT_PREPAREVA("SELECT count() FROM %s;", table); } else { STATEMENT_PREPAREVA("SELECT count() FROM %s WHERE %s;", table, where); } RETURN_ON_ERROR(-1); STATEMENT_STEP(); if (rc == SQLITE_ROW) { result = STATEMENT_COLUMN_INT(0); rc = 0; } STATEMENT_FINALIZE(); return result; } /******************************************************************************* * Local Functions * *******************************************************************************/ static int DBaseCheckVersion() { int rc; double version; rc = DBaseMetadataGetDouble(METADATA_DBASE_VERSION, &version); if (rc) { LogModule(LOG_DEBUG, DBASE, "Failed to get version from Metadata table (%d)\n", rc); rc = DBaseCreateTables(); } else { LogModule(LOG_DEBUG, DBASE, "Current version of database is %f\n", version); /* Check version number and upgrade tables for future releases ? */ if (version < DBASE_VERSION) { int pid; char path[PATH_MAX]; char *filename; ssize_t len; /* Determine the location of file for the running process */ sprintf(path, "/proc/%d/exe", getpid()); len = readlink(path, path, sizeof(path) - 1); path[len] = 0; /* Change the filename to point to the conversion program */ filename = strrchr(path, '/'); strcpy(filename + 1, "convertdvbdb"); pid = fork(); if (pid) { waitpid(pid, &rc, 0); } else { execl(path, path, dbaseFile, NULL); exit(1); } } } return rc; } static int DBaseCreateTables(void) { int rc = 0; LogModule(LOG_DEBUG, DBASE, "Creating tables\n"); sqlite3_exec(DBaseInstance, "BEGIN TRANSACTION;", NULL, NULL, NULL); rc = sqlite3_exec(DBaseInstance, "CREATE TABLE " METADATA_TABLE " ( " METADATA_NAME " PRIMARY KEY," METADATA_VALUE ");", NULL, NULL, NULL); if (rc) { LogModule(LOG_ERROR, DBASE, "Failed to create Metadata table: %s\n", sqlite3_errmsg(DBaseInstance)); return rc; } rc = sqlite3_exec(DBaseInstance, "CREATE TABLE " SERVICES_TABLE " ( " SERVICE_MULTIPLEXUID "," SERVICE_ID "," SERVICE_SOURCE "," SERVICE_CA "," SERVICE_TYPE "," SERVICE_NAME "," SERVICE_PMTPID " DEFAULT -1," SERVICE_PROVIDER "," SERVICE_DEFAUTHORITY "," "PRIMARY KEY ( "SERVICE_MULTIPLEXUID "," SERVICE_ID ")" ");", NULL, NULL, NULL); if (rc) { LogModule(LOG_ERROR, DBASE, "Failed to create Services table: %s\n", sqlite3_errmsg(DBaseInstance)); return rc; } rc = sqlite3_exec(DBaseInstance, "CREATE TABLE " MULTIPLEXES_TABLE " ( " MULTIPLEX_UID " INTEGER PRIMARY KEY," MULTIPLEX_TYPE "," MULTIPLEX_TSID " DEFAULT -1," MULTIPLEX_NETID" DEFAULT -1," MULTIPLEX_TUNINGPARAMS ");", NULL, NULL, NULL); if (rc) { LogModule(LOG_ERROR, DBASE, "Failed to create Multiplexes table: %s\n", sqlite3_errmsg(DBaseInstance)); return rc; } rc = sqlite3_exec(DBaseInstance, "CREATE TABLE " PIDS_TABLE " ( " PID_MULTIPLEXUID "," PID_SERVICEID "," PID_PID "," PID_TYPE "," PID_DESCRIPTORS " DEFAULT NULL," "PRIMARY KEY(" PID_MULTIPLEXUID "," PID_SERVICEID "," PID_PID ")" ");", NULL, NULL, NULL); if (rc) { LogModule(LOG_ERROR, DBASE, "Failed to create PIDs table: %s\n", sqlite3_errmsg(DBaseInstance)); return rc; } DBaseMetadataSetDouble(METADATA_DBASE_VERSION,DBASE_VERSION); sqlite3_exec(DBaseInstance, "COMMIT TRANSACTION;", NULL, NULL, NULL); return rc; } int DBaseMetadataGet(char *name, char **value) { STATEMENT_INIT; int result = 1; STATEMENT_PREPAREVA("SELECT " METADATA_VALUE " " "FROM " METADATA_TABLE " " "WHERE " METADATA_NAME "='%q';", name); RETURN_RC_ON_ERROR; STATEMENT_STEP(); RETURN_RC_ON_ERROR; if (rc == SQLITE_ROW) { *value = strdup(STATEMENT_COLUMN_TEXT(0)); result = 0; } STATEMENT_FINALIZE(); return result; } int DBaseMetadataSet(char *name, char *value) { STATEMENT_INIT; STATEMENT_PREPAREVA("INSERT OR REPLACE INTO " METADATA_TABLE " " "(" METADATA_NAME "," METADATA_VALUE ") " "VALUES('%q','%q');", name, value); RETURN_RC_ON_ERROR; STATEMENT_STEP(); RETURN_RC_ON_ERROR; STATEMENT_FINALIZE(); return rc; } int DBaseMetadataGetInt(char *name, int *value) { STATEMENT_INIT; int result = 1; STATEMENT_PREPAREVA("SELECT " METADATA_VALUE " " "FROM " METADATA_TABLE " " "WHERE " METADATA_NAME "='%q';", name); RETURN_RC_ON_ERROR; STATEMENT_STEP(); RETURN_RC_ON_ERROR; if (rc == SQLITE_ROW) { *value = STATEMENT_COLUMN_INT(0); result = 0; } STATEMENT_FINALIZE(); return result; } int DBaseMetadataSetInt(char *name, int value) { STATEMENT_INIT; STATEMENT_PREPAREVA("INSERT OR REPLACE INTO " METADATA_TABLE " " "(" METADATA_NAME "," METADATA_VALUE ") " "VALUES('%q',%d);", name, value); RETURN_RC_ON_ERROR; STATEMENT_STEP(); RETURN_RC_ON_ERROR; STATEMENT_FINALIZE(); return rc; } int DBaseMetadataGetDouble(char *name, double *value) { STATEMENT_INIT; int result = 1; STATEMENT_PREPAREVA("SELECT " METADATA_VALUE " " "FROM " METADATA_TABLE " " "WHERE " METADATA_NAME "='%q';", name); RETURN_RC_ON_ERROR; STATEMENT_STEP(); RETURN_RC_ON_ERROR; if (rc == SQLITE_ROW) { *value = STATEMENT_COLUMN_DOUBLE(0); result = 0; } STATEMENT_FINALIZE(); return result; } int DBaseMetadataSetDouble(char *name, double value) { STATEMENT_INIT; STATEMENT_PREPAREVA("INSERT OR REPLACE INTO " METADATA_TABLE " " "(" METADATA_NAME "," METADATA_VALUE ") " "VALUES('%q',%e);", name, value); RETURN_RC_ON_ERROR; STATEMENT_STEP(); RETURN_RC_ON_ERROR; STATEMENT_FINALIZE(); return rc; } int DBaseMetadataDelete(char *name) { STATEMENT_INIT; STATEMENT_PREPAREVA("DELETE FROM " METADATA_TABLE " " "WHERE " METADATA_NAME "='%q';", name); RETURN_RC_ON_ERROR; STATEMENT_STEP(); RETURN_RC_ON_ERROR; STATEMENT_FINALIZE(); return rc; } dvbstreamer-2.1.0/src/deliverymethod.c000066400000000000000000000144211217721213100200060ustar00rootroot00000000000000/* Copyright (C) 2009 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA deliverymethod.h Delivery Method management functions. */ #include #include #include "logging.h" #include "list.h" #include "deliverymethod.h" /******************************************************************************* * Prototypes * *******************************************************************************/ bool NullOutputCanHandle(char *mrl); DeliveryMethodInstance_t *NullOutputCreate(char *arg); void NullOutputDestroy(DeliveryMethodInstance_t *this); /******************************************************************************* * Global variables * *******************************************************************************/ static char DELIVERYMETHOD[] = "DeliveryMethod"; static List_t *DeliveryMethodsList; static List_t *InstancesList; /** Constants for the start of the MRL **/ #define PREFIX_LEN (sizeof(NullPrefix) - 1) const char NullPrefix[] = "null://"; /** Plugin Interface **/ DeliveryMethodHandler_t NullOutputHandler = { NullOutputCanHandle, NullOutputCreate }; static DeliveryMethodInstanceOps_t nullInstanceOps = { NULL, NULL, NullOutputDestroy, NULL, NULL }; static DeliveryMethodInstance_t singleInstance ={ "null://", &nullInstanceOps, NULL }; /******************************************************************************* * Global functions * *******************************************************************************/ int DeliveryMethodManagerInit(void) { DeliveryMethodsList = ListCreate(); if (DeliveryMethodsList == NULL) { return -1; } InstancesList = ListCreate(); if (InstancesList == NULL) { ListFree(DeliveryMethodsList, NULL); return -1; } DeliveryMethodManagerRegister(&NullOutputHandler); return 0; } void DeliveryMethodManagerDeInit(void) { ListFree(DeliveryMethodsList, NULL); if (ListCount(InstancesList) != 0) { LogModule(LOG_ERROR, DELIVERYMETHOD, "Instances still exist when shutting down Delivery Method Manager!\n"); } ListFree(InstancesList, NULL); } void DeliveryMethodManagerRegister(DeliveryMethodHandler_t *handler) { ListAdd(DeliveryMethodsList, handler); } void DeliveryMethodManagerUnRegister(DeliveryMethodHandler_t *handler) { ListRemove(DeliveryMethodsList, handler); } DeliveryMethodInstance_t *DeliveryMethodCreate(char *mrl) { ListIterator_t iterator; DeliveryMethodInstance_t *instance = NULL; LogModule(LOG_DEBUG, DELIVERYMETHOD, "Looking for handler for %s", mrl); for ( ListIterator_Init(iterator, DeliveryMethodsList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { DeliveryMethodHandler_t *handler = ListIterator_Current(iterator); LogModule(LOG_DEBUG, DELIVERYMETHOD, "Checking handler %p", handler); if (handler->CanHandle(mrl)) { instance = handler->CreateInstance(mrl); if (instance) { if (instance->mrl == NULL) { LogModule(LOG_DEBUG, DELIVERYMETHOD, "MRL field not set when creating instance for %s", mrl); } ListAdd(InstancesList, instance); LogModule(LOG_DEBUG, DELIVERYMETHOD, "Created DeliveryMethodInstance(%p) for %s\n",instance, instance->mrl); break; } } } return instance; } void DeliveryMethodDestroy(DeliveryMethodInstance_t *instance) { LogModule(LOG_DEBUG, DELIVERYMETHOD, "Released DeliveryMethodInstance(%p) for %s\n" ,instance, instance->mrl); instance->ops->DestroyInstance(instance); ListRemove(InstancesList, instance); } void DeliveryMethodDestroyAll() { ListIterator_t iterator; for (ListIterator_Init(iterator, InstancesList); ListIterator_MoreEntries(iterator);) { DeliveryMethodInstance_t *instance = ListIterator_Current(iterator); ListIterator_Next(iterator); DeliveryMethodDestroy(instance); } } char* DeliveryMethodGetMRL(DeliveryMethodInstance_t *instance) { return instance->mrl; } void DeliveryMethodReserveHeaderSpace(DeliveryMethodInstance_t *instance, int nrofPackets) { if (instance->ops->ReserveHeaderSpace) { instance->ops->ReserveHeaderSpace(instance, nrofPackets); } } void DeliveryMethodSetHeader(DeliveryMethodInstance_t *instance, TSPacket_t *packets, int nrofPackets) { if (instance->ops->SetHeader) { instance->ops->SetHeader(instance, packets, nrofPackets); } } void DeliveryMethodOutputPacket(DeliveryMethodInstance_t *instance, TSPacket_t* packet) { if (instance->ops->OutputPacket) { instance->ops->OutputPacket(instance, packet); } } void DeliveryMethodOutputBlock(DeliveryMethodInstance_t *instance, void *block, unsigned long blockLen) { if (instance->ops->OutputBlock) { instance->ops->OutputBlock(instance, block, blockLen); } } /******************************************************************************* * NULL Delivery Method Functions * *******************************************************************************/ bool NullOutputCanHandle(char *mrl) { return (strncmp(NullPrefix, mrl, PREFIX_LEN) == 0); } DeliveryMethodInstance_t *NullOutputCreate(char *arg) { return &singleInstance; } void NullOutputDestroy(DeliveryMethodInstance_t *this) { /* Does nothing */ return; } dvbstreamer-2.1.0/src/dispatchers.c000066400000000000000000000106101217721213100172670ustar00rootroot00000000000000/* Copyright (C) 2009 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dispatchers.c File Descriptor monitoring and event dispatching. */ #include #include #include #include "logging.h" #include "dispatchers.h" /******************************************************************************* * Prototypes * *******************************************************************************/ static void *InputDispatcher(void*arg); static void *UserNetDispatcher(void*arg); static void InputExit(struct ev_loop *loop, ev_io *w, int revents); static void NetUserExit(struct ev_loop *loop, ev_io *w, int revents); /******************************************************************************* * Global variables * *******************************************************************************/ static char DISPATCHERS[] = "Dispatchers"; static struct ev_loop *InputEventLoop = NULL; static struct ev_loop *UserNetEventLoop = NULL; static pthread_t InputDispatcherThread; static pthread_t UserNetDispatcherThread; static bool UserNetSync = FALSE; static int exitPipe[2]; static ev_io InputExitWatcher; static ev_io NetUserExitWatcher; /******************************************************************************* * Global functions * *******************************************************************************/ int DispatchersInit(void) { if (pipe(exitPipe) != 0) { return -1; } UserNetEventLoop = ev_loop_new(EVFLAG_AUTO); InputEventLoop = ev_loop_new(EVFLAG_AUTO); ev_io_init(&InputExitWatcher, InputExit, exitPipe[0], EV_READ); ev_io_init(&NetUserExitWatcher, NetUserExit, exitPipe[0], EV_READ); ev_io_start(InputEventLoop, &InputExitWatcher); ev_io_start(UserNetEventLoop, &NetUserExitWatcher); return 0; } int DispatchersDeInit(void) { ev_io_stop(InputEventLoop, &InputExitWatcher); ev_io_stop(UserNetEventLoop, &NetUserExitWatcher); ev_loop_destroy(InputEventLoop); ev_loop_destroy(UserNetEventLoop); return 0; } void DispatchersStart(bool sync) { pthread_create(&InputDispatcherThread, NULL, InputDispatcher, NULL); if (sync) { ev_loop(UserNetEventLoop, 0); } else { pthread_create(&UserNetDispatcherThread, NULL, UserNetDispatcher, NULL); } UserNetSync = sync; } void DispatchersExitLoop(void) { write(exitPipe[1], "e", 1); } void DispatchersStop(void) { DispatchersExitLoop(); pthread_join(InputDispatcherThread, NULL); if (!UserNetSync) { pthread_join(UserNetDispatcherThread, NULL); } } struct ev_loop * DispatchersGetInput(void) { return InputEventLoop; } struct ev_loop * DispatchersGetNetwork(void) { return UserNetEventLoop; } struct ev_loop * DispatchersGetUserInput(void) { return UserNetEventLoop; } static void InputExit(struct ev_loop *loop, ev_io *w, int revents) { ev_unloop(loop, EVUNLOOP_ALL); } static void NetUserExit(struct ev_loop *loop, ev_io *w, int revents) { ev_unloop(loop, EVUNLOOP_ALL); } static void *InputDispatcher(void*arg) { LogRegisterThread(pthread_self(), "InputDispatcher"); LogModule(LOG_INFOV, DISPATCHERS, "Input dispatcher started"); ev_loop(InputEventLoop, 0); LogModule(LOG_INFOV, DISPATCHERS, "Input dispatcher finished"); return NULL; } static void *UserNetDispatcher(void*arg) { LogRegisterThread(pthread_self(), "NetDispatcher"); LogModule(LOG_INFOV, DISPATCHERS, "Network dispatcher started"); ev_loop(UserNetEventLoop, 0); LogModule(LOG_INFOV, DISPATCHERS, "Network dispatcher finished"); return NULL; } dvbstreamer-2.1.0/src/dvbadapter.c000066400000000000000000002131701217721213100171000ustar00rootroot00000000000000/* Copyright (C) 2010 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dvbadapter.c Opens/Closes and setups dvb adapter for use in the rest of the application. */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "types.h" #include "dvbadapter.h" #include "logging.h" #include "objects.h" #include "events.h" #include "properties.h" #include "dispatchers.h" #include "yamlutils.h" /******************************************************************************* * Defines * *******************************************************************************/ #define DVB_CMD_TUNE 0 #define DVB_CMD_FE_ACTIVE 1 #define DVB_CMD_FE_INACTIVE 2 /* Use LinuxDVB Version 3 API */ /* #undef DVB_API_VERSION #define DVB_API_VERSION 3 */ #if DVB_API_VERSION >= 5 #ifdef DTV_ISDBT_LAYER_ENABLED #define HAVE_FULL_ISBDT #endif #define PROP_IDX_DELSYS 0 #define PROP_IDX_FREQ 1 #define PROP_IDX_INVERSION 2 #define PROP_IDX_DVBS_FEC 3 #define PROP_IDX_DVBS_SYMBOL_RATE 4 #define PROP_COUNT_DVBS 5 #define PROP_IDX_DVBS2_FEC 3 #define PROP_IDX_DVBS2_SYMBOL_RATE 4 #define PROP_IDX_DVBS2_MODULATION 5 #define PROP_IDX_DVBS2_PILOT 6 #define PROP_IDX_DVBS2_ROLL_OFF 7 #define PROP_COUNT_DVBS2 8 #define PROP_IDX_DVBC_FEC 3 #define PROP_IDX_DVBC_SYMBOL_RATE 4 #define PROP_IDX_DVBC_MODULATION 5 #define PROP_COUNT_DVBC 6 #define PROP_IDX_DVBT_BANDWIDTH 3 #define PROP_IDX_DVBT_CODE_RATE_HP 4 #define PROP_IDX_DVBT_CODE_RATE_LP 5 #define PROP_IDX_DVBT_MODULATION 6 #define PROP_IDX_DVBT_GUARD_INTERVAL 7 #define PROP_IDX_DVBT_TRANSMISSION_MODE 8 #define PROP_IDX_DVBT_HIERARCHY 9 #define PROP_COUNT_DVBT 10 #define PROP_IDX_ATSC_MODULATION 3 #define PROP_COUNT_ATSC 4 #define PROP_IDX_ISDBT_BANDWIDTH 3 #define PROP_IDX_ISDBT_TRANSMISSION_MODE 4 #define PROP_IDX_ISDBT_GUARD_INTERVAL 5 #ifdef HAVE_FULL_ISDBT #define PROP_IDX_ISDBT_LAYERS 6 #define PROP_IDX_ISDBT_LAYER_A_FEC 7 #define PROP_IDX_ISDBT_LAYER_B_FEC 8 #define PROP_IDX_ISDBT_LAYER_C_FEC 9 #define PROP_IDX_ISDBT_LAYER_A_MOD 10 #define PROP_IDX_ISDBT_LAYER_B_MOD 11 #define PROP_IDX_ISDBT_LAYER_C_MOD 12 #define PROP_IDX_ISDBT_LAYER_A_SEGS 13 #define PROP_IDX_ISDBT_LAYER_B_SEGS 14 #define PROP_IDX_ISDBT_LAYER_C_SEGS 15 #define PROP_COUNT_ISDBT 16 #else #define PROP_COUNT_ISDBT 6 #endif #endif /******************************************************************************* * Typedefs * *******************************************************************************/ /** * Enum to represent the different polarisation available for satellite * transmission. */ enum Polarisation_e { POL_HORIZONTAL = 0, POL_VERTICAL }; /** * Structure used to hold the information necessary to setup DiSEqC switches * to receive a specifiec satellite. */ typedef struct DVBSatelliteSettings_s { enum Polarisation_e polarisation;/**< Polarisation of the signal */ unsigned int satellite_number; /**< Satellite number for the switch */ }DVBSatelliteSettings_t; struct DVBAdapter_s { int adapter; /**< The adapter number ie /dev/dvb/adapter<#adapter> */ struct dvb_frontend_info info; /**< Information about the front end */ DVBSupportedDeliverySys_t *supportedDelSystems; char frontEndPath[30]; /**< Path to the frontend device */ int frontEndFd; /**< File descriptor for the frontend device */ bool frontEndLocked; /**< Whether the frontend is currently locked onto a signal. */ bool tuning; /**< Whether we have started a tune request */ DVBDeliverySystem_e currentDeliverySystem; __u32 frontEndRequestedFreq; /**< The frequency that the application requested, may be different from one used (ie DVB-S intermediate frequency) */ #if (DVB_API_VERSION < 5) struct dvb_frontend_parameters frontEndParams; /**< The current frontend configuration parameters. These may be updated when the frontend locks. */ #else struct dtv_property frontEndPropertyArray[DTV_IOCTL_MAX_MSGS]; struct dtv_properties frontEndProperties; #endif DVBSatelliteSettings_t satelliteSettings; /**< Current DiSEqC settings for DVB-S */ LNBInfo_t lnbInfo; /**< LNB Information for DVB-S/S2 receivers */ bool lnbSharing; /**< Whether this adapter is sharing an LNB so shouldn't use tone/voltage control. */ char demuxPath[30]; /**< Path to the demux device */ bool hardwareRestricted; /**< Whether the adapter can only stream a portion of the transport stream */ int maxFilters; /**< Maximum number of available filters. */ DVBAdapterPIDFilter_t filters[DVB_MAX_PID_FILTERS];/**< File descriptor for the demux device.*/ char dvrPath[30]; /**< Path to the dvr device */ int dvrFd; /**< File descriptor for the dvr device */ int cmdRecvFd; /**< File descriptor for monitor task to recieve commands */ int cmdSendFd; /**< File descriptor to send commands to monitor task. */ ev_io commandWatcher; ev_io frontendWatcher; bool forcedISDB; /**< Whether we have been forced into ISDB tuning mode */ struct dvb_frontend_parameters isdbFEParams; } ; typedef struct StringToParamMapping_s { char *str; uint32_t param; }StringToParamMapping_t; #define STRINGTOPARAMMAPPING_SENTINEL {NULL, 0 } /******************************************************************************* * Prototypes * *******************************************************************************/ static int DVBFrontEndSatelliteSetup(DVBAdapter_t *adapter); static int DVBDemuxStartFilter(DVBAdapter_t *adapter, DVBAdapterPIDFilter_t *filter); static int DVBDemuxStopFilter(DVBAdapter_t *adapter, DVBAdapterPIDFilter_t *filter); static void DVBDemuxStartAllFilters(DVBAdapter_t *adapter); static void DVBDemuxStopAllFilters(DVBAdapter_t *adapter); static void DVBCommandCallback(struct ev_loop *loop, ev_io *w, int revents); static void DVBFrontendCallback(struct ev_loop *loop, ev_io *w, int revents); static void DVBCommandSend(DVBAdapter_t *adapter, char cmd); static int DVBEventToString(yaml_document_t *document, Event_t event, void *payload); static int DVBPropertyActiveGet(void *userArg, PropertyValue_t *value); static int DVBPropertyActiveSet(void *userArg, PropertyValue_t *value); static int DVBPropertyDeliverySystemsGet(void *userArg, PropertyValue_t *value); static int DVBPropertyLNBHighFreqSet(void *userArg, PropertyValue_t *value); static int DVBPropertyLNBLowFreqSet(void *userArg, PropertyValue_t *value); static int DVBPropertyLNBSwitchFreqSet(void *userArg, PropertyValue_t *value); static int DVBPropertyLNBHighFreqGet(void *userArg, PropertyValue_t *value); static int DVBPropertyLNBLowFreqGet(void *userArg, PropertyValue_t *value); static int DVBPropertyLNBSwitchFreqGet(void *userArg, PropertyValue_t *value); static int DVBPropertyLNBNameGet(void *userArg, PropertyValue_t *value); static int DVBPropertyLNBNameSet(void *userArg, PropertyValue_t *value); static int DVBPropertyLNBSharingGet(void *userArg, PropertyValue_t *value); static int DVBPropertyLNBSharingSet(void *userArg, PropertyValue_t *value); static char * MapValueToString(StringToParamMapping_t *mapping, uint32_t value, char *defaultValue); static uint32_t MapStringToValue(StringToParamMapping_t *mapping, const char *str, uint32_t defaultValue); static uint32_t MapYamlNode(yaml_document_t * document, const char *key, StringToParamMapping_t *mapping, uint32_t defaultValue); static uint32_t ConvertStringToUInt32(const char *str, uint32_t defaultValue); static uint32_t ConvertYamlNode(yaml_document_t * document, const char *key, uint32_t (*convert)(const char *, uint32_t), uint32_t defaultValue); #if (DVB_API_VERSION < 5) static void ConvertYamlToFEParams(DVBDeliverySystem_e delSys, yaml_document_t *doc, struct dvb_frontend_parameters *feparams, DVBSatelliteSettings_t *satSettings); static void ConvertFEParamsToYaml(DVBDeliverySystem_e delSys, struct dvb_frontend_parameters *feparams, DVBSatelliteSettings_t *satSettings, yaml_document_t *doc); #else static uint32_t ConvertStringToBandwith(const char *str, uint32_t defaultValue); static void ConvertYamlToDTVProperties(DVBDeliverySystem_e delSys, yaml_document_t *doc, DVBAdapter_t *adapter); static void ConvertDTVPropertiesToYaml(DVBDeliverySystem_e delSys, struct dtv_properties *feparams, DVBSatelliteSettings_t *satSettings, yaml_document_t *doc); #endif /******************************************************************************* * Global variables * *******************************************************************************/ static const char DVBADAPTER[] = "DVBAdapter"; static const char propertyParent[] = "adapter"; static const char lnbPropertyParent[] = "adapter.lnb"; static EventSource_t dvbSource = NULL; static Event_t lockedEvent; static Event_t unlockedEvent; static Event_t tuningFailedEvent; static Event_t feActiveEvent; static Event_t feIdleEvent; static const char TAG_FREQUENCY[] = "Frequency"; static const char TAG_INVERSION[] = "Inversion"; static const char TAG_FEC[] = "FEC"; static const char TAG_SYMBOL_RATE[] = "Symbol Rate"; static const char TAG_MODULATION[] = "Modulation"; static const char TAG_BANDWIDTH[] = "Bandwidth"; static const char TAG_FEC_HP[] = "FEC HP"; static const char TAG_FEC_LP[] = "FEC LP"; static const char TAG_CONSTELLATION[] = "Constellation"; static const char TAG_GUARD_INTERVAL[] = "Guard Interval"; static const char TAG_TRANSMISSION_MODE[]= "Transmission Mode"; static const char TAG_HIERARCHY[] = "Hierarchy"; static const char TAG_POLARISATION[] = "Polarisation"; static const char TAG_SATELLITE_NUMBER[] = "Satellite Number"; static const char TAG_ROLL_OFF[] = "Roll Off"; static const char TAG_PILOT[] = "Pilot"; static StringToParamMapping_t modulationMapping[] = { {"QPSK", QPSK}, {"QAM16", QAM_16}, {"16QAM", QAM_16}, {"QAM32", QAM_32}, {"32QAM", QAM_32}, {"QAM64", QAM_64}, {"64QAM", QAM_64}, {"QAM128", QAM_128}, {"128QAM", QAM_128}, {"QAM256", QAM_256}, {"256QAM", QAM_256}, {"AUTO", QAM_AUTO}, {"8VSB", VSB_8}, {"16VSB", VSB_16}, #if DVB_API_VERSION >= 5 {"8PSK", PSK_8}, {"PSK8", PSK_8}, {"16APSK", APSK_16},{"APSK16", APSK_16}, {"32APSK", APSK_32},{"APSK32", APSK_32}, {"DQPSK", DQPSK}, #endif STRINGTOPARAMMAPPING_SENTINEL }; static StringToParamMapping_t inversionMapping[] = { {"OFF", INVERSION_OFF}, {"ON", INVERSION_ON}, {"AUTO", INVERSION_AUTO}, STRINGTOPARAMMAPPING_SENTINEL }; static StringToParamMapping_t fecMapping[] = { {"NONE", FEC_NONE}, {"1/2", FEC_1_2}, {"2/3", FEC_2_3}, {"3/4", FEC_3_4}, {"4/5", FEC_4_5}, {"5/6", FEC_5_6}, {"6/7", FEC_6_7}, {"7/8", FEC_7_8}, {"8/9", FEC_8_9}, {"AUTO", FEC_AUTO}, #if DVB_API_VERSION >= 5 {"3/5", FEC_3_5}, {"9/10", FEC_9_10}, #endif STRINGTOPARAMMAPPING_SENTINEL }; static StringToParamMapping_t transmissonModeMapping[] = { {"2k", TRANSMISSION_MODE_2K}, {"2000", TRANSMISSION_MODE_2K}, {"8k", TRANSMISSION_MODE_8K}, {"8000", TRANSMISSION_MODE_2K}, {"AUTO", TRANSMISSION_MODE_AUTO}, STRINGTOPARAMMAPPING_SENTINEL }; static StringToParamMapping_t bandwidthMapping[] = { {"8Mhz", BANDWIDTH_8_MHZ}, {"8000000", BANDWIDTH_8_MHZ}, {"8Mhz", BANDWIDTH_8_MHZ}, {"7Mhz", BANDWIDTH_7_MHZ}, {"7000000", BANDWIDTH_7_MHZ}, {"6Mhz", BANDWIDTH_6_MHZ}, {"6000000", BANDWIDTH_6_MHZ}, {"AUTO", BANDWIDTH_AUTO}, STRINGTOPARAMMAPPING_SENTINEL }; static StringToParamMapping_t guardIntervalMapping[] = { {"1/32", GUARD_INTERVAL_1_32}, {"1/16", GUARD_INTERVAL_1_16}, {"1/8", GUARD_INTERVAL_1_8}, {"1/4", GUARD_INTERVAL_1_4}, {"AUTO", GUARD_INTERVAL_AUTO}, STRINGTOPARAMMAPPING_SENTINEL }; static StringToParamMapping_t hierarchyMapping[] = { {"NONE", HIERARCHY_NONE}, {"1", HIERARCHY_1}, {"2", HIERARCHY_2}, {"4", HIERARCHY_4}, {"AUTO", HIERARCHY_AUTO}, STRINGTOPARAMMAPPING_SENTINEL }; static StringToParamMapping_t polarisationMapping[] = { {"Horizontal", POL_HORIZONTAL}, {"Vertical", POL_VERTICAL}, {"Left", POL_HORIZONTAL}, {"Right", POL_VERTICAL}, STRINGTOPARAMMAPPING_SENTINEL }; #if DVB_API_VERSION >= 5 static StringToParamMapping_t rollOffMapping[] = { {"0.20", ROLLOFF_20}, {"0.25", ROLLOFF_25}, {"0.35", ROLLOFF_35}, {"AUTO", ROLLOFF_AUTO}, STRINGTOPARAMMAPPING_SENTINEL }; static StringToParamMapping_t pilotMapping[] = { {"ON", PILOT_ON}, {"OFF", PILOT_OFF}, {"AUTO", PILOT_AUTO}, STRINGTOPARAMMAPPING_SENTINEL }; static struct dtv_property ClearFrontEndPropertyArray[1] = { {.cmd = DTV_CLEAR} }; static struct dtv_properties ClearFrontEndProperties = { .num = 1, .props = ClearFrontEndPropertyArray }; #endif /******************************************************************************* * Global functions * *******************************************************************************/ DVBAdapter_t *DVBInit(int adapter, bool hwRestricted, bool forceISDB) { DVBAdapter_t *result = NULL; int monitorFds[2]; struct ev_loop *inputLoop; bool lnbInput = FALSE; if (dvbSource == NULL) { dvbSource = EventsRegisterSource("DVBAdapter"); lockedEvent = EventsRegisterEvent(dvbSource, "Locked", DVBEventToString); unlockedEvent = EventsRegisterEvent(dvbSource, "Unlocked", DVBEventToString); tuningFailedEvent = EventsRegisterEvent(dvbSource, "TuneFailed", DVBEventToString); feActiveEvent = EventsRegisterEvent(dvbSource, "FrontEndActive", DVBEventToString); feIdleEvent = EventsRegisterEvent(dvbSource, "FrontEndIdle", DVBEventToString); } ObjectRegisterType(DVBAdapter_t); ObjectRegisterCollection(TOSTRING(DVBSupportedDeliverySys_t), sizeof(DVBDeliverySystem_e), NULL); result = (DVBAdapter_t*)ObjectCreateType(DVBAdapter_t); if (result) { int i; result->frontEndFd = -1; result->dvrFd = -1; result->adapter = adapter; sprintf(result->frontEndPath, "/dev/dvb/adapter%d/frontend0", adapter); sprintf(result->demuxPath, "/dev/dvb/adapter%d/demux0", adapter); sprintf(result->dvrPath, "/dev/dvb/adapter%d/dvr0", adapter); result->maxFilters = DVB_MAX_PID_FILTERS; /* Determine max number of filters */ for (i = 0; i < DVB_MAX_PID_FILTERS; i ++) { if (result->maxFilters > i) { result->filters[i].demuxFd = open(result->demuxPath, O_RDWR); if (result->filters[i].demuxFd == -1) { result->maxFilters = i; } } else { result->filters[i].demuxFd = -1; } } LogModule(LOG_INFO, DVBADAPTER, "Maximum filters = %d", result->maxFilters); for (i = 0; i < result->maxFilters; i ++) { close(result->filters[i].demuxFd); result->filters[i].demuxFd = -1; } result->frontEndFd = open(result->frontEndPath, O_RDWR); if (result->frontEndFd == -1) { LogModule(LOG_ERROR, DVBADAPTER, "Failed to open %s : %s\n",result->frontEndPath, strerror(errno)); ObjectRefDec(result); return NULL; } if (ioctl(result->frontEndFd, FE_GET_INFO, &result->info) < 0) { LogModule(LOG_ERROR, DVBADAPTER, "Failed to get front end info: %s\n",strerror(errno)); ObjectRefDec(result); return NULL; } result->currentDeliverySystem = DELSYS_MAX_SUPPORTED; LogModule(LOG_INFO, DVBADAPTER, "Caps 0x%08x", result->info.caps); if (forceISDB) { result->supportedDelSystems = (DVBSupportedDeliverySys_t*)ObjectCollectionCreate(TOSTRING(DVBSupportedDeliverySys_t),1); result->supportedDelSystems->systems[0] = DELSYS_ISDBT; result->forcedISDB = forceISDB; } else { switch (result->info.type) { case FE_QPSK: #if HAVE_FE_CAN_2G_MODULATION if (result->info.caps & FE_CAN_2G_MODULATION) { result->supportedDelSystems = (DVBSupportedDeliverySys_t*)ObjectCollectionCreate(TOSTRING(DVBSupportedDeliverySys_t),2); result->supportedDelSystems->systems[0] = DELSYS_DVBS; result->supportedDelSystems->systems[1] = DELSYS_DVBS2; } else #endif { result->supportedDelSystems = (DVBSupportedDeliverySys_t*)ObjectCollectionCreate(TOSTRING(DVBSupportedDeliverySys_t),1); result->supportedDelSystems->systems[0] = DELSYS_DVBS; } lnbInput = TRUE; break; case FE_QAM: result->supportedDelSystems = (DVBSupportedDeliverySys_t*)ObjectCollectionCreate(TOSTRING(DVBSupportedDeliverySys_t),1); result->supportedDelSystems->systems[0] = DELSYS_DVBC; break; case FE_OFDM: #if HAVE_FE_CAN_2G_MODULATION if (result->info.caps & FE_CAN_2G_MODULATION) { result->supportedDelSystems = (DVBSupportedDeliverySys_t*)ObjectCollectionCreate(TOSTRING(DVBSupportedDeliverySys_t),2); result->supportedDelSystems->systems[0] = DELSYS_DVBT; result->supportedDelSystems->systems[1] = DELSYS_DVBT2; } else #endif { result->supportedDelSystems = (DVBSupportedDeliverySys_t*)ObjectCollectionCreate(TOSTRING(DVBSupportedDeliverySys_t),1); result->supportedDelSystems->systems[0] = DELSYS_DVBT; } break; case FE_ATSC: result->supportedDelSystems = (DVBSupportedDeliverySys_t*)ObjectCollectionCreate(TOSTRING(DVBSupportedDeliverySys_t),1); result->supportedDelSystems->systems[0] = DELSYS_ATSC; break; } } result->dvrFd = open(result->dvrPath, O_RDONLY | O_NONBLOCK); if (result->dvrFd == -1) { LogModule(LOG_ERROR, DVBADAPTER, "Failed to open %s : %s\n",result->dvrPath, strerror(errno)); ObjectRefDec(result->supportedDelSystems); close(result->frontEndFd); ObjectRefDec(result); return NULL; } if (pipe(monitorFds) == -1) { LogModule(LOG_ERROR, DVBADAPTER, "Failed to create pipe : %s\n", strerror(errno)); ObjectRefDec(result->supportedDelSystems); close(result->dvrFd); close(result->frontEndFd); ObjectRefDec(result); return NULL; } result->cmdRecvFd = monitorFds[0]; result->cmdSendFd = monitorFds[1]; /* Attempt to detect if this is a PID filtering device which cannot supply the full TS */ if (!hwRestricted) { FILE *fp; char sysPath[PATH_MAX]; int speed; char text[256] = {0}; sprintf(sysPath, "/sys/class/dvb/dvb%d.demux0/device/speed", adapter); fp = fopen(sysPath, "r"); if (fp) { if (fscanf(fp, "%d", &speed)) { LogModule(LOG_INFO, DVBADAPTER, "Bus speed = %d!\n",speed); if (speed <= 12) /* USB 1.1 */ { hwRestricted = TRUE; } } fclose(fp); } sprintf(sysPath, "/sys/class/dvb/dvb%d.demux0/device/manufacturer", adapter); fp = fopen(sysPath, "r"); if (fp) { fread(text, sizeof(text) - 1,1, fp); fclose(fp); LogModule(LOG_INFO, DVBADAPTER,"Device Manufacturer: %s\n", text); } sprintf(sysPath, "/sys/class/dvb/dvb%d.demux0/device/product", adapter); fp = fopen(sysPath, "r"); if (fp) { fread(text, sizeof(text) - 1,1, fp); fclose(fp); LogModule(LOG_INFO, DVBADAPTER,"Device Product: %s\n", text); } } result->hardwareRestricted = hwRestricted; #if DVB_API_VERSION >= 5 result->frontEndProperties.props = result->frontEndPropertyArray; #endif if (hwRestricted) { LogModule(LOG_INFO, DVBADAPTER, "Running in hardware restricted mode!\n"); } /* Start monitoring thread */ inputLoop = DispatchersGetInput(); ev_io_init(&result->frontendWatcher, DVBFrontendCallback, result->frontEndFd, EV_READ); ev_io_init(&result->commandWatcher, DVBCommandCallback, result->cmdRecvFd, EV_READ); result->frontendWatcher.data = result; result->commandWatcher.data = result; ev_io_start(inputLoop, &result->frontendWatcher); ev_io_start(inputLoop, &result->commandWatcher); /* Add properties */ PropertiesAddSimpleProperty(propertyParent, "number", "The number of the adapter being used", PropertyType_Int, &result->adapter, SIMPLEPROPERTY_R); PropertiesAddSimpleProperty(propertyParent, "name", "Hardware driver name", PropertyType_String, result->info.name, SIMPLEPROPERTY_R); PropertiesAddSimpleProperty(propertyParent, "hwrestricted", "Whether the hardware is not capable of supplying the entire TS.", PropertyType_Boolean, &result->hardwareRestricted, SIMPLEPROPERTY_R); PropertiesAddSimpleProperty(propertyParent, "maxfilters", "The maximum number of PID filters available.", PropertyType_Boolean, &result->maxFilters, SIMPLEPROPERTY_R); PropertiesAddProperty(propertyParent, "systems", "The broadcast systems the frontend is capable of receiving", PropertyType_String, result, DVBPropertyDeliverySystemsGet, NULL); PropertiesAddProperty(propertyParent, "active","Whether the frontend is currently in use.", PropertyType_Boolean, result,DVBPropertyActiveGet,DVBPropertyActiveSet); if (lnbInput) { PropertiesAddProperty(propertyParent, "lnb", "LNB Name", PropertyType_String, result, DVBPropertyLNBNameGet, DVBPropertyLNBNameSet); PropertiesAddProperty(lnbPropertyParent, "sharing", "Whether this adapter is sharing an LNB so shouldn't use tone/voltage control.", PropertyType_Boolean, result, DVBPropertyLNBSharingGet,DVBPropertyLNBSharingSet); PropertiesAddProperty(lnbPropertyParent, "high", "High frequency", PropertyType_Int, result, DVBPropertyLNBHighFreqGet,DVBPropertyLNBHighFreqSet); PropertiesAddProperty(lnbPropertyParent, "low", "Low frequency", PropertyType_Int, result, DVBPropertyLNBLowFreqGet,DVBPropertyLNBLowFreqSet); PropertiesAddProperty(lnbPropertyParent, "switch", "Switch frequency", PropertyType_Int, result, DVBPropertyLNBSwitchFreqGet,DVBPropertyLNBSwitchFreqSet); } } return result; } void DVBDispose(DVBAdapter_t *adapter) { struct ev_loop *inputLoop = DispatchersGetInput(); if (adapter->dvrFd > -1) { LogModule(LOG_DEBUGV, DVBADAPTER, "Closing DVR file descriptor\n"); close(adapter->dvrFd); } LogModule(LOG_DEBUGV, DVBADAPTER, "Closing Demux file descriptors\n"); DVBDemuxReleaseAllFilters(adapter); ev_io_stop(inputLoop, &adapter->frontendWatcher); ev_io_stop(inputLoop, &adapter->commandWatcher); if (adapter->frontEndFd > -1) { LogModule(LOG_DEBUGV, DVBADAPTER, "Closing Frontend file descriptor\n"); close(adapter->frontEndFd); LogModule(LOG_DEBUGV, DVBADAPTER, "Closed Frontend file descriptor\n"); adapter->frontEndFd = -1; } close(adapter->cmdRecvFd); close(adapter->cmdSendFd); PropertiesRemoveAllProperties(propertyParent); ObjectRefDec(adapter->supportedDelSystems); ObjectRefDec(adapter); } DVBSupportedDeliverySys_t *DVBFrontEndGetDeliverySystems(DVBAdapter_t *adapter) { return adapter->supportedDelSystems; } bool DVBFrontEndDeliverySystemSupported(DVBAdapter_t * adapter,DVBDeliverySystem_e system) { int i; for (i = 0; i < adapter->supportedDelSystems->nrofSystems; i ++) { if (adapter->supportedDelSystems->systems[i] == system) { return TRUE; } } return FALSE; } int DVBFrontEndTune(DVBAdapter_t *adapter, DVBDeliverySystem_e system, char *params) { yaml_document_t document; memset(&document, 0, sizeof(document)); if (YamlUtils_Parse(params, &document)) { adapter->currentDeliverySystem = system; #if (DVB_API_VERSION < 5) ConvertYamlToFEParams(system, &document, &adapter->frontEndParams, &adapter->satelliteSettings); adapter->frontEndRequestedFreq = adapter->frontEndParams.frequency; #else ConvertYamlToDTVProperties(system, &document, adapter); #endif yaml_document_delete(&document); adapter->tuning = TRUE; DVBCommandSend(adapter, DVB_CMD_TUNE); } return 0; } char* DVBFrontEndParametersGet(DVBAdapter_t *adapter, DVBDeliverySystem_e *system) { char *output; yaml_document_t document; yaml_document_initialize(&document, NULL, NULL, NULL, 0, 0); yaml_document_add_mapping(&document, (yaml_char_t*)YAML_MAP_TAG, YAML_ANY_MAPPING_STYLE); #if (DVB_API_VERSION < 5) { struct dvb_frontend_parameters feparams = adapter->frontEndParams; feparams.frequency = adapter->frontEndRequestedFreq; ConvertFEParamsToYaml(adapter->currentDeliverySystem, &feparams, &adapter->satelliteSettings, &document); } #else { struct dtv_property props[DTV_IOCTL_MAX_MSGS]; struct dtv_properties properties; properties.props = props; properties.num = adapter->frontEndProperties.num; memcpy(props, &adapter->frontEndPropertyArray, sizeof(struct dtv_property) * properties.num); props[PROP_IDX_FREQ].u.data = adapter->frontEndRequestedFreq; ConvertDTVPropertiesToYaml(adapter->currentDeliverySystem, &properties, &adapter->satelliteSettings, &document); } #endif *system = adapter->currentDeliverySystem; YamlUtils_DocumentToString(&document, TRUE, &output); return output; } bool DVBFrontEndParameterSupported(DVBAdapter_t *adapter, DVBDeliverySystem_e system, char *param, char *value) { char *AUTO = "AUTO"; if (DVBFrontEndDeliverySystemSupported(adapter, system)) { if (strcmp(param, "Inversion") == 0) { if (strcasecmp(value, AUTO) == 0) { return adapter->info.caps & FE_CAN_INVERSION_AUTO; } if ((strcasecmp(value, "ON") == 0) || (strcasecmp(value, "OFF") == 0)) { return TRUE; } } else if ((strcmp(param, "FEC") == 0) || (strcmp(param, "FEC HP") == 0) || (strcmp(param, "FEC LP") == 0)) { if (strcasecmp(value, AUTO) == 0) { return adapter->info.caps & FE_CAN_FEC_AUTO; } if (strcmp(value, "1/2") == 0) { return adapter->info.caps & FE_CAN_FEC_1_2; } if (strcmp(value, "2/3") == 0) { return adapter->info.caps & FE_CAN_FEC_2_3; } if (strcmp(value, "3/4") == 0) { return adapter->info.caps & FE_CAN_FEC_3_4; } if (strcmp(value, "4/5") == 0) { return adapter->info.caps & FE_CAN_FEC_4_5; } if (strcmp(value, "5/6") == 0) { return adapter->info.caps & FE_CAN_FEC_5_6; } if (strcmp(value, "6/7") == 0) { return adapter->info.caps & FE_CAN_FEC_6_7; } if (strcmp(value, "7/8") == 0) { return adapter->info.caps & FE_CAN_FEC_7_8; } if (strcmp(value, "8/9") == 0) { return adapter->info.caps & FE_CAN_FEC_8_9; } } else if (strcmp(param, "Guard Interval") == 0) { if (strcmp(value, AUTO) == 0) { return adapter->info.caps & FE_CAN_GUARD_INTERVAL_AUTO; } if ((strcmp(value, "1/32") == 0) || (strcmp(value, "1/16") == 0) || (strcmp(value, "1/8") == 0) || (strcmp(value, "1/4") == 0)) { return TRUE; } } else if (strcmp(param, "Transmission Mode") == 0) { if (strcmp(value, AUTO) == 0) { return adapter->info.caps & FE_CAN_TRANSMISSION_MODE_AUTO; } if ((strcmp(value, "4000") == 0) || (strcmp(value, "2000") == 0)) { return TRUE; } } else if (strcmp(param, "Bandwidth") == 0) { if (strcasecmp(value, AUTO) == 0) { return adapter->info.caps & FE_CAN_BANDWIDTH_AUTO; } return TRUE; } else if (strcmp(param, "Hierarchy") == 0) { if (strcasecmp(value, AUTO) == 0) { return adapter->info.caps & FE_CAN_HIERARCHY_AUTO; } if ((strcasecmp(value, "NONE") == 0) || (strcmp(value, "1") == 0) || (strcmp(value, "2") == 0) || (strcmp(value, "4") == 0)) { return TRUE; } return TRUE; } else if ((strcmp(param, "Modulation") == 0) || (strcmp(param, "Constellation") == 0)) { if (strcasecmp(value, "QPSK") == 0) { return adapter->info.caps & FE_CAN_QPSK; } if ((strcasecmp(value, "16QAM") == 0) || (strcasecmp(value, "QAM16") == 0)) { return adapter->info.caps & FE_CAN_QAM_16; } if ((strcasecmp(value, "32QAM") == 0) || (strcasecmp(value, "QAM32") == 0)) { return adapter->info.caps & FE_CAN_QAM_32; } if ((strcasecmp(value, "64QAM") == 0) || (strcasecmp(value, "QAM64") == 0)) { return adapter->info.caps & FE_CAN_QAM_64; } if ((strcasecmp(value, "128QAM") == 0) || (strcasecmp(value, "QAM128") == 0)) { return adapter->info.caps & FE_CAN_QAM_128; } if ((strcasecmp(value, "256QAM") == 0) || (strcasecmp(value, "QAM256") == 0)) { return adapter->info.caps & FE_CAN_QAM_256; } if (strcasecmp(value, "AUTO") == 0) { return adapter->info.caps & FE_CAN_QAM_AUTO; } if (strcasecmp(value, "8VSB") == 0) { return adapter->info.caps & FE_CAN_8VSB; } if (strcasecmp(value, "16VSB") == 0) { return adapter->info.caps & FE_CAN_16VSB; } } } return FALSE; } void DVBFrontEndLNBInfoSet(DVBAdapter_t *adapter, LNBInfo_t *lnbInfo) { adapter->lnbInfo = *lnbInfo; } void DVBFrontEndLNBInfoGet(DVBAdapter_t *adapter, LNBInfo_t *lnbInfo) { *lnbInfo = adapter->lnbInfo; } static int DVBFrontEndSatelliteSetup(DVBAdapter_t *adapter) { bool tone = FALSE; struct dvb_diseqc_master_cmd cmd = {{0xe0, 0x10, 0x38, 0xf0, 0x00, 0x00}, 4}; #define CHECK_IFREQ(_freq) \ do{\ if (((_freq) < adapter->info.frequency_min) || ((_freq) > adapter->info.frequency_max))\ {\ LogModule(LOG_ERROR, DVBADAPTER, "IFreq (%lu) outside of adapters range (%lu ... %lu), wrong LNB settings?", (_freq), adapter->info.frequency_min, adapter->info.frequency_max); \ }\ }\ while(0) #if (DVB_API_VERSION < 5) adapter->frontEndParams.frequency = LNBTransponderToIntermediateFreq(&adapter->lnbInfo, adapter->frontEndParams.frequency, &tone); CHECK_IFREQ(adapter->frontEndParams.frequency); #else adapter->frontEndPropertyArray[PROP_IDX_FREQ].u.data = LNBTransponderToIntermediateFreq(&adapter->lnbInfo, adapter->frontEndPropertyArray[PROP_IDX_FREQ].u.data, &tone); CHECK_IFREQ(adapter->frontEndPropertyArray[PROP_IDX_FREQ].u.data); #endif if (!adapter->lnbSharing) { cmd.msg[3] = 0xf0 | ((adapter->satelliteSettings.satellite_number* 4) & 0x0f) | (tone ? 1 : 0) | (adapter->satelliteSettings.polarisation? 0 : 2); if (ioctl(adapter->frontEndFd, FE_SET_TONE, SEC_TONE_OFF) < 0) { return -1; } usleep(15000); if (ioctl(adapter->frontEndFd, FE_SET_VOLTAGE, adapter->satelliteSettings.polarisation ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18) < 0) { return -1; } usleep(15000); if (ioctl(adapter->frontEndFd, FE_DISEQC_SEND_MASTER_CMD, &cmd) < 0) { return -1; } usleep(15000); if (ioctl(adapter->frontEndFd, FE_DISEQC_SEND_BURST, adapter->satelliteSettings.satellite_number % 2 ? SEC_MINI_B : SEC_MINI_A) < 0) { return -1; } usleep(15000); if (ioctl(adapter->frontEndFd, FE_SET_TONE, tone ? SEC_TONE_ON : SEC_TONE_OFF) < 0) { return -1; } usleep(15000); } return 0; } int DVBFrontEndStatus(DVBAdapter_t *adapter, DVBFrontEndStatus_e *status, unsigned int *ber, unsigned int *strength, unsigned int *snr, unsigned int *ucblock) { uint32_t tempU32; uint16_t tempU16; if (status) { if (ioctl(adapter->frontEndFd, FE_READ_STATUS, (fe_status_t*)status) < 0) { LogModule(LOG_ERROR, DVBADAPTER,"FE_READ_STATUS: %s\n", strerror(errno)); return -1; } } if (ber) { if(ioctl(adapter->frontEndFd,FE_READ_BER, &tempU32) < 0) { LogModule(LOG_INFO, DVBADAPTER,"FE_READ_BER: %s\n", strerror(errno)); *ber = 0xffffffff; } else { *ber = tempU32; } } if (strength) { if(ioctl(adapter->frontEndFd,FE_READ_SIGNAL_STRENGTH,&tempU16) < 0) { LogModule(LOG_INFO, DVBADAPTER,"FE_READ_SIGNAL_STRENGTH: %s\n", strerror(errno)); *strength = 0xffff; } else { *strength = tempU16; } } if (snr) { if(ioctl(adapter->frontEndFd,FE_READ_SNR,&tempU16) < 0) { LogModule(LOG_INFO, DVBADAPTER,"FE_READ_SNR: %s\n", strerror(errno)); *snr = 0xffff; } else { *snr = tempU16; } } if (ucblock) { if(ioctl(adapter->frontEndFd,FE_READ_UNCORRECTED_BLOCKS,&tempU32) < 0) { LogModule(LOG_INFO, DVBADAPTER,"FE_READ_UNCORRECTED_BLOCKS: %s\n", strerror(errno)); *ucblock = 0xffffffff; } else { *ucblock = tempU32; } } return 0; } bool DVBFrontEndIsLocked(DVBAdapter_t *adapter) { return adapter->frontEndLocked; } int DVBFrontEndSetActive(DVBAdapter_t *adapter, bool active) { DVBCommandSend(adapter, active ? DVB_CMD_FE_ACTIVE:DVB_CMD_FE_INACTIVE); return 0; } int DVBDemuxSetBufferSize(DVBAdapter_t *adapter, unsigned long size) { int i; for (i = 0; i < adapter->maxFilters; i++) { int demuxFd = adapter->filters[0].demuxFd; if (demuxFd == -1) { continue; } if (ioctl(demuxFd, DMX_STOP, 0)< 0) { LogModule(LOG_ERROR, DVBADAPTER,"DMX_STOP: %s\n", strerror(errno)); return -1; } if (ioctl(demuxFd, DMX_SET_BUFFER_SIZE, size) < 0) { LogModule(LOG_ERROR, DVBADAPTER,"DMX_SET_BUFFER_SIZE: %s\n", strerror(errno)); return -1; } if (ioctl(demuxFd, DMX_START, 0)< 0) { LogModule(LOG_ERROR, DVBADAPTER,"DMX_STOP: %s\n", strerror(errno)); return -1; } } return 0; } int DVBDemuxGetMaxFilters(DVBAdapter_t *adapter) { return adapter->maxFilters; } int DVBDemuxGetAvailableFilters(DVBAdapter_t *adapter) { int count = 0; int i; for (i = 0; i < adapter->maxFilters; i ++) { if (adapter->filters[i].demuxFd == -1) { count ++; } } return count; } bool DVBDemuxIsHardwareRestricted(DVBAdapter_t *adapter) { return adapter->hardwareRestricted; } int DVBDemuxAllocateFilter(DVBAdapter_t *adapter, uint16_t pid) { int result = -1; int i; int idxToUse = -1; for (i = 0; i < adapter->maxFilters; i ++) { if (adapter->filters[i].demuxFd == -1) { idxToUse = i; } else { if (adapter->filters[i].pid == pid) { /* Already streaming this PID */ idxToUse = -1; result = 0; break; } } } if (idxToUse != -1) { LogModule(LOG_DEBUG, DVBADAPTER, "Allocation filter for pid 0x%x\n", pid); adapter->filters[idxToUse].demuxFd = open(adapter->demuxPath, O_RDWR); if (adapter->filters[idxToUse].demuxFd == -1) { LogModule(LOG_ERROR, DVBADAPTER, "Failed to open %s : %s when attempting to allocate filter for PID 0x%x\n", adapter->demuxPath, strerror(errno), pid); } else { struct dmx_pes_filter_params pesFilterParam; LogModule(LOG_DEBUG, DVBADAPTER, "Filter fd %d\n", adapter->filters[idxToUse].demuxFd); adapter->filters[idxToUse].pid = pid; pesFilterParam.pid = pid; pesFilterParam.input = DMX_IN_FRONTEND; pesFilterParam.output = DMX_OUT_TS_TAP; pesFilterParam.pes_type = DMX_PES_OTHER; if (adapter->frontEndLocked && !adapter->tuning) { LogModule(LOG_DEBUG, DVBADAPTER, "Starting pid filter immediately!\n"); pesFilterParam.flags = DMX_IMMEDIATE_START; } else { pesFilterParam.flags = 0; } if (ioctl(adapter->filters[idxToUse].demuxFd , DMX_SET_PES_FILTER, &pesFilterParam) < 0) { LogModule(LOG_ERROR, DVBADAPTER,"set_pid: %s\n", strerror(errno)); } else { result = 0; } } } return result; } int DVBDemuxReleaseFilter(DVBAdapter_t *adapter, uint16_t pid) { int result = -1; if (adapter->hardwareRestricted || (pid == 8192)) { int i; for (i = 0; i < adapter->maxFilters; i ++) { if ((adapter->filters[i].demuxFd != -1) && (adapter->filters[i].pid == pid)) { LogModule(LOG_DEBUG, DVBADAPTER, "Releasing filter for pid 0x%x fd %d\n",pid, adapter->filters[i].demuxFd); close(adapter->filters[i].demuxFd); adapter->filters[i].demuxFd = -1; result = 0; break; } } } return result; } int DVBDemuxReleaseAllFilters(DVBAdapter_t *adapter) { int result = -1; int i; LogModule(LOG_DEBUG, DVBADAPTER, "Releasing all filters"); for (i = 0; i < adapter->maxFilters; i ++) { if (adapter->filters[i].demuxFd != -1) { close(adapter->filters[i].demuxFd); adapter->filters[i].demuxFd = -1; result = 0; } } return result; } static int DVBDemuxStartFilter(DVBAdapter_t *adapter, DVBAdapterPIDFilter_t *filter) { int result = 0; (void)adapter; LogModule(LOG_DEBUG, DVBADAPTER, "Starting filter %d\n", filter->pid); if (ioctl(filter->demuxFd , DMX_START, NULL) < 0) { LogModule(LOG_ERROR, DVBADAPTER,"filter(fd %d) start: %s\n", filter->demuxFd, strerror(errno)); result = -1; } return result; } static int DVBDemuxStopFilter(DVBAdapter_t *adapter, DVBAdapterPIDFilter_t *filter) { int result = 0; (void)adapter; LogModule(LOG_DEBUG, DVBADAPTER, "Stopping filter %d\n", filter->pid); if (ioctl(filter->demuxFd , DMX_STOP, NULL) < 0) { LogModule(LOG_ERROR, DVBADAPTER,"filter(fd %d) stop: %s\n", filter->demuxFd, strerror(errno)); result = -1; } return result; } static void DVBDemuxStartAllFilters(DVBAdapter_t *adapter) { int i = 0; for (i = 0; i < adapter->maxFilters; i ++) { if (adapter->filters[i].demuxFd != -1) { DVBDemuxStartFilter(adapter, &adapter->filters[i]); } } } static void DVBDemuxStopAllFilters(DVBAdapter_t *adapter) { int i = 0; for (i = 0; i < adapter->maxFilters; i ++) { if (adapter->filters[i].demuxFd != -1) { DVBDemuxStopFilter(adapter, &adapter->filters[i]); } } } int DVBDVRGetFD(DVBAdapter_t *adapter) { return adapter->dvrFd; } static void DVBCommandSend(DVBAdapter_t *adapter, char cmd) { if (write(adapter->cmdSendFd, &cmd, 1) != 1) { LogModule(LOG_ERROR, DVBADAPTER, "Failed to write to monitor pipe!"); } } static void DVBCommandCallback(struct ev_loop *loop, ev_io *w, int revents) { DVBAdapter_t *adapter = w->data; char cmd; bool retune = FALSE; ev_io_start(loop, w); if (read(adapter->cmdRecvFd, &cmd, 1) == 1) { switch (cmd) { case DVB_CMD_TUNE: DVBDemuxStopAllFilters(adapter); retune = TRUE; break; case DVB_CMD_FE_ACTIVE: if (adapter->frontEndFd == -1) { retune = TRUE; /* Open frontend */ adapter->frontEndFd = open(adapter->frontEndPath, O_RDWR); if (adapter->frontEndFd == -1) { LogModule(LOG_ERROR, DVBADAPTER, "Failed to open %s : %s\n", adapter->frontEndPath, strerror(errno)); return; } /* Fire frontend active event */ EventsFireEventListeners(feActiveEvent, adapter); ev_io_set(&adapter->frontendWatcher, adapter->frontEndFd, EV_READ); ev_io_start(loop, &adapter->frontendWatcher); } break; case DVB_CMD_FE_INACTIVE: if (adapter->frontEndFd != -1) { ev_io_stop(loop, &adapter->frontendWatcher); /* Stop all filters */ DVBDemuxStopAllFilters(adapter); /* Close frontend */ close(adapter->frontEndFd); adapter->frontEndFd = -1; /* Fire frontend idle event */ EventsFireEventListeners(feIdleEvent, adapter); } break; } if (retune && (adapter->frontEndFd != -1)) { adapter->tuning = TRUE; if (adapter->forcedISDB) { adapter->isdbFEParams.frequency = adapter->frontEndRequestedFreq; LogModule(LOG_DEBUG, DVBADAPTER, "ISDB Tuning to %d", adapter->frontEndRequestedFreq); if (ioctl(adapter->frontEndFd, FE_SET_FRONTEND, &adapter->isdbFEParams) < 0) { LogModule(LOG_ERROR, DVBADAPTER, "FE_SET_FRONTEND: %s\n", strerror(errno)); } } else { #if (DVB_API_VERSION < 5) adapter->frontEndParams.frequency = adapter->frontEndRequestedFreq; #else adapter->frontEndPropertyArray[PROP_IDX_FREQ].u.data = adapter->frontEndRequestedFreq; if (ioctl(adapter->frontEndFd, FE_SET_PROPERTY, &ClearFrontEndProperties) < 0) { LogModule(LOG_ERROR, DVBADAPTER, "Clear FE_SET_PROPERTY: %s\n", strerror(errno)); } #endif LogModule(LOG_DEBUG, DVBADAPTER, "Tuning to %d", adapter->frontEndRequestedFreq); if ((adapter->currentDeliverySystem == DELSYS_DVBS) || (adapter->currentDeliverySystem == DELSYS_DVBS2)) { DVBFrontEndSatelliteSetup(adapter); } #if (DVB_API_VERSION < 5) if (ioctl(adapter->frontEndFd, FE_SET_FRONTEND, &adapter->frontEndParams) < 0) { LogModule(LOG_ERROR, DVBADAPTER, "FE_SET_FRONTEND: %s\n", strerror(errno)); } #else if (ioctl(adapter->frontEndFd, FE_SET_PROPERTY, &adapter->frontEndProperties) < 0) { LogModule(LOG_ERROR, DVBADAPTER, "Tune FE_SET_PROPERTY: %s\n", strerror(errno)); } #endif } } } } static void DVBFrontendCallback(struct ev_loop *loop, ev_io *w, int revents) { DVBAdapter_t *adapter = w->data; struct dvb_frontend_event event; bool feLocked = adapter->frontEndLocked; ev_io_start(loop, w); if (ioctl(adapter->frontEndFd, FE_GET_EVENT, &event) == 0) { if (event.status & FE_HAS_LOCK) { feLocked = TRUE; } else { feLocked = FALSE; } if (feLocked != adapter->frontEndLocked) { adapter->frontEndLocked = feLocked; if (adapter->frontEndLocked) { adapter->tuning = FALSE; DVBDemuxStartAllFilters(adapter); #if (DVB_API_VERSION < 5) adapter->frontEndParams = event.parameters; #else adapter->frontEndProperties.num --; /* Remove the tune command at the end of the array */ errno = 0; if (ioctl(adapter->frontEndFd, FE_GET_PROPERTY, &adapter->frontEndProperties)) { LogModule(LOG_ERROR, DVBADAPTER, "FE_GET_PROPERTY: %s\n", strerror(errno)); } adapter->frontEndProperties.num ++; /* Put back the tune command at the end of the array */ #endif EventsFireEventListeners(lockedEvent, adapter); } else { DVBDemuxStopAllFilters(adapter); EventsFireEventListeners(unlockedEvent, adapter); } } if (event.parameters.frequency <= 0) { EventsFireEventListeners(tuningFailedEvent, adapter); } } } static int DVBEventToString(yaml_document_t *document, Event_t event, void *payload) { DVBAdapter_t *adapter = payload; char adapterStr[4]; int mappingId = yaml_document_add_mapping(document, (yaml_char_t*)YAML_MAP_TAG, YAML_ANY_MAPPING_STYLE); sprintf(adapterStr, "%d", adapter->adapter); YamlUtils_MappingAdd(document, mappingId, "Adapter", adapterStr); return mappingId; } static int DVBPropertyActiveGet(void *userArg, PropertyValue_t *value) { DVBAdapter_t *adapter = userArg; value->u.boolean = adapter->frontEndFd != -1; return 0; } static int DVBPropertyActiveSet(void *userArg, PropertyValue_t *value) { DVBAdapter_t *adapter = userArg; return DVBFrontEndSetActive(adapter,value->u.boolean); } static int DVBPropertyDeliverySystemsGet(void *userArg, PropertyValue_t *value) { DVBAdapter_t *adapter = userArg; int i; int size = 0; for (i = 0; i < adapter->supportedDelSystems->nrofSystems; i ++) { size += 2 + strlen(DVBDeliverySystemStr[adapter->supportedDelSystems->systems[i]]) + 1; } value->u.string = malloc(size + 1); value->u.string[0] = 0; for (i = 0; i < adapter->supportedDelSystems->nrofSystems; i ++) { sprintf(value->u.string + strlen(value->u.string), "- %s\n", DVBDeliverySystemStr[adapter->supportedDelSystems->systems[i]]); } return 0; } static int DVBPropertyLNBHighFreqSet(void *userArg, PropertyValue_t *value) { DVBAdapter_t *adapter = userArg; adapter->lnbInfo.name = NULL; adapter->lnbInfo.highFrequency = value->u.integer; return 0; } static int DVBPropertyLNBLowFreqSet(void *userArg, PropertyValue_t *value) { DVBAdapter_t *adapter = userArg; adapter->lnbInfo.name = NULL; adapter->lnbInfo.lowFrequency = value->u.integer; return 0; } static int DVBPropertyLNBSwitchFreqSet(void *userArg, PropertyValue_t *value) { DVBAdapter_t *adapter = userArg; adapter->lnbInfo.name = NULL; adapter->lnbInfo.switchFrequency = value->u.integer; return 0; } static int DVBPropertyLNBHighFreqGet(void *userArg, PropertyValue_t *value) { DVBAdapter_t *adapter = userArg; value->u.integer = adapter->lnbInfo.highFrequency; return 0; } static int DVBPropertyLNBLowFreqGet(void *userArg, PropertyValue_t *value) { DVBAdapter_t *adapter = userArg; value->u.integer = adapter->lnbInfo.lowFrequency; return 0; } static int DVBPropertyLNBSwitchFreqGet(void *userArg, PropertyValue_t *value) { DVBAdapter_t *adapter = userArg; value->u.integer = adapter->lnbInfo.switchFrequency; return 0; } static int DVBPropertyLNBNameGet(void *userArg, PropertyValue_t *value) { DVBAdapter_t *adapter = userArg; if (adapter->lnbInfo.name) { value->u.string = strdup(adapter->lnbInfo.name); } else { value->u.string = strdup("User Defined"); } return 0; } static int DVBPropertyLNBNameSet(void *userArg, PropertyValue_t *value) { DVBAdapter_t *adapter = userArg; LNBInfo_t newInfo; if (LNBDecode(value->u.string, &newInfo)) { return -1; } adapter->lnbInfo = newInfo; return 0; } static int DVBPropertyLNBSharingGet(void *userArg, PropertyValue_t *value) { DVBAdapter_t *adapter = userArg; value->u.boolean = adapter->lnbSharing; return 0; } static int DVBPropertyLNBSharingSet(void *userArg, PropertyValue_t *value) { DVBAdapter_t *adapter = userArg; adapter->lnbSharing = value->u.boolean; if (adapter->lnbSharing) { if (ioctl(adapter->frontEndFd, FE_SET_TONE, SEC_TONE_OFF) < 0) { LogModule(LOG_ERROR, DVBADAPTER, "Failed to set tone off"); } if (ioctl(adapter->frontEndFd, FE_SET_VOLTAGE, SEC_VOLTAGE_OFF) < 0) { LogModule(LOG_ERROR, DVBADAPTER, "Failed to set voltage off"); } } return 0; } static char * MapValueToString(StringToParamMapping_t *mapping, uint32_t value, char *defaultValue) { int i; for (i = 0; mapping[i].str; i ++) { if (mapping[i].param == value) { return mapping[i].str; } } return defaultValue; } static uint32_t MapStringToValue(StringToParamMapping_t *mapping, const char *str, uint32_t defaultValue) { int i; for (i = 0; mapping[i].str; i ++) { if (strcasecmp(mapping[i].str, str) == 0) { return mapping[i].param; } } return defaultValue; } static uint32_t MapYamlNode(yaml_document_t * document, const char *key, StringToParamMapping_t *mapping, uint32_t defaultValue) { yaml_node_t *node = YamlUtils_RootMappingFind(document, key); if (node && (node->type == YAML_SCALAR_NODE)) { return MapStringToValue(mapping, (const char*)node->data.scalar.value, defaultValue); } return defaultValue; } static uint32_t ConvertStringToUInt32(const char *str, uint32_t defaultValue) { char *suffix; uint32_t result = strtoul(str, &suffix, 10); if (suffix == str) { result = defaultValue; } return result; } static uint32_t ConvertYamlNode(yaml_document_t * document, const char *key, uint32_t (*convert)(const char *, uint32_t), uint32_t defaultValue) { yaml_node_t *node = YamlUtils_RootMappingFind(document, key); if (node && (node->type == YAML_SCALAR_NODE)) { return convert((const char*)node->data.scalar.value, defaultValue); } return defaultValue; } #if (DVB_API_VERSION < 5) static void ConvertYamlToFEParams(DVBDeliverySystem_e delSys, yaml_document_t *doc, struct dvb_frontend_parameters *feparams, DVBSatelliteSettings_t *satSettings) { feparams->frequency = ConvertYamlNode(doc, TAG_FREQUENCY, ConvertStringToUInt32, 0); feparams->inversion = MapYamlNode(doc, TAG_INVERSION, inversionMapping, INVERSION_AUTO); switch (delSys) { case DELSYS_DVBS: feparams->u.qpsk.fec_inner = MapYamlNode(doc, TAG_FEC, fecMapping, FEC_AUTO); feparams->u.qpsk.symbol_rate = ConvertYamlNode(doc, TAG_SYMBOL_RATE, ConvertStringToUInt32, 0); satSettings->polarisation = MapYamlNode(doc, TAG_POLARISATION, polarisationMapping, POL_HORIZONTAL); satSettings->satellite_number = ConvertYamlNode(doc, TAG_SATELLITE_NUMBER, ConvertStringToUInt32, 0); break; case DELSYS_DVBC: feparams->u.qam.fec_inner = MapYamlNode(doc, TAG_FEC, fecMapping, FEC_AUTO); feparams->u.qam.symbol_rate = ConvertYamlNode(doc, TAG_SYMBOL_RATE, ConvertStringToUInt32, 0); feparams->u.qam.modulation = MapYamlNode(doc, TAG_MODULATION, modulationMapping, QAM_AUTO); break; case DELSYS_DVBT: feparams->u.ofdm.bandwidth = MapYamlNode(doc, TAG_BANDWIDTH, bandwidthMapping, BANDWIDTH_AUTO); feparams->u.ofdm.code_rate_HP = MapYamlNode(doc, TAG_FEC_HP, fecMapping, FEC_AUTO); feparams->u.ofdm.code_rate_LP = MapYamlNode(doc, TAG_FEC_LP, fecMapping, FEC_AUTO); feparams->u.ofdm.constellation = MapYamlNode(doc, TAG_CONSTELLATION, modulationMapping, QAM_AUTO); feparams->u.ofdm.guard_interval = MapYamlNode(doc,TAG_GUARD_INTERVAL, guardIntervalMapping, GUARD_INTERVAL_AUTO); feparams->u.ofdm.transmission_mode = MapYamlNode(doc, TAG_TRANSMISSION_MODE, transmissonModeMapping, TRANSMISSION_MODE_AUTO); feparams->u.ofdm.hierarchy_information = MapYamlNode(doc, TAG_HIERARCHY, hierarchyMapping, HIERARCHY_AUTO); break; case DELSYS_ATSC: feparams->u.vsb.modulation = MapYamlNode(doc, TAG_MODULATION, modulationMapping, QAM_AUTO); break; default: break; } } static void ConvertFEParamsToYaml(DVBDeliverySystem_e delSys, struct dvb_frontend_parameters *feparams, DVBSatelliteSettings_t *satSettings, yaml_document_t *doc) { char temp[25]; sprintf(temp, "%u", feparams->frequency); YamlUtils_MappingAdd(doc, 1, TAG_FREQUENCY, temp); YamlUtils_MappingAdd(doc, 1, TAG_INVERSION, MapValueToString(inversionMapping, feparams->inversion, "AUTO")); switch (delSys) { case DELSYS_DVBS: YamlUtils_MappingAdd(doc, 1, TAG_FEC, MapValueToString(fecMapping, feparams->u.qpsk.fec_inner, "AUTO")); sprintf(temp, "%u", feparams->u.qpsk.symbol_rate); YamlUtils_MappingAdd(doc, 1, TAG_SYMBOL_RATE, temp); YamlUtils_MappingAdd(doc, 1, TAG_POLARISATION, MapValueToString(polarisationMapping, satSettings->polarisation, "Horizontal")); sprintf(temp, "%u", satSettings->satellite_number); YamlUtils_MappingAdd(doc, 1, TAG_SATELLITE_NUMBER, temp); break; case DELSYS_DVBC: YamlUtils_MappingAdd(doc, 1, TAG_FEC, MapValueToString(fecMapping, feparams->u.qam.fec_inner, "AUTO")); sprintf(temp, "%u", feparams->u.qam.symbol_rate); YamlUtils_MappingAdd(doc, 1, TAG_SYMBOL_RATE, temp); YamlUtils_MappingAdd(doc, 1, TAG_MODULATION, MapValueToString(modulationMapping, feparams->u.qam.modulation, "AUTO")); break; case DELSYS_DVBT: YamlUtils_MappingAdd(doc, 1, TAG_BANDWIDTH, MapValueToString(bandwidthMapping, feparams->u.ofdm.bandwidth, "AUTO")); YamlUtils_MappingAdd(doc, 1, TAG_FEC_HP, MapValueToString(fecMapping, feparams->u.ofdm.code_rate_HP, "AUTO")); YamlUtils_MappingAdd(doc, 1, TAG_FEC_LP, MapValueToString(fecMapping, feparams->u.ofdm.code_rate_LP, "AUTO")); YamlUtils_MappingAdd(doc, 1, TAG_CONSTELLATION, MapValueToString(modulationMapping, feparams->u.ofdm.constellation, "AUTO")); YamlUtils_MappingAdd(doc, 1, TAG_GUARD_INTERVAL,MapValueToString(guardIntervalMapping, feparams->u.ofdm.guard_interval, "AUTO")); YamlUtils_MappingAdd(doc, 1, TAG_TRANSMISSION_MODE, MapValueToString(transmissonModeMapping, feparams->u.ofdm.transmission_mode, "AUTO")); YamlUtils_MappingAdd(doc, 1, TAG_HIERARCHY, MapValueToString(hierarchyMapping, feparams->u.ofdm.hierarchy_information, "AUTO")); break; case DELSYS_ATSC: YamlUtils_MappingAdd(doc, 1, TAG_MODULATION, MapValueToString(modulationMapping, feparams->u.vsb.modulation, "AUTO")); break; default: break; } } #else static uint32_t ConvertStringToBandwith(const char *str, uint32_t defaultValue) { char *suffix; uint32_t result = strtoul(str, &suffix, 10); if (suffix == str) { result = defaultValue; } else if (*suffix) { if (strcasecmp(suffix, "Mhz") == 0) { result *= 1000000; } else { result = defaultValue; } } return result; } static void ConvertYamlToDTVProperties(DVBDeliverySystem_e delSys, yaml_document_t *doc, DVBAdapter_t *adapter) { #define SET_U32_PROPERTY(_idx, _cmd, _value) \ do{\ adapter->frontEndPropertyArray[_idx].cmd = _cmd;\ adapter->frontEndPropertyArray[_idx].u.data = _value;\ }while(0) adapter->frontEndRequestedFreq = ConvertYamlNode(doc, TAG_FREQUENCY, ConvertStringToUInt32, 0); SET_U32_PROPERTY(PROP_IDX_FREQ, DTV_FREQUENCY, adapter->frontEndRequestedFreq); SET_U32_PROPERTY(PROP_IDX_INVERSION, DTV_INVERSION, MapYamlNode(doc, TAG_INVERSION, inversionMapping, INVERSION_AUTO)); switch (delSys) { case DELSYS_DVBS: SET_U32_PROPERTY(PROP_IDX_DELSYS, DTV_DELIVERY_SYSTEM, SYS_DVBS); SET_U32_PROPERTY(PROP_IDX_DVBS_FEC, DTV_INNER_FEC, MapYamlNode(doc, TAG_FEC, fecMapping, FEC_AUTO)); SET_U32_PROPERTY(PROP_IDX_DVBS_SYMBOL_RATE, DTV_SYMBOL_RATE, ConvertYamlNode(doc, TAG_SYMBOL_RATE, ConvertStringToUInt32, 0)); adapter->frontEndProperties.num = PROP_COUNT_DVBS; adapter->satelliteSettings.polarisation = MapYamlNode(doc, TAG_POLARISATION, polarisationMapping, POL_HORIZONTAL); adapter->satelliteSettings.satellite_number = ConvertYamlNode(doc, TAG_SATELLITE_NUMBER, ConvertStringToUInt32, 0); break; case DELSYS_DVBS2: SET_U32_PROPERTY(PROP_IDX_DELSYS, DTV_DELIVERY_SYSTEM, SYS_DVBS2); SET_U32_PROPERTY(PROP_IDX_DVBS2_MODULATION, DTV_MODULATION, MapYamlNode(doc, TAG_MODULATION, modulationMapping, QPSK)); SET_U32_PROPERTY(PROP_IDX_DVBS2_FEC, DTV_INNER_FEC, MapYamlNode(doc, TAG_FEC, fecMapping, FEC_AUTO)); SET_U32_PROPERTY(PROP_IDX_DVBS2_SYMBOL_RATE, DTV_SYMBOL_RATE,ConvertYamlNode(doc, TAG_SYMBOL_RATE, ConvertStringToUInt32, 0)); SET_U32_PROPERTY(PROP_IDX_DVBS2_PILOT, DTV_PILOT, MapYamlNode(doc, TAG_PILOT, pilotMapping, PILOT_AUTO)); SET_U32_PROPERTY(PROP_IDX_DVBS2_ROLL_OFF, DTV_ROLLOFF, MapYamlNode(doc, TAG_ROLL_OFF, rollOffMapping, ROLLOFF_AUTO)); adapter->frontEndProperties.num = PROP_COUNT_DVBS2; adapter->satelliteSettings.polarisation = MapYamlNode(doc, TAG_POLARISATION, polarisationMapping, POL_HORIZONTAL); adapter->satelliteSettings.satellite_number = ConvertYamlNode(doc, TAG_SATELLITE_NUMBER, ConvertStringToUInt32, 0); break; case DELSYS_DVBC: SET_U32_PROPERTY(PROP_IDX_DELSYS, DTV_DELIVERY_SYSTEM, SYS_DVBC_ANNEX_AC); SET_U32_PROPERTY(PROP_IDX_DVBC_FEC, DTV_INNER_FEC, MapYamlNode(doc, TAG_FEC, fecMapping, FEC_AUTO)); SET_U32_PROPERTY(PROP_IDX_DVBC_SYMBOL_RATE, DTV_SYMBOL_RATE,ConvertYamlNode(doc, TAG_SYMBOL_RATE, ConvertStringToUInt32, 0)); SET_U32_PROPERTY(PROP_IDX_DVBC_MODULATION, DTV_MODULATION, MapYamlNode(doc, TAG_MODULATION, modulationMapping, QAM_AUTO)); adapter->frontEndProperties.num = PROP_COUNT_DVBC; break; case DELSYS_DVBT: SET_U32_PROPERTY(PROP_IDX_DELSYS, DTV_DELIVERY_SYSTEM, SYS_DVBT); SET_U32_PROPERTY(PROP_IDX_DVBT_BANDWIDTH, DTV_BANDWIDTH_HZ,ConvertYamlNode(doc, TAG_BANDWIDTH, ConvertStringToBandwith, 0)); SET_U32_PROPERTY(PROP_IDX_DVBT_CODE_RATE_HP, DTV_CODE_RATE_HP, MapYamlNode(doc, TAG_FEC_HP, fecMapping, FEC_AUTO)); SET_U32_PROPERTY(PROP_IDX_DVBT_CODE_RATE_LP, DTV_CODE_RATE_LP, MapYamlNode(doc, TAG_FEC_LP, fecMapping, FEC_AUTO)); SET_U32_PROPERTY(PROP_IDX_DVBT_MODULATION, DTV_MODULATION, MapYamlNode(doc, TAG_CONSTELLATION, modulationMapping, QAM_AUTO)); SET_U32_PROPERTY(PROP_IDX_DVBT_GUARD_INTERVAL, DTV_GUARD_INTERVAL, MapYamlNode(doc,TAG_GUARD_INTERVAL, guardIntervalMapping, GUARD_INTERVAL_AUTO)); SET_U32_PROPERTY(PROP_IDX_DVBT_TRANSMISSION_MODE, DTV_TRANSMISSION_MODE, MapYamlNode(doc, TAG_TRANSMISSION_MODE, transmissonModeMapping, TRANSMISSION_MODE_AUTO)); SET_U32_PROPERTY(PROP_IDX_DVBT_HIERARCHY, DTV_HIERARCHY, MapYamlNode(doc, TAG_HIERARCHY, hierarchyMapping, HIERARCHY_AUTO)); adapter->frontEndProperties.num = PROP_COUNT_DVBT; break; case DELSYS_ATSC: SET_U32_PROPERTY(PROP_IDX_DELSYS, DTV_DELIVERY_SYSTEM, SYS_ATSC); SET_U32_PROPERTY(PROP_IDX_ATSC_MODULATION, DTV_MODULATION, MapYamlNode(doc, TAG_MODULATION, modulationMapping, QAM_AUTO)); adapter->frontEndProperties.num = PROP_COUNT_ATSC; break; case DELSYS_ISDBT: SET_U32_PROPERTY(PROP_IDX_DELSYS, DTV_DELIVERY_SYSTEM, SYS_ISDBT); SET_U32_PROPERTY(PROP_IDX_ISDBT_BANDWIDTH, DTV_BANDWIDTH_HZ,ConvertYamlNode(doc, TAG_BANDWIDTH, ConvertStringToBandwith, 0)); SET_U32_PROPERTY(PROP_IDX_ISDBT_TRANSMISSION_MODE, DTV_TRANSMISSION_MODE, MapYamlNode(doc, TAG_TRANSMISSION_MODE, transmissonModeMapping, TRANSMISSION_MODE_AUTO)); SET_U32_PROPERTY(PROP_IDX_ISDBT_GUARD_INTERVAL, DTV_GUARD_INTERVAL, MapYamlNode(doc,TAG_GUARD_INTERVAL, guardIntervalMapping, GUARD_INTERVAL_AUTO)); #ifdef HAVE_FULL_ISDBT /* TODO: Fill in when full isdb-t support is available. */ #endif adapter->frontEndProperties.num = PROP_COUNT_ISDBT; /* For old style tuning */ adapter->isdbFEParams.frequency = ConvertYamlNode(doc, TAG_FREQUENCY, ConvertStringToUInt32, 0); adapter->isdbFEParams.inversion = MapYamlNode(doc, TAG_INVERSION, inversionMapping, INVERSION_AUTO); adapter->isdbFEParams.u.ofdm.bandwidth = MapYamlNode(doc, TAG_BANDWIDTH, bandwidthMapping, BANDWIDTH_AUTO); adapter->isdbFEParams.u.ofdm.code_rate_HP = MapYamlNode(doc, TAG_FEC_HP, fecMapping, FEC_AUTO); adapter->isdbFEParams.u.ofdm.code_rate_LP = MapYamlNode(doc, TAG_FEC_LP, fecMapping, FEC_AUTO); adapter->isdbFEParams.u.ofdm.constellation = MapYamlNode(doc, TAG_CONSTELLATION, modulationMapping, QAM_AUTO); adapter->isdbFEParams.u.ofdm.guard_interval = MapYamlNode(doc,TAG_GUARD_INTERVAL, guardIntervalMapping, GUARD_INTERVAL_AUTO); adapter->isdbFEParams.u.ofdm.transmission_mode = MapYamlNode(doc, TAG_TRANSMISSION_MODE, transmissonModeMapping, TRANSMISSION_MODE_AUTO); adapter->isdbFEParams.u.ofdm.hierarchy_information = MapYamlNode(doc, TAG_HIERARCHY, hierarchyMapping, HIERARCHY_AUTO); default: break; } adapter->frontEndPropertyArray[adapter->frontEndProperties.num].cmd = DTV_TUNE; adapter->frontEndProperties.num ++; } static void ConvertDTVPropertiesToYaml(DVBDeliverySystem_e delSys, struct dtv_properties *feparams, DVBSatelliteSettings_t *satSettings, yaml_document_t *doc) { char temp[25]; #define GET_U32_PROP(_idx) feparams->props[_idx].u.data sprintf(temp, "%u", GET_U32_PROP(PROP_IDX_FREQ)); YamlUtils_MappingAdd(doc, 1, TAG_FREQUENCY, temp); YamlUtils_MappingAdd(doc, 1, TAG_INVERSION, MapValueToString(inversionMapping, GET_U32_PROP(PROP_IDX_INVERSION), "AUTO")); switch (delSys) { case DELSYS_DVBS: YamlUtils_MappingAdd(doc, 1, TAG_FEC, MapValueToString(fecMapping, GET_U32_PROP(PROP_IDX_DVBS_FEC), "AUTO")); sprintf(temp, "%u", GET_U32_PROP(PROP_IDX_DVBS_SYMBOL_RATE)); YamlUtils_MappingAdd(doc, 1, TAG_SYMBOL_RATE, temp); YamlUtils_MappingAdd(doc, 1, TAG_POLARISATION, MapValueToString(polarisationMapping, satSettings->polarisation, "Horizontal")); sprintf(temp, "%u", satSettings->satellite_number); YamlUtils_MappingAdd(doc, 1, TAG_SATELLITE_NUMBER, temp); break; case DELSYS_DVBS2: YamlUtils_MappingAdd(doc, 1, TAG_MODULATION, MapValueToString(modulationMapping, GET_U32_PROP(PROP_IDX_DVBS2_MODULATION), "AUTO")); YamlUtils_MappingAdd(doc, 1, TAG_FEC, MapValueToString(fecMapping, GET_U32_PROP(PROP_IDX_DVBS2_FEC), "AUTO")); sprintf(temp, "%u", GET_U32_PROP(PROP_IDX_DVBS2_SYMBOL_RATE)); YamlUtils_MappingAdd(doc, 1, TAG_SYMBOL_RATE, temp); YamlUtils_MappingAdd(doc, 1, TAG_PILOT, MapValueToString(pilotMapping, GET_U32_PROP(PROP_IDX_DVBS2_PILOT), "AUTO")); YamlUtils_MappingAdd(doc, 1, TAG_ROLL_OFF, MapValueToString(rollOffMapping, GET_U32_PROP(PROP_IDX_DVBS2_ROLL_OFF), "AUTO")); YamlUtils_MappingAdd(doc, 1, TAG_POLARISATION, MapValueToString(polarisationMapping, satSettings->polarisation, "Horizontal")); sprintf(temp, "%u", satSettings->satellite_number); YamlUtils_MappingAdd(doc, 1, TAG_SATELLITE_NUMBER, temp); break; case DELSYS_DVBC: YamlUtils_MappingAdd(doc, 1, TAG_FEC, MapValueToString(fecMapping, GET_U32_PROP(PROP_IDX_DVBC_FEC), "AUTO")); sprintf(temp, "%u", GET_U32_PROP(PROP_IDX_DVBC_SYMBOL_RATE)); YamlUtils_MappingAdd(doc, 1, TAG_SYMBOL_RATE, temp); YamlUtils_MappingAdd(doc, 1, TAG_MODULATION, MapValueToString(modulationMapping, GET_U32_PROP(PROP_IDX_DVBC_MODULATION), "AUTO")); break; case DELSYS_DVBT: sprintf(temp,"%u", GET_U32_PROP(PROP_IDX_DVBT_BANDWIDTH)); YamlUtils_MappingAdd(doc, 1, TAG_BANDWIDTH, temp); YamlUtils_MappingAdd(doc, 1, TAG_FEC_HP, MapValueToString(fecMapping, GET_U32_PROP(PROP_IDX_DVBT_CODE_RATE_HP), "AUTO")); YamlUtils_MappingAdd(doc, 1, TAG_FEC_LP, MapValueToString(fecMapping, GET_U32_PROP(PROP_IDX_DVBT_CODE_RATE_LP), "AUTO")); YamlUtils_MappingAdd(doc, 1, TAG_CONSTELLATION, MapValueToString(modulationMapping, GET_U32_PROP(PROP_IDX_DVBT_MODULATION), "AUTO")); YamlUtils_MappingAdd(doc, 1, TAG_GUARD_INTERVAL, MapValueToString(guardIntervalMapping, GET_U32_PROP(PROP_IDX_DVBT_GUARD_INTERVAL), "AUTO")); YamlUtils_MappingAdd(doc, 1, TAG_TRANSMISSION_MODE, MapValueToString(transmissonModeMapping, GET_U32_PROP(PROP_IDX_DVBT_TRANSMISSION_MODE), "AUTO")); YamlUtils_MappingAdd(doc, 1, TAG_HIERARCHY, MapValueToString(hierarchyMapping, GET_U32_PROP(PROP_IDX_DVBT_HIERARCHY), "AUTO")); break; case DELSYS_ATSC: YamlUtils_MappingAdd(doc, 1, TAG_MODULATION, MapValueToString(modulationMapping, GET_U32_PROP(PROP_IDX_ATSC_MODULATION), "AUTO")); break; case DELSYS_ISDBT: sprintf(temp,"%u", GET_U32_PROP(PROP_IDX_DVBT_BANDWIDTH)); YamlUtils_MappingAdd(doc, 1, TAG_BANDWIDTH, temp); YamlUtils_MappingAdd(doc, 1, TAG_GUARD_INTERVAL, MapValueToString(guardIntervalMapping, GET_U32_PROP(PROP_IDX_DVBT_GUARD_INTERVAL), "AUTO")); YamlUtils_MappingAdd(doc, 1, TAG_TRANSMISSION_MODE, MapValueToString(transmissonModeMapping, GET_U32_PROP(PROP_IDX_DVBT_TRANSMISSION_MODE), "AUTO")); break; default: break; } } #endif dvbstreamer-2.1.0/src/dvbctrl.c000066400000000000000000000342221217721213100164230ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dvbctrl.c Application to control dvbstreamer in daemon mode. */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "types.h" #include "logging.h" #include "remoteintf.h" /******************************************************************************* * Defines * *******************************************************************************/ #define MAX_LINE_LENGTH 256 /******************************************************************************* * Prototypes * *******************************************************************************/ static void usage(char *appname); static void version(void); static bool Authenticate(FILE *socketfp, char *username, char *password); static void StripNewLineFromEnd(char *str); static void ProcessResponseLine(char *line, char **ver, int *errno, char **errmsg); static void interactivePrompt(FILE *socketfp); static bool SendCommand(FILE *socketfp, char *line, char **version, int *errno, char **errmsg); /******************************************************************************* * Global functions * *******************************************************************************/ static const char responselineStart[] = "DVBStreamer/"; static const char DVBCTRL[] = "DVBCtrl"; static char *host = "localhost"; static int adapterNumber = 0; static char line[MAX_LINE_LENGTH]; static char defaultUsername[] = "dvbstreamer"; static char defaultPassword[] = "control"; char DataDirectory[PATH_MAX]; /******************************************************************************* * Global functions * *******************************************************************************/ int main(int argc, char *argv[]) { int i; socklen_t address_len; #ifdef USE_GETADDRINFO struct sockaddr_storage address; struct addrinfo *addrinfo, hints; char portnumber[10]; #else struct hostent *hostinfo; struct sockaddr_in address; #endif char *filename = NULL; int socketfd = -1; FILE *socketfp; char *ver; int errno; char *errmsg; int logLevel = 0; char logFilename[PATH_MAX] = {0}; bool interactive = FALSE; char *username = defaultUsername; char *password = defaultPassword; /* Create the data directory */ sprintf(DataDirectory, "%s/.dvbstreamer", getenv("HOME")); mkdir(DataDirectory, S_IRWXU); while (TRUE) { int c; c = getopt(argc, argv, "vVh:a:u:p:f:L:i"); if (c == -1) { break; } switch (c) { case 'v': logLevel++; break; case 'L': strcpy(logFilename, optarg); break; case 'V': version(); exit(0); break; case 'h': host = optarg; break; case 'a': adapterNumber = atoi(optarg); break; case 'i': interactive = TRUE; break; case 'u': username = optarg; break; case 'p': password = optarg; break; case 'f': filename = optarg; break; default: usage(argv[0]); exit(1); } } if (logFilename[0]) { if (LoggingInitFile(logFilename, logLevel)) { perror("Could not open user specified log file:"); exit(1); } } else { if (strcmp(host, "localhost") == 0) { sprintf(logFilename, "dvbctrl-%d.log", adapterNumber); } else { sprintf(logFilename, "dvbctrl-%s-%d.log", host, adapterNumber); } if (LoggingInit(logFilename, logLevel)) { perror("Couldn't initialising logging module:"); exit(1); } } LogModule(LOG_INFOV, DVBCTRL, "Will connect to host %s adapter %d\n", host, adapterNumber); /* Commands follow options */ if ((optind >= argc) && (filename == NULL) && (!interactive)) { LogModule(LOG_ERROR, DVBCTRL, "No commands specified!\n"); exit(1); } /* Connect to host */ #ifdef USE_GETADDRINFO sprintf(portnumber, "%d", REMOTEINTERFACE_PORT + adapterNumber); memset((void *)&hints, 0, sizeof(hints)); hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_ADDRCONFIG; if ((getaddrinfo(host, portnumber, &hints, &addrinfo) != 0) || (addrinfo == NULL)) { LogModule(LOG_ERROR, DVBCTRL, "Failed to get address\n"); exit(1); } if (addrinfo->ai_addrlen > sizeof(struct sockaddr_storage)) { LogModule(LOG_ERROR, DVBCTRL, "Failed to parse address\n"); freeaddrinfo(addrinfo); exit(1); } address_len = addrinfo->ai_addrlen; memcpy(&address, addrinfo->ai_addr, addrinfo->ai_addrlen); freeaddrinfo(addrinfo); socketfd = socket(address.ss_family, SOCK_STREAM, IPPROTO_TCP); #else address.sin_port = htons(REMOTEINTERFACE_PORT + adapterNumber); hostinfo = gethostbyname(host); if (hostinfo == NULL) { LogModule(LOG_ERROR, DVBCTRL, "Failed to find address for \"%s\"\n", host); } address.sin_family = hostinfo->h_addrtype; memcpy((char *)&(address.sin_addr), hostinfo->h_addr, hostinfo->h_length); address_len = sizeof(address); socketfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); #endif if (socketfd < 0) { LogModule(LOG_ERROR, DVBCTRL, "Failed to create socket!\n"); exit(1); } if (connect(socketfd, (const struct sockaddr *) &address, address_len)) { LogModule(LOG_ERROR, DVBCTRL, "Failed to connect to host %s port %d\n", host, REMOTEINTERFACE_PORT + adapterNumber); exit(1); } LogModule(LOG_DEBUG, DVBCTRL, "Socket connected to host %s port %d\n", host, REMOTEINTERFACE_PORT + adapterNumber); socketfp = fdopen(socketfd, "r+"); if (!fgets(line , MAX_LINE_LENGTH, socketfp)) { LogModule(LOG_ERROR, DVBCTRL, "No ready line received from server!\n"); fclose(socketfp); return 1; } ProcessResponseLine(line, &ver, &errno, &errmsg); if (errno != 0) { LogModule(LOG_ERROR, DVBCTRL, "%s\n", errmsg); fclose(socketfp); return errno; } if (username && password) { if (!Authenticate(socketfp,username,password)) { LogModule(LOG_ERROR, DVBCTRL, "Failed to authenticate!"); fclose(socketfp); return 1; } } /* Process commands */ if (interactive) { interactivePrompt(socketfp); } else { if (filename) { FILE *fp = NULL; if (strcmp(filename, "-") == 0) { fp = stdin; } else { fp = fopen(filename, "r"); } if (!fp) { LogModule(LOG_ERROR, DVBCTRL, "Failed to open %s\n", filename); fclose(socketfp); return 1; } while(fgets(line, MAX_LINE_LENGTH, fp)) { StripNewLineFromEnd(line); SendCommand(socketfp, line, &ver, &errno, &errmsg); if (errno != 0) { LogModule(LOG_ERROR, DVBCTRL, "%s\n", errmsg); break; } } } else { line[0] = 0; for (i = optind; i < argc; i ++) { bool useDoubleQuotes = FALSE; bool useSingleQuotes = FALSE; if (i - optind) { strcat(line, " "); } if (strchr(argv[i], ' ') != NULL) { if (strchr(argv[i], '\"') == NULL) { useDoubleQuotes = TRUE; strcat(line, "\""); } else { useSingleQuotes = TRUE; strcat(line, "\'"); } } strcat(line, argv[i]); if (useDoubleQuotes) { strcat(line, "\""); } if (useSingleQuotes) { strcat(line, "\'"); } } SendCommand(socketfp, line, &ver, &errno, &errmsg); if (errno != 0) { LogModule(LOG_ERROR, DVBCTRL, "%s\n", errmsg); fclose(socketfp); return errno; } } } /* Disconnect from host */ fclose(socketfp); LogModule(LOG_DEBUG, DVBCTRL, "Socket closed\n"); return 0; } static void interactivePrompt(FILE *socketfp) { char *ver; int errno; char *errmsg; rl_readline_name = "DVBCtrl"; while (TRUE) { char *line = readline("DVBCtrl>"); if (line) { SendCommand(socketfp, line, &ver, &errno, &errmsg); if (errno == 0) { add_history(line); } else { LogModule(LOG_ERROR, DVBCTRL, "%s\n", errmsg); } free(line); } else { break; } } } /* * Output command line usage and help. */ static void usage(char *appname) { fprintf(stderr, "Usage:%s [] \n" " Options:\n" " -v : Increase the amount of debug output, can be used multiple\n" " times for more output.\n" " -V : Print version information then exit.\n" " -h host : Host to control.\n" " -a : DVB Adapter number to control on the host.\n" " -f : Read commands from .\n", appname ); } /* * Output version and license conditions */ static void version(void) { printf("%s - %s (Compiled %s %s)\n" "Written by Adam Charrett (charrea6@users.sourceforge.net).\n" "\n" "Copyright 2006 Adam Charrett\n" "This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n", PACKAGE, VERSION, __DATE__, __TIME__); } /******************************************************************************/ /* Command functions */ /******************************************************************************/ static bool Authenticate(FILE *socketfp, char *username, char *password) { char * ver; int errno; char *errmsg; sprintf(line, "auth %s %s", username, password); SendCommand(socketfp, line, &ver, &errno, &errmsg); return errno == 0; } static bool SendCommand(FILE *socketfp, char *cmd, char **ver, int *errno, char **errmsg) { bool foundResponse = FALSE; char *separator; LogModule(LOG_DEBUG, DVBCTRL, "Sending command \"%s\"\n", cmd); fprintf(socketfp, "%s\n", cmd); *ver = NULL; *errno = 0; *errmsg = NULL; do { if (fgets(line, MAX_LINE_LENGTH, socketfp)) { if (strncmp(line, responselineStart, sizeof(responselineStart) - 1) == 0) { StripNewLineFromEnd(line); separator = strchr(line + sizeof(responselineStart), '/'); if (separator) { ProcessResponseLine(line, ver, errno, errmsg); foundResponse = TRUE; break; } } printf("%s", line); } else { break; } }while(!foundResponse); return foundResponse; } static void StripNewLineFromEnd(char *str) { int len = strlen(str); if ((str[len - 1] == '\n') || (str[len - 1] == '\r')) { if ((str[len - 2] == '\n') || (str[len - 2] == '\r')) { str[len - 2] = 0; } else { str[len - 1] = 0; } } } static void ProcessResponseLine(char *line, char **ver, int *errno, char **errmsg) { char *separator; *ver = NULL; *errno = 0; *errmsg = NULL; separator = strchr(line + sizeof(responselineStart), '/'); if (separator) { char *start; *separator = 0; start = line + sizeof(responselineStart); *ver = strdup(start); start = separator + 1; separator = strchr(separator + 1, ' '); if (separator) { *separator = 0; *errmsg = strdup(separator + 1); } *errno = atoi(start); } } dvbstreamer-2.1.0/src/dvbpsi/000077500000000000000000000000001217721213100161035ustar00rootroot00000000000000dvbstreamer-2.1.0/src/dvbpsi/Makefile.am000066400000000000000000000030711217721213100201400ustar00rootroot00000000000000AM_CFLAGS =\ -I$(top_srcdir)/include \ -I$(top_srcdir)/include/dvbpsi noinst_LIBRARIES = libdvbpsi.a libdvbpsi_a_SOURCES= \ demux.c \ descriptor.c \ dvbpsi.c \ psi.c \ sections.c \ $(mpeg2_descriptors_src) \ $(mpeg2_tables_src) \ $(dvb_src) \ $(atsc_src) if ENABLE_DVB dvb_src = \ datetime.c \ $(dvb_tables_src) \ $(dvb_descriptors_src) else dvb_src = endif if ENABLE_ATSC atsc_src = \ $(atsc_tables_src) \ $(atsc_descriptors_src) else atsc_src = endif mpeg2_descriptors_src = \ descriptors/dr_02.c \ descriptors/dr_03.c \ descriptors/dr_04.c \ descriptors/dr_05.c \ descriptors/dr_06.c \ descriptors/dr_07.c \ descriptors/dr_08.c \ descriptors/dr_09.c \ descriptors/dr_0a.c \ descriptors/dr_0b.c \ descriptors/dr_0c.c \ descriptors/dr_0d.c \ descriptors/dr_0e.c \ descriptors/dr_0f.c \ descriptors/dr_13.c \ descriptors/dr_14.c \ descriptors/dr_83.c dvb_descriptors_src = \ descriptors/dr_42.c \ descriptors/dr_43.c \ descriptors/dr_47.c \ descriptors/dr_48.c \ descriptors/dr_4d.c \ descriptors/dr_4e.c \ descriptors/dr_52.c \ descriptors/dr_55.c \ descriptors/dr_56.c \ descriptors/dr_59.c \ descriptors/dr_5a.c \ descriptors/dr_62.c \ descriptors/dr_66.c \ descriptors/dr_69.c \ descriptors/dr_73.c \ descriptors/dr_76.c atsc_descriptors_src = mpeg2_tables_src = \ tables/pat.c \ tables/pmt.c \ tables/cat.c dvb_tables_src = \ tables/eit.c \ tables/sdt.c \ tables/nit.c \ tables/tdttot.c atsc_tables_src =\ tables/atsc_mgt.c \ tables/atsc_stt.c \ tables/atsc_vct.c \ tables/atsc_eit.c \ tables/atsc_ett.c dvbstreamer-2.1.0/src/dvbpsi/Makefile.in000066400000000000000000002676611217721213100201720ustar00rootroot00000000000000# 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 = src/dvbpsi DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in 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 = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru libdvbpsi_a_AR = $(AR) $(ARFLAGS) libdvbpsi_a_LIBADD = am__libdvbpsi_a_SOURCES_DIST = demux.c descriptor.c dvbpsi.c psi.c \ sections.c descriptors/dr_02.c descriptors/dr_03.c \ descriptors/dr_04.c descriptors/dr_05.c descriptors/dr_06.c \ descriptors/dr_07.c descriptors/dr_08.c descriptors/dr_09.c \ descriptors/dr_0a.c descriptors/dr_0b.c descriptors/dr_0c.c \ descriptors/dr_0d.c descriptors/dr_0e.c descriptors/dr_0f.c \ descriptors/dr_13.c descriptors/dr_14.c descriptors/dr_83.c \ tables/pat.c tables/pmt.c tables/cat.c datetime.c tables/eit.c \ tables/sdt.c tables/nit.c tables/tdttot.c descriptors/dr_42.c \ descriptors/dr_43.c descriptors/dr_47.c descriptors/dr_48.c \ descriptors/dr_4d.c descriptors/dr_4e.c descriptors/dr_52.c \ descriptors/dr_55.c descriptors/dr_56.c descriptors/dr_59.c \ descriptors/dr_5a.c descriptors/dr_62.c descriptors/dr_66.c \ descriptors/dr_69.c descriptors/dr_73.c descriptors/dr_76.c \ tables/atsc_mgt.c tables/atsc_stt.c tables/atsc_vct.c \ tables/atsc_eit.c tables/atsc_ett.c am__objects_1 = dr_02.$(OBJEXT) dr_03.$(OBJEXT) dr_04.$(OBJEXT) \ dr_05.$(OBJEXT) dr_06.$(OBJEXT) dr_07.$(OBJEXT) \ dr_08.$(OBJEXT) dr_09.$(OBJEXT) dr_0a.$(OBJEXT) \ dr_0b.$(OBJEXT) dr_0c.$(OBJEXT) dr_0d.$(OBJEXT) \ dr_0e.$(OBJEXT) dr_0f.$(OBJEXT) dr_13.$(OBJEXT) \ dr_14.$(OBJEXT) dr_83.$(OBJEXT) am__objects_2 = pat.$(OBJEXT) pmt.$(OBJEXT) cat.$(OBJEXT) am__objects_3 = eit.$(OBJEXT) sdt.$(OBJEXT) nit.$(OBJEXT) \ tdttot.$(OBJEXT) am__objects_4 = dr_42.$(OBJEXT) dr_43.$(OBJEXT) dr_47.$(OBJEXT) \ dr_48.$(OBJEXT) dr_4d.$(OBJEXT) dr_4e.$(OBJEXT) \ dr_52.$(OBJEXT) dr_55.$(OBJEXT) dr_56.$(OBJEXT) \ dr_59.$(OBJEXT) dr_5a.$(OBJEXT) dr_62.$(OBJEXT) \ dr_66.$(OBJEXT) dr_69.$(OBJEXT) dr_73.$(OBJEXT) \ dr_76.$(OBJEXT) @ENABLE_DVB_TRUE@am__objects_5 = datetime.$(OBJEXT) $(am__objects_3) \ @ENABLE_DVB_TRUE@ $(am__objects_4) am__objects_6 = atsc_mgt.$(OBJEXT) atsc_stt.$(OBJEXT) \ atsc_vct.$(OBJEXT) atsc_eit.$(OBJEXT) atsc_ett.$(OBJEXT) am__objects_7 = @ENABLE_ATSC_TRUE@am__objects_8 = $(am__objects_6) $(am__objects_7) am_libdvbpsi_a_OBJECTS = demux.$(OBJEXT) descriptor.$(OBJEXT) \ dvbpsi.$(OBJEXT) psi.$(OBJEXT) sections.$(OBJEXT) \ $(am__objects_1) $(am__objects_2) $(am__objects_5) \ $(am__objects_8) libdvbpsi_a_OBJECTS = $(am_libdvbpsi_a_OBJECTS) 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) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libdvbpsi_a_SOURCES) DIST_SOURCES = $(am__libdvbpsi_a_SOURCES_DIST) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVBSTREAMER_MAJOR = @DVBSTREAMER_MAJOR@ DVBSTREAMER_MICRO = @DVBSTREAMER_MICRO@ DVBSTREAMER_MINOR = @DVBSTREAMER_MINOR@ DVBSTREAMER_PLUGINDIR = @DVBSTREAMER_PLUGINDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETTIME_LIB = @GETTIME_LIB@ GREP = @GREP@ ICONV_LIB = @ICONV_LIB@ 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@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ NO_PREFIX_PACKAGE_DATA_DIR = @NO_PREFIX_PACKAGE_DATA_DIR@ NO_PREFIX_PACKAGE_DOC_DIR = @NO_PREFIX_PACKAGE_DOC_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATA_DIR = @PACKAGE_DATA_DIR@ PACKAGE_DOC_DIR = @PACKAGE_DOC_DIR@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ READLINE_TERMCAP = @READLINE_TERMCAP@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ 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@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ 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@ AM_CFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/include/dvbpsi noinst_LIBRARIES = libdvbpsi.a libdvbpsi_a_SOURCES = \ demux.c \ descriptor.c \ dvbpsi.c \ psi.c \ sections.c \ $(mpeg2_descriptors_src) \ $(mpeg2_tables_src) \ $(dvb_src) \ $(atsc_src) @ENABLE_DVB_FALSE@dvb_src = @ENABLE_DVB_TRUE@dvb_src = \ @ENABLE_DVB_TRUE@ datetime.c \ @ENABLE_DVB_TRUE@ $(dvb_tables_src) \ @ENABLE_DVB_TRUE@ $(dvb_descriptors_src) @ENABLE_ATSC_FALSE@atsc_src = @ENABLE_ATSC_TRUE@atsc_src = \ @ENABLE_ATSC_TRUE@ $(atsc_tables_src) \ @ENABLE_ATSC_TRUE@ $(atsc_descriptors_src) mpeg2_descriptors_src = \ descriptors/dr_02.c \ descriptors/dr_03.c \ descriptors/dr_04.c \ descriptors/dr_05.c \ descriptors/dr_06.c \ descriptors/dr_07.c \ descriptors/dr_08.c \ descriptors/dr_09.c \ descriptors/dr_0a.c \ descriptors/dr_0b.c \ descriptors/dr_0c.c \ descriptors/dr_0d.c \ descriptors/dr_0e.c \ descriptors/dr_0f.c \ descriptors/dr_13.c \ descriptors/dr_14.c \ descriptors/dr_83.c dvb_descriptors_src = \ descriptors/dr_42.c \ descriptors/dr_43.c \ descriptors/dr_47.c \ descriptors/dr_48.c \ descriptors/dr_4d.c \ descriptors/dr_4e.c \ descriptors/dr_52.c \ descriptors/dr_55.c \ descriptors/dr_56.c \ descriptors/dr_59.c \ descriptors/dr_5a.c \ descriptors/dr_62.c \ descriptors/dr_66.c \ descriptors/dr_69.c \ descriptors/dr_73.c \ descriptors/dr_76.c atsc_descriptors_src = mpeg2_tables_src = \ tables/pat.c \ tables/pmt.c \ tables/cat.c dvb_tables_src = \ tables/eit.c \ tables/sdt.c \ tables/nit.c \ tables/tdttot.c atsc_tables_src = \ tables/atsc_mgt.c \ tables/atsc_stt.c \ tables/atsc_vct.c \ tables/atsc_eit.c \ tables/atsc_ett.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(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 src/dvbpsi/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/dvbpsi/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libdvbpsi.a: $(libdvbpsi_a_OBJECTS) $(libdvbpsi_a_DEPENDENCIES) -rm -f libdvbpsi.a $(libdvbpsi_a_AR) libdvbpsi.a $(libdvbpsi_a_OBJECTS) $(libdvbpsi_a_LIBADD) $(RANLIB) libdvbpsi.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atsc_eit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atsc_ett.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atsc_mgt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atsc_stt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atsc_vct.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/datetime.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/demux.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/descriptor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_02.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_03.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_04.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_05.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_06.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_07.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_08.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_09.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_0a.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_0b.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_0c.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_0d.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_0e.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_0f.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_13.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_14.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_42.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_43.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_47.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_48.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_4d.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_4e.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_52.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_55.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_56.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_59.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_5a.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_62.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_66.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_69.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_73.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_76.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dr_83.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvbpsi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pmt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/psi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sections.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tdttot.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @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@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @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@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @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 $@ $< dr_02.o: descriptors/dr_02.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_02.o -MD -MP -MF $(DEPDIR)/dr_02.Tpo -c -o dr_02.o `test -f 'descriptors/dr_02.c' || echo '$(srcdir)/'`descriptors/dr_02.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_02.Tpo $(DEPDIR)/dr_02.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_02.c' object='dr_02.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_02.o `test -f 'descriptors/dr_02.c' || echo '$(srcdir)/'`descriptors/dr_02.c dr_02.obj: descriptors/dr_02.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_02.obj -MD -MP -MF $(DEPDIR)/dr_02.Tpo -c -o dr_02.obj `if test -f 'descriptors/dr_02.c'; then $(CYGPATH_W) 'descriptors/dr_02.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_02.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_02.Tpo $(DEPDIR)/dr_02.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_02.c' object='dr_02.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_02.obj `if test -f 'descriptors/dr_02.c'; then $(CYGPATH_W) 'descriptors/dr_02.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_02.c'; fi` dr_03.o: descriptors/dr_03.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_03.o -MD -MP -MF $(DEPDIR)/dr_03.Tpo -c -o dr_03.o `test -f 'descriptors/dr_03.c' || echo '$(srcdir)/'`descriptors/dr_03.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_03.Tpo $(DEPDIR)/dr_03.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_03.c' object='dr_03.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_03.o `test -f 'descriptors/dr_03.c' || echo '$(srcdir)/'`descriptors/dr_03.c dr_03.obj: descriptors/dr_03.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_03.obj -MD -MP -MF $(DEPDIR)/dr_03.Tpo -c -o dr_03.obj `if test -f 'descriptors/dr_03.c'; then $(CYGPATH_W) 'descriptors/dr_03.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_03.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_03.Tpo $(DEPDIR)/dr_03.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_03.c' object='dr_03.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_03.obj `if test -f 'descriptors/dr_03.c'; then $(CYGPATH_W) 'descriptors/dr_03.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_03.c'; fi` dr_04.o: descriptors/dr_04.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_04.o -MD -MP -MF $(DEPDIR)/dr_04.Tpo -c -o dr_04.o `test -f 'descriptors/dr_04.c' || echo '$(srcdir)/'`descriptors/dr_04.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_04.Tpo $(DEPDIR)/dr_04.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_04.c' object='dr_04.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_04.o `test -f 'descriptors/dr_04.c' || echo '$(srcdir)/'`descriptors/dr_04.c dr_04.obj: descriptors/dr_04.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_04.obj -MD -MP -MF $(DEPDIR)/dr_04.Tpo -c -o dr_04.obj `if test -f 'descriptors/dr_04.c'; then $(CYGPATH_W) 'descriptors/dr_04.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_04.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_04.Tpo $(DEPDIR)/dr_04.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_04.c' object='dr_04.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_04.obj `if test -f 'descriptors/dr_04.c'; then $(CYGPATH_W) 'descriptors/dr_04.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_04.c'; fi` dr_05.o: descriptors/dr_05.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_05.o -MD -MP -MF $(DEPDIR)/dr_05.Tpo -c -o dr_05.o `test -f 'descriptors/dr_05.c' || echo '$(srcdir)/'`descriptors/dr_05.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_05.Tpo $(DEPDIR)/dr_05.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_05.c' object='dr_05.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_05.o `test -f 'descriptors/dr_05.c' || echo '$(srcdir)/'`descriptors/dr_05.c dr_05.obj: descriptors/dr_05.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_05.obj -MD -MP -MF $(DEPDIR)/dr_05.Tpo -c -o dr_05.obj `if test -f 'descriptors/dr_05.c'; then $(CYGPATH_W) 'descriptors/dr_05.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_05.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_05.Tpo $(DEPDIR)/dr_05.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_05.c' object='dr_05.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_05.obj `if test -f 'descriptors/dr_05.c'; then $(CYGPATH_W) 'descriptors/dr_05.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_05.c'; fi` dr_06.o: descriptors/dr_06.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_06.o -MD -MP -MF $(DEPDIR)/dr_06.Tpo -c -o dr_06.o `test -f 'descriptors/dr_06.c' || echo '$(srcdir)/'`descriptors/dr_06.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_06.Tpo $(DEPDIR)/dr_06.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_06.c' object='dr_06.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_06.o `test -f 'descriptors/dr_06.c' || echo '$(srcdir)/'`descriptors/dr_06.c dr_06.obj: descriptors/dr_06.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_06.obj -MD -MP -MF $(DEPDIR)/dr_06.Tpo -c -o dr_06.obj `if test -f 'descriptors/dr_06.c'; then $(CYGPATH_W) 'descriptors/dr_06.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_06.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_06.Tpo $(DEPDIR)/dr_06.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_06.c' object='dr_06.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_06.obj `if test -f 'descriptors/dr_06.c'; then $(CYGPATH_W) 'descriptors/dr_06.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_06.c'; fi` dr_07.o: descriptors/dr_07.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_07.o -MD -MP -MF $(DEPDIR)/dr_07.Tpo -c -o dr_07.o `test -f 'descriptors/dr_07.c' || echo '$(srcdir)/'`descriptors/dr_07.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_07.Tpo $(DEPDIR)/dr_07.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_07.c' object='dr_07.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_07.o `test -f 'descriptors/dr_07.c' || echo '$(srcdir)/'`descriptors/dr_07.c dr_07.obj: descriptors/dr_07.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_07.obj -MD -MP -MF $(DEPDIR)/dr_07.Tpo -c -o dr_07.obj `if test -f 'descriptors/dr_07.c'; then $(CYGPATH_W) 'descriptors/dr_07.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_07.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_07.Tpo $(DEPDIR)/dr_07.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_07.c' object='dr_07.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_07.obj `if test -f 'descriptors/dr_07.c'; then $(CYGPATH_W) 'descriptors/dr_07.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_07.c'; fi` dr_08.o: descriptors/dr_08.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_08.o -MD -MP -MF $(DEPDIR)/dr_08.Tpo -c -o dr_08.o `test -f 'descriptors/dr_08.c' || echo '$(srcdir)/'`descriptors/dr_08.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_08.Tpo $(DEPDIR)/dr_08.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_08.c' object='dr_08.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_08.o `test -f 'descriptors/dr_08.c' || echo '$(srcdir)/'`descriptors/dr_08.c dr_08.obj: descriptors/dr_08.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_08.obj -MD -MP -MF $(DEPDIR)/dr_08.Tpo -c -o dr_08.obj `if test -f 'descriptors/dr_08.c'; then $(CYGPATH_W) 'descriptors/dr_08.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_08.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_08.Tpo $(DEPDIR)/dr_08.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_08.c' object='dr_08.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_08.obj `if test -f 'descriptors/dr_08.c'; then $(CYGPATH_W) 'descriptors/dr_08.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_08.c'; fi` dr_09.o: descriptors/dr_09.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_09.o -MD -MP -MF $(DEPDIR)/dr_09.Tpo -c -o dr_09.o `test -f 'descriptors/dr_09.c' || echo '$(srcdir)/'`descriptors/dr_09.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_09.Tpo $(DEPDIR)/dr_09.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_09.c' object='dr_09.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_09.o `test -f 'descriptors/dr_09.c' || echo '$(srcdir)/'`descriptors/dr_09.c dr_09.obj: descriptors/dr_09.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_09.obj -MD -MP -MF $(DEPDIR)/dr_09.Tpo -c -o dr_09.obj `if test -f 'descriptors/dr_09.c'; then $(CYGPATH_W) 'descriptors/dr_09.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_09.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_09.Tpo $(DEPDIR)/dr_09.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_09.c' object='dr_09.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_09.obj `if test -f 'descriptors/dr_09.c'; then $(CYGPATH_W) 'descriptors/dr_09.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_09.c'; fi` dr_0a.o: descriptors/dr_0a.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_0a.o -MD -MP -MF $(DEPDIR)/dr_0a.Tpo -c -o dr_0a.o `test -f 'descriptors/dr_0a.c' || echo '$(srcdir)/'`descriptors/dr_0a.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_0a.Tpo $(DEPDIR)/dr_0a.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_0a.c' object='dr_0a.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_0a.o `test -f 'descriptors/dr_0a.c' || echo '$(srcdir)/'`descriptors/dr_0a.c dr_0a.obj: descriptors/dr_0a.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_0a.obj -MD -MP -MF $(DEPDIR)/dr_0a.Tpo -c -o dr_0a.obj `if test -f 'descriptors/dr_0a.c'; then $(CYGPATH_W) 'descriptors/dr_0a.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_0a.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_0a.Tpo $(DEPDIR)/dr_0a.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_0a.c' object='dr_0a.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_0a.obj `if test -f 'descriptors/dr_0a.c'; then $(CYGPATH_W) 'descriptors/dr_0a.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_0a.c'; fi` dr_0b.o: descriptors/dr_0b.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_0b.o -MD -MP -MF $(DEPDIR)/dr_0b.Tpo -c -o dr_0b.o `test -f 'descriptors/dr_0b.c' || echo '$(srcdir)/'`descriptors/dr_0b.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_0b.Tpo $(DEPDIR)/dr_0b.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_0b.c' object='dr_0b.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_0b.o `test -f 'descriptors/dr_0b.c' || echo '$(srcdir)/'`descriptors/dr_0b.c dr_0b.obj: descriptors/dr_0b.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_0b.obj -MD -MP -MF $(DEPDIR)/dr_0b.Tpo -c -o dr_0b.obj `if test -f 'descriptors/dr_0b.c'; then $(CYGPATH_W) 'descriptors/dr_0b.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_0b.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_0b.Tpo $(DEPDIR)/dr_0b.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_0b.c' object='dr_0b.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_0b.obj `if test -f 'descriptors/dr_0b.c'; then $(CYGPATH_W) 'descriptors/dr_0b.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_0b.c'; fi` dr_0c.o: descriptors/dr_0c.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_0c.o -MD -MP -MF $(DEPDIR)/dr_0c.Tpo -c -o dr_0c.o `test -f 'descriptors/dr_0c.c' || echo '$(srcdir)/'`descriptors/dr_0c.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_0c.Tpo $(DEPDIR)/dr_0c.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_0c.c' object='dr_0c.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_0c.o `test -f 'descriptors/dr_0c.c' || echo '$(srcdir)/'`descriptors/dr_0c.c dr_0c.obj: descriptors/dr_0c.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_0c.obj -MD -MP -MF $(DEPDIR)/dr_0c.Tpo -c -o dr_0c.obj `if test -f 'descriptors/dr_0c.c'; then $(CYGPATH_W) 'descriptors/dr_0c.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_0c.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_0c.Tpo $(DEPDIR)/dr_0c.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_0c.c' object='dr_0c.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_0c.obj `if test -f 'descriptors/dr_0c.c'; then $(CYGPATH_W) 'descriptors/dr_0c.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_0c.c'; fi` dr_0d.o: descriptors/dr_0d.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_0d.o -MD -MP -MF $(DEPDIR)/dr_0d.Tpo -c -o dr_0d.o `test -f 'descriptors/dr_0d.c' || echo '$(srcdir)/'`descriptors/dr_0d.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_0d.Tpo $(DEPDIR)/dr_0d.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_0d.c' object='dr_0d.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_0d.o `test -f 'descriptors/dr_0d.c' || echo '$(srcdir)/'`descriptors/dr_0d.c dr_0d.obj: descriptors/dr_0d.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_0d.obj -MD -MP -MF $(DEPDIR)/dr_0d.Tpo -c -o dr_0d.obj `if test -f 'descriptors/dr_0d.c'; then $(CYGPATH_W) 'descriptors/dr_0d.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_0d.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_0d.Tpo $(DEPDIR)/dr_0d.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_0d.c' object='dr_0d.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_0d.obj `if test -f 'descriptors/dr_0d.c'; then $(CYGPATH_W) 'descriptors/dr_0d.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_0d.c'; fi` dr_0e.o: descriptors/dr_0e.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_0e.o -MD -MP -MF $(DEPDIR)/dr_0e.Tpo -c -o dr_0e.o `test -f 'descriptors/dr_0e.c' || echo '$(srcdir)/'`descriptors/dr_0e.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_0e.Tpo $(DEPDIR)/dr_0e.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_0e.c' object='dr_0e.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_0e.o `test -f 'descriptors/dr_0e.c' || echo '$(srcdir)/'`descriptors/dr_0e.c dr_0e.obj: descriptors/dr_0e.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_0e.obj -MD -MP -MF $(DEPDIR)/dr_0e.Tpo -c -o dr_0e.obj `if test -f 'descriptors/dr_0e.c'; then $(CYGPATH_W) 'descriptors/dr_0e.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_0e.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_0e.Tpo $(DEPDIR)/dr_0e.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_0e.c' object='dr_0e.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_0e.obj `if test -f 'descriptors/dr_0e.c'; then $(CYGPATH_W) 'descriptors/dr_0e.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_0e.c'; fi` dr_0f.o: descriptors/dr_0f.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_0f.o -MD -MP -MF $(DEPDIR)/dr_0f.Tpo -c -o dr_0f.o `test -f 'descriptors/dr_0f.c' || echo '$(srcdir)/'`descriptors/dr_0f.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_0f.Tpo $(DEPDIR)/dr_0f.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_0f.c' object='dr_0f.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_0f.o `test -f 'descriptors/dr_0f.c' || echo '$(srcdir)/'`descriptors/dr_0f.c dr_0f.obj: descriptors/dr_0f.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_0f.obj -MD -MP -MF $(DEPDIR)/dr_0f.Tpo -c -o dr_0f.obj `if test -f 'descriptors/dr_0f.c'; then $(CYGPATH_W) 'descriptors/dr_0f.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_0f.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_0f.Tpo $(DEPDIR)/dr_0f.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_0f.c' object='dr_0f.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_0f.obj `if test -f 'descriptors/dr_0f.c'; then $(CYGPATH_W) 'descriptors/dr_0f.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_0f.c'; fi` dr_13.o: descriptors/dr_13.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_13.o -MD -MP -MF $(DEPDIR)/dr_13.Tpo -c -o dr_13.o `test -f 'descriptors/dr_13.c' || echo '$(srcdir)/'`descriptors/dr_13.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_13.Tpo $(DEPDIR)/dr_13.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_13.c' object='dr_13.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_13.o `test -f 'descriptors/dr_13.c' || echo '$(srcdir)/'`descriptors/dr_13.c dr_13.obj: descriptors/dr_13.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_13.obj -MD -MP -MF $(DEPDIR)/dr_13.Tpo -c -o dr_13.obj `if test -f 'descriptors/dr_13.c'; then $(CYGPATH_W) 'descriptors/dr_13.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_13.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_13.Tpo $(DEPDIR)/dr_13.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_13.c' object='dr_13.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_13.obj `if test -f 'descriptors/dr_13.c'; then $(CYGPATH_W) 'descriptors/dr_13.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_13.c'; fi` dr_14.o: descriptors/dr_14.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_14.o -MD -MP -MF $(DEPDIR)/dr_14.Tpo -c -o dr_14.o `test -f 'descriptors/dr_14.c' || echo '$(srcdir)/'`descriptors/dr_14.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_14.Tpo $(DEPDIR)/dr_14.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_14.c' object='dr_14.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_14.o `test -f 'descriptors/dr_14.c' || echo '$(srcdir)/'`descriptors/dr_14.c dr_14.obj: descriptors/dr_14.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_14.obj -MD -MP -MF $(DEPDIR)/dr_14.Tpo -c -o dr_14.obj `if test -f 'descriptors/dr_14.c'; then $(CYGPATH_W) 'descriptors/dr_14.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_14.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_14.Tpo $(DEPDIR)/dr_14.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_14.c' object='dr_14.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_14.obj `if test -f 'descriptors/dr_14.c'; then $(CYGPATH_W) 'descriptors/dr_14.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_14.c'; fi` dr_83.o: descriptors/dr_83.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_83.o -MD -MP -MF $(DEPDIR)/dr_83.Tpo -c -o dr_83.o `test -f 'descriptors/dr_83.c' || echo '$(srcdir)/'`descriptors/dr_83.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_83.Tpo $(DEPDIR)/dr_83.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_83.c' object='dr_83.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_83.o `test -f 'descriptors/dr_83.c' || echo '$(srcdir)/'`descriptors/dr_83.c dr_83.obj: descriptors/dr_83.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_83.obj -MD -MP -MF $(DEPDIR)/dr_83.Tpo -c -o dr_83.obj `if test -f 'descriptors/dr_83.c'; then $(CYGPATH_W) 'descriptors/dr_83.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_83.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_83.Tpo $(DEPDIR)/dr_83.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_83.c' object='dr_83.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_83.obj `if test -f 'descriptors/dr_83.c'; then $(CYGPATH_W) 'descriptors/dr_83.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_83.c'; fi` pat.o: tables/pat.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pat.o -MD -MP -MF $(DEPDIR)/pat.Tpo -c -o pat.o `test -f 'tables/pat.c' || echo '$(srcdir)/'`tables/pat.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/pat.Tpo $(DEPDIR)/pat.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/pat.c' object='pat.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pat.o `test -f 'tables/pat.c' || echo '$(srcdir)/'`tables/pat.c pat.obj: tables/pat.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pat.obj -MD -MP -MF $(DEPDIR)/pat.Tpo -c -o pat.obj `if test -f 'tables/pat.c'; then $(CYGPATH_W) 'tables/pat.c'; else $(CYGPATH_W) '$(srcdir)/tables/pat.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/pat.Tpo $(DEPDIR)/pat.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/pat.c' object='pat.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pat.obj `if test -f 'tables/pat.c'; then $(CYGPATH_W) 'tables/pat.c'; else $(CYGPATH_W) '$(srcdir)/tables/pat.c'; fi` pmt.o: tables/pmt.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pmt.o -MD -MP -MF $(DEPDIR)/pmt.Tpo -c -o pmt.o `test -f 'tables/pmt.c' || echo '$(srcdir)/'`tables/pmt.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/pmt.Tpo $(DEPDIR)/pmt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/pmt.c' object='pmt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pmt.o `test -f 'tables/pmt.c' || echo '$(srcdir)/'`tables/pmt.c pmt.obj: tables/pmt.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pmt.obj -MD -MP -MF $(DEPDIR)/pmt.Tpo -c -o pmt.obj `if test -f 'tables/pmt.c'; then $(CYGPATH_W) 'tables/pmt.c'; else $(CYGPATH_W) '$(srcdir)/tables/pmt.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/pmt.Tpo $(DEPDIR)/pmt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/pmt.c' object='pmt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pmt.obj `if test -f 'tables/pmt.c'; then $(CYGPATH_W) 'tables/pmt.c'; else $(CYGPATH_W) '$(srcdir)/tables/pmt.c'; fi` cat.o: tables/cat.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cat.o -MD -MP -MF $(DEPDIR)/cat.Tpo -c -o cat.o `test -f 'tables/cat.c' || echo '$(srcdir)/'`tables/cat.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/cat.Tpo $(DEPDIR)/cat.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/cat.c' object='cat.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cat.o `test -f 'tables/cat.c' || echo '$(srcdir)/'`tables/cat.c cat.obj: tables/cat.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cat.obj -MD -MP -MF $(DEPDIR)/cat.Tpo -c -o cat.obj `if test -f 'tables/cat.c'; then $(CYGPATH_W) 'tables/cat.c'; else $(CYGPATH_W) '$(srcdir)/tables/cat.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/cat.Tpo $(DEPDIR)/cat.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/cat.c' object='cat.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cat.obj `if test -f 'tables/cat.c'; then $(CYGPATH_W) 'tables/cat.c'; else $(CYGPATH_W) '$(srcdir)/tables/cat.c'; fi` eit.o: tables/eit.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT eit.o -MD -MP -MF $(DEPDIR)/eit.Tpo -c -o eit.o `test -f 'tables/eit.c' || echo '$(srcdir)/'`tables/eit.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/eit.Tpo $(DEPDIR)/eit.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/eit.c' object='eit.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o eit.o `test -f 'tables/eit.c' || echo '$(srcdir)/'`tables/eit.c eit.obj: tables/eit.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT eit.obj -MD -MP -MF $(DEPDIR)/eit.Tpo -c -o eit.obj `if test -f 'tables/eit.c'; then $(CYGPATH_W) 'tables/eit.c'; else $(CYGPATH_W) '$(srcdir)/tables/eit.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/eit.Tpo $(DEPDIR)/eit.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/eit.c' object='eit.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o eit.obj `if test -f 'tables/eit.c'; then $(CYGPATH_W) 'tables/eit.c'; else $(CYGPATH_W) '$(srcdir)/tables/eit.c'; fi` sdt.o: tables/sdt.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sdt.o -MD -MP -MF $(DEPDIR)/sdt.Tpo -c -o sdt.o `test -f 'tables/sdt.c' || echo '$(srcdir)/'`tables/sdt.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/sdt.Tpo $(DEPDIR)/sdt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/sdt.c' object='sdt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sdt.o `test -f 'tables/sdt.c' || echo '$(srcdir)/'`tables/sdt.c sdt.obj: tables/sdt.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sdt.obj -MD -MP -MF $(DEPDIR)/sdt.Tpo -c -o sdt.obj `if test -f 'tables/sdt.c'; then $(CYGPATH_W) 'tables/sdt.c'; else $(CYGPATH_W) '$(srcdir)/tables/sdt.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/sdt.Tpo $(DEPDIR)/sdt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/sdt.c' object='sdt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sdt.obj `if test -f 'tables/sdt.c'; then $(CYGPATH_W) 'tables/sdt.c'; else $(CYGPATH_W) '$(srcdir)/tables/sdt.c'; fi` nit.o: tables/nit.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nit.o -MD -MP -MF $(DEPDIR)/nit.Tpo -c -o nit.o `test -f 'tables/nit.c' || echo '$(srcdir)/'`tables/nit.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/nit.Tpo $(DEPDIR)/nit.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/nit.c' object='nit.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nit.o `test -f 'tables/nit.c' || echo '$(srcdir)/'`tables/nit.c nit.obj: tables/nit.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nit.obj -MD -MP -MF $(DEPDIR)/nit.Tpo -c -o nit.obj `if test -f 'tables/nit.c'; then $(CYGPATH_W) 'tables/nit.c'; else $(CYGPATH_W) '$(srcdir)/tables/nit.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/nit.Tpo $(DEPDIR)/nit.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/nit.c' object='nit.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nit.obj `if test -f 'tables/nit.c'; then $(CYGPATH_W) 'tables/nit.c'; else $(CYGPATH_W) '$(srcdir)/tables/nit.c'; fi` tdttot.o: tables/tdttot.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tdttot.o -MD -MP -MF $(DEPDIR)/tdttot.Tpo -c -o tdttot.o `test -f 'tables/tdttot.c' || echo '$(srcdir)/'`tables/tdttot.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tdttot.Tpo $(DEPDIR)/tdttot.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/tdttot.c' object='tdttot.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tdttot.o `test -f 'tables/tdttot.c' || echo '$(srcdir)/'`tables/tdttot.c tdttot.obj: tables/tdttot.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tdttot.obj -MD -MP -MF $(DEPDIR)/tdttot.Tpo -c -o tdttot.obj `if test -f 'tables/tdttot.c'; then $(CYGPATH_W) 'tables/tdttot.c'; else $(CYGPATH_W) '$(srcdir)/tables/tdttot.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tdttot.Tpo $(DEPDIR)/tdttot.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/tdttot.c' object='tdttot.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tdttot.obj `if test -f 'tables/tdttot.c'; then $(CYGPATH_W) 'tables/tdttot.c'; else $(CYGPATH_W) '$(srcdir)/tables/tdttot.c'; fi` dr_42.o: descriptors/dr_42.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_42.o -MD -MP -MF $(DEPDIR)/dr_42.Tpo -c -o dr_42.o `test -f 'descriptors/dr_42.c' || echo '$(srcdir)/'`descriptors/dr_42.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_42.Tpo $(DEPDIR)/dr_42.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_42.c' object='dr_42.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_42.o `test -f 'descriptors/dr_42.c' || echo '$(srcdir)/'`descriptors/dr_42.c dr_42.obj: descriptors/dr_42.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_42.obj -MD -MP -MF $(DEPDIR)/dr_42.Tpo -c -o dr_42.obj `if test -f 'descriptors/dr_42.c'; then $(CYGPATH_W) 'descriptors/dr_42.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_42.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_42.Tpo $(DEPDIR)/dr_42.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_42.c' object='dr_42.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_42.obj `if test -f 'descriptors/dr_42.c'; then $(CYGPATH_W) 'descriptors/dr_42.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_42.c'; fi` dr_43.o: descriptors/dr_43.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_43.o -MD -MP -MF $(DEPDIR)/dr_43.Tpo -c -o dr_43.o `test -f 'descriptors/dr_43.c' || echo '$(srcdir)/'`descriptors/dr_43.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_43.Tpo $(DEPDIR)/dr_43.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_43.c' object='dr_43.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_43.o `test -f 'descriptors/dr_43.c' || echo '$(srcdir)/'`descriptors/dr_43.c dr_43.obj: descriptors/dr_43.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_43.obj -MD -MP -MF $(DEPDIR)/dr_43.Tpo -c -o dr_43.obj `if test -f 'descriptors/dr_43.c'; then $(CYGPATH_W) 'descriptors/dr_43.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_43.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_43.Tpo $(DEPDIR)/dr_43.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_43.c' object='dr_43.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_43.obj `if test -f 'descriptors/dr_43.c'; then $(CYGPATH_W) 'descriptors/dr_43.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_43.c'; fi` dr_47.o: descriptors/dr_47.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_47.o -MD -MP -MF $(DEPDIR)/dr_47.Tpo -c -o dr_47.o `test -f 'descriptors/dr_47.c' || echo '$(srcdir)/'`descriptors/dr_47.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_47.Tpo $(DEPDIR)/dr_47.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_47.c' object='dr_47.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_47.o `test -f 'descriptors/dr_47.c' || echo '$(srcdir)/'`descriptors/dr_47.c dr_47.obj: descriptors/dr_47.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_47.obj -MD -MP -MF $(DEPDIR)/dr_47.Tpo -c -o dr_47.obj `if test -f 'descriptors/dr_47.c'; then $(CYGPATH_W) 'descriptors/dr_47.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_47.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_47.Tpo $(DEPDIR)/dr_47.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_47.c' object='dr_47.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_47.obj `if test -f 'descriptors/dr_47.c'; then $(CYGPATH_W) 'descriptors/dr_47.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_47.c'; fi` dr_48.o: descriptors/dr_48.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_48.o -MD -MP -MF $(DEPDIR)/dr_48.Tpo -c -o dr_48.o `test -f 'descriptors/dr_48.c' || echo '$(srcdir)/'`descriptors/dr_48.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_48.Tpo $(DEPDIR)/dr_48.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_48.c' object='dr_48.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_48.o `test -f 'descriptors/dr_48.c' || echo '$(srcdir)/'`descriptors/dr_48.c dr_48.obj: descriptors/dr_48.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_48.obj -MD -MP -MF $(DEPDIR)/dr_48.Tpo -c -o dr_48.obj `if test -f 'descriptors/dr_48.c'; then $(CYGPATH_W) 'descriptors/dr_48.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_48.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_48.Tpo $(DEPDIR)/dr_48.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_48.c' object='dr_48.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_48.obj `if test -f 'descriptors/dr_48.c'; then $(CYGPATH_W) 'descriptors/dr_48.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_48.c'; fi` dr_4d.o: descriptors/dr_4d.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_4d.o -MD -MP -MF $(DEPDIR)/dr_4d.Tpo -c -o dr_4d.o `test -f 'descriptors/dr_4d.c' || echo '$(srcdir)/'`descriptors/dr_4d.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_4d.Tpo $(DEPDIR)/dr_4d.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_4d.c' object='dr_4d.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_4d.o `test -f 'descriptors/dr_4d.c' || echo '$(srcdir)/'`descriptors/dr_4d.c dr_4d.obj: descriptors/dr_4d.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_4d.obj -MD -MP -MF $(DEPDIR)/dr_4d.Tpo -c -o dr_4d.obj `if test -f 'descriptors/dr_4d.c'; then $(CYGPATH_W) 'descriptors/dr_4d.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_4d.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_4d.Tpo $(DEPDIR)/dr_4d.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_4d.c' object='dr_4d.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_4d.obj `if test -f 'descriptors/dr_4d.c'; then $(CYGPATH_W) 'descriptors/dr_4d.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_4d.c'; fi` dr_4e.o: descriptors/dr_4e.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_4e.o -MD -MP -MF $(DEPDIR)/dr_4e.Tpo -c -o dr_4e.o `test -f 'descriptors/dr_4e.c' || echo '$(srcdir)/'`descriptors/dr_4e.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_4e.Tpo $(DEPDIR)/dr_4e.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_4e.c' object='dr_4e.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_4e.o `test -f 'descriptors/dr_4e.c' || echo '$(srcdir)/'`descriptors/dr_4e.c dr_4e.obj: descriptors/dr_4e.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_4e.obj -MD -MP -MF $(DEPDIR)/dr_4e.Tpo -c -o dr_4e.obj `if test -f 'descriptors/dr_4e.c'; then $(CYGPATH_W) 'descriptors/dr_4e.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_4e.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_4e.Tpo $(DEPDIR)/dr_4e.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_4e.c' object='dr_4e.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_4e.obj `if test -f 'descriptors/dr_4e.c'; then $(CYGPATH_W) 'descriptors/dr_4e.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_4e.c'; fi` dr_52.o: descriptors/dr_52.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_52.o -MD -MP -MF $(DEPDIR)/dr_52.Tpo -c -o dr_52.o `test -f 'descriptors/dr_52.c' || echo '$(srcdir)/'`descriptors/dr_52.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_52.Tpo $(DEPDIR)/dr_52.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_52.c' object='dr_52.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_52.o `test -f 'descriptors/dr_52.c' || echo '$(srcdir)/'`descriptors/dr_52.c dr_52.obj: descriptors/dr_52.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_52.obj -MD -MP -MF $(DEPDIR)/dr_52.Tpo -c -o dr_52.obj `if test -f 'descriptors/dr_52.c'; then $(CYGPATH_W) 'descriptors/dr_52.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_52.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_52.Tpo $(DEPDIR)/dr_52.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_52.c' object='dr_52.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_52.obj `if test -f 'descriptors/dr_52.c'; then $(CYGPATH_W) 'descriptors/dr_52.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_52.c'; fi` dr_55.o: descriptors/dr_55.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_55.o -MD -MP -MF $(DEPDIR)/dr_55.Tpo -c -o dr_55.o `test -f 'descriptors/dr_55.c' || echo '$(srcdir)/'`descriptors/dr_55.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_55.Tpo $(DEPDIR)/dr_55.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_55.c' object='dr_55.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_55.o `test -f 'descriptors/dr_55.c' || echo '$(srcdir)/'`descriptors/dr_55.c dr_55.obj: descriptors/dr_55.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_55.obj -MD -MP -MF $(DEPDIR)/dr_55.Tpo -c -o dr_55.obj `if test -f 'descriptors/dr_55.c'; then $(CYGPATH_W) 'descriptors/dr_55.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_55.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_55.Tpo $(DEPDIR)/dr_55.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_55.c' object='dr_55.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_55.obj `if test -f 'descriptors/dr_55.c'; then $(CYGPATH_W) 'descriptors/dr_55.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_55.c'; fi` dr_56.o: descriptors/dr_56.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_56.o -MD -MP -MF $(DEPDIR)/dr_56.Tpo -c -o dr_56.o `test -f 'descriptors/dr_56.c' || echo '$(srcdir)/'`descriptors/dr_56.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_56.Tpo $(DEPDIR)/dr_56.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_56.c' object='dr_56.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_56.o `test -f 'descriptors/dr_56.c' || echo '$(srcdir)/'`descriptors/dr_56.c dr_56.obj: descriptors/dr_56.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_56.obj -MD -MP -MF $(DEPDIR)/dr_56.Tpo -c -o dr_56.obj `if test -f 'descriptors/dr_56.c'; then $(CYGPATH_W) 'descriptors/dr_56.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_56.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_56.Tpo $(DEPDIR)/dr_56.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_56.c' object='dr_56.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_56.obj `if test -f 'descriptors/dr_56.c'; then $(CYGPATH_W) 'descriptors/dr_56.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_56.c'; fi` dr_59.o: descriptors/dr_59.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_59.o -MD -MP -MF $(DEPDIR)/dr_59.Tpo -c -o dr_59.o `test -f 'descriptors/dr_59.c' || echo '$(srcdir)/'`descriptors/dr_59.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_59.Tpo $(DEPDIR)/dr_59.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_59.c' object='dr_59.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_59.o `test -f 'descriptors/dr_59.c' || echo '$(srcdir)/'`descriptors/dr_59.c dr_59.obj: descriptors/dr_59.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_59.obj -MD -MP -MF $(DEPDIR)/dr_59.Tpo -c -o dr_59.obj `if test -f 'descriptors/dr_59.c'; then $(CYGPATH_W) 'descriptors/dr_59.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_59.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_59.Tpo $(DEPDIR)/dr_59.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_59.c' object='dr_59.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_59.obj `if test -f 'descriptors/dr_59.c'; then $(CYGPATH_W) 'descriptors/dr_59.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_59.c'; fi` dr_5a.o: descriptors/dr_5a.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_5a.o -MD -MP -MF $(DEPDIR)/dr_5a.Tpo -c -o dr_5a.o `test -f 'descriptors/dr_5a.c' || echo '$(srcdir)/'`descriptors/dr_5a.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_5a.Tpo $(DEPDIR)/dr_5a.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_5a.c' object='dr_5a.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_5a.o `test -f 'descriptors/dr_5a.c' || echo '$(srcdir)/'`descriptors/dr_5a.c dr_5a.obj: descriptors/dr_5a.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_5a.obj -MD -MP -MF $(DEPDIR)/dr_5a.Tpo -c -o dr_5a.obj `if test -f 'descriptors/dr_5a.c'; then $(CYGPATH_W) 'descriptors/dr_5a.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_5a.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_5a.Tpo $(DEPDIR)/dr_5a.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_5a.c' object='dr_5a.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_5a.obj `if test -f 'descriptors/dr_5a.c'; then $(CYGPATH_W) 'descriptors/dr_5a.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_5a.c'; fi` dr_62.o: descriptors/dr_62.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_62.o -MD -MP -MF $(DEPDIR)/dr_62.Tpo -c -o dr_62.o `test -f 'descriptors/dr_62.c' || echo '$(srcdir)/'`descriptors/dr_62.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_62.Tpo $(DEPDIR)/dr_62.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_62.c' object='dr_62.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_62.o `test -f 'descriptors/dr_62.c' || echo '$(srcdir)/'`descriptors/dr_62.c dr_62.obj: descriptors/dr_62.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_62.obj -MD -MP -MF $(DEPDIR)/dr_62.Tpo -c -o dr_62.obj `if test -f 'descriptors/dr_62.c'; then $(CYGPATH_W) 'descriptors/dr_62.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_62.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_62.Tpo $(DEPDIR)/dr_62.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_62.c' object='dr_62.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_62.obj `if test -f 'descriptors/dr_62.c'; then $(CYGPATH_W) 'descriptors/dr_62.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_62.c'; fi` dr_66.o: descriptors/dr_66.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_66.o -MD -MP -MF $(DEPDIR)/dr_66.Tpo -c -o dr_66.o `test -f 'descriptors/dr_66.c' || echo '$(srcdir)/'`descriptors/dr_66.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_66.Tpo $(DEPDIR)/dr_66.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_66.c' object='dr_66.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_66.o `test -f 'descriptors/dr_66.c' || echo '$(srcdir)/'`descriptors/dr_66.c dr_66.obj: descriptors/dr_66.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_66.obj -MD -MP -MF $(DEPDIR)/dr_66.Tpo -c -o dr_66.obj `if test -f 'descriptors/dr_66.c'; then $(CYGPATH_W) 'descriptors/dr_66.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_66.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_66.Tpo $(DEPDIR)/dr_66.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_66.c' object='dr_66.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_66.obj `if test -f 'descriptors/dr_66.c'; then $(CYGPATH_W) 'descriptors/dr_66.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_66.c'; fi` dr_69.o: descriptors/dr_69.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_69.o -MD -MP -MF $(DEPDIR)/dr_69.Tpo -c -o dr_69.o `test -f 'descriptors/dr_69.c' || echo '$(srcdir)/'`descriptors/dr_69.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_69.Tpo $(DEPDIR)/dr_69.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_69.c' object='dr_69.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_69.o `test -f 'descriptors/dr_69.c' || echo '$(srcdir)/'`descriptors/dr_69.c dr_69.obj: descriptors/dr_69.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_69.obj -MD -MP -MF $(DEPDIR)/dr_69.Tpo -c -o dr_69.obj `if test -f 'descriptors/dr_69.c'; then $(CYGPATH_W) 'descriptors/dr_69.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_69.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_69.Tpo $(DEPDIR)/dr_69.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_69.c' object='dr_69.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_69.obj `if test -f 'descriptors/dr_69.c'; then $(CYGPATH_W) 'descriptors/dr_69.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_69.c'; fi` dr_73.o: descriptors/dr_73.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_73.o -MD -MP -MF $(DEPDIR)/dr_73.Tpo -c -o dr_73.o `test -f 'descriptors/dr_73.c' || echo '$(srcdir)/'`descriptors/dr_73.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_73.Tpo $(DEPDIR)/dr_73.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_73.c' object='dr_73.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_73.o `test -f 'descriptors/dr_73.c' || echo '$(srcdir)/'`descriptors/dr_73.c dr_73.obj: descriptors/dr_73.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_73.obj -MD -MP -MF $(DEPDIR)/dr_73.Tpo -c -o dr_73.obj `if test -f 'descriptors/dr_73.c'; then $(CYGPATH_W) 'descriptors/dr_73.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_73.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_73.Tpo $(DEPDIR)/dr_73.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_73.c' object='dr_73.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_73.obj `if test -f 'descriptors/dr_73.c'; then $(CYGPATH_W) 'descriptors/dr_73.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_73.c'; fi` dr_76.o: descriptors/dr_76.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_76.o -MD -MP -MF $(DEPDIR)/dr_76.Tpo -c -o dr_76.o `test -f 'descriptors/dr_76.c' || echo '$(srcdir)/'`descriptors/dr_76.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_76.Tpo $(DEPDIR)/dr_76.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_76.c' object='dr_76.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_76.o `test -f 'descriptors/dr_76.c' || echo '$(srcdir)/'`descriptors/dr_76.c dr_76.obj: descriptors/dr_76.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dr_76.obj -MD -MP -MF $(DEPDIR)/dr_76.Tpo -c -o dr_76.obj `if test -f 'descriptors/dr_76.c'; then $(CYGPATH_W) 'descriptors/dr_76.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_76.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dr_76.Tpo $(DEPDIR)/dr_76.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors/dr_76.c' object='dr_76.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dr_76.obj `if test -f 'descriptors/dr_76.c'; then $(CYGPATH_W) 'descriptors/dr_76.c'; else $(CYGPATH_W) '$(srcdir)/descriptors/dr_76.c'; fi` atsc_mgt.o: tables/atsc_mgt.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atsc_mgt.o -MD -MP -MF $(DEPDIR)/atsc_mgt.Tpo -c -o atsc_mgt.o `test -f 'tables/atsc_mgt.c' || echo '$(srcdir)/'`tables/atsc_mgt.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/atsc_mgt.Tpo $(DEPDIR)/atsc_mgt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/atsc_mgt.c' object='atsc_mgt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atsc_mgt.o `test -f 'tables/atsc_mgt.c' || echo '$(srcdir)/'`tables/atsc_mgt.c atsc_mgt.obj: tables/atsc_mgt.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atsc_mgt.obj -MD -MP -MF $(DEPDIR)/atsc_mgt.Tpo -c -o atsc_mgt.obj `if test -f 'tables/atsc_mgt.c'; then $(CYGPATH_W) 'tables/atsc_mgt.c'; else $(CYGPATH_W) '$(srcdir)/tables/atsc_mgt.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/atsc_mgt.Tpo $(DEPDIR)/atsc_mgt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/atsc_mgt.c' object='atsc_mgt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atsc_mgt.obj `if test -f 'tables/atsc_mgt.c'; then $(CYGPATH_W) 'tables/atsc_mgt.c'; else $(CYGPATH_W) '$(srcdir)/tables/atsc_mgt.c'; fi` atsc_stt.o: tables/atsc_stt.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atsc_stt.o -MD -MP -MF $(DEPDIR)/atsc_stt.Tpo -c -o atsc_stt.o `test -f 'tables/atsc_stt.c' || echo '$(srcdir)/'`tables/atsc_stt.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/atsc_stt.Tpo $(DEPDIR)/atsc_stt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/atsc_stt.c' object='atsc_stt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atsc_stt.o `test -f 'tables/atsc_stt.c' || echo '$(srcdir)/'`tables/atsc_stt.c atsc_stt.obj: tables/atsc_stt.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atsc_stt.obj -MD -MP -MF $(DEPDIR)/atsc_stt.Tpo -c -o atsc_stt.obj `if test -f 'tables/atsc_stt.c'; then $(CYGPATH_W) 'tables/atsc_stt.c'; else $(CYGPATH_W) '$(srcdir)/tables/atsc_stt.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/atsc_stt.Tpo $(DEPDIR)/atsc_stt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/atsc_stt.c' object='atsc_stt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atsc_stt.obj `if test -f 'tables/atsc_stt.c'; then $(CYGPATH_W) 'tables/atsc_stt.c'; else $(CYGPATH_W) '$(srcdir)/tables/atsc_stt.c'; fi` atsc_vct.o: tables/atsc_vct.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atsc_vct.o -MD -MP -MF $(DEPDIR)/atsc_vct.Tpo -c -o atsc_vct.o `test -f 'tables/atsc_vct.c' || echo '$(srcdir)/'`tables/atsc_vct.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/atsc_vct.Tpo $(DEPDIR)/atsc_vct.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/atsc_vct.c' object='atsc_vct.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atsc_vct.o `test -f 'tables/atsc_vct.c' || echo '$(srcdir)/'`tables/atsc_vct.c atsc_vct.obj: tables/atsc_vct.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atsc_vct.obj -MD -MP -MF $(DEPDIR)/atsc_vct.Tpo -c -o atsc_vct.obj `if test -f 'tables/atsc_vct.c'; then $(CYGPATH_W) 'tables/atsc_vct.c'; else $(CYGPATH_W) '$(srcdir)/tables/atsc_vct.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/atsc_vct.Tpo $(DEPDIR)/atsc_vct.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/atsc_vct.c' object='atsc_vct.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atsc_vct.obj `if test -f 'tables/atsc_vct.c'; then $(CYGPATH_W) 'tables/atsc_vct.c'; else $(CYGPATH_W) '$(srcdir)/tables/atsc_vct.c'; fi` atsc_eit.o: tables/atsc_eit.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atsc_eit.o -MD -MP -MF $(DEPDIR)/atsc_eit.Tpo -c -o atsc_eit.o `test -f 'tables/atsc_eit.c' || echo '$(srcdir)/'`tables/atsc_eit.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/atsc_eit.Tpo $(DEPDIR)/atsc_eit.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/atsc_eit.c' object='atsc_eit.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atsc_eit.o `test -f 'tables/atsc_eit.c' || echo '$(srcdir)/'`tables/atsc_eit.c atsc_eit.obj: tables/atsc_eit.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atsc_eit.obj -MD -MP -MF $(DEPDIR)/atsc_eit.Tpo -c -o atsc_eit.obj `if test -f 'tables/atsc_eit.c'; then $(CYGPATH_W) 'tables/atsc_eit.c'; else $(CYGPATH_W) '$(srcdir)/tables/atsc_eit.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/atsc_eit.Tpo $(DEPDIR)/atsc_eit.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/atsc_eit.c' object='atsc_eit.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atsc_eit.obj `if test -f 'tables/atsc_eit.c'; then $(CYGPATH_W) 'tables/atsc_eit.c'; else $(CYGPATH_W) '$(srcdir)/tables/atsc_eit.c'; fi` atsc_ett.o: tables/atsc_ett.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atsc_ett.o -MD -MP -MF $(DEPDIR)/atsc_ett.Tpo -c -o atsc_ett.o `test -f 'tables/atsc_ett.c' || echo '$(srcdir)/'`tables/atsc_ett.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/atsc_ett.Tpo $(DEPDIR)/atsc_ett.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/atsc_ett.c' object='atsc_ett.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atsc_ett.o `test -f 'tables/atsc_ett.c' || echo '$(srcdir)/'`tables/atsc_ett.c atsc_ett.obj: tables/atsc_ett.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atsc_ett.obj -MD -MP -MF $(DEPDIR)/atsc_ett.Tpo -c -o atsc_ett.obj `if test -f 'tables/atsc_ett.c'; then $(CYGPATH_W) 'tables/atsc_ett.c'; else $(CYGPATH_W) '$(srcdir)/tables/atsc_ett.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/atsc_ett.Tpo $(DEPDIR)/atsc_ett.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tables/atsc_ett.c' object='atsc_ett.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atsc_ett.obj `if test -f 'tables/atsc_ett.c'; then $(CYGPATH_W) 'tables/atsc_ett.c'; else $(CYGPATH_W) '$(srcdir)/tables/atsc_ett.c'; fi` 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 $(LIBRARIES) 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-noinstLIBRARIES \ 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: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLIBRARIES 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 # 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: dvbstreamer-2.1.0/src/dvbpsi/datetime.c000077500000000000000000000032501217721213100200460ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA datetime.h Date and Time decoding functions. */ #include "config.h" #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "datetime.h" #include "string.h" #define MJD_UNIX_EPOCH 40587 #define SECS_PER_MIN 60 #define SECS_PER_HOUR (SECS_PER_MIN * 60) #define SECS_PER_DAY (SECS_PER_HOUR * 24) void dvbpsi_DecodeMJDUTC(uint8_t *p_mjdutc, struct tm *p_date_time) { #define BCD_CHAR_TO_INT(_bcd) (((_bcd >> 4) * 10) + (_bcd & 0x0f)) time_t secs; uint16_t i_mjd = (((uint16_t)p_mjdutc[0] << 8) | (uint16_t)(p_mjdutc[1] & 0xff)); secs = (time_t)(((uint32_t)i_mjd - MJD_UNIX_EPOCH) * SECS_PER_DAY); secs += (BCD_CHAR_TO_INT(p_mjdutc[2])) * SECS_PER_HOUR+ (BCD_CHAR_TO_INT(p_mjdutc[3])) * SECS_PER_MIN+ (BCD_CHAR_TO_INT(p_mjdutc[4])); memcpy(p_date_time, gmtime(&secs), sizeof(struct tm)); } dvbstreamer-2.1.0/src/dvbpsi/demux.c000066400000000000000000000132611217721213100173740ustar00rootroot00000000000000/***************************************************************************** * demux.c: DVB subtables demux functions. *---------------------------------------------------------------------------- * (c)2001-2002 VideoLAN * $Id: demux.c 108 2005-04-19 12:33:21Z gbazin $ * * Authors: Johan Bilien * * 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. * *---------------------------------------------------------------------------- * *****************************************************************************/ #include "config.h" #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "dvbpsi_private.h" #include "psi.h" #include "demux.h" /***************************************************************************** * dvbpsi_AttachDemux ***************************************************************************** * Creation of the demux structure *****************************************************************************/ dvbpsi_handle dvbpsi_AttachDemux(dvbpsi_demux_new_cb_t pf_new_cb, void * p_new_cb_data) { dvbpsi_handle h_dvbpsi = (dvbpsi_decoder_t*)malloc(sizeof(dvbpsi_decoder_t)); dvbpsi_demux_t * p_demux; if(h_dvbpsi == NULL) return NULL; p_demux = (dvbpsi_demux_t*)malloc(sizeof(dvbpsi_demux_t)); if(p_demux == NULL) { free(h_dvbpsi); return NULL; } /* PSI decoder configuration */ h_dvbpsi->pf_callback = &dvbpsi_Demux; h_dvbpsi->p_private_decoder = p_demux; h_dvbpsi->i_section_max_size = 4096; /* PSI decoder initial state */ h_dvbpsi->i_continuity_counter = 31; h_dvbpsi->b_discontinuity = 1; h_dvbpsi->p_current_section = NULL; h_dvbpsi->p_free_sections = NULL; /* Sutables demux configuration */ p_demux->p_decoder = h_dvbpsi; p_demux->p_first_subdec = NULL; p_demux->pf_new_callback = pf_new_cb; p_demux->p_new_cb_data = p_new_cb_data; return h_dvbpsi; } /***************************************************************************** * dvbpsi_demuxGetSubDec ***************************************************************************** * Finds a subtable decoder given the table id and extension *****************************************************************************/ dvbpsi_demux_subdec_t * dvbpsi_demuxGetSubDec(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_t i_extension) { uint32_t i_id = (uint32_t)i_table_id << 16 |(uint32_t)i_extension; dvbpsi_demux_subdec_t * p_subdec = p_demux->p_first_subdec; while(p_subdec) { if(p_subdec->i_id == i_id) break; p_subdec = p_subdec->p_next; } return p_subdec; } /***************************************************************************** * dvbpsi_Demux ***************************************************************************** * Sends a PSI section to the right subtable decoder *****************************************************************************/ void dvbpsi_Demux(dvbpsi_handle p_decoder, dvbpsi_psi_section_t * p_section) { dvbpsi_demux_t * p_demux; dvbpsi_demux_subdec_t * p_subdec; p_demux = (dvbpsi_demux_t *)p_decoder->p_private_decoder; p_subdec = dvbpsi_demuxGetSubDec(p_demux, p_section->i_table_id, p_section->i_extension); if(p_subdec == NULL) { /* Tell the application we found a new subtable, so that it may attach a * subtable decoder */ p_demux->pf_new_callback(p_demux->p_new_cb_data, p_decoder, p_section->i_table_id, p_section->i_extension); /* Check if a new subtable decoder is available */ p_subdec = dvbpsi_demuxGetSubDec(p_demux, p_section->i_table_id, p_section->i_extension); } if(p_subdec) { p_subdec->pf_callback(p_demux->p_decoder, p_subdec->p_cb_data, p_section); } else { dvbpsi_ReleasePSISections(p_decoder, p_section); } } /***************************************************************************** * dvbpsi_DetachDemux ***************************************************************************** * Destroys a demux structure *****************************************************************************/ void dvbpsi_DetachDemux(dvbpsi_handle h_dvbpsi) { dvbpsi_demux_t* p_demux = (dvbpsi_demux_t*)h_dvbpsi->p_private_decoder; dvbpsi_demux_subdec_t* p_subdec = p_demux->p_first_subdec; dvbpsi_demux_subdec_t* p_subdec_temp; while(p_subdec) { p_subdec_temp = p_subdec; p_subdec = p_subdec->p_next; if(p_subdec_temp->pf_detach) p_subdec_temp->pf_detach(p_demux, (p_subdec_temp->i_id >> 16) & 0xFFFF, p_subdec_temp->i_id & 0xFFFF); else free(p_subdec_temp); } free(p_demux); if(h_dvbpsi->p_current_section) dvbpsi_DeletePSISections(h_dvbpsi->p_current_section); if(h_dvbpsi->p_free_sections) dvbpsi_DeletePSISections(h_dvbpsi->p_free_sections); free(h_dvbpsi); } dvbstreamer-2.1.0/src/dvbpsi/descriptor.c000066400000000000000000000061201217721213100204240ustar00rootroot00000000000000/***************************************************************************** * descriptor.c: descriptors functions *---------------------------------------------------------------------------- * (c)2001-2002 VideoLAN * $Id: descriptor.c 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *---------------------------------------------------------------------------- * *****************************************************************************/ #include "config.h" #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "descriptor.h" /***************************************************************************** * dvbpsi_NewDescriptor ***************************************************************************** * Creation of a new dvbpsi_descriptor_t structure. *****************************************************************************/ dvbpsi_descriptor_t* dvbpsi_NewDescriptor(uint8_t i_tag, uint8_t i_length, uint8_t* p_data) { dvbpsi_descriptor_t* p_descriptor = (dvbpsi_descriptor_t*)malloc(sizeof(dvbpsi_descriptor_t)); if(p_descriptor) { p_descriptor->p_data = (uint8_t*)malloc(i_length * sizeof(uint8_t)); if(p_descriptor->p_data) { p_descriptor->i_tag = i_tag; p_descriptor->i_length = i_length; if(p_data) memcpy(p_descriptor->p_data, p_data, i_length); p_descriptor->p_decoded = NULL; p_descriptor->p_next = NULL; } else { free(p_descriptor); p_descriptor = NULL; } } return p_descriptor; } /***************************************************************************** * dvbpsi_DeleteDescriptors ***************************************************************************** * Destruction of a dvbpsi_descriptor_t structure. *****************************************************************************/ void dvbpsi_DeleteDescriptors(dvbpsi_descriptor_t* p_descriptor) { while(p_descriptor != NULL) { dvbpsi_descriptor_t* p_next = p_descriptor->p_next; if(p_descriptor->p_data != NULL) free(p_descriptor->p_data); if(p_descriptor->p_decoded != NULL) free(p_descriptor->p_decoded); free(p_descriptor); p_descriptor = p_next; } } dvbstreamer-2.1.0/src/dvbpsi/descriptors/000077500000000000000000000000001217721213100204445ustar00rootroot00000000000000dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_02.c000066400000000000000000000111171217721213100215170ustar00rootroot00000000000000/***************************************************************************** * dr_02.c * (c)2001-2002 VideoLAN * $Id: dr_02.c 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_02.h" /***************************************************************************** * dvbpsi_DecodeVStreamDr *****************************************************************************/ dvbpsi_vstream_dr_t * dvbpsi_DecodeVStreamDr(dvbpsi_descriptor_t * p_descriptor) { dvbpsi_vstream_dr_t * p_decoded; /* Check the tag */ if(p_descriptor->i_tag != 0x02) { DVBPSI_ERROR_ARG("dr_02 decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = (dvbpsi_vstream_dr_t*)malloc(sizeof(dvbpsi_vstream_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_02 decoder", "out of memory"); return NULL; } /* Decode data and check the length */ p_decoded->b_mpeg2 = (p_descriptor->p_data[0] & 0x04) ? 1 : 0; if( (!p_decoded->b_mpeg2 && (p_descriptor->i_length != 1)) || (p_decoded->b_mpeg2 && (p_descriptor->i_length != 3))) { DVBPSI_ERROR_ARG("dr_02 decoder", "bad length (%d)", p_descriptor->i_length); free(p_decoded); return NULL; } p_decoded->b_multiple_frame_rate = (p_descriptor->p_data[0] & 0x80) ? 1 : 0; p_decoded->i_frame_rate_code = (p_descriptor->p_data[0] & 0x78) >> 3; p_decoded->b_constrained_parameter = (p_descriptor->p_data[0] & 0x02) ? 1 : 0; p_decoded->b_still_picture = (p_descriptor->p_data[0] & 0x01) ? 1 : 0; if(p_decoded->b_mpeg2) { p_decoded->i_profile_level_indication = p_descriptor->p_data[1]; p_decoded->i_chroma_format = (p_descriptor->p_data[2] & 0xc0) >> 6; p_decoded->b_frame_rate_extension = (p_descriptor->p_data[2] & 0x20) ? 1 : 0; } p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenVStreamDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenVStreamDr(dvbpsi_vstream_dr_t * p_decoded, int b_duplicate) { /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x02, p_decoded->b_mpeg2 ? 3 : 1, NULL); if(p_descriptor) { /* Encode data */ p_descriptor->p_data[0] = 0; if(p_decoded->b_multiple_frame_rate) p_descriptor->p_data[0] |= 0x80; p_descriptor->p_data[0] |= (p_decoded->i_frame_rate_code & 0x0f) << 3; if(p_decoded->b_constrained_parameter) p_descriptor->p_data[0] |= 0x02; if(p_decoded->b_still_picture) p_descriptor->p_data[0] |= 0x01; if(p_decoded->b_mpeg2) { p_descriptor->p_data[0] |= 0x04; p_descriptor->p_data[1] = p_decoded->i_profile_level_indication; p_descriptor->p_data[2] = 0x1f; p_descriptor->p_data[2] |= (p_decoded->i_chroma_format & 0x03) << 6; if(p_decoded->b_frame_rate_extension) p_descriptor->p_data[2] |= 0x20; } if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_vstream_dr_t * p_dup_decoded = (dvbpsi_vstream_dr_t*)malloc(sizeof(dvbpsi_vstream_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_vstream_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_03.c000066400000000000000000000070421217721213100215220ustar00rootroot00000000000000/***************************************************************************** * dr_03.c * (c)2001-2002 VideoLAN * $Id: dr_03.c 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_03.h" /***************************************************************************** * dvbpsi_DecodeAStreamDr *****************************************************************************/ dvbpsi_astream_dr_t * dvbpsi_DecodeAStreamDr(dvbpsi_descriptor_t * p_descriptor) { dvbpsi_astream_dr_t * p_decoded; /* Check the tag */ if(p_descriptor->i_tag != 0x03) { DVBPSI_ERROR_ARG("dr_03 decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = (dvbpsi_astream_dr_t*)malloc(sizeof(dvbpsi_astream_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_03 decoder", "out of memory"); return NULL; } /* Decode data and check the length */ if(p_descriptor->i_length != 1) { DVBPSI_ERROR_ARG("dr_03 decoder", "bad length (%d)", p_descriptor->i_length); free(p_decoded); return NULL; } p_decoded->b_free_format = (p_descriptor->p_data[0] & 0x80) ? 1 : 0; p_decoded->i_id = (p_descriptor->p_data[0] & 0x40) >> 6; p_decoded->i_layer = (p_descriptor->p_data[0] & 0x30) >> 4; p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenAStreamDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenAStreamDr(dvbpsi_astream_dr_t * p_decoded, int b_duplicate) { /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x03, 1, NULL); if(p_descriptor) { /* Encode data */ *p_descriptor->p_data = 0x0f; if(p_decoded->b_free_format) *p_descriptor->p_data |= 0x80; *p_descriptor->p_data |= (p_decoded->i_id & 0x01) << 6; *p_descriptor->p_data |= (p_decoded->i_layer & 0x03) << 4; if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_astream_dr_t * p_dup_decoded = (dvbpsi_astream_dr_t*)malloc(sizeof(dvbpsi_astream_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_astream_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_04.c000066400000000000000000000072661217721213100215330ustar00rootroot00000000000000/***************************************************************************** * dr_04.c * (c)2001-2002 VideoLAN * $Id: dr_04.c 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_04.h" /***************************************************************************** * dvbpsi_DecodeHierarchyDr *****************************************************************************/ dvbpsi_hierarchy_dr_t * dvbpsi_DecodeHierarchyDr( dvbpsi_descriptor_t * p_descriptor) { dvbpsi_hierarchy_dr_t * p_decoded; /* Check the tag */ if(p_descriptor->i_tag != 0x04) { DVBPSI_ERROR_ARG("dr_04 decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = (dvbpsi_hierarchy_dr_t*)malloc(sizeof(dvbpsi_hierarchy_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_04 decoder", "out of memory"); return NULL; } /* Decode data and check the length */ if(p_descriptor->i_length != 4) { DVBPSI_ERROR_ARG("dr_04 decoder", "bad length (%d)", p_descriptor->i_length); free(p_decoded); return NULL; } p_decoded->i_h_type = p_descriptor->p_data[0] & 0x0f; p_decoded->i_h_layer_index = p_descriptor->p_data[1] & 0x3f; p_decoded->i_h_embedded_layer = p_descriptor->p_data[2] & 0x3f; p_decoded->i_h_priority = p_descriptor->p_data[3] & 0x3f; p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenHierarchyDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenHierarchyDr(dvbpsi_hierarchy_dr_t * p_decoded, int b_duplicate) { /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x04, 4, NULL); if(p_descriptor) { /* Encode data */ p_descriptor->p_data[0] = 0xf0 | p_decoded->i_h_type; p_descriptor->p_data[1] = 0xc0 | p_decoded->i_h_layer_index; p_descriptor->p_data[2] = 0xc0 | p_decoded->i_h_embedded_layer; p_descriptor->p_data[3] = 0xc0 | p_decoded->i_h_priority; if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_hierarchy_dr_t * p_dup_decoded = (dvbpsi_hierarchy_dr_t*)malloc(sizeof(dvbpsi_hierarchy_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_hierarchy_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_05.c000066400000000000000000000104331217721213100215220ustar00rootroot00000000000000/***************************************************************************** * dr_05.c * (c)2001-2002 VideoLAN * $Id: dr_05.c 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_05.h" /***************************************************************************** * dvbpsi_DecodeRegistrationDr *****************************************************************************/ dvbpsi_registration_dr_t * dvbpsi_DecodeRegistrationDr( dvbpsi_descriptor_t * p_descriptor) { dvbpsi_registration_dr_t * p_decoded; /* Check the tag */ if(p_descriptor->i_tag != 0x05) { DVBPSI_ERROR_ARG("dr_05 decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = (dvbpsi_registration_dr_t*) malloc(sizeof(dvbpsi_registration_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_05 decoder", "out of memory"); return NULL; } /* Decode data and check the length */ if(p_descriptor->i_length < 4) { DVBPSI_ERROR_ARG("dr_05 decoder", "bad length (%d)", p_descriptor->i_length); free(p_decoded); return NULL; } p_decoded->i_format_identifier = ((uint32_t)(p_descriptor->p_data[0]) << 24) | ((uint32_t)(p_descriptor->p_data[1]) << 16) | ((uint32_t)(p_descriptor->p_data[2]) << 8) | (uint32_t)(p_descriptor->p_data[3]); p_decoded->i_additional_length = p_descriptor->i_length - 4; if(p_decoded->i_additional_length) memcpy(p_decoded->i_additional_info, p_descriptor->p_data + 4, p_decoded->i_additional_length); p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenRegistrationDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenRegistrationDr( dvbpsi_registration_dr_t * p_decoded, int b_duplicate) { /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x05, p_decoded->i_additional_length + 4, NULL); if(p_descriptor) { /* Encode data */ p_descriptor->p_data[0] = p_decoded->i_format_identifier >> 24; p_descriptor->p_data[1] = p_decoded->i_format_identifier >> 16; p_descriptor->p_data[2] = p_decoded->i_format_identifier >> 8; p_descriptor->p_data[3] = p_decoded->i_format_identifier; if(p_decoded->i_additional_length) memcpy(p_descriptor->p_data + 4, p_decoded->i_additional_info, p_decoded->i_additional_length); if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_registration_dr_t * p_dup_decoded = (dvbpsi_registration_dr_t*)malloc(sizeof(dvbpsi_registration_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_registration_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_06.c000066400000000000000000000066311217721213100215300ustar00rootroot00000000000000/***************************************************************************** * dr_06.c * (c)2001-2002 VideoLAN * $Id: dr_06.c 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_06.h" /***************************************************************************** * dvbpsi_DecodeDSAlignmentDr *****************************************************************************/ dvbpsi_ds_alignment_dr_t * dvbpsi_DecodeDSAlignmentDr( dvbpsi_descriptor_t * p_descriptor) { dvbpsi_ds_alignment_dr_t * p_decoded; /* Check the tag */ if(p_descriptor->i_tag != 0x06) { DVBPSI_ERROR_ARG("dr_06 decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = (dvbpsi_ds_alignment_dr_t*) malloc(sizeof(dvbpsi_ds_alignment_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_06 decoder", "out of memory"); return NULL; } /* Decode data and check the length */ if(p_descriptor->i_length != 1) { DVBPSI_ERROR_ARG("dr_06 decoder", "bad length (%d)", p_descriptor->i_length); free(p_decoded); return NULL; } p_decoded->i_alignment_type = p_descriptor->p_data[0]; p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenDSAlignmentDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenDSAlignmentDr( dvbpsi_ds_alignment_dr_t * p_decoded, int b_duplicate) { /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x06, 1, NULL); if(p_descriptor) { /* Encode data */ p_descriptor->p_data[0] = p_decoded->i_alignment_type; if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_ds_alignment_dr_t * p_dup_decoded = (dvbpsi_ds_alignment_dr_t*)malloc(sizeof(dvbpsi_ds_alignment_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_ds_alignment_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_07.c000066400000000000000000000102631217721213100215250ustar00rootroot00000000000000/***************************************************************************** * dr_07.c * (c)2001-2002 VideoLAN * $Id: dr_07.c 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_07.h" /***************************************************************************** * dvbpsi_DecodeTargetBgGridDr *****************************************************************************/ dvbpsi_target_bg_grid_dr_t * dvbpsi_DecodeTargetBgGridDr( dvbpsi_descriptor_t * p_descriptor) { dvbpsi_target_bg_grid_dr_t * p_decoded; /* Check the tag */ if(p_descriptor->i_tag != 0x07) { DVBPSI_ERROR_ARG("dr_07 decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = (dvbpsi_target_bg_grid_dr_t*) malloc(sizeof(dvbpsi_target_bg_grid_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_07 decoder", "out of memory"); return NULL; } /* Decode data and check the length */ if(p_descriptor->i_length != 4) { DVBPSI_ERROR_ARG("dr_07 decoder", "bad length (%d)", p_descriptor->i_length); free(p_decoded); return NULL; } p_decoded->i_horizontal_size = ((uint16_t)(p_descriptor->p_data[0]) << 6) | ((p_descriptor->p_data[1] & 0xfc) >> 2); p_decoded->i_vertical_size = ((uint16_t)(p_descriptor->p_data[1] & 0x03) << 12) | ((uint16_t)(p_descriptor->p_data[2]) << 4) | ((p_descriptor->p_data[3] & 0xf0) >> 4); p_decoded->i_pel_aspect_ratio = p_descriptor->p_data[3] & 0x0f; p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenTargetBgGridDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenTargetBgGridDr( dvbpsi_target_bg_grid_dr_t * p_decoded, int b_duplicate) { /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x07, 4, NULL); if(p_descriptor) { /* Encode data */ p_descriptor->p_data[0] = p_decoded->i_horizontal_size >> 6; p_descriptor->p_data[1] = (((uint8_t)p_decoded->i_horizontal_size) << 2) | (p_decoded->i_vertical_size >> 12); p_descriptor->p_data[2] = p_decoded->i_vertical_size >> 4; p_descriptor->p_data[3] = (((uint8_t)p_decoded->i_vertical_size) << 4) | (p_decoded->i_pel_aspect_ratio & 0x0f); if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_target_bg_grid_dr_t * p_dup_decoded = (dvbpsi_target_bg_grid_dr_t*)malloc(sizeof(dvbpsi_target_bg_grid_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_target_bg_grid_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_08.c000066400000000000000000000100051217721213100215200ustar00rootroot00000000000000/***************************************************************************** * dr_08.c * (c)2001-2002 VideoLAN * $Id: dr_08.c 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_08.h" /***************************************************************************** * dvbpsi_DecodeVWindowDr *****************************************************************************/ dvbpsi_vwindow_dr_t * dvbpsi_DecodeVWindowDr(dvbpsi_descriptor_t * p_descriptor) { dvbpsi_vwindow_dr_t * p_decoded; /* Check the tag */ if(p_descriptor->i_tag != 0x08) { DVBPSI_ERROR_ARG("dr_08 decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = (dvbpsi_vwindow_dr_t*)malloc(sizeof(dvbpsi_vwindow_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_08 decoder", "out of memory"); return NULL; } /* Decode data and check the length */ if(p_descriptor->i_length != 4) { DVBPSI_ERROR_ARG("dr_08 decoder", "bad length (%d)", p_descriptor->i_length); free(p_decoded); return NULL; } p_decoded->i_horizontal_offset = ((uint16_t)(p_descriptor->p_data[0]) << 6) | ((p_descriptor->p_data[1] & 0xfc) >> 2); p_decoded->i_vertical_offset = ((uint16_t)(p_descriptor->p_data[1] & 0x03) << 12) | ((uint16_t)(p_descriptor->p_data[2]) << 4) | ((p_descriptor->p_data[3] & 0xf0) >> 4); p_decoded->i_window_priority = p_descriptor->p_data[3] & 0x0f; p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenVWindowDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenVWindowDr(dvbpsi_vwindow_dr_t * p_decoded, int b_duplicate) { /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x08, 4, NULL); if(p_descriptor) { /* Encode data */ p_descriptor->p_data[0] = p_decoded->i_horizontal_offset >> 6; p_descriptor->p_data[1] = (((uint8_t)p_decoded->i_horizontal_offset) << 2) | (p_decoded->i_vertical_offset >> 12); p_descriptor->p_data[2] = p_decoded->i_vertical_offset >> 4; p_descriptor->p_data[3] = (((uint8_t)p_decoded->i_vertical_offset) << 4) | (p_decoded->i_window_priority & 0x0f); if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_vwindow_dr_t * p_dup_decoded = (dvbpsi_vwindow_dr_t*)malloc(sizeof(dvbpsi_vwindow_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_vwindow_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_09.c000066400000000000000000000077151217721213100215370ustar00rootroot00000000000000/***************************************************************************** * dr_09.c * (c)2001-2002 VideoLAN * $Id: dr_09.c 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_09.h" /***************************************************************************** * dvbpsi_DecodeCADr *****************************************************************************/ dvbpsi_ca_dr_t * dvbpsi_DecodeCADr(dvbpsi_descriptor_t * p_descriptor) { dvbpsi_ca_dr_t * p_decoded; /* Check the tag */ if(p_descriptor->i_tag != 0x09) { DVBPSI_ERROR_ARG("dr_09 decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = (dvbpsi_ca_dr_t*)malloc(sizeof(dvbpsi_ca_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_09 decoder", "out of memory"); return NULL; } /* Decode data and check the length */ if(p_descriptor->i_length < 4) { DVBPSI_ERROR_ARG("dr_09 decoder", "bad length (%d)", p_descriptor->i_length); free(p_decoded); return NULL; } p_decoded->i_ca_system_id = ((uint16_t)(p_descriptor->p_data[0]) << 8) | p_descriptor->p_data[1]; p_decoded->i_ca_pid = ((uint16_t)(p_descriptor->p_data[2] & 0x1f) << 8) | p_descriptor->p_data[3]; p_decoded->i_private_length = p_descriptor->i_length - 4; if(p_decoded->i_private_length) memcpy(p_decoded->i_private_data, p_descriptor->p_data + 4, p_decoded->i_private_length); p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenCADr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenCADr(dvbpsi_ca_dr_t * p_decoded, int b_duplicate) { /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x09, p_decoded->i_private_length + 4, NULL); if(p_descriptor) { /* Encode data */ p_descriptor->p_data[0] = p_decoded->i_ca_system_id >> 8; p_descriptor->p_data[1] = p_decoded->i_ca_system_id; p_descriptor->p_data[2] = 0xe0 | ((p_decoded->i_ca_pid >> 8) & 0x1f); p_descriptor->p_data[3] = p_decoded->i_ca_pid; if(p_decoded->i_private_length) memcpy(p_descriptor->p_data + 4, p_decoded->i_private_data, p_decoded->i_private_length); if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_ca_dr_t * p_dup_decoded = (dvbpsi_ca_dr_t*)malloc(sizeof(dvbpsi_ca_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_ca_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_0a.c000066400000000000000000000076761217721213100216150ustar00rootroot00000000000000/***************************************************************************** * dr_0a.c * (c)2001-2002 VideoLAN * $Id: dr_0a.c 132 2006-07-18 08:34:12Z sigmunau $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_0a.h" /***************************************************************************** * dvbpsi_DecodeISO639Dr *****************************************************************************/ dvbpsi_iso639_dr_t * dvbpsi_DecodeISO639Dr(dvbpsi_descriptor_t * p_descriptor) { dvbpsi_iso639_dr_t * p_decoded; int i; /* Check the tag */ if(p_descriptor->i_tag != 0x0a) { DVBPSI_ERROR_ARG("dr_0a decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = (dvbpsi_iso639_dr_t*)malloc(sizeof(dvbpsi_iso639_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_0a decoder", "out of memory"); return NULL; } /* Decode data and check the length */ if((p_descriptor->i_length < 1) || (p_descriptor->i_length % 4 != 0)) { DVBPSI_ERROR_ARG("dr_0a decoder", "bad length (%d)", p_descriptor->i_length); free(p_decoded); return NULL; } p_decoded->i_code_count = p_descriptor->i_length / 4; i = 0; while( i < p_decoded->i_code_count ) { p_decoded->code[i].iso_639_code[0] = p_descriptor->p_data[i*4]; p_decoded->code[i].iso_639_code[1] = p_descriptor->p_data[i*4+1]; p_decoded->code[i].iso_639_code[2] = p_descriptor->p_data[i*4+2]; p_decoded->code[i].i_audio_type = p_descriptor->p_data[i*4+3]; i++; } p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenISO639Dr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenISO639Dr(dvbpsi_iso639_dr_t * p_decoded, int b_duplicate) { /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x0a, p_decoded->i_code_count * 4, NULL); if(p_descriptor) { /* Encode data */ int i = 0; while( i < p_decoded->i_code_count ) { p_descriptor->p_data[i*4] = p_decoded->code[i].iso_639_code[0]; p_descriptor->p_data[i*4+1] = p_decoded->code[i].iso_639_code[1]; p_descriptor->p_data[i*4+2] = p_decoded->code[i].iso_639_code[2]; p_descriptor->p_data[i*4+3] = p_decoded->code[i].i_audio_type; i++; } if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_iso639_dr_t * p_dup_decoded = (dvbpsi_iso639_dr_t*)malloc(sizeof(dvbpsi_iso639_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_iso639_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_0b.c000066400000000000000000000074041217721213100216030ustar00rootroot00000000000000/***************************************************************************** * dr_0b.c * (c)2001-2002 VideoLAN * $Id: dr_0b.c 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_0b.h" /***************************************************************************** * dvbpsi_DecodeSystemClockDr *****************************************************************************/ dvbpsi_system_clock_dr_t * dvbpsi_DecodeSystemClockDr( dvbpsi_descriptor_t * p_descriptor) { dvbpsi_system_clock_dr_t * p_decoded; /* Check the tag */ if(p_descriptor->i_tag != 0x0b) { DVBPSI_ERROR_ARG("dr_0b decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = (dvbpsi_system_clock_dr_t*)malloc(sizeof(dvbpsi_system_clock_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_0b decoder", "out of memory"); return NULL; } /* Decode data and check the length */ if(p_descriptor->i_length != 2) { DVBPSI_ERROR_ARG("dr_0b decoder", "bad length (%d)", p_descriptor->i_length); free(p_decoded); return NULL; } p_decoded->b_external_clock_ref = (p_descriptor->p_data[0] & 0x80) ? 1 : 0; p_decoded->i_clock_accuracy_integer = p_descriptor->p_data[0] & 0x3f; p_decoded->i_clock_accuracy_exponent = (p_descriptor->p_data[1] & 0xe0) >> 5; p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenSystemClockDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenSystemClockDr( dvbpsi_system_clock_dr_t * p_decoded, int b_duplicate) { /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x0b, 2, NULL); if(p_descriptor) { /* Encode data */ p_descriptor->p_data[0] = 0x40 | (p_decoded->i_clock_accuracy_integer & 0x3f); if(p_decoded->b_external_clock_ref) p_descriptor->p_data[0] |= 0x80; p_descriptor->p_data[1] = 0x1f | p_decoded->i_clock_accuracy_exponent << 5; if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_system_clock_dr_t * p_dup_decoded = (dvbpsi_system_clock_dr_t*)malloc(sizeof(dvbpsi_system_clock_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_system_clock_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_0c.c000066400000000000000000000077551217721213100216150ustar00rootroot00000000000000/***************************************************************************** * dr_0c.c * (c)2001-2002 VideoLAN * $Id: dr_0c.c 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_0c.h" /***************************************************************************** * dvbpsi_DecodeMxBuffUtilizationDr *****************************************************************************/ dvbpsi_mx_buff_utilization_dr_t * dvbpsi_DecodeMxBuffUtilizationDr( dvbpsi_descriptor_t * p_descriptor) { dvbpsi_mx_buff_utilization_dr_t * p_decoded; /* Check the tag */ if(p_descriptor->i_tag != 0x0c) { DVBPSI_ERROR_ARG("dr_0c decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = (dvbpsi_mx_buff_utilization_dr_t*) malloc(sizeof(dvbpsi_mx_buff_utilization_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_0c decoder", "out of memory"); return NULL; } /* Decode data and check the length */ if(p_descriptor->i_length != 3) { DVBPSI_ERROR_ARG("dr_0c decoder", "bad length (%d)", p_descriptor->i_length); free(p_decoded); return NULL; } p_decoded->b_mdv_valid = (p_descriptor->p_data[0] & 0x80) ? 1 : 0; p_decoded->i_mx_delay_variation = ((uint16_t)(p_descriptor->p_data[0] & 0x7f) << 8) | p_descriptor->p_data[1]; p_decoded->i_mx_strategy = (p_descriptor->p_data[2] & 0xe0) >> 5; p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenMxBuffUtilizationDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenMxBuffUtilizationDr( dvbpsi_mx_buff_utilization_dr_t * p_decoded, int b_duplicate) { /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x0c, 3, NULL); if(p_descriptor) { /* Encode data */ p_descriptor->p_data[0] = (p_decoded->i_mx_delay_variation >> 8) & 0x7f; if(p_decoded->b_mdv_valid) p_descriptor->p_data[0] |= 0x80; p_descriptor->p_data[1] = p_decoded->i_mx_delay_variation; p_descriptor->p_data[2] = 0x1f | p_decoded->i_mx_strategy << 5; if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_mx_buff_utilization_dr_t * p_dup_decoded = (dvbpsi_mx_buff_utilization_dr_t*) malloc(sizeof(dvbpsi_mx_buff_utilization_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_mx_buff_utilization_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_0d.c000066400000000000000000000104321217721213100216000ustar00rootroot00000000000000/***************************************************************************** * dr_0d.c * (c)2001-2002 VideoLAN * $Id: dr_0d.c 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_0d.h" /***************************************************************************** * dvbpsi_DecodeCopyrightDr *****************************************************************************/ dvbpsi_copyright_dr_t * dvbpsi_DecodeCopyrightDr( dvbpsi_descriptor_t * p_descriptor) { dvbpsi_copyright_dr_t * p_decoded; /* Check the tag */ if(p_descriptor->i_tag != 0x0d) { DVBPSI_ERROR_ARG("dr_0d decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = (dvbpsi_copyright_dr_t*) malloc(sizeof(dvbpsi_copyright_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_0d decoder", "out of memory"); return NULL; } /* Decode data and check the length */ if(p_descriptor->i_length < 4) { DVBPSI_ERROR_ARG("dr_0c decoder", "bad length (%d)", p_descriptor->i_length); free(p_decoded); return NULL; } p_decoded->i_copyright_identifier = ((uint32_t)(p_descriptor->p_data[0]) << 24) | ((uint32_t)(p_descriptor->p_data[1]) << 16) | ((uint32_t)(p_descriptor->p_data[2]) << 8) | (uint32_t)(p_descriptor->p_data[3]); p_decoded->i_additional_length = p_descriptor->i_length - 4; if(p_decoded->i_additional_length) memcpy(p_decoded->i_additional_info, p_descriptor->p_data + 4, p_decoded->i_additional_length); p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenCopyrightDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenCopyrightDr( dvbpsi_copyright_dr_t * p_decoded, int b_duplicate) { /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x0d, p_decoded->i_additional_length + 4, NULL); if(p_descriptor) { /* Encode data */ p_descriptor->p_data[0] = p_decoded->i_copyright_identifier >> 24; p_descriptor->p_data[1] = p_decoded->i_copyright_identifier >> 16; p_descriptor->p_data[2] = p_decoded->i_copyright_identifier >> 8; p_descriptor->p_data[3] = p_decoded->i_copyright_identifier; if(p_decoded->i_additional_length) memcpy(p_descriptor->p_data + 4, p_decoded->i_additional_info, p_decoded->i_additional_length); if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_copyright_dr_t * p_dup_decoded = (dvbpsi_copyright_dr_t*)malloc(sizeof(dvbpsi_copyright_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_copyright_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_0e.c000066400000000000000000000072161217721213100216070ustar00rootroot00000000000000/***************************************************************************** * dr_0e.c * (c)2001-2002 VideoLAN * $Id: dr_0e.c 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_0e.h" /***************************************************************************** * dvbpsi_DecodeMaxBitrateDr *****************************************************************************/ dvbpsi_max_bitrate_dr_t * dvbpsi_DecodeMaxBitrateDr( dvbpsi_descriptor_t * p_descriptor) { dvbpsi_max_bitrate_dr_t * p_decoded; /* Check the tag */ if(p_descriptor->i_tag != 0x0e) { DVBPSI_ERROR_ARG("dr_0e decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = (dvbpsi_max_bitrate_dr_t*)malloc(sizeof(dvbpsi_max_bitrate_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_0e decoder", "out of memory"); return NULL; } /* Decode data and check the length */ if(p_descriptor->i_length != 3) { DVBPSI_ERROR_ARG("dr_0e decoder", "bad length (%d)", p_descriptor->i_length); free(p_decoded); return NULL; } p_decoded->i_max_bitrate = ((uint32_t)(p_descriptor->p_data[0] & 0x3f) << 16) | ((uint32_t)(p_descriptor->p_data[1]) << 8) | p_descriptor->p_data[2]; p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenMaxBitrateDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenMaxBitrateDr( dvbpsi_max_bitrate_dr_t * p_decoded, int b_duplicate) { /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x0e, 3, NULL); if(p_descriptor) { /* Encode data */ p_descriptor->p_data[0] = 0xc0 | ((p_decoded->i_max_bitrate >> 16) & 0x3f); p_descriptor->p_data[1] = p_decoded->i_max_bitrate >> 8; p_descriptor->p_data[2] = p_decoded->i_max_bitrate; if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_max_bitrate_dr_t * p_dup_decoded = (dvbpsi_max_bitrate_dr_t*)malloc(sizeof(dvbpsi_max_bitrate_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_max_bitrate_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_0f.c000066400000000000000000000074451217721213100216140ustar00rootroot00000000000000/***************************************************************************** * dr_0f.c * (c)2001-2002 VideoLAN * $Id: dr_0f.c 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_0f.h" /***************************************************************************** * dvbpsi_DecodePrivateDataDr *****************************************************************************/ dvbpsi_private_data_dr_t * dvbpsi_DecodePrivateDataDr( dvbpsi_descriptor_t * p_descriptor) { dvbpsi_private_data_dr_t * p_decoded; /* Check the tag */ if(p_descriptor->i_tag != 0x0f) { DVBPSI_ERROR_ARG("dr_0f decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = (dvbpsi_private_data_dr_t*)malloc(sizeof(dvbpsi_private_data_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_0f decoder", "out of memory"); return NULL; } /* Decode data and check the length */ if(p_descriptor->i_length != 4) { DVBPSI_ERROR_ARG("dr_0f decoder", "bad length (%d)", p_descriptor->i_length); free(p_decoded); return NULL; } p_decoded->i_private_data = ((uint32_t)(p_descriptor->p_data[0]) << 24) | ((uint32_t)(p_descriptor->p_data[1]) << 16) | ((uint32_t)(p_descriptor->p_data[2]) << 8) | p_descriptor->p_data[3]; p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenPrivateDataDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenPrivateDataDr( dvbpsi_private_data_dr_t * p_decoded, int b_duplicate) { /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x0f, 4, NULL); if(p_descriptor) { /* Encode data */ p_descriptor->p_data[0] = p_decoded->i_private_data >> 24; p_descriptor->p_data[1] = p_decoded->i_private_data >> 16; p_descriptor->p_data[2] = p_decoded->i_private_data >> 8; p_descriptor->p_data[3] = p_decoded->i_private_data; if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_private_data_dr_t * p_dup_decoded = (dvbpsi_private_data_dr_t*)malloc(sizeof(dvbpsi_private_data_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_private_data_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_13.c000066400000000000000000000042411217721213100215210ustar00rootroot00000000000000/* Copyright (C) 2010 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dr_13.c Decode Carousel Id Descriptor. */ #include "config.h" #include #include #include #include #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_13.h" /***************************************************************************** * dvbpsi_DecodeCarouselIdDr *****************************************************************************/ dvbpsi_carousel_id_dr_t *dvbpsi_DecodeCarouselIdDr(dvbpsi_descriptor_t *p_descriptor) { dvbpsi_carousel_id_dr_t *p_decoded; /* Check the tag */ if (p_descriptor->i_tag != 0x13) { return NULL; } /* Don't decode twice */ if (p_descriptor->p_decoded) { return p_descriptor->p_decoded; } /* Check length */ if (p_descriptor->i_length < 4) { return NULL; } p_decoded = (dvbpsi_carousel_id_dr_t*)malloc(sizeof(dvbpsi_carousel_id_dr_t) + p_descriptor->i_length - 4); if (!p_decoded) { return NULL; } p_decoded->i_carousel_id= ((p_descriptor->p_data[0] & 0xff) << 24) | ((p_descriptor->p_data[1] & 0xff) << 16)| ((p_descriptor->p_data[2] & 0xff) << 8) | (p_descriptor->p_data[3] & 0xff); p_decoded->i_private_data_len= p_descriptor->i_length - 4; memcpy(p_decoded->s_private_data, &p_descriptor->p_data[4], p_decoded->i_private_data_len); p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_14.c000066400000000000000000000053421217721213100215250ustar00rootroot00000000000000/* Copyright (C) 2010 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dr_14.c Decode Assocation Tag Descriptor. */ #include "config.h" #include #include #include #include #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_14.h" /***************************************************************************** * dvbpsi_DecodeAssociationTagDr *****************************************************************************/ dvbpsi_association_tag_dr_t *dvbpsi_DecodeAssociationTagDr(dvbpsi_descriptor_t *p_descriptor) { dvbpsi_association_tag_dr_t *p_decoded; uint8_t selector_len; uint8_t private_data_len; /* Check the tag */ if (p_descriptor->i_tag != 0x14) { return NULL; } /* Don't decode twice */ if (p_descriptor->p_decoded) { return p_descriptor->p_decoded; } /* Check length */ if (p_descriptor->i_length < 5) { return NULL; } selector_len = p_descriptor->p_data[4]; /* Invalid selector length */ if (selector_len + 5 > p_descriptor->i_length) { return NULL; } private_data_len= p_descriptor->i_length - (5 + selector_len); p_decoded = (dvbpsi_association_tag_dr_t*)malloc(sizeof(dvbpsi_association_tag_dr_t) + selector_len + private_data_len); if (!p_decoded) { return NULL; } p_decoded->i_tag = ((p_descriptor->p_data[0] & 0xff) << 8) | (p_descriptor->p_data[1] & 0xff); p_decoded->i_use = ((p_descriptor->p_data[2] & 0xff) << 8) | (p_descriptor->p_data[3] & 0xff); p_decoded->i_selector_len = selector_len; p_decoded->i_private_data_len= private_data_len; p_decoded->p_selector = ((void*)p_decoded) + sizeof(dvbpsi_association_tag_dr_t); p_decoded->p_private_data = p_decoded->p_selector + selector_len; memcpy(p_decoded->p_selector, &p_descriptor->p_data[5 ], selector_len); memcpy(p_decoded->p_private_data, &p_descriptor->p_data[5 + selector_len], private_data_len); p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_42.c000066400000000000000000000067101217721213100215260ustar00rootroot00000000000000/***************************************************************************** * dr_42.c * (c)2001-2002 VideoLAN * $Id: dr_42.c 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * Johan Bilien * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_42.h" /***************************************************************************** * dvbpsi_DecodeStuffingDr *****************************************************************************/ dvbpsi_stuffing_dr_t * dvbpsi_DecodeStuffingDr( dvbpsi_descriptor_t * p_descriptor) { dvbpsi_stuffing_dr_t * p_decoded; /* Check the tag */ if(p_descriptor->i_tag != 0x42) { DVBPSI_ERROR_ARG("dr_42 decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = (dvbpsi_stuffing_dr_t*)malloc(sizeof(dvbpsi_stuffing_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_42 decoder", "out of memory"); return NULL; } /* Decode data */ p_decoded->i_stuffing_length = p_descriptor->i_length; if(p_decoded->i_stuffing_length) memcpy(p_decoded->i_stuffing_byte, p_descriptor->p_data, p_decoded->i_stuffing_length); p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenStuffingDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenStuffingDr( dvbpsi_stuffing_dr_t * p_decoded, int b_duplicate) { /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x42, p_decoded->i_stuffing_length, NULL); if(p_descriptor) { /* Encode data */ if(p_decoded->i_stuffing_length) memcpy(p_descriptor->p_data, p_decoded->i_stuffing_byte, p_decoded->i_stuffing_length); if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_stuffing_dr_t * p_dup_decoded = (dvbpsi_stuffing_dr_t*)malloc(sizeof(dvbpsi_stuffing_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_stuffing_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_43.c000077500000000000000000000127621217721213100215360ustar00rootroot00000000000000/***************************************************************************** * dr_43.c * (c)2001-2008 VideoLAN * $Id$ * * Authors: Johann Hanne * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_43.h" /***************************************************************************** * dvbpsi_DecodeSatDelivSysDr *****************************************************************************/ dvbpsi_sat_deliv_sys_dr_t * dvbpsi_DecodeSatDelivSysDr( dvbpsi_descriptor_t * p_descriptor) { dvbpsi_sat_deliv_sys_dr_t * p_decoded; /* Check the tag */ if(p_descriptor->i_tag != 0x43) { DVBPSI_ERROR_ARG("dr_43 decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = (dvbpsi_sat_deliv_sys_dr_t*)malloc(sizeof(dvbpsi_sat_deliv_sys_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_43 decoder", "out of memory"); return NULL; } /* Decode data */ p_decoded->i_frequency = (uint32_t)(p_descriptor->p_data[0] << 24) | (uint32_t)(p_descriptor->p_data[1] << 16) | (uint32_t)(p_descriptor->p_data[2] << 8) | (uint32_t)(p_descriptor->p_data[3]); p_decoded->i_orbital_position = (uint16_t)(p_descriptor->p_data[4] << 8) | (uint16_t)(p_descriptor->p_data[5]); p_decoded->i_west_east_flag = (p_descriptor->p_data[6] >> 7) & 0x01; p_decoded->i_polarization = (p_descriptor->p_data[6] >> 5) & 0x03; p_decoded->i_roll_off = (p_descriptor->p_data[6] >> 3) & 0x03; p_decoded->i_modulation_system = (p_descriptor->p_data[6] >> 2) & 0x01; p_decoded->i_modulation_type = p_descriptor->p_data[6] & 0x03; p_decoded->i_symbol_rate = (uint32_t)(p_descriptor->p_data[7] << 20) | (uint32_t)(p_descriptor->p_data[8] << 12) | (uint32_t)(p_descriptor->p_data[9] << 4) | (uint32_t)((p_descriptor->p_data[10] >> 4) & 0x0f); p_decoded->i_fec_inner = p_descriptor->p_data[10] & 0x0f; p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenSatDelivSysDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenSatDelivSysDr( dvbpsi_sat_deliv_sys_dr_t * p_decoded, int b_duplicate) { /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x43, 11, NULL); if(p_descriptor) { /* Encode data */ p_descriptor->p_data[0] = (p_decoded->i_frequency >> 24) & 0xff; p_descriptor->p_data[1] = (p_decoded->i_frequency >> 16) & 0xff; p_descriptor->p_data[2] = (p_decoded->i_frequency >> 8) & 0xff; p_descriptor->p_data[3] = p_decoded->i_frequency & 0xff; p_descriptor->p_data[4] = (p_decoded->i_orbital_position >> 8) & 0xff; p_descriptor->p_data[5] = p_decoded->i_orbital_position & 0xff; p_descriptor->p_data[6] = ((p_decoded->i_west_east_flag & 0x01) << 7) | ((p_decoded->i_polarization & 0x03) << 5) | ((p_decoded->i_roll_off & 0x03) << 3) | ((p_decoded->i_modulation_system & 0x01) << 2) | (p_decoded->i_modulation_type & 0x03); p_descriptor->p_data[7] = (p_decoded->i_symbol_rate >> 20) & 0xff; p_descriptor->p_data[8] = (p_decoded->i_symbol_rate >> 12) & 0xff; p_descriptor->p_data[9] = (p_decoded->i_symbol_rate >> 4) & 0xff; p_descriptor->p_data[10] = ((p_decoded->i_symbol_rate << 4) & 0xf0) | (p_decoded->i_fec_inner & 0x0f); if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_sat_deliv_sys_dr_t * p_dup_decoded = (dvbpsi_sat_deliv_sys_dr_t*)malloc(sizeof(dvbpsi_sat_deliv_sys_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_sat_deliv_sys_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_47.c000066400000000000000000000067161217721213100215410ustar00rootroot00000000000000/***************************************************************************** * dr_47.c * (c)2001-2002 VideoLAN * $Id: dr_47.c 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * Johan Bilien * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_47.h" /***************************************************************************** * dvbpsi_DecodeBouquetNameDr *****************************************************************************/ dvbpsi_bouquet_name_dr_t * dvbpsi_DecodeBouquetNameDr( dvbpsi_descriptor_t * p_descriptor) { dvbpsi_bouquet_name_dr_t * p_decoded; /* Check the tag */ if(p_descriptor->i_tag != 0x47) { DVBPSI_ERROR_ARG("dr_47 decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = (dvbpsi_bouquet_name_dr_t*)malloc(sizeof(dvbpsi_bouquet_name_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_47 decoder", "out of memory"); return NULL; } /* Decode data */ p_decoded->i_name_length = p_descriptor->i_length; if(p_decoded->i_name_length) memcpy(p_decoded->i_char, p_descriptor->p_data, p_decoded->i_name_length); p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenBouquetNameDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenBouquetNameDr( dvbpsi_bouquet_name_dr_t * p_decoded, int b_duplicate) { /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x47, p_decoded->i_name_length, NULL); if(p_descriptor) { /* Encode data */ if(p_decoded->i_name_length) memcpy(p_descriptor->p_data, p_decoded->i_char, p_decoded->i_name_length); if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_bouquet_name_dr_t * p_dup_decoded = (dvbpsi_bouquet_name_dr_t*)malloc(sizeof(dvbpsi_bouquet_name_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_bouquet_name_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_48.c000066400000000000000000000120641217721213100215330ustar00rootroot00000000000000/***************************************************************************** * dr_48.c * (c)2001-2002 VideoLAN * $Id: dr_48.c 110 2005-06-04 12:52:02Z gbazin $ * * Authors: Arnaud de Bossoreille de Ribou * Johan Bilien * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_48.h" /***************************************************************************** * dvbpsi_DecodeServiceDr *****************************************************************************/ dvbpsi_service_dr_t * dvbpsi_DecodeServiceDr( dvbpsi_descriptor_t * p_descriptor) { dvbpsi_service_dr_t * p_decoded; /* Check the tag */ if(p_descriptor->i_tag != 0x48) { DVBPSI_ERROR_ARG("dr_48 decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = (dvbpsi_service_dr_t*)malloc(sizeof(dvbpsi_service_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_48 decoder", "out of memory"); return NULL; } /* Decode data and check the length */ if(p_descriptor->i_length < 3) { DVBPSI_ERROR_ARG("dr_07 decoder", "bad length (%d)", p_descriptor->i_length); free(p_decoded); return NULL; } p_descriptor->p_decoded = (void*)p_decoded; p_decoded->i_service_type = p_descriptor->p_data[0]; p_decoded->i_service_provider_name_length = p_descriptor->p_data[1]; p_decoded->i_service_name_length = 0; p_decoded->i_service_provider_name[0] = 0; p_decoded->i_service_name[0] = 0; if(p_decoded->i_service_provider_name_length + 2 > p_descriptor->i_length) return p_decoded; if(p_decoded->i_service_provider_name_length) memcpy(p_decoded->i_service_provider_name, p_descriptor->p_data + 2, p_decoded->i_service_provider_name_length); if(p_decoded->i_service_provider_name_length + 3 > p_descriptor->i_length) return p_decoded; p_decoded->i_service_name_length = p_descriptor->p_data[2+p_decoded->i_service_provider_name_length]; if(p_decoded->i_service_provider_name_length + 3 + p_decoded->i_service_name_length > p_descriptor->i_length) return p_decoded; if(p_decoded->i_service_name_length) memcpy(p_decoded->i_service_name, p_descriptor->p_data + 3 + p_decoded->i_service_provider_name_length, p_decoded->i_service_name_length); return p_decoded; } /***************************************************************************** * dvbpsi_GenServiceDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenServiceDr( dvbpsi_service_dr_t * p_decoded, int b_duplicate) { /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x48, 3 + p_decoded->i_service_name_length + p_decoded->i_service_provider_name_length , NULL); if(p_descriptor) { /* Encode data */ p_descriptor->p_data[0] = p_decoded->i_service_type; p_descriptor->p_data[1] = p_decoded->i_service_provider_name_length; if(p_decoded->i_service_provider_name_length) memcpy(p_descriptor->p_data + 2, p_decoded->i_service_provider_name, p_decoded->i_service_provider_name_length); p_descriptor->p_data[2+p_decoded->i_service_provider_name_length] = p_decoded->i_service_name_length; if(p_decoded->i_service_name_length) memcpy(p_descriptor->p_data + 3 + p_decoded->i_service_provider_name_length, p_decoded->i_service_name, p_decoded->i_service_name_length); if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_service_dr_t * p_dup_decoded = (dvbpsi_service_dr_t*)malloc(sizeof(dvbpsi_service_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_service_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_4d.c000066400000000000000000000101311217721213100216000ustar00rootroot00000000000000/***************************************************************************** * dr_4d.c * (c)2005 VideoLAN * $Id: dr_4d.c,v 1.7 2003/07/25 20:20:40 fenrir Exp $ * * Authors: Laurent Aimar * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_4d.h" /***************************************************************************** * dvbpsi_DecodeShortEventDr *****************************************************************************/ dvbpsi_short_event_dr_t * dvbpsi_DecodeShortEventDr(dvbpsi_descriptor_t * p_descriptor) { dvbpsi_short_event_dr_t * p_decoded; int i_len1; int i_len2; /* Check the tag */ if(p_descriptor->i_tag != 0x4d || p_descriptor->i_length < 5 ) { DVBPSI_ERROR_ARG("dr_4d decoder", "bad tag or corrupted(0x%x)", p_descriptor->i_tag); return NULL; } /* Check length */ i_len1 = p_descriptor->p_data[3]; i_len2 = p_descriptor->p_data[4+i_len1]; if( p_descriptor->i_length < 5 + i_len1 + i_len2 ) { DVBPSI_ERROR_ARG("dr_4d decoder", "invalid length/content (tag=0x%x)", p_descriptor->i_tag ); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = malloc(sizeof(dvbpsi_short_event_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_4d decoder", "out of memory"); return NULL; } /* Decode data and check the length */ memcpy( p_decoded->i_iso_639_code, &p_descriptor->p_data[0], 3 ); p_decoded->i_event_name_length = i_len1; if( i_len1 > 0 ) memcpy( p_decoded->i_event_name, &p_descriptor->p_data[3+1], i_len1 ); p_decoded->i_text_length = i_len2; if( i_len2 > 0 ) memcpy( p_decoded->i_text, &p_descriptor->p_data[4+i_len1+1], i_len2 ); p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenShortEventDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenShortEventDr(dvbpsi_short_event_dr_t * p_decoded, int b_duplicate) { int i_len1 = p_decoded->i_event_name_length; int i_len2 = p_decoded->i_text_length; /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x4d, 5 + i_len1 + i_len2, NULL ); if(p_descriptor) { /* Encode data */ memcpy( &p_descriptor->p_data[0], p_decoded->i_iso_639_code, 3 ); p_descriptor->p_data[3] = i_len1; if( i_len1 ) memcpy( &p_descriptor->p_data[4], p_decoded->i_event_name, i_len1 ); p_descriptor->p_data[3+i_len1] = i_len2; if( i_len2 ) memcpy( &p_descriptor->p_data[3+i_len1+1], p_decoded->i_text, i_len2 ); if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_short_event_dr_t * p_dup_decoded = (dvbpsi_short_event_dr_t*)malloc(sizeof(dvbpsi_short_event_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_short_event_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_4e.c000066400000000000000000000122161217721213100216070ustar00rootroot00000000000000/***************************************************************************** * dr_4e.c * (c)2005 VideoLAN * $Id: dr_4d.c,v 1.7 2003/07/25 20:20:40 fenrir Exp $ * * Authors: Laurent Aimar * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_4e.h" /***************************************************************************** * dvbpsi_DecodeExtendedEventDr *****************************************************************************/ dvbpsi_extended_event_dr_t * dvbpsi_DecodeExtendedEventDr(dvbpsi_descriptor_t * p_descriptor) { dvbpsi_extended_event_dr_t * p_decoded; int i_len; int i_pos; uint8_t *p; /* Check the tag */ if(p_descriptor->i_tag != 0x4e || p_descriptor->i_length < 6 ) { DVBPSI_ERROR_ARG("dr_4e decoder", "bad tag or corrupted(0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = malloc(sizeof(dvbpsi_extended_event_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_4e decoder", "out of memory"); return NULL; } /* Decode */ p_decoded->i_descriptor_number = (p_descriptor->p_data[0] >> 4)&0xf; p_decoded->i_last_descriptor_number = p_descriptor->p_data[0]&0x0f; memcpy( &p_decoded->i_iso_639_code[0], &p_descriptor->p_data[1], 3 ); p_decoded->i_entry_count = 0; i_len = p_descriptor->p_data[4]; i_pos = 0; for( p = &p_descriptor->p_data[5]; p < &p_descriptor->p_data[5+i_len]; ) { int idx = p_decoded->i_entry_count; p_decoded->i_item_description_length[idx] = p[0]; p_decoded->i_item_description[idx] = &p_decoded->i_buffer[i_pos]; memcpy( &p_decoded->i_buffer[i_pos], &p[1], p[0] ); i_pos += p[0]; p += 1 + p[0]; p_decoded->i_item_length[idx] = p[0]; p_decoded->i_item[idx] = &p_decoded->i_buffer[i_pos]; memcpy( &p_decoded->i_buffer[i_pos], &p[1], p[0] ); i_pos += p[0]; p += 1 + p[0]; p_decoded->i_entry_count++; } p_decoded->i_text_length = p_descriptor->p_data[5+i_len]; if( p_decoded->i_text_length > 0 ) memcpy( &p_decoded->i_buffer[i_pos], &p_descriptor->p_data[5+i_len+1], p_decoded->i_text_length ); p_decoded->i_text = &p_decoded->i_buffer[i_pos]; p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenExtendedEventDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenExtendedEventDr(dvbpsi_extended_event_dr_t * p_decoded, int b_duplicate) { int i_len; int i_len2; dvbpsi_descriptor_t * p_descriptor; int i; i_len2 = 0; for( i = 0; i < p_decoded->i_entry_count; i++ ) i_len2 += 2 + p_decoded->i_item_description_length[i] + p_decoded->i_item_length[i]; i_len = 1 + 3 + 1 + i_len2 + 1 + p_decoded->i_text_length; /* Create the descriptor */ p_descriptor = dvbpsi_NewDescriptor(0x4e, i_len, NULL ); if(p_descriptor) { uint8_t *p = &p_descriptor->p_data[0]; int i; /* Encode data */ p[0] = (p_decoded->i_descriptor_number << 4 ) | p_decoded->i_last_descriptor_number; memcpy( &p[1], p_decoded->i_iso_639_code, 3 ); p[4] = i_len2; p += 4; for( i = 0; i < p_decoded->i_entry_count; i++ ) { p[0] = p_decoded->i_item_description_length[i]; memcpy( &p[1], p_decoded->i_item_description[i], p[0] ); p += 1 + p_decoded->i_item_description_length[i]; p[0] = p_decoded->i_item_length[i]; memcpy( &p[1], p_decoded->i_item[i], p[0] ); p += 1 + p_decoded->i_item_length[i]; } p[0] = p_decoded->i_text_length; memcpy( &p[1], p_decoded->i_text, p[0] ); if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_extended_event_dr_t * p_dup_decoded = (dvbpsi_extended_event_dr_t*)malloc(sizeof(dvbpsi_extended_event_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_extended_event_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_52.c000066400000000000000000000066331217721213100215330ustar00rootroot00000000000000/***************************************************************************** * dr_52.c * (c)2005 Andrew John Hughes * * Authors: Andrew John Hughes * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_52.h" /***************************************************************************** * dvbpsi_DecodeStreamIdentifierDr *****************************************************************************/ dvbpsi_stream_identifier_dr_t * dvbpsi_DecodeStreamIdentifierDr( dvbpsi_descriptor_t * p_descriptor) { dvbpsi_stream_identifier_dr_t * p_decoded; /* Check the tag */ if(p_descriptor->i_tag != 0x52) { DVBPSI_ERROR_ARG("dr_52 decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = (dvbpsi_stream_identifier_dr_t*)malloc(sizeof(dvbpsi_stream_identifier_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_52 decoder", "out of memory"); return NULL; } /* Decode data and check the length */ if(p_descriptor->i_length < 1) { DVBPSI_ERROR_ARG("dr_52 decoder", "bad length (%d)", p_descriptor->i_length); free(p_decoded); return NULL; } p_decoded->i_component_tag = p_descriptor->p_data[0]; p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenStreamIdentifierDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenStreamIdentifierDr( dvbpsi_stream_identifier_dr_t * p_decoded, int b_duplicate) { /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x52, 1, NULL); if(p_descriptor) { /* Encode data */ p_descriptor->p_data[0] = p_decoded->i_component_tag; if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_stream_identifier_dr_t * p_dup_decoded = (dvbpsi_stream_identifier_dr_t*)malloc(sizeof(dvbpsi_stream_identifier_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_stream_identifier_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_55.c000066400000000000000000000105571217721213100215360ustar00rootroot00000000000000/***************************************************************************** * dr_55.c * (c)2004 VideoLAN * $Id: dr_55.c 89 2004-06-28 19:17:23Z gbazin $ * * Authors: Christophe Massiot * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_55.h" /***************************************************************************** * dvbpsi_DecodeParentalRatingDr *****************************************************************************/ dvbpsi_parental_rating_dr_t * dvbpsi_DecodeParentalRatingDr( dvbpsi_descriptor_t * p_descriptor) { int i_ratings_number, i; dvbpsi_parental_rating_dr_t * p_decoded; /* Check the tag */ if(p_descriptor->i_tag != 0x55) { DVBPSI_ERROR_ARG("dr_55 decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = (dvbpsi_parental_rating_dr_t*)malloc(sizeof(dvbpsi_parental_rating_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_55 decoder", "out of memory"); return NULL; } /* Decode data and check the length */ if(p_descriptor->i_length % 4) { DVBPSI_ERROR_ARG("dr_55 decoder", "length not multiple of 4 (%d)", p_descriptor->i_length); free(p_decoded); return NULL; } i_ratings_number = p_descriptor->i_length / 4; p_decoded->i_ratings_number = i_ratings_number; for (i=0; i < i_ratings_number; i++) { p_decoded->p_parental_rating[i].i_country_code = ((uint32_t)p_descriptor->p_data[4 * i] << 16) | ((uint32_t)p_descriptor->p_data[4 * i + 1] << 8) | p_descriptor->p_data[4 * i + 2]; p_decoded->p_parental_rating[i].i_rating = p_descriptor->p_data[4 * i + 3]; } p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenParentalRatingDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenParentalRatingDr( dvbpsi_parental_rating_dr_t * p_decoded, int b_duplicate) { int i; /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x55, p_decoded->i_ratings_number * 4 , NULL); if(p_descriptor) { /* Encode data */ for (i=0; i < p_decoded->i_ratings_number; i++ ) { p_descriptor->p_data[8 * i] = p_decoded->p_parental_rating[i].i_country_code >> 16; p_descriptor->p_data[8 * i + 1] = (p_decoded->p_parental_rating[i].i_country_code >> 8) & 0xff; p_descriptor->p_data[8 * i + 2] = p_decoded->p_parental_rating[i].i_country_code & 0xff; p_descriptor->p_data[8 * i + 3] = p_decoded->p_parental_rating[i].i_rating; } if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_parental_rating_dr_t * p_dup_decoded = (dvbpsi_parental_rating_dr_t*)malloc(sizeof(dvbpsi_parental_rating_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_parental_rating_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_56.c000066400000000000000000000111621217721213100215300ustar00rootroot00000000000000/***************************************************************************** * dr_56.c * (c)2004-2007 VideoLAN * $Id: dr_56.c 93 2004-10-19 19:17:49Z massiot $ * * Authors: Derk-Jan Hartman * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_56.h" /***************************************************************************** * dvbpsi_DecodeTeletextDr *****************************************************************************/ dvbpsi_teletext_dr_t * dvbpsi_DecodeTeletextDr( dvbpsi_descriptor_t * p_descriptor) { int i_pages_number, i; dvbpsi_teletext_dr_t * p_decoded; /* Check the tag */ if((p_descriptor->i_tag != 0x56) && (p_descriptor->i_tag != 0x46)) { DVBPSI_ERROR_ARG("dr_46/56 decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Decode data and check the length */ if(p_descriptor->i_length < 3) { DVBPSI_ERROR_ARG("dr_56 decoder", "bad length (%d)", p_descriptor->i_length); return NULL; } if(p_descriptor->i_length % 5) { DVBPSI_ERROR_ARG("dr_56 decoder", "length not multiple of 5(%d)", p_descriptor->i_length); return NULL; } i_pages_number = p_descriptor->i_length / 5; /* Allocate memory */ p_decoded = (dvbpsi_teletext_dr_t*)malloc(sizeof(dvbpsi_teletext_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_56 decoder", "out of memory"); return NULL; } p_decoded->i_pages_number = i_pages_number; for(i=0; i < i_pages_number; i++) { memcpy(p_decoded->p_pages[i].i_iso6392_language_code, p_descriptor->p_data + 5 * i, 3); p_decoded->p_pages[i].i_teletext_type = ((uint8_t)(p_descriptor->p_data[5 * i + 3]) >> 3); p_decoded->p_pages[i].i_teletext_magazine_number = ((uint16_t)(p_descriptor->p_data[5 * i + 3]) & 0x07); p_decoded->p_pages[i].i_teletext_page_number = p_descriptor->p_data[5 * i + 4]; } p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenTeletextDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenTeletextDr( dvbpsi_teletext_dr_t * p_decoded, int b_duplicate) { int i; /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x56, p_decoded->i_pages_number * 8 , NULL); if(p_descriptor) { /* Encode data */ for (i=0; i < p_decoded->i_pages_number; i++ ) { memcpy( p_descriptor->p_data + 8 * i, p_decoded->p_pages[i].i_iso6392_language_code, 3); p_descriptor->p_data[8 * i + 3] = (uint8_t) ( ( (uint8_t) p_decoded->p_pages[i].i_teletext_type << 3 ) | ( (uint8_t) p_decoded->p_pages[i].i_teletext_magazine_number & 0x07 ) ); p_descriptor->p_data[8 * i + 4] = p_decoded->p_pages[i].i_teletext_page_number; } if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_teletext_dr_t * p_dup_decoded = (dvbpsi_teletext_dr_t*)malloc(sizeof(dvbpsi_teletext_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_teletext_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_59.c000066400000000000000000000121461217721213100215360ustar00rootroot00000000000000/***************************************************************************** * dr_59.c * (c)2001-2002 VideoLAN * $Id: dr_59.c 93 2004-10-19 19:17:49Z massiot $ * * Authors: Arnaud de Bossoreille de Ribou * Tristan Leteurtre * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_59.h" /***************************************************************************** * dvbpsi_DecodeSubtitlingDr *****************************************************************************/ dvbpsi_subtitling_dr_t * dvbpsi_DecodeSubtitlingDr( dvbpsi_descriptor_t * p_descriptor) { int i_subtitles_number, i; dvbpsi_subtitling_dr_t * p_decoded; /* Check the tag */ if(p_descriptor->i_tag != 0x59) { DVBPSI_ERROR_ARG("dr_59 decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = (dvbpsi_subtitling_dr_t*)malloc(sizeof(dvbpsi_subtitling_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_59 decoder", "out of memory"); return NULL; } /* Decode data and check the length */ if(p_descriptor->i_length < 3) { DVBPSI_ERROR_ARG("dr_59 decoder", "bad length (%d)", p_descriptor->i_length); free(p_decoded); return NULL; } if(p_descriptor->i_length % 8) { DVBPSI_ERROR_ARG("dr_59 decoder", "length not multiple of 8 (%d)", p_descriptor->i_length); free(p_decoded); return NULL; } i_subtitles_number = p_descriptor->i_length / 8; p_decoded->i_subtitles_number = i_subtitles_number; for (i=0; i < i_subtitles_number; i++) { memcpy(p_decoded->p_subtitle[i].i_iso6392_language_code, p_descriptor->p_data + 8 * i, 3); p_decoded->p_subtitle[i].i_subtitling_type = p_descriptor->p_data[8 * i + 3]; p_decoded->p_subtitle[i].i_composition_page_id = ((uint16_t)(p_descriptor->p_data[8 * i + 4]) << 8) | p_descriptor->p_data[8 * i + 5]; p_decoded->p_subtitle[i].i_ancillary_page_id = ((uint16_t)(p_descriptor->p_data[8 * i + 6]) << 8) | p_descriptor->p_data[8 * i + 7]; } p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenSubtitlingDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenSubtitlingDr( dvbpsi_subtitling_dr_t * p_decoded, int b_duplicate) { int i; /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x59, p_decoded->i_subtitles_number * 8 , NULL); if(p_descriptor) { /* Encode data */ for (i=0; i < p_decoded->i_subtitles_number; i++ ) { memcpy( p_descriptor->p_data + 8 * i, p_decoded->p_subtitle[i].i_iso6392_language_code, 3); p_descriptor->p_data[8 * i + 3] = p_decoded->p_subtitle[i].i_subtitling_type; p_descriptor->p_data[8 * i + 4] = p_decoded->p_subtitle[i].i_composition_page_id >> 8; p_descriptor->p_data[8 * i + 5] = p_decoded->p_subtitle[i].i_composition_page_id % 0xFF; p_descriptor->p_data[8 * i + 6] = p_decoded->p_subtitle[i].i_ancillary_page_id >> 8; p_descriptor->p_data[8 * i + 7] = p_decoded->p_subtitle[i].i_ancillary_page_id % 0xFF; } if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_subtitling_dr_t * p_dup_decoded = (dvbpsi_subtitling_dr_t*)malloc(sizeof(dvbpsi_subtitling_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_subtitling_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_5a.c000077500000000000000000000131541217721213100216110ustar00rootroot00000000000000/***************************************************************************** * dr_5a.c * (c)2001-2008 VideoLAN * $Id$ * * Authors: Johann Hanne * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_5a.h" /***************************************************************************** * dvbpsi_DecodeTerrDelivSysDr *****************************************************************************/ dvbpsi_terr_deliv_sys_dr_t * dvbpsi_DecodeTerrDelivSysDr( dvbpsi_descriptor_t * p_descriptor) { dvbpsi_terr_deliv_sys_dr_t * p_decoded; /* Check the tag */ if(p_descriptor->i_tag != 0x5a) { DVBPSI_ERROR_ARG("dr_5a decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Allocate memory */ p_decoded = (dvbpsi_terr_deliv_sys_dr_t*)malloc(sizeof(dvbpsi_terr_deliv_sys_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_5a decoder", "out of memory"); return NULL; } /* Decode data */ p_decoded->i_centre_frequency = (uint32_t)(p_descriptor->p_data[0] << 24) | (uint32_t)(p_descriptor->p_data[1] << 16) | (uint32_t)(p_descriptor->p_data[2] << 8) | (uint32_t)(p_descriptor->p_data[3]); p_decoded->i_bandwidth = (p_descriptor->p_data[4] >> 5) & 0x07; p_decoded->i_priority = (p_descriptor->p_data[4] >> 4) & 0x01; p_decoded->i_time_slice_indicator = (p_descriptor->p_data[4] >> 3) & 0x01; p_decoded->i_mpe_fec_indicator = (p_descriptor->p_data[4] >> 2) & 0x01; p_decoded->i_constellation = (p_descriptor->p_data[5] >> 6) & 0x03; p_decoded->i_hierarchy_information = (p_descriptor->p_data[5] >> 3) & 0x07; p_decoded->i_code_rate_hp_stream = p_descriptor->p_data[5] & 0x07; p_decoded->i_code_rate_lp_stream = (p_descriptor->p_data[6] >> 5) & 0x07; p_decoded->i_guard_interval = (p_descriptor->p_data[6] >> 3) & 0x03; p_decoded->i_transmission_mode = (p_descriptor->p_data[6] >> 1) & 0x03; p_decoded->i_other_frequency_flag = p_descriptor->p_data[6] & 0x01; p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenTerrDelivSysDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenTerrDelivSysDr( dvbpsi_terr_deliv_sys_dr_t * p_decoded, int b_duplicate) { /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x5a, 11, NULL); if(p_descriptor) { /* Encode data */ p_descriptor->p_data[0] = (p_decoded->i_centre_frequency >> 24) & 0xff; p_descriptor->p_data[1] = (p_decoded->i_centre_frequency >> 16) & 0xff; p_descriptor->p_data[2] = (p_decoded->i_centre_frequency >> 8) & 0xff; p_descriptor->p_data[3] = p_decoded->i_centre_frequency & 0xff; p_descriptor->p_data[4] = (p_decoded->i_bandwidth & 0x07) << 5 | (p_decoded->i_priority & 0x01) << 4 | (p_decoded->i_time_slice_indicator & 0x01) << 3 | (p_decoded->i_mpe_fec_indicator & 0x01) << 2 | 0x03; p_descriptor->p_data[5] = (p_decoded->i_constellation & 0x03) << 6 | (p_decoded->i_hierarchy_information & 0x07) << 3 | (p_decoded->i_code_rate_hp_stream & 0x07); p_descriptor->p_data[6] = (p_decoded->i_code_rate_lp_stream & 0x07) << 5 | (p_decoded->i_guard_interval & 0x03) << 3 | (p_decoded->i_transmission_mode & 0x03) << 1 | (p_decoded->i_other_frequency_flag & 0x01); p_descriptor->p_data[7] = 0xff; p_descriptor->p_data[8] = 0xff; p_descriptor->p_data[9] = 0xff; p_descriptor->p_data[10] = 0xff; if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_terr_deliv_sys_dr_t * p_dup_decoded = (dvbpsi_terr_deliv_sys_dr_t*)malloc(sizeof(dvbpsi_terr_deliv_sys_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_terr_deliv_sys_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_62.c000066400000000000000000000060571217721213100215340ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dr_62.c Decode Frequency List Descriptor. */ #include "config.h" #include #include #include #include #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_62.h" /***************************************************************************** * dvbpsi_DecodeFrequencyListDr *****************************************************************************/ dvbpsi_frequency_list_dr_t *dvbpsi_DecodeFrequencyListDr(dvbpsi_descriptor_t *p_descriptor) { dvbpsi_frequency_list_dr_t *p_decoded; int i; /* Check the tag */ if (p_descriptor->i_tag != 0x62) { return NULL; } /* Don't decode twice */ if (p_descriptor->p_decoded) { return p_descriptor->p_decoded; } /* Check length */ if ((p_descriptor->i_length - 1) % 4) { return NULL; } p_decoded = (dvbpsi_frequency_list_dr_t*)malloc(sizeof(dvbpsi_frequency_list_dr_t)); if (!p_decoded) { return NULL; } p_decoded->i_number_of_frequencies = (p_descriptor->i_length - 1) / 4; p_decoded->i_coding_type = p_descriptor->p_data[0] & 0x3; for (i = 0; i < p_decoded->i_number_of_frequencies; i ++) { p_decoded->p_center_frequencies[i] = (p_descriptor->p_data[(i * 4) + 1] << 24) | (p_descriptor->p_data[(i * 4) + 2] << 16) | (p_descriptor->p_data[(i * 4) + 3] << 8) | p_descriptor->p_data[(i * 4) + 4]; if ((p_decoded->i_coding_type == 1) || (p_decoded->i_coding_type == 2)) { p_decoded->p_center_frequencies[i] = dvbpsi_Bcd8ToUint32(p_decoded->p_center_frequencies[i]); } } p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } uint32_t dvbpsi_Bcd8ToUint32(uint32_t bcd) { uint32_t i_decoded; i_decoded = ((bcd >> 28) & 0xf) * 10000000; i_decoded += ((bcd >> 24) & 0xf) * 1000000; i_decoded += ((bcd >> 20) & 0xf) * 100000; i_decoded += ((bcd >> 16) & 0xf) * 10000; i_decoded += ((bcd >> 12) & 0xf) * 1000; i_decoded += ((bcd >> 8) & 0xf) * 100; i_decoded += ((bcd >> 4) & 0xf) * 10; i_decoded += ((bcd >> 0) & 0xf) * 1; return i_decoded; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_66.c000066400000000000000000000042431217721213100215330ustar00rootroot00000000000000/* Copyright (C) 2010 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dr_66.c Decode Data Broadcast Id Descriptor. */ #include "config.h" #include #include #include #include #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_66.h" /***************************************************************************** * dvbpsi_DecodeDataBroadcastIdDr *****************************************************************************/ dvbpsi_data_broadcast_id_dr_t *dvbpsi_DecodeDataBroadcastIdDr(dvbpsi_descriptor_t *p_descriptor) { dvbpsi_data_broadcast_id_dr_t *p_decoded; /* Check the tag */ if (p_descriptor->i_tag != 0x66) { return NULL; } /* Don't decode twice */ if (p_descriptor->p_decoded) { return p_descriptor->p_decoded; } /* Check length */ if (p_descriptor->i_length < 2) { return NULL; } p_decoded = (dvbpsi_data_broadcast_id_dr_t*)malloc(sizeof(dvbpsi_data_broadcast_id_dr_t) + p_descriptor->i_length - 2); if (!p_decoded) { return NULL; } p_decoded->i_data_broadcast_id = ((p_descriptor->p_data[0] & 0xff) << 8) | (p_descriptor->p_data[1] & 0xff); p_decoded->i_id_selector_len = p_descriptor->i_length - 2; memcpy(p_decoded->s_id_selector, &p_descriptor->p_data[2], p_decoded->i_id_selector_len); p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_69.c000077500000000000000000000072311217721213100215410ustar00rootroot00000000000000/***************************************************************************** * dr_69.c * (c)2007 VideoLAN * $Id: dr_69.c 153 2007-10-12 21:05:05Z jpsaman $ * * Authors: Jiri Pinkava * * 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. * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_69.h" /***************************************************************************** * dvbpsi_DecodePDCDr *****************************************************************************/ dvbpsi_PDC_dr_t * dvbpsi_DecodePDCDr(dvbpsi_descriptor_t * p_descriptor) { dvbpsi_PDC_dr_t * p_decoded; /* Check the tag */ if(p_descriptor->i_tag != 0x69) { DVBPSI_ERROR_ARG("dr_69 decoder", "bad tag (0x%x)", p_descriptor->i_tag); return NULL; } /* Don't decode twice */ if(p_descriptor->p_decoded) return p_descriptor->p_decoded; /* Decode data and check the length */ if( p_descriptor->i_length != 3) { DVBPSI_ERROR_ARG("dr_69 decoder", "bad length (%d)", p_descriptor->i_length); return NULL; } /* Allocate memory */ p_decoded = (dvbpsi_PDC_dr_t*)malloc(sizeof(dvbpsi_PDC_dr_t)); if(!p_decoded) { DVBPSI_ERROR("dr_69 decoder", "out of memory"); return NULL; } p_decoded->i_PDC[0] = ((p_descriptor->p_data[0] & 0x0f) << 1) | (p_descriptor->p_data[1] >> 7); p_decoded->i_PDC[1] = ((p_descriptor->p_data[1] >> 3) & 0x0f); p_decoded->i_PDC[2] = ((p_descriptor->p_data[1] << 2) & 0x1c) | (p_descriptor->p_data[2] >> 6); p_decoded->i_PDC[3] = p_descriptor->p_data[2] & 0x3f; p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } /***************************************************************************** * dvbpsi_GenPDCDr *****************************************************************************/ dvbpsi_descriptor_t * dvbpsi_GenPDCDr(dvbpsi_PDC_dr_t * p_decoded, int b_duplicate) { /* Create the descriptor */ dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x69, 3, NULL); if(p_descriptor) { /* Encode data */ p_descriptor->p_data[0] = 0xf0 | (p_decoded->i_PDC[0] >> 1); p_descriptor->p_data[1] = (p_decoded->i_PDC[0] << 7) | (p_decoded->i_PDC[1] << 3) | (p_decoded->i_PDC[2] >> 2); p_descriptor->p_data[2] = (p_decoded->i_PDC[2] << 6 ) | p_decoded->i_PDC[3]; if(b_duplicate) { /* Duplicate decoded data */ dvbpsi_PDC_dr_t * p_dup_decoded = (dvbpsi_PDC_dr_t*)malloc(sizeof(dvbpsi_PDC_dr_t)); if(p_dup_decoded) memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_PDC_dr_t)); p_descriptor->p_decoded = (void*)p_dup_decoded; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_73.c000077500000000000000000000035531217721213100215370ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dr_73.c Decode Default Authority Descriptor. */ #include "config.h" #include #include #include #include #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_73.h" /***************************************************************************** * dvbpsi_DecodeDefaultAuthorityDr *****************************************************************************/ dvbpsi_default_authority_dr_t *dvbpsi_DecodeDefaultAuthorityDr(dvbpsi_descriptor_t *p_descriptor) { dvbpsi_default_authority_dr_t *p_decoded; /* Check the tag */ if (p_descriptor->i_tag != 0x73) { return NULL; } /* Don't decode twice */ if (p_descriptor->p_decoded) { return p_descriptor->p_decoded; } p_decoded = (dvbpsi_default_authority_dr_t*)malloc(sizeof(dvbpsi_default_authority_dr_t)); if (!p_decoded) { return NULL; } memcpy(&p_decoded->authority, p_descriptor->p_data, p_descriptor->i_length); p_decoded->authority[p_descriptor->i_length] = 0; p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_76.c000077500000000000000000000054641217721213100215450ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dr_76.c Decode Content Identifier Descriptor. */ #include "config.h" #include #include #include #include #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_76.h" /***************************************************************************** * dvbpsi_DecodeLCNDr *****************************************************************************/ dvbpsi_content_id_dr_t *dvbpsi_DecodeContentIdDr(dvbpsi_descriptor_t *p_descriptor) { dvbpsi_content_id_dr_t *p_decoded; int byte; /* Check the tag */ if (p_descriptor->i_tag != 0x76) { return NULL; } /* Don't decode twice */ if (p_descriptor->p_decoded) { return p_descriptor->p_decoded; } p_decoded = (dvbpsi_content_id_dr_t*)malloc(sizeof(dvbpsi_content_id_dr_t)); if (!p_decoded) { return NULL; } p_decoded->i_number_of_entries = 0; for (byte = 0; byte < p_descriptor->i_length; p_decoded->i_number_of_entries ++) { dvbpsi_crid_entry_t *entry = &p_decoded->p_entries[p_decoded->i_number_of_entries]; entry->i_type = (p_descriptor->p_data[byte] >> 2) & 0x3f; entry->i_location = p_descriptor->p_data[byte] & 3; byte ++; if (entry->i_location == CRID_LOCATION_DESCRIPTOR) { uint8_t len = p_descriptor->p_data[byte]; unsigned int i; byte ++; for (i = 0; i < len; i ++) { entry->value.path[i] = p_descriptor->p_data[byte + i]; } byte += len; entry->value.path[i] = 0; } else if (entry->i_location == CRID_LOCATION_CIT) { entry->value.ref = (p_descriptor->p_data[byte] << 8) | p_descriptor->p_data[byte + 1]; byte += 2; } else { /* Unknown location */ free(p_decoded); return NULL; } } p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } dvbstreamer-2.1.0/src/dvbpsi/descriptors/dr_83.c000066400000000000000000000045341217721213100215350ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dr_83.c Decode Logical Channel Number Descriptor. */ #include "config.h" #include #include #include #include #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "descriptor.h" #include "dr_83.h" /***************************************************************************** * dvbpsi_DecodeLCNDr *****************************************************************************/ dvbpsi_lcn_dr_t *dvbpsi_DecodeLCNDr(dvbpsi_descriptor_t *p_descriptor) { dvbpsi_lcn_dr_t *p_decoded; int i; /* Check the tag */ if (p_descriptor->i_tag != 0x83) { return NULL; } /* Don't decode twice */ if (p_descriptor->p_decoded) { return p_descriptor->p_decoded; } /* Check length */ if (p_descriptor->i_length % 4) { return NULL; } p_decoded = (dvbpsi_lcn_dr_t*)malloc(sizeof(dvbpsi_lcn_dr_t)); if (!p_decoded) { return NULL; } p_decoded->i_number_of_entries = p_descriptor->i_length / 4; for (i = 0; i < p_decoded->i_number_of_entries; i ++) { p_decoded->p_entries[i].i_service_id = (p_descriptor->p_data[i * 4] << 8) | p_descriptor->p_data[(i * 4) + 1]; p_decoded->p_entries[i].b_visible_service_flag = (p_descriptor->p_data[(i * 4) + 2] >> 7) & 1; p_decoded->p_entries[i].i_logical_channel_number = ((p_descriptor->p_data[(i * 4) + 2] << 8) | p_descriptor->p_data[(i * 4) + 3]) & 0x3ff; } p_descriptor->p_decoded = (void*)p_decoded; return p_decoded; } dvbstreamer-2.1.0/src/dvbpsi/dvbpsi.c000066400000000000000000000221361217721213100175420ustar00rootroot00000000000000/***************************************************************************** * dvbpsi.c: conversion from TS packets to PSI sections *---------------------------------------------------------------------------- * (c)2001-2002 VideoLAN * $Id: dvbpsi.c 131 2006-02-03 15:44:46Z massiot $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *---------------------------------------------------------------------------- * *****************************************************************************/ #include "config.h" #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "dvbpsi_private.h" #include "psi.h" /***************************************************************************** * dvbpsi_PushPacket ***************************************************************************** * Injection of a TS packet into a PSI decoder. *****************************************************************************/ void dvbpsi_PushPacket(dvbpsi_handle h_dvbpsi, uint8_t* p_data) { uint8_t i_expected_counter; /* Expected continuity counter */ dvbpsi_psi_section_t* p_section; /* Current section */ uint8_t* p_payload_pos; /* Where in the TS packet */ uint8_t* p_new_pos = NULL; /* Beginning of the new section, updated to NULL when the new section is handled */ int i_available; /* Byte count available in the packet */ /* TS start code */ if(p_data[0] != 0x47) { DVBPSI_ERROR("PSI decoder", "not a TS packet"); return; } /* Continuity check */ i_expected_counter = (h_dvbpsi->i_continuity_counter + 1) & 0xf; h_dvbpsi->i_continuity_counter = p_data[3] & 0xf; if(i_expected_counter == ((h_dvbpsi->i_continuity_counter + 1) & 0xf) && !h_dvbpsi->b_discontinuity) { DVBPSI_ERROR_ARG("PSI decoder", "TS duplicate (received %d, expected %d) for PID %d", h_dvbpsi->i_continuity_counter, i_expected_counter, ((uint16_t)(p_data[1] & 0x1f) << 8) | p_data[2]); return; } if(i_expected_counter != h_dvbpsi->i_continuity_counter) { DVBPSI_ERROR_ARG("PSI decoder", "TS discontinuity (received %d, expected %d) for PID %d", h_dvbpsi->i_continuity_counter, i_expected_counter, ((uint16_t)(p_data[1] & 0x1f) << 8) | p_data[2]); h_dvbpsi->b_discontinuity = 1; if(h_dvbpsi->p_current_section) { dvbpsi_ReleasePSISections(h_dvbpsi, h_dvbpsi->p_current_section); h_dvbpsi->p_current_section = NULL; } } /* Return if no payload in the TS packet */ if(!(p_data[3] & 0x10)) { return; } /* Skip the adaptation_field if present */ if(p_data[3] & 0x20) p_payload_pos = p_data + 5 + p_data[4]; else p_payload_pos = p_data + 4; /* Unit start -> skip the pointer_field and a new section begins */ if(p_data[1] & 0x40) { p_new_pos = p_payload_pos + *p_payload_pos + 1; p_payload_pos += 1; } p_section = h_dvbpsi->p_current_section; /* If the psi decoder needs a begginning of section and a new section begins in the packet then initialize the dvbpsi_psi_section_t structure */ if(p_section == NULL) { if(p_new_pos) { /* Allocation of the structure */ h_dvbpsi->p_current_section = p_section = dvbpsi_ClaimPSISection(h_dvbpsi, h_dvbpsi->i_section_max_size); /* Update the position in the packet */ p_payload_pos = p_new_pos; /* New section is being handled */ p_new_pos = NULL; /* Just need the header to know how long is the section */ h_dvbpsi->i_need = 3; h_dvbpsi->b_complete_header = 0; } else { /* No new section => return */ return; } } /* Remaining bytes in the payload */ i_available = 188 + p_data - p_payload_pos; while(i_available > 0) { if(i_available >= h_dvbpsi->i_need) { /* There are enough bytes in this packet to complete the header/section */ memcpy(p_section->p_payload_end, p_payload_pos, h_dvbpsi->i_need); p_payload_pos += h_dvbpsi->i_need; p_section->p_payload_end += h_dvbpsi->i_need; i_available -= h_dvbpsi->i_need; if(!h_dvbpsi->b_complete_header) { /* Header is complete */ h_dvbpsi->b_complete_header = 1; /* Compute p_section->i_length and update h_dvbpsi->i_need */ h_dvbpsi->i_need = p_section->i_length = ((uint16_t)(p_section->p_data[1] & 0xf)) << 8 | p_section->p_data[2]; /* Check that the section isn't too long */ if(h_dvbpsi->i_need > h_dvbpsi->i_section_max_size - 3) { DVBPSI_ERROR("PSI decoder", "PSI section too long"); dvbpsi_ReleasePSISections(h_dvbpsi, p_section); h_dvbpsi->p_current_section = NULL; /* If there is a new section not being handled then go forward in the packet */ if(p_new_pos) { h_dvbpsi->p_current_section = p_section = dvbpsi_ClaimPSISection(h_dvbpsi, h_dvbpsi->i_section_max_size); p_payload_pos = p_new_pos; p_new_pos = NULL; h_dvbpsi->i_need = 3; h_dvbpsi->b_complete_header = 0; i_available = 188 + p_data - p_payload_pos; } else { i_available = 0; } } } else { /* PSI section is complete */ p_section->b_syntax_indicator = p_section->p_data[1] & 0x80; p_section->b_private_indicator = p_section->p_data[1] & 0x40; /* Update the end of the payload if CRC_32 is present */ if(p_section->b_syntax_indicator) p_section->p_payload_end -= 4; if(dvbpsi_ValidPSISection(p_section)) { /* PSI section is valid */ p_section->i_table_id = p_section->p_data[0]; if(p_section->b_syntax_indicator) { p_section->i_extension = (p_section->p_data[3] << 8) | p_section->p_data[4]; p_section->i_version = (p_section->p_data[5] & 0x3e) >> 1; p_section->b_current_next = p_section->p_data[5] & 0x1; p_section->i_number = p_section->p_data[6]; p_section->i_last_number = p_section->p_data[7]; p_section->p_payload_start = p_section->p_data + 8; } else { p_section->i_extension = 0; p_section->i_version = 0; p_section->b_current_next = 1; p_section->i_number = 0; p_section->i_last_number = 0; p_section->p_payload_start = p_section->p_data + 3; } h_dvbpsi->pf_callback(h_dvbpsi, p_section); h_dvbpsi->p_current_section = NULL; } else { /* PSI section isn't valid => trash it */ dvbpsi_ReleasePSISections(h_dvbpsi, p_section); h_dvbpsi->p_current_section = NULL; } /* A TS packet may contain any number of sections, only the first * new one is flagged by the pointer_field. If the next payload * byte isn't 0xff then a new section starts. */ if(p_new_pos == NULL && i_available && *p_payload_pos != 0xff) p_new_pos = p_payload_pos; /* If there is a new section not being handled then go forward in the packet */ if(p_new_pos) { h_dvbpsi->p_current_section = p_section = dvbpsi_ClaimPSISection(h_dvbpsi, h_dvbpsi->i_section_max_size); p_payload_pos = p_new_pos; p_new_pos = NULL; h_dvbpsi->i_need = 3; h_dvbpsi->b_complete_header = 0; i_available = 188 + p_data - p_payload_pos; } else { i_available = 0; } } } else { /* There aren't enough bytes in this packet to complete the header/section */ memcpy(p_section->p_payload_end, p_payload_pos, i_available); p_section->p_payload_end += i_available; h_dvbpsi->i_need -= i_available; i_available = 0; } } } dvbstreamer-2.1.0/src/dvbpsi/dvbpsi_private.h000066400000000000000000000062451217721213100213040ustar00rootroot00000000000000/***************************************************************************** * dvbpsi_private.h: main private header *---------------------------------------------------------------------------- * (c)2001-2002 VideoLAN * $Id: dvbpsi_private.h 102 2004-12-22 12:09:54Z gbazin $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *---------------------------------------------------------------------------- * *****************************************************************************/ #ifndef _DVBPSI_DVBPSI_PRIVATE_H_ #define _DVBPSI_DVBPSI_PRIVATE_H_ #include "logging.h" /***************************************************************************** * Error management *****************************************************************************/ #define DVBPSI_ERROR(src, str) \ LogModule( LOG_DIARRHEA, "dvbpsi", "Error (" src "): " str "\n"); #ifdef HAVE_VARIADIC_MACROS # define DVBPSI_ERROR_ARG(src, str, x...) \ LogModule( LOG_DIARRHEA, "dvbpsi", "Error (" src "): " str "\n", x); #else inline void DVBPSI_ERROR_ARG( char *src, const char *str, ... ) { if (LogLevelIsEnabled(LOG_DIARRHEA)) { va_list ap; char *line; va_start( ap, str ); asprintf(&line, str, ap); LogModule( LOG_DIARRHEA, "dvbpsi", "Error (%s): %s\n", src, line); free(line); va_end( ap ); } } #endif #ifdef DEBUG # define DVBPSI_DEBUG(src, str) \ LogModule( LOG_DEBUGV, "dvbpsi", "Debug (" src "): " str "\n"); # ifdef HAVE_VARIADIC_MACROS # define DVBPSI_DEBUG_ARG(src, str, x...) \ LogModule( LOG_DEBUGV, "dvbpsi", "Debug (" src "): " str "\n", x); # else inline void DVBPSI_DEBUG_ARG( char *src, const char *str, ... ) { if (LogLevelIsEnabled(LOG_DEBUGV)) { va_list ap; char *line; va_start( ap, str ); asprintf(&line, str, ap); LogModule( LOG_DEBUGV, "dvbpsi", "Debug (%s): %s\n", src, line); free(line); va_end( ap ); } } # endif #else # define DVBPSI_DEBUG(src, str) # ifdef HAVE_VARIADIC_MACROS # define DVBPSI_DEBUG_ARG(src, str, x...) # else inline void DVBPSI_DEBUG_ARG( char *src, const char *str, ... ) {} # endif #endif #endif dvbstreamer-2.1.0/src/dvbpsi/psi.c000066400000000000000000000332031217721213100170430ustar00rootroot00000000000000/***************************************************************************** * psi.c: common PSI functions *---------------------------------------------------------------------------- * (c)2001-2002 VideoLAN * $Id: psi.c 108 2005-04-19 12:33:21Z gbazin $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *---------------------------------------------------------------------------- * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "dvbpsi_private.h" #include "psi.h" /***************************************************************************** * s_crc32_table ***************************************************************************** * This table is used to compute a PSI CRC byte per byte instead of bit per * bit. It's been generated by 'gen_crc' in the 'misc' directory: * * uint32_t table[256]; * uint32_t i, j, k; * * for(i = 0; i < 256; i++) * { * k = 0; * for (j = (i << 24) | 0x800000; j != 0x80000000; j <<= 1) * k = (k << 1) ^ (((k ^ j) & 0x80000000) ? 0x04c11db7 : 0); * table[i] = k; * } * * A CRC is computed like this: * * initialization * -------------- * uint32_t i_crc = 0xffffffff; * * for each data byte do * --------------------- * i_crc = (i_crc << 8) ^ s_crc32_table[(i_crc >> 24) ^ (data_byte)]; *****************************************************************************/ static uint32_t s_crc32_table[256] = { 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95, 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3, 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4 }; /***************************************************************************** * dvbpsi_ClaimPSISection ***************************************************************************** * Return a previously released section if one is available or create a new one. *****************************************************************************/ dvbpsi_psi_section_t * dvbpsi_ClaimPSISection(dvbpsi_handle h_dvbpsi, int i_max_size) { dvbpsi_psi_section_t *p_current = h_dvbpsi->p_free_sections; dvbpsi_psi_section_t *p_prev = NULL; while (p_current) { if (p_current->i_max_size == i_max_size) { p_current->p_payload_end = p_current->p_data; if (p_prev) { p_prev->p_next = p_current->p_next; } else { h_dvbpsi->p_free_sections = p_current->p_next; } p_current->p_next = NULL; return p_current; } p_prev = p_current; p_current = p_current->p_next; } return dvbpsi_NewPSISection(i_max_size); } /***************************************************************************** * dvbpsi_ReleasePSISections ***************************************************************************** * Release sections so they can be reused. *****************************************************************************/ void dvbpsi_ReleasePSISections(dvbpsi_handle h_dvbpsi, dvbpsi_psi_section_t * p_section) { dvbpsi_psi_section_t *p_tail = p_section; /* find the last section in the sections to release */ while (p_tail->p_next) { p_tail = p_tail->p_next; } p_tail->p_next = h_dvbpsi->p_free_sections; h_dvbpsi->p_free_sections = p_section; } /***************************************************************************** * dvbpsi_ClonePSISection ***************************************************************************** * Clone a section *****************************************************************************/ dvbpsi_psi_section_t * dvbpsi_ClonePSISection(dvbpsi_handle h_dvbpsi, dvbpsi_psi_section_t * p_section) { dvbpsi_psi_section_t *p_cloned = NULL; p_cloned = dvbpsi_ClaimPSISection(h_dvbpsi, p_section->i_max_size); if (p_cloned == NULL) { return NULL; } p_cloned->i_table_id = p_section->i_table_id; p_cloned->b_syntax_indicator = p_section->b_syntax_indicator; p_cloned->b_private_indicator = p_section->b_private_indicator; p_cloned->i_length = p_section->i_length; p_cloned->i_extension = p_section->i_extension; p_cloned->i_version = p_section->i_version; p_cloned->b_current_next = p_section->b_current_next; p_cloned->i_number = p_section->i_number; p_cloned->i_last_number = p_section->i_last_number; p_cloned->i_crc = p_section->i_crc; memcpy(p_cloned->p_data, p_section->p_data, p_section->i_max_size); p_cloned->p_payload_start = p_cloned->p_data + (p_section->p_payload_start - p_section->p_data); p_cloned->p_payload_end = p_cloned->p_data + (p_section->p_payload_end - p_section->p_data); return p_cloned; } /***************************************************************************** * dvbpsi_NewPSISection ***************************************************************************** * Creation of a new dvbpsi_psi_section_t structure. *****************************************************************************/ dvbpsi_psi_section_t * dvbpsi_NewPSISection(int i_max_size) { /* Allocate the dvbpsi_psi_section_t structure */ dvbpsi_psi_section_t * p_section = (dvbpsi_psi_section_t*)malloc(sizeof(dvbpsi_psi_section_t)); if(p_section != NULL) { /* Allocate the p_data memory area */ p_section->p_data = (uint8_t*)malloc(i_max_size * sizeof(uint8_t)); if(p_section->p_data != NULL) { p_section->i_max_size = i_max_size; p_section->p_payload_end = p_section->p_data; } else { free(p_section); return NULL; } p_section->p_next = NULL; } return p_section; } /***************************************************************************** * dvbpsi_DeletePSISections ***************************************************************************** * Destruction of a dvbpsi_psi_section_t structure. *****************************************************************************/ void dvbpsi_DeletePSISections(dvbpsi_psi_section_t * p_section) { while(p_section != NULL) { dvbpsi_psi_section_t* p_next = p_section->p_next; if(p_section->p_data != NULL) free(p_section->p_data); free(p_section); p_section = p_next; } } /***************************************************************************** * dvbpsi_ValidPSISection ***************************************************************************** * Check the CRC_32 if the section has b_syntax_indicator set. *****************************************************************************/ int dvbpsi_ValidPSISection(dvbpsi_psi_section_t* p_section) { if(p_section->b_syntax_indicator) { /* Check the CRC_32 if b_syntax_indicator is 0 */ uint32_t i_crc = 0xffffffff; uint8_t* p_byte = p_section->p_data; while(p_byte < p_section->p_payload_end + 4) { i_crc = (i_crc << 8) ^ s_crc32_table[(i_crc >> 24) ^ (*p_byte)]; p_byte++; } if(i_crc == 0) { return 1; } else { DVBPSI_ERROR_ARG("misc PSI", "Bad CRC_32 (0x%08x) !!!", i_crc); return 0; } } else { /* No check to do if b_syntax_indicator is 0 */ return 1; } } /***************************************************************************** * dvbpsi_BuildPSISection ***************************************************************************** * Build the section based on the information in the structure. *****************************************************************************/ void dvbpsi_BuildPSISection(dvbpsi_psi_section_t* p_section) { uint8_t* p_byte = p_section->p_data; /* table_id */ p_section->p_data[0] = p_section->i_table_id; /* setion_syntax_indicator | private_indicator | first 4 MSB of section_length */ p_section->p_data[1] = (p_section->b_syntax_indicator ? 0x80 : 0x00) | (p_section->b_private_indicator ? 0x40 : 0x00) | 0x30 /* reserved bits set to 1 */ | ((p_section->i_length >> 8) & 0x0f); /* 8 LSB of section_length */ p_section->p_data[2] = p_section->i_length & 0xff; /* Optional part of a PSI section */ if(p_section->b_syntax_indicator) { /* 8 MSB of table_id_extension */ p_section->p_data[3] = (p_section->i_extension >> 8) & 0xff; /* 8 LSB of table_id_extension */ p_section->p_data[4] = p_section->i_extension & 0xff; /* 5 bits of version_number | current_next_indicator */ p_section->p_data[5] = 0xc0 /* reserved bits set to 1 */ | ((p_section->i_version & 0x1f) << 1) | (p_section->b_current_next ? 0x01 : 0x00); /* section_number */ p_section->p_data[6] = p_section->i_number; /* last_section_number */ p_section->p_data[7] = p_section->i_last_number; /* CRC_32 */ p_section->i_crc = 0xffffffff; while(p_byte < p_section->p_payload_end) { p_section->i_crc = (p_section->i_crc << 8) ^ s_crc32_table[(p_section->i_crc >> 24) ^ (*p_byte)]; p_byte++; } p_section->p_payload_end[0] = (p_section->i_crc >> 24) & 0xff; p_section->p_payload_end[1] = (p_section->i_crc >> 16) & 0xff; p_section->p_payload_end[2] = (p_section->i_crc >> 8) & 0xff; p_section->p_payload_end[3] = p_section->i_crc & 0xff; #ifdef DEBUG if(!dvbpsi_ValidPSISection(p_section)) { DVBPSI_ERROR("misc PSI", "********************************************"); DVBPSI_ERROR("misc PSI", "* Generated PSI section has a bad CRC_32. *"); DVBPSI_ERROR("misc PSI", "* THIS IS A BUG, PLEASE REPORT TO THE LIST *"); DVBPSI_ERROR("misc PSI", "* --- libdvbpsi-devel@videolan.org --- *"); DVBPSI_ERROR("misc PSI", "********************************************"); } #endif } } dvbstreamer-2.1.0/src/dvbpsi/sections.c000066400000000000000000000045761217721213100201120ustar00rootroot00000000000000#include "config.h" #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "dvbpsi_private.h" #include "psi.h" #include "sections.h" static void dvbpsi_SectionsCallback(dvbpsi_handle p_decoder, dvbpsi_psi_section_t * p_section); /***************************************************************************** * dvbpsi_AttachDemux ***************************************************************************** * Creation of the demux structure *****************************************************************************/ dvbpsi_handle dvbpsi_AttachSections(dvbpsi_sections_new_cb_t pf_new_cb, void * p_new_cb_data) { dvbpsi_handle h_dvbpsi = (dvbpsi_decoder_t*)malloc(sizeof(dvbpsi_decoder_t)); dvbpsi_sections_t * p_sections; if(h_dvbpsi == NULL) return NULL; p_sections = (dvbpsi_sections_t*)malloc(sizeof(dvbpsi_sections_t)); if(p_sections == NULL) { free(h_dvbpsi); return NULL; } /* PSI decoder configuration */ h_dvbpsi->pf_callback = &dvbpsi_SectionsCallback; h_dvbpsi->p_private_decoder = p_sections; h_dvbpsi->i_section_max_size = 4096; /* PSI decoder initial state */ h_dvbpsi->i_continuity_counter = 31; h_dvbpsi->b_discontinuity = 1; h_dvbpsi->p_current_section = NULL; h_dvbpsi->p_free_sections = NULL; /* Sutables demux configuration */ p_sections->p_decoder = h_dvbpsi; p_sections->pf_new_callback = pf_new_cb; p_sections->p_new_cb_data = p_new_cb_data; return h_dvbpsi; } static void dvbpsi_SectionsCallback(dvbpsi_handle p_decoder, dvbpsi_psi_section_t * p_section) { dvbpsi_sections_t * p_sections; p_sections = (dvbpsi_sections_t *)p_decoder->p_private_decoder; p_sections->pf_new_callback(p_sections->p_new_cb_data, p_decoder, p_section); } void dvbpsi_DetachSections(dvbpsi_handle h_dvbpsi) { dvbpsi_sections_t * p_sections = (dvbpsi_sections_t *)h_dvbpsi->p_private_decoder; free(p_sections); if(h_dvbpsi->p_current_section) dvbpsi_DeletePSISections(h_dvbpsi->p_current_section); if(h_dvbpsi->p_free_sections) dvbpsi_DeletePSISections(h_dvbpsi->p_free_sections); free(h_dvbpsi); } void dvbpsi_PushSection(dvbpsi_handle h_dvbpsi, dvbpsi_psi_section_t * p_section) { h_dvbpsi->pf_callback(h_dvbpsi, p_section); } dvbstreamer-2.1.0/src/dvbpsi/tables/000077500000000000000000000000001217721213100173555ustar00rootroot00000000000000dvbstreamer-2.1.0/src/dvbpsi/tables/atsc_eit.c000077500000000000000000000441021217721213100213200ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA eit.c Decode PSIP Virtual Channel Table. */ #include "config.h" #include #include #include #include #include "dvbpsi.h" #include "dvbpsi_private.h" #include "psi.h" #include "descriptor.h" #include "demux.h" #include "atsc/eit.h" #include "objects.h" typedef struct dvbpsi_atsc_eit_decoder_s { dvbpsi_atsc_eit_callback pf_callback; void * p_cb_data; dvbpsi_atsc_eit_t current_eit; dvbpsi_atsc_eit_t * p_building_eit; int b_current_valid; uint8_t i_last_section_number; dvbpsi_psi_section_t * ap_sections [256]; } dvbpsi_atsc_eit_decoder_t; dvbpsi_atsc_eit_event_t *dvbpsi_atsc_EITAddEvent(dvbpsi_atsc_eit_t* p_eit, uint16_t i_event_id, uint32_t i_start_time, uint8_t i_etm_location, uint32_t i_length_seconds, uint8_t i_title_length, uint8_t *p_title); dvbpsi_descriptor_t *dvbpsi_atsc_EITEventAddDescriptor( dvbpsi_atsc_eit_event_t *p_table, uint8_t i_tag, uint8_t i_length, uint8_t *p_data); void dvbpsi_atsc_GatherEITSections(dvbpsi_decoder_t * p_psi_decoder, void * p_private_decoder, dvbpsi_psi_section_t * p_section); void dvbpsi_atsc_DecodeEITSections(dvbpsi_atsc_eit_t* p_eit, dvbpsi_psi_section_t* p_section); /***************************************************************************** * dvbpsi_atsc_AttachEIT ***************************************************************************** * Initialize a EIT subtable decoder. *****************************************************************************/ int dvbpsi_atsc_AttachEIT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, uint16_t i_extension, dvbpsi_atsc_eit_callback pf_callback, void* p_cb_data) { dvbpsi_demux_t* p_demux = (dvbpsi_demux_t*)p_psi_decoder->p_private_decoder; dvbpsi_demux_subdec_t* p_subdec; dvbpsi_atsc_eit_decoder_t* p_eit_decoder; unsigned int i; if(dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension)) { DVBPSI_ERROR_ARG("EIT decoder", "Already a decoder for (table_id == 0x%02x extension == 0x%04x)", i_table_id, i_extension); return 1; } p_subdec = (dvbpsi_demux_subdec_t*)malloc(sizeof(dvbpsi_demux_subdec_t)); if(p_subdec == NULL) { return 1; } p_eit_decoder = (dvbpsi_atsc_eit_decoder_t*)malloc(sizeof(dvbpsi_atsc_eit_decoder_t)); if(p_eit_decoder == NULL) { free(p_subdec); return 1; } /* subtable decoder configuration */ p_subdec->pf_callback = &dvbpsi_atsc_GatherEITSections; p_subdec->p_cb_data = p_eit_decoder; p_subdec->i_id = ((uint32_t)i_table_id << 16) | i_extension; p_subdec->pf_detach = dvbpsi_atsc_DetachEIT; /* Attach the subtable decoder to the demux */ p_subdec->p_next = p_demux->p_first_subdec; p_demux->p_first_subdec = p_subdec; /* EIT decoder information */ p_eit_decoder->pf_callback = pf_callback; p_eit_decoder->p_cb_data = p_cb_data; /* EIT decoder initial state */ p_eit_decoder->b_current_valid = 0; p_eit_decoder->p_building_eit = NULL; for(i = 0; i <= 255; i++) p_eit_decoder->ap_sections[i] = NULL; return 0; } /***************************************************************************** * dvbpsi_atsc_DetachEIT ***************************************************************************** * Close a EIT decoder. *****************************************************************************/ void dvbpsi_atsc_DetachEIT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_t i_extension) { dvbpsi_demux_subdec_t* p_subdec; dvbpsi_demux_subdec_t** pp_prev_subdec; dvbpsi_atsc_eit_decoder_t* p_eit_decoder; unsigned int i; p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension); if(p_demux == NULL) { DVBPSI_ERROR_ARG("EIT Decoder", "No such EIT decoder (table_id == 0x%02x," "extension == 0x%04x)", i_table_id, i_extension); return; } p_eit_decoder = (dvbpsi_atsc_eit_decoder_t*)p_subdec->p_cb_data; if (p_eit_decoder->p_building_eit) { ObjectRefDec(p_eit_decoder->p_building_eit); } for(i = 0; i <= 255; i++) { if(p_eit_decoder->ap_sections[i]) dvbpsi_DeletePSISections(p_eit_decoder->ap_sections[i]); } free(p_subdec->p_cb_data); pp_prev_subdec = &p_demux->p_first_subdec; while(*pp_prev_subdec != p_subdec) pp_prev_subdec = &(*pp_prev_subdec)->p_next; *pp_prev_subdec = p_subdec->p_next; free(p_subdec); } /***************************************************************************** * dvbpsi_atsc_InitEIT ***************************************************************************** * Initialize a pre-allocated dvbpsi_atsc_eit_t structure. *****************************************************************************/ void dvbpsi_atsc_InitEIT(dvbpsi_atsc_eit_t* p_eit,uint8_t i_version, int b_current_next, uint8_t i_protocol, uint16_t i_source_id) { p_eit->i_version = i_version; p_eit->b_current_next = b_current_next; p_eit->i_protocol = i_protocol; p_eit->i_source_id = i_source_id; p_eit->p_first_event = NULL; } /***************************************************************************** * dvbpsi_atsc_EmptyEIT ***************************************************************************** * Clean a dvbpsi_atsc_eit_t structure. *****************************************************************************/ void dvbpsi_atsc_EmptyEIT(dvbpsi_atsc_eit_t* p_eit) { dvbpsi_atsc_eit_event_t* p_event = p_eit->p_first_event; while(p_event != NULL) { dvbpsi_atsc_eit_event_t* p_tmp = p_event->p_next; dvbpsi_DeleteDescriptors(p_event->p_first_descriptor); free(p_event); p_event = p_tmp; } p_eit->p_first_event = NULL; } /***************************************************************************** * dvbpsi_atsc_EITAddChannel ***************************************************************************** * Add a Channel description at the end of the EIT. *****************************************************************************/ dvbpsi_atsc_eit_event_t *dvbpsi_atsc_EITAddEvent(dvbpsi_atsc_eit_t* p_eit, uint16_t i_event_id, uint32_t i_start_time, uint8_t i_etm_location, uint32_t i_length_seconds, uint8_t i_title_length, uint8_t *p_title) { dvbpsi_atsc_eit_event_t * p_event = (dvbpsi_atsc_eit_event_t*)malloc(sizeof(dvbpsi_atsc_eit_event_t)); if(p_event) { p_event->i_event_id = i_event_id; p_event->i_start_time = i_start_time; p_event->i_etm_location = i_etm_location; p_event->i_length_seconds = i_length_seconds; p_event->i_title_length = i_title_length; memcpy(p_event->i_title, p_title, i_title_length); p_event->p_first_descriptor = NULL; p_event->p_next = NULL; if(p_eit->p_first_event== NULL) { p_eit->p_first_event = p_event; } else { dvbpsi_atsc_eit_event_t * p_last_event = p_eit->p_first_event; while(p_last_event->p_next != NULL) p_last_event = p_last_event->p_next; p_last_event->p_next = p_event; } } return p_event; } /***************************************************************************** * dvbpsi_EITTableAddDescriptor ***************************************************************************** * Add a descriptor in the EIT table description. *****************************************************************************/ dvbpsi_descriptor_t *dvbpsi_atsc_EITChannelAddDescriptor( dvbpsi_atsc_eit_event_t *p_event, uint8_t i_tag, uint8_t i_length, uint8_t *p_data) { dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(i_tag, i_length, p_data); if(p_descriptor) { if(p_event->p_first_descriptor == NULL) { p_event->p_first_descriptor = p_descriptor; } else { dvbpsi_descriptor_t * p_last_descriptor = p_event->p_first_descriptor; while(p_last_descriptor->p_next != NULL) p_last_descriptor = p_last_descriptor->p_next; p_last_descriptor->p_next = p_descriptor; } } return p_descriptor; } /***************************************************************************** * dvbpsi_atsc_GatherEITSections ***************************************************************************** * Callback for the subtable demultiplexor. *****************************************************************************/ void dvbpsi_atsc_GatherEITSections(dvbpsi_decoder_t * p_psi_decoder, void * p_private_decoder, dvbpsi_psi_section_t * p_section) { dvbpsi_atsc_eit_decoder_t * p_eit_decoder = (dvbpsi_atsc_eit_decoder_t*)p_private_decoder; int b_append = 1; int b_reinit = 0; unsigned int i; DVBPSI_DEBUG_ARG("EIT decoder", "Table version %2d, " "i_table_id %2d, " "i_extension %5d, " "section %3d up to %3d, " "current %1d", p_section->i_version, p_section->i_table_id, p_section->i_extension, p_section->i_number, p_section->i_last_number, p_section->b_current_next); if(!p_section->b_syntax_indicator) { /* Invalid section_syntax_indicator */ DVBPSI_ERROR("EIT decoder", "invalid section (section_syntax_indicator == 0)"); b_append = 0; } /* Now if b_append is true then we have a valid EIT section */ if(b_append) { /* TS discontinuity check */ if(p_psi_decoder->b_discontinuity) { b_reinit = 1; p_psi_decoder->b_discontinuity = 0; } else { /* Perform a few sanity checks */ if(p_eit_decoder->p_building_eit) { if(p_eit_decoder->p_building_eit->i_source_id != p_section->i_extension) { /* transport_stream_id */ DVBPSI_ERROR("EIT decoder", "'transport_stream_id' differs" " whereas no TS discontinuity has occured"); b_reinit = 1; } else if(p_eit_decoder->p_building_eit->i_version != p_section->i_version) { /* version_number */ DVBPSI_ERROR("EIT decoder", "'version_number' differs" " whereas no discontinuity has occured"); b_reinit = 1; } else if(p_eit_decoder->i_last_section_number != p_section->i_last_number) { /* last_section_number */ DVBPSI_ERROR("EIT decoder", "'last_section_number' differs" " whereas no discontinuity has occured"); b_reinit = 1; } } else { if( (p_eit_decoder->b_current_valid) && (p_eit_decoder->current_eit.i_version == p_section->i_version)) { /* Signal a new EIT if the previous one wasn't active */ if( (!p_eit_decoder->current_eit.b_current_next) && (p_section->b_current_next)) { dvbpsi_atsc_eit_t * p_eit = (dvbpsi_atsc_eit_t*)ObjectCreateType(dvbpsi_atsc_eit_t); p_eit_decoder->current_eit.b_current_next = 1; *p_eit = p_eit_decoder->current_eit; p_eit_decoder->pf_callback(p_eit_decoder->p_cb_data, p_eit); } /* Don't decode since this version is already decoded */ b_append = 0; } } } } /* Reinit the decoder if wanted */ if(b_reinit) { /* Force redecoding */ p_eit_decoder->b_current_valid = 0; /* Free structures */ if(p_eit_decoder->p_building_eit) { ObjectRefDec(p_eit_decoder->p_building_eit); p_eit_decoder->p_building_eit = NULL; } /* Clear the section array */ for(i = 0; i <= 255; i++) { if(p_eit_decoder->ap_sections[i] != NULL) { dvbpsi_ReleasePSISections(p_psi_decoder, p_eit_decoder->ap_sections[i]); p_eit_decoder->ap_sections[i] = NULL; } } } /* Append the section to the list if wanted */ if(b_append) { int b_complete; /* Initialize the structures if it's the first section received */ if(!p_eit_decoder->p_building_eit) { dvbpsi_atsc_NewEIT(p_eit_decoder->p_building_eit, p_section->i_version, p_section->b_current_next, p_section->p_payload_start[0], p_section->i_extension); p_eit_decoder->i_last_section_number = p_section->i_last_number; } /* Fill the section array */ if(p_eit_decoder->ap_sections[p_section->i_number] != NULL) { DVBPSI_DEBUG_ARG("EIT decoder", "overwrite section number %d", p_section->i_number); dvbpsi_ReleasePSISections(p_psi_decoder, p_eit_decoder->ap_sections[p_section->i_number]); } p_eit_decoder->ap_sections[p_section->i_number] = p_section; /* Check if we have all the sections */ b_complete = 0; for(i = 0; i <= p_eit_decoder->i_last_section_number; i++) { if(!p_eit_decoder->ap_sections[i]) break; if(i == p_eit_decoder->i_last_section_number) b_complete = 1; } if(b_complete) { /* Save the current information */ p_eit_decoder->current_eit = *p_eit_decoder->p_building_eit; p_eit_decoder->b_current_valid = 1; /* Chain the sections */ if(p_eit_decoder->i_last_section_number) { for(i = 0; i <= p_eit_decoder->i_last_section_number - 1; i++) p_eit_decoder->ap_sections[i]->p_next = p_eit_decoder->ap_sections[i + 1]; } /* Decode the sections */ dvbpsi_atsc_DecodeEITSections(p_eit_decoder->p_building_eit, p_eit_decoder->ap_sections[0]); /* Delete the sections */ dvbpsi_ReleasePSISections(p_psi_decoder,p_eit_decoder->ap_sections[0]); /* signal the new EIT */ p_eit_decoder->pf_callback(p_eit_decoder->p_cb_data, p_eit_decoder->p_building_eit); /* Reinitialize the structures */ p_eit_decoder->p_building_eit = NULL; for(i = 0; i <= p_eit_decoder->i_last_section_number; i++) p_eit_decoder->ap_sections[i] = NULL; } } else { dvbpsi_ReleasePSISections(p_psi_decoder,p_section); } } /***************************************************************************** * dvbpsi_DecodeEITSection ***************************************************************************** * EIT decoder. *****************************************************************************/ void dvbpsi_atsc_DecodeEITSections(dvbpsi_atsc_eit_t* p_eit, dvbpsi_psi_section_t* p_section) { uint8_t *p_byte, *p_end; while(p_section) { uint16_t i_number_events = p_section->p_payload_start[1]; uint16_t i_events_count = 0; uint16_t i_length = 0; for(p_byte = p_section->p_payload_start + 2; ((p_byte + 4) < p_section->p_payload_end) && (i_events_count < i_number_events); i_events_count ++) { dvbpsi_atsc_eit_event_t* p_event; uint16_t i_event_id = ((uint16_t)(p_byte[0] & 0x3f) << 8) | ((uint16_t) p_byte[1]); uint32_t i_start_time = ((uint32_t)(p_byte[2] << 24)) | ((uint32_t)(p_byte[3] << 16)) | ((uint32_t)(p_byte[4] << 8)) | ((uint32_t)(p_byte[5])); uint8_t i_etm_location = (uint8_t)((p_byte[6] & 0x30) >> 4); uint32_t i_length_seconds = ((uint32_t)((p_byte[6] & 0x0f) << 16)) | ((uint32_t)(p_byte[7] << 8)) | ((uint32_t)(p_byte[8])); uint8_t i_title_length = p_byte[9]; p_byte += 10; p_event = dvbpsi_atsc_EITAddEvent(p_eit, i_event_id, i_start_time, i_etm_location, i_length_seconds, i_title_length, p_byte); p_byte += i_title_length; i_length = ((uint16_t)(p_byte[0] & 0xf) <<8) | p_byte[1]; /* Table descriptors */ p_byte += 2; p_end = p_byte + i_length; if( p_end > p_section->p_payload_end ) break; while(p_byte + 2 <= p_end) { uint8_t i_tag = p_byte[0]; uint8_t i_length = p_byte[1]; if(i_length + 2 <= p_end - p_byte) dvbpsi_atsc_EITChannelAddDescriptor(p_event, i_tag, i_length, p_byte + 2); p_byte += 2 + i_length; } } p_section = p_section->p_next; } } dvbstreamer-2.1.0/src/dvbpsi/tables/atsc_ett.c000077500000000000000000000221011217721213100213260ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA atsc_ett.c Decode PSIP Extended Text Table. */ #include #include #include #include #include #include #include #include "dvbpsi/datetime.h" #include "dvbpsi/atsc/ett.h" #include "logging.h" #include "objects.h" /***************************************************************************** * dvbpsi_atsc_ett_etm_id_s ***************************************************************************** * ETM Version information. *****************************************************************************/ typedef struct dvbpsi_atsc_ett_etm_version_s { uint32_t i_etm_id; uint8_t i_version; struct dvbpsi_atsc_ett_etm_version_s *p_next; }dvbpsi_atsc_ett_etm_version_t; /***************************************************************************** * dvbpsi_atsc_ett_decoder_s ***************************************************************************** * ETT decoder. *****************************************************************************/ typedef struct dvbpsi_atsc_ett_decoder_s { dvbpsi_atsc_ett_callback pf_callback; void * p_cb_data; dvbpsi_atsc_ett_etm_version_t * p_etm_versions; } dvbpsi_atsc_ett_decoder_t; /***************************************************************************** * dvbpsi_atsc_GatherETTSections ***************************************************************************** * Callback for the PSI decoder. *****************************************************************************/ void dvbpsi_atsc_GatherETTSections(dvbpsi_decoder_t* p_decoder, dvbpsi_psi_section_t* p_section); /***************************************************************************** * dvbpsi_atsc_DecodeETTSection ***************************************************************************** * TDT decoder. *****************************************************************************/ void dvbpsi_atsc_DecodeETTSection(dvbpsi_atsc_ett_t* p_ett, dvbpsi_psi_section_t* p_section); /***************************************************************************** * dvbpsi_atsc_AttachETT ***************************************************************************** * Initialize a ETT decoder and return a handle on it. *****************************************************************************/ dvbpsi_handle dvbpsi_atsc_AttachETT(dvbpsi_atsc_ett_callback pf_callback, void* p_cb_data) { dvbpsi_handle h_dvbpsi = (dvbpsi_decoder_t*)malloc(sizeof(dvbpsi_decoder_t)); dvbpsi_atsc_ett_decoder_t* p_ett_decoder; if(h_dvbpsi == NULL) return NULL; p_ett_decoder = (dvbpsi_atsc_ett_decoder_t*)malloc(sizeof(dvbpsi_atsc_ett_decoder_t)); if(p_ett_decoder == NULL) { free(h_dvbpsi); return NULL; } /* PSI decoder configuration */ h_dvbpsi->pf_callback = &dvbpsi_atsc_GatherETTSections; h_dvbpsi->p_private_decoder = p_ett_decoder; h_dvbpsi->i_section_max_size = 4096; /* PSI decoder initial state */ h_dvbpsi->i_continuity_counter = 31; h_dvbpsi->b_discontinuity = 1; h_dvbpsi->p_current_section = NULL; h_dvbpsi->p_free_sections = NULL; /* ETT decoder information */ p_ett_decoder->pf_callback = pf_callback; p_ett_decoder->p_cb_data = p_cb_data; p_ett_decoder->p_etm_versions = NULL; return h_dvbpsi; } /***************************************************************************** * dvbpsi_atsc_DetachETT ***************************************************************************** * Close a ETT decoder. The handle isn't valid any more. *****************************************************************************/ void dvbpsi_atsc_DetachETT(dvbpsi_handle h_dvbpsi) { dvbpsi_atsc_ett_decoder_t* p_ett_decoder = (dvbpsi_atsc_ett_decoder_t*)h_dvbpsi->p_private_decoder; dvbpsi_atsc_ett_etm_version_t *p_etm_version, *p_next; for (p_etm_version = p_ett_decoder->p_etm_versions; p_etm_version; p_etm_version = p_next) { p_next = p_etm_version->p_next; free(p_etm_version); } free(h_dvbpsi->p_private_decoder); if(h_dvbpsi->p_current_section) dvbpsi_DeletePSISections(h_dvbpsi->p_current_section); if(h_dvbpsi->p_free_sections) dvbpsi_DeletePSISections(h_dvbpsi->p_free_sections); free(h_dvbpsi); } /***************************************************************************** * dvbpsi_atsc_InitETT ***************************************************************************** * Initialize a pre-allocated dvbpsi_ett_t structure. *****************************************************************************/ void dvbpsi_atsc_InitETT(dvbpsi_atsc_ett_t *p_ett, uint8_t i_version, int b_current_next, uint8_t i_protocol, uint16_t i_ett_table_id, uint32_t i_etm_id) { p_ett->i_version = i_version; p_ett->b_current_next = b_current_next; p_ett->i_protocol = i_protocol; p_ett->i_ett_table_id = i_ett_table_id; p_ett->i_etm_id = i_etm_id; } /***************************************************************************** * dvbpsi_atsc_EmptyETT ***************************************************************************** * Clean a dvbpsi_atsc_ett_t structure. *****************************************************************************/ void dvbpsi_atsc_EmptyETT(dvbpsi_atsc_ett_t *p_ett) { if (p_ett->p_etm) { free(p_ett->p_etm); p_ett->p_etm = NULL; p_ett->i_etm_length = 0; } } /***************************************************************************** * dvbpsi_atsc_GatherETTSections ***************************************************************************** * Callback for the PSI decoder. *****************************************************************************/ void dvbpsi_atsc_GatherETTSections(dvbpsi_decoder_t* p_decoder, dvbpsi_psi_section_t* p_section) { dvbpsi_atsc_ett_decoder_t* p_ett_decoder = (dvbpsi_atsc_ett_decoder_t*)p_decoder->p_private_decoder; if(p_section->i_table_id == 0xCC) { dvbpsi_atsc_ett_t* p_ett; dvbpsi_atsc_ett_etm_version_t *p_etm_version; bool b_found = FALSE; uint32_t i_etm_id = ((uint32_t)p_section->p_payload_start[1] << 24) | ((uint32_t)p_section->p_payload_start[2] << 16) | ((uint32_t)p_section->p_payload_start[3] << 8) | ((uint32_t)p_section->p_payload_start[4] << 0); for (p_etm_version = p_ett_decoder->p_etm_versions; p_etm_version; p_etm_version=p_etm_version->p_next) { if (p_etm_version->i_etm_id == i_etm_id) { b_found = TRUE; break; } } if (!b_found || (p_etm_version->i_version != p_section->i_version)) { dvbpsi_atsc_NewETT(p_ett, p_section->i_version, p_section->b_current_next, p_section->p_payload_start[0], p_section->i_extension, i_etm_id ); dvbpsi_atsc_DecodeETTSection(p_ett, p_section); p_ett_decoder->pf_callback(p_ett_decoder->p_cb_data, p_ett); } if (!b_found) { p_etm_version = malloc(sizeof(dvbpsi_atsc_ett_etm_version_t)); p_etm_version->i_etm_id = i_etm_id; p_etm_version->p_next = p_ett_decoder->p_etm_versions; p_ett_decoder->p_etm_versions = p_etm_version; } p_etm_version->i_version = p_section->i_version; } dvbpsi_ReleasePSISections(p_decoder, p_section); } /***************************************************************************** * dvbpsi_atsc_DecodeETTSection ***************************************************************************** * ETT decoder. *****************************************************************************/ void dvbpsi_atsc_DecodeETTSection(dvbpsi_atsc_ett_t* p_ett, dvbpsi_psi_section_t* p_section) { uint16_t i_etm_length = p_section->i_length - 14; uint8_t *p_etm = malloc(i_etm_length); if (p_etm) { memcpy(p_etm, p_section->p_payload_start + 5, i_etm_length); p_ett->p_etm = p_etm; p_ett->i_etm_length = i_etm_length; } } dvbstreamer-2.1.0/src/dvbpsi/tables/atsc_mgt.c000077500000000000000000000462411217721213100213340ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA mgt.c Decode PSIP Master Guide Table. */ #include "config.h" #include #include #include #include #include "dvbpsi.h" #include "dvbpsi_private.h" #include "psi.h" #include "descriptor.h" #include "demux.h" #include "atsc/mgt.h" #include "objects.h" typedef struct dvbpsi_atsc_mgt_decoder_s { dvbpsi_atsc_mgt_callback pf_callback; void * p_cb_data; dvbpsi_atsc_mgt_t current_mgt; dvbpsi_atsc_mgt_t * p_building_mgt; int b_current_valid; uint8_t i_last_section_number; dvbpsi_psi_section_t * ap_sections [256]; } dvbpsi_atsc_mgt_decoder_t; dvbpsi_descriptor_t *dvbpsi_atsc_MGTAddDescriptor( dvbpsi_atsc_mgt_t *p_mgt, uint8_t i_tag, uint8_t i_length, uint8_t *p_data); dvbpsi_atsc_mgt_table_t *dvbpsi_atsc_MGTAddTable(dvbpsi_atsc_mgt_t* p_mgt, uint16_t i_type, uint16_t i_pid, uint8_t i_version, uint32_t i_number_bytes); dvbpsi_descriptor_t *dvbpsi_atsc_MGTTableAddDescriptor( dvbpsi_atsc_mgt_table_t *p_table, uint8_t i_tag, uint8_t i_length, uint8_t *p_data); void dvbpsi_atsc_GatherMGTSections(dvbpsi_decoder_t * p_psi_decoder, void * p_private_decoder, dvbpsi_psi_section_t * p_section); void dvbpsi_atsc_DecodeMGTSections(dvbpsi_atsc_mgt_t* p_mgt, dvbpsi_psi_section_t* p_section); /***************************************************************************** * dvbpsi_atsc_AttachMGT ***************************************************************************** * Initialize a MGT subtable decoder. *****************************************************************************/ int dvbpsi_atsc_AttachMGT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, dvbpsi_atsc_mgt_callback pf_callback, void* p_cb_data) { dvbpsi_demux_t* p_demux = (dvbpsi_demux_t*)p_psi_decoder->p_private_decoder; dvbpsi_demux_subdec_t* p_subdec; dvbpsi_atsc_mgt_decoder_t* p_mgt_decoder; unsigned int i; if(dvbpsi_demuxGetSubDec(p_demux, i_table_id, 0)) { DVBPSI_ERROR_ARG("MGT decoder", "Already a decoder for (table_id == 0x%02x)", i_table_id); return 1; } p_subdec = (dvbpsi_demux_subdec_t*)malloc(sizeof(dvbpsi_demux_subdec_t)); if(p_subdec == NULL) { return 1; } p_mgt_decoder = (dvbpsi_atsc_mgt_decoder_t*)malloc(sizeof(dvbpsi_atsc_mgt_decoder_t)); if(p_mgt_decoder == NULL) { free(p_subdec); return 1; } /* subtable decoder configuration */ p_subdec->pf_callback = &dvbpsi_atsc_GatherMGTSections; p_subdec->p_cb_data = p_mgt_decoder; p_subdec->i_id = (uint32_t)i_table_id << 16; p_subdec->pf_detach = dvbpsi_atsc_DetachMGT; /* Attach the subtable decoder to the demux */ p_subdec->p_next = p_demux->p_first_subdec; p_demux->p_first_subdec = p_subdec; /* MGT decoder information */ p_mgt_decoder->pf_callback = pf_callback; p_mgt_decoder->p_cb_data = p_cb_data; /* MGT decoder initial state */ p_mgt_decoder->b_current_valid = 0; p_mgt_decoder->p_building_mgt = NULL; for(i = 0; i <= 255; i++) p_mgt_decoder->ap_sections[i] = NULL; return 0; } /***************************************************************************** * dvbpsi_atsc_DetachMGT ***************************************************************************** * Close a MGT decoder. *****************************************************************************/ void dvbpsi_atsc_DetachMGT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_t i_extension) { dvbpsi_demux_subdec_t* p_subdec; dvbpsi_demux_subdec_t** pp_prev_subdec; dvbpsi_atsc_mgt_decoder_t* p_mgt_decoder; unsigned int i; p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, 0); if(p_demux == NULL) { DVBPSI_ERROR_ARG("MGT Decoder", "No such MGT decoder (table_id == 0x%02x," "extension == 0x00)", i_table_id); return; } p_mgt_decoder = (dvbpsi_atsc_mgt_decoder_t*)p_subdec->p_cb_data; if (p_mgt_decoder->p_building_mgt) { ObjectRefDec(p_mgt_decoder->p_building_mgt); } for(i = 0; i <= 255; i++) { if(p_mgt_decoder->ap_sections[i]) dvbpsi_DeletePSISections(p_mgt_decoder->ap_sections[i]); } free(p_subdec->p_cb_data); pp_prev_subdec = &p_demux->p_first_subdec; while(*pp_prev_subdec != p_subdec) pp_prev_subdec = &(*pp_prev_subdec)->p_next; *pp_prev_subdec = p_subdec->p_next; free(p_subdec); } /***************************************************************************** * dvbpsi_InitMGT ***************************************************************************** * Initialize a pre-allocated dvbpsi_atsc_mgt_t structure. *****************************************************************************/ void dvbpsi_atsc_InitMGT(dvbpsi_atsc_mgt_t* p_mgt,uint8_t i_version, int b_current_next, uint8_t i_protocol) { p_mgt->i_version = i_version; p_mgt->b_current_next = b_current_next; p_mgt->i_protocol = i_protocol; p_mgt->p_first_table = NULL; p_mgt->p_first_descriptor = NULL; } /***************************************************************************** * dvbpsi_EmptyMGT ***************************************************************************** * Clean a dvbpsi_atsc_mgt_t structure. *****************************************************************************/ void dvbpsi_atsc_EmptyMGT(dvbpsi_atsc_mgt_t* p_mgt) { dvbpsi_atsc_mgt_table_t* p_table = p_mgt->p_first_table; while(p_table != NULL) { dvbpsi_atsc_mgt_table_t* p_tmp = p_table->p_next; dvbpsi_DeleteDescriptors(p_table->p_first_descriptor); free(p_table); p_table = p_tmp; } dvbpsi_DeleteDescriptors(p_mgt->p_first_descriptor); p_mgt->p_first_table = NULL; p_mgt->p_first_descriptor = NULL; } /***************************************************************************** * dvbpsi_atsc_MGTAddDescriptor ***************************************************************************** * Add a descriptor to the MGT table. *****************************************************************************/ dvbpsi_descriptor_t *dvbpsi_atsc_MGTAddDescriptor( dvbpsi_atsc_mgt_t *p_mgt, uint8_t i_tag, uint8_t i_length, uint8_t *p_data) { dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(i_tag, i_length, p_data); if(p_descriptor) { if(p_mgt->p_first_descriptor == NULL) { p_mgt->p_first_descriptor = p_descriptor; } else { dvbpsi_descriptor_t * p_last_descriptor = p_mgt->p_first_descriptor; while(p_last_descriptor->p_next != NULL) p_last_descriptor = p_last_descriptor->p_next; p_last_descriptor->p_next = p_descriptor; } } return p_descriptor; } /***************************************************************************** * dvbpsi_atsc_MGTAddTable ***************************************************************************** * Add a table description at the end of the MGT. *****************************************************************************/ dvbpsi_atsc_mgt_table_t *dvbpsi_atsc_MGTAddTable(dvbpsi_atsc_mgt_t* p_mgt, uint16_t i_type, uint16_t i_pid, uint8_t i_version, uint32_t i_number_bytes) { dvbpsi_atsc_mgt_table_t * p_table = (dvbpsi_atsc_mgt_table_t*)malloc(sizeof(dvbpsi_atsc_mgt_table_t)); if(p_table) { p_table->i_type = i_type; p_table->i_pid = i_pid; p_table->i_version = i_version; p_table->i_number_bytes = i_number_bytes; p_table->p_first_descriptor = NULL; p_table->p_next = NULL; if(p_mgt->p_first_table == NULL) { p_mgt->p_first_table = p_table; } else { dvbpsi_atsc_mgt_table_t * p_last_table = p_mgt->p_first_table; while(p_last_table->p_next != NULL) p_last_table = p_last_table->p_next; p_last_table->p_next = p_table; } } return p_table; } /***************************************************************************** * dvbpsi_atsc_MGTTableAddDescriptor ***************************************************************************** * Add a descriptor in the MGT table description. *****************************************************************************/ dvbpsi_descriptor_t *dvbpsi_atsc_MGTTableAddDescriptor( dvbpsi_atsc_mgt_table_t *p_table, uint8_t i_tag, uint8_t i_length, uint8_t *p_data) { dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(i_tag, i_length, p_data); if(p_descriptor) { if(p_table->p_first_descriptor == NULL) { p_table->p_first_descriptor = p_descriptor; } else { dvbpsi_descriptor_t * p_last_descriptor = p_table->p_first_descriptor; while(p_last_descriptor->p_next != NULL) p_last_descriptor = p_last_descriptor->p_next; p_last_descriptor->p_next = p_descriptor; } } return p_descriptor; } /***************************************************************************** * dvbpsi_atsc_GatherMGTSections ***************************************************************************** * Callback for the subtable demultiplexor. *****************************************************************************/ void dvbpsi_atsc_GatherMGTSections(dvbpsi_decoder_t * p_psi_decoder, void * p_private_decoder, dvbpsi_psi_section_t * p_section) { dvbpsi_atsc_mgt_decoder_t * p_mgt_decoder = (dvbpsi_atsc_mgt_decoder_t*)p_private_decoder; int b_append = 1; int b_reinit = 0; unsigned int i; DVBPSI_DEBUG_ARG("MGT decoder", "Table version %2d, " "i_table_id %2d, " "i_extension %5d, " "section %3d up to %3d, " "current %1d", p_section->i_version, p_section->i_table_id, p_section->i_extension, p_section->i_number, p_section->i_last_number, p_section->b_current_next); if(!p_section->b_syntax_indicator) { /* Invalid section_syntax_indicator */ DVBPSI_ERROR("MGT decoder", "invalid section (section_syntax_indicator == 0)"); b_append = 0; } /* Now if b_append is true then we have a valid MGT section */ if(b_append) { /* TS discontinuity check */ if(p_psi_decoder->b_discontinuity) { b_reinit = 1; p_psi_decoder->b_discontinuity = 0; } else { /* Perform a few sanity checks */ if(p_mgt_decoder->p_building_mgt) { if(p_mgt_decoder->p_building_mgt->i_version != p_section->i_version) { /* version_number */ DVBPSI_ERROR("MGT decoder", "'version_number' differs" " whereas no discontinuity has occured"); b_reinit = 1; } else if(p_mgt_decoder->i_last_section_number != p_section->i_last_number) { /* last_section_number */ DVBPSI_ERROR("MGT decoder", "'last_section_number' differs" " whereas no discontinuity has occured"); b_reinit = 1; } } else { if( (p_mgt_decoder->b_current_valid) && (p_mgt_decoder->current_mgt.i_version == p_section->i_version)) { /* Signal a new MGT if the previous one wasn't active */ if( (!p_mgt_decoder->current_mgt.b_current_next) && (p_section->b_current_next)) { dvbpsi_atsc_mgt_t * p_mgt = (dvbpsi_atsc_mgt_t*)ObjectCreateType(dvbpsi_atsc_mgt_t); p_mgt_decoder->current_mgt.b_current_next = 1; *p_mgt = p_mgt_decoder->current_mgt; p_mgt_decoder->pf_callback(p_mgt_decoder->p_cb_data, p_mgt); } /* Don't decode since this version is already decoded */ b_append = 0; } } } } /* Reinit the decoder if wanted */ if(b_reinit) { /* Force redecoding */ p_mgt_decoder->b_current_valid = 0; /* Free structures */ if(p_mgt_decoder->p_building_mgt) { ObjectRefDec(p_mgt_decoder->p_building_mgt); p_mgt_decoder->p_building_mgt = NULL; } /* Clear the section array */ for(i = 0; i <= 255; i++) { if(p_mgt_decoder->ap_sections[i] != NULL) { dvbpsi_ReleasePSISections(p_psi_decoder, p_mgt_decoder->ap_sections[i]); p_mgt_decoder->ap_sections[i] = NULL; } } } /* Append the section to the list if wanted */ if(b_append) { int b_complete; /* Initialize the structures if it's the first section received */ if(!p_mgt_decoder->p_building_mgt) { dvbpsi_atsc_NewMGT(p_mgt_decoder->p_building_mgt, p_section->i_version, p_section->b_current_next, p_section->p_payload_start[0]); p_mgt_decoder->i_last_section_number = p_section->i_last_number; } /* Fill the section array */ if(p_mgt_decoder->ap_sections[p_section->i_number] != NULL) { DVBPSI_DEBUG_ARG("MGT decoder", "overwrite section number %d", p_section->i_number); dvbpsi_ReleasePSISections(p_psi_decoder, p_mgt_decoder->ap_sections[p_section->i_number]); } p_mgt_decoder->ap_sections[p_section->i_number] = p_section; /* Check if we have all the sections */ b_complete = 0; for(i = 0; i <= p_mgt_decoder->i_last_section_number; i++) { if(!p_mgt_decoder->ap_sections[i]) break; if(i == p_mgt_decoder->i_last_section_number) b_complete = 1; } if(b_complete) { /* Save the current information */ p_mgt_decoder->current_mgt = *p_mgt_decoder->p_building_mgt; p_mgt_decoder->b_current_valid = 1; /* Chain the sections */ if(p_mgt_decoder->i_last_section_number) { for(i = 0; i <= p_mgt_decoder->i_last_section_number - 1; i++) p_mgt_decoder->ap_sections[i]->p_next = p_mgt_decoder->ap_sections[i + 1]; } /* Decode the sections */ dvbpsi_atsc_DecodeMGTSections(p_mgt_decoder->p_building_mgt, p_mgt_decoder->ap_sections[0]); /* Delete the sections */ dvbpsi_ReleasePSISections(p_psi_decoder,p_mgt_decoder->ap_sections[0]); /* signal the new MGT */ p_mgt_decoder->pf_callback(p_mgt_decoder->p_cb_data, p_mgt_decoder->p_building_mgt); /* Reinitialize the structures */ p_mgt_decoder->p_building_mgt = NULL; for(i = 0; i <= p_mgt_decoder->i_last_section_number; i++) p_mgt_decoder->ap_sections[i] = NULL; } } else { dvbpsi_ReleasePSISections(p_psi_decoder,p_section); } } /***************************************************************************** * dvbpsi_atsc_DecodeMGTSection ***************************************************************************** * MGT decoder. *****************************************************************************/ void dvbpsi_atsc_DecodeMGTSections(dvbpsi_atsc_mgt_t* p_mgt, dvbpsi_psi_section_t* p_section) { uint8_t *p_byte, *p_end; while(p_section) { uint16_t i_tables_defined = (p_section->p_payload_start[1] << 8) | p_section->p_payload_start[2]; uint16_t i_table_count = 0; uint16_t i_length = 0; for(p_byte = p_section->p_payload_start + 3; ((p_byte + 6) < p_section->p_payload_end) && (i_table_count < i_tables_defined); i_table_count ++) { dvbpsi_atsc_mgt_table_t* p_table; uint16_t i_type = ((uint16_t)(p_byte[0] << 8)) | p_byte[1]; uint16_t i_pid = ((uint16_t)(p_byte[2] & 0x1f) << 8) | p_byte[3]; uint8_t i_version = (uint8_t)(p_byte[4] & 0x1f); uint32_t i_number_bytes = ((uint32_t) p_byte[5] << 24) | ((uint32_t) p_byte[6] << 16) | ((uint32_t) p_byte[7] << 8) | p_byte[8]; i_length = ((uint16_t)(p_byte[9] & 0xf) <<8) | p_byte[10]; p_table = dvbpsi_atsc_MGTAddTable(p_mgt, i_type, i_pid, i_version, i_number_bytes); /* Table descriptors */ p_byte += 11; p_end = p_byte + i_length; if( p_end > p_section->p_payload_end ) break; while(p_byte + 2 <= p_end) { uint8_t i_tag = p_byte[0]; uint8_t i_length = p_byte[1]; if(i_length + 2 <= p_end - p_byte) dvbpsi_atsc_MGTTableAddDescriptor(p_table, i_tag, i_length, p_byte + 2); p_byte += 2 + i_length; } } /* Table descriptors */ i_length = ((uint16_t)(p_byte[0] & 0xf) <<8) | p_byte[1]; p_byte += 2; p_end = p_byte + i_length; while(p_byte + 2 <= p_end) { uint8_t i_tag = p_byte[0]; uint8_t i_length = p_byte[1]; if(i_length + 2 <= p_end - p_byte) dvbpsi_atsc_MGTAddDescriptor(p_mgt, i_tag, i_length, p_byte + 2); p_byte += 2 + i_length; } p_section = p_section->p_next; } } dvbstreamer-2.1.0/src/dvbpsi/tables/atsc_stt.c000077500000000000000000000216131217721213100213530ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA stt.c Decode PSIP System Time Table. */ #include "config.h" #include #include #include #include #include "dvbpsi.h" #include "dvbpsi_private.h" #include "psi.h" #include "descriptor.h" #include "demux.h" #include "atsc/stt.h" #include "objects.h" typedef struct dvbpsi_atsc_stt_decoder_s { dvbpsi_atsc_stt_callback pf_callback; void * p_cb_data; } dvbpsi_atsc_stt_decoder_t; dvbpsi_descriptor_t *dvbpsi_atsc_STTAddDescriptor( dvbpsi_atsc_stt_t *p_stt, uint8_t i_tag, uint8_t i_length, uint8_t *p_data); void dvbpsi_atsc_GatherSTTSections(dvbpsi_decoder_t * p_psi_decoder, void * p_private_decoder, dvbpsi_psi_section_t * p_section); void dvbpsi_atsc_DecodeSTTSections(dvbpsi_atsc_stt_t* p_stt, dvbpsi_psi_section_t* p_section); /***************************************************************************** * dvbpsi_atsc_AttachSTT ***************************************************************************** * Initialize a STT subtable decoder. *****************************************************************************/ int dvbpsi_atsc_AttachSTT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, dvbpsi_atsc_stt_callback pf_callback, void* p_cb_data) { dvbpsi_demux_t* p_demux = (dvbpsi_demux_t*)p_psi_decoder->p_private_decoder; dvbpsi_demux_subdec_t* p_subdec; dvbpsi_atsc_stt_decoder_t* p_stt_decoder; if(dvbpsi_demuxGetSubDec(p_demux, i_table_id, 0)) { DVBPSI_ERROR_ARG("STT decoder", "Already a decoder for (table_id == 0x%02x)", i_table_id); return 1; } p_subdec = (dvbpsi_demux_subdec_t*)malloc(sizeof(dvbpsi_demux_subdec_t)); if(p_subdec == NULL) { return 1; } p_stt_decoder = (dvbpsi_atsc_stt_decoder_t*)malloc(sizeof(dvbpsi_atsc_stt_decoder_t)); if(p_stt_decoder == NULL) { free(p_subdec); return 1; } /* subtable decoder configuration */ p_subdec->pf_callback = &dvbpsi_atsc_GatherSTTSections; p_subdec->p_cb_data = p_stt_decoder; p_subdec->i_id = (uint32_t)i_table_id << 16; p_subdec->pf_detach = dvbpsi_atsc_DetachSTT; /* Attach the subtable decoder to the demux */ p_subdec->p_next = p_demux->p_first_subdec; p_demux->p_first_subdec = p_subdec; /* STT decoder information */ p_stt_decoder->pf_callback = pf_callback; p_stt_decoder->p_cb_data = p_cb_data; return 0; } /***************************************************************************** * dvbpsi_atsc_DetachSTT ***************************************************************************** * Close a STT decoder. *****************************************************************************/ void dvbpsi_atsc_DetachSTT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_t i_extension) { dvbpsi_demux_subdec_t* p_subdec; dvbpsi_demux_subdec_t** pp_prev_subdec; dvbpsi_atsc_stt_decoder_t* p_stt_decoder; p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, 0); if(p_demux == NULL) { DVBPSI_ERROR_ARG("STT Decoder", "No such STT decoder (table_id == 0x%02x," "extension == 0x00)", i_table_id); return; } p_stt_decoder = (dvbpsi_atsc_stt_decoder_t*)p_subdec->p_cb_data; free(p_subdec->p_cb_data); pp_prev_subdec = &p_demux->p_first_subdec; while(*pp_prev_subdec != p_subdec) pp_prev_subdec = &(*pp_prev_subdec)->p_next; *pp_prev_subdec = p_subdec->p_next; free(p_subdec); } /***************************************************************************** * dvbpsi_atsc_InitSTT ***************************************************************************** * Initialize a pre-allocated dvbpsi_atsc_stt_t structure. *****************************************************************************/ void dvbpsi_atsc_InitSTT(dvbpsi_atsc_stt_t *p_stt, uint8_t i_protocol) { p_stt->i_protocol = i_protocol; p_stt->p_first_descriptor = NULL; } /***************************************************************************** * dvbpsi_atsc_EmptySTT ***************************************************************************** * Clean a dvbpsi_atsc_stt_t structure. *****************************************************************************/ void dvbpsi_atsc_EmptySTT(dvbpsi_atsc_stt_t* p_stt) { dvbpsi_DeleteDescriptors(p_stt->p_first_descriptor); p_stt->p_first_descriptor = NULL; } /***************************************************************************** * dvbpsi_atsc_STTAddDescriptor ***************************************************************************** * Add a descriptor to the STT table. *****************************************************************************/ dvbpsi_descriptor_t *dvbpsi_atsc_STTAddDescriptor( dvbpsi_atsc_stt_t *p_stt, uint8_t i_tag, uint8_t i_length, uint8_t *p_data) { dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(i_tag, i_length, p_data); if(p_descriptor) { if(p_stt->p_first_descriptor == NULL) { p_stt->p_first_descriptor = p_descriptor; } else { dvbpsi_descriptor_t * p_last_descriptor = p_stt->p_first_descriptor; while(p_last_descriptor->p_next != NULL) p_last_descriptor = p_last_descriptor->p_next; p_last_descriptor->p_next = p_descriptor; } } return p_descriptor; } /***************************************************************************** * dvbpsi_atsc_GatherSTTSections ***************************************************************************** * Callback for the subtable demultiplexor. *****************************************************************************/ void dvbpsi_atsc_GatherSTTSections(dvbpsi_decoder_t * p_psi_decoder, void * p_private_decoder, dvbpsi_psi_section_t * p_section) { dvbpsi_atsc_stt_decoder_t * p_stt_decoder = (dvbpsi_atsc_stt_decoder_t*)p_private_decoder; dvbpsi_atsc_stt_t *p_stt; if(!p_section->b_syntax_indicator) { /* Invalid section_syntax_indicator */ DVBPSI_ERROR("STT decoder", "invalid section (section_syntax_indicator == 0)"); } else { dvbpsi_atsc_NewSTT(p_stt, p_section->p_payload_start[0]); if (p_stt) { /* Decode the sections */ dvbpsi_atsc_DecodeSTTSections(p_stt, p_section); /* Delete the sections */ dvbpsi_ReleasePSISections(p_psi_decoder,p_section); /* signal the new STT */ p_stt_decoder->pf_callback(p_stt_decoder->p_cb_data, p_stt); } } } /***************************************************************************** * dvbpsi_DecodeSTTSection ***************************************************************************** * STT decoder. *****************************************************************************/ void dvbpsi_atsc_DecodeSTTSections(dvbpsi_atsc_stt_t* p_stt, dvbpsi_psi_section_t* p_section) { uint8_t *p_byte, *p_end; uint16_t i_length = 0; p_byte = p_section->p_payload_start + 1; p_stt->i_system_time = (((uint32_t)p_byte[0]) << 24) | (((uint32_t)p_byte[1]) << 16) | (((uint32_t)p_byte[2]) << 8) | ((uint32_t)p_byte[3]); p_stt->i_gps_utc_offset = p_byte[4]; p_stt->i_daylight_savings = (((uint16_t)p_byte[5]) << 16) | ((uint16_t)p_byte[6]); p_byte += 7; /* Table descriptors */ i_length = (p_section->i_length - 17); p_end = p_byte + i_length; while(p_byte + 2 <= p_end) { uint8_t i_tag = p_byte[0]; uint8_t i_length = p_byte[1]; if(i_length + 2 <= p_end - p_byte) dvbpsi_atsc_STTAddDescriptor(p_stt, i_tag, i_length, p_byte + 2); p_byte += 2 + i_length; } } dvbstreamer-2.1.0/src/dvbpsi/tables/atsc_vct.c000077500000000000000000000551101217721213100213340ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA vct.c Decode PSIP Virtual Channel Table. */ #include "config.h" #include #include #include #include #include "dvbpsi.h" #include "dvbpsi_private.h" #include "psi.h" #include "descriptor.h" #include "demux.h" #include "atsc/vct.h" #include "objects.h" typedef struct dvbpsi_atsc_vct_decoder_s { dvbpsi_atsc_vct_callback pf_callback; void * p_cb_data; dvbpsi_atsc_vct_t current_vct; dvbpsi_atsc_vct_t * p_building_vct; int b_current_valid; uint8_t i_last_section_number; dvbpsi_psi_section_t * ap_sections [256]; } dvbpsi_atsc_vct_decoder_t; dvbpsi_descriptor_t *dvbpsi_atsc_VCTAddDescriptor( dvbpsi_atsc_vct_t *p_vct, uint8_t i_tag, uint8_t i_length, uint8_t *p_data); dvbpsi_atsc_vct_channel_t *dvbpsi_atsc_VCTAddChannel(dvbpsi_atsc_vct_t* p_vct, uint8_t *p_short_name, uint16_t i_major_number, uint16_t i_minor_number, uint8_t i_modulation, uint32_t i_carrier_freq, uint16_t i_channel_tsid, uint16_t i_program_number, uint8_t i_etm_location, int b_access_controlled, int b_hidden, int b_path_select, int b_out_of_band, int b_hide_guide, uint8_t i_service_type, uint16_t i_source_id); dvbpsi_descriptor_t *dvbpsi_atsc_VCTChannelAddDescriptor( dvbpsi_atsc_vct_channel_t *p_table, uint8_t i_tag, uint8_t i_length, uint8_t *p_data); void dvbpsi_atsc_GatherVCTSections(dvbpsi_decoder_t * p_psi_decoder, void * p_private_decoder, dvbpsi_psi_section_t * p_section); void dvbpsi_atsc_DecodeVCTSections(dvbpsi_atsc_vct_t* p_vct, dvbpsi_psi_section_t* p_section); /***************************************************************************** * dvbpsi_atsc_AttachVCT ***************************************************************************** * Initialize a VCT subtable decoder. *****************************************************************************/ int dvbpsi_atsc_AttachVCT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, uint16_t i_extension, dvbpsi_atsc_vct_callback pf_callback, void* p_cb_data) { dvbpsi_demux_t* p_demux = (dvbpsi_demux_t*)p_psi_decoder->p_private_decoder; dvbpsi_demux_subdec_t* p_subdec; dvbpsi_atsc_vct_decoder_t* p_vct_decoder; unsigned int i; if(dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension)) { DVBPSI_ERROR_ARG("VCT decoder", "Already a decoder for (table_id == 0x%02x extension == 0x%04x)", i_table_id, i_extension); return 1; } p_subdec = (dvbpsi_demux_subdec_t*)malloc(sizeof(dvbpsi_demux_subdec_t)); if(p_subdec == NULL) { return 1; } p_vct_decoder = (dvbpsi_atsc_vct_decoder_t*)malloc(sizeof(dvbpsi_atsc_vct_decoder_t)); if(p_vct_decoder == NULL) { free(p_subdec); return 1; } /* subtable decoder configuration */ p_subdec->pf_callback = &dvbpsi_atsc_GatherVCTSections; p_subdec->p_cb_data = p_vct_decoder; p_subdec->i_id = ((uint32_t)i_table_id << 16) | i_extension; p_subdec->pf_detach = dvbpsi_atsc_DetachVCT; /* Attach the subtable decoder to the demux */ p_subdec->p_next = p_demux->p_first_subdec; p_demux->p_first_subdec = p_subdec; /* VCT decoder information */ p_vct_decoder->pf_callback = pf_callback; p_vct_decoder->p_cb_data = p_cb_data; /* VCT decoder initial state */ p_vct_decoder->b_current_valid = 0; p_vct_decoder->p_building_vct = NULL; for(i = 0; i <= 255; i++) p_vct_decoder->ap_sections[i] = NULL; return 0; } /***************************************************************************** * dvbpsi_atsc_DetachVCT ***************************************************************************** * Close a VCT decoder. *****************************************************************************/ void dvbpsi_atsc_DetachVCT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_t i_extension) { dvbpsi_demux_subdec_t* p_subdec; dvbpsi_demux_subdec_t** pp_prev_subdec; dvbpsi_atsc_vct_decoder_t* p_vct_decoder; unsigned int i; p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension); if(p_demux == NULL) { DVBPSI_ERROR_ARG("VCT Decoder", "No such VCT decoder (table_id == 0x%02x," "extension == 0x%04x)", i_table_id, i_extension); return; } p_vct_decoder = (dvbpsi_atsc_vct_decoder_t*)p_subdec->p_cb_data; if (p_vct_decoder->p_building_vct) { ObjectRefDec(p_vct_decoder->p_building_vct); } for(i = 0; i <= 255; i++) { if(p_vct_decoder->ap_sections[i]) dvbpsi_DeletePSISections(p_vct_decoder->ap_sections[i]); } free(p_subdec->p_cb_data); pp_prev_subdec = &p_demux->p_first_subdec; while(*pp_prev_subdec != p_subdec) pp_prev_subdec = &(*pp_prev_subdec)->p_next; *pp_prev_subdec = p_subdec->p_next; free(p_subdec); } /***************************************************************************** * dvbpsi_atsc_InitVCT ***************************************************************************** * Initialize a pre-allocated dvbpsi_atsc_vct_t structure. *****************************************************************************/ void dvbpsi_atsc_InitVCT(dvbpsi_atsc_vct_t* p_vct,uint8_t i_version, int b_current_next, uint8_t i_protocol, uint16_t i_ts_id, int b_cable_vct) { p_vct->i_version = i_version; p_vct->b_current_next = b_current_next; p_vct->i_protocol = i_protocol; p_vct->i_ts_id = i_ts_id; p_vct->b_cable_vct = b_cable_vct; p_vct->p_first_channel = NULL; p_vct->p_first_descriptor = NULL; } /***************************************************************************** * dvbpsi_atsc_EmptyVCT ***************************************************************************** * Clean a dvbpsi_atsc_vct_t structure. *****************************************************************************/ void dvbpsi_atsc_EmptyVCT(dvbpsi_atsc_vct_t* p_vct) { dvbpsi_atsc_vct_channel_t* p_channel = p_vct->p_first_channel; while(p_channel != NULL) { dvbpsi_atsc_vct_channel_t* p_tmp = p_channel->p_next; dvbpsi_DeleteDescriptors(p_channel->p_first_descriptor); free(p_channel); p_channel = p_tmp; } dvbpsi_DeleteDescriptors(p_vct->p_first_descriptor); p_vct->p_first_channel = NULL; p_vct->p_first_descriptor = NULL; } /***************************************************************************** * dvbpsi_atsc_VCTAddDescriptor ***************************************************************************** * Add a descriptor to the VCT table. *****************************************************************************/ dvbpsi_descriptor_t *dvbpsi_atsc_VCTAddDescriptor( dvbpsi_atsc_vct_t *p_vct, uint8_t i_tag, uint8_t i_length, uint8_t *p_data) { dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(i_tag, i_length, p_data); if(p_descriptor) { if(p_vct->p_first_descriptor == NULL) { p_vct->p_first_descriptor = p_descriptor; } else { dvbpsi_descriptor_t * p_last_descriptor = p_vct->p_first_descriptor; while(p_last_descriptor->p_next != NULL) p_last_descriptor = p_last_descriptor->p_next; p_last_descriptor->p_next = p_descriptor; } } return p_descriptor; } /***************************************************************************** * dvbpsi_atsc_VCTAddChannel ***************************************************************************** * Add a Channel description at the end of the VCT. *****************************************************************************/ dvbpsi_atsc_vct_channel_t *dvbpsi_atsc_VCTAddChannel(dvbpsi_atsc_vct_t* p_vct, uint8_t *p_short_name, uint16_t i_major_number, uint16_t i_minor_number, uint8_t i_modulation, uint32_t i_carrier_freq, uint16_t i_channel_tsid, uint16_t i_program_number, uint8_t i_etm_location, int b_access_controlled, int b_hidden, int b_path_select, int b_out_of_band, int b_hide_guide, uint8_t i_service_type, uint16_t i_source_id) { dvbpsi_atsc_vct_channel_t * p_channel = (dvbpsi_atsc_vct_channel_t*)malloc(sizeof(dvbpsi_atsc_vct_channel_t)); if(p_channel) { memcpy(p_channel->i_short_name, p_short_name, sizeof(uint16_t) * 7); p_channel->i_major_number = i_major_number; p_channel->i_minor_number = i_minor_number; p_channel->i_modulation = i_modulation; p_channel->i_carrier_freq = i_carrier_freq; p_channel->i_channel_tsid = i_channel_tsid; p_channel->i_program_number = i_program_number; p_channel->i_etm_location = i_etm_location; p_channel->b_access_controlled = b_access_controlled; p_channel->b_path_select = b_path_select; p_channel->b_out_of_band = b_out_of_band; p_channel->b_hidden = b_hidden; p_channel->b_hide_guide = b_hide_guide; p_channel->i_service_type = i_service_type; p_channel->i_source_id = i_source_id; p_channel->p_first_descriptor = NULL; p_channel->p_next = NULL; if(p_vct->p_first_channel== NULL) { p_vct->p_first_channel = p_channel; } else { dvbpsi_atsc_vct_channel_t * p_last_channel = p_vct->p_first_channel; while(p_last_channel->p_next != NULL) p_last_channel = p_last_channel->p_next; p_last_channel->p_next = p_channel; } } return p_channel; } /***************************************************************************** * dvbpsi_VCTTableAddDescriptor ***************************************************************************** * Add a descriptor in the VCT table description. *****************************************************************************/ dvbpsi_descriptor_t *dvbpsi_atsc_VCTChannelAddDescriptor( dvbpsi_atsc_vct_channel_t *p_channel, uint8_t i_tag, uint8_t i_length, uint8_t *p_data) { dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(i_tag, i_length, p_data); if(p_descriptor) { if(p_channel->p_first_descriptor == NULL) { p_channel->p_first_descriptor = p_descriptor; } else { dvbpsi_descriptor_t * p_last_descriptor = p_channel->p_first_descriptor; while(p_last_descriptor->p_next != NULL) p_last_descriptor = p_last_descriptor->p_next; p_last_descriptor->p_next = p_descriptor; } } return p_descriptor; } /***************************************************************************** * dvbpsi_atsc_GatherVCTSections ***************************************************************************** * Callback for the subtable demultiplexor. *****************************************************************************/ void dvbpsi_atsc_GatherVCTSections(dvbpsi_decoder_t * p_psi_decoder, void * p_private_decoder, dvbpsi_psi_section_t * p_section) { dvbpsi_atsc_vct_decoder_t * p_vct_decoder = (dvbpsi_atsc_vct_decoder_t*)p_private_decoder; int b_append = 1; int b_reinit = 0; unsigned int i; DVBPSI_DEBUG_ARG("VCT decoder", "Table version %2d, " "i_table_id %2d, " "i_extension %5d, " "section %3d up to %3d, " "current %1d", p_section->i_version, p_section->i_table_id, p_section->i_extension, p_section->i_number, p_section->i_last_number, p_section->b_current_next); if(!p_section->b_syntax_indicator) { /* Invalid section_syntax_indicator */ DVBPSI_ERROR("VCT decoder", "invalid section (section_syntax_indicator == 0)"); b_append = 0; } /* Now if b_append is true then we have a valid VCT section */ if(b_append) { /* TS discontinuity check */ if(p_psi_decoder->b_discontinuity) { b_reinit = 1; p_psi_decoder->b_discontinuity = 0; } else { /* Perform a few sanity checks */ if(p_vct_decoder->p_building_vct) { if(p_vct_decoder->p_building_vct->i_ts_id != p_section->i_extension) { /* transport_stream_id */ DVBPSI_ERROR("VCT decoder", "'transport_stream_id' differs" " whereas no TS discontinuity has occured"); b_reinit = 1; } else if(p_vct_decoder->p_building_vct->i_version != p_section->i_version) { /* version_number */ DVBPSI_ERROR("VCT decoder", "'version_number' differs" " whereas no discontinuity has occured"); b_reinit = 1; } else if(p_vct_decoder->i_last_section_number != p_section->i_last_number) { /* last_section_number */ DVBPSI_ERROR("VCT decoder", "'last_section_number' differs" " whereas no discontinuity has occured"); b_reinit = 1; } } else { if( (p_vct_decoder->b_current_valid) && (p_vct_decoder->current_vct.i_version == p_section->i_version)) { /* Signal a new VCT if the previous one wasn't active */ if( (!p_vct_decoder->current_vct.b_current_next) && (p_section->b_current_next)) { dvbpsi_atsc_vct_t * p_vct = (dvbpsi_atsc_vct_t*)ObjectCreateType(dvbpsi_atsc_vct_t); p_vct_decoder->current_vct.b_current_next = 1; *p_vct = p_vct_decoder->current_vct; p_vct_decoder->pf_callback(p_vct_decoder->p_cb_data, p_vct); } /* Don't decode since this version is already decoded */ b_append = 0; } } } } /* Reinit the decoder if wanted */ if(b_reinit) { /* Force redecoding */ p_vct_decoder->b_current_valid = 0; /* Free structures */ if(p_vct_decoder->p_building_vct) { ObjectRefDec(p_vct_decoder->p_building_vct); p_vct_decoder->p_building_vct = NULL; } /* Clear the section array */ for(i = 0; i <= 255; i++) { if(p_vct_decoder->ap_sections[i] != NULL) { dvbpsi_ReleasePSISections(p_psi_decoder, p_vct_decoder->ap_sections[i]); p_vct_decoder->ap_sections[i] = NULL; } } } /* Append the section to the list if wanted */ if(b_append) { int b_complete; /* Initialize the structures if it's the first section received */ if(!p_vct_decoder->p_building_vct) { dvbpsi_atsc_NewVCT(p_vct_decoder->p_building_vct, p_section->i_version, p_section->b_current_next, p_section->p_payload_start[0], p_section->i_extension, p_section->i_table_id == 0xC9); p_vct_decoder->i_last_section_number = p_section->i_last_number; } /* Fill the section array */ if(p_vct_decoder->ap_sections[p_section->i_number] != NULL) { DVBPSI_DEBUG_ARG("VCT decoder", "overwrite section number %d", p_section->i_number); dvbpsi_ReleasePSISections(p_psi_decoder, p_vct_decoder->ap_sections[p_section->i_number]); } p_vct_decoder->ap_sections[p_section->i_number] = p_section; /* Check if we have all the sections */ b_complete = 0; for(i = 0; i <= p_vct_decoder->i_last_section_number; i++) { if(!p_vct_decoder->ap_sections[i]) break; if(i == p_vct_decoder->i_last_section_number) b_complete = 1; } if(b_complete) { /* Save the current information */ p_vct_decoder->current_vct = *p_vct_decoder->p_building_vct; p_vct_decoder->b_current_valid = 1; /* Chain the sections */ if(p_vct_decoder->i_last_section_number) { for(i = 0; i <= p_vct_decoder->i_last_section_number - 1; i++) p_vct_decoder->ap_sections[i]->p_next = p_vct_decoder->ap_sections[i + 1]; } /* Decode the sections */ dvbpsi_atsc_DecodeVCTSections(p_vct_decoder->p_building_vct, p_vct_decoder->ap_sections[0]); /* Delete the sections */ dvbpsi_ReleasePSISections(p_psi_decoder,p_vct_decoder->ap_sections[0]); /* signal the new VCT */ p_vct_decoder->pf_callback(p_vct_decoder->p_cb_data, p_vct_decoder->p_building_vct); /* Reinitialize the structures */ p_vct_decoder->p_building_vct = NULL; for(i = 0; i <= p_vct_decoder->i_last_section_number; i++) p_vct_decoder->ap_sections[i] = NULL; } } else { dvbpsi_ReleasePSISections(p_psi_decoder,p_section); } } /***************************************************************************** * dvbpsi_DecodeVCTSection ***************************************************************************** * VCT decoder. *****************************************************************************/ void dvbpsi_atsc_DecodeVCTSections(dvbpsi_atsc_vct_t* p_vct, dvbpsi_psi_section_t* p_section) { uint8_t *p_byte, *p_end; while(p_section) { uint16_t i_channels_defined = p_section->p_payload_start[1]; uint16_t i_channels_count = 0; uint16_t i_length = 0; for(p_byte = p_section->p_payload_start + 2; ((p_byte + 6) < p_section->p_payload_end) && (i_channels_count < i_channels_defined); i_channels_count ++) { dvbpsi_atsc_vct_channel_t* p_channel; uint16_t i_major_number = ((uint16_t)(p_byte[14] & 0xf) << 6) | ((uint16_t)(p_byte[15] & 0xfc) >> 2); uint16_t i_minor_number = ((uint16_t)(p_byte[15] & 0x3) << 8) | ((uint16_t) p_byte[16]); uint8_t i_modulation = p_byte[17]; uint32_t i_carrier_freq = ((uint32_t)(p_byte[18] << 24)) | ((uint32_t)(p_byte[19] << 16)) | ((uint32_t)(p_byte[20] << 8)) | ((uint32_t)(p_byte[21])); uint16_t i_channel_tsid = ((uint16_t)(p_byte[22] << 8)) | ((uint16_t)p_byte[23]); uint16_t i_program_number = ((uint16_t)(p_byte[24] << 8)) | ((uint16_t)p_byte[25]); uint8_t i_etm_location = (uint8_t)((p_byte[26] & 0xC0) >> 6); int b_access_controlled = (p_byte[26] & 0x20) >> 5; int b_hidden = (p_byte[26] & 0x10) >> 4; int b_path_select = (p_byte[26] & 0x08) >> 3; int b_out_of_band = (p_byte[26] & 0x04) >> 2; int b_hide_guide = (p_byte[26] & 0x02) >> 1; uint8_t i_service_type = (uint8_t)(p_byte[27] & 0x3f); uint16_t i_source_id = ((uint16_t)(p_byte[28] << 8)) | ((uint16_t)p_byte[29]); i_length = ((uint16_t)(p_byte[30] & 0x3) <<8) | p_byte[31]; p_channel = dvbpsi_atsc_VCTAddChannel(p_vct, p_byte, i_major_number, i_minor_number, i_modulation, i_carrier_freq, i_channel_tsid, i_program_number, i_etm_location, b_access_controlled, b_hidden, b_path_select, b_out_of_band, b_hide_guide, i_service_type, i_source_id); /* Table descriptors */ p_byte += 32; p_end = p_byte + i_length; if( p_end > p_section->p_payload_end ) break; while(p_byte + 2 <= p_end) { uint8_t i_tag = p_byte[0]; uint8_t i_length = p_byte[1]; if(i_length + 2 <= p_end - p_byte) dvbpsi_atsc_VCTChannelAddDescriptor(p_channel, i_tag, i_length, p_byte + 2); p_byte += 2 + i_length; } } /* Table descriptors */ i_length = ((uint16_t)(p_byte[0] & 0x3) <<8) | p_byte[1]; p_byte += 2; p_end = p_byte + i_length; while(p_byte + 2 <= p_end) { uint8_t i_tag = p_byte[0]; uint8_t i_length = p_byte[1]; if(i_length + 2 <= p_end - p_byte) dvbpsi_atsc_VCTAddDescriptor(p_vct, i_tag, i_length, p_byte + 2); p_byte += 2 + i_length; } p_section = p_section->p_next; } } dvbstreamer-2.1.0/src/dvbpsi/tables/cat.c000077500000000000000000000362541217721213100203050ustar00rootroot00000000000000/***************************************************************************** * cat.c: CAT decoder/generator *---------------------------------------------------------------------------- * (c)2001-2007 VideoLAN * $Id: cat.c 146 2007-10-11 06:45:21Z jpsaman $ * * Authors: Johann Hanne * heavily based on pmt.c which was written by * Arnaud de Bossoreille de Ribou * * 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. * *---------------------------------------------------------------------------- * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "psi.h" #include "descriptor.h" #include "cat.h" #include "cat_private.h" #include "objects.h" /***************************************************************************** * dvbpsi_AttachCAT ***************************************************************************** * Initialize a CAT decoder and return a handle on it. *****************************************************************************/ dvbpsi_handle dvbpsi_AttachCAT(dvbpsi_cat_callback pf_callback, void* p_cb_data) { dvbpsi_handle h_dvbpsi = (dvbpsi_decoder_t*)malloc(sizeof(dvbpsi_decoder_t)); dvbpsi_cat_decoder_t* p_cat_decoder; unsigned int i; if(h_dvbpsi == NULL) return NULL; p_cat_decoder = (dvbpsi_cat_decoder_t*)malloc(sizeof(dvbpsi_cat_decoder_t)); if(p_cat_decoder == NULL) { free(h_dvbpsi); return NULL; } /* PSI decoder configuration */ h_dvbpsi->pf_callback = &dvbpsi_GatherCATSections; h_dvbpsi->p_private_decoder = p_cat_decoder; h_dvbpsi->i_section_max_size = 1024; /* PSI decoder initial state */ h_dvbpsi->i_continuity_counter = 31; h_dvbpsi->b_discontinuity = 1; h_dvbpsi->p_current_section = NULL; h_dvbpsi->p_free_sections = NULL; /* CAT decoder configuration */ p_cat_decoder->pf_callback = pf_callback; p_cat_decoder->p_cb_data = p_cb_data; /* CAT decoder initial state */ p_cat_decoder->b_current_valid = 0; p_cat_decoder->p_building_cat = NULL; for(i = 0; i <= 255; i++) p_cat_decoder->ap_sections[i] = NULL; return h_dvbpsi; } /***************************************************************************** * dvbpsi_DetachCAT ***************************************************************************** * Close a CAT decoder. The handle isn't valid any more. *****************************************************************************/ void dvbpsi_DetachCAT(dvbpsi_handle h_dvbpsi) { dvbpsi_cat_decoder_t* p_cat_decoder = (dvbpsi_cat_decoder_t*)h_dvbpsi->p_private_decoder; unsigned int i; if (p_cat_decoder->p_building_cat) { ObjectRefDec(p_cat_decoder->p_building_cat); } for(i = 0; i <= 255; i++) { if(p_cat_decoder->ap_sections[i]) free(p_cat_decoder->ap_sections[i]); } free(h_dvbpsi->p_private_decoder); if(h_dvbpsi->p_current_section) dvbpsi_DeletePSISections(h_dvbpsi->p_current_section); if(h_dvbpsi->p_free_sections) dvbpsi_DeletePSISections(h_dvbpsi->p_free_sections); free(h_dvbpsi); } /***************************************************************************** * dvbpsi_InitCAT ***************************************************************************** * Initialize a pre-allocated dvbpsi_cat_t structure. *****************************************************************************/ void dvbpsi_InitCAT(dvbpsi_cat_t* p_cat, uint8_t i_version, int b_current_next) { p_cat->i_version = i_version; p_cat->b_current_next = b_current_next; p_cat->p_first_descriptor = NULL; } /***************************************************************************** * dvbpsi_EmptyCAT ***************************************************************************** * Clean a dvbpsi_cat_t structure. *****************************************************************************/ void dvbpsi_EmptyCAT(dvbpsi_cat_t* p_cat) { dvbpsi_DeleteDescriptors(p_cat->p_first_descriptor); p_cat->p_first_descriptor = NULL; } /***************************************************************************** * dvbpsi_CATAddDescriptor ***************************************************************************** * Add a descriptor in the CAT. *****************************************************************************/ dvbpsi_descriptor_t* dvbpsi_CATAddDescriptor(dvbpsi_cat_t* p_cat, uint8_t i_tag, uint8_t i_length, uint8_t* p_data) { dvbpsi_descriptor_t* p_descriptor = dvbpsi_NewDescriptor(i_tag, i_length, p_data); if(p_descriptor) { if(p_cat->p_first_descriptor == NULL) { p_cat->p_first_descriptor = p_descriptor; } else { dvbpsi_descriptor_t* p_last_descriptor = p_cat->p_first_descriptor; while(p_last_descriptor->p_next != NULL) p_last_descriptor = p_last_descriptor->p_next; p_last_descriptor->p_next = p_descriptor; } } return p_descriptor; } /***************************************************************************** * dvbpsi_GatherCATSections ***************************************************************************** * Callback for the PSI decoder. *****************************************************************************/ void dvbpsi_GatherCATSections(dvbpsi_decoder_t* p_decoder, dvbpsi_psi_section_t* p_section) { dvbpsi_cat_decoder_t* p_cat_decoder = (dvbpsi_cat_decoder_t*)p_decoder->p_private_decoder; int b_append = 1; int b_reinit = 0; unsigned int i; DVBPSI_DEBUG_ARG("CAT decoder", "Table version %2d, " "i_extension %5d, " "section %3d up to %3d, " "current %1d", p_section->i_version, p_section->i_extension, p_section->i_number, p_section->i_last_number, p_section->b_current_next); if(p_section->i_table_id != 0x01) { /* Invalid table_id value */ DVBPSI_ERROR_ARG("CAT decoder", "invalid section (table_id == 0x%02x)", p_section->i_table_id); b_append = 0; } if(b_append && !p_section->b_syntax_indicator) { /* Invalid section_syntax_indicator */ DVBPSI_ERROR("CAT decoder", "invalid section (section_syntax_indicator == 0)"); b_append = 0; } if(b_append) { /* TS discontinuity check */ if(p_decoder->b_discontinuity) { b_reinit = 1; p_decoder->b_discontinuity = 0; } else { /* Perform some few sanity checks */ if(p_cat_decoder->p_building_cat) { if(p_cat_decoder->p_building_cat->i_version != p_section->i_version) { /* version_number */ DVBPSI_ERROR("CAT decoder", "'version_number' differs" " whereas no discontinuity has occured"); b_reinit = 1; } else if(p_cat_decoder->i_last_section_number != p_section->i_last_number) { /* last_section_number */ DVBPSI_ERROR("CAT decoder", "'last_section_number' differs" " whereas no discontinuity has occured"); b_reinit = 1; } } else { if( (p_cat_decoder->b_current_valid) && (p_cat_decoder->current_cat.i_version == p_section->i_version)) { /* Signal a new CAT if the previous one wasn't active */ if( (!p_cat_decoder->current_cat.b_current_next) && (p_section->b_current_next)) { dvbpsi_cat_t* p_cat = (dvbpsi_cat_t*)ObjectCreateType(dvbpsi_cat_t); p_cat_decoder->current_cat.b_current_next = 1; *p_cat = p_cat_decoder->current_cat; p_cat_decoder->pf_callback(p_cat_decoder->p_cb_data, p_cat); } /* Don't decode since this version is already decoded */ b_append = 0; } } } } /* Reinit the decoder if wanted */ if(b_reinit) { /* Force redecoding */ p_cat_decoder->b_current_valid = 0; /* Free structures */ if(p_cat_decoder->p_building_cat) { ObjectRefDec(p_cat_decoder->p_building_cat); p_cat_decoder->p_building_cat = NULL; } /* Clear the section array */ for(i = 0; i <= 255; i++) { if(p_cat_decoder->ap_sections[i] != NULL) { dvbpsi_ReleasePSISections(p_decoder, p_cat_decoder->ap_sections[i]); p_cat_decoder->ap_sections[i] = NULL; } } } /* Append the section to the list if wanted */ if(b_append) { int b_complete; /* Initialize the structures if it's the first section received */ if(!p_cat_decoder->p_building_cat) { dvbpsi_NewCAT(p_cat_decoder->p_building_cat, p_section->i_version, p_section->b_current_next); p_cat_decoder->i_last_section_number = p_section->i_last_number; } /* Fill the section array */ if(p_cat_decoder->ap_sections[p_section->i_number] != NULL) { DVBPSI_DEBUG_ARG("CAT decoder", "overwrite section number %d", p_section->i_number); dvbpsi_ReleasePSISections(p_decoder, p_cat_decoder->ap_sections[p_section->i_number]); } p_cat_decoder->ap_sections[p_section->i_number] = p_section; /* Check if we have all the sections */ b_complete = 0; for(i = 0; i <= p_cat_decoder->i_last_section_number; i++) { if(!p_cat_decoder->ap_sections[i]) break; if(i == p_cat_decoder->i_last_section_number) b_complete = 1; } if(b_complete) { /* Save the current information */ p_cat_decoder->current_cat = *p_cat_decoder->p_building_cat; p_cat_decoder->b_current_valid = 1; /* Chain the sections */ if(p_cat_decoder->i_last_section_number) { for(i = 0; i <= p_cat_decoder->i_last_section_number - 1; i++) p_cat_decoder->ap_sections[i]->p_next = p_cat_decoder->ap_sections[i + 1]; } /* Decode the sections */ dvbpsi_DecodeCATSections(p_cat_decoder->p_building_cat, p_cat_decoder->ap_sections[0]); /* Delete the sections */ dvbpsi_ReleasePSISections(p_decoder, p_cat_decoder->ap_sections[0]); /* signal the new CAT */ p_cat_decoder->pf_callback(p_cat_decoder->p_cb_data, p_cat_decoder->p_building_cat); /* Reinitialize the structures */ p_cat_decoder->p_building_cat = NULL; for(i = 0; i <= p_cat_decoder->i_last_section_number; i++) p_cat_decoder->ap_sections[i] = NULL; } } else { dvbpsi_ReleasePSISections(p_decoder, p_section); } } /***************************************************************************** * dvbpsi_DecodeCATSections ***************************************************************************** * CAT decoder. *****************************************************************************/ void dvbpsi_DecodeCATSections(dvbpsi_cat_t* p_cat, dvbpsi_psi_section_t* p_section) { uint8_t* p_byte; while(p_section) { /* CAT descriptors */ p_byte = p_section->p_payload_start; while(p_byte + 5 <= p_section->p_payload_end) { uint8_t i_tag = p_byte[0]; uint8_t i_length = p_byte[1]; if(i_length + 2 <= p_section->p_payload_end - p_byte) dvbpsi_CATAddDescriptor(p_cat, i_tag, i_length, p_byte + 2); p_byte += 2 + i_length; } p_section = p_section->p_next; } } /***************************************************************************** * dvbpsi_GenCATSections ***************************************************************************** * Generate CAT sections based on the dvbpsi_cat_t structure. *****************************************************************************/ dvbpsi_psi_section_t* dvbpsi_GenCATSections(dvbpsi_cat_t* p_cat) { dvbpsi_psi_section_t* p_result = dvbpsi_NewPSISection(1024); dvbpsi_psi_section_t* p_current = p_result; dvbpsi_psi_section_t* p_prev; dvbpsi_descriptor_t* p_descriptor = p_cat->p_first_descriptor; p_current->i_table_id = 0x01; p_current->b_syntax_indicator = 1; p_current->b_private_indicator = 0; p_current->i_length = 9; /* header + CRC_32 */ p_current->i_extension = 0; /* Not used in the CAT */ p_current->i_version = p_cat->i_version; p_current->b_current_next = p_cat->b_current_next; p_current->i_number = 0; p_current->p_payload_end += 8; /* just after the header */ p_current->p_payload_start = p_current->p_data + 8; /* CAT descriptors */ while(p_descriptor != NULL) { /* New section if needed */ /* written_data_length + descriptor_length + 2 > 1024 - CRC_32_length */ if( (p_current->p_payload_end - p_current->p_data) + p_descriptor->i_length > 1018) { p_prev = p_current; p_current = dvbpsi_NewPSISection(1024); p_prev->p_next = p_current; p_current->i_table_id = 0x01; p_current->b_syntax_indicator = 1; p_current->b_private_indicator = 0; p_current->i_length = 9; /* header + CRC_32 */ p_current->i_extension = 0; /* Not used in the CAT */ p_current->i_version = p_cat->i_version; p_current->b_current_next = p_cat->b_current_next; p_current->i_number = p_prev->i_number + 1; p_current->p_payload_end += 8; /* just after the header */ p_current->p_payload_start = p_current->p_data + 8; } /* p_payload_end is where the descriptor begins */ p_current->p_payload_end[0] = p_descriptor->i_tag; p_current->p_payload_end[1] = p_descriptor->i_length; memcpy(p_current->p_payload_end + 2, p_descriptor->p_data, p_descriptor->i_length); /* Increase length by descriptor_length + 2 */ p_current->p_payload_end += p_descriptor->i_length + 2; p_current->i_length += p_descriptor->i_length + 2; p_descriptor = p_descriptor->p_next; } /* Finalization */ p_prev = p_result; while(p_prev != NULL) { p_prev->i_last_number = p_current->i_number; dvbpsi_BuildPSISection(p_prev); p_prev = p_prev->p_next; } return p_result; } dvbstreamer-2.1.0/src/dvbpsi/tables/cat_private.h000077500000000000000000000056021217721213100220350ustar00rootroot00000000000000/***************************************************************************** * cat_private.h: private CAT structures *---------------------------------------------------------------------------- * (c)2001-2007 VideoLAN * $Id: cat_private.h 145 2007-10-05 17:53:35Z jpsaman $ * * Authors: Johann Hanne * heavily based on pmt_private.h which was written by * Arnaud de Bossoreille de Ribou * * 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. * *---------------------------------------------------------------------------- * *****************************************************************************/ #ifndef _DVBPSI_CAT_PRIVATE_H_ #define _DVBPSI_CAT_PRIVATE_H_ /***************************************************************************** * dvbpsi_cat_decoder_t ***************************************************************************** * CAT decoder. *****************************************************************************/ typedef struct dvbpsi_cat_decoder_s { dvbpsi_cat_callback pf_callback; void * p_cb_data; dvbpsi_cat_t current_cat; dvbpsi_cat_t * p_building_cat; int b_current_valid; uint8_t i_last_section_number; dvbpsi_psi_section_t * ap_sections [256]; } dvbpsi_cat_decoder_t; /***************************************************************************** * dvbpsi_GatherCATSections ***************************************************************************** * Callback for the PSI decoder. *****************************************************************************/ void dvbpsi_GatherCATSections(dvbpsi_decoder_t* p_decoder, dvbpsi_psi_section_t* p_section); /***************************************************************************** * dvbpsi_DecodeCATSections ***************************************************************************** * CAT decoder. *****************************************************************************/ void dvbpsi_DecodeCATSections(dvbpsi_cat_t* p_cat, dvbpsi_psi_section_t* p_section); #else #error "Multiple inclusions of cat_private.h" #endif dvbstreamer-2.1.0/src/dvbpsi/tables/eit.c000066400000000000000000000511221217721213100203030ustar00rootroot00000000000000/***************************************************************************** * eit.c: EIT decoder/generator *---------------------------------------------------------------------------- * (c)2004 VideoLAN * $Id: eit.c 88 2004-02-24 14:31:18Z sam $ * * Authors: Christophe Massiot * Johan Bilien * * 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. * *---------------------------------------------------------------------------- * *****************************************************************************/ #include "config.h" #define DEBUG #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "psi.h" #include "descriptor.h" #include "demux.h" #include "datetime.h" #include "eit.h" #include "eit_private.h" #include "objects.h" #define PROCESS_SINGLE_SECTION /***************************************************************************** * dvbpsi_AttachEIT ***************************************************************************** * Initialize a EIT subtable decoder. *****************************************************************************/ int dvbpsi_AttachEIT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, uint16_t i_extension, dvbpsi_eit_callback pf_callback, void* p_cb_data) { dvbpsi_demux_t* p_demux = (dvbpsi_demux_t*)p_psi_decoder->p_private_decoder; dvbpsi_demux_subdec_t* p_subdec; dvbpsi_eit_decoder_t* p_eit_decoder; unsigned int i; DVBPSI_DEBUG_ARG("EIT decoder", "Attach 0x%02x 0x%02x", i_table_id, i_extension) if(dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension)) { DVBPSI_ERROR_ARG("EIT decoder", "Already a decoder for (table_id == 0x%02x," "extension == 0x%02x)", i_table_id, i_extension); return 1; } p_subdec = (dvbpsi_demux_subdec_t*)malloc(sizeof(dvbpsi_demux_subdec_t)); if(p_subdec == NULL) { return 1; } p_eit_decoder = (dvbpsi_eit_decoder_t*)malloc(sizeof(dvbpsi_eit_decoder_t)); if(p_eit_decoder == NULL) { free(p_subdec); return 1; } /* subtable decoder configuration */ p_subdec->pf_callback = &dvbpsi_GatherEITSections; p_subdec->p_cb_data = p_eit_decoder; p_subdec->i_id = (uint32_t)i_table_id << 16 | (uint32_t)i_extension; p_subdec->pf_detach = dvbpsi_DetachEIT; /* Attach the subtable decoder to the demux */ p_subdec->p_next = p_demux->p_first_subdec; p_demux->p_first_subdec = p_subdec; /* EIT decoder information */ p_eit_decoder->pf_callback = pf_callback; p_eit_decoder->p_cb_data = p_cb_data; /* EIT decoder initial state */ p_eit_decoder->b_current_valid = 0; p_eit_decoder->p_building_eit = NULL; for(i = 0; i <= 255; i++) p_eit_decoder->ap_sections[i] = NULL; return 0; } /***************************************************************************** * dvbpsi_DetachEIT ***************************************************************************** * Close a EIT decoder. *****************************************************************************/ void dvbpsi_DetachEIT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_t i_extension) { dvbpsi_demux_subdec_t* p_subdec; dvbpsi_demux_subdec_t** pp_prev_subdec; dvbpsi_eit_decoder_t* p_eit_decoder; unsigned int i; p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension); if(p_demux == NULL) { DVBPSI_ERROR_ARG("EIT Decoder", "No such EIT decoder (table_id == 0x%02x," "extension == 0x%02x)", i_table_id, i_extension); return; } p_eit_decoder = (dvbpsi_eit_decoder_t*)p_subdec->p_cb_data; if (p_eit_decoder->p_building_eit) { ObjectRefDec(p_eit_decoder->p_building_eit); } for(i = 0; i <= 255; i++) { if(p_eit_decoder->ap_sections[i]) dvbpsi_DeletePSISections(p_eit_decoder->ap_sections[i]); } free(p_subdec->p_cb_data); pp_prev_subdec = &p_demux->p_first_subdec; while(*pp_prev_subdec != p_subdec) pp_prev_subdec = &(*pp_prev_subdec)->p_next; *pp_prev_subdec = p_subdec->p_next; free(p_subdec); } /***************************************************************************** * dvbpsi_InitEIT ***************************************************************************** * Initialize a pre-allocated dvbpsi_eit_t structure. *****************************************************************************/ void dvbpsi_InitEIT(dvbpsi_eit_t* p_eit, uint16_t i_service_id, uint8_t i_version, int b_current_next, uint16_t i_ts_id, uint16_t i_network_id, uint8_t i_segment_last_section_number, uint8_t i_last_table_id) { p_eit->i_service_id = i_service_id; p_eit->i_version = i_version; p_eit->b_current_next = b_current_next; p_eit->i_ts_id = i_ts_id; p_eit->i_network_id = i_network_id; p_eit->i_segment_last_section_number = i_segment_last_section_number; p_eit->i_last_table_id = i_last_table_id; p_eit->p_first_event = NULL; } /***************************************************************************** * dvbpsi_EmptyEIT ***************************************************************************** * Clean a dvbpsi_eit_t structure. *****************************************************************************/ void dvbpsi_EmptyEIT(dvbpsi_eit_t* p_eit) { dvbpsi_eit_event_t* p_event = p_eit->p_first_event; while(p_event != NULL) { dvbpsi_eit_event_t* p_tmp = p_event->p_next; dvbpsi_DeleteDescriptors(p_event->p_first_descriptor); free(p_event); p_event = p_tmp; } p_eit->p_first_event = NULL; } /***************************************************************************** * dvbpsi_EITAddEvent ***************************************************************************** * Add an event description at the end of the EIT. *****************************************************************************/ dvbpsi_eit_event_t* dvbpsi_EITAddEvent(dvbpsi_eit_t* p_eit, uint16_t i_event_id, struct tm *p_start_time, uint32_t i_duration, uint8_t i_running_status, int b_free_ca) { dvbpsi_eit_event_t* p_event = (dvbpsi_eit_event_t*)malloc(sizeof(dvbpsi_eit_event_t)); if(p_event) { p_event->i_event_id = i_event_id; p_event->t_start_time = *p_start_time; p_event->i_duration = i_duration; p_event->i_running_status = i_running_status; p_event->b_free_ca = b_free_ca; p_event->p_next = NULL; p_event->p_first_descriptor = NULL; if(p_eit->p_first_event == NULL) { p_eit->p_first_event = p_event; } else { dvbpsi_eit_event_t* p_last_event = p_eit->p_first_event; while(p_last_event->p_next != NULL) p_last_event = p_last_event->p_next; p_last_event->p_next = p_event; } } return p_event; } /***************************************************************************** * dvbpsi_EITEventAddDescriptor ***************************************************************************** * Add a descriptor in the EIT event description. *****************************************************************************/ dvbpsi_descriptor_t* dvbpsi_EITEventAddDescriptor( dvbpsi_eit_event_t* p_event, uint8_t i_tag, uint8_t i_length, uint8_t* p_data) { dvbpsi_descriptor_t* p_descriptor = dvbpsi_NewDescriptor(i_tag, i_length, p_data); if(p_descriptor) { if(p_event->p_first_descriptor == NULL) { p_event->p_first_descriptor = p_descriptor; } else { dvbpsi_descriptor_t* p_last_descriptor = p_event->p_first_descriptor; while(p_last_descriptor->p_next != NULL) p_last_descriptor = p_last_descriptor->p_next; p_last_descriptor->p_next = p_descriptor; } } return p_descriptor; } /***************************************************************************** * dvbpsi_GatherEITSections ***************************************************************************** * Callback for the subtable demultiplexor. *****************************************************************************/ void dvbpsi_GatherEITSections(dvbpsi_decoder_t * p_psi_decoder, void * p_private_decoder, dvbpsi_psi_section_t * p_section) { dvbpsi_eit_decoder_t* p_eit_decoder = (dvbpsi_eit_decoder_t*)p_private_decoder; int b_append = 1; int b_reinit = 0; unsigned int i; DVBPSI_DEBUG_ARG("EIT decoder", "Table version %2d, " "i_table_id %2d, " "i_extension %5d, " "section %3d up to %3d, " "current %1d", p_section->i_version, p_section->i_table_id, p_section->i_extension, p_section->i_number, p_section->i_last_number, p_section->b_current_next); if(!p_section->b_syntax_indicator) { /* Invalid section_syntax_indicator */ DVBPSI_ERROR("EIT decoder", "invalid section (section_syntax_indicator == 0)"); b_append = 0; } /* Now if b_append is true then we have a valid EIT section */ if(b_append) { /* TS discontinuity check */ if(p_psi_decoder->b_discontinuity) { b_reinit = 1; p_psi_decoder->b_discontinuity = 0; } else { /* Perform a few sanity checks */ if(p_eit_decoder->p_building_eit) { if(p_eit_decoder->p_building_eit->i_service_id != p_section->i_extension) { /* service_id */ DVBPSI_ERROR("EIT decoder", "'service_id' differs" " whereas no TS discontinuity has occurred"); b_reinit = 1; } else if(p_eit_decoder->p_building_eit->i_version != p_section->i_version) { /* version_number */ DVBPSI_ERROR("EIT decoder", "'version_number' differs" " whereas no discontinuity has occurred"); b_reinit = 1; } else if(p_eit_decoder->i_last_section_number != p_section->i_last_number) { /* last_section_number */ DVBPSI_ERROR("EIT decoder", "'last_section_number' differs" " whereas no discontinuity has occured"); b_reinit = 1; } } else { if( (p_eit_decoder->b_current_valid) && (p_eit_decoder->current_eit.i_version == p_section->i_version)) { /* Signal a new EIT if the previous one wasn't active */ if( (!p_eit_decoder->current_eit.b_current_next) && (p_section->b_current_next)) { dvbpsi_eit_t* p_eit = (dvbpsi_eit_t*)ObjectCreateType(dvbpsi_eit_t); p_eit_decoder->current_eit.b_current_next = 1; *p_eit = p_eit_decoder->current_eit; p_eit_decoder->pf_callback(p_eit_decoder->p_cb_data, p_eit); } /* Don't decode since this version is already decoded */ b_append = 0; } } } } /* Reinit the decoder if wanted */ if(b_reinit) { /* Force redecoding */ p_eit_decoder->b_current_valid = 0; /* Free structures */ if(p_eit_decoder->p_building_eit) { ObjectRefDec(p_eit_decoder->p_building_eit); p_eit_decoder->p_building_eit = NULL; } /* Clear the section array */ for(i = 0; i <= 255; i++) { if(p_eit_decoder->ap_sections[i] != NULL) { dvbpsi_ReleasePSISections(p_psi_decoder, p_eit_decoder->ap_sections[i]); p_eit_decoder->ap_sections[i] = NULL; } } } /* Append the section to the list if wanted */ if(b_append) { int b_complete; #ifdef PROCESS_SINGLE_SECTION int b_already_done = 0; #endif /* Initialize the structures if it's the first section received */ if(!p_eit_decoder->p_building_eit) { dvbpsi_NewEIT(p_eit_decoder->p_building_eit, p_section->i_extension, p_section->i_version, p_section->b_current_next, ((uint16_t)(p_section->p_payload_start[0]) << 8) | p_section->p_payload_start[1], ((uint16_t)(p_section->p_payload_start[2]) << 8) | p_section->p_payload_start[3], p_section->p_payload_start[4], p_section->p_payload_start[5]); p_eit_decoder->i_last_section_number = p_section->i_last_number; p_eit_decoder->i_first_received_section_number = p_section->i_number; } /* Fill the section array */ if(p_eit_decoder->ap_sections[p_section->i_number] != NULL) { DVBPSI_DEBUG_ARG("EIT decoder", "overwrite section number %d", p_section->i_number); dvbpsi_ReleasePSISections(p_psi_decoder, p_eit_decoder->ap_sections[p_section->i_number]); #ifdef PROCESS_SINGLE_SECTION b_already_done = 1; #endif } p_eit_decoder->ap_sections[p_section->i_number] = p_section; /* Check if we have all the sections */ b_complete = 0; #ifdef PROCESS_SINGLE_SECTION if (!b_already_done) { DVBPSI_DEBUG_ARG("EIT decoder", "Decoding section number %d %p", p_section->i_number, p_section); /* Decode the sections */ p_section->p_next = NULL; p_eit_decoder->current_eit = *p_eit_decoder->p_building_eit; dvbpsi_DecodeEITSections(p_eit_decoder->p_building_eit, p_section); /* signal the new EIT */ p_eit_decoder->pf_callback(p_eit_decoder->p_cb_data, p_eit_decoder->p_building_eit); /* create a new EIT */ dvbpsi_NewEIT(p_eit_decoder->p_building_eit, p_section->i_extension, p_section->i_version, p_section->b_current_next, ((uint16_t)(p_section->p_payload_start[0]) << 8) | p_section->p_payload_start[1], ((uint16_t)(p_section->p_payload_start[2]) << 8) | p_section->p_payload_start[3], p_section->p_payload_start[4], p_section->p_payload_start[5]); } #endif /* As there may be gaps in the section_number fields (see below), we * have to wait until we have received a section_number twice or * until we have a received a section_number which is * first_received_section_number - 1; * if the first_received_section_number is 0, it's enough to wait * until the last_section_number has been received; * this is the only way to be sure that a complete table has been * sent! */ if((p_eit_decoder->i_first_received_section_number > 0 && (p_section->i_number == p_eit_decoder->i_first_received_section_number || p_section->i_number == p_eit_decoder->i_first_received_section_number - 1)) || (p_eit_decoder->i_first_received_section_number == 0 && p_section->i_number == p_eit_decoder->i_last_section_number)) { for(i = 0; i <= p_eit_decoder->i_last_section_number; i++) { if(!p_eit_decoder->ap_sections[i]) break; if(i == p_eit_decoder->i_last_section_number) { b_complete = 1; break; } /* ETSI EN 300 468 V1.5.1 section 5.2.4 says that the EIT * sections may be structured into a number of segments and * that there may be a gap in the section_number between * two segments (but not within a single segment); thus at * the end of a segment (indicated by * section_number == segment_last_section_number) * we have to search for the beginning of the next segment) */ if(i == p_eit_decoder->ap_sections[i]->p_payload_start[4]) { while(!p_eit_decoder->ap_sections[i + 1] && (i + 1 < p_eit_decoder->i_last_section_number)) { i++; } } } } if(b_complete) { /* Save the current information */ #ifdef PROCESS_SINGLE_SECTION dvbpsi_InitEIT(&p_eit_decoder->current_eit, p_section->i_extension, p_section->i_version, p_section->b_current_next, ((uint16_t)(p_section->p_payload_start[0]) << 8) | p_section->p_payload_start[1], ((uint16_t)(p_section->p_payload_start[2]) << 8) | p_section->p_payload_start[3], p_section->p_payload_start[4], p_section->p_payload_start[5]); #else p_eit_decoder->current_eit = *p_eit_decoder->p_building_eit; #endif p_eit_decoder->b_current_valid = 1; /* Chain the sections */ if(p_eit_decoder->i_last_section_number) { dvbpsi_psi_section_t * p_prev_section; p_prev_section = p_eit_decoder->ap_sections[0]; for(i = 1; i <= p_eit_decoder->i_last_section_number; i++) { if(p_eit_decoder->ap_sections[i] != NULL) { p_prev_section->p_next = p_eit_decoder->ap_sections[i]; p_prev_section = p_eit_decoder->ap_sections[i]; } } } #ifndef PROCESS_SINGLE_SECTION /* Decode the sections */ dvbpsi_DecodeEITSections(p_eit_decoder->p_building_eit, p_eit_decoder->ap_sections[0]); /* Delete the sections */ dvbpsi_ReleasePSISections(p_psi_decoder, p_eit_decoder->ap_sections[0]); /* signal the new EIT */ p_eit_decoder->pf_callback(p_eit_decoder->p_cb_data, p_eit_decoder->p_building_eit); #endif /* Reinitialize the structures */ p_eit_decoder->p_building_eit = NULL; for(i = 0; i <= p_eit_decoder->i_last_section_number; i++) p_eit_decoder->ap_sections[i] = NULL; } } else { dvbpsi_ReleasePSISections(p_psi_decoder, p_section); } } /***************************************************************************** * dvbpsi_DecodeEITSections ***************************************************************************** * EIT decoder. *****************************************************************************/ void dvbpsi_DecodeEITSections(dvbpsi_eit_t* p_eit, dvbpsi_psi_section_t* p_section) { uint8_t* p_byte, * p_end; while(p_section) { for(p_byte = p_section->p_payload_start + 6; p_byte < p_section->p_payload_end - 12;) { uint16_t i_event_id = ((uint16_t)(p_byte[0]) << 8) | p_byte[1]; struct tm t_start_time; uint32_t i_duration; uint8_t i_running_status = (uint8_t)(p_byte[10]) >> 5; int b_free_ca = (int)(p_byte[10] & 0x10) >> 4; uint16_t i_length = ((uint16_t)(p_byte[10] & 0xf) << 8) | p_byte[11]; dvbpsi_DecodeMJDUTC(&p_byte[2], &t_start_time); i_duration = (((((unsigned int)(p_byte[7] >> 4) & 0xf) * 10) + ((unsigned int)(p_byte[7] & 0xf))) * (60 * 60)) + (((((unsigned int)(p_byte[8] >> 4) & 0xf) * 10) + ((unsigned int)(p_byte[8] & 0xf))) * 60) + (((unsigned int)(p_byte[9] >> 4) & 0xf) * 10) + ((unsigned int)(p_byte[9] & 0xf)); dvbpsi_eit_event_t* p_event = dvbpsi_EITAddEvent(p_eit, i_event_id, &t_start_time, i_duration, i_running_status, b_free_ca); /* Event descriptors */ p_byte += 12; p_end = p_byte + i_length; while(p_byte + 2 <= p_end) { uint8_t i_tag = p_byte[0]; uint8_t i_length = p_byte[1]; if(i_length + 2 <= p_end - p_byte) dvbpsi_EITEventAddDescriptor(p_event, i_tag, i_length, p_byte + 2); p_byte += 2 + i_length; } } p_section = p_section->p_next; } } dvbstreamer-2.1.0/src/dvbpsi/tables/eit_private.h000066400000000000000000000056041217721213100220460ustar00rootroot00000000000000/***************************************************************************** * eit_private.h: private EIT structures *---------------------------------------------------------------------------- * (c)2004 VideoLAN * $Id: eit_private.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Christophe Massiot * * 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. * *---------------------------------------------------------------------------- * *****************************************************************************/ #ifndef _DVBPSI_EIT_PRIVATE_H_ #define _DVBPSI_EIT_PRIVATE_H_ /***************************************************************************** * dvbpsi_eit_decoder_t ***************************************************************************** * EIT decoder. *****************************************************************************/ typedef struct dvbpsi_eit_decoder_s { dvbpsi_eit_callback pf_callback; void * p_cb_data; dvbpsi_eit_t current_eit; dvbpsi_eit_t * p_building_eit; int b_current_valid; uint8_t i_last_section_number; uint8_t i_first_received_section_number; dvbpsi_psi_section_t * ap_sections [256]; } dvbpsi_eit_decoder_t; /***************************************************************************** * dvbpsi_GatherEITSections ***************************************************************************** * Callback for the PSI decoder. *****************************************************************************/ void dvbpsi_GatherEITSections(dvbpsi_decoder_t* p_psi_decoder, void* p_private_decoder, dvbpsi_psi_section_t* p_section); /***************************************************************************** * dvbpsi_DecodeEITSection ***************************************************************************** * EIT decoder. *****************************************************************************/ void dvbpsi_DecodeEITSections(dvbpsi_eit_t* p_eit, dvbpsi_psi_section_t* p_section); #else #error "Multiple inclusions of eit_private.h" #endif dvbstreamer-2.1.0/src/dvbpsi/tables/nit.c000066400000000000000000000466141217721213100203260ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA nit.c Decode Network Information Tables. */ #include "config.h" #include #include #include #include #include "dvbpsi.h" #include "psi.h" #include "descriptor.h" #include "demux.h" #include "dvbpsi/nit.h" #include "dvbpsi_private.h" #include "objects.h" /***************************************************************************** * dvbpsi_nit_decoder_t ***************************************************************************** * NIT decoder. *****************************************************************************/ typedef struct dvbpsi_nit_decoder_s { dvbpsi_nit_callback pf_callback; void * p_cb_data; dvbpsi_nit_t current_nit; dvbpsi_nit_t * p_building_nit; int b_current_valid; uint8_t i_last_section_number; dvbpsi_psi_section_t * ap_sections [256]; } dvbpsi_nit_decoder_t; /***************************************************************************** * dvbpsi_GatherNITSections ***************************************************************************** * Callback for the PSI decoder. *****************************************************************************/ void dvbpsi_GatherNITSections(dvbpsi_decoder_t* p_psi_decoder, void* p_private_decoder, dvbpsi_psi_section_t* p_section); /***************************************************************************** * dvbpsi_DecodeNITSection ***************************************************************************** * NIT decoder. *****************************************************************************/ void dvbpsi_DecodeNITSections(dvbpsi_nit_t* p_nit, dvbpsi_psi_section_t* p_section); dvbpsi_descriptor_t *dvbpsi_NITAddDescriptor( dvbpsi_nit_t *p_nit, uint8_t i_tag, uint8_t i_length, uint8_t *p_data); dvbpsi_nit_transport_t *dvbpsi_NITAddTransport(dvbpsi_nit_t* p_nit, uint16_t i_ts_id, uint16_t i_orignal_network_id); dvbpsi_descriptor_t *dvbpsi_NITTransportAddDescriptor( dvbpsi_nit_transport_t *p_transport, uint8_t i_tag, uint8_t i_length, uint8_t *p_data); /***************************************************************************** * dvbpsi_AttachNIT ***************************************************************************** * Initialize a NIT subtable decoder. *****************************************************************************/ int dvbpsi_AttachNIT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, uint16_t i_extension, dvbpsi_nit_callback pf_callback, void* p_cb_data) { dvbpsi_demux_t* p_demux = (dvbpsi_demux_t*)p_psi_decoder->p_private_decoder; dvbpsi_demux_subdec_t* p_subdec; dvbpsi_nit_decoder_t* p_nit_decoder; unsigned int i; if(dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension)) { DVBPSI_ERROR_ARG("NIT decoder", "Already a decoder for (table_id == 0x%02x," "extension == 0x%02x)", i_table_id, i_extension); return 1; } p_subdec = (dvbpsi_demux_subdec_t*)malloc(sizeof(dvbpsi_demux_subdec_t)); if(p_subdec == NULL) { return 1; } p_nit_decoder = (dvbpsi_nit_decoder_t*)malloc(sizeof(dvbpsi_nit_decoder_t)); if(p_nit_decoder == NULL) { free(p_subdec); return 1; } /* subtable decoder configuration */ p_subdec->pf_callback = &dvbpsi_GatherNITSections; p_subdec->p_cb_data = p_nit_decoder; p_subdec->i_id = (uint32_t)i_table_id << 16 | (uint32_t)i_extension; p_subdec->pf_detach = dvbpsi_DetachNIT; /* Attach the subtable decoder to the demux */ p_subdec->p_next = p_demux->p_first_subdec; p_demux->p_first_subdec = p_subdec; /* NIT decoder information */ p_nit_decoder->pf_callback = pf_callback; p_nit_decoder->p_cb_data = p_cb_data; /* NIT decoder initial state */ p_nit_decoder->b_current_valid = 0; p_nit_decoder->p_building_nit = NULL; for(i = 0; i <= 255; i++) p_nit_decoder->ap_sections[i] = NULL; return 0; } /***************************************************************************** * dvbpsi_DetachNIT ***************************************************************************** * Close a NIT decoder. *****************************************************************************/ void dvbpsi_DetachNIT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_t i_extension) { dvbpsi_demux_subdec_t* p_subdec; dvbpsi_demux_subdec_t** pp_prev_subdec; dvbpsi_nit_decoder_t* p_nit_decoder; unsigned int i; p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension); if(p_demux == NULL) { DVBPSI_ERROR_ARG("NIT decoder", "No such NIT decoder (table_id == 0x%02x," "extension == 0x%02x)", i_table_id, i_extension); return; } p_nit_decoder = (dvbpsi_nit_decoder_t*)p_subdec->p_cb_data; if (p_nit_decoder->p_building_nit) { ObjectRefDec(p_nit_decoder->p_building_nit); } for(i = 0; i <= 255; i++) { if(p_nit_decoder->ap_sections[i]) dvbpsi_DeletePSISections(p_nit_decoder->ap_sections[i]); } free(p_subdec->p_cb_data); pp_prev_subdec = &p_demux->p_first_subdec; while(*pp_prev_subdec != p_subdec) pp_prev_subdec = &(*pp_prev_subdec)->p_next; *pp_prev_subdec = p_subdec->p_next; free(p_subdec); } /***************************************************************************** * dvbpsi_InitNIT ***************************************************************************** * Initialize a pre-allocated dvbpsi_nit_t structure. *****************************************************************************/ void dvbpsi_InitNIT(dvbpsi_nit_t* p_nit, int b_actual, uint16_t i_network_id, uint8_t i_version, int b_current_next) { p_nit->b_actual = b_actual; p_nit->i_network_id = i_network_id; p_nit->i_version = i_version; p_nit->b_current_next = b_current_next; p_nit->p_first_descriptor = NULL; p_nit->p_first_transport = NULL; } /***************************************************************************** * dvbpsi_EmptyNIT ***************************************************************************** * Clean a dvbpsi_nit_t structure. *****************************************************************************/ void dvbpsi_EmptyNIT(dvbpsi_nit_t* p_nit) { dvbpsi_nit_transport_t *p_transport = p_nit->p_first_transport; dvbpsi_DeleteDescriptors(p_nit->p_first_descriptor); while (p_transport) { dvbpsi_nit_transport_t *p_next; dvbpsi_DeleteDescriptors(p_transport->p_first_descriptor); p_next = p_transport->p_next; free(p_transport); p_transport = p_next; } } /***************************************************************************** * dvbpsi_GatherNITSections ***************************************************************************** * Callback for the subtable demultiplexor. *****************************************************************************/ void dvbpsi_GatherNITSections(dvbpsi_decoder_t * p_psi_decoder, void * p_private_decoder, dvbpsi_psi_section_t * p_section) { dvbpsi_nit_decoder_t * p_nit_decoder = (dvbpsi_nit_decoder_t*)p_private_decoder; int b_append = 1; int b_reinit = 0; unsigned int i; /* printlog(LOG_ERROR, "NIT decoder: " "Table version %2d, " "i_table_id %2d, " "i_extension %5d, " "section %3d up to %3d, " "current %1d", p_section->i_version, p_section->i_table_id, p_section->i_extension, p_section->i_number, p_section->i_last_number, p_section->b_current_next); */ if(!p_section->b_syntax_indicator) { /* Invalid section_syntax_indicator */ DVBPSI_ERROR("NIT decoder", "invalid section (section_syntax_indicator == 0)"); b_append = 0; } /* Now if b_append is true then we have a valid NIT section */ if(b_append) { /* TS discontinuity check */ if(p_psi_decoder->b_discontinuity) { b_reinit = 1; p_psi_decoder->b_discontinuity = 0; } else { /* Perform a few sanity checks */ if(p_nit_decoder->p_building_nit) { if(p_nit_decoder->p_building_nit->i_network_id != p_section->i_extension) { /* transport_stream_id */ DVBPSI_ERROR("NIT decoder", "'transport_stream_id' differs" " whereas no TS discontinuity has occured"); b_reinit = 1; } else if(p_nit_decoder->p_building_nit->i_version != p_section->i_version) { /* version_number */ DVBPSI_ERROR("NIT decoder", "'version_number' differs" " whereas no discontinuity has occured"); b_reinit = 1; } else if(p_nit_decoder->i_last_section_number != p_section->i_last_number) { /* last_section_number */ DVBPSI_ERROR("NIT decoder", "'last_section_number' differs" " whereas no discontinuity has occured"); b_reinit = 1; } } else { if( (p_nit_decoder->b_current_valid) && (p_nit_decoder->current_nit.i_version == p_section->i_version)) { /* Signal a new NIT if the previous one wasn't active */ if( (!p_nit_decoder->current_nit.b_current_next) && (p_section->b_current_next)) { dvbpsi_nit_t * p_nit = (dvbpsi_nit_t*)ObjectCreateType(dvbpsi_nit_t); p_nit_decoder->current_nit.b_current_next = 1; *p_nit = p_nit_decoder->current_nit; p_nit_decoder->pf_callback(p_nit_decoder->p_cb_data, p_nit); } /* Don't decode since this version is already decoded */ b_append = 0; } } } } /* Reinit the decoder if wanted */ if(b_reinit) { /* Force redecoding */ p_nit_decoder->b_current_valid = 0; /* Free structures */ if(p_nit_decoder->p_building_nit) { ObjectRefDec(p_nit_decoder->p_building_nit); p_nit_decoder->p_building_nit = NULL; } /* Clear the section array */ for(i = 0; i <= 255; i++) { if(p_nit_decoder->ap_sections[i] != NULL) { dvbpsi_ReleasePSISections(p_psi_decoder, p_nit_decoder->ap_sections[i]); p_nit_decoder->ap_sections[i] = NULL; } } } /* Append the section to the list if wanted */ if(b_append) { int b_complete; /* Initialize the structures if it's the first section received */ if(!p_nit_decoder->p_building_nit) { dvbpsi_NewNIT(p_nit_decoder->p_building_nit, p_section->i_table_id == TABLE_ID_NIT_ACTUAL, p_section->i_extension, p_section->i_version, p_section->b_current_next); p_nit_decoder->i_last_section_number = p_section->i_last_number; } /* Fill the section array */ if(p_nit_decoder->ap_sections[p_section->i_number] != NULL) { DVBPSI_ERROR_ARG("NIT decoder", "NIT decoder: overwrite section number %d", p_section->i_number); dvbpsi_ReleasePSISections(p_psi_decoder, p_nit_decoder->ap_sections[p_section->i_number]); } p_nit_decoder->ap_sections[p_section->i_number] = p_section; /* Check if we have all the sections */ b_complete = 0; for(i = 0; i <= p_nit_decoder->i_last_section_number; i++) { if(!p_nit_decoder->ap_sections[i]) break; if(i == p_nit_decoder->i_last_section_number) b_complete = 1; } if(b_complete) { /* Save the current information */ p_nit_decoder->current_nit = *p_nit_decoder->p_building_nit; p_nit_decoder->b_current_valid = 1; /* Chain the sections */ if(p_nit_decoder->i_last_section_number) { for(i = 0; i <= p_nit_decoder->i_last_section_number - 1; i++) p_nit_decoder->ap_sections[i]->p_next = p_nit_decoder->ap_sections[i + 1]; } /* Decode the sections */ dvbpsi_DecodeNITSections(p_nit_decoder->p_building_nit, p_nit_decoder->ap_sections[0]); /* Delete the sections */ dvbpsi_ReleasePSISections(p_psi_decoder, p_nit_decoder->ap_sections[0]); /* signal the new NIT */ p_nit_decoder->pf_callback(p_nit_decoder->p_cb_data, p_nit_decoder->p_building_nit); /* Reinitialize the structures */ p_nit_decoder->p_building_nit = NULL; for(i = 0; i <= p_nit_decoder->i_last_section_number; i++) p_nit_decoder->ap_sections[i] = NULL; } } else { dvbpsi_ReleasePSISections(p_psi_decoder, p_section); } } /***************************************************************************** * dvbpsi_DecodeNITSection ***************************************************************************** * NIT decoder. *****************************************************************************/ void dvbpsi_DecodeNITSections(dvbpsi_nit_t* p_nit, dvbpsi_psi_section_t* p_section) { uint8_t *p_byte, *p_end; uint8_t *p_ts_end; uint16_t i_ts_length; while(p_section) { for(p_byte = p_section->p_payload_start; p_byte + 4 < p_section->p_payload_end;) { uint16_t i_length = ((uint16_t)(p_byte[0] & 0xf) <<8) | p_byte[1]; /* network descriptors */ p_byte += 2; p_end = p_byte + i_length; if( p_end > p_section->p_payload_end ) break; while(p_byte + 2 <= p_end) { uint8_t i_tag = p_byte[0]; uint8_t i_desc_length = p_byte[1]; if(i_desc_length + 2 <= p_end - p_byte) dvbpsi_NITAddDescriptor(p_nit, i_tag, i_desc_length, p_byte + 2); p_byte += 2 + i_desc_length; } i_ts_length = ((uint16_t)(p_byte[0] & 0xf) <<8) | p_byte[1]; p_byte += 2; p_ts_end = p_byte + i_ts_length; if( p_ts_end > p_section->p_payload_end ) break; while(p_byte + 2 <= p_ts_end) { uint16_t i_ts_id = ((uint16_t)p_byte[0]<<8) | p_byte[1]; uint16_t i_original_network_id = ((uint16_t)p_byte[2]<<8) | p_byte[3]; dvbpsi_nit_transport_t *p_transport = dvbpsi_NITAddTransport(p_nit, i_ts_id, i_original_network_id); i_length = ((uint16_t)(p_byte[4] & 0xf) <<8) | p_byte[5]; p_byte += 6; p_end = p_byte + i_length; if( p_end > p_section->p_payload_end ) break; while(p_byte + 2 <= p_end) { uint8_t i_tag = p_byte[0]; uint8_t i_desc_length = p_byte[1]; if(i_desc_length + 2 <= p_end - p_byte) dvbpsi_NITTransportAddDescriptor(p_transport, i_tag, i_desc_length, p_byte + 2); p_byte += 2 + i_desc_length; } } } p_section = p_section->p_next; } } /***************************************************************************** * dvbpsi_NITAddDescriptor ***************************************************************************** * Add a descriptor in the NIT description. *****************************************************************************/ dvbpsi_descriptor_t *dvbpsi_NITAddDescriptor( dvbpsi_nit_t *p_nit, uint8_t i_tag, uint8_t i_length, uint8_t *p_data) { dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(i_tag, i_length, p_data); if(p_descriptor) { if(p_nit->p_first_descriptor == NULL) { p_nit->p_first_descriptor = p_descriptor; } else { dvbpsi_descriptor_t * p_last_descriptor = p_nit->p_first_descriptor; while(p_last_descriptor->p_next != NULL) p_last_descriptor = p_last_descriptor->p_next; p_last_descriptor->p_next = p_descriptor; } } return p_descriptor; } /***************************************************************************** * dvbpsi_NITAddTransport ***************************************************************************** * Add a transport description at the end of the NIT. *****************************************************************************/ dvbpsi_nit_transport_t *dvbpsi_NITAddTransport(dvbpsi_nit_t* p_nit, uint16_t i_ts_id, uint16_t i_original_network_id) { dvbpsi_nit_transport_t * p_transport = (dvbpsi_nit_transport_t*)malloc(sizeof(dvbpsi_nit_transport_t)); if(p_transport) { p_transport->i_ts_id = i_ts_id; p_transport->i_original_network_id = i_original_network_id; p_transport->p_first_descriptor = NULL; p_transport->p_next = NULL; if(p_nit->p_first_transport == NULL) { p_nit->p_first_transport = p_transport; } else { dvbpsi_nit_transport_t * p_last_transport = p_nit->p_first_transport; while(p_last_transport->p_next != NULL) p_last_transport = p_last_transport->p_next; p_last_transport->p_next = p_transport; } } return p_transport; } /***************************************************************************** * dvbpsi_NITTransportAddDescriptor ***************************************************************************** * Add a descriptor in the NIT transport description. *****************************************************************************/ dvbpsi_descriptor_t *dvbpsi_NITTransportAddDescriptor( dvbpsi_nit_transport_t *p_transport, uint8_t i_tag, uint8_t i_length, uint8_t *p_data) { dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(i_tag, i_length, p_data); if(p_descriptor) { if(p_transport->p_first_descriptor == NULL) { p_transport->p_first_descriptor = p_descriptor; } else { dvbpsi_descriptor_t * p_last_descriptor = p_transport->p_first_descriptor; while(p_last_descriptor->p_next != NULL) p_last_descriptor = p_last_descriptor->p_next; p_last_descriptor->p_next = p_descriptor; } } return p_descriptor; } dvbstreamer-2.1.0/src/dvbpsi/tables/pat.c000066400000000000000000000371731217721213100203200ustar00rootroot00000000000000/***************************************************************************** * pat.c: PAT decoder/generator *---------------------------------------------------------------------------- * (c)2001-2002 VideoLAN * $Id: pat.c 108 2005-04-19 12:33:21Z gbazin $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *---------------------------------------------------------------------------- * *****************************************************************************/ #include "config.h" #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "psi.h" #include "pat.h" #include "pat_private.h" #include "objects.h" /***************************************************************************** * dvbpsi_AttachPAT ***************************************************************************** * Initialize a PAT decoder and return a handle on it. *****************************************************************************/ dvbpsi_handle dvbpsi_AttachPAT(dvbpsi_pat_callback pf_callback, void* p_cb_data) { dvbpsi_handle h_dvbpsi = (dvbpsi_decoder_t*)malloc(sizeof(dvbpsi_decoder_t)); dvbpsi_pat_decoder_t* p_pat_decoder; unsigned int i; if(h_dvbpsi == NULL) return NULL; p_pat_decoder = (dvbpsi_pat_decoder_t*)malloc(sizeof(dvbpsi_pat_decoder_t)); if(p_pat_decoder == NULL) { free(h_dvbpsi); return NULL; } /* PSI decoder configuration */ h_dvbpsi->pf_callback = &dvbpsi_GatherPATSections; h_dvbpsi->p_private_decoder = p_pat_decoder; h_dvbpsi->i_section_max_size = 1024; /* PSI decoder initial state */ h_dvbpsi->i_continuity_counter = 31; h_dvbpsi->b_discontinuity = 1; h_dvbpsi->p_current_section = NULL; h_dvbpsi->p_free_sections = NULL; /* PAT decoder information */ p_pat_decoder->pf_callback = pf_callback; p_pat_decoder->p_cb_data = p_cb_data; /* PAT decoder initial state */ p_pat_decoder->b_current_valid = 0; p_pat_decoder->p_building_pat = NULL; for(i = 0; i <= 255; i++) p_pat_decoder->ap_sections[i] = NULL; return h_dvbpsi; } /***************************************************************************** * dvbpsi_DetachPAT ***************************************************************************** * Close a PAT decoder. The handle isn't valid any more. *****************************************************************************/ void dvbpsi_DetachPAT(dvbpsi_handle h_dvbpsi) { dvbpsi_pat_decoder_t* p_pat_decoder = (dvbpsi_pat_decoder_t*)h_dvbpsi->p_private_decoder; unsigned int i; if (p_pat_decoder->p_building_pat) { ObjectRefDec(p_pat_decoder->p_building_pat); } for(i = 0; i <= 255; i++) { if(p_pat_decoder->ap_sections[i]) free(p_pat_decoder->ap_sections[i]); } free(h_dvbpsi->p_private_decoder); if(h_dvbpsi->p_current_section) dvbpsi_DeletePSISections(h_dvbpsi->p_current_section); if(h_dvbpsi->p_free_sections) dvbpsi_DeletePSISections(h_dvbpsi->p_free_sections); free(h_dvbpsi); } /***************************************************************************** * dvbpsi_InitPAT ***************************************************************************** * Initialize a pre-allocated dvbpsi_pat_t structure. *****************************************************************************/ void dvbpsi_InitPAT(dvbpsi_pat_t* p_pat, uint16_t i_ts_id, uint8_t i_version, int b_current_next) { p_pat->i_ts_id = i_ts_id; p_pat->i_version = i_version; p_pat->b_current_next = b_current_next; p_pat->p_first_program = NULL; } /***************************************************************************** * dvbpsi_EmptyPAT ***************************************************************************** * Clean a dvbpsi_pat_t structure. *****************************************************************************/ void dvbpsi_EmptyPAT(dvbpsi_pat_t* p_pat) { dvbpsi_pat_program_t* p_program = p_pat->p_first_program; while(p_program != NULL) { dvbpsi_pat_program_t* p_tmp = p_program->p_next; free(p_program); p_program = p_tmp; } p_pat->p_first_program = NULL; } /***************************************************************************** * dvbpsi_PATAddProgram ***************************************************************************** * Add a program at the end of the PAT. *****************************************************************************/ dvbpsi_pat_program_t* dvbpsi_PATAddProgram(dvbpsi_pat_t* p_pat, uint16_t i_number, uint16_t i_pid) { dvbpsi_pat_program_t* p_program = (dvbpsi_pat_program_t*)malloc(sizeof(dvbpsi_pat_program_t)); if(p_program) { p_program->i_number = i_number; p_program->i_pid = i_pid; p_program->p_next = NULL; if(p_pat->p_first_program == NULL) { p_pat->p_first_program = p_program; } else { dvbpsi_pat_program_t* p_last_program = p_pat->p_first_program; while(p_last_program->p_next != NULL) p_last_program = p_last_program->p_next; p_last_program->p_next = p_program; } } return p_program; } /***************************************************************************** * dvbpsi_GatherPATSections ***************************************************************************** * Callback for the PSI decoder. *****************************************************************************/ void dvbpsi_GatherPATSections(dvbpsi_decoder_t* p_decoder, dvbpsi_psi_section_t* p_section) { dvbpsi_pat_decoder_t* p_pat_decoder = (dvbpsi_pat_decoder_t*)p_decoder->p_private_decoder; int b_append = 1; int b_reinit = 0; unsigned int i; DVBPSI_DEBUG_ARG("PAT decoder", "Table version %2d, " "i_extension %5d, " "section %3d up to %3d, " "current %1d", p_section->i_version, p_section->i_extension, p_section->i_number, p_section->i_last_number, p_section->b_current_next); if(p_section->i_table_id != 0x00) { /* Invalid table_id value */ DVBPSI_ERROR_ARG("PAT decoder", "invalid section (table_id == 0x%02x)", p_section->i_table_id); b_append = 0; } if(b_append && !p_section->b_syntax_indicator) { /* Invalid section_syntax_indicator */ DVBPSI_ERROR("PAT decoder", "invalid section (section_syntax_indicator == 0)"); b_append = 0; } /* Now if b_append is true then we have a valid PAT section */ if(b_append) { /* TS discontinuity check */ if(p_decoder->b_discontinuity) { b_reinit = 1; p_decoder->b_discontinuity = 0; } else { /* Perform a few sanity checks */ if(p_pat_decoder->p_building_pat) { if(p_pat_decoder->p_building_pat->i_ts_id != p_section->i_extension) { /* transport_stream_id */ DVBPSI_ERROR("PAT decoder", "'transport_stream_id' differs" " whereas no TS discontinuity has occured"); b_reinit = 1; } else if(p_pat_decoder->p_building_pat->i_version != p_section->i_version) { /* version_number */ DVBPSI_ERROR("PAT decoder", "'version_number' differs" " whereas no discontinuity has occured"); b_reinit = 1; } else if(p_pat_decoder->i_last_section_number != p_section->i_last_number) { /* last_section_number */ DVBPSI_ERROR("PAT decoder", "'last_section_number' differs" " whereas no discontinuity has occured"); b_reinit = 1; } } else { if( (p_pat_decoder->b_current_valid) && (p_pat_decoder->current_pat.i_version == p_section->i_version)) { /* Signal a new PAT if the previous one wasn't active */ if( (!p_pat_decoder->current_pat.b_current_next) && (p_section->b_current_next)) { dvbpsi_pat_t* p_pat = (dvbpsi_pat_t*)ObjectCreateType(dvbpsi_pat_t); p_pat_decoder->current_pat.b_current_next = 1; *p_pat = p_pat_decoder->current_pat; p_pat_decoder->pf_callback(p_pat_decoder->p_cb_data, p_pat); } /* Don't decode since this version is already decoded */ b_append = 0; } } } } /* Reinit the decoder if wanted */ if(b_reinit) { /* Force redecoding */ p_pat_decoder->b_current_valid = 0; /* Free structures */ if(p_pat_decoder->p_building_pat) { ObjectRefDec(p_pat_decoder->p_building_pat); p_pat_decoder->p_building_pat = NULL; } /* Clear the section array */ for(i = 0; i <= 255; i++) { if(p_pat_decoder->ap_sections[i] != NULL) { dvbpsi_ReleasePSISections(p_decoder, p_pat_decoder->ap_sections[i]); p_pat_decoder->ap_sections[i] = NULL; } } } /* Append the section to the list if wanted */ if(b_append) { int b_complete; /* Initialize the structures if it's the first section received */ if(!p_pat_decoder->p_building_pat) { dvbpsi_NewPAT(p_pat_decoder->p_building_pat, p_section->i_extension, p_section->i_version, p_section->b_current_next); p_pat_decoder->i_last_section_number = p_section->i_last_number; } /* Fill the section array */ if(p_pat_decoder->ap_sections[p_section->i_number] != NULL) { DVBPSI_DEBUG_ARG("PAT decoder", "overwrite section number %d", p_section->i_number); dvbpsi_ReleasePSISections(p_decoder, p_pat_decoder->ap_sections[p_section->i_number]); } p_pat_decoder->ap_sections[p_section->i_number] = p_section; /* Check if we have all the sections */ b_complete = 0; for(i = 0; i <= p_pat_decoder->i_last_section_number; i++) { if(!p_pat_decoder->ap_sections[i]) break; if(i == p_pat_decoder->i_last_section_number) b_complete = 1; } if(b_complete) { /* Save the current information */ p_pat_decoder->current_pat = *p_pat_decoder->p_building_pat; p_pat_decoder->b_current_valid = 1; /* Chain the sections */ if(p_pat_decoder->i_last_section_number) { for(i = 0; i <= p_pat_decoder->i_last_section_number - 1; i++) p_pat_decoder->ap_sections[i]->p_next = p_pat_decoder->ap_sections[i + 1]; } /* Decode the sections */ dvbpsi_DecodePATSections(p_pat_decoder->p_building_pat, p_pat_decoder->ap_sections[0]); /* Delete the sections */ dvbpsi_ReleasePSISections(p_decoder, p_pat_decoder->ap_sections[0]); /* signal the new PAT */ p_pat_decoder->pf_callback(p_pat_decoder->p_cb_data, p_pat_decoder->p_building_pat); /* Reinitialize the structures */ p_pat_decoder->p_building_pat = NULL; for(i = 0; i <= p_pat_decoder->i_last_section_number; i++) p_pat_decoder->ap_sections[i] = NULL; } } else { dvbpsi_ReleasePSISections(p_decoder, p_section); } } /***************************************************************************** * dvbpsi_DecodePATSection ***************************************************************************** * PAT decoder. *****************************************************************************/ void dvbpsi_DecodePATSections(dvbpsi_pat_t* p_pat, dvbpsi_psi_section_t* p_section) { uint8_t* p_byte; while(p_section) { for(p_byte = p_section->p_payload_start; p_byte < p_section->p_payload_end; p_byte += 4) { uint16_t i_program_number = ((uint16_t)(p_byte[0]) << 8) | p_byte[1]; uint16_t i_pid = ((uint16_t)(p_byte[2] & 0x1f) << 8) | p_byte[3]; dvbpsi_PATAddProgram(p_pat, i_program_number, i_pid); } p_section = p_section->p_next; } } /***************************************************************************** * dvbpsi_GenPATSections ***************************************************************************** * Generate PAT sections based on the dvbpsi_pat_t structure. The third * argument is used to limit the number of program in each section (max: 253). *****************************************************************************/ dvbpsi_psi_section_t* dvbpsi_GenPATSections(dvbpsi_pat_t* p_pat, int i_max_pps) { dvbpsi_psi_section_t* p_result = dvbpsi_NewPSISection(1024); dvbpsi_psi_section_t* p_current = p_result; dvbpsi_psi_section_t* p_prev; dvbpsi_pat_program_t* p_program = p_pat->p_first_program; int i_count = 0; /* A PAT section can carry up to 253 programs */ if((i_max_pps <= 0) || (i_max_pps > 253)) i_max_pps = 253; p_current->i_table_id = 0; p_current->b_syntax_indicator = 1; p_current->b_private_indicator = 0; p_current->i_length = 9; /* header + CRC_32 */ p_current->i_extension = p_pat->i_ts_id; p_current->i_version = p_pat->i_version; p_current->b_current_next = p_pat->b_current_next; p_current->i_number = 0; p_current->p_payload_end += 8; /* just after the header */ p_current->p_payload_start = p_current->p_payload_end; /* PAT programs */ while(p_program != NULL) { /* New section if needed */ if(++i_count > i_max_pps) { p_prev = p_current; p_current = dvbpsi_NewPSISection(1024); p_prev->p_next = p_current; i_count = 1; p_current->i_table_id = 0; p_current->b_syntax_indicator = 1; p_current->b_private_indicator = 0; p_current->i_length = 9; /* header + CRC_32 */ p_current->i_extension = p_pat->i_ts_id; p_current->i_version = p_pat->i_version; p_current->b_current_next = p_pat->b_current_next; p_current->i_number = p_prev->i_number + 1; p_current->p_payload_end += 8; /* just after the header */ p_current->p_payload_start = p_current->p_payload_end; } /* p_payload_end is where the program begins */ p_current->p_payload_end[0] = p_program->i_number >> 8; p_current->p_payload_end[1] = p_program->i_number; p_current->p_payload_end[2] = (p_program->i_pid >> 8) | 0xe0; p_current->p_payload_end[3] = p_program->i_pid; /* Increase length by 4 */ p_current->p_payload_end += 4; p_current->i_length += 4; p_program = p_program->p_next; } /* Finalization */ p_prev = p_result; while(p_prev != NULL) { p_prev->i_last_number = p_current->i_number; dvbpsi_BuildPSISection(p_prev); p_prev = p_prev->p_next; } return p_result; } dvbstreamer-2.1.0/src/dvbpsi/tables/pat_private.h000066400000000000000000000054441217721213100220530ustar00rootroot00000000000000/***************************************************************************** * pat_private.h: private PAT structures *---------------------------------------------------------------------------- * (c)2001-2002 VideoLAN * $Id: pat_private.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *---------------------------------------------------------------------------- * *****************************************************************************/ #ifndef _DVBPSI_PAT_PRIVATE_H_ #define _DVBPSI_PAT_PRIVATE_H_ /***************************************************************************** * dvbpsi_pat_decoder_t ***************************************************************************** * PAT decoder. *****************************************************************************/ typedef struct dvbpsi_pat_decoder_s { dvbpsi_pat_callback pf_callback; void * p_cb_data; dvbpsi_pat_t current_pat; dvbpsi_pat_t * p_building_pat; int b_current_valid; uint8_t i_last_section_number; dvbpsi_psi_section_t * ap_sections [256]; } dvbpsi_pat_decoder_t; /***************************************************************************** * dvbpsi_GatherPATSections ***************************************************************************** * Callback for the PSI decoder. *****************************************************************************/ void dvbpsi_GatherPATSections(dvbpsi_decoder_t* p_decoder, dvbpsi_psi_section_t* p_section); /***************************************************************************** * dvbpsi_DecodePATSection ***************************************************************************** * PAT decoder. *****************************************************************************/ void dvbpsi_DecodePATSections(dvbpsi_pat_t* p_pat, dvbpsi_psi_section_t* p_section); #else #error "Multiple inclusions of pat_private.h" #endif dvbstreamer-2.1.0/src/dvbpsi/tables/pmt.c000066400000000000000000000551061217721213100203300ustar00rootroot00000000000000/***************************************************************************** * pmt.c: PMT decoder/generator *---------------------------------------------------------------------------- * (c)2001-2002 VideoLAN * $Id: pmt.c 108 2005-04-19 12:33:21Z gbazin $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *---------------------------------------------------------------------------- * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "psi.h" #include "descriptor.h" #include "pmt.h" #include "pmt_private.h" #include "objects.h" /***************************************************************************** * dvbpsi_AttachPMT ***************************************************************************** * Initialize a PMT decoder and return a handle on it. *****************************************************************************/ dvbpsi_handle dvbpsi_AttachPMT(uint16_t i_program_number, dvbpsi_pmt_callback pf_callback, void* p_cb_data) { dvbpsi_handle h_dvbpsi = (dvbpsi_decoder_t*)malloc(sizeof(dvbpsi_decoder_t)); dvbpsi_pmt_decoder_t* p_pmt_decoder; unsigned int i; if(h_dvbpsi == NULL) return NULL; p_pmt_decoder = (dvbpsi_pmt_decoder_t*)malloc(sizeof(dvbpsi_pmt_decoder_t)); if(p_pmt_decoder == NULL) { free(h_dvbpsi); return NULL; } /* PSI decoder configuration */ h_dvbpsi->pf_callback = &dvbpsi_GatherPMTSections; h_dvbpsi->p_private_decoder = p_pmt_decoder; h_dvbpsi->i_section_max_size = 1024; /* PSI decoder initial state */ h_dvbpsi->i_continuity_counter = 31; h_dvbpsi->b_discontinuity = 1; h_dvbpsi->p_current_section = NULL; h_dvbpsi->p_free_sections = NULL; /* PMT decoder configuration */ p_pmt_decoder->i_program_number = i_program_number; p_pmt_decoder->pf_callback = pf_callback; p_pmt_decoder->p_cb_data = p_cb_data; /* PMT decoder initial state */ p_pmt_decoder->b_current_valid = 0; p_pmt_decoder->p_building_pmt = NULL; for(i = 0; i <= 255; i++) p_pmt_decoder->ap_sections[i] = NULL; return h_dvbpsi; } /***************************************************************************** * dvbpsi_DetachPMT ***************************************************************************** * Close a PMT decoder. The handle isn't valid any more. *****************************************************************************/ void dvbpsi_DetachPMT(dvbpsi_handle h_dvbpsi) { dvbpsi_pmt_decoder_t* p_pmt_decoder = (dvbpsi_pmt_decoder_t*)h_dvbpsi->p_private_decoder; unsigned int i; if (p_pmt_decoder->p_building_pmt) { ObjectRefDec(p_pmt_decoder->p_building_pmt); } for(i = 0; i <= 255; i++) { if(p_pmt_decoder->ap_sections[i]) free(p_pmt_decoder->ap_sections[i]); } free(h_dvbpsi->p_private_decoder); if(h_dvbpsi->p_current_section) dvbpsi_DeletePSISections(h_dvbpsi->p_current_section); if(h_dvbpsi->p_free_sections) dvbpsi_DeletePSISections(h_dvbpsi->p_free_sections); free(h_dvbpsi); } /***************************************************************************** * dvbpsi_InitPMT ***************************************************************************** * Initialize a pre-allocated dvbpsi_pmt_t structure. *****************************************************************************/ void dvbpsi_InitPMT(dvbpsi_pmt_t* p_pmt, uint16_t i_program_number, uint8_t i_version, int b_current_next, uint16_t i_pcr_pid) { p_pmt->i_program_number = i_program_number; p_pmt->i_version = i_version; p_pmt->b_current_next = b_current_next; p_pmt->i_pcr_pid = i_pcr_pid; p_pmt->p_first_descriptor = NULL; p_pmt->p_first_es = NULL; } /***************************************************************************** * dvbpsi_EmptyPMT ***************************************************************************** * Clean a dvbpsi_pmt_t structure. *****************************************************************************/ void dvbpsi_EmptyPMT(dvbpsi_pmt_t* p_pmt) { dvbpsi_pmt_es_t* p_es = p_pmt->p_first_es; dvbpsi_DeleteDescriptors(p_pmt->p_first_descriptor); while(p_es != NULL) { dvbpsi_pmt_es_t* p_tmp = p_es->p_next; dvbpsi_DeleteDescriptors(p_es->p_first_descriptor); free(p_es); p_es = p_tmp; } p_pmt->p_first_descriptor = NULL; p_pmt->p_first_es = NULL; } /***************************************************************************** * dvbpsi_PMTAddDescriptor ***************************************************************************** * Add a descriptor in the PMT. *****************************************************************************/ dvbpsi_descriptor_t* dvbpsi_PMTAddDescriptor(dvbpsi_pmt_t* p_pmt, uint8_t i_tag, uint8_t i_length, uint8_t* p_data) { dvbpsi_descriptor_t* p_descriptor = dvbpsi_NewDescriptor(i_tag, i_length, p_data); if(p_descriptor) { if(p_pmt->p_first_descriptor == NULL) { p_pmt->p_first_descriptor = p_descriptor; } else { dvbpsi_descriptor_t* p_last_descriptor = p_pmt->p_first_descriptor; while(p_last_descriptor->p_next != NULL) p_last_descriptor = p_last_descriptor->p_next; p_last_descriptor->p_next = p_descriptor; } } return p_descriptor; } /***************************************************************************** * dvbpsi_PMTAddES ***************************************************************************** * Add an ES in the PMT. *****************************************************************************/ dvbpsi_pmt_es_t* dvbpsi_PMTAddES(dvbpsi_pmt_t* p_pmt, uint8_t i_type, uint16_t i_pid) { dvbpsi_pmt_es_t* p_es = (dvbpsi_pmt_es_t*)malloc(sizeof(dvbpsi_pmt_es_t)); if(p_es) { p_es->i_type = i_type; p_es->i_pid = i_pid; p_es->p_first_descriptor = NULL; p_es->p_next = NULL; if(p_pmt->p_first_es == NULL) { p_pmt->p_first_es = p_es; } else { dvbpsi_pmt_es_t* p_last_es = p_pmt->p_first_es; while(p_last_es->p_next != NULL) p_last_es = p_last_es->p_next; p_last_es->p_next = p_es; } } return p_es; } /***************************************************************************** * dvbpsi_PMTESAddDescriptor ***************************************************************************** * Add a descriptor in the PMT ES. *****************************************************************************/ dvbpsi_descriptor_t* dvbpsi_PMTESAddDescriptor(dvbpsi_pmt_es_t* p_es, uint8_t i_tag, uint8_t i_length, uint8_t* p_data) { dvbpsi_descriptor_t* p_descriptor = dvbpsi_NewDescriptor(i_tag, i_length, p_data); if(p_descriptor) { if(p_es->p_first_descriptor == NULL) { p_es->p_first_descriptor = p_descriptor; } else { dvbpsi_descriptor_t* p_last_descriptor = p_es->p_first_descriptor; while(p_last_descriptor->p_next != NULL) p_last_descriptor = p_last_descriptor->p_next; p_last_descriptor->p_next = p_descriptor; } } return p_descriptor; } /***************************************************************************** * dvbpsi_GatherPMTSections ***************************************************************************** * Callback for the PSI decoder. *****************************************************************************/ void dvbpsi_GatherPMTSections(dvbpsi_decoder_t* p_decoder, dvbpsi_psi_section_t* p_section) { dvbpsi_pmt_decoder_t* p_pmt_decoder = (dvbpsi_pmt_decoder_t*)p_decoder->p_private_decoder; int b_append = 1; int b_reinit = 0; unsigned int i; DVBPSI_DEBUG_ARG("PMT decoder", "Table version %2d, " "i_extension %5d, " "section %3d up to %3d, " "current %1d", p_section->i_version, p_section->i_extension, p_section->i_number, p_section->i_last_number, p_section->b_current_next); if(p_section->i_table_id != 0x02) { /* Invalid table_id value */ DVBPSI_ERROR_ARG("PMT decoder", "invalid section (table_id == 0x%02x)", p_section->i_table_id); b_append = 0; } if(b_append && !p_section->b_syntax_indicator) { /* Invalid section_syntax_indicator */ DVBPSI_ERROR("PMT decoder", "invalid section (section_syntax_indicator == 0)"); b_append = 0; } /* Now if b_append is true then we have a valid PMT section */ if(b_append && (p_pmt_decoder->i_program_number != p_section->i_extension)) { /* Invalid program_number */ #if 0 DVBPSI_ERROR("PMT decoder", \ "'program_number' don't match"); #endif b_append = 0; } if(b_append) { /* TS discontinuity check */ if(p_decoder->b_discontinuity) { b_reinit = 1; p_decoder->b_discontinuity = 0; } else { /* Perform some few sanity checks */ if(p_pmt_decoder->p_building_pmt) { if(p_pmt_decoder->p_building_pmt->i_version != p_section->i_version) { /* version_number */ DVBPSI_ERROR("PMT decoder", "'version_number' differs" " whereas no discontinuity has occured"); b_reinit = 1; } else if(p_pmt_decoder->i_last_section_number != p_section->i_last_number) { /* last_section_number */ DVBPSI_ERROR("PMT decoder", "'last_section_number' differs" " whereas no discontinuity has occured"); b_reinit = 1; } } else { if( (p_pmt_decoder->b_current_valid) && (p_pmt_decoder->current_pmt.i_version == p_section->i_version)) { /* Signal a new PMT if the previous one wasn't active */ if( (!p_pmt_decoder->current_pmt.b_current_next) && (p_section->b_current_next)) { dvbpsi_pmt_t* p_pmt = (dvbpsi_pmt_t*)ObjectCreateType(dvbpsi_pmt_t); p_pmt_decoder->current_pmt.b_current_next = 1; *p_pmt = p_pmt_decoder->current_pmt; p_pmt_decoder->pf_callback(p_pmt_decoder->p_cb_data, p_pmt); } /* Don't decode since this version is already decoded */ b_append = 0; } } } } /* Reinit the decoder if wanted */ if(b_reinit) { /* Force redecoding */ p_pmt_decoder->b_current_valid = 0; /* Free structures */ if(p_pmt_decoder->p_building_pmt) { ObjectRefDec(p_pmt_decoder->p_building_pmt); p_pmt_decoder->p_building_pmt = NULL; } /* Clear the section array */ for(i = 0; i <= 255; i++) { if(p_pmt_decoder->ap_sections[i] != NULL) { dvbpsi_ReleasePSISections(p_decoder, p_pmt_decoder->ap_sections[i]); p_pmt_decoder->ap_sections[i] = NULL; } } } /* Append the section to the list if wanted */ if(b_append) { int b_complete; /* Initialize the structures if it's the first section received */ if(!p_pmt_decoder->p_building_pmt) { dvbpsi_NewPMT(p_pmt_decoder->p_building_pmt, p_pmt_decoder->i_program_number, p_section->i_version, p_section->b_current_next, ((uint16_t)(p_section->p_payload_start[0] & 0x1f) << 8) | p_section->p_payload_start[1]); p_pmt_decoder->i_last_section_number = p_section->i_last_number; } /* Fill the section array */ if(p_pmt_decoder->ap_sections[p_section->i_number] != NULL) { DVBPSI_DEBUG_ARG("PMT decoder", "overwrite section number %d", p_section->i_number); dvbpsi_ReleasePSISections(p_decoder, p_pmt_decoder->ap_sections[p_section->i_number]); } p_pmt_decoder->ap_sections[p_section->i_number] = p_section; /* Check if we have all the sections */ b_complete = 0; for(i = 0; i <= p_pmt_decoder->i_last_section_number; i++) { if(!p_pmt_decoder->ap_sections[i]) break; if(i == p_pmt_decoder->i_last_section_number) b_complete = 1; } if(b_complete) { /* Save the current information */ p_pmt_decoder->current_pmt = *p_pmt_decoder->p_building_pmt; p_pmt_decoder->b_current_valid = 1; /* Chain the sections */ if(p_pmt_decoder->i_last_section_number) { for(i = 0; i <= p_pmt_decoder->i_last_section_number - 1; i++) p_pmt_decoder->ap_sections[i]->p_next = p_pmt_decoder->ap_sections[i + 1]; } /* Decode the sections */ dvbpsi_DecodePMTSections(p_pmt_decoder->p_building_pmt, p_pmt_decoder->ap_sections[0]); /* Delete the sections */ dvbpsi_ReleasePSISections(p_decoder, p_pmt_decoder->ap_sections[0]); /* signal the new PMT */ p_pmt_decoder->pf_callback(p_pmt_decoder->p_cb_data, p_pmt_decoder->p_building_pmt); /* Reinitialize the structures */ p_pmt_decoder->p_building_pmt = NULL; for(i = 0; i <= p_pmt_decoder->i_last_section_number; i++) p_pmt_decoder->ap_sections[i] = NULL; } } else { dvbpsi_ReleasePSISections(p_decoder, p_section); } } /***************************************************************************** * dvbpsi_DecodePMTSections ***************************************************************************** * PMT decoder. *****************************************************************************/ void dvbpsi_DecodePMTSections(dvbpsi_pmt_t* p_pmt, dvbpsi_psi_section_t* p_section) { uint8_t* p_byte, * p_end; while(p_section) { /* - PMT descriptors */ p_byte = p_section->p_payload_start + 4; p_end = p_byte + ( ((uint16_t)(p_section->p_payload_start[2] & 0x0f) << 8) | p_section->p_payload_start[3]); while(p_byte + 2 <= p_end) { uint8_t i_tag = p_byte[0]; uint8_t i_length = p_byte[1]; if(i_length + 2 <= p_end - p_byte) dvbpsi_PMTAddDescriptor(p_pmt, i_tag, i_length, p_byte + 2); p_byte += 2 + i_length; } /* - ESs */ for(p_byte = p_end; p_byte + 5 <= p_section->p_payload_end;) { uint8_t i_type = p_byte[0]; uint16_t i_pid = ((uint16_t)(p_byte[1] & 0x1f) << 8) | p_byte[2]; uint16_t i_length = ((uint16_t)(p_byte[3] & 0x0f) << 8) | p_byte[4]; dvbpsi_pmt_es_t* p_es = dvbpsi_PMTAddES(p_pmt, i_type, i_pid); /* - ES descriptors */ p_byte += 5; p_end = p_byte + i_length; if( p_end > p_section->p_payload_end ) { p_end = p_section->p_payload_end; } while(p_byte + 2 <= p_end) { uint8_t i_tag = p_byte[0]; uint8_t i_length = p_byte[1]; if(i_length + 2 <= p_end - p_byte) dvbpsi_PMTESAddDescriptor(p_es, i_tag, i_length, p_byte + 2); p_byte += 2 + i_length; } } p_section = p_section->p_next; } } /***************************************************************************** * dvbpsi_GenPMTSections ***************************************************************************** * Generate PMT sections based on the dvbpsi_pmt_t structure. *****************************************************************************/ dvbpsi_psi_section_t* dvbpsi_GenPMTSections(dvbpsi_pmt_t* p_pmt) { dvbpsi_psi_section_t* p_result = dvbpsi_NewPSISection(1024); dvbpsi_psi_section_t* p_current = p_result; dvbpsi_psi_section_t* p_prev; dvbpsi_descriptor_t* p_descriptor = p_pmt->p_first_descriptor; dvbpsi_pmt_es_t* p_es = p_pmt->p_first_es; uint16_t i_info_length; p_current->i_table_id = 0x02; p_current->b_syntax_indicator = 1; p_current->b_private_indicator = 0; p_current->i_length = 13; /* header + CRC_32 */ p_current->i_extension = p_pmt->i_program_number; p_current->i_version = p_pmt->i_version; p_current->b_current_next = p_pmt->b_current_next; p_current->i_number = 0; p_current->p_payload_end += 12; /* just after the header */ p_current->p_payload_start = p_current->p_data + 8; /* PCR_PID */ p_current->p_data[8] = (p_pmt->i_pcr_pid >> 8) | 0xe0; p_current->p_data[9] = p_pmt->i_pcr_pid; /* PMT descriptors */ while(p_descriptor != NULL) { /* New section if needed */ /* written_data_length + descriptor_length + 2 > 1024 - CRC_32_length */ if( (p_current->p_payload_end - p_current->p_data) + p_descriptor->i_length > 1018) { /* program_info_length */ i_info_length = (p_current->p_payload_end - p_current->p_data) - 12; p_current->p_data[10] = (i_info_length >> 8) | 0xf0; p_current->p_data[11] = i_info_length; p_prev = p_current; p_current = dvbpsi_NewPSISection(1024); p_prev->p_next = p_current; p_current->i_table_id = 0x02; p_current->b_syntax_indicator = 1; p_current->b_private_indicator = 0; p_current->i_length = 13; /* header + CRC_32 */ p_current->i_extension = p_pmt->i_program_number; p_current->i_version = p_pmt->i_version; p_current->b_current_next = p_pmt->b_current_next; p_current->i_number = p_prev->i_number + 1; p_current->p_payload_end += 12; /* just after the header */ p_current->p_payload_start = p_current->p_data + 8; /* PCR_PID */ p_current->p_data[8] = (p_pmt->i_pcr_pid >> 8) | 0xe0; p_current->p_data[9] = p_pmt->i_pcr_pid; } /* p_payload_end is where the descriptor begins */ p_current->p_payload_end[0] = p_descriptor->i_tag; p_current->p_payload_end[1] = p_descriptor->i_length; memcpy(p_current->p_payload_end + 2, p_descriptor->p_data, p_descriptor->i_length); /* Increase length by descriptor_length + 2 */ p_current->p_payload_end += p_descriptor->i_length + 2; p_current->i_length += p_descriptor->i_length + 2; p_descriptor = p_descriptor->p_next; } /* program_info_length */ i_info_length = (p_current->p_payload_end - p_current->p_data) - 12; p_current->p_data[10] = (i_info_length >> 8) | 0xf0; p_current->p_data[11] = i_info_length; /* PMT ESs */ while(p_es != NULL) { uint8_t* p_es_start = p_current->p_payload_end; uint16_t i_es_length = 5; /* Can the current section carry all the descriptors ? */ p_descriptor = p_es->p_first_descriptor; while( (p_descriptor != NULL) && ((p_es_start - p_current->p_data) + i_es_length <= 1020)) { i_es_length += p_descriptor->i_length + 2; p_descriptor = p_descriptor->p_next; } /* If _no_ and the current section isn't empty and an empty section may carry one more descriptor then create a new section */ if( (p_descriptor != NULL) && (p_es_start - p_current->p_data != 12) && (i_es_length <= 1008)) { /* will put more descriptors in an empty section */ DVBPSI_DEBUG("PMT generator", "create a new section to carry more ES descriptors"); p_prev = p_current; p_current = dvbpsi_NewPSISection(1024); p_prev->p_next = p_current; p_current->i_table_id = 0x02; p_current->b_syntax_indicator = 1; p_current->b_private_indicator = 0; p_current->i_length = 13; /* header + CRC_32 */ p_current->i_extension = p_pmt->i_program_number; p_current->i_version = p_pmt->i_version; p_current->b_current_next = p_pmt->b_current_next; p_current->i_number = p_prev->i_number + 1; p_current->p_payload_end += 12; /* just after the header */ p_current->p_payload_start = p_current->p_data + 8; /* PCR_PID */ p_current->p_data[8] = (p_pmt->i_pcr_pid >> 8) | 0xe0; p_current->p_data[9] = p_pmt->i_pcr_pid; /* program_info_length */ i_info_length = 0; p_current->p_data[10] = 0xf0; p_current->p_data[11] = 0x00; p_es_start = p_current->p_payload_end; } /* p_es_start is where the ES begins */ p_es_start[0] = p_es->i_type; p_es_start[1] = (p_es->i_pid >> 8) | 0xe0; p_es_start[2] = p_es->i_pid; /* Increase the length by 5 */ p_current->p_payload_end += 5; p_current->i_length += 5; /* ES descriptors */ p_descriptor = p_es->p_first_descriptor; while( (p_descriptor != NULL) && ( (p_current->p_payload_end - p_current->p_data) + p_descriptor->i_length <= 1018)) { /* p_payload_end is where the descriptor begins */ p_current->p_payload_end[0] = p_descriptor->i_tag; p_current->p_payload_end[1] = p_descriptor->i_length; memcpy(p_current->p_payload_end + 2, p_descriptor->p_data, p_descriptor->i_length); /* Increase length by descriptor_length + 2 */ p_current->p_payload_end += p_descriptor->i_length + 2; p_current->i_length += p_descriptor->i_length + 2; p_descriptor = p_descriptor->p_next; } if(p_descriptor != NULL) DVBPSI_ERROR("PMT generator", "unable to carry all the ES descriptors"); /* ES_info_length */ i_es_length = p_current->p_payload_end - p_es_start - 5; p_es_start[3] = (i_es_length >> 8) | 0xf0; p_es_start[4] = i_es_length; p_es = p_es->p_next; } /* Finalization */ p_prev = p_result; while(p_prev != NULL) { p_prev->i_last_number = p_current->i_number; dvbpsi_BuildPSISection(p_prev); p_prev = p_prev->p_next; } return p_result; } dvbstreamer-2.1.0/src/dvbpsi/tables/pmt_private.h000066400000000000000000000055271217721213100220710ustar00rootroot00000000000000/***************************************************************************** * pmt_private.h: private PMT structures *---------------------------------------------------------------------------- * (c)2001-2002 VideoLAN * $Id: pmt_private.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Arnaud de Bossoreille de Ribou * * 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. * *---------------------------------------------------------------------------- * *****************************************************************************/ #ifndef _DVBPSI_PMT_PRIVATE_H_ #define _DVBPSI_PMT_PRIVATE_H_ /***************************************************************************** * dvbpsi_pmt_decoder_t ***************************************************************************** * PMT decoder. *****************************************************************************/ typedef struct dvbpsi_pmt_decoder_s { uint16_t i_program_number; dvbpsi_pmt_callback pf_callback; void * p_cb_data; dvbpsi_pmt_t current_pmt; dvbpsi_pmt_t * p_building_pmt; int b_current_valid; uint8_t i_last_section_number; dvbpsi_psi_section_t * ap_sections [256]; } dvbpsi_pmt_decoder_t; /***************************************************************************** * dvbpsi_GatherPMTSections ***************************************************************************** * Callback for the PSI decoder. *****************************************************************************/ void dvbpsi_GatherPMTSections(dvbpsi_decoder_t* p_decoder, dvbpsi_psi_section_t* p_section); /***************************************************************************** * dvbpsi_DecodePMTSections ***************************************************************************** * PMT decoder. *****************************************************************************/ void dvbpsi_DecodePMTSections(dvbpsi_pmt_t* p_pmt, dvbpsi_psi_section_t* p_section); #else #error "Multiple inclusions of pmt_private.h" #endif dvbstreamer-2.1.0/src/dvbpsi/tables/sdt.c000066400000000000000000000512001217721213100203110ustar00rootroot00000000000000/***************************************************************************** * sdt.c: SDT decoder/generator *---------------------------------------------------------------------------- * (c)2001-2002 VideoLAN * $Id: sdt.c 110 2005-06-04 12:52:02Z gbazin $ * * Authors: Johan Bilien * * 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. * *---------------------------------------------------------------------------- * *****************************************************************************/ #include "config.h" #include #include #include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #include "dvbpsi.h" #include "../dvbpsi_private.h" #include "psi.h" #include "descriptor.h" #include "demux.h" #include "sdt.h" #include "sdt_private.h" #include "objects.h" /***************************************************************************** * dvbpsi_AttachSDT ***************************************************************************** * Initialize a SDT subtable decoder. *****************************************************************************/ int dvbpsi_AttachSDT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, uint16_t i_extension, dvbpsi_sdt_callback pf_callback, void* p_cb_data) { dvbpsi_demux_t* p_demux = (dvbpsi_demux_t*)p_psi_decoder->p_private_decoder; dvbpsi_demux_subdec_t* p_subdec; dvbpsi_sdt_decoder_t* p_sdt_decoder; unsigned int i; if(dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension)) { DVBPSI_ERROR_ARG("SDT decoder", "Already a decoder for (table_id == 0x%02x," "extension == 0x%02x)", i_table_id, i_extension); return 1; } p_subdec = (dvbpsi_demux_subdec_t*)malloc(sizeof(dvbpsi_demux_subdec_t)); if(p_subdec == NULL) { return 1; } p_sdt_decoder = (dvbpsi_sdt_decoder_t*)malloc(sizeof(dvbpsi_sdt_decoder_t)); if(p_sdt_decoder == NULL) { free(p_subdec); return 1; } /* subtable decoder configuration */ p_subdec->pf_callback = &dvbpsi_GatherSDTSections; p_subdec->p_cb_data = p_sdt_decoder; p_subdec->i_id = (uint32_t)i_table_id << 16 | (uint32_t)i_extension; p_subdec->pf_detach = dvbpsi_DetachSDT; /* Attach the subtable decoder to the demux */ p_subdec->p_next = p_demux->p_first_subdec; p_demux->p_first_subdec = p_subdec; /* SDT decoder information */ p_sdt_decoder->pf_callback = pf_callback; p_sdt_decoder->p_cb_data = p_cb_data; /* SDT decoder initial state */ p_sdt_decoder->b_current_valid = 0; p_sdt_decoder->p_building_sdt = NULL; for(i = 0; i <= 255; i++) p_sdt_decoder->ap_sections[i] = NULL; return 0; } /***************************************************************************** * dvbpsi_DetachSDT ***************************************************************************** * Close a SDT decoder. *****************************************************************************/ void dvbpsi_DetachSDT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_t i_extension) { dvbpsi_demux_subdec_t* p_subdec; dvbpsi_demux_subdec_t** pp_prev_subdec; dvbpsi_sdt_decoder_t* p_sdt_decoder; unsigned int i; p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension); if(p_demux == NULL) { DVBPSI_ERROR_ARG("SDT Decoder", "No such SDT decoder (table_id == 0x%02x," "extension == 0x%02x)", i_table_id, i_extension); return; } p_sdt_decoder = (dvbpsi_sdt_decoder_t*)p_subdec->p_cb_data; if (p_sdt_decoder->p_building_sdt) { ObjectRefDec(p_sdt_decoder->p_building_sdt); } for(i = 0; i <= 255; i++) { if(p_sdt_decoder->ap_sections[i]) dvbpsi_DeletePSISections(p_sdt_decoder->ap_sections[i]); } free(p_subdec->p_cb_data); pp_prev_subdec = &p_demux->p_first_subdec; while(*pp_prev_subdec != p_subdec) pp_prev_subdec = &(*pp_prev_subdec)->p_next; *pp_prev_subdec = p_subdec->p_next; free(p_subdec); } /***************************************************************************** * dvbpsi_InitSDT ***************************************************************************** * Initialize a pre-allocated dvbpsi_sdt_t structure. *****************************************************************************/ void dvbpsi_InitSDT(dvbpsi_sdt_t* p_sdt, uint16_t i_ts_id, uint8_t i_version, int b_current_next, uint16_t i_network_id) { p_sdt->i_ts_id = i_ts_id; p_sdt->i_version = i_version; p_sdt->b_current_next = b_current_next; p_sdt->i_network_id = i_network_id; p_sdt->p_first_service = NULL; } /***************************************************************************** * dvbpsi_EmptySDT ***************************************************************************** * Clean a dvbpsi_sdt_t structure. *****************************************************************************/ void dvbpsi_EmptySDT(dvbpsi_sdt_t* p_sdt) { dvbpsi_sdt_service_t* p_service = p_sdt->p_first_service; while(p_service != NULL) { dvbpsi_sdt_service_t* p_tmp = p_service->p_next; dvbpsi_DeleteDescriptors(p_service->p_first_descriptor); free(p_service); p_service = p_tmp; } p_sdt->p_first_service = NULL; } /***************************************************************************** * dvbpsi_SDTAddService ***************************************************************************** * Add a service description at the end of the SDT. *****************************************************************************/ dvbpsi_sdt_service_t *dvbpsi_SDTAddService(dvbpsi_sdt_t* p_sdt, uint16_t i_service_id, int b_eit_schedule, int b_eit_present, uint8_t i_running_status, int b_free_ca) { dvbpsi_sdt_service_t * p_service = (dvbpsi_sdt_service_t*)malloc(sizeof(dvbpsi_sdt_service_t)); if(p_service) { p_service->i_service_id = i_service_id; p_service->b_eit_schedule = b_eit_schedule; p_service->b_eit_present = b_eit_present; p_service->i_running_status = i_running_status; p_service->b_free_ca = b_free_ca; p_service->p_next = NULL; p_service->p_first_descriptor = NULL; if(p_sdt->p_first_service == NULL) { p_sdt->p_first_service = p_service; } else { dvbpsi_sdt_service_t * p_last_service = p_sdt->p_first_service; while(p_last_service->p_next != NULL) p_last_service = p_last_service->p_next; p_last_service->p_next = p_service; } } return p_service; } /***************************************************************************** * dvbpsi_SDTServiceAddDescriptor ***************************************************************************** * Add a descriptor in the SDT service description. *****************************************************************************/ dvbpsi_descriptor_t *dvbpsi_SDTServiceAddDescriptor( dvbpsi_sdt_service_t *p_service, uint8_t i_tag, uint8_t i_length, uint8_t *p_data) { dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(i_tag, i_length, p_data); if(p_descriptor) { if(p_service->p_first_descriptor == NULL) { p_service->p_first_descriptor = p_descriptor; } else { dvbpsi_descriptor_t * p_last_descriptor = p_service->p_first_descriptor; while(p_last_descriptor->p_next != NULL) p_last_descriptor = p_last_descriptor->p_next; p_last_descriptor->p_next = p_descriptor; } } return p_descriptor; } /***************************************************************************** * dvbpsi_GatherSDTSections ***************************************************************************** * Callback for the subtable demultiplexor. *****************************************************************************/ void dvbpsi_GatherSDTSections(dvbpsi_decoder_t * p_psi_decoder, void * p_private_decoder, dvbpsi_psi_section_t * p_section) { dvbpsi_sdt_decoder_t * p_sdt_decoder = (dvbpsi_sdt_decoder_t*)p_private_decoder; int b_append = 1; int b_reinit = 0; unsigned int i; DVBPSI_DEBUG_ARG("SDT decoder", "Table version %2d, " "i_table_id %2d, " "i_extension %5d, " "section %3d up to %3d, " "current %1d", p_section->i_version, p_section->i_table_id, p_section->i_extension, p_section->i_number, p_section->i_last_number, p_section->b_current_next); if(!p_section->b_syntax_indicator) { /* Invalid section_syntax_indicator */ DVBPSI_ERROR("SDT decoder", "invalid section (section_syntax_indicator == 0)"); b_append = 0; } /* Now if b_append is true then we have a valid SDT section */ if(b_append) { /* TS discontinuity check */ if(p_psi_decoder->b_discontinuity) { b_reinit = 1; p_psi_decoder->b_discontinuity = 0; } else { /* Perform a few sanity checks */ if(p_sdt_decoder->p_building_sdt) { if(p_sdt_decoder->p_building_sdt->i_ts_id != p_section->i_extension) { /* transport_stream_id */ DVBPSI_ERROR("SDT decoder", "'transport_stream_id' differs" " whereas no TS discontinuity has occured"); b_reinit = 1; } else if(p_sdt_decoder->p_building_sdt->i_version != p_section->i_version) { /* version_number */ DVBPSI_ERROR("SDT decoder", "'version_number' differs" " whereas no discontinuity has occured"); b_reinit = 1; } else if(p_sdt_decoder->i_last_section_number != p_section->i_last_number) { /* last_section_number */ DVBPSI_ERROR("SDT decoder", "'last_section_number' differs" " whereas no discontinuity has occured"); b_reinit = 1; } } else { if( (p_sdt_decoder->b_current_valid) && (p_sdt_decoder->current_sdt.i_version == p_section->i_version)) { /* Signal a new SDT if the previous one wasn't active */ if( (!p_sdt_decoder->current_sdt.b_current_next) && (p_section->b_current_next)) { dvbpsi_sdt_t * p_sdt = (dvbpsi_sdt_t*)ObjectCreateType(dvbpsi_sdt_t); p_sdt_decoder->current_sdt.b_current_next = 1; *p_sdt = p_sdt_decoder->current_sdt; p_sdt_decoder->pf_callback(p_sdt_decoder->p_cb_data, p_sdt); } /* Don't decode since this version is already decoded */ b_append = 0; } } } } /* Reinit the decoder if wanted */ if(b_reinit) { /* Force redecoding */ p_sdt_decoder->b_current_valid = 0; /* Free structures */ if(p_sdt_decoder->p_building_sdt) { ObjectRefDec(p_sdt_decoder->p_building_sdt); p_sdt_decoder->p_building_sdt = NULL; } /* Clear the section array */ for(i = 0; i <= 255; i++) { if(p_sdt_decoder->ap_sections[i] != NULL) { dvbpsi_ReleasePSISections(p_psi_decoder, p_sdt_decoder->ap_sections[i]); p_sdt_decoder->ap_sections[i] = NULL; } } } /* Append the section to the list if wanted */ if(b_append) { int b_complete; /* Initialize the structures if it's the first section received */ if(!p_sdt_decoder->p_building_sdt) { dvbpsi_NewSDT(p_sdt_decoder->p_building_sdt, p_section->i_extension, p_section->i_version, p_section->b_current_next, ((uint16_t)(p_section->p_payload_start[0]) << 8) | p_section->p_payload_start[1]); p_sdt_decoder->i_last_section_number = p_section->i_last_number; } /* Fill the section array */ if(p_sdt_decoder->ap_sections[p_section->i_number] != NULL) { DVBPSI_DEBUG_ARG("SDT decoder", "overwrite section number %d", p_section->i_number); dvbpsi_ReleasePSISections(p_psi_decoder, p_sdt_decoder->ap_sections[p_section->i_number]); } p_sdt_decoder->ap_sections[p_section->i_number] = p_section; /* Check if we have all the sections */ b_complete = 0; for(i = 0; i <= p_sdt_decoder->i_last_section_number; i++) { if(!p_sdt_decoder->ap_sections[i]) break; if(i == p_sdt_decoder->i_last_section_number) b_complete = 1; } if(b_complete) { /* Save the current information */ p_sdt_decoder->current_sdt = *p_sdt_decoder->p_building_sdt; p_sdt_decoder->b_current_valid = 1; /* Chain the sections */ if(p_sdt_decoder->i_last_section_number) { for(i = 0; i <= p_sdt_decoder->i_last_section_number - 1; i++) p_sdt_decoder->ap_sections[i]->p_next = p_sdt_decoder->ap_sections[i + 1]; } /* Decode the sections */ dvbpsi_DecodeSDTSections(p_sdt_decoder->p_building_sdt, p_sdt_decoder->ap_sections[0]); /* Delete the sections */ dvbpsi_ReleasePSISections(p_psi_decoder,p_sdt_decoder->ap_sections[0]); /* signal the new SDT */ p_sdt_decoder->pf_callback(p_sdt_decoder->p_cb_data, p_sdt_decoder->p_building_sdt); /* Reinitialize the structures */ p_sdt_decoder->p_building_sdt = NULL; for(i = 0; i <= p_sdt_decoder->i_last_section_number; i++) p_sdt_decoder->ap_sections[i] = NULL; } } else { dvbpsi_ReleasePSISections(p_psi_decoder,p_section); } } /***************************************************************************** * dvbpsi_DecodeSDTSection ***************************************************************************** * SDT decoder. *****************************************************************************/ void dvbpsi_DecodeSDTSections(dvbpsi_sdt_t* p_sdt, dvbpsi_psi_section_t* p_section) { uint8_t *p_byte, *p_end; while(p_section) { for(p_byte = p_section->p_payload_start + 3; p_byte + 4 < p_section->p_payload_end;) { uint16_t i_service_id = ((uint16_t)(p_byte[0]) << 8) | p_byte[1]; int b_eit_schedule = (int)((p_byte[2] & 0x2) >> 1); int b_eit_present = (int)((p_byte[2]) & 0x1); uint8_t i_running_status = (uint8_t)(p_byte[3]) >> 5; int b_free_ca = (int)((p_byte[3] & 0x10) >> 4); uint16_t i_length = ((uint16_t)(p_byte[3] & 0xf) <<8) | p_byte[4]; dvbpsi_sdt_service_t* p_service = dvbpsi_SDTAddService(p_sdt, i_service_id, b_eit_schedule, b_eit_present, i_running_status, b_free_ca); /* Service descriptors */ p_byte += 5; p_end = p_byte + i_length; if( p_end > p_section->p_payload_end ) break; while(p_byte + 2 <= p_end) { uint8_t i_tag = p_byte[0]; uint8_t i_length = p_byte[1]; if(i_length + 2 <= p_end - p_byte) dvbpsi_SDTServiceAddDescriptor(p_service, i_tag, i_length, p_byte + 2); p_byte += 2 + i_length; } } p_section = p_section->p_next; } } /***************************************************************************** * dvbpsi_GenSDTSections ***************************************************************************** * Generate SDT sections based on the dvbpsi_sdt_t structure. *****************************************************************************/ dvbpsi_psi_section_t *dvbpsi_GenSDTSections(dvbpsi_sdt_t* p_sdt) { dvbpsi_psi_section_t * p_result = dvbpsi_NewPSISection(1024); dvbpsi_psi_section_t * p_current = p_result; dvbpsi_psi_section_t * p_prev; dvbpsi_sdt_service_t * p_service = p_sdt->p_first_service; p_current->i_table_id = 0x42; p_current->b_syntax_indicator = 1; p_current->b_private_indicator = 1; p_current->i_length = 12; /* header + CRC_32 */ p_current->i_extension = p_sdt->i_ts_id; p_current->i_version = p_sdt->i_version; p_current->b_current_next = p_sdt->b_current_next; p_current->i_number = 0; p_current->p_payload_end += 11; /* just after the header */ p_current->p_payload_start = p_current->p_data + 8; /* Original Network ID */ p_current->p_data[8] = (p_sdt->i_network_id >> 8) ; p_current->p_data[9] = p_sdt->i_network_id; p_current->p_data[10] = 0xff; /* SDT service */ while(p_service != NULL) { uint8_t * p_service_start = p_current->p_payload_end; uint16_t i_service_length = 5; dvbpsi_descriptor_t * p_descriptor = p_service->p_first_descriptor; while ( (p_descriptor != NULL)&& ((p_service_start - p_current->p_data) + i_service_length <= 1020) ) { i_service_length += p_descriptor->i_length + 2; p_descriptor = p_descriptor->p_next; } if ( (p_descriptor != NULL) && (p_service_start - p_current->p_data != 11) && (i_service_length <= 1009) ) { /* will put more descriptors in an empty section */ DVBPSI_DEBUG("SDT generator","create a new section to carry more Service descriptors"); p_prev = p_current; p_current = dvbpsi_NewPSISection(1024); p_prev->p_next = p_current; p_current->i_table_id = 0x42; p_current->b_syntax_indicator = 1; p_current->b_private_indicator = 1; p_current->i_length = 12; /* header + CRC_32 */ p_current->i_extension = p_sdt->i_ts_id;; p_current->i_version = p_sdt->i_version; p_current->b_current_next = p_sdt->b_current_next; p_current->i_number = p_prev->i_number + 1; p_current->p_payload_end += 11; /* just after the header */ p_current->p_payload_start = p_current->p_data + 8; /* Original Network ID */ p_current->p_data[8] = (p_sdt->i_network_id >> 8) ; p_current->p_data[9] = p_sdt->i_network_id; p_current->p_data[10] = 0xff; p_service_start = p_current->p_payload_end; } p_service_start[0] = (p_service->i_service_id >>8); p_service_start[1] = (p_service->i_service_id ); p_service_start[2] = 0xfc | (p_service-> b_eit_schedule ? 0x2 : 0x0) | (p_service->b_eit_present ? 0x01 : 0x00); p_service_start[3] = ((p_service->i_running_status & 0x07) << 5 ) | ((p_service->b_free_ca & 0x1) << 4); /* Increase the length by 5 */ p_current->p_payload_end += 5; p_current->i_length += 5; /* ES descriptors */ p_descriptor = p_service->p_first_descriptor; while ( (p_descriptor != NULL) && ( (p_current->p_payload_end - p_current->p_data) + p_descriptor->i_length <= 1018) ) { /* p_payload_end is where the descriptor begins */ p_current->p_payload_end[0] = p_descriptor->i_tag; p_current->p_payload_end[1] = p_descriptor->i_length; memcpy(p_current->p_payload_end + 2, p_descriptor->p_data, p_descriptor->i_length); /* Increase length by descriptor_length + 2 */ p_current->p_payload_end += p_descriptor->i_length + 2; p_current->i_length += p_descriptor->i_length + 2; p_descriptor = p_descriptor->p_next; } if(p_descriptor != NULL) DVBPSI_ERROR("SDT generator", "unable to carry all the descriptors"); /* ES_info_length */ i_service_length = p_current->p_payload_end - p_service_start - 5; p_service_start[3] |= ((i_service_length >> 8) & 0x0f); p_service_start[4] = i_service_length; p_service = p_service->p_next; } /* Finalization */ p_prev = p_result; while(p_prev != NULL) { p_prev->i_last_number = p_current->i_number; dvbpsi_BuildPSISection(p_prev); p_prev = p_prev->p_next; } return p_result; } dvbstreamer-2.1.0/src/dvbpsi/tables/sdt_private.h000066400000000000000000000054771217721213100220670ustar00rootroot00000000000000/***************************************************************************** * sdt_private.h: private SDT structures *---------------------------------------------------------------------------- * (c)2001-2002 VideoLAN * $Id: sdt_private.h 88 2004-02-24 14:31:18Z sam $ * * Authors: Johan Bilien * * 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. * *---------------------------------------------------------------------------- * *****************************************************************************/ #ifndef _DVBPSI_SDT_PRIVATE_H_ #define _DVBPSI_SDT_PRIVATE_H_ /***************************************************************************** * dvbpsi_sdt_decoder_t ***************************************************************************** * SDT decoder. *****************************************************************************/ typedef struct dvbpsi_sdt_decoder_s { dvbpsi_sdt_callback pf_callback; void * p_cb_data; dvbpsi_sdt_t current_sdt; dvbpsi_sdt_t * p_building_sdt; int b_current_valid; uint8_t i_last_section_number; dvbpsi_psi_section_t * ap_sections [256]; } dvbpsi_sdt_decoder_t; /***************************************************************************** * dvbpsi_GatherSDTSections ***************************************************************************** * Callback for the PSI decoder. *****************************************************************************/ void dvbpsi_GatherSDTSections(dvbpsi_decoder_t* p_psi_decoder, void* p_private_decoder, dvbpsi_psi_section_t* p_section); /***************************************************************************** * dvbpsi_DecodeSDTSection ***************************************************************************** * SDT decoder. *****************************************************************************/ void dvbpsi_DecodeSDTSections(dvbpsi_sdt_t* p_sdt, dvbpsi_psi_section_t* p_section); #else #error "Multiple inclusions of sdt_private.h" #endif dvbstreamer-2.1.0/src/dvbpsi/tables/tdttot.c000066400000000000000000000222161217721213100210460ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA tdttot.c Decode Time Date Table and Time Offset Table. */ #include #include #include #include #include #include #include #include "dvbpsi/datetime.h" #include "dvbpsi/tdttot.h" #include "logging.h" #include "objects.h" /***************************************************************************** * dvbpsi_tdt_tot_decoder_s ***************************************************************************** * TDT/TOT decoder. *****************************************************************************/ typedef struct dvbpsi_tdt_tot_decoder_s { dvbpsi_tdt_tot_callback pf_callback; void * p_cb_data; } dvbpsi_tdt_tot_decoder_t; /***************************************************************************** * dvbpsi_GatherPATSections ***************************************************************************** * Callback for the PSI decoder. *****************************************************************************/ void dvbpsi_GatherTDTTOTSections(dvbpsi_decoder_t* p_decoder, dvbpsi_psi_section_t* p_section); /***************************************************************************** * dvbpsi_DecodeTDTSection ***************************************************************************** * TDT decoder. *****************************************************************************/ void dvbpsi_DecodeTDTSection(dvbpsi_tdt_tot_t* p_tdt, dvbpsi_psi_section_t* p_section); /***************************************************************************** * dvbpsi_DecodeTOTSection ***************************************************************************** * TOT decoder. *****************************************************************************/ void dvbpsi_DecodeTOTSection(dvbpsi_tdt_tot_t* p_tot, dvbpsi_psi_section_t* p_section); /***************************************************************************** * dvbpsi_AttachTDTTOT ***************************************************************************** * Initialize a TDT/TOT decoder and return a handle on it. *****************************************************************************/ dvbpsi_handle dvbpsi_AttachTDTTOT(dvbpsi_tdt_tot_callback pf_callback, void* p_cb_data) { dvbpsi_handle h_dvbpsi = (dvbpsi_decoder_t*)malloc(sizeof(dvbpsi_decoder_t)); dvbpsi_tdt_tot_decoder_t* p_tdt_tot_decoder; if(h_dvbpsi == NULL) return NULL; p_tdt_tot_decoder = (dvbpsi_tdt_tot_decoder_t*)malloc(sizeof(dvbpsi_tdt_tot_decoder_t)); if(p_tdt_tot_decoder == NULL) { free(h_dvbpsi); return NULL; } /* PSI decoder configuration */ h_dvbpsi->pf_callback = &dvbpsi_GatherTDTTOTSections; h_dvbpsi->p_private_decoder = p_tdt_tot_decoder; h_dvbpsi->i_section_max_size = 1024; /* PSI decoder initial state */ h_dvbpsi->i_continuity_counter = 31; h_dvbpsi->b_discontinuity = 1; h_dvbpsi->p_current_section = NULL; h_dvbpsi->p_free_sections = NULL; /* TDT/TOT decoder information */ p_tdt_tot_decoder->pf_callback = pf_callback; p_tdt_tot_decoder->p_cb_data = p_cb_data; return h_dvbpsi; } /***************************************************************************** * dvbpsi_DetachTDTTOT ***************************************************************************** * Close a TDT/TOT decoder. The handle isn't valid any more. *****************************************************************************/ void dvbpsi_DetachTDTTOT(dvbpsi_handle h_dvbpsi) { free(h_dvbpsi->p_private_decoder); if(h_dvbpsi->p_current_section) dvbpsi_DeletePSISections(h_dvbpsi->p_current_section); if(h_dvbpsi->p_free_sections) dvbpsi_DeletePSISections(h_dvbpsi->p_free_sections); free(h_dvbpsi); } /***************************************************************************** * dvbpsi_InitTDTTOT ***************************************************************************** * Initialize a pre-allocated dvbpsi_tdt_tot_t structure. *****************************************************************************/ void dvbpsi_InitTDTTOT(dvbpsi_tdt_tot_t *p_tdt_tot, struct tm *p_date_time) { if (p_date_time != NULL) { p_tdt_tot->t_date_time = *p_date_time; } else { memset(&p_tdt_tot->t_date_time, 0, sizeof(p_tdt_tot->t_date_time)); } p_tdt_tot->p_first_descriptor = NULL; } /***************************************************************************** * dvbpsi_EmptyTDTTOT ***************************************************************************** * Clean a dvbpsi_tdt_tot_t structure. *****************************************************************************/ void dvbpsi_EmptyTDTTOT(dvbpsi_tdt_tot_t *p_tdt_tot) { dvbpsi_DeleteDescriptors(p_tdt_tot->p_first_descriptor); } /***************************************************************************** * dvbpsi_GatherPATSections ***************************************************************************** * Callback for the PSI decoder. *****************************************************************************/ void dvbpsi_GatherTDTTOTSections(dvbpsi_decoder_t* p_decoder, dvbpsi_psi_section_t* p_section) { dvbpsi_tdt_tot_decoder_t* p_tdt_tot_decoder = (dvbpsi_tdt_tot_decoder_t*)p_decoder->p_private_decoder; if(p_section->i_table_id == 0x70) { dvbpsi_tdt_tot_t* p_tdt; dvbpsi_NewTDTTOT(p_tdt, NULL); dvbpsi_DecodeTDTSection(p_tdt, p_section); p_tdt_tot_decoder->pf_callback(p_tdt_tot_decoder->p_cb_data, p_tdt); } if(p_section->i_table_id == 0x73) { dvbpsi_tdt_tot_t* p_tot; dvbpsi_NewTDTTOT(p_tot, NULL); dvbpsi_DecodeTOTSection(p_tot, p_section); p_tdt_tot_decoder->pf_callback(p_tdt_tot_decoder->p_cb_data, p_tot); } dvbpsi_ReleasePSISections(p_decoder, p_section); } /***************************************************************************** * dvbpsi_DecodeTDTSection ***************************************************************************** * TDT decoder. *****************************************************************************/ void dvbpsi_DecodeTDTSection(dvbpsi_tdt_tot_t* p_tdt, dvbpsi_psi_section_t* p_section) { // Decode UTC Time dvbpsi_DecodeMJDUTC(p_section->p_payload_start, &p_tdt->t_date_time); p_tdt->p_first_descriptor = NULL; } /***************************************************************************** * dvbpsi_DecodeTOTSection ***************************************************************************** * TOT decoder. *****************************************************************************/ void dvbpsi_DecodeTOTSection(dvbpsi_tdt_tot_t* p_tot, dvbpsi_psi_section_t* p_section) { uint16_t i_length; uint8_t *p_byte, *p_end; // Decode UTC Time p_byte = p_section->p_payload_start; dvbpsi_DecodeMJDUTC(p_byte, &p_tot->t_date_time); p_byte += 5; i_length = ((p_byte[0] & 0xf) << 8) | p_byte[1]; p_byte += 2; p_end = p_byte + i_length; if( p_end > p_section->p_payload_end ) return; while(p_byte + 2 <= p_end) { uint8_t i_tag = p_byte[0]; uint8_t i_desc_length = p_byte[1]; if(i_desc_length + 2 <= p_end - p_byte) dvbpsi_TOTAddDescriptor(p_tot, i_tag, i_desc_length, p_byte + 2); p_byte += 2 + i_desc_length; } } /***************************************************************************** * dvbpsi_TOTAddDescriptor ***************************************************************************** * Add a descriptor in the TOT description. *****************************************************************************/ dvbpsi_descriptor_t *dvbpsi_TOTAddDescriptor( dvbpsi_tdt_tot_t *p_tot, uint8_t i_tag, uint8_t i_length, uint8_t *p_data) { dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(i_tag, i_length, p_data); if(p_descriptor) { if(p_tot->p_first_descriptor == NULL) { p_tot->p_first_descriptor = p_descriptor; } else { dvbpsi_descriptor_t * p_last_descriptor = p_tot->p_first_descriptor; while(p_last_descriptor->p_next != NULL) p_last_descriptor = p_last_descriptor->p_next; p_last_descriptor->p_next = p_descriptor; } } return p_descriptor; } dvbstreamer-2.1.0/src/epgchannel.c000066400000000000000000000135051217721213100170700ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA epgchannel.c Used to send EPG information to interested parties. */ #include #include #include #include #include #include #include #include #include "main.h" #include "types.h" #include "list.h" #include "logging.h" #include "objects.h" #include "messageq.h" #include "epgchannel.h" /******************************************************************************* * Defines * *******************************************************************************/ #define CHECK_LISTENERS() \ do{ \ int count;\ pthread_mutex_lock(&EPGChannelMutex); \ count = ListCount(EPGChannelListeners); \ pthread_mutex_unlock(&EPGChannelMutex);\ if (count == 0) \ {\ LogModule(LOG_DIARRHEA, EPGCHANNEL, "Not creating message, no listeners!");\ return 0;\ }\ }while(0) /******************************************************************************* * Prototypes * *******************************************************************************/ static void EPGChannelMessageDestructor(void *ptr); static void EPGChannelSendMessage(EPGChannelMessage_t *msg); /******************************************************************************* * Global variables * *******************************************************************************/ static pthread_mutex_t EPGChannelMutex = PTHREAD_MUTEX_INITIALIZER; static const char EPGCHANNEL[] = "EPGDChannel"; static List_t *EPGChannelListeners; /******************************************************************************* * Global functions * *******************************************************************************/ int EPGChannelInit(void) { ObjectRegisterTypeDestructor(EPGChannelMessage_t, EPGChannelMessageDestructor); EPGChannelListeners = ListCreate(); return 0; } int EPGChannelDeInit() { ListFree(EPGChannelListeners, (void(*)(void*))MessageQDestroy); return 0; } int EPGChannelRegisterListener(MessageQ_t msgQ) { pthread_mutex_lock(&EPGChannelMutex); ListAdd(EPGChannelListeners, msgQ); pthread_mutex_unlock(&EPGChannelMutex); return 0; } int EPGChannelUnregisterListener(MessageQ_t msgQ) { pthread_mutex_lock(&EPGChannelMutex); ListRemove(EPGChannelListeners, msgQ); pthread_mutex_unlock(&EPGChannelMutex); return 0; } int EPGChannelNewEvent(EPGEventRef_t *eventRef, struct tm *startTime, struct tm *endTime, bool ca) { EPGChannelMessage_t *msg; CHECK_LISTENERS(); msg = ObjectCreateType(EPGChannelMessage_t); msg->type = EPGChannelMessageType_Event; msg->eventRef = *eventRef; msg->data.event.startTime = *startTime; msg->data.event.endTime = *endTime; msg->data.event.ca = ca; EPGChannelSendMessage(msg); return 0; } int EPGChannelNewRating(EPGEventRef_t *eventRef, char *system, char *rating) { EPGChannelMessage_t *msg; CHECK_LISTENERS(); msg = ObjectCreateType(EPGChannelMessage_t); msg->type = EPGChannelMessageType_Rating; msg->eventRef = *eventRef; msg->data.rating.system = strdup(system); msg->data.rating.rating = strdup(rating); EPGChannelSendMessage(msg); return 0; } int EPGChannelNewDetail(EPGEventRef_t *eventRef, char *lang, char * name, char *value) { EPGChannelMessage_t *msg; EPGEventDetail_t *eventDetail; CHECK_LISTENERS(); msg = ObjectCreateType(EPGChannelMessage_t); msg->type = EPGChannelMessageType_Detail; msg->eventRef = *eventRef; memcpy(msg->data.detail.lang, lang, sizeof(eventDetail->lang)); msg->data.detail.name = strdup(name); msg->data.detail.value = strdup(value); EPGChannelSendMessage(msg); return 0; } /******************************************************************************* * Local Functions * *******************************************************************************/ static void EPGChannelSendMessage(EPGChannelMessage_t *msg) { ListIterator_t iterator; pthread_mutex_lock(&EPGChannelMutex); for (ListIterator_Init(iterator, EPGChannelListeners); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { MessageQ_t msgQ = (MessageQ_t)ListIterator_Current(iterator); MessageQSend(msgQ, msg); } pthread_mutex_unlock(&EPGChannelMutex); ObjectRefDec(msg); } static void EPGChannelMessageDestructor(void *ptr) { EPGChannelMessage_t *msg = ptr; switch(msg->type) { case EPGChannelMessageType_Event: break; case EPGChannelMessageType_Detail: free(msg->data.detail.name); free(msg->data.detail.value); break; case EPGChannelMessageType_Rating: free(msg->data.rating.system); free(msg->data.rating.rating); break; } } dvbstreamer-2.1.0/src/epgtypes.c000066400000000000000000000045271217721213100166300ustar00rootroot00000000000000/* Copyright (C) 2009 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA epgtypes.c Defines the types used by the EPG. */ #include #include #include #include #include #include #include #include #include "main.h" #include "types.h" #include "epgtypes.h" /******************************************************************************* * Prototypes * *******************************************************************************/ static void EPGEventRatingDestructor(void *arg); static void EPGEventDetailDestructor(void *arg); /******************************************************************************* * Global functions * *******************************************************************************/ int EPGTypesInit(void) { ObjectRegisterType(EPGEvent_t); ObjectRegisterTypeDestructor(EPGEventRating_t, EPGEventRatingDestructor); ObjectRegisterTypeDestructor(EPGEventDetail_t, EPGEventDetailDestructor); return 0; } int EPGTypesDeInit() { return 0; } /******************************************************************************* * Local Functions * *******************************************************************************/ static void EPGEventRatingDestructor(void *arg) { EPGEventRating_t *rating = arg; free(rating->rating); free(rating->system); } static void EPGEventDetailDestructor(void *arg) { EPGEventDetail_t *detail = arg; free(detail->name); free(detail->value); } dvbstreamer-2.1.0/src/events.c000077500000000000000000000346161217721213100163010ustar00rootroot00000000000000/* Copyright (C) 2008 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA event.c Event Management functions, for creating and firing events to listeners. */ #include "config.h" #include #include #include #include #include "objects.h" #include "list.h" #include "events.h" #include "logging.h" #include "yamlutils.h" /******************************************************************************* * Defines * *******************************************************************************/ /******************************************************************************* * Typedefs * *******************************************************************************/ struct EventSource_s { char *name; List_t *events; List_t *listeners; }; struct Event_s { EventSource_t source; char *name; List_t *listeners; EventToString_t toString; }; typedef struct EventListenerDetails_s { EventListener_t callback; void *arg; }EventListenerDetails_t; /******************************************************************************* * Prototypes * *******************************************************************************/ static void EventSourceFree(EventSource_t source); static void EventFree(Event_t event); static void EventListenerDetailsFree(EventListenerDetails_t *details); static void RegisterEventListener(List_t *listenerList, EventListener_t callback, void *arg); static void UnRegisterEventListener(List_t *listenerList, EventListener_t callback, void *arg); static void FireEventListeners(List_t *listenerList, Event_t event, void *payload); static int EventUnregisteredToString(yaml_document_t *document, Event_t event, void *payload); /******************************************************************************* * Global variables * *******************************************************************************/ static List_t *sourcesList; static List_t *globalListenersList; static pthread_mutex_t eventsMutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; static char EVENTS[]="Events"; static EventSource_t eventsSource; static Event_t eventUnregistered; /******************************************************************************* * Global functions * *******************************************************************************/ int EventsInit(void) { /* Register types used by this module */ ObjectRegisterType(EventListenerDetails_t); ObjectRegisterClass("Event_t", sizeof(struct Event_s), NULL); ObjectRegisterClass("EventSource_t", sizeof(struct EventSource_s), NULL); /* Create the sources and global event listeners list */ sourcesList = ListCreate(); globalListenersList = ListCreate(); eventsSource = EventsRegisterSource(EVENTS); eventUnregistered = EventsRegisterEvent(eventsSource, "Unregistered", EventUnregisteredToString); return 0; } int EventsDeInit(void) { eventsSource = NULL; eventUnregistered = NULL; ListFree(sourcesList, (void(*)(void*)) EventSourceFree); ListFree(globalListenersList, (void(*)(void*)) EventListenerDetailsFree); return 0; } void EventsRegisterListenerByName(const char *event, EventListener_t listener, void *arg) { if (event[0] == 0) { EventsRegisterListener(listener, arg); } else if (strchr(event, '.') == NULL) { EventSource_t src = EventsFindSource(event); if (src) { EventsRegisterSourceListener(src, listener, arg); } else { LogModule(LOG_INFO, EVENTS, "Failed to find event source %s", event); } } else { Event_t evt = EventsFindEvent(event); if (evt) { EventsRegisterEventListener(evt, listener, arg); } else { LogModule(LOG_INFO, EVENTS, "Failed to find event %s", event); } } } void EventsUnregisterListenerByName(const char *event, EventListener_t listener, void *arg) { if (event[0] == 0) { EventsUnregisterListener(listener, arg); } else if (strchr(event, '.') == NULL) { EventSource_t src = EventsFindSource(event); if (src) { EventsUnregisterSourceListener(src, listener, arg); } else { LogModule(LOG_INFO, EVENTS, "Failed to find event source %s", event); } } else { Event_t evt = EventsFindEvent(event); if (evt) { EventsUnregisterEventListener(evt, listener, arg); } else { LogModule(LOG_INFO, EVENTS, "Failed to find event %s", event); } } } void EventsRegisterListener(EventListener_t listener, void *arg) { pthread_mutex_lock(&eventsMutex); RegisterEventListener(globalListenersList, listener, arg); pthread_mutex_unlock(&eventsMutex); } void EventsUnregisterListener(EventListener_t listener, void *arg) { pthread_mutex_lock(&eventsMutex); UnRegisterEventListener(globalListenersList, listener, arg); pthread_mutex_unlock(&eventsMutex); } EventSource_t EventsRegisterSource(char *name) { EventSource_t result = NULL; pthread_mutex_lock(&eventsMutex); result = ObjectCreateType(EventSource_t); if (result) { result->name = strdup(name); result->listeners = ListCreate(); result->events = ListCreate(); ListAdd(sourcesList, result); LogModule(LOG_DEBUG, EVENTS, "New event source registered (%s)\n", name); } pthread_mutex_unlock(&eventsMutex); return result; } void EventsUnregisterSource(EventSource_t source) { pthread_mutex_lock(&eventsMutex); LogModule(LOG_DEBUG, EVENTS, "Event source unregistered (%s)\n", source->name); ListRemove(sourcesList, source); EventSourceFree(source); pthread_mutex_unlock(&eventsMutex); } EventSource_t EventsFindSource(const char *name) { ListIterator_t iterator; EventSource_t result = NULL; pthread_mutex_lock(&eventsMutex); for (ListIterator_Init(iterator, sourcesList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { EventSource_t source = (EventSource_t)ListIterator_Current(iterator); if (strcmp(source->name, name) == 0) { result = source; break; } } pthread_mutex_unlock(&eventsMutex); return result; } void EventsRegisterSourceListener(EventSource_t source, EventListener_t listener, void *arg) { if (source) { pthread_mutex_lock(&eventsMutex); RegisterEventListener(source->listeners, listener, arg); pthread_mutex_unlock(&eventsMutex); } } void EventsUnregisterSourceListener(EventSource_t source, EventListener_t listener, void *arg) { if (source) { pthread_mutex_lock(&eventsMutex); UnRegisterEventListener(source->listeners, listener, arg); pthread_mutex_unlock(&eventsMutex); } } Event_t EventsRegisterEvent(EventSource_t source, char *name, EventToString_t toString) { Event_t result = NULL; pthread_mutex_lock(&eventsMutex); result = ObjectCreateType(Event_t); if (result) { result->name = strdup(name); result->source = source; result->toString = toString; result->listeners = ListCreate(); ListAdd(source->events, result); LogModule(LOG_DEBUG, EVENTS, "New event registered (%s.%s)\n", source->name, name); } pthread_mutex_unlock(&eventsMutex); return result; } void EventsUnregisterEvent(Event_t event) { pthread_mutex_lock(&eventsMutex); LogModule(LOG_DEBUG, EVENTS, "Event unregistered (%s.%s)\n", event->source->name, event->name); ListRemove(event->source->events, event); EventFree(event); pthread_mutex_unlock(&eventsMutex); } Event_t EventsFindEvent(const char *name) { char *sourceName; int sourceNameLen; EventSource_t source = NULL; Event_t result = NULL; pthread_mutex_lock(&eventsMutex); for (sourceNameLen = 0; name[sourceNameLen];sourceNameLen ++) { if (name[sourceNameLen] == '.') { break; } } sourceName = ObjectAlloc(sourceNameLen + 1); if (sourceName) { memcpy(sourceName, name, sourceNameLen); sourceName[sourceNameLen] = 0; source = EventsFindSource(sourceName); if (source) { ListIterator_t iterator; for (ListIterator_Init(iterator, source->events); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { Event_t event = (Event_t)ListIterator_Current(iterator); if (strcmp(event->name, &name[sourceNameLen + 1]) == 0) { result = event; break; } } } ObjectFree(sourceName); } pthread_mutex_unlock(&eventsMutex); return result; } void EventsFireEventListeners(Event_t event, void *payload) { pthread_mutex_lock(&eventsMutex); LogModule(LOG_DEBUGV, EVENTS, "Firing event %s.%s\n", event->source->name, event->name); FireEventListeners(globalListenersList, event, payload); FireEventListeners(event->source->listeners, event, payload); FireEventListeners(event->listeners, event, payload); pthread_mutex_unlock(&eventsMutex); } void EventsRegisterEventListener(Event_t event, EventListener_t listener, void *arg) { if (event) { pthread_mutex_lock(&eventsMutex); RegisterEventListener(event->listeners, listener, arg); pthread_mutex_unlock(&eventsMutex); } } void EventsUnregisterEventListener(Event_t event, EventListener_t listener, void *arg) { if (event) { pthread_mutex_lock(&eventsMutex); UnRegisterEventListener(event->listeners, listener, arg); pthread_mutex_unlock(&eventsMutex); } } char *EventsEventName(Event_t event) { char *result = NULL; asprintf(&result, "%s.%s", event->source->name, event->name); return result; } char *EventsEventToString(Event_t event, void *payload) { char *result = NULL; int ret; yaml_document_t document; ret = asprintf(&result, "%s.%s", event->source->name, event->name); if (ret == -1) { LogModule(LOG_INFO, EVENTS, "Failed to allocate memory for event description string."); return NULL; } yaml_document_initialize(&document, NULL, NULL, NULL, 0, 0); yaml_document_add_mapping(&document, (yaml_char_t*)YAML_MAP_TAG, YAML_ANY_MAPPING_STYLE); YamlUtils_MappingAdd(&document, 1, "Name", result); free(result); if (event->toString) { int valueId = event->toString(&document, event, payload); if (valueId) { char *key = "Details"; int keyId = yaml_document_add_scalar(&document, (yaml_char_t*)YAML_STR_TAG, (yaml_char_t*)key, strlen(key), YAML_ANY_SCALAR_STYLE); yaml_document_append_mapping_pair(&document, 1, keyId, valueId); } } YamlUtils_DocumentToString(&document, TRUE, &result); return result; } /******************************************************************************* * Local Functions * *******************************************************************************/ static void EventSourceFree(EventSource_t source) { free(source->name); ListFree(source->listeners,(void (*)(void*))EventListenerDetailsFree); ListFree(source->events, (void (*)(void*))EventFree); ObjectRefDec(source); } static void EventFree(Event_t event) { if ((eventUnregistered) && (event != eventUnregistered)) { EventsFireEventListeners(eventUnregistered, event); } free(event->name); ListFree(event->listeners,(void (*)(void*))EventListenerDetailsFree); ObjectRefDec(event); } static void EventListenerDetailsFree(EventListenerDetails_t *details) { ObjectRefDec(details); } static void RegisterEventListener(List_t *listenerList, EventListener_t callback, void *arg) { EventListenerDetails_t *details = ObjectCreateType(EventListenerDetails_t); if (details) { details->callback = callback; details->arg = arg; ListAdd(listenerList, details); } } static void UnRegisterEventListener(List_t *listenerList, EventListener_t callback, void *arg) { ListIterator_t iterator; for (ListIterator_Init(iterator, listenerList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { EventListenerDetails_t *details = (EventListenerDetails_t*)ListIterator_Current(iterator); if ((details->callback == callback) && (details->arg == arg)) { ListRemoveCurrent(&iterator); ObjectRefDec(details); break; } } } static void FireEventListeners(List_t *listenerList, Event_t event, void *payload) { ListIterator_t iterator; for (ListIterator_Init(iterator, listenerList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { EventListenerDetails_t *details = (EventListenerDetails_t*)ListIterator_Current(iterator); details->callback(details->arg, event, payload); } } static int EventUnregisteredToString(yaml_document_t *document, Event_t event, void *payload) { Event_t unregEvent = payload; int node; char *eventName; asprintf(&eventName, "%s.%s", unregEvent->source->name, unregEvent->name); node = yaml_document_add_scalar(document, (yaml_char_t*)YAML_DEFAULT_SCALAR_TAG, (yaml_char_t*)eventName, strlen(eventName), YAML_ANY_SCALAR_STYLE); free(eventName); return node; } dvbstreamer-2.1.0/src/fileadapter.c000077500000000000000000000552561217721213100172600ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA fileadapter.c Opens/Closes and setups dvb adapter for use in the rest of the application. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "types.h" #include "dvbadapter.h" #include "logging.h" #include "objects.h" #include "events.h" #include "properties.h" #include "main.h" #include "dispatchers.h" #include "yamlutils.h" /******************************************************************************* * Defines * *******************************************************************************/ #define MONITOR_CMD_EXIT 0 #define MONITOR_CMD_RETUNING 1 #define MONITOR_CMD_FE_ACTIVATE 2 #define MONITOR_CMD_FE_DEACTIVATE 3 /******************************************************************************* * Typedefs * *******************************************************************************/ struct DVBAdapter_s { int adapter; /**< The adapter number ie /dev/dvb/adapter<#adapter> */ DVBSupportedDeliverySys_t *supportedDelSystems; int frontEndFd; /**< File descriptor for the frontend device */ bool frontEndLocked; /**< Whether the frontend is currently locked onto a signal. */ DVBDeliverySystem_e currentDeliverySystem; char *frontEndParams; __u32 frontEndRequestedFreq; /**< The frequency that the application requested, may be different from one used (ie DVB-S intermediate frequency) */ LNBInfo_t lnbInfo; /**< LNB Information for DVB-S/S2 receivers */ bool hardwareRestricted; /**< Whether the adapter can only stream a portion of the transport stream */ int maxFilters; /**< Maximum number of available filters. */ DVBAdapterPIDFilter_t filters[DVB_MAX_PID_FILTERS];/**< File descriptor for the demux device.*/ int dvrFd; /**< File descriptor for the dvr device */ int cmdRecvFd; /**< File descriptor for monitor task to recieve commands */ int cmdSendFd; /**< File descriptor to send commands to monitor task. */ ev_io commandWatcher; int sendFd; ev_timer sendTimer; } ; /******************************************************************************* * Prototypes * *******************************************************************************/ static int DVBOpenAdapterFile(DVBAdapter_t *adapter); static int DVBOpenStreamFile(int adapter, uint32_t freq, int *fd, unsigned long *rate); static void DVBFrontEndMonitorSend(DVBAdapter_t *adapter, char cmd); static void DVBCommandCallback(struct ev_loop *loop, ev_io *w, int revents); static void DVBFilterPackets(struct ev_loop *loop, ev_timer *w, int revents); static int DVBEventToString(yaml_document_t *document, Event_t event, void *payload); static int DVBPropertyActiveGet(void *userArg, PropertyValue_t *value); static int DVBPropertyActiveSet(void *userArg, PropertyValue_t *value); static int DVBPropertyDeliverySystemsGet(void *userArg, PropertyValue_t *value); static uint32_t ConvertStringToUInt32(const char *str, uint32_t defaultValue); static uint32_t ConvertYamlNode(yaml_document_t * document, const char *key, uint32_t (*convert)(const char *, uint32_t), uint32_t defaultValue); /******************************************************************************* * Global variables * *******************************************************************************/ static const char FILEADAPTER[] = "FileAdapter"; static const char propertyParent[] = "adapter"; static const char adapterName[] = "File Adapter"; static EventSource_t dvbSource = NULL; static Event_t lockedEvent; static Event_t unlockedEvent; static Event_t tuningFailedEvent; static Event_t feActiveEvent; static Event_t feIdleEvent; /******************************************************************************* * Global functions * *******************************************************************************/ DVBAdapter_t *DVBInit(int adapter, bool hwRestricted, bool forceISDB) { DVBAdapter_t *result = NULL; int monitorFds[2]; int sendRecvFds[2]; struct ev_loop *inputLoop; if (dvbSource == NULL) { dvbSource = EventsRegisterSource("DVBAdapter"); lockedEvent = EventsRegisterEvent(dvbSource, "Locked", DVBEventToString); unlockedEvent = EventsRegisterEvent(dvbSource, "Unlocked", DVBEventToString); tuningFailedEvent = EventsRegisterEvent(dvbSource, "TuneFailed", DVBEventToString); feActiveEvent = EventsRegisterEvent(dvbSource, "FrontEndActive", DVBEventToString); feIdleEvent = EventsRegisterEvent(dvbSource, "FrontEndIdle", DVBEventToString); } ObjectRegisterType(DVBAdapter_t); ObjectRegisterCollection(TOSTRING(DVBSupportedDeliverySys_t), sizeof(DVBDeliverySystem_e), NULL); result = (DVBAdapter_t*)ObjectCreateType(DVBAdapter_t); if (result) { int i; /* Set all filters to be unallocated */ for (i = 0; i < DVB_MAX_PID_FILTERS; i ++) { result->filters[i].demuxFd = -1; } result->frontEndFd = -1; result->dvrFd = -1; result->adapter = adapter; if (DVBOpenAdapterFile(result) == -1) { LogModule(LOG_ERROR, FILEADAPTER, "Failed to processs adapter file!\n"); DVBDispose(result); return NULL; } if (pipe(sendRecvFds) == -1) { LogModule(LOG_ERROR, FILEADAPTER, "Failed to create pipe : %s\n", strerror(errno)); DVBDispose(result); return NULL; } if (fcntl(sendRecvFds[0], F_SETFL, O_NONBLOCK)) { LogModule(LOG_INFO, FILEADAPTER, "Failed to set O_NONBLOCK on receiver (%s)\n",strerror(errno)); } if (fcntl(sendRecvFds[1], F_SETFL, O_NONBLOCK)) { LogModule(LOG_INFO, FILEADAPTER, "Failed to set O_NONBLOCK on sender (%s)\n",strerror(errno)); } result->dvrFd = sendRecvFds[0]; result->sendFd = sendRecvFds[1]; if (pipe(monitorFds) == -1) { LogModule(LOG_ERROR, FILEADAPTER, "Failed to create pipe : %s\n", strerror(errno)); DVBDispose(result); return NULL; } result->cmdRecvFd= monitorFds[0]; result->cmdSendFd = monitorFds[1]; result->hardwareRestricted = hwRestricted; if (hwRestricted) { result->maxFilters = 16; } else { result->maxFilters = 256; } inputLoop = DispatchersGetInput(); ev_io_init(&result->commandWatcher, DVBCommandCallback, result->cmdRecvFd, EV_READ); ev_timer_init(&result->sendTimer, DVBFilterPackets, 0.1, 0.1); result->sendTimer.data = result; result->commandWatcher.data = result; ev_timer_start(inputLoop, &result->sendTimer); ev_io_start(inputLoop, &result->commandWatcher); /* Add properties */ PropertiesAddSimpleProperty(propertyParent, "number", "The number of the adapter being used", PropertyType_Int, &result->adapter, SIMPLEPROPERTY_R); PropertiesAddSimpleProperty(propertyParent, "name", "Hardware driver name", PropertyType_String, (void*)adapterName, SIMPLEPROPERTY_R); PropertiesAddSimpleProperty(propertyParent, "hwrestricted", "Whether the hardware is not capable of supplying the entire TS.", PropertyType_Boolean, &result->hardwareRestricted, SIMPLEPROPERTY_R); PropertiesAddProperty(propertyParent, "systems", "The broadcast systems the frontend is capable of receiving", PropertyType_String, result, DVBPropertyDeliverySystemsGet, NULL); PropertiesAddProperty(propertyParent, "active","Whether the frontend is currently in use.", PropertyType_Boolean, result,DVBPropertyActiveGet,DVBPropertyActiveSet); } return result; } void DVBDispose(DVBAdapter_t *adapter) { struct ev_loop *inputLoop = DispatchersGetInput(); if (adapter->dvrFd > -1) { LogModule(LOG_DEBUGV, FILEADAPTER, "Closing DVR file descriptor\n"); close(adapter->dvrFd); close(adapter->sendFd); } LogModule(LOG_DEBUGV, FILEADAPTER, "Closing Demux file descriptors\n"); DVBDemuxReleaseAllFilters(adapter); if (adapter->frontEndFd > -1) { LogModule(LOG_DEBUGV, FILEADAPTER, "Closing Frontend file descriptor\n"); close(adapter->frontEndFd); LogModule(LOG_DEBUGV, FILEADAPTER, "Closed Frontend file descriptor\n"); adapter->frontEndFd = -1; } ev_io_stop(inputLoop, &adapter->commandWatcher); ev_timer_stop(inputLoop, &adapter->sendTimer); close(adapter->cmdRecvFd); close(adapter->cmdSendFd); PropertiesRemoveAllProperties(propertyParent); ObjectRefDec(adapter->supportedDelSystems); ObjectRefDec(adapter); } DVBSupportedDeliverySys_t *DVBFrontEndGetDeliverySystems(DVBAdapter_t *adapter) { return adapter->supportedDelSystems; } bool DVBFrontEndDeliverySystemSupported(DVBAdapter_t * adapter,DVBDeliverySystem_e system) { int i; for (i = 0; i < adapter->supportedDelSystems->nrofSystems; i ++) { if (adapter->supportedDelSystems->systems[i] == system) { return TRUE; } } return FALSE; } int DVBFrontEndTune(DVBAdapter_t *adapter, DVBDeliverySystem_e system, char *params) { yaml_document_t document; memset(&document, 0, sizeof(document)); if (YamlUtils_Parse(params, &document)) { adapter->currentDeliverySystem = system; adapter->frontEndParams = strdup(params); adapter->frontEndRequestedFreq = ConvertYamlNode(&document, "Frequency", ConvertStringToUInt32, 0); yaml_document_delete(&document); DVBFrontEndMonitorSend(adapter, MONITOR_CMD_RETUNING); } return 0; } char* DVBFrontEndParametersGet(DVBAdapter_t *adapter, DVBDeliverySystem_e *system) { *system = adapter->currentDeliverySystem; return strdup(adapter->frontEndParams); } bool DVBFrontEndParameterSupported(DVBAdapter_t *adapter,DVBDeliverySystem_e system, char *param, char *value) { return TRUE; } void DVBFrontEndLNBInfoSet(DVBAdapter_t *adapter, LNBInfo_t *info) { adapter->lnbInfo = *info; } void DVBFrontEndLNBInfoGet(DVBAdapter_t *adapter, LNBInfo_t *lnbInfo) { *lnbInfo = adapter->lnbInfo; } bool DVBFrontEndIsLocked(DVBAdapter_t *adapter) { return adapter->frontEndLocked; } int DVBFrontEndStatus(DVBAdapter_t *adapter, DVBFrontEndStatus_e *status, unsigned int *ber, unsigned int *strength, unsigned int *snr, unsigned int *ucblock) { if (status) { if (adapter->frontEndLocked) { *status = FESTATUS_HAS_LOCK | FESTATUS_HAS_CARRIER | FESTATUS_HAS_SIGNAL | FESTATUS_HAS_VITERBI; } else { *status = 0; } } if (ber) { if(adapter->frontEndLocked) { *ber = 0; } else { *ber = 0xffffffff; } } if (strength) { if(adapter->frontEndLocked) { *strength = 0xffff; } else { *strength = 0; } } if (snr) { if(adapter->frontEndLocked) { *snr = 0xffff; } else { *snr = 0; } } if (ucblock) { *ucblock = 0; } return 0; } int DVBFrontEndSetActive(DVBAdapter_t *adapter, bool active) { if (active && (adapter->frontEndFd == -1)) { /* Signal monitor thread */ DVBFrontEndMonitorSend(adapter, MONITOR_CMD_FE_ACTIVATE); /* Fire frontend active event */ EventsFireEventListeners(feActiveEvent, adapter); return 0; } if (!active && (adapter->frontEndFd != -1)) { /* Signal monitor thread */ DVBFrontEndMonitorSend(adapter, MONITOR_CMD_FE_DEACTIVATE); /* Fire frontend idle event */ EventsFireEventListeners(feIdleEvent, adapter); } return 0; } int DVBDemuxGetMaxFilters(DVBAdapter_t *adapter) { return adapter->maxFilters; } int DVBDemuxSetBufferSize(DVBAdapter_t *adapter, unsigned long size) { return 0; } bool DVBDemuxIsHardwareRestricted(DVBAdapter_t *adapter) { return adapter->hardwareRestricted; } int DVBDemuxAllocateFilter(DVBAdapter_t *adapter, uint16_t pid) { int result = -1; int i; int idxToUse = -1; for (i = 0; i < adapter->maxFilters; i ++) { if (adapter->filters[i].demuxFd == -1) { idxToUse = i; } else { if (adapter->filters[i].pid == pid) { /* Already streaming this PID */ idxToUse = -1; result = 0; break; } } } if (idxToUse != -1) { LogModule(LOG_DEBUG, FILEADAPTER, "Allocated filter for pid 0x%x\n", pid); adapter->filters[idxToUse].demuxFd = 1; adapter->filters[idxToUse].pid = pid; result = 0; } return result; } int DVBDemuxReleaseFilter(DVBAdapter_t *adapter, uint16_t pid) { int result = -1; if (adapter->hardwareRestricted || (pid == 8192)) { int i; for (i = 0; i < adapter->maxFilters; i ++) { if ((adapter->filters[i].demuxFd != -1) && (adapter->filters[i].pid == pid)) { LogModule(LOG_DEBUG, FILEADAPTER, "Releasing filter for pid 0x%x\n", pid); adapter->filters[i].demuxFd = -1; result = 0; break; } } } return result; } int DVBDemuxReleaseAllFilters(DVBAdapter_t *adapter) { int result = -1; int i; LogModule(LOG_DEBUG, FILEADAPTER, "Releasing all filters\n"); for (i = 0; i < adapter->maxFilters; i ++) { if (adapter->filters[i].demuxFd != -1) { close(adapter->filters[i].demuxFd); adapter->filters[i].demuxFd = -1; result = 0; } } return result; } int DVBDVRGetFD(DVBAdapter_t *adapter) { return adapter->dvrFd; } static void DVBFrontEndMonitorSend(DVBAdapter_t *adapter, char cmd) { if (write(adapter->cmdSendFd, &cmd, 1) != 1) { LogModule(LOG_ERROR, FILEADAPTER, "Failed to write to monitor pipe!"); } } static void DVBCommandCallback(struct ev_loop *loop, ev_io *w, int revents) { DVBAdapter_t *adapter = w->data; unsigned long rate; char cmd; ev_io_start(loop, w); if (read(adapter->cmdRecvFd, &cmd, 1) == 1) { switch (cmd) { case MONITOR_CMD_EXIT: /* Exit */ break; case MONITOR_CMD_RETUNING: adapter->frontEndLocked = FALSE; EventsFireEventListeners(unlockedEvent, adapter); case MONITOR_CMD_FE_ACTIVATE: /* Open description file for freq */ if (DVBOpenStreamFile(adapter->adapter, adapter->frontEndRequestedFreq, &adapter->frontEndFd, &rate) == 0) { adapter->frontEndLocked = TRUE; EventsFireEventListeners(lockedEvent, adapter); ev_timer_set(&adapter->sendTimer, 0.1,0.1); ev_timer_start(loop, &adapter->sendTimer); } else { ev_timer_stop(loop, &adapter->sendTimer); } break; case MONITOR_CMD_FE_DEACTIVATE: close(adapter->frontEndFd); adapter->frontEndFd = -1; ev_timer_stop(loop, &adapter->sendTimer); break; } } } static void DVBFilterPackets(struct ev_loop *loop, ev_timer *w, int revents) { DVBAdapter_t *adapter = w->data; char buffer[188 * 10]; if (adapter->frontEndFd != -1) { int r = read(adapter->frontEndFd, buffer, sizeof(buffer)); if (r <= 0) { lseek(adapter->frontEndFd, 0, SEEK_SET); } else { int i, p; for (i = 0; i < r/188; i ++) { TSPacket_t *packet = (TSPacket_t*)&buffer[i * 188]; uint16_t pid = TSPACKET_GETPID(*packet); for (p = 0; p < adapter->maxFilters; p ++) { if (((adapter->filters[p].pid == 8192) || (pid == adapter->filters[p].pid)) && (adapter->filters[p].demuxFd != -1)) { if (write(adapter->sendFd, packet, 188) == -1) { /* do nothing */ } break; } } } } } } static int DVBOpenAdapterFile(DVBAdapter_t *adapter) { int result = -1; char *nl; FILE *fp; char path[PATH_MAX]; char type[10]; adapter->supportedDelSystems = (DVBSupportedDeliverySys_t*)ObjectCollectionCreate(TOSTRING(DVBSupportedDeliverySys_t),1); sprintf(path, "%s/file%d/info", DataDirectory, adapter->adapter); fp = fopen(path, "r"); if (fp) { if (fgets(type, sizeof(type) -1, fp) != NULL) { nl = strchr(type, '\n'); if (nl) { *nl = 0; } nl = strchr(type, '\r'); if (nl) { *nl = 0; } if (strcasecmp(type, "DVB-T") == 0) { adapter->supportedDelSystems->systems[0] = DELSYS_DVBT; result = 0; } if (strcasecmp(type, "DVB-S") == 0) { adapter->supportedDelSystems->systems[0] = DELSYS_DVBS; result = 0; } if (strcasecmp(type, "DVB-C") == 0) { adapter->supportedDelSystems->systems[0] = DELSYS_DVBC; result = 0; } if (strcasecmp(type, "ATSC") == 0) { adapter->supportedDelSystems->systems[0] = DELSYS_ATSC; result = 0; } if (strcasecmp(type, "ISDB-T") == 0) { adapter->supportedDelSystems->systems[0] = DELSYS_ISDBT; result = 0; } } } return result; } static int DVBOpenStreamFile(int adapter, uint32_t freq, int *fd, unsigned long *rate) { int result = -1; FILE *fp; char *nl; char path[PATH_MAX]; unsigned long temp_rate = 0; sprintf(path, "%s/file%d/%u", DataDirectory, adapter, freq); fp = fopen(path, "r"); if (fp) { if (fgets(path, sizeof(path) - 1, fp) != NULL) { nl = strchr(path, '\n'); if (nl) { *nl = 0; } nl = strchr(path, '\r'); if (nl) { *nl = 0; } LogModule(LOG_DEBUG, FILEADAPTER, "Opening stream file %s", path); if (fscanf(fp, "%lu", &temp_rate) == 1) { LogModule(LOG_DEBUG, FILEADAPTER, "Stream rate : %lu bps (UNUSED)", temp_rate); if (temp_rate > 0) { *fd = open(path, O_RDONLY); if (*fd != -1) { *rate = temp_rate; result = 0; } } } } } return result; } static int DVBEventToString(yaml_document_t *document, Event_t event, void *payload) { DVBAdapter_t *adapter = payload; char adapterStr[4]; int mappingId = yaml_document_add_mapping(document, (yaml_char_t*)YAML_MAP_TAG, YAML_ANY_MAPPING_STYLE); sprintf(adapterStr, "%d", adapter->adapter); YamlUtils_MappingAdd(document, mappingId, "Adapter", adapterStr); return mappingId; } static int DVBPropertyActiveGet(void *userArg, PropertyValue_t *value) { DVBAdapter_t *adapter = userArg; value->u.boolean = adapter->frontEndFd != -1; return 0; } static int DVBPropertyActiveSet(void *userArg, PropertyValue_t *value) { DVBAdapter_t *adapter = userArg; return DVBFrontEndSetActive(adapter,value->u.boolean); } static int DVBPropertyDeliverySystemsGet(void *userArg, PropertyValue_t *value) { DVBAdapter_t *adapter = userArg; int i; int size = 0; for (i = 0; i < adapter->supportedDelSystems->nrofSystems; i ++) { size += 2 + strlen(DVBDeliverySystemStr[adapter->supportedDelSystems->systems[i]]) + 1; } value->u.string = malloc(size + 1); value->u.string[0] = 0; for (i = 0; i < adapter->supportedDelSystems->nrofSystems; i ++) { sprintf(value->u.string + strlen(value->u.string), "- %s\n", DVBDeliverySystemStr[adapter->supportedDelSystems->systems[i]]); } return 0; } static uint32_t ConvertStringToUInt32(const char *str, uint32_t defaultValue) { char *suffix; uint32_t result = strtoul(str, &suffix, 10); if (suffix == str) { result = defaultValue; } return result; } static uint32_t ConvertYamlNode(yaml_document_t * document, const char *key, uint32_t (*convert)(const char *, uint32_t), uint32_t defaultValue) { yaml_node_t *node = YamlUtils_RootMappingFind(document, key); if (node && (node->type == YAML_SCALAR_NODE)) { return convert((const char*)node->data.scalar.value, defaultValue); } return defaultValue; } dvbstreamer-2.1.0/src/list.c000066400000000000000000000132731217721213100157410ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA list.h Generic list management functions. */ #include #include "logging.h" #include "list.h" #include "objects.h" /******************************************************************************* * Global variables * *******************************************************************************/ static const char LIST[] = "list"; /******************************************************************************* * Global functions * *******************************************************************************/ List_t *ListCreate() { ObjectRegisterType(List_t); return ObjectCreateType(List_t); } void ListFree(List_t *list, void (*destructor)(void *data)) { ListEntry_t *entry; ListEntry_t *next; if (list) { for (entry = list->head; entry != NULL; entry = next) { next = entry->next; if (destructor) { destructor(entry->data); } free(entry); } list->count = 0; list->head = NULL; list->tail = NULL; ObjectRefDec(list); } } void ListFreeObject(void *ptr) { ObjectRefDec(ptr); } bool ListAdd(List_t *list, void *data) { ListIterator_t iterator = {list, list->tail}; return ListInsertAfterCurrent(&iterator,data); } bool ListInsertAfterCurrent(ListIterator_t *iterator, void *data) { ListEntry_t *entry; entry = calloc(1, sizeof(ListEntry_t)); if (entry == NULL) { return FALSE; } entry->data = data; if (iterator->current == NULL) { entry->next = NULL; entry->prev = iterator->list->tail; if (entry->prev) { entry->prev->next = entry; } } else { entry->next = iterator->current->next; entry->prev = iterator->current; iterator->current->next = entry; if (entry->next) { entry->next->prev = entry; } } if (iterator->list->head == NULL) { iterator->list->head = entry; } if (entry->next == NULL) { iterator->list->tail = entry; } iterator->list->count ++; return TRUE; } bool ListInsertBeforeCurrent(ListIterator_t *iterator, void *data) { ListEntry_t *entry; entry = calloc(1, sizeof(ListEntry_t)); if (entry == NULL) { return FALSE; } entry->data = data; entry->next = iterator->current; if (iterator->current == NULL) { entry->prev = iterator->list->tail; iterator->list->tail = entry; } else { entry->prev = iterator->current->prev; entry->next->prev = entry; } if (iterator->current == iterator->list->head) { iterator->list->head = entry; } if (entry->prev) { entry->prev->next = entry; } iterator->list->count ++; return TRUE; } bool ListRemove(List_t *list, void *data) { ListIterator_t iterator; for ( ListIterator_Init(iterator, list); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { if (data == ListIterator_Current(iterator)) { ListRemoveCurrent(&iterator); return TRUE; } } return FALSE; } bool ListReplace(List_t *list, void *oldData, void *newData) { ListIterator_t iterator; for ( ListIterator_Init(iterator, list); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { if (oldData == ListIterator_Current(iterator)) { ListIterator_SetCurrent(iterator, newData); return TRUE; } } return FALSE; } void ListRemoveCurrent(ListIterator_t *iterator) { List_t *list = iterator->list; ListEntry_t *entry = iterator->current; iterator->current = entry->next; if (entry == list->head) { list->head = entry->next; } if (entry == list->tail) { list->tail = entry->prev; } if (entry->prev) { entry->prev->next = entry->next; } if (entry->next) { entry->next->prev = entry->prev; } free(entry); iterator->list->count --; } bool ListGet(List_t *list, int index, void **data) { int i; ListEntry_t *entry = list->head; bool result = FALSE; for (i = 0; (i < index) && entry; i ++) { entry = entry->next; } if (entry) { *data = entry->data; result = TRUE; } return result; } void ListDump(List_t *list) { ListIterator_t iterator; LogModule(LOG_DEBUG, LIST, "Dumping list %p (%d entries)\n", list, list->count); for ( ListIterator_Init(iterator, list); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { LogModule(LOG_DEBUG, LIST, "Current = %010p prev = %010p next = %010p data = %010p\n", iterator.current, iterator.current->prev, iterator.current->next, iterator.current->data); } LogModule(LOG_DEBUG, LIST, "End of dump\n"); } dvbstreamer-2.1.0/src/lnb.c000077500000000000000000000070411217721213100155400ustar00rootroot00000000000000/* From linuxtv.org's szap utility, just cleaned up a bit and made more dvbstreamer like. */ #include #include #include #include "lnb.h" static char *univ_desc[] = { "Europe", "10800 to 11800 MHz and 11600 to 12700 Mhz", "Dual LO, loband 9750, hiband 10600 MHz", (char *)NULL }; static char *dbs_desc[] = { "Expressvu, North America", "12200 to 12700 MHz", "Single LO, 11250 MHz", (char *)NULL }; static char *standard_desc[] = { "10945 to 11450 Mhz", "Single LO, 10000 Mhz", (char *)NULL }; static char *enhan_desc[] = { "Astra", "10700 to 11700 MHz", "Single LO, 9750 MHz", (char *)NULL }; static char *cband_desc[] = { "Big Dish", "3700 to 4200 MHz", "Single LO, 5150 Mhz", (char *)NULL }; static LNBInfo_t LNBs[] = { {"UNIVERSAL", univ_desc, 9750000, 10600000, 11700000 }, {"DBS", dbs_desc, 11250000, 0, 0 }, {"STANDARD", standard_desc, 10000000, 0, 0 }, {"ENHANCED", enhan_desc, 9750000, 0, 0 }, {"C-BAND", cband_desc, 5150000, 0, 0 } }; /* Enumerate through standard types of LNB's until NULL returned. * Increment curno each time */ LNBInfo_t * LNBEnumerate(int curno) { if (curno >= (int) (sizeof(LNBs) / sizeof(LNBs[0]))) { return NULL; } return &LNBs[curno]; } /* Decode an lnb type, for example given on a command line * If alpha and standard type, e.g. "Universal" then match that * otherwise low[,high[,switch]] */ int LNBDecode(char *str, LNBInfo_t *lnb) { int i; char *cp, *np; memset(lnb, 0, sizeof(LNBInfo_t)); cp = str; while(*cp && isspace(*cp)) { cp++; } if (isalpha(*cp)) { for (i = 0; i < (int)(sizeof(LNBs) / sizeof(LNBs[0])); i++) { if (!strcasecmp(LNBs[i].name, cp)) { *lnb = LNBs[i]; return 0; } } return 1; } if (*cp == '\0' || !isdigit(*cp)) { return 0; } lnb->lowFrequency = strtoul(cp, &np, 0); if (lnb->lowFrequency == 0) { return 1; } cp = np; while(*cp && (isspace(*cp) || *cp == ',')) { cp++; } if (*cp == '\0') { return 0; } if (!isdigit(*cp)) { return 1; } lnb->highFrequency = strtoul(cp, &np, 0); cp = np; while(*cp && (isspace(*cp) || *cp == ',')) { cp++; } if (*cp == '\0') { return 0; } if (!isdigit(*cp)) { return 1; } lnb->switchFrequency = strtoul(cp, NULL, 0); return 0; } unsigned long LNBTransponderToIntermediateFreq(LNBInfo_t *info, unsigned long freq, bool *tone) { bool hiband = FALSE; unsigned long ifreq = 0; *tone = FALSE; if (info->switchFrequency&& info->highFrequency&& (freq >= info->switchFrequency)) { hiband = TRUE; } if (hiband) { ifreq = freq - info->highFrequency; *tone = TRUE; } else { if (freq < info->lowFrequency) { ifreq = info->lowFrequency- freq; } else { ifreq = freq - info->lowFrequency; } *tone = FALSE; } return ifreq; }dvbstreamer-2.1.0/src/logging.c000066400000000000000000000212151217721213100164070ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA logging.h Logging functions. */ #include #include #include #include #include #include #include #include #include "main.h" #include "logging.h" #include "pthread.h" /******************************************************************************* * Defines * *******************************************************************************/ #define MAX_THREADS 100 /******************************************************************************* * Prototypes * *******************************************************************************/ static void LoggingInitCommon(int logLevel); static void LogImpl(int level, const char *module, const char * format, va_list valist); static int LogGetModuleLevel(const char *module, int level); static char *LogGetThreadName(pthread_t thread); static int LogGetModuleLevel(const char *module, int level); /******************************************************************************* * Typedefs * *******************************************************************************/ typedef struct ThreadName_s { pthread_t thread; char *name; }ThreadName_t; typedef struct ModuleLevel_s { char *module; int level; struct ModuleLevel_s *next; }ModuleLevel_t; /******************************************************************************* * Global variables * *******************************************************************************/ /** * Current verbosity level. * Used to determine when to send text from a printlog call to the log output. */ static int verbosity = 0; static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; static FILE *logFP = NULL; static ThreadName_t threadNames[MAX_THREADS]; static ModuleLevel_t *moduleLevels = NULL; /******************************************************************************* * Global functions * *******************************************************************************/ int LoggingInitFile(char *filepath, int logLevel) { if (strcmp(filepath, "-") == 0) { logFP = stderr; } else { logFP = fopen(filepath, "a"); if (logFP == NULL) { return -1; } /* Turn off buffering */ setbuf(logFP, NULL); } LoggingInitCommon(logLevel); return 0; } int LoggingInit(char *filename, int logLevel) { char *logFile=calloc(PATH_MAX,1); /* Try /var/log first then users home directory */ sprintf(logFile, "/var/log/%s", filename); logFP = fopen(logFile, "a"); if (logFP == NULL) { sprintf(logFile, "%s/%s", DataDirectory, filename); logFP = fopen(logFile, "a"); } if (logFP == NULL) { return -1; } /* Turn off buffering */ setbuf(logFP, NULL); LoggingInitCommon(logLevel); return 0; } void LoggingRedirectStdErrStdOut(void) { dup2(fileno(logFP), 1); dup2(fileno(logFP), 2); } void LoggingDeInit(void) { fclose(logFP); } void LogLevelSet(int level) { verbosity = level; } int LogLevelGet(void) { return verbosity; } void LogLevelInc(void) { verbosity ++; } void LogLevelDec(void) { verbosity ++; } bool LogLevelIsEnabled(int level) { return (level <= verbosity); } void LogLoadModuleLevels(const char *path) { FILE *fp; char line[256]; char module[128]; int level; fp = fopen(path, "r"); if (fp) { while(!feof(fp)) { if (fgets(line, sizeof(line) - 1, fp)) { printf("Module Level Line: %s", line); if (sscanf(line, "%s %d\n", module, &level) == 2) { ModuleLevel_t *modLevel = malloc(sizeof(ModuleLevel_t)); printf("Module : %s Level %d\n", module, level); modLevel->module = strdup(module); modLevel->level = level; modLevel->next = moduleLevels; moduleLevels = modLevel; } } } } } void LogRegisterThread(pthread_t thread, const char *name) { int i; pthread_mutex_lock(&mutex); for (i = 0; i < MAX_THREADS; i ++) { if (threadNames[i].thread == 0) { threadNames[i].thread = thread; threadNames[i].name = strdup(name); break; } } pthread_mutex_unlock(&mutex); } void LogUnregisterThread(pthread_t thread) { int i; pthread_mutex_lock(&mutex); for (i = 0; i < MAX_THREADS; i ++) { if (threadNames[i].thread == thread) { threadNames[i].thread = 0; free(threadNames[i].name); break; } } pthread_mutex_unlock(&mutex); } void LogModule(int level, const char *module, char *format, ...) { va_list valist; if (level == 0) { va_start(valist, format); vfprintf(stderr, format, valist); va_end(valist); if (strchr(format, '\n') == NULL) { fprintf(stderr, "\n"); } } if (LogGetModuleLevel(module, level) <= verbosity) { va_start(valist, format); LogImpl(level, module, format, valist); va_end(valist); } } /******************************************************************************* * Local Functions * *******************************************************************************/ static void LoggingInitCommon(int logLevel) { fprintf(logFP, "------------------- | --------------- | -- | --------------- | ----------------------------------------\n"); fprintf(logFP, "Date Time | Module | Lv | Thread | Details\n"); fprintf(logFP, "------------------- | --------------- | -- | --------------- | ----------------------------------------\n"); verbosity = logLevel; memset(&threadNames, 0, sizeof(threadNames)); } static void LogImpl(int level, const char *module, const char * format, va_list valist) { char timeBuffer[24]; /* "YYYY-MM-DD HH:MM:SS" */ time_t curtime; struct tm *loctime; char *thread; pthread_mutex_lock(&mutex); /* Get the current time. */ curtime = time (NULL); /* Convert it to local time representation. */ loctime = localtime (&curtime); /* Print it out in a nice format. */ strftime (timeBuffer, sizeof(timeBuffer), "%F %T", loctime); thread = LogGetThreadName(pthread_self()); fprintf(logFP, "%-19s | %-15s | %2d | %-15s | ", timeBuffer, module ? module:"", level, thread); vfprintf(logFP, format, valist); if (strchr(format, '\n') == NULL) { fprintf(logFP, "\n"); } if ((level == LOG_ERROR) && (errno != 0)) { fprintf(logFP, "%-19s | %-15s | %2d | %-15s | errno = %d (%s)\n", timeBuffer, module ? module:"", level, thread, errno, strerror(errno)); } pthread_mutex_unlock(&mutex); } static char *LogGetThreadName(pthread_t thread) { static char numericName[20]; int i; for (i = 0; i < MAX_THREADS; i ++) { if (thread == threadNames[i].thread) { return threadNames[i].name; } } sprintf(numericName, "0x%08lx", (unsigned long)thread); return numericName; } static int LogGetModuleLevel(const char *module, int level) { int result = level; ModuleLevel_t *modLevel; for (modLevel = moduleLevels; modLevel; modLevel = modLevel->next) { if (strcmp(modLevel->module, module) == 0) { if (level < modLevel->level) { result = verbosity + 1; } break; } } return result; } dvbstreamer-2.1.0/src/main.c000066400000000000000000000614671217721213100157220ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA main.c Entry point to the application. */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include "parsezap.h" #include "dbase.h" #include "epgtypes.h" #include "epgchannel.h" #include "multiplexes.h" #include "services.h" #include "dvbadapter.h" #include "ts.h" #include "main.h" #include "dispatchers.h" #include "servicefilter.h" #include "cache.h" #include "logging.h" #include "commands.h" #include "remoteintf.h" #include "deliverymethod.h" #include "pluginmgr.h" #include "plugin.h" #include "tuning.h" #include "atsctext.h" #include "deferredproc.h" #include "events.h" #include "properties.h" #include "standard/mpeg2.h" #include "standard/dvb.h" #include "standard/atsc.h" /******************************************************************************* * Defines * *******************************************************************************/ #define INIT(_func, _name) \ do {\ if (_func) \ { \ LogModule(LOG_ERROR, MAIN, "Failed to initialise %s.\n", _name); \ if (DaemonMode)\ {\ unlink(PidFile);\ }\ exit(1);\ }\ LogModule(LOG_DEBUGV, MAIN, "Initialised %s.\n", _name);\ }while(0) #define DEINIT(_func, _name) \ do {\ _func;\ LogModule(LOG_DEBUGV, MAIN, "Deinitialised %s\n", _name);\ }while(0) /******************************************************************************* * Prototypes * *******************************************************************************/ /* External Command Prototypes. */ extern void CommandInstallInfo(void); extern void CommandUnInstallInfo(void); extern void CommandInstallServiceFilter(void); extern void CommandUnInstallServiceFilter(void); extern void CommandInstallScanning(void); extern void CommandUnInstallScanning(void); extern void CommandInstallEPG(void); extern void CommandUnInstallEPG(void); static void usage(char *appname); static void version(void); static void sighandler(int signum); static void installsighandler(void); static void InitDaemon(int adapter); static void DeInitDaemon(void); static void InstallSysProperties(void); static int SysPropertyGetUptime(void *userArg, PropertyValue_t *value); static int SysPropertyGetUptimeSecs(void *userArg, PropertyValue_t *value); /******************************************************************************* * Global variables * *******************************************************************************/ volatile bool ExitProgram = FALSE; bool DaemonMode = FALSE; const char PrimaryService[] = ""; char DataDirectory[PATH_MAX]; static char PidFile[PATH_MAX]; static TSReader_t *TSReader; static DVBAdapter_t *DVBAdapter; static ServiceFilter_t PrimaryServiceFilter; static const char MAIN[] = "Main"; static time_t StartTime; static char *versionStr = VERSION; static char hexVersionStr[5]; /* XXXX\0 */ /******************************************************************************* * Global functions * *******************************************************************************/ int main(int argc, char *argv[]) { char *startupFile = NULL; int adapterNumber = 0; int scanAll = 0; int logLevel = 0; char *username = "dvbstreamer"; char *password = "control"; char *serverName = NULL; char *bindAddress = NULL; char *primaryMRL = "null://"; bool remoteInterface = FALSE; bool disableConsoleInput = FALSE; bool hwRestricted = FALSE; bool forceISDB = FALSE; LNBInfo_t lnbInfo; DeliveryMethodInstance_t *dmInstance; char logFilename[PATH_MAX] = {0}; /* Create the data directory */ sprintf(DataDirectory, "%s/.dvbstreamer", getenv("HOME")); mkdir(DataDirectory, S_IRWXU); installsighandler(); while (!ExitProgram) { int c; c = getopt(argc, argv, "vVdDro:a:f:u:p:n:F:i:RL:I"); if (c == -1) { break; } switch (c) { case 'v': logLevel ++; break; case 'L': strcpy(logFilename, optarg); break; case 'V': version(); exit(0); break; case 'o': primaryMRL = optarg; break; case 'a': adapterNumber = atoi(optarg); break; case 'R': #if defined(ENABLE_DVB) hwRestricted = TRUE; #else fprintf(stderr, "Hardware restricted mode only supported for DVB!\n"); #endif break; case 'f': startupFile = optarg; break; /* Daemon options */ case 'd': DaemonMode = TRUE; break; /* Remote Interface Options */ case 'r': remoteInterface = TRUE; break; case 'D': disableConsoleInput = TRUE; remoteInterface = TRUE; break; case 'u': username = optarg; break; case 'p': password = optarg; break; case 'n': serverName = optarg; break; case 'i': bindAddress = optarg; break; case 'I': forceISDB = TRUE; break; default: usage(argv[0]); exit(1); } } if (ExitProgram) { exit(1); } if (logFilename[0]) { if (DaemonMode && (strcmp(logFilename, "-") == 0)) { fprintf(stderr, "Cannot use STDERR for logging when running as a daemon!"); exit(1); } if (LoggingInitFile(logFilename, logLevel)) { perror("Could not open user specified log file:"); exit(1); } } else { sprintf(logFilename, "dvbstreamer-%d.log", adapterNumber); if (LoggingInit(logFilename, logLevel)) { perror("Couldn't initialising logging module:"); exit(1); } } sprintf(logFilename, "%s/levels-%d.log", DataDirectory, adapterNumber); LogLoadModuleLevels(logFilename); if (DaemonMode) { if (startupFile && (startupFile[0] != '/')) { char *cwd = getcwd(NULL, 0); if (asprintf(&startupFile, "%s/%s", cwd, startupFile) == -1) { LogModule(LOG_ERROR, MAIN, "Failed to allocate memory for startup file path!\n"); } free(cwd); } InitDaemon(adapterNumber); } StartTime = time(NULL); LogRegisterThread(pthread_self(), "Main"); LogModule(LOG_INFO, MAIN, "DVBStreamer starting"); LogModule(LOG_INFOV, MAIN, "Using adapter %d\n", adapterNumber); if (startupFile) { LogModule(LOG_INFOV, MAIN, "Using startup script %s\n", startupFile); } if (primaryMRL == NULL) { LogModule(LOG_ERROR, MAIN, "No output set!\n"); usage(argv[0]); exit(1); } INIT(ObjectInit(), "objects"); INIT(EventsInit(), "events"); INIT(PropertiesInit(), "properties"); INIT(DBaseInit(adapterNumber), "database"); INIT(EPGTypesInit(), "EPG types"); INIT(EPGChannelInit(), "EPG channel"); INIT(MultiplexInit(), "multiplex"); INIT(ServiceInit(), "service"); INIT(DispatchersInit(), "dispatchers"); INIT(CacheInit(), "cache"); INIT(DeliveryMethodManagerInit(), "delivery method manager"); INIT(DeferredProcessingInit(), "deferred processing"); LogModule(LOG_INFO, MAIN, "%d Services available on %d Multiplexes\n", ServiceCount(), MultiplexCount()); /* Initialise the DVB adapter */ DVBAdapter = DVBInit(adapterNumber, hwRestricted, forceISDB); if (!DVBAdapter) { printf("Could not open dvb adapter %d!\n", adapterNumber); exit(1); } #if defined(ENABLE_DVB) { int i; DVBSupportedDeliverySys_t *supportedSystems = DVBFrontEndGetDeliverySystems(DVBAdapter); for (i = 0; i < supportedSystems->nrofSystems; i ++) { if ((supportedSystems->systems[i] == DELSYS_DVBS) || (supportedSystems->systems[i] == DELSYS_DVBS2)) { char *lnb; if (DBaseMetadataGet(METADATA_NAME_LNB, &lnb)) { memset(&lnbInfo, 0, sizeof(lnbInfo)); DBaseMetadataGetInt(METADATA_NAME_LNB_LOW_FREQ, (int*)&lnbInfo.lowFrequency); DBaseMetadataGetInt(METADATA_NAME_LNB_HIGH_FREQ, (int*)&lnbInfo.highFrequency); DBaseMetadataGetInt(METADATA_NAME_LNB_SWITCH_FREQ, (int*)&lnbInfo.switchFrequency); } else { LNBDecode(lnb, &lnbInfo); free(lnb); } DVBFrontEndLNBInfoSet(DVBAdapter, &lnbInfo); break; } } } #endif /* Create Transport stream filter thread */ INIT(!(TSReader = TSReaderCreate(DVBAdapter)), "TS reader"); if (MainIsDVB()) { #if defined(ENABLE_DVB) LogModule(LOG_INFO, MAIN, "Starting DVB filters\n"); INIT(DVBStandardInit(TSReader), "DVB Filters"); #endif } if (MainIsATSC()) { #if defined(ENABLE_ATSC) LogModule(LOG_INFO, MAIN, "Starting ATSC filters\n"); INIT(ATSCStandardInit(TSReader), "ATSC Filters"); #endif } if (MainIsISDB()) { LogModule(LOG_INFO, MAIN, "Starting ISDB filters\n"); INIT(MPEG2StandardInit(TSReader), "ISDB Filters"); } INIT(ServiceFilterInit(), "service filter"); INIT(CommandInit(), "commands"); /* Install commands */ CommandInstallServiceFilter(); CommandInstallInfo(); CommandInstallScanning(); CommandInstallEPG(); INIT(TuningInit(), "tuning"); InstallSysProperties(); /* * Start plugins after outputs but before creating the primary output to * allow pugins to create outputs and allow new delivery methods to be * registered. */ INIT(PluginManagerInit(), "plugin manager"); /* Create Service filter */ PrimaryServiceFilter = ServiceFilterCreate(TSReader, (char *)PrimaryService); if (!PrimaryServiceFilter) { LogModule(LOG_ERROR, MAIN, "Failed to create primary service filter\n"); exit(1); } dmInstance = DeliveryMethodCreate(primaryMRL); if (dmInstance == NULL) { if (strcmp(primaryMRL, "null://")) { printf("Failed to create delivery method for mrl (%s) falling back to null://\n", primaryMRL); dmInstance = DeliveryMethodCreate("null://"); } if (dmInstance == NULL) { fprintf(stderr, "Failed to create fallback (null://) delivery method\n" "Check that you have installed dvbstreamer plugins to the correct place!\n" "Plugin path: %s\n", DVBSTREAMER_PLUGINDIR); exit(1); } } ServiceFilterDeliveryMethodSet(PrimaryServiceFilter, dmInstance); if (DaemonMode || remoteInterface) { char serverNameBuffer[40]; if (!serverName) { sprintf(serverNameBuffer, "DVBStreamer Adapter %d", adapterNumber); serverName = serverNameBuffer; } INIT(RemoteInterfaceInit(adapterNumber, serverName, bindAddress, username, password), "remote interface"); } if (startupFile) { if (CommandProcessFile(startupFile)) { LogModule(LOG_ERROR, MAIN, "%s not found!\n", startupFile); } LogModule(LOG_DEBUGV, MAIN, "Startup file processed\n"); } if (DBaseMetadataGetInt(METADATA_NAME_SCAN_ALL, &scanAll) == 0) { if (scanAll && !forceISDB) { printf("New setup, performing initial scan to fill in missing details.\n"); if (!CommandExecuteConsole("scan all")) { printf("Failed to find scan command\n"); } printf("Initial scan finished.\n"); } DBaseMetadataDelete(METADATA_NAME_SCAN_ALL); } LogModule(LOG_INFO, MAIN, "DVBStreamer ready."); if (DaemonMode) { DispatchersStart(TRUE); LogModule(LOG_DEBUGV, MAIN, "Remote interface finished, shutting down\n"); RemoteInterfaceDeInit(); } else { if (disableConsoleInput) { DispatchersStart(TRUE); } else { DispatchersStart(FALSE); CommandLoop(); LogModule(LOG_DEBUGV, MAIN, "Command loop finished, shutting down\n"); ExitProgram = TRUE; } if (remoteInterface) { RemoteInterfaceDeInit(); } } DispatchersStop(); TSReaderEnable(TSReader, FALSE); ServiceFilterDestroyAll(TSReader); /* Stop the deferred processing as when we unload the plugins we may be * unloading code that is required by any jobs left on the queue */ DEINIT(DeferredProcessingDeinit(), "deferred processing"); /* Destroy all delivery method instances before shutting down the plugins. * We do this as although there may be instances being used by plugins, * we do not know the order the plugins will be shutdown. This may mean the * delivery method plugin is shutdown before the plugin using the instance! */ DeliveryMethodDestroyAll(); DEINIT(PluginManagerDeInit(), "plugin manager"); DEINIT(DeliveryMethodManagerDeInit(), "delivery method manager"); DEINIT(TuningDeInit(), "tuning"); /* Uninstall commands */ CommandUnInstallEPG(); CommandUnInstallServiceFilter(); CommandUnInstallInfo(); CommandUnInstallScanning(); DEINIT(CommandDeInit(), "commands"); DEINIT(ServiceFilterDeInit(), "service filter"); if (MainIsDVB()) { #if defined(ENABLE_DVB) DVBStandardDeinit(TSReader); #endif } if (MainIsATSC()) { #if defined(ENABLE_ATSC) ATSCStandardDeinit(TSReader); #endif } if (MainIsISDB()) { MPEG2StandardDeinit(TSReader); } LogModule(LOG_DEBUGV, MAIN, "Processors destroyed\n"); /* Close the adapter and shutdown the filter etc*/ DEINIT(TSReaderDestroy(TSReader), "TS filter"); DVBFrontEndLNBInfoGet(DVBAdapter, &lnbInfo); if (lnbInfo.name) { DBaseMetadataSet(METADATA_NAME_LNB, lnbInfo.name); } else { DBaseMetadataDelete(METADATA_NAME_LNB); DBaseMetadataSetInt(METADATA_NAME_LNB_LOW_FREQ, (int)lnbInfo.lowFrequency); DBaseMetadataSetInt(METADATA_NAME_LNB_HIGH_FREQ, (int)lnbInfo.highFrequency); DBaseMetadataSetInt(METADATA_NAME_LNB_SWITCH_FREQ, (int)lnbInfo.switchFrequency); } DEINIT(DVBDispose(DVBAdapter), "DVB adapter"); DEINIT(CacheDeInit(), "cache"); DEINIT(DispatchersDeInit(), "dispatchers"); DEINIT(ServiceDeInit(), "service"); DEINIT(MultiplexDeInit(), "multiplex"); DEINIT(EPGChannelDeInit(), "EPG channel"); DEINIT(EPGTypesDeInit(), "EPG types"); DEINIT(DBaseDeInit(), "database"); DEINIT(PropertiesDeInit(), "properties"); DEINIT(EventsDeInit(), "events"); DEINIT(ObjectDeinit(), "objects"); if (DaemonMode) { DeInitDaemon(); } LogModule(LOG_INFO, MAIN, "DVBStreamer finished."); LoggingDeInit(); return 0; } void UpdateDatabase() { TSReaderLock(TSReader); CacheWriteback(); TSReaderUnLock(TSReader); } static void InstallSysProperties(void) { sprintf(hexVersionStr, "%02x%02x", DVBSTREAMER_MAJOR, DVBSTREAMER_MINOR); PropertiesAddSimpleProperty("sys", "version", "Version of this instance of DVBStreamer", PropertyType_String, &versionStr, SIMPLEPROPERTY_R); PropertiesAddSimpleProperty("sys", "hexversion", "Version of this instance of DVBStreamer as a 16 bit hex number", PropertyType_String, &hexVersionStr, SIMPLEPROPERTY_R); PropertiesAddProperty("sys", "uptime", "The time that this instance has been running in days/hours/minutes/seconds.", PropertyType_String, NULL, SysPropertyGetUptime, NULL); PropertiesAddProperty("sys.uptime", "seconds", "The time that this instance has been running in seconds.", PropertyType_Int, NULL, SysPropertyGetUptimeSecs, NULL); } static int SysPropertyGetUptime(void *userArg, PropertyValue_t *value) { char *uptimeStr = NULL; time_t now; int seconds; int d, h, m, s; time(&now); seconds = (int)difftime(now, StartTime); d = seconds / (24 * 60 * 60); h = (seconds - (d * 24 * 60 * 60)) / (60 * 60); m = (seconds - ((d * 24 * 60 * 60) + (h * 60 * 60))) / 60; s = (seconds - ((d * 24 * 60 * 60) + (h * 60 * 60) + (m * 60))); if (asprintf(&uptimeStr, "%d Days %d Hours %d Minutes %d seconds", d, h, m, s) == -1) { LogModule(LOG_INFO, MAIN, "Failed to allocate memory for uptime string.\n"); } value->u.string = uptimeStr; return 0; } static int SysPropertyGetUptimeSecs(void *userArg, PropertyValue_t *value) { time_t now; time(&now); value->u.integer = (int)difftime(now, StartTime); return 0; } TSReader_t *MainTSReaderGet(void) { return TSReader; } DVBAdapter_t *MainDVBAdapterGet(void) { return DVBAdapter; } ServiceFilter_t MainServiceFilterGetPrimary(void) { return PrimaryServiceFilter; } bool MainIsDVB() { #if defined(ENABLE_DVB) && defined(ENABLE_ATSC) int i; DVBSupportedDeliverySys_t *supportedSystems = DVBFrontEndGetDeliverySystems(DVBAdapter); for ( i = 0; i < supportedSystems->nrofSystems; i ++) { if ((supportedSystems->systems[i] == DELSYS_DVBS) || (supportedSystems->systems[i] == DELSYS_DVBC) || (supportedSystems->systems[i] == DELSYS_DVBT) ) { return TRUE; } } return FALSE; #elif defined(ENABLE_DVB) return TRUE; #elif defined(ENABLE_ATSC) return FALSE; #else #error Either ENABLE_DVB or ENABLE_ATSC needs to be defined! #endif } bool MainIsATSC() { #if defined(ENABLE_DVB) && defined(ENABLE_ATSC) int i; DVBSupportedDeliverySys_t *supportedSystems = DVBFrontEndGetDeliverySystems(DVBAdapter); for ( i = 0; i < supportedSystems->nrofSystems; i ++) { if (supportedSystems->systems[i] == DELSYS_ATSC) { return TRUE; } } return FALSE; #elif defined(ENABLE_ATSC) return TRUE; #else return FALSE; #endif } bool MainIsISDB() { int i; DVBSupportedDeliverySys_t *supportedSystems = DVBFrontEndGetDeliverySystems(DVBAdapter); for ( i = 0; i < supportedSystems->nrofSystems; i ++) { if (supportedSystems->systems[i] == DELSYS_ISDBT) { return TRUE; } } return FALSE; } /* * Output command line usage and help. */ static void usage(char *appname) { fprintf(stderr,"Usage:%s \n" " Options:\n" " -v : Increase the amount of debug output, can be used multiple\n" " times for more output\n" " -L : Set the location of the log file.\n" " -V : Print version information then exit\n" " -o : Output primary service to the specified mrl.\n" " -a : Use adapter number (ie /dev/dvb/adapter/...)\n" " -f : Run startup script file before starting the command prompt\n" " -d : Run as a daemon.\n" " -R : Use hardware PID filters, only 1 service filter supported.\n" " -I : Force use of ISDB-T delivery system\n" "\n" " Remote Interface Options\n" " -r : Start remote interface as well as console shell.\n" " -D : Start remote interface but disable console shell.\n" " -u : Username used to login remotely to control this instance.\n" " -p : Password used to login remotely to control this instance.\n" " -n : Informational name for this instance.\n" " -i
: IP address to bind to.\n", appname ); } /* * Output version and license conditions */ static void version(void) { printf("%s - %s (Compiled %s %s)\n" "Written by Adam Charrett (charrea6@users.sourceforge.net).\n" "\n" "Copyright 2006 Adam Charrett\n" "This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n", PACKAGE, VERSION, __DATE__, __TIME__); } /******************************************************************************* * Signal Handling functions * *******************************************************************************/ static void installsighandler(void) { rl_catch_signals = 0; signal(SIGTERM, sighandler); signal(SIGINT, sighandler); signal(SIGQUIT, sighandler); signal(SIGPIPE, SIG_IGN); } static void sighandler(int signum) { if (!DaemonMode) { switch (signum) { case SIGINT: case SIGQUIT: rl_free_line_state (); case SIGTERM: rl_cleanup_after_signal(); if (rl_instream) { fclose(rl_instream); } break; } } LogModule(LOG_DEBUG, MAIN, "Got signal %d exiting\n", signum); ExitProgram = TRUE; DispatchersExitLoop(); } /******************************************************************************* * Daemon functions * *******************************************************************************/ static void InitDaemon(int adapter) { /* Our process ID and Session ID */ pid_t pid, sid; /* Fork off the parent process */ pid = fork(); if (pid < 0) { LogModule(LOG_ERROR, MAIN, "First fork failed while going into daemon mode"); exit(1); } /* If we got a good PID, then we can exit the parent process. */ if (pid > 0) { exit(0); } /* Create a new SID for the child process */ sid = setsid(); if (sid < 0) { LogModule(LOG_ERROR, MAIN, "setsid failed while going into daemon mode"); /* Log the failure */ exit(1); } /* Change the current working directory */ if ((chdir("/")) < 0) { LogModule(LOG_ERROR, MAIN, "chdir failed while going into daemon mode"); /* Log the failure */ exit(1); } /* Redirect standard files to logging file */ if (freopen( "/dev/null", "r", stdin) == NULL) { LogModule(LOG_ERROR, MAIN, "Failed to redirect stdin to /dev/null!"); } LoggingRedirectStdErrStdOut(); pid = fork(); if (pid < 0) { LogModule(LOG_ERROR, MAIN, "Second fork failed while going into daemon mode"); exit(1); } if (pid > 0) { FILE *fp; sprintf(PidFile, "/var/run/dvbstreamer-%d.pid", adapter); fp = fopen(PidFile, "wt"); if (!fp) { sprintf(PidFile, "%s/dvbstreamer-%d.pid", DataDirectory, adapter); fp = fopen(PidFile, "wt"); } if (fp) { fprintf(fp, "%d", pid); fclose(fp); } exit(0); } DaemonMode = TRUE; } static void DeInitDaemon(void) { /* Remove pid file */ unlink(PidFile); exit(0); } dvbstreamer-2.1.0/src/multiplexes.c000066400000000000000000000222251217721213100173360ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA multiplexes.c Manage multiplexes and tuning parameters. */ #include #include #include #include "dbase.h" #include "multiplexes.h" #include "services.h" #include "logging.h" #include "yamlutils.h" /******************************************************************************* * Defines * *******************************************************************************/ #define MULTIPLEX_FIELDS MULTIPLEXES_TABLE "." MULTIPLEX_UID "," \ MULTIPLEXES_TABLE "." MULTIPLEX_TSID "," \ MULTIPLEXES_TABLE "." MULTIPLEX_NETID "," \ MULTIPLEXES_TABLE "." MULTIPLEX_TYPE "," \ MULTIPLEXES_TABLE "." MULTIPLEX_TUNINGPARAMS /******************************************************************************* * Prototypes * *******************************************************************************/ static void MultiplexDestructor(void *ptr); static void MultiplexListDestructor(void *ptr); /******************************************************************************* * Global variables * *******************************************************************************/ static int uidSeed; static const char MULTIPLEXES[] = "Multiplexes"; static EventSource_t multiplexSource; static Event_t multiplexAddedEvent; static Event_t multiplexRemovedEvent; /******************************************************************************* * Global functions * *******************************************************************************/ int MultiplexInit(void) { uidSeed = (int)time(NULL); multiplexSource = EventsRegisterSource("Multiplexes"); multiplexAddedEvent = EventsRegisterEvent(multiplexSource, "Added", MultiplexEventToString); multiplexRemovedEvent = EventsRegisterEvent(multiplexSource, "Removed", MultiplexEventToString); ObjectRegisterCollection(TOSTRING(MultiplexList_t),sizeof(Multiplex_t*), MultiplexListDestructor); return ObjectRegisterTypeDestructor(Multiplex_t, MultiplexDestructor); } int MultiplexDeInit(void) { return 0; } Multiplex_t *MultiplexFind(char *mux) { Multiplex_t *result = NULL; int netId, tsId; /* Although the description says we check UID first it is simple to check for netid.tsid because it has the '.' and will pass the following if where as a simple number won't. */ if (sscanf(mux, "%x.%x", &netId, &tsId) == 2) { result = MultiplexFindId(netId, tsId); } else { int n = atoi(mux); result = MultiplexFindUID(n); } return result; } Multiplex_t *MultiplexFindUID(int uid) { Multiplex_t *result = NULL; STATEMENT_INIT; STATEMENT_PREPAREVA("SELECT " MULTIPLEX_FIELDS " " "FROM " MULTIPLEXES_TABLE " WHERE " MULTIPLEX_UID "=%d;",uid); RETURN_ON_ERROR(NULL); result = MultiplexGetNext((MultiplexEnumerator_t)stmt); STATEMENT_FINALIZE(); return result; } Multiplex_t *MultiplexFindId(int netid, int tsid) { Multiplex_t *result = NULL; STATEMENT_INIT; STATEMENT_PREPAREVA("SELECT " MULTIPLEX_FIELDS " " "FROM " MULTIPLEXES_TABLE " WHERE " MULTIPLEX_NETID "=%d AND " MULTIPLEX_TSID "=%d;", netid, tsid); RETURN_ON_ERROR(NULL); result = MultiplexGetNext((MultiplexEnumerator_t)stmt); STATEMENT_FINALIZE(); return result; } MultiplexEnumerator_t MultiplexEnumeratorGet() { STATEMENT_INIT; STATEMENT_PREPARE("SELECT " MULTIPLEX_FIELDS " " "FROM " MULTIPLEXES_TABLE ";"); RETURN_ON_ERROR(NULL); return stmt; } void MultiplexEnumeratorDestroy(MultiplexEnumerator_t enumerator) { int rc; sqlite3_stmt *stmt = (sqlite3_stmt *)enumerator; STATEMENT_FINALIZE(); } Multiplex_t *MultiplexGetNext(MultiplexEnumerator_t enumerator) { int rc; sqlite3_stmt *stmt = (sqlite3_stmt *)enumerator; char *tmp; STATEMENT_STEP(); if (rc == SQLITE_ROW) { Multiplex_t *multiplex; multiplex = MultiplexNew(); multiplex->uid = STATEMENT_COLUMN_INT(0); multiplex->tsId = STATEMENT_COLUMN_INT(1) & 0xffff; multiplex->networkId = STATEMENT_COLUMN_INT(2) & 0xffff; multiplex->deliverySystem = STATEMENT_COLUMN_INT(3); multiplex->patVersion = -1; tmp = STATEMENT_COLUMN_TEXT(4); if (tmp) { multiplex->tuningParams = strdup(tmp); } return multiplex; } if (rc != SQLITE_DONE) { PRINTLOG_SQLITE3ERROR(); } return NULL; } MultiplexList_t *MultiplexGetAll(void) { STATEMENT_INIT; int i; int count; MultiplexList_t *list; count = DBaseCount(MULTIPLEXES_TABLE, NULL); STATEMENT_PREPARE("SELECT " MULTIPLEX_FIELDS " " "FROM " MULTIPLEXES_TABLE ";"); RETURN_ON_ERROR(NULL); list = (MultiplexList_t*)ObjectCollectionCreate(TOSTRING(MultiplexList_t),count); for (i = 0; i < count; i ++) { list->multiplexes[i] = MultiplexGetNext((MultiplexEnumerator_t)stmt); } STATEMENT_FINALIZE(); return list; } int MultiplexAdd(DVBDeliverySystem_e delSys, char *tuningParams, Multiplex_t **mux) { Multiplex_t *multiplex; STATEMENT_INIT; STATEMENT_PREPAREVA("INSERT INTO " MULTIPLEXES_TABLE "(" MULTIPLEX_UID "," MULTIPLEX_TYPE "," MULTIPLEX_TUNINGPARAMS ")" "VALUES (%d, %d, %Q);", uidSeed, delSys, tuningParams); RETURN_RC_ON_ERROR; STATEMENT_STEP(); STATEMENT_FINALIZE(); multiplex = MultiplexNew(); multiplex->uid = uidSeed; uidSeed ++; multiplex->tsId = 0; multiplex->networkId = 0; multiplex->deliverySystem = delSys; multiplex->patVersion = -1; multiplex->tuningParams = strdup(tuningParams); EventsFireEventListeners(multiplexAddedEvent, multiplex); *mux = multiplex; return rc; } int MultiplexDelete(Multiplex_t *multiplex) { STATEMENT_INIT; STATEMENT_PREPAREVA("DELETE FROM " MULTIPLEXES_TABLE " WHERE " MULTIPLEX_UID "=%d;", multiplex->uid); RETURN_RC_ON_ERROR; STATEMENT_STEP(); STATEMENT_FINALIZE(); ServiceDeleteAll(multiplex); EventsFireEventListeners(multiplexRemovedEvent, multiplex); return 0; } int MultiplexTSIdSet(Multiplex_t *multiplex, int tsid) { STATEMENT_INIT; STATEMENT_PREPAREVA("UPDATE " MULTIPLEXES_TABLE " " "SET " MULTIPLEX_TSID "=%d " "WHERE " MULTIPLEX_UID "=%d;", tsid, multiplex->uid); multiplex->tsId = tsid; RETURN_RC_ON_ERROR; STATEMENT_STEP(); STATEMENT_FINALIZE(); return rc; } int MultiplexNetworkIdSet(Multiplex_t *multiplex, int netid) { STATEMENT_INIT; STATEMENT_PREPAREVA("UPDATE " MULTIPLEXES_TABLE " " "SET " MULTIPLEX_NETID "=%d " "WHERE " MULTIPLEX_UID "=%d;", netid, multiplex->uid); multiplex->networkId = netid; RETURN_RC_ON_ERROR; STATEMENT_STEP(); STATEMENT_FINALIZE(); return rc; } int MultiplexEventToString(yaml_document_t *document, Event_t event,void * payload) { Multiplex_t *mux = payload; char idStr[16]; int mappingId = yaml_document_add_mapping(document, (yaml_char_t*)YAML_MAP_TAG, YAML_ANY_MAPPING_STYLE); sprintf(idStr, "%d", mux->uid); YamlUtils_MappingAdd(document, mappingId, "Multiplex UID", idStr); sprintf(idStr, "%04x.%04x", mux->networkId & 0xffff, mux->tsId & 0xffff); YamlUtils_MappingAdd(document, mappingId, "Multiplex ID", idStr); return mappingId; } /******************************************************************************* * Local Functions * *******************************************************************************/ static void MultiplexDestructor(void *ptr) { Multiplex_t *mux = ptr; if (mux->tuningParams) { free(mux->tuningParams); } } static void MultiplexListDestructor(void *ptr) { MultiplexList_t *muxList = ptr; int i; for (i = 0; i < muxList->nrofMultiplexes; i ++) { ObjectRefDec(muxList->multiplexes[i]); } } dvbstreamer-2.1.0/src/objects.c000077500000000000000000000337321217721213100164240ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA objects.c Object memory management. */ #include #include #include #include #include #include #include "logging.h" #include "objects.h" /******************************************************************************* * Defines * *******************************************************************************/ //#define USE_MALLOC_FOR_ALLOC #define OBJECTS_ASSERT(_pred, _msg...) \ do { \ if (!(_pred)) \ { \ LogModule(LOG_ERROR, OBJECT, _msg); \ exit(1); \ } \ }while (0) #define ObjectToData(_ptr) (void *)(((char*)(_ptr)) + sizeof(Object_t)) #define DataToObject(_ptr) (Object_t *)(((char*)(_ptr)) - sizeof(Object_t)) /******************************************************************************* * Typedefs * *******************************************************************************/ typedef enum ClassType_e{ ClassType_Object, ClassType_Collection, }ClassType_t; typedef struct Class_s { char *name; ClassType_t type; unsigned int size; ObjectDestructor_t destructor; unsigned int allocatedCount; struct Class_s *next; }Class_t; typedef struct Object_s { #ifdef OBJECT_CHECK char sig[8]; #endif Class_t *clazz; int32_t refCount; uint32_t size; struct Object_s *next; }Object_t; /******************************************************************************* * Prototypes * *******************************************************************************/ static Class_t *FindClass(char *classname); static int ObjectRegisterClassType(char *name, ClassType_t type, unsigned size, ObjectDestructor_t destructor); static void *ObjectAllocInstance(int size, Class_t *clazz); static void RemoveReferencedObject(Object_t *toRemove); /******************************************************************************* * Global variables * *******************************************************************************/ static char OBJECT[] = "Object"; static Class_t *classes = NULL; static unsigned int classesCount = 0; static Object_t *referencedObjects = NULL; static pthread_mutex_t objectMutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; /******************************************************************************* * Global functions * *******************************************************************************/ int ObjectInit(void) { classes = NULL; classesCount = 0; referencedObjects = NULL; return OBJECT_OK; } int ObjectDeinit(void) { if (referencedObjects) { Object_t *current; Object_t *next; LogModule(LOG_DEBUG, OBJECT, "Objects with references outstanding:\n"); for (current = referencedObjects; current; current = next) { if (current->clazz) { LogModule(LOG_DEBUG, OBJECT, "\t%p (class %s) (refCount %u)\n", ObjectToData(current), current->clazz->name, current->refCount); } else { LogModule(LOG_DEBUG, OBJECT, "\t%p (size %u) (malloc'ed)\n", ObjectToData(current), current->size); } next = current->next; free(current); } } if (classesCount > 0) { Class_t *clazz, *next = NULL; LogModule(LOG_DEBUG, OBJECT, "%u Registered Classes:\n", classesCount); LogModule(LOG_DEBUG, OBJECT, "\tClass Name | Size | Count |Destructor?\n"); LogModule(LOG_DEBUG, OBJECT, "\t---------------------------------|------------|------------|------------\n"); for (clazz = classes; clazz; clazz = next) { LogModule(LOG_DEBUG, OBJECT, "\t%-32s | %10d | %10d | %s\n", clazz->name, clazz->size, clazz->allocatedCount, clazz->destructor ? "Yes":"No"); next = clazz->next; free(clazz->name); free(clazz); } } pthread_mutex_destroy(&objectMutex); return OBJECT_OK; } int ObjectRegisterClass(char *classname, unsigned int size, ObjectDestructor_t destructor) { int result; pthread_mutex_lock(&objectMutex); result = ObjectRegisterClassType(classname, ClassType_Object, size, destructor); if (result == OBJECT_OK) { LogModule(LOG_DEBUGV, OBJECT, "Registered Class \"%s\" size %d destructor? %s\n", classname, size, destructor? "Yes":"No"); } pthread_mutex_unlock(&objectMutex); return result; } int ObjectRegisterCollection(char *name, unsigned entrysize, ObjectDestructor_t destructor) { int result; pthread_mutex_lock(&objectMutex); result = ObjectRegisterClassType(name, ClassType_Collection, entrysize, destructor); if (result == OBJECT_OK) { LogModule(LOG_DEBUGV, OBJECT, "Registered Collection \"%s\" size %d destructor? %s\n", name, entrysize, destructor? "Yes":"No"); } pthread_mutex_unlock(&objectMutex); return result; } static int ObjectRegisterClassType(char *name, ClassType_t type, unsigned size, ObjectDestructor_t destructor) { Class_t *clazz; clazz = FindClass(name); if (clazz) { return OBJECT_ERR_CLASS_REGISTERED; } clazz = malloc(sizeof(Class_t)); if (clazz == NULL) { LogModule(LOG_ERROR, OBJECT, "No space to register class %s", name); return OBJECT_ERR_OUT_OF_MEMORY; } clazz->name = strdup(name); clazz->type = type; clazz->size = size; clazz->destructor = destructor; clazz->allocatedCount = 0; clazz->next = classes; classes = clazz; classesCount ++; return OBJECT_OK; } void *ObjectCreateImpl(char *classname, char *file, int line) { Class_t *clazz; void *result; pthread_mutex_lock(&objectMutex); clazz = FindClass(classname); if (clazz == NULL) { pthread_mutex_unlock(&objectMutex); return NULL; } result = ObjectAllocInstance(clazz->size, clazz); if (result != NULL) { LogModule(LOG_DEBUGV, OBJECT, "(%p) Created object of class \"%s\" app ptr %p (%s:%d)\n", DataToObject(result), classname, result, file, line); } else { LogModule(LOG_ERROR, OBJECT, "Failed to create object of class \"%s\"\n", classname); } clazz->allocatedCount ++; pthread_mutex_unlock(&objectMutex); return result; } ObjectCollection_t *ObjectCollectionCreateImpl(char *name, unsigned int entries, char *file, int line) { Class_t *clazz; ObjectCollection_t *result; pthread_mutex_lock(&objectMutex); clazz = FindClass(name); if (clazz == NULL) { pthread_mutex_unlock(&objectMutex); return NULL; } result = ObjectAllocInstance(sizeof(ObjectCollection_t) + (clazz->size * entries), clazz); if (result != NULL) { result->nrofEntries = entries; LogModule(LOG_DEBUGV, OBJECT, "(%p) Created collection of class \"%s\" entries %d app ptr %p (%s:%d)\n", DataToObject(result), name, entries, result, file, line); } else { LogModule(LOG_ERROR, OBJECT, "Failed to create collection of class \"%s\" entries %d\n", name, entries); } clazz->allocatedCount ++; pthread_mutex_unlock(&objectMutex); return result; } void ObjectRefIncImpl(void *ptr, char *file, int line) { Object_t *object; char *clazzName = ""; pthread_mutex_lock(&objectMutex); object = DataToObject(ptr); object->refCount ++; if (object->clazz) { clazzName = object->clazz->name; } LogModule(LOG_DIARRHEA, OBJECT, "(%p:%s) Incrementing ref count, now %d (%s:%d)\n", object, clazzName, object->refCount, file, line); pthread_mutex_unlock(&objectMutex); } bool ObjectRefDecImpl(void *ptr, char *file, int line) { bool result = TRUE; Object_t *object; char *clazzName = ""; if (ptr == NULL) { LogModule(LOG_ERROR, OBJECT, "Attempt to decrement the reference of NULL! Offending code %s:%d\n", file, line); return FALSE; } pthread_mutex_lock(&objectMutex); object = DataToObject(ptr); #ifdef OBJECT_CHECK if (memcmp("ObjectP", object->sig, 8)) { LogModule(LOG_ERROR, OBJECT, "Attempt to decrement the reference of a non-object (%p), offending code %s:%d\n", ptr, file, line); exit(1); } #endif if (object->clazz) { clazzName = object->clazz->name; } if (object->refCount > 0) { object->refCount --; LogModule(LOG_DIARRHEA, OBJECT, "(%p:%s) Decrementing ref count, now %d (%s:%d)\n", object, clazzName, object->refCount, file, line); } if (object->refCount == 0) { if (object->clazz) { LogModule(LOG_DEBUGV, OBJECT, "(%p) Releasing object of class \"%s\" app ptr %p\n",object, object->clazz->name, ptr); } else { LogModule(LOG_DEBUGV, OBJECT, "(%p) Releasing malloc'ed size %u app ptr %p\n",object, object->size, ptr); } /* Call class destructor */ if (object->clazz && object->clazz->destructor) { object->clazz->destructor(ptr); } if (object->clazz && (object->clazz->size != object->size) && (object->clazz->type == ClassType_Object)) { LogModule(LOG_ERROR, OBJECT, "(%p) Class size != Object size! (class %u object %u)\n", object, object->clazz->size, object->size); } /* Remove from referenced list */ RemoveReferencedObject(object); memset(ObjectToData(object), 0 , object->size); free(object); result = FALSE; } pthread_mutex_unlock(&objectMutex); return result; } void *ObjectAllocImpl(int size, char *file, int line) { void *result; #ifdef USE_MALLOC_FOR_ALLOC result = malloc(size); if (size) { memset(result, 0, size); } #else pthread_mutex_lock(&objectMutex); result = ObjectAllocInstance(size, NULL); if (result != NULL) { LogModule(LOG_DEBUGV, OBJECT,"(%p) Malloc'ed memory size %d app ptr %p (%s:%d)\n", DataToObject(result), size, result, file, line); } pthread_mutex_unlock(&objectMutex); #endif return result; } static void *ObjectAllocInstance(int size, Class_t *clazz) { Object_t *result = NULL; result = malloc(size + sizeof(Object_t)); if (!result) { return NULL; } memset(ObjectToData(result), 0, size); #ifdef OBJECT_CHECK memcpy(result->sig, "ObjectP", 8); #endif result->clazz = clazz; result->size = size; result->refCount = 1; result->next = referencedObjects; referencedObjects = result; return ObjectToData(result); } void ObjectFreeImpl(void *ptr, char *file, int line) { #ifdef USE_MALLOC_FOR_ALLOC free(ptr); #else Object_t *object = DataToObject(ptr); OBJECTS_ASSERT(object->clazz == NULL, "Attempt to free a class based object! (%p class %s)\n", ptr, object->clazz->name); OBJECTS_ASSERT(object->refCount == 1, "Attempt to free a memory area with a reference count > 1 (%d)\n", object->refCount); ObjectRefDecImpl(ptr, file, line); #endif } void ObjectDump(void *ptr) { Object_t *object = DataToObject(ptr); if (object->clazz) { LogModule(LOG_DEBUG, OBJECT, "Object(%p) of class \"%s\" app ptr %p ref count %u\n",object, object->clazz->name, ptr, object->refCount); } else { LogModule(LOG_DEBUG, OBJECT, "Malloc'ed(%p) size %u app ptr %p ref count %u\n",object, object->size, ptr, object->refCount); } } bool ObjectIsObject(void *ptr) { Object_t *object; Object_t *possibleObject = DataToObject(ptr); for (object = referencedObjects; object; object = object->next) { if (object == possibleObject) { return TRUE; } } return FALSE; } char * ObjectGetObjectClass(void *ptr) { char *classname = NULL; Object_t *object = DataToObject(ptr); if (object->clazz) { classname = object->clazz->name; } return classname; } int ObjectRefCount(void *ptr) { Object_t *object = DataToObject(ptr); return object->refCount; } /******************************************************************************* * Local Functions * *******************************************************************************/ static Class_t *FindClass(char *classname) { Class_t *clazz; for (clazz = classes; clazz;clazz = clazz->next) { if (strcmp(classname, clazz->name) == 0) { return clazz; } } return NULL; } static void RemoveReferencedObject(Object_t *toRemove) { Object_t *current = referencedObjects; Object_t *previous = NULL; while(current) { if (current == toRemove) { if (previous) { previous->next = current->next; } else { referencedObjects = current->next; } break; } previous = current; current = current->next; } } dvbstreamer-2.1.0/src/parsezap.c000066400000000000000000000467761217721213100166310ustar00rootroot00000000000000/* Copyright (C) 2010 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA parsezap.c Parse channels.conf file and add services to the database. Majority of the parsing code taken from the xine input_dvb plugin code. */ #include "config.h" #include #include #include #include #include #include "multiplexes.h" #include "services.h" #include "logging.h" #include "dvbadapter.h" #include "yamlutils.h" /******************************************************************************* * Typedefs * *******************************************************************************/ typedef struct { char *name; char *value; } Param; typedef struct { int value; char *text; }VDRParam; /******************************************************************************* * Prototypes * *******************************************************************************/ static char *find_param(const Param *list, const char *name); static int findMultiplex(DVBDeliverySystem_e delSys, char *freq, char *polarisation, char *satelliteNumber, Multiplex_t **mux); static int parsezapline(char * str, DVBDeliverySystem_e delSys); /******************************************************************************* * Global variables * *******************************************************************************/ static const Param inversion_list [] = { { "INVERSION_OFF", "OFF" }, { "INVERSION_ON", "ON" }, { "INVERSION_AUTO", "AUTO" }, { NULL, 0 } }; static const Param bw_list [] = { { "BANDWIDTH_6_MHZ", "6000000" }, { "BANDWIDTH_7_MHZ", "7000000" }, { "BANDWIDTH_8_MHZ", "8000000" }, { "BANDWIDTH_AUTO", "AUTO" }, { NULL, 0 } }; static const Param fec_list [] = { { "FEC_AUTO", "AUTO" }, { "FEC_1_2", "1/2" }, { "FEC_2_3", "2/3" }, { "FEC_3_4", "3/4" }, { "FEC_4_5", "4/5" }, { "FEC_5_6", "5/6" }, { "FEC_6_7", "6/7" }, { "FEC_7_8", "7/8" }, { "FEC_8_9", "8/9" }, { "FEC_NONE", "NONE" }, { NULL, 0 } }; static const VDRParam vdr_fec_list[] = { { 0, "NONE"}, { 12, "1/2" }, { 23, "2/3" }, { 34, "3/4" }, { 35, "3/5" }, { 45, "4/5" }, { 56, "5/6" }, { 67, "6/7" }, { 78, "7/8" }, { 89, "8/9" }, {910, "9/10" }, {999, "AUTO" }, {0, NULL} }; static const Param guard_list [] = { {"GUARD_INTERVAL_1_16", "1/16" }, {"GUARD_INTERVAL_1_32", "1/32" }, {"GUARD_INTERVAL_1_4", "1/4" }, {"GUARD_INTERVAL_1_8", "1/8" }, {"GUARD_INTERVAL_AUTO", "AUTO" }, { NULL, 0 } }; static const Param hierarchy_list [] = { { "HIERARCHY_NONE", "NONE" }, { "HIERARCHY_1", "1" }, { "HIERARCHY_2", "2" }, { "HIERARCHY_4", "4" }, { "HIERARCHY_AUTO", "AUTO" }, { NULL, 0 } }; static const Param modulation_list [] = { { "QPSK", "QPSK" }, { "QAM_16", "16QAM" }, { "QAM_32", "32QAM" }, { "QAM_64", "64QAM" }, { "QAM_128", "128QAM" }, { "QAM_256", "256QAM" }, { "QAM_AUTO", "AUTO QAM" }, #if defined(ENABLE_ATSC) { "8VSB", "8VSB" }, { "16VSB", "16VSB" }, #endif { NULL, 0 } }; static const VDRParam vdr_modulation_list[] = { { 16, "16QAM"}, { 32, "32QAM"}, { 64, "64QAM"}, {128, "128QAM"}, {256, "256QAM"}, { 2, "QPSK"}, { 5, "8PSK"}, { 6, "16APSK"}, { 998, "AUTO"}, { 0, NULL} }; static const Param transmissionmode_list [] = { { "TRANSMISSION_MODE_2K", "2000" }, { "TRANSMISSION_MODE_8K", "8000" }, { "TRANSMISSION_MODE_AUTO", "AUTO" }, { NULL, 0 } }; static const VDRParam vdr_rolloff_list[] = { {20, "0.20"}, {25, "0.25"}, {35, "0.35"}, { 0, NULL} }; static const char PARSEZAP[] = "ParseZap"; /******************************************************************************* * Global functions * *******************************************************************************/ int parsezapfile(char *path, DVBDeliverySystem_e delSys) { FILE *f; char str[255]; int result; int line = 0; f = fopen(path, "rb"); if (!f) { LogModule(LOG_ERROR, PARSEZAP, "Failed to open dvb channel file '%s'\n", path); return 0; } while ( fgets (str, sizeof(str), f)) { result = parsezapline(str, delSys); if (result == -1) { fprintf(stderr, "Syntax error at line %d\n", line + 1); break; } line ++; } fclose(f); return 1; } /******************************************************************************* * Local Functions * *******************************************************************************/ static char * find_param(const Param *list, const char *name) { while (list->name && strcmp(list->name, name)) { list++; } return list->value;; } static char *find_vdr_param(const VDRParam *list, char *field, char **next) { char fieldChar; fieldChar = *field; field ++; /* Skip field character */ if (*field) { int value; errno = 0; value = strtol(field, next, 10); if ((errno == 0) && (field != *next)) { int i; for (i = 0; list[i].text; i ++) { if (list[i].value == value) { return list[i].text; } } } } fprintf(stderr, "Invalid value for parameter '%C'\n", fieldChar); return NULL; } static int findMultiplex(DVBDeliverySystem_e delSys, char *freq, char *polarisation, char *satelliteNumber, Multiplex_t **mux) { bool notFound = TRUE; MultiplexList_t *muxes = MultiplexGetAll(); int i; Multiplex_t *multiplex; for (i = 0; (i < muxes->nrofMultiplexes) && notFound; i ++) { multiplex = muxes->multiplexes[i]; if (multiplex) { yaml_document_t document; yaml_node_t *root; yaml_node_t *node; memset(&document, 0, sizeof(document)); YamlUtils_Parse(multiplex->tuningParams,&document); root = yaml_document_get_root_node(&document); node = YamlUtils_MappingFind(&document, root, "Frequency"); if (node && (node->type == YAML_SCALAR_NODE) && (strcmp((char*)node->data.scalar.value, freq) == 0)) { if ((delSys == DELSYS_DVBS) || (delSys == DELSYS_DVBS2)) { node = YamlUtils_MappingFind(&document, root, "Polarisation"); if (node && (node->type == YAML_SCALAR_NODE) && (strcmp((char*)node->data.scalar.value, polarisation) == 0)) { node = YamlUtils_MappingFind(&document, root, "Satellite Number"); if (node && (node->type == YAML_SCALAR_NODE) && (strcmp((char*)node->data.scalar.value, satelliteNumber) == 0)) { *mux = multiplex; MultiplexRefInc(multiplex); notFound = FALSE; } } } else { *mux = multiplex; MultiplexRefInc(multiplex); notFound = FALSE; } } yaml_document_delete(&document); } } ObjectRefDec(muxes); return notFound; } static int parsezapline(char * str, DVBDeliverySystem_e delSys) { /* try to extract channel data from a string in the following format (DVBS) QPSK: :::: ::: (DVBS2) VDR Foramt: : :: ::::::::: (DVBC) QAM: ::::: ::: (DVBT) OFDM: ::::: :::: ::: (ATSC) VSB: ::::: = any string not containing ':' = unsigned long = 'v' or 'h' = unsigned long, usually 0 :D = symbol rate in MSyms/sec = INVERSION_ON | INVERSION_OFF | INVERSION_AUTO = FEC_1_2, FEC_2_3, FEC_3_4 .... FEC_AUTO ... FEC_NONE = QPSK, QAM_128, QAM_16 ... = BANDWIDTH_6_MHZ, BANDWIDTH_7_MHZ, BANDWIDTH_8_MHZ = = = TRANSMISSION_MODE_2K, TRANSMISSION_MODE_8K = video program id = audio program id = MPEG2 program id/DVB service id */ char params[256]; char frequency[16] = {0}; char *polarisation = NULL; char satelliteNumber[4] = {0}; unsigned long freq; char *field, *tmp; char *name; int id; int source; Multiplex_t *mux; DVBDeliverySystem_e muxDelSys = delSys; tmp = str; params[0] = 0; #define NEXTFIELD() if(!(field = strsep(&tmp, ":")))return -1 #define SETFREQ(_freq) \ do{\ sprintf(params, "Frequency: %lu\n", _freq);\ sprintf(frequency, "%lu", _freq);\ }while(0) #define PARAMADD(p...) sprintf(params + strlen(params), p) /* find the channel name */ NEXTFIELD(); name = strdup(field); /* find the frequency */ NEXTFIELD(); freq = strtoul(field,NULL,0); switch(delSys) { case DELSYS_DVBS: SETFREQ(freq * 1000); PARAMADD("Inversion: AUTO\n"); /* find out the polarisation */ NEXTFIELD(); polarisation = (field[0] == 'h' ? "Horizontal":"Vertical"); PARAMADD("Polarisation: %s\n", polarisation); /* satellite number */ NEXTFIELD(); strncpy(satelliteNumber, field, sizeof(satelliteNumber) - 1); satelliteNumber[sizeof(satelliteNumber) - 1] = 0; PARAMADD("Satellite Number: %lu\n", strtoul(field, NULL, 0)); /* symbol rate */ NEXTFIELD(); PARAMADD("Symbol Rate: %lu\n", strtoul(field, NULL, 0) * 1000); PARAMADD("FEC: AUTO\n"); break; case DELSYS_DVBS2: muxDelSys = DELSYS_MAX_SUPPORTED; SETFREQ(freq * 1000); PARAMADD("Inversion: AUTO\n"); /* find out the polarisation */ NEXTFIELD(); { char *fec = NULL; char *modulation = NULL; char *rolloff = NULL; while (field && *field) { switch (toupper(*field)) { case 'C': fec = find_vdr_param(vdr_fec_list, field, &field); break; case 'H': polarisation = "Horizontal"; field++; break; case 'I':/* ignore */ strtol(field + 1, &field, 10); break; case 'L': polarisation = "Left"; field++; break; case 'M': modulation = find_vdr_param(vdr_modulation_list, field, &field); break; case 'Z': case 'O': rolloff = find_vdr_param(vdr_rolloff_list, field, &field); break; case 'R': polarisation = "Right"; field++; break; case 'S': if (strtol(field + 1, &field, 10) == 1) { muxDelSys = DELSYS_DVBS2; } else { muxDelSys = DELSYS_DVBS; } break; case 'V': polarisation = "Vertical"; field++; break; default: return -1; } } /* default values for empty parameters */ if (fec == NULL) { fec = "AUTO"; } if (modulation == NULL) { modulation = "QPSK"; } if (muxDelSys == DELSYS_MAX_SUPPORTED) { muxDelSys = DELSYS_DVBS; } if (rolloff == NULL) { rolloff = "0.35"; } if (polarisation == NULL) { polarisation = "Vertical"; } PARAMADD("Polarisation: %s\n", polarisation); PARAMADD("FEC: %s\n", fec); if (muxDelSys == DELSYS_DVBS2) { PARAMADD("Modulation: %s\n", modulation); PARAMADD("Roll Off: %s\n", rolloff); PARAMADD("Pilot: AUTO\n"); } } /* satellite number - ignored not a number but a position */ NEXTFIELD(); PARAMADD("Satellite Number: 0\n"); strcpy(satelliteNumber, "0"); /* symbol rate */ NEXTFIELD(); PARAMADD("Symbol Rate: %lu\n", strtoul(field, NULL, 0) * 1000); break; case DELSYS_DVBC: SETFREQ(freq); /* find out the inversion */ NEXTFIELD(); PARAMADD("Inversion: %s\n", find_param(inversion_list, field)); /* find out the symbol rate */ NEXTFIELD(); PARAMADD("Symbol Rate: %lu\n",strtoul(field, NULL, 0)); /* find out the fec */ NEXTFIELD(); PARAMADD("FEC: %s\n", find_param(fec_list, field)); /* find out the qam */ NEXTFIELD(); PARAMADD("Modulation: %s\n", find_param(modulation_list, field)); break; case DELSYS_DVBT: /* DVB-T frequency is in kHz - workaround broken channels.confs */ if (freq < 1000000) { freq*=1000; } SETFREQ(freq); /* find out the inversion */ NEXTFIELD(); PARAMADD("Inversion: %s\n", find_param(inversion_list, field)); /* find out the bandwidth */ NEXTFIELD(); PARAMADD("Bandwidth: %s\n", find_param(bw_list, field)); /* find out the fec_hp */ NEXTFIELD(); PARAMADD("FEC HP: %s\n", find_param(fec_list, field)); /* find out the fec_lp */ NEXTFIELD(); PARAMADD("FEC LP: %s\n", find_param(fec_list, field)); /* find out the qam */ NEXTFIELD(); PARAMADD("Modulation: %s\n", find_param(modulation_list, field)); /* find out the transmission mode */ NEXTFIELD(); PARAMADD("Transmission Mode: %s\n", find_param(transmissionmode_list, field)); /* guard list */ NEXTFIELD(); PARAMADD("Guard Interval: %s\n", find_param(guard_list, field)); NEXTFIELD(); PARAMADD("Hierarchy: %s\n", find_param(hierarchy_list, field)); break; #if defined(ENABLE_ATSC) case DELSYS_ATSC: SETFREQ(freq); PARAMADD("Inversion: AUTO\n"); NEXTFIELD(); PARAMADD("Modulation: %s\n", find_param(modulation_list, field)); break; #endif case DELSYS_ISDBT: /* DVB-T frequency is in kHz - workaround broken channels.confs */ if (freq < 1000000) { freq*=1000; } SETFREQ(freq); /* find out the inversion */ NEXTFIELD(); PARAMADD("Inversion: %s\n", find_param(inversion_list, field)); /* find out the bandwidth */ NEXTFIELD(); PARAMADD("Bandwidth: %s\n", find_param(bw_list, field)); /* find out the fec_hp */ NEXTFIELD(); /* find out the fec_lp */ NEXTFIELD(); /* find out the qam */ NEXTFIELD(); /* find out the transmission mode */ NEXTFIELD(); PARAMADD("Transmission Mode: %s\n", find_param(transmissionmode_list, field)); /* guard list */ NEXTFIELD(); PARAMADD("Guard Interval: %s\n", find_param(guard_list, field)); NEXTFIELD(); break; default: break; } if (findMultiplex(muxDelSys, frequency, polarisation, satelliteNumber, &mux)) { LogModule(LOG_DEBUGV, PARSEZAP, "Adding frequency %d (delivery system %d)\n", freq, delSys); MultiplexAdd(muxDelSys, params, &mux); } /* Video PID - not used */ NEXTFIELD(); /* Audio PID - not used */ NEXTFIELD(); if (delSys == DELSYS_DVBS2) { /* skip vdr fields */ NEXTFIELD(); NEXTFIELD(); } /* service ID */ NEXTFIELD(); id = strtoul(field, NULL, 0); if (delSys == DELSYS_ATSC) { source = -1; } else { source = id; } LogModule(LOG_DEBUGV, PARSEZAP, "Adding service \"%s\" %d\n", name, id); if (ServiceAdd(mux->uid, name, id, source)) { LogModule(LOG_ERROR, PARSEZAP, "Failed to add service \"%s\", possible reason already in database?\n", name); } MultiplexRefDec(mux); free(name); return 0; } dvbstreamer-2.1.0/src/pids.c000077500000000000000000000227331217721213100157310ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA pids.c Manage PIDs. */ #include #include #include "dbase.h" #include "multiplexes.h" #include "services.h" #include "pids.h" #include "logging.h" /******************************************************************************* * Defines * *******************************************************************************/ #define SPECIAL_PID_PMT 0x2001 #define SPECIAL_PID_PCR 0x8000 /******************************************************************************* * Prototypes * *******************************************************************************/ static void *RollUpDescriptors(dvbpsi_descriptor_t *descriptors, int *datasize); static dvbpsi_descriptor_t *UnRollDescriptors(uint8_t *descriptors, int size); static int PIDListCount(Service_t *service); static int PIDAdd(Service_t *service, StreamInfo_t *pid); static void ProgramInfoDestructor(void *ptr); static void StreamInfoListDestructor(void *ptr); /******************************************************************************* * Global variables * *******************************************************************************/ static bool typeInited = FALSE; /******************************************************************************* * Global functions * *******************************************************************************/ ProgramInfo_t *ProgramInfoNew(int nrofStreams) { ProgramInfo_t *info; if (!typeInited) { ObjectRegisterTypeDestructor(ProgramInfo_t, ProgramInfoDestructor); ObjectRegisterCollection(TOSTRING(StreamInfoList_t), sizeof(StreamInfo_t), StreamInfoListDestructor); typeInited = TRUE; } info = ObjectCreateType(ProgramInfo_t); if (info) { info->streamInfoList =(StreamInfoList_t *)ObjectCollectionCreate(TOSTRING(StreamInfoList_t), nrofStreams); } return info; } int ProgramInfoSet(Service_t *service, ProgramInfo_t *info) { int rc = 0; int i; StreamInfo_t pid; for (i = 0; i < info->streamInfoList->nrofStreams; i ++) { rc = PIDAdd(service, &info->streamInfoList->streams[i]); if (rc) { break; } } pid.pid = SPECIAL_PID_PCR | (info->pcrPID & PID_MASK); pid.type = 0; pid.descriptors = info->descriptors; PIDAdd(service, &pid); return rc; } ProgramInfo_t *ProgramInfoGet(Service_t *service) { int count = PIDListCount(service); ProgramInfo_t *result = NULL; if (count > 0) { result = ProgramInfoNew(count); if (result) { int i; STATEMENT_INIT; STATEMENT_PREPAREVA("SELECT " PID_PID "," PID_TYPE "," PID_DESCRIPTORS " " "FROM " PIDS_TABLE " WHERE " PID_MULTIPLEXUID "=%d AND " PID_SERVICEID "=%d AND " PID_PID "<8192;", service->multiplexUID, service->id); if (rc == SQLITE_OK) { for (i = 0; i < count; i ++) { STATEMENT_STEP(); if (rc == SQLITE_ROW) { result->streamInfoList->streams[i].pid = STATEMENT_COLUMN_INT( 0); result->streamInfoList->streams[i].type = STATEMENT_COLUMN_INT( 1); result->streamInfoList->streams[i].descriptors = UnRollDescriptors((uint8_t *)sqlite3_column_blob(stmt, 2), sqlite3_column_bytes(stmt, 2)); } else { break; } } STATEMENT_FINALIZE(); STATEMENT_PREPAREVA("SELECT " PID_PID "," PID_DESCRIPTORS " " "FROM " PIDS_TABLE " WHERE " PID_MULTIPLEXUID "=%d AND " PID_SERVICEID "=%d AND " PID_PID ">%d;", service->multiplexUID, service->id, SPECIAL_PID_PCR); if (rc == SQLITE_OK) { STATEMENT_STEP(); if (rc == SQLITE_ROW) { result->pcrPID = STATEMENT_COLUMN_INT( 0) & PID_MASK; result->descriptors = UnRollDescriptors((uint8_t *)sqlite3_column_blob(stmt, 1), sqlite3_column_bytes(stmt, 1)); } STATEMENT_FINALIZE(); } } else { ObjectRefDec(result); result = NULL; } } } return result; } int ProgramInfoRemove(Service_t *service) { STATEMENT_INIT; STATEMENT_PREPAREVA("DELETE FROM " PIDS_TABLE " " "WHERE " PID_MULTIPLEXUID "=%d AND " PID_SERVICEID "=%d;", service->multiplexUID, service->id); RETURN_RC_ON_ERROR; STATEMENT_STEP(); STATEMENT_FINALIZE(); return 0; } /******************************************************************************* * Local Functions * *******************************************************************************/ static int PIDListCount(Service_t *service) { STATEMENT_INIT; int result = -1; STATEMENT_PREPAREVA("SELECT count () FROM " PIDS_TABLE " " "WHERE " PID_MULTIPLEXUID "=%d AND " PID_SERVICEID "=%d AND " PID_PID "<8192;", service->multiplexUID, service->id); RETURN_ON_ERROR(-1); STATEMENT_STEP(); if (rc == SQLITE_ROW) { result = STATEMENT_COLUMN_INT( 0); rc = 0; } STATEMENT_FINALIZE(); return result; } static int PIDAdd(Service_t *service, StreamInfo_t *pid) { void *descriptorblob; int size; STATEMENT_INIT; STATEMENT_PREPAREVA("INSERT INTO " PIDS_TABLE " (" PID_MULTIPLEXUID "," PID_SERVICEID "," PID_PID "," PID_TYPE "," PID_DESCRIPTORS ") " "VALUES (%d,%d,%d,%d,?);", service->multiplexUID, service->id, pid->pid, pid->type); RETURN_RC_ON_ERROR; descriptorblob = RollUpDescriptors(pid->descriptors, &size); sqlite3_bind_blob(stmt, 1, descriptorblob, size, free); STATEMENT_STEP(); STATEMENT_FINALIZE(); return rc; } static void *RollUpDescriptors(dvbpsi_descriptor_t *descriptors, int *datasize) { uint8_t *result; int size = 0; int pos = 0; dvbpsi_descriptor_t *current = descriptors; while (current) { size += current->i_length + 2; current = current->p_next; } if (size == 0) { *datasize = 0; return NULL; } result = malloc(size); if (!result) { LogModule(LOG_ERROR, "PIDS", "Failed to allocate memory to roll up descriptors! (size %d)\n", size ); *datasize = 0; return NULL; } current = descriptors; while (current) { result[pos ] = current->i_tag; result[pos + 1] = current->i_length; memcpy(&result[pos + 2], current->p_data, current->i_length); pos += current->i_length + 2; current = current->p_next; } *datasize = size; return result; } static dvbpsi_descriptor_t *UnRollDescriptors(uint8_t *descriptors, int size) { dvbpsi_descriptor_t *result = NULL; dvbpsi_descriptor_t *current = NULL, *prev=NULL; int pos; if (size == 0) { return NULL; } for (pos = 0; pos < size; pos += 2 + current->i_length) { current = dvbpsi_NewDescriptor(descriptors[pos], descriptors[pos + 1], &descriptors[pos + 2]); if (result) { prev->p_next = current; prev = current; } else { prev = result = current; } } return result; } static void ProgramInfoDestructor(void *ptr) { ProgramInfo_t *info = ptr; if (info->descriptors) { dvbpsi_DeleteDescriptors(info->descriptors); } ObjectRefDec(info->streamInfoList); } static void StreamInfoListDestructor(void *ptr) { StreamInfoList_t *list = ptr; int i; for (i = 0; i < list->nrofStreams; i ++) { if (list->streams[i].descriptors) { dvbpsi_DeleteDescriptors(list->streams[i].descriptors); } } } dvbstreamer-2.1.0/src/pluginmgr.c000066400000000000000000000476631217721213100170040ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA pluginmgr.c Plugin Manager functions. */ #include #include #include #include "config.h" #include "list.h" #include "deliverymethod.h" #include "pluginmgr.h" #include "plugin.h" #include "logging.h" #include "main.h" #include "tuning.h" /******************************************************************************* * Defines * *******************************************************************************/ #define PLUGIN_FEATURE_INFO(_feature) {_feature, # _feature} /******************************************************************************* * Typedefs * *******************************************************************************/ struct PluginEntry_t { lt_dlhandle handle; Plugin_t *pluginInterface; }; struct PluginFeatureInfo_t { int feature; char *name; }; /******************************************************************************* * Prototypes * *******************************************************************************/ static int PluginManagerLoadPlugin(const char *filename, void *userarg); static void PluginManagerUnloadPlugin(struct PluginEntry_t *entry); static void PluginManagerInstallPlugin(Plugin_t *pluginInterface); static void PluginManagerUninstallPlugin(Plugin_t *pluginInterface); static void PluginManagerLsPlugins(int argc, char **argv); static void PluginManagerPluginInfo(int argc, char **argv); static char *FindPluginFeatureName(int type); static void TableEventCallback(void *arg, Event_t event, void *details); /******************************************************************************* * Global variables * *******************************************************************************/ static List_t *PluginsList; static Command_t PluginManagerCommands[] = { { "lsplugins", 0, 0, "List loaded plugins.", "List all plugins that where loaded at startup.", PluginManagerLsPlugins }, { "plugininfo", 1, 1, "Display the information about a plugin.", "plugininfo \n" "Displays the version, author and descriptor for a specific plugin.", PluginManagerPluginInfo }, COMMANDS_SENTINEL }; struct PluginFeatureInfo_t pluginFeatures[] = { PLUGIN_FEATURE_INFO(PLUGIN_FEATURE_TYPE_EVENT_LISTENER), PLUGIN_FEATURE_INFO(PLUGIN_FEATURE_TYPE_PATPROCESSOR), PLUGIN_FEATURE_INFO(PLUGIN_FEATURE_TYPE_PMTPROCESSOR), PLUGIN_FEATURE_INFO(PLUGIN_FEATURE_TYPE_DELIVERYMETHOD), PLUGIN_FEATURE_INFO(PLUGIN_FEATURE_TYPE_SDTPROCESSOR), PLUGIN_FEATURE_INFO(PLUGIN_FEATURE_TYPE_NITPROCESSOR), PLUGIN_FEATURE_INFO(PLUGIN_FEATURE_TYPE_TDTPROCESSOR), PLUGIN_FEATURE_INFO(PLUGIN_FEATURE_TYPE_INSTALL), PLUGIN_FEATURE_INFO(PLUGIN_FEATURE_TYPE_MGTPROCESSOR), PLUGIN_FEATURE_INFO(PLUGIN_FEATURE_TYPE_STTPROCESSOR), PLUGIN_FEATURE_INFO(PLUGIN_FEATURE_TYPE_VCTPROCESSOR), PLUGIN_FEATURE_INFO(PLUGIN_FEATURE_TYPE_NONE) }; static char PLUGINMANAGER[] = "PluginManager"; /******************************************************************************* * Global functions * *******************************************************************************/ int PluginManagerInit(void) { ListIterator_t iterator; uint8_t isSuitableMask; lt_dlinit(); PluginsList = ListCreate(); LogModule(LOG_DEBUG, PLUGINMANAGER, "Plugin Manager Initialising...\n"); lt_dlsetsearchpath(DVBSTREAMER_PLUGINDIR); /* Load all the plugins */ lt_dlforeachfile(DVBSTREAMER_PLUGINDIR, PluginManagerLoadPlugin, NULL); isSuitableMask = MainIsDVB() ? PLUGIN_FOR_DVB:PLUGIN_FOR_ATSC; /* Process the plugins */ for ( ListIterator_Init(iterator, PluginsList); ListIterator_MoreEntries(iterator);) { struct PluginEntry_t *entry = ListIterator_Current(iterator); if ((entry->pluginInterface->pluginFor & isSuitableMask) != 0) { LogModule(LOG_DEBUG, PLUGINMANAGER,"Installing %s\n", entry->pluginInterface->name); PluginManagerInstallPlugin(entry->pluginInterface); ListIterator_Next(iterator); } else { LogModule(LOG_DEBUG, PLUGINMANAGER, "Not installing %s as not suitable.\n", entry->pluginInterface->name); lt_dlclose(entry->handle); free(entry); ListRemoveCurrent(&iterator); /* Removing an entry automatically moves to the next entry in the list */ } } CommandRegisterCommands(PluginManagerCommands); LogModule(LOG_DEBUG, PLUGINMANAGER, "Plugin Manager Initialised\n"); return 0; } void PluginManagerDeInit(void) { LogModule(LOG_DEBUG, PLUGINMANAGER,"Plugin Manager Deinitialising...\n"); CommandUnRegisterCommands(PluginManagerCommands); ListFree(PluginsList, (ListDataDestructor_t)PluginManagerUnloadPlugin); lt_dlexit(); LogModule(LOG_DEBUG, PLUGINMANAGER,"Plugin Manager Deinitialised\n"); } /******************************************************************************* * Local Functions * *******************************************************************************/ static int PluginManagerLoadPlugin(const char *filename, void *userarg) { lt_dlhandle handle = lt_dlopenext(filename); LogModule(LOG_DEBUGV, PLUGINMANAGER,"Attempting to load %s\n", filename); if (handle) { Plugin_t *pluginInterface = lt_dlsym(handle, "PluginInterface"); if (pluginInterface) { ListIterator_t iterator; struct PluginEntry_t *entry = NULL; bool addPlugin = TRUE; if (pluginInterface->requiredVersion != DVBSTREAMER_VERSION) { addPlugin = FALSE; } if (addPlugin) { /* * Only add the plugin if this is a unique plugin, ie no plugin * with the same name has already been loaded */ for ( ListIterator_Init(iterator, PluginsList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { struct PluginEntry_t *entry = ListIterator_Current(iterator); if (strcmp(pluginInterface->name, entry->pluginInterface->name) == 0) { LogModule(LOG_DEBUGV, PLUGINMANAGER,"Plugin already loaded, igoring this instance.\n"); addPlugin = FALSE; break; } } } if (addPlugin) { entry = calloc(1, sizeof(struct PluginEntry_t)); if (entry) { entry->pluginInterface = pluginInterface; entry->handle = handle; if (ListAdd(PluginsList, entry)) { LogModule(LOG_INFOV, PLUGINMANAGER, "Loaded plugin %s\n", pluginInterface->name); return 0; } free(entry); } } } else { LogModule(LOG_DEBUGV, PLUGINMANAGER,"PluginInterface not found for %s.\n", filename); } lt_dlclose(handle); } else { LogModule(LOG_DEBUGV, PLUGINMANAGER,"Failed to open plugin %s - reason %s\n", filename, lt_dlerror()); } return 0; } static void PluginManagerUnloadPlugin(struct PluginEntry_t *entry) { LogModule(LOG_DEBUG, PLUGINMANAGER, "Uninstalling %s\n", entry->pluginInterface->name); PluginManagerUninstallPlugin(entry->pluginInterface); if (entry->handle) { lt_dlclose(entry->handle); } free(entry); } static void PluginManagerInstallPlugin(Plugin_t *pluginInterface) { int i; if (pluginInterface->commands) { CommandRegisterCommands(pluginInterface->commands); } if (pluginInterface->features) { for (i = 0; pluginInterface->features[i].type != PLUGIN_FEATURE_TYPE_NONE; i++) { PluginFeature_t *feature = &pluginInterface->features[i]; switch(feature->type) { case PLUGIN_FEATURE_TYPE_EVENT_LISTENER: LogModule(LOG_DEBUGV, PLUGINMANAGER,"plugin %s: Installed event listener (%s)\n", pluginInterface->name, feature->details.eventDetails.name); EventsRegisterListenerByName(feature->details.eventDetails.name, feature->details.eventDetails.callback, feature->details.eventDetails.arg); break; case PLUGIN_FEATURE_TYPE_PATPROCESSOR: LogModule(LOG_DEBUGV, PLUGINMANAGER,"plugin %s: Installed PAT processor.\n", pluginInterface->name); EventsRegisterListenerByName("MPEG2.PAT", TableEventCallback, (void*)feature->details.patCB); break; case PLUGIN_FEATURE_TYPE_PMTPROCESSOR: LogModule(LOG_DEBUGV, PLUGINMANAGER,"plugin %s: Installed PMT processor.\n", pluginInterface->name); EventsRegisterListenerByName("MPEG2.PMT", TableEventCallback, (void*)feature->details.pmtCB); break; case PLUGIN_FEATURE_TYPE_DELIVERYMETHOD: LogModule(LOG_DEBUGV, PLUGINMANAGER,"plugin %s: Installed Delivery method.\n", pluginInterface->name); DeliveryMethodManagerRegister(&feature->details.dmHandler); break; #if defined(ENABLE_DVB) case PLUGIN_FEATURE_TYPE_SDTPROCESSOR: LogModule(LOG_DEBUGV, PLUGINMANAGER,"plugin %s: Installed SDT processor.\n", pluginInterface->name); EventsRegisterListenerByName("DVB.SDT", TableEventCallback, (void*)feature->details.sdtCB); break; case PLUGIN_FEATURE_TYPE_NITPROCESSOR: LogModule(LOG_DEBUGV, PLUGINMANAGER,"plugin %s: Installed NIT processor.\n", pluginInterface->name); EventsRegisterListenerByName("DVB.NIT", TableEventCallback, (void*)feature->details.nitCB); break; case PLUGIN_FEATURE_TYPE_TDTPROCESSOR: LogModule(LOG_DEBUGV, PLUGINMANAGER,"plugin %s: Installed TDT processor.\n", pluginInterface->name); EventsRegisterListenerByName("DVB.TDT", TableEventCallback, (void*)feature->details.tdtCB); break; #endif #if defined(ENABLE_ATSC) case PLUGIN_FEATURE_TYPE_MGTPROCESSOR: LogModule(LOG_DEBUGV, PLUGINMANAGER,"plugin %s: Installed MGT processor.\n", pluginInterface->name); EventsRegisterListenerByName("ATSC.MGT", TableEventCallback, (void*)feature->details.mgtCB); break; case PLUGIN_FEATURE_TYPE_STTPROCESSOR: LogModule(LOG_DEBUGV, PLUGINMANAGER,"plugin %s: Installed STT processor.\n", pluginInterface->name); EventsRegisterListenerByName("ATSC.STT", TableEventCallback, (void*)feature->details.sttCB); break; case PLUGIN_FEATURE_TYPE_VCTPROCESSOR: LogModule(LOG_DEBUGV, PLUGINMANAGER,"plugin %s: Installed VCT processor.\n", pluginInterface->name); EventsRegisterListenerByName("ATSC.VCT", TableEventCallback, (void*)feature->details.vctCB); break; #endif case PLUGIN_FEATURE_TYPE_INSTALL: feature->details.installCB(TRUE); break; } } } } static void PluginManagerUninstallPlugin(Plugin_t *pluginInterface) { int i; if (pluginInterface->commands) { CommandUnRegisterCommands(pluginInterface->commands); } if (pluginInterface->features) { for (i = 0; pluginInterface->features[i].type != PLUGIN_FEATURE_TYPE_NONE; i++) { PluginFeature_t *feature = &pluginInterface->features[i]; switch(feature->type) { case PLUGIN_FEATURE_TYPE_EVENT_LISTENER: LogModule(LOG_DEBUGV, PLUGINMANAGER,"plugin %s: Uninstalled event listener (%s)\n", pluginInterface->name, feature->details.eventDetails.name); EventsUnregisterListenerByName(feature->details.eventDetails.name, feature->details.eventDetails.callback, feature->details.eventDetails.arg); break; case PLUGIN_FEATURE_TYPE_PATPROCESSOR: LogModule(LOG_DEBUGV, PLUGINMANAGER,"plugin %s: Uninstalled PAT processor.\n", pluginInterface->name); EventsUnregisterListenerByName("MPEG2.PAT", TableEventCallback, (void*)feature->details.patCB); break; case PLUGIN_FEATURE_TYPE_PMTPROCESSOR: LogModule(LOG_DEBUGV, PLUGINMANAGER,"plugin %s: Uninstalled PMT processor.\n", pluginInterface->name); EventsUnregisterListenerByName("MPEG2.PMT", TableEventCallback,(void*)feature->details.pmtCB); break; case PLUGIN_FEATURE_TYPE_DELIVERYMETHOD: LogModule(LOG_DEBUGV, PLUGINMANAGER,"plugin %s: Uninstalled Delivery method.\n", pluginInterface->name); DeliveryMethodManagerRegister(&feature->details.dmHandler); break; #if defined(ENABLE_DVB) case PLUGIN_FEATURE_TYPE_SDTPROCESSOR: LogModule(LOG_DEBUGV, PLUGINMANAGER,"plugin %s: Uninstalled SDT processor.\n", pluginInterface->name); EventsUnregisterListenerByName("DVB.SDT", TableEventCallback, (void*)feature->details.sdtCB); break; case PLUGIN_FEATURE_TYPE_NITPROCESSOR: LogModule(LOG_DEBUGV, PLUGINMANAGER,"plugin %s: Uninstalled NIT processor.\n", pluginInterface->name); EventsUnregisterListenerByName("DVB.NIT", TableEventCallback, (void*)feature->details.nitCB); break; case PLUGIN_FEATURE_TYPE_TDTPROCESSOR: LogModule(LOG_DEBUGV, PLUGINMANAGER,"plugin %s: Uninstalled TDT processor.\n", pluginInterface->name); EventsUnregisterListenerByName("DVB.TDT", TableEventCallback, (void*)feature->details.tdtCB); break; #endif #if defined(ENABLE_ATSC) case PLUGIN_FEATURE_TYPE_MGTPROCESSOR: LogModule(LOG_DEBUGV, PLUGINMANAGER,"plugin %s: Uninstalled MGT processor.\n", pluginInterface->name); EventsUnregisterListenerByName("ATSC.MGT", TableEventCallback, (void*)feature->details.mgtCB); break; case PLUGIN_FEATURE_TYPE_STTPROCESSOR: LogModule(LOG_DEBUGV, PLUGINMANAGER,"plugin %s: Uninstalled STT processor.\n", pluginInterface->name); EventsUnregisterListenerByName("ATSC.STT", TableEventCallback, (void*)feature->details.sttCB); break; case PLUGIN_FEATURE_TYPE_VCTPROCESSOR: LogModule(LOG_DEBUGV, PLUGINMANAGER,"plugin %s: Uninstalled VCT processor.\n", pluginInterface->name); EventsUnregisterListenerByName("ATSC.VCT", TableEventCallback, (void*)feature->details.vctCB); break; #endif case PLUGIN_FEATURE_TYPE_INSTALL: feature->details.installCB(FALSE); break; } } } } static void PluginManagerLsPlugins(int argc, char **argv) { ListIterator_t iterator; for ( ListIterator_Init(iterator, PluginsList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { struct PluginEntry_t *entry = ListIterator_Current(iterator); CommandPrintf("%s\n", entry->pluginInterface->name); } } static void PluginManagerPluginInfo(int argc, char **argv) { ListIterator_t iterator; Plugin_t *pluginInterface = NULL; for ( ListIterator_Init(iterator, PluginsList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { struct PluginEntry_t *entry = ListIterator_Current(iterator); if (strcmp(entry->pluginInterface->name, argv[0]) == 0) { pluginInterface = entry->pluginInterface; break; } } if (pluginInterface) { int i; char *pluginFor = ""; CommandPrintf("Name : %s\n" "Version : %s\n" "Author : %s\n" "Description :\n%s\n\n", pluginInterface->name, pluginInterface->version, pluginInterface->author, pluginInterface->description); CommandPrintf("Plugin Details\n" "--------------\n"); switch(pluginInterface->pluginFor) { case PLUGIN_FOR_DVB: pluginFor = "DVB"; break; case PLUGIN_FOR_ATSC: pluginFor = "ATSC"; break; case PLUGIN_FOR_ALL: pluginFor = "All transport types"; break; } CommandPrintf("\nPlugin For : %s\n", pluginFor); CommandPrintf("\nFeatures :\n"); if (pluginInterface->features) { for (i = 0;(pluginInterface->features[i].type != PLUGIN_FEATURE_TYPE_NONE); i++) { char *name = FindPluginFeatureName(pluginInterface->features[i].type); if (name) { CommandPrintf("\t%s\n", name); } else { CommandPrintf("\t\n", pluginInterface->features[i].type); } } } else { CommandPrintf("\t\n"); } CommandPrintf("\nCommands :\n"); if (pluginInterface->commands) { for (i = 0;pluginInterface->commands[i].command; i ++) { CommandPrintf("\t%s\n", pluginInterface->commands[i].command); } } else { CommandPrintf("\t\n"); } CommandPrintf("\n"); } else { CommandPrintf("Plugin \"%s\" not found.\n", argv[0]); } } /******************************************************************************* * Local Functions * *******************************************************************************/ static char *FindPluginFeatureName(int type) { int i; for (i = 0; pluginFeatures[i].feature != PLUGIN_FEATURE_TYPE_NONE; i ++) { if (pluginFeatures[i].feature == type) { return pluginFeatures[i].name; } } return NULL; } static void TableEventCallback(void *arg, Event_t event, void *details) { void (*callback)(void*); callback = arg; callback(details); } dvbstreamer-2.1.0/src/plugins/000077500000000000000000000000001217721213100162755ustar00rootroot00000000000000dvbstreamer-2.1.0/src/plugins/Makefile.am000066400000000000000000000045611217721213100203370ustar00rootroot00000000000000# # Plugins # AM_CFLAGS =\ -I$(top_srcdir)/include -D_GNU_SOURCE -fno-strict-aliasing pluginsdir = @DVBSTREAMER_PLUGINDIR@ plugins_LTLIBRARIES = \ udpoutput.la \ fileoutput.la \ pipeoutput.la \ outputs.la \ manualfilters.la \ sicapture.la \ eventsdispatcher.la \ dsmcc.la \ cam.la \ $(atsc_plugins) \ $(dvb_plugins) if ENABLE_ATSC atsc_plugins=\ atsctoepg.la else atsc_plugins= endif if ENABLE_DVB dvb_plugins=\ lcnquery.la \ datetime.la \ dvbtoepg.la else dvb_plugins= endif udpoutput_la_SOURCES = \ udp.c \ udpoutput.c \ sap.c udpoutput_la_LDFLAGS = -module -no-undefined -avoid-version fileoutput_la_SOURCES = \ fileoutput.c fileoutput_la_LDFLAGS = -module -no-undefined -avoid-version pipeoutput_la_SOURCES = \ pipeoutput.c pipeoutput_la_LDFLAGS = -module -no-undefined -avoid-version outputs_la_SOURCES = \ outputs.c outputs_la_LDFLAGS = -module -no-undefined -avoid-version lcnquery_la_SOURCES = \ lcnquery.c lcnquery_la_LDFLAGS = -module -no-undefined -avoid-version datetime_la_SOURCES = \ datetime.c datetime_la_LDFLAGS = -module -no-undefined -avoid-version dvbtoepg_la_SOURCES = \ dvbtoepg.c \ freesat_huffman.c dvbtoepg_la_LDFLAGS = -module -no-undefined -avoid-version atsctoepg_la_SOURCES = \ atsctoepg.c atsctoepg_la_LDFLAGS = -module -no-undefined -avoid-version manualfilters_la_SOURCES = \ manualfilters.c manualfilters_la_LDFLAGS = -module -no-undefined -avoid-version sicapture_la_SOURCES = \ sicapture.c sicapture_la_LDFLAGS = -module -no-undefined -avoid-version # TODO: Rewrite to use new TSFilterGroup system. #traffic_la_SOURCES = \ # traffic.c #traffic_la_LDFLAGS = -module -no-undefined -avoid-version eventsdispatcher_la_SOURCES = \ eventsdispatcher.c eventsdispatcher_la_LDFLAGS = -module -no-undefined -avoid-version # TODO: Rewrite to use new TSFilterGroup system. #sectionfilters_la_SOURCES = \ # sectionfilters.c #sectionfilters_la_LDFLAGS = -module -no-undefined -avoid-version dsmcc_la_SOURCES = \ dsmcc.c \ libdsmcc/dsmcc-biop.c \ libdsmcc/dsmcc-cache.c \ libdsmcc/dsmcc-carousel.c \ libdsmcc/dsmcc-descriptor.c \ libdsmcc/dsmcc-receiver.c \ libdsmcc/dsmcc-util.c dsmcc_la_LIBADD = -lz dsmcc_la_LDFLAGS = -module -no-undefined -avoid-version cam_la_SOURCES = \ cam.c \ en50221.c cam_la_LDFLAGS = -module -no-undefined -avoid-versiondvbstreamer-2.1.0/src/plugins/Makefile.in000066400000000000000000001005311217721213100203420ustar00rootroot00000000000000# 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 = src/plugins DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in 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)$(pluginsdir)" LTLIBRARIES = $(plugins_LTLIBRARIES) atsctoepg_la_LIBADD = am_atsctoepg_la_OBJECTS = atsctoepg.lo atsctoepg_la_OBJECTS = $(am_atsctoepg_la_OBJECTS) atsctoepg_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(atsctoepg_la_LDFLAGS) $(LDFLAGS) -o $@ @ENABLE_ATSC_TRUE@am_atsctoepg_la_rpath = -rpath $(pluginsdir) cam_la_LIBADD = am_cam_la_OBJECTS = cam.lo en50221.lo cam_la_OBJECTS = $(am_cam_la_OBJECTS) cam_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(cam_la_LDFLAGS) \ $(LDFLAGS) -o $@ datetime_la_LIBADD = am_datetime_la_OBJECTS = datetime.lo datetime_la_OBJECTS = $(am_datetime_la_OBJECTS) datetime_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(datetime_la_LDFLAGS) $(LDFLAGS) -o $@ @ENABLE_DVB_TRUE@am_datetime_la_rpath = -rpath $(pluginsdir) dsmcc_la_DEPENDENCIES = am_dsmcc_la_OBJECTS = dsmcc.lo dsmcc-biop.lo dsmcc-cache.lo \ dsmcc-carousel.lo dsmcc-descriptor.lo dsmcc-receiver.lo \ dsmcc-util.lo dsmcc_la_OBJECTS = $(am_dsmcc_la_OBJECTS) dsmcc_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(dsmcc_la_LDFLAGS) \ $(LDFLAGS) -o $@ dvbtoepg_la_LIBADD = am_dvbtoepg_la_OBJECTS = dvbtoepg.lo freesat_huffman.lo dvbtoepg_la_OBJECTS = $(am_dvbtoepg_la_OBJECTS) dvbtoepg_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(dvbtoepg_la_LDFLAGS) $(LDFLAGS) -o $@ @ENABLE_DVB_TRUE@am_dvbtoepg_la_rpath = -rpath $(pluginsdir) eventsdispatcher_la_LIBADD = am_eventsdispatcher_la_OBJECTS = eventsdispatcher.lo eventsdispatcher_la_OBJECTS = $(am_eventsdispatcher_la_OBJECTS) eventsdispatcher_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(eventsdispatcher_la_LDFLAGS) $(LDFLAGS) -o $@ fileoutput_la_LIBADD = am_fileoutput_la_OBJECTS = fileoutput.lo fileoutput_la_OBJECTS = $(am_fileoutput_la_OBJECTS) fileoutput_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(fileoutput_la_LDFLAGS) $(LDFLAGS) -o $@ lcnquery_la_LIBADD = am_lcnquery_la_OBJECTS = lcnquery.lo lcnquery_la_OBJECTS = $(am_lcnquery_la_OBJECTS) lcnquery_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(lcnquery_la_LDFLAGS) $(LDFLAGS) -o $@ @ENABLE_DVB_TRUE@am_lcnquery_la_rpath = -rpath $(pluginsdir) manualfilters_la_LIBADD = am_manualfilters_la_OBJECTS = manualfilters.lo manualfilters_la_OBJECTS = $(am_manualfilters_la_OBJECTS) manualfilters_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(manualfilters_la_LDFLAGS) $(LDFLAGS) -o $@ outputs_la_LIBADD = am_outputs_la_OBJECTS = outputs.lo outputs_la_OBJECTS = $(am_outputs_la_OBJECTS) outputs_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(outputs_la_LDFLAGS) $(LDFLAGS) -o $@ pipeoutput_la_LIBADD = am_pipeoutput_la_OBJECTS = pipeoutput.lo pipeoutput_la_OBJECTS = $(am_pipeoutput_la_OBJECTS) pipeoutput_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(pipeoutput_la_LDFLAGS) $(LDFLAGS) -o $@ sicapture_la_LIBADD = am_sicapture_la_OBJECTS = sicapture.lo sicapture_la_OBJECTS = $(am_sicapture_la_OBJECTS) sicapture_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(sicapture_la_LDFLAGS) $(LDFLAGS) -o $@ udpoutput_la_LIBADD = am_udpoutput_la_OBJECTS = udp.lo udpoutput.lo sap.lo udpoutput_la_OBJECTS = $(am_udpoutput_la_OBJECTS) udpoutput_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(udpoutput_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) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(atsctoepg_la_SOURCES) $(cam_la_SOURCES) \ $(datetime_la_SOURCES) $(dsmcc_la_SOURCES) \ $(dvbtoepg_la_SOURCES) $(eventsdispatcher_la_SOURCES) \ $(fileoutput_la_SOURCES) $(lcnquery_la_SOURCES) \ $(manualfilters_la_SOURCES) $(outputs_la_SOURCES) \ $(pipeoutput_la_SOURCES) $(sicapture_la_SOURCES) \ $(udpoutput_la_SOURCES) DIST_SOURCES = $(atsctoepg_la_SOURCES) $(cam_la_SOURCES) \ $(datetime_la_SOURCES) $(dsmcc_la_SOURCES) \ $(dvbtoepg_la_SOURCES) $(eventsdispatcher_la_SOURCES) \ $(fileoutput_la_SOURCES) $(lcnquery_la_SOURCES) \ $(manualfilters_la_SOURCES) $(outputs_la_SOURCES) \ $(pipeoutput_la_SOURCES) $(sicapture_la_SOURCES) \ $(udpoutput_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVBSTREAMER_MAJOR = @DVBSTREAMER_MAJOR@ DVBSTREAMER_MICRO = @DVBSTREAMER_MICRO@ DVBSTREAMER_MINOR = @DVBSTREAMER_MINOR@ DVBSTREAMER_PLUGINDIR = @DVBSTREAMER_PLUGINDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETTIME_LIB = @GETTIME_LIB@ GREP = @GREP@ ICONV_LIB = @ICONV_LIB@ 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@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ NO_PREFIX_PACKAGE_DATA_DIR = @NO_PREFIX_PACKAGE_DATA_DIR@ NO_PREFIX_PACKAGE_DOC_DIR = @NO_PREFIX_PACKAGE_DOC_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATA_DIR = @PACKAGE_DATA_DIR@ PACKAGE_DOC_DIR = @PACKAGE_DOC_DIR@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ READLINE_TERMCAP = @READLINE_TERMCAP@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ 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@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ 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@ # # Plugins # AM_CFLAGS = \ -I$(top_srcdir)/include -D_GNU_SOURCE -fno-strict-aliasing pluginsdir = @DVBSTREAMER_PLUGINDIR@ plugins_LTLIBRARIES = \ udpoutput.la \ fileoutput.la \ pipeoutput.la \ outputs.la \ manualfilters.la \ sicapture.la \ eventsdispatcher.la \ dsmcc.la \ cam.la \ $(atsc_plugins) \ $(dvb_plugins) @ENABLE_ATSC_FALSE@atsc_plugins = @ENABLE_ATSC_TRUE@atsc_plugins = \ @ENABLE_ATSC_TRUE@ atsctoepg.la @ENABLE_DVB_FALSE@dvb_plugins = @ENABLE_DVB_TRUE@dvb_plugins = \ @ENABLE_DVB_TRUE@ lcnquery.la \ @ENABLE_DVB_TRUE@ datetime.la \ @ENABLE_DVB_TRUE@ dvbtoepg.la udpoutput_la_SOURCES = \ udp.c \ udpoutput.c \ sap.c udpoutput_la_LDFLAGS = -module -no-undefined -avoid-version fileoutput_la_SOURCES = \ fileoutput.c fileoutput_la_LDFLAGS = -module -no-undefined -avoid-version pipeoutput_la_SOURCES = \ pipeoutput.c pipeoutput_la_LDFLAGS = -module -no-undefined -avoid-version outputs_la_SOURCES = \ outputs.c outputs_la_LDFLAGS = -module -no-undefined -avoid-version lcnquery_la_SOURCES = \ lcnquery.c lcnquery_la_LDFLAGS = -module -no-undefined -avoid-version datetime_la_SOURCES = \ datetime.c datetime_la_LDFLAGS = -module -no-undefined -avoid-version dvbtoepg_la_SOURCES = \ dvbtoepg.c \ freesat_huffman.c dvbtoepg_la_LDFLAGS = -module -no-undefined -avoid-version atsctoepg_la_SOURCES = \ atsctoepg.c atsctoepg_la_LDFLAGS = -module -no-undefined -avoid-version manualfilters_la_SOURCES = \ manualfilters.c manualfilters_la_LDFLAGS = -module -no-undefined -avoid-version sicapture_la_SOURCES = \ sicapture.c sicapture_la_LDFLAGS = -module -no-undefined -avoid-version # TODO: Rewrite to use new TSFilterGroup system. #traffic_la_SOURCES = \ # traffic.c #traffic_la_LDFLAGS = -module -no-undefined -avoid-version eventsdispatcher_la_SOURCES = \ eventsdispatcher.c eventsdispatcher_la_LDFLAGS = -module -no-undefined -avoid-version # TODO: Rewrite to use new TSFilterGroup system. #sectionfilters_la_SOURCES = \ # sectionfilters.c #sectionfilters_la_LDFLAGS = -module -no-undefined -avoid-version dsmcc_la_SOURCES = \ dsmcc.c \ libdsmcc/dsmcc-biop.c \ libdsmcc/dsmcc-cache.c \ libdsmcc/dsmcc-carousel.c \ libdsmcc/dsmcc-descriptor.c \ libdsmcc/dsmcc-receiver.c \ libdsmcc/dsmcc-util.c dsmcc_la_LIBADD = -lz dsmcc_la_LDFLAGS = -module -no-undefined -avoid-version cam_la_SOURCES = \ cam.c \ en50221.c cam_la_LDFLAGS = -module -no-undefined -avoid-version all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(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 src/plugins/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/plugins/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-pluginsLTLIBRARIES: $(plugins_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(pluginsdir)" || $(MKDIR_P) "$(DESTDIR)$(pluginsdir)" @list='$(plugins_LTLIBRARIES)'; test -n "$(pluginsdir)" || 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)$(pluginsdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pluginsdir)"; \ } uninstall-pluginsLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(plugins_LTLIBRARIES)'; test -n "$(pluginsdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pluginsdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pluginsdir)/$$f"; \ done clean-pluginsLTLIBRARIES: -test -z "$(plugins_LTLIBRARIES)" || rm -f $(plugins_LTLIBRARIES) @list='$(plugins_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 atsctoepg.la: $(atsctoepg_la_OBJECTS) $(atsctoepg_la_DEPENDENCIES) $(atsctoepg_la_LINK) $(am_atsctoepg_la_rpath) $(atsctoepg_la_OBJECTS) $(atsctoepg_la_LIBADD) $(LIBS) cam.la: $(cam_la_OBJECTS) $(cam_la_DEPENDENCIES) $(cam_la_LINK) -rpath $(pluginsdir) $(cam_la_OBJECTS) $(cam_la_LIBADD) $(LIBS) datetime.la: $(datetime_la_OBJECTS) $(datetime_la_DEPENDENCIES) $(datetime_la_LINK) $(am_datetime_la_rpath) $(datetime_la_OBJECTS) $(datetime_la_LIBADD) $(LIBS) dsmcc.la: $(dsmcc_la_OBJECTS) $(dsmcc_la_DEPENDENCIES) $(dsmcc_la_LINK) -rpath $(pluginsdir) $(dsmcc_la_OBJECTS) $(dsmcc_la_LIBADD) $(LIBS) dvbtoepg.la: $(dvbtoepg_la_OBJECTS) $(dvbtoepg_la_DEPENDENCIES) $(dvbtoepg_la_LINK) $(am_dvbtoepg_la_rpath) $(dvbtoepg_la_OBJECTS) $(dvbtoepg_la_LIBADD) $(LIBS) eventsdispatcher.la: $(eventsdispatcher_la_OBJECTS) $(eventsdispatcher_la_DEPENDENCIES) $(eventsdispatcher_la_LINK) -rpath $(pluginsdir) $(eventsdispatcher_la_OBJECTS) $(eventsdispatcher_la_LIBADD) $(LIBS) fileoutput.la: $(fileoutput_la_OBJECTS) $(fileoutput_la_DEPENDENCIES) $(fileoutput_la_LINK) -rpath $(pluginsdir) $(fileoutput_la_OBJECTS) $(fileoutput_la_LIBADD) $(LIBS) lcnquery.la: $(lcnquery_la_OBJECTS) $(lcnquery_la_DEPENDENCIES) $(lcnquery_la_LINK) $(am_lcnquery_la_rpath) $(lcnquery_la_OBJECTS) $(lcnquery_la_LIBADD) $(LIBS) manualfilters.la: $(manualfilters_la_OBJECTS) $(manualfilters_la_DEPENDENCIES) $(manualfilters_la_LINK) -rpath $(pluginsdir) $(manualfilters_la_OBJECTS) $(manualfilters_la_LIBADD) $(LIBS) outputs.la: $(outputs_la_OBJECTS) $(outputs_la_DEPENDENCIES) $(outputs_la_LINK) -rpath $(pluginsdir) $(outputs_la_OBJECTS) $(outputs_la_LIBADD) $(LIBS) pipeoutput.la: $(pipeoutput_la_OBJECTS) $(pipeoutput_la_DEPENDENCIES) $(pipeoutput_la_LINK) -rpath $(pluginsdir) $(pipeoutput_la_OBJECTS) $(pipeoutput_la_LIBADD) $(LIBS) sicapture.la: $(sicapture_la_OBJECTS) $(sicapture_la_DEPENDENCIES) $(sicapture_la_LINK) -rpath $(pluginsdir) $(sicapture_la_OBJECTS) $(sicapture_la_LIBADD) $(LIBS) udpoutput.la: $(udpoutput_la_OBJECTS) $(udpoutput_la_DEPENDENCIES) $(udpoutput_la_LINK) -rpath $(pluginsdir) $(udpoutput_la_OBJECTS) $(udpoutput_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atsctoepg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cam.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/datetime.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsmcc-biop.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsmcc-cache.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsmcc-carousel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsmcc-descriptor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsmcc-receiver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsmcc-util.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsmcc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvbtoepg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/en50221.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eventsdispatcher.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileoutput.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/freesat_huffman.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcnquery.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/manualfilters.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/outputs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipeoutput.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sicapture.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udpoutput.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @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@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @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@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @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 $@ $< dsmcc-biop.lo: libdsmcc/dsmcc-biop.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dsmcc-biop.lo -MD -MP -MF $(DEPDIR)/dsmcc-biop.Tpo -c -o dsmcc-biop.lo `test -f 'libdsmcc/dsmcc-biop.c' || echo '$(srcdir)/'`libdsmcc/dsmcc-biop.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dsmcc-biop.Tpo $(DEPDIR)/dsmcc-biop.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libdsmcc/dsmcc-biop.c' object='dsmcc-biop.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dsmcc-biop.lo `test -f 'libdsmcc/dsmcc-biop.c' || echo '$(srcdir)/'`libdsmcc/dsmcc-biop.c dsmcc-cache.lo: libdsmcc/dsmcc-cache.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dsmcc-cache.lo -MD -MP -MF $(DEPDIR)/dsmcc-cache.Tpo -c -o dsmcc-cache.lo `test -f 'libdsmcc/dsmcc-cache.c' || echo '$(srcdir)/'`libdsmcc/dsmcc-cache.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dsmcc-cache.Tpo $(DEPDIR)/dsmcc-cache.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libdsmcc/dsmcc-cache.c' object='dsmcc-cache.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dsmcc-cache.lo `test -f 'libdsmcc/dsmcc-cache.c' || echo '$(srcdir)/'`libdsmcc/dsmcc-cache.c dsmcc-carousel.lo: libdsmcc/dsmcc-carousel.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dsmcc-carousel.lo -MD -MP -MF $(DEPDIR)/dsmcc-carousel.Tpo -c -o dsmcc-carousel.lo `test -f 'libdsmcc/dsmcc-carousel.c' || echo '$(srcdir)/'`libdsmcc/dsmcc-carousel.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dsmcc-carousel.Tpo $(DEPDIR)/dsmcc-carousel.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libdsmcc/dsmcc-carousel.c' object='dsmcc-carousel.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dsmcc-carousel.lo `test -f 'libdsmcc/dsmcc-carousel.c' || echo '$(srcdir)/'`libdsmcc/dsmcc-carousel.c dsmcc-descriptor.lo: libdsmcc/dsmcc-descriptor.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dsmcc-descriptor.lo -MD -MP -MF $(DEPDIR)/dsmcc-descriptor.Tpo -c -o dsmcc-descriptor.lo `test -f 'libdsmcc/dsmcc-descriptor.c' || echo '$(srcdir)/'`libdsmcc/dsmcc-descriptor.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dsmcc-descriptor.Tpo $(DEPDIR)/dsmcc-descriptor.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libdsmcc/dsmcc-descriptor.c' object='dsmcc-descriptor.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dsmcc-descriptor.lo `test -f 'libdsmcc/dsmcc-descriptor.c' || echo '$(srcdir)/'`libdsmcc/dsmcc-descriptor.c dsmcc-receiver.lo: libdsmcc/dsmcc-receiver.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dsmcc-receiver.lo -MD -MP -MF $(DEPDIR)/dsmcc-receiver.Tpo -c -o dsmcc-receiver.lo `test -f 'libdsmcc/dsmcc-receiver.c' || echo '$(srcdir)/'`libdsmcc/dsmcc-receiver.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dsmcc-receiver.Tpo $(DEPDIR)/dsmcc-receiver.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libdsmcc/dsmcc-receiver.c' object='dsmcc-receiver.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dsmcc-receiver.lo `test -f 'libdsmcc/dsmcc-receiver.c' || echo '$(srcdir)/'`libdsmcc/dsmcc-receiver.c dsmcc-util.lo: libdsmcc/dsmcc-util.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dsmcc-util.lo -MD -MP -MF $(DEPDIR)/dsmcc-util.Tpo -c -o dsmcc-util.lo `test -f 'libdsmcc/dsmcc-util.c' || echo '$(srcdir)/'`libdsmcc/dsmcc-util.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dsmcc-util.Tpo $(DEPDIR)/dsmcc-util.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libdsmcc/dsmcc-util.c' object='dsmcc-util.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dsmcc-util.lo `test -f 'libdsmcc/dsmcc-util.c' || echo '$(srcdir)/'`libdsmcc/dsmcc-util.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 check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(pluginsdir)"; 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-pluginsLTLIBRARIES \ 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-pluginsLTLIBRARIES 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-pluginsLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-pluginsLTLIBRARIES 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-pluginsLTLIBRARIES \ 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-pluginsLTLIBRARIES # 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: dvbstreamer-2.1.0/src/plugins/atsctoepg.c000077500000000000000000000347621217721213100204510ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA atsctoepg.c Plugin to collect EPG schedule information from ATSC/PSIP. */ #include #include #include #include #include #include #include "plugin.h" #include "epgchannel.h" #include "dvbpsi/atsc/ett.h" #include "dvbpsi/atsc/eit.h" #include "main.h" #include "list.h" #include "logging.h" #include "atsctext.h" #include "tuning.h" #include "deferredproc.h" /******************************************************************************* * Defines * *******************************************************************************/ #define MAX_EITS 128 /* Maximum number of EIT tables (PIDs) */ #define MAX_ETTS 128 /* Maximum number of ETT tables (PIDs) */ /******************************************************************************* * Typedefs * *******************************************************************************/ typedef struct TableInfo_s { uint16_t pid; dvbpsi_handle decoder; }TableInfo_t; typedef struct TSCEPGDeferredInfo_s { uint16_t netId; uint16_t tsId; union { dvbpsi_atsc_ett_t *ett; dvbpsi_atsc_eit_t *eit; } u; }ATSCEPGDeferredInfo_t; /******************************************************************************* * Prototypes * *******************************************************************************/ static void Install(bool installed); static void NewMGT(dvbpsi_atsc_mgt_t *newMGT); static void NewSTT(dvbpsi_atsc_stt_t *newSTT); static void ATSCtoEPGFilterGroupEventCallback(void *arg, TSFilterGroup_t *group, TSFilterEventType_e event, void *details); static void ClearTableInfo(void); static void StartEPGCapture(void); static void SubTableHandler(void * arg, dvbpsi_handle demuxHandle, uint8_t tableId, uint16_t extension); static void ProcessETT(void *arg, dvbpsi_atsc_ett_t *newETT); static void ProcessEIT(void *arg, dvbpsi_atsc_eit_t *newEIT); static void DeferredProcessEIT(void *arg); static void DeferredProcessETT(void *arg); static void ProcessEvent(EPGServiceRef_t *serviceRef, dvbpsi_atsc_eit_event_t *event); static void DumpDescriptor(char *prefix, dvbpsi_descriptor_t *descriptor); static void ConvertToTM(uint32_t startSeconds, uint32_t duration, struct tm *startTime, struct tm *endTime); static void CommandEPGCapRestart(int argc, char **argv); static void CommandEPGCapStart(int argc, char **argv); static void CommandEPGCapStop(int argc, char **argv); /******************************************************************************* * Global variables * *******************************************************************************/ static const char ATSCTOEPG[] = "ATSCtoEPG"; static TSFilterGroup_t *tsgroup = NULL; static uint8_t GPStoUTCSecondsOffset = 14; /* From the test streams 24th May 2007 */ static int EventInfoTableCount = 0; static TableInfo_t EventInfoTableInfo[MAX_EITS]; static int ExtendedTextTableCount = 0; static TableInfo_t ExtendedTextTableInfo[MAX_ETTS]; /******************************************************************************* * Plugin Setup * *******************************************************************************/ PLUGIN_FEATURES( PLUGIN_FEATURE_INSTALL(Install), PLUGIN_FEATURE_MGTPROCESSOR(NewMGT), PLUGIN_FEATURE_STTPROCESSOR(NewSTT) ); PLUGIN_COMMANDS({ "epgcaprestart", 0, 0, "Starts or restarts the capturing of EPG content.", "Starts or restarts the capturing of EPG content, for use by EPG capture applications.", CommandEPGCapRestart }, { "epgcapstart", 0, 0, "Starts the capturing of EPG content.", "Starts the capturing of EPG content, for use by EPG capture applications.", CommandEPGCapStart }, { "epgcapstop", 0, 0, "Stops the capturing of EPG content.", "Stops the capturing of EPG content, for use by EPG capture applications.", CommandEPGCapStop } ); PLUGIN_INTERFACE_CF( PLUGIN_FOR_ATSC, "ATSCtoEPG", "0.3", "Plugin to capture ATSC EPG schedule information.", "charrea6@users.sourceforge.net" ); /******************************************************************************* * Filter Functions * *******************************************************************************/ static void Install(bool installed) { if (installed) { ObjectRegisterType(ATSCEPGDeferredInfo_t); } } static void ClearTableInfo(void) { int i; if (tsgroup) { TSFilterGroupRemoveAllFilters(tsgroup); for (i = 0; i < EventInfoTableCount; i ++) { dvbpsi_DetachDemux(EventInfoTableInfo[i].decoder); } for (i = 0; i < ExtendedTextTableCount; i ++) { dvbpsi_atsc_DetachETT(ExtendedTextTableInfo[i].decoder); } } EventInfoTableCount = 0; ExtendedTextTableCount = 0; } static void NewMGT(dvbpsi_atsc_mgt_t *newMGT) { dvbpsi_atsc_mgt_table_t * table; ClearTableInfo(); for (table = newMGT->p_first_table; table; table = table->p_next) { if ((table->i_type >= 0x100) && (table->i_type <= 0x17f)) { EventInfoTableInfo[EventInfoTableCount].pid = table->i_pid; EventInfoTableCount ++; } if ((table->i_type >= 0x200) && (table->i_type <= 0x27f)) { ExtendedTextTableInfo[ExtendedTextTableCount].pid = table->i_pid; ExtendedTextTableCount ++; } } if (tsgroup) { StartEPGCapture(); } } static void NewSTT(dvbpsi_atsc_stt_t *newSTT) { GPStoUTCSecondsOffset = newSTT->i_gps_utc_offset; } static void ATSCtoEPGFilterGroupEventCallback(void *arg, TSFilterGroup_t *group, TSFilterEventType_e event, void *details) { if (event == TSFilterEventType_MuxChanged) { ClearTableInfo(); } } static void SubTableHandler(void * arg, dvbpsi_handle demuxHandle, uint8_t tableId, uint16_t extension) { dvbpsi_atsc_AttachEIT(demuxHandle, tableId, extension, ProcessEIT, NULL); } static void ProcessETT(void *arg, dvbpsi_atsc_ett_t *newETT) { Multiplex_t *multiplex = TuningCurrentMultiplexGet(); ATSCEPGDeferredInfo_t *info = ObjectCreateType(ATSCEPGDeferredInfo_t); info->netId = multiplex->networkId; info->tsId = multiplex->tsId; info->u.ett = newETT; DeferredProcessingAddJob(DeferredProcessETT, info); ObjectRefDec(info); MultiplexRefDec(multiplex); } static void ProcessEIT(void *arg, dvbpsi_atsc_eit_t *newEIT) { Multiplex_t *multiplex = TuningCurrentMultiplexGet(); ATSCEPGDeferredInfo_t *info = ObjectCreateType(ATSCEPGDeferredInfo_t); info->netId = multiplex->networkId; info->tsId = multiplex->tsId; info->u.eit = newEIT; DeferredProcessingAddJob(DeferredProcessEIT, info); ObjectRefDec(info); MultiplexRefDec(multiplex); } static void DeferredProcessEIT(void *arg) { ATSCEPGDeferredInfo_t *info = (ATSCEPGDeferredInfo_t*)arg; dvbpsi_atsc_eit_t *eit = info->u.eit; EPGServiceRef_t serviceRef; dvbpsi_atsc_eit_event_t *event; LogModule(LOG_DEBUG, ATSCTOEPG, "Processing EIT (version %d) source id %x\n", eit->i_version, eit->i_source_id); serviceRef.netId = info->netId; serviceRef.tsId = info->tsId; serviceRef.serviceId = eit->i_source_id; for (event = eit->p_first_event; event; event = event->p_next) { ProcessEvent(&serviceRef, event); } ObjectRefDec(eit); ObjectRefDec(info); } static void DeferredProcessETT(void *arg) { ATSCEPGDeferredInfo_t *info = (ATSCEPGDeferredInfo_t*)arg; ATSCMultipleStrings_t *description; dvbpsi_atsc_ett_t *ett = info->u.ett; EPGEventRef_t eventRef; char lang[4]; int i; eventRef.serviceRef.netId = info->netId; eventRef.serviceRef.tsId = info->tsId; eventRef.serviceRef.serviceId = (ett->i_etm_id >> 16) & 0xffff; eventRef.eventId = (ett->i_etm_id & 0xffff) >> 2; lang[3] = 0; description = ATSCMultipleStringsConvert(ett->p_etm, ett->i_etm_length); LogModule(LOG_DEBUG, ATSCTOEPG,"Processing ETT for %04x.%04x.%04x.%04x (%08x): Number of strings %d\n", eventRef.serviceRef.netId, eventRef.serviceRef.tsId, eventRef.serviceRef.serviceId, eventRef.eventId, ett->i_etm_id, description->number_of_strings); for (i = 0; i < description->number_of_strings; i ++) { LogModule(LOG_DEBUG, ATSCTOEPG, "%d : (%c%c%c) %s\n", i + 1, description->strings[i].lang[0],description->strings[i].lang[1],description->strings[i].lang[2], description->strings[i].text); lang[0] = description->strings[i].lang[0]; lang[1] = description->strings[i].lang[1]; lang[2] = description->strings[i].lang[2]; EPGChannelNewDetail(&eventRef, lang, EPG_EVENT_DETAIL_DESCRIPTION,description->strings[i].text); } ObjectRefDec(description); ObjectRefDec(ett); ObjectRefDec(info); } /******************************************************************************* * Command Functions * *******************************************************************************/ static void CommandEPGCapRestart(int argc, char **argv) { if (!tsgroup) { CommandEPGCapStart(argc, argv); return; } ClearTableInfo(); StartEPGCapture(); } static void CommandEPGCapStart(int argc, char **argv) { tsgroup = TSReaderCreateFilterGroup(MainTSReaderGet(), ATSCTOEPG, "ATSC", ATSCtoEPGFilterGroupEventCallback, NULL); StartEPGCapture(); } static void CommandEPGCapStop(int argc, char **argv) { if (!tsgroup) { CommandError(COMMAND_ERROR_GENERIC, "Not yet started!"); return; } ClearTableInfo(); TSFilterGroupDestroy(tsgroup); tsgroup = NULL; } /******************************************************************************* * Helper Functions * *******************************************************************************/ static void StartEPGCapture(void) { int i; for (i = 0; i < EventInfoTableCount; i ++) { EventInfoTableInfo[i].decoder = dvbpsi_AttachDemux(SubTableHandler, NULL); TSFilterGroupAddSectionFilter(tsgroup, EventInfoTableInfo[i].pid, 3, EventInfoTableInfo[i].decoder); } for (i = 0; i < ExtendedTextTableCount; i ++) { ExtendedTextTableInfo[i].decoder = dvbpsi_atsc_AttachETT(ProcessETT, NULL); TSFilterGroupAddSectionFilter(tsgroup,ExtendedTextTableInfo[i].pid, 3, ExtendedTextTableInfo[i].decoder); } } static void ProcessEvent(EPGServiceRef_t *serviceRef, dvbpsi_atsc_eit_event_t *eitevent) { EPGEventRef_t eventRef; dvbpsi_descriptor_t *descriptor; struct tm startTime; struct tm endTime; char startTimeStr[25]; char endTimeStr[25]; ATSCMultipleStrings_t *title; int i; char lang[4]; eventRef.serviceRef = *serviceRef; eventRef.eventId = eitevent->i_event_id; ConvertToTM(eitevent->i_start_time, eitevent->i_length_seconds, &startTime, &endTime); strftime(startTimeStr, sizeof(startTimeStr), "%Y-%m-%d %T", &startTime); strftime(endTimeStr, sizeof(startTimeStr), "%Y-%m-%d %T", &endTime); LogModule(LOG_DEBUG, ATSCTOEPG, "Processing EIT for %04x.%04x.%04x.%04x Start Time %s (%d) End Time %s (duration %d) Title Length %d ETM location=%d\n", eventRef.serviceRef.netId, eventRef.serviceRef.tsId, eventRef.serviceRef.serviceId, eventRef.eventId, startTimeStr,eitevent->i_start_time, endTimeStr, eitevent->i_length_seconds, eitevent->i_title_length, eitevent->i_etm_location); if (EPGChannelNewEvent(&eventRef, &startTime, &endTime, FALSE) != 0) { return; } lang[3] = 0; title = ATSCMultipleStringsConvert(eitevent->i_title, eitevent->i_title_length); for (i = 0; i < title->number_of_strings; i ++) { LogModule(LOG_DEBUG, ATSCTOEPG, "%d : (%c%c%c) %s\n", i + 1, title->strings[i].lang[0],title->strings[i].lang[1],title->strings[i].lang[2], title->strings[i].text); lang[0] = title->strings[i].lang[0]; lang[1] = title->strings[i].lang[1]; lang[2] = title->strings[i].lang[2]; EPGChannelNewDetail(&eventRef, lang, EPG_EVENT_DETAIL_TITLE,title->strings[i].text); } ObjectRefDec(title); LogModule(LOG_DEBUGV, ATSCTOEPG, "Start of Descriptors\n"); for (descriptor = eitevent->p_first_descriptor; descriptor; descriptor = descriptor->p_next) { DumpDescriptor("\t", descriptor); } LogModule(LOG_DEBUGV, ATSCTOEPG, "End of Descriptors:\n"); } static void ConvertToTM(uint32_t startSeconds, uint32_t duration, struct tm *startTime, struct tm *endTime) { struct tm *temp_time; time_t secs; secs = startSeconds + dvbpsi_atsc_unix_epoch_offset - GPStoUTCSecondsOffset; temp_time = gmtime(&secs); *startTime = *temp_time; secs += duration; temp_time = gmtime(&secs); *endTime = *temp_time; } static void DumpDescriptor(char *prefix, dvbpsi_descriptor_t *descriptor) { int i; char line[(16 * 3) + 1]; line[0] = 0; LogModule(LOG_DEBUGV, ATSCTOEPG, "%sTag : 0x%02x (Length %d)\n", prefix, descriptor->i_tag, descriptor->i_length); for (i = 0; i < descriptor->i_length; i ++) { if (i && ((i % 16) == 0)) { LogModule(LOG_DEBUGV, ATSCTOEPG, "%s%s\n", prefix, line); line[0] = 0; } sprintf(line + strlen(line), "%02x ", descriptor->p_data[i]); } if (line[0]) { LogModule(LOG_DEBUGV, ATSCTOEPG, "%s%s\n", prefix, line); } } dvbstreamer-2.1.0/src/plugins/cam.c000066400000000000000000000133361217721213100172070ustar00rootroot00000000000000/* Copyright (C) 2010 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA cam.c Plugin to enable use of a CAM to decrypt content. */ #include #include #include #include #include #include #include "logging.h" #include "plugin.h" #include "dvbpsi/pmt.h" #include "dispatchers.h" #include "properties.h" #include "servicefilter.h" #include "main.h" #include #include "en50221.h" /******************************************************************************* * Prototypes * *******************************************************************************/ static void Install(bool installed); static void ProcessPMT(dvbpsi_pmt_t *pmt); static bool PMTDoesNeedDecrypting(dvbpsi_pmt_t *pmt); /******************************************************************************* * Global variables * *******************************************************************************/ static char CAM[] = "CAM"; static ev_timer pollTimer; static ServiceFilter_t primaryFilter = NULL; static dvbpsi_pmt_t *currentPMT = NULL; /******************************************************************************* * Plugin Setup * *******************************************************************************/ PLUGIN_FEATURES( PLUGIN_FEATURE_INSTALL(Install), PLUGIN_FEATURE_PMTPROCESSOR(ProcessPMT) ); PLUGIN_INTERFACE_F( PLUGIN_FOR_ALL, "CAM", "1.0", "Plugin uses a CAM to decrypt broadcast streams.", "charrea6@users.sourceforge.net" ); /******************************************************************************* * CAM Processing Function * *******************************************************************************/ void demux_ResendCAPMTs(void) { /* Resend PMTs */ if (currentPMT) { en50221_AddPMT(currentPMT); } } /******************************************************************************* * PMT Processing Function * *******************************************************************************/ static void ProcessPMT(dvbpsi_pmt_t *pmt) { bool was_decrypting = false; bool needs_decrypting = false; Service_t *service; if (!primaryFilter) { return; } service = ServiceFilterServiceGet(primaryFilter); if (pmt->i_program_number == service->id) { needs_decrypting = PMTDoesNeedDecypting(pmt); if (currentPMT) { if (needs_decrypting) { en50221_UpdatePMT(pmt); } else { en50221_DeletePMT(currentPMT); } ObjectRefDec(currentPMT); currentPMT = NULL; } else { if (needs_decrypting) { en50221_AddPMT(currentPMT); } } if (needs_decrypting) { currentPMT = pmt; ObjectRefInc(pmt); } } } static void camPollTimer(struct ev_loop *loop, ev_timer *w, int revents) { en50221_Poll(); } /******************************************************************************* * Local Functions * *******************************************************************************/ static void Install(bool installed) { if (installed) { PropertyValue_t adapterProp; LogModule(LOG_INFO, CAM, "Installing"); /* Register for service filter events */ if (PropertiesGet("adapter.number", &adapterProp)) { LogModule(LOG_ERROR, CAM, "Failed to get adapter number!"); } else { ev_tstamp timeout = (ev_tstamp)i_ca_timeout / 1000000.0; en50221_Init(adapterProp.u.integer); ev_timer_init(&pollTimer, camPollTimer, timeout, timeout); ev_timer_start(DispatchersGetInput(), &pollTimer); /* Only bother to retrieve the primary filter if we have a CAM */ if (i_ca_handle) { primaryFilter = MainServiceFilterGetPrimary(); } } } else { /* Unregister service filter events */ LogModule(LOG_INFO, CAM, "Uninstalling"); ev_timer_stop(DispatchersGetInput(), &pollTimer); en50221_Reset(); } } static bool PMTDoesNeedDecrypting(dvbpsi_pmt_t *pmt) { dvbpsi_descriptor_t *desc; dvbpsi_pmt_es_t *es; for(desc = pmt->p_first_descriptor; desc; desc = desc->p_next) { if (desc->i_tag == 9) { return true; } } for (es = pmt->p_first_es; es; es = es->p_next) { for(desc = es->p_first_descriptor; desc; desc = desc->p_next) { if (desc->i_tag == 9) { return true; } } } return false; }dvbstreamer-2.1.0/src/plugins/datetime.c000077500000000000000000000126751217721213100202530ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA datetime.c Example plugin to print out the date/time from the TDT. */ #include #include #include #include #include #include "logging.h" #include "plugin.h" #include "yamlutils.h" #include "dvbpsi/datetime.h" #include "dvbpsi/tdttot.h" #include "dvbpsi/atsc/stt.h" /******************************************************************************* * Prototypes * *******************************************************************************/ static void ProcessTDT(dvbpsi_tdt_tot_t *tdt); static void ProcessSTT(dvbpsi_atsc_stt_t *stt); static long GetMonotonicTime(void); static void CommandDateTime(int argc, char **argv); static void DateTimeInstall(bool installed); static int DateTimeEventToString(yaml_document_t *document, Event_t event, void *payload); /******************************************************************************* * Global variables * *******************************************************************************/ static time_t lastDateTime; static long lastReceived = 0; static bool timeReceived = FALSE; static EventSource_t timeSource; static Event_t timeReceivedEvent; /******************************************************************************* * Plugin Setup * *******************************************************************************/ PLUGIN_FEATURES( PLUGIN_FEATURE_INSTALL(DateTimeInstall), PLUGIN_FEATURE_TDTPROCESSOR(ProcessTDT), PLUGIN_FEATURE_STTPROCESSOR(ProcessSTT) ); PLUGIN_COMMANDS( { "date", 0, 0, "Display the last date/time received.", "Display the last date/time received.", CommandDateTime } ); PLUGIN_INTERFACE_CF( PLUGIN_FOR_ALL, "Date/Time", "1.0", "Plugin that receives the current date/time from the broadcast stream.", "charrea6@users.sourceforge.net" ); /******************************************************************************* * NIT Processing Function * *******************************************************************************/ static void ProcessTDT(dvbpsi_tdt_tot_t *tdt) { lastDateTime = timegm(&tdt->t_date_time); lastReceived = GetMonotonicTime(); timeReceived = TRUE; EventsFireEventListeners(timeReceivedEvent, (void*)lastDateTime); } static void ProcessSTT(dvbpsi_atsc_stt_t *stt) { lastDateTime = dvbpsi_atsc_unix_epoch_offset + stt->i_system_time - stt->i_gps_utc_offset; lastReceived = GetMonotonicTime(); timeReceived = TRUE; EventsFireEventListeners(timeReceivedEvent, (void*)lastDateTime); } static long GetMonotonicTime(void) { struct timespec now; if (clock_gettime(CLOCK_MONOTONIC, &now) == -1) { /* Monotonic time failed use real time instead */ clock_gettime(CLOCK_REALTIME, &now); } return (now.tv_sec * 1000) + ((now.tv_nsec)/ 1000000.0); } /******************************************************************************* * Command Functions * *******************************************************************************/ static void CommandDateTime(int argc, char **argv) { if (timeReceived) { CommandPrintf("%s", ctime(&lastDateTime)); CommandPrintf("Last received %d ms ago.\n", GetMonotonicTime() - lastReceived); } else { CommandPrintf("No date/time has been received!\n"); } } /******************************************************************************* * Local Functions * *******************************************************************************/ static void DateTimeInstall(bool installed) { if (installed) { timeSource = EventsRegisterSource("DateTime"); timeReceivedEvent = EventsRegisterEvent(timeSource, "Received", DateTimeEventToString); } else { EventsUnregisterSource(timeSource); } } static int DateTimeEventToString(yaml_document_t *document, Event_t event, void *payload) { time_t t = (time_t)payload; int mappingId; char secondsStr[20]; char timeStr[256]; struct tm timeTm; mappingId = yaml_document_add_mapping(document, (yaml_char_t*)YAML_MAP_TAG, YAML_ANY_MAPPING_STYLE); asctime_r(localtime_r(&t, &timeTm), timeStr); timeStr[strlen(timeStr)-1] = 0; sprintf(secondsStr, "%ld", t); YamlUtils_MappingAdd(document, mappingId, "Time", timeStr); YamlUtils_MappingAdd(document, mappingId, "Seconds since epoch", secondsStr); return mappingId; }dvbstreamer-2.1.0/src/plugins/dsmcc.c000066400000000000000000000507131217721213100175400ustar00rootroot00000000000000/* Copyright (C) 2010 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dsmcc.c Plugin to download DSM-CC data. */ #include #include #include #include #include #include #include #include "dvbpsi/dvbpsi.h" #include "dvbpsi/descriptor.h" #include "dvbpsi/dr.h" #include "dvbpsi/sections.h" #include "plugin.h" #include "main.h" #include "list.h" #include "logging.h" #include "servicefilter.h" #include "ts.h" #include "tuning.h" #include "events.h" #include "pids.h" #include "cache.h" #include "libdsmcc/libdsmcc.h" /******************************************************************************* * Defines * *******************************************************************************/ #define DSMCC_FILTER_PRIORITY 5 #define INVALID_PID 0xffff #define TAG_CAROUSEL_ID_DESCRIPTOR 0x13 #define TAG_ASSOCIATION_TAG_DESCRIPTOR 0x14 #define TAG_STREAM_ID_DESCRIPTOR 0x52 #define TAG_DATA_BROADCAST_ID_DESCRIPTOR 0x66 /******************************************************************************* * Typedefs * *******************************************************************************/ struct DSMCCDownloadSession_s; typedef struct DSMCCPID_s { uint16_t pid; uint16_t tag; uint32_t carouselId; dvbpsi_handle sectionFilter; struct DSMCCDownloadSession_s *session; }DSMCCPID_t; typedef struct DSMCCDownloadSession_s { Service_t *service; List_t *pids; TSFilterGroup_t *filterGroup; struct dsmcc_status status; }DSMCCDownloadSession_t; typedef struct DSMCCSession_s { ServiceFilter_t filter; DSMCCDownloadSession_t *downloadSession; }DSMCCSession_t; /******************************************************************************* * Prototypes * *******************************************************************************/ static void Install(bool installed); static void CommandEnableDSMCC(int argc, char **argv); static void CommandDisableDSMCC(int argc, char **argv); static void CommandDSMCCInfo(int argc, char **argv); static void HandleServiceFilterRemoved(void *arg, Event_t event, void *payload); static void HandleServiceFilterChanged(void *arg, Event_t event, void *payload); static void HandleTuningMultiplexChanged(void *arg, Event_t event, void *payload); static void HandleCachePIDsUpdatedChanged(void *arg, Event_t event, void *payload); static void EnableSession(DSMCCSession_t *session); static void SessionDestructor(void *arg); static void DownloadSessionDestructor(void *arg); static void DSMCCPIDDestructor(void *arg); static DSMCCDownloadSession_t *DownloadSessionGet(Service_t *service); static void DownloadSessionProcessPIDs(DSMCCDownloadSession_t *session); bool DownloadSessionPIDAdd(DSMCCDownloadSession_t *session, uint16_t pid, uint32_t carouselId); static void DSMCCSectionCallback(void *p_cb_data, dvbpsi_handle h_dvbpsi, dvbpsi_psi_section_t* p_section); /******************************************************************************* * Global variables * *******************************************************************************/ static char DSMCC[]="DSMCC"; /* static char dsmccSectionFilterType[] = "DSMCC"; */ static List_t *sessions = NULL; static List_t *downloadSessions = NULL; static pthread_mutex_t sessionMutex = PTHREAD_MUTEX_INITIALIZER; /******************************************************************************* * Plugin Setup * *******************************************************************************/ PLUGIN_COMMANDS( { "enabledsmcc", 1, 1, "Enable DSM-CC data download for the specified service filter.", "enabledsmcc \n" "Enable DSM-CC data download for the specified service filter.", CommandEnableDSMCC }, { "disabledsmcc", 1, 1, "Disable DSM-CC data download for the specified service filter.", "disabledsmcc \n" "Disable DSM-CC data download for the specified service filter.", CommandDisableDSMCC }, { "dsmccinfo", 1, 1, "Display DSM-CC info for the specified service filter.", "dsmccinfo \n" "Display DSM-CC info for the specified service filter.", CommandDSMCCInfo } ); PLUGIN_FEATURES( PLUGIN_FEATURE_INSTALL(Install) ); PLUGIN_INTERFACE_CF( PLUGIN_FOR_ALL, "DSMCC", "0.1", "Plugin to allow DSM-CC download.", "charrea6@users.sourceforge.net" ); /******************************************************************************* * Global Functions * *******************************************************************************/ static void Install(bool installed) { Event_t removedEvent= EventsFindEvent("ServiceFilter.Removed"); Event_t changedEvent= EventsFindEvent("ServiceFilter.ServiceChanged"); Event_t muxChangedEvent = EventsFindEvent("Tuning.MultiplexChanged"); Event_t cachePidsUpdatedEvent = EventsFindEvent("Cache.PIDsUpdated"); if (installed) { ObjectRegisterTypeDestructor(DSMCCSession_t, SessionDestructor); ObjectRegisterTypeDestructor(DSMCCDownloadSession_t, DownloadSessionDestructor); ObjectRegisterTypeDestructor(DSMCCPID_t, DSMCCPIDDestructor); sessions = ObjectListCreate(); downloadSessions = ObjectListCreate(); EventsRegisterEventListener(removedEvent, HandleServiceFilterRemoved, NULL); EventsRegisterEventListener(changedEvent, HandleServiceFilterChanged, NULL); EventsRegisterEventListener(muxChangedEvent, HandleTuningMultiplexChanged, NULL); EventsRegisterEventListener(cachePidsUpdatedEvent, HandleCachePIDsUpdatedChanged, NULL); } else { EventsUnregisterEventListener(removedEvent, HandleServiceFilterRemoved, NULL); EventsUnregisterEventListener(changedEvent, HandleServiceFilterChanged, NULL); EventsUnregisterEventListener(muxChangedEvent, HandleTuningMultiplexChanged, NULL); EventsUnregisterEventListener(cachePidsUpdatedEvent, HandleCachePIDsUpdatedChanged, NULL); ObjectListFree(sessions); ObjectListFree(downloadSessions); } } /******************************************************************************* * Command Functions * *******************************************************************************/ static void CommandEnableDSMCC(int argc, char **argv) { ListIterator_t iterator; TSReader_t *reader = MainTSReaderGet(); ServiceFilter_t filter = ServiceFilterFindFilter(reader, argv[0]); DSMCCSession_t *session; bool found = FALSE; if (filter == NULL) { CommandError(COMMAND_ERROR_GENERIC, "Failed to find service filter"); return; } pthread_mutex_lock(&sessionMutex); ListIterator_ForEach(iterator, sessions) { session = ListIterator_Current(iterator); if (session->filter == filter) { /* We are already downloading DSMCC data for this filter. */ found = TRUE; break; } } if (!found) { session = ObjectCreateType(DSMCCSession_t); session->filter = filter; EnableSession(session); ListAdd(sessions, session); } pthread_mutex_unlock(&sessionMutex); } static void CommandDisableDSMCC(int argc, char **argv) { ListIterator_t iterator; TSReader_t *reader = MainTSReaderGet(); ServiceFilter_t filter = ServiceFilterFindFilter(reader, argv[0]); DSMCCSession_t *session; if (filter == NULL) { CommandError(COMMAND_ERROR_GENERIC, "Failed to find service filter"); return; } pthread_mutex_lock(&sessionMutex); ListIterator_ForEach(iterator, sessions) { session = ListIterator_Current(iterator); if (session->filter == filter) { ListRemoveCurrent(&iterator); ObjectRefDec(session); break; } } pthread_mutex_unlock(&sessionMutex); } static void CommandDSMCCInfo(int argc, char **argv) { } static void HandleServiceFilterRemoved(void *arg, Event_t event, void *payload) { ListIterator_t iterator; ServiceFilter_t filter = payload; DSMCCSession_t *session; pthread_mutex_lock(&sessionMutex); ListIterator_ForEach(iterator, sessions) { session = ListIterator_Current(iterator); if (session->filter == filter) { LogModule(LOG_DEBUG, DSMCC, "Removing DSMCC session for service filter %s", ServiceFilterNameGet(filter)); ObjectRefDec(session); ListRemoveCurrent(&iterator); break; } } pthread_mutex_unlock(&sessionMutex); } static void HandleServiceFilterChanged(void *arg, Event_t event, void *payload) { ListIterator_t iterator; ServiceFilter_t filter = payload; DSMCCSession_t *session; pthread_mutex_lock(&sessionMutex); ListIterator_ForEach(iterator, sessions) { session = ListIterator_Current(iterator); if (session->filter == filter) { LogModule(LOG_DEBUG, DSMCC, "Re-enabling DSMCC session for service filter %s", ServiceFilterNameGet(filter)); EnableSession(session); break; } } pthread_mutex_unlock(&sessionMutex); } static void HandleTuningMultiplexChanged(void *arg, Event_t event, void *payload) { Multiplex_t *mux = payload; ListIterator_t iterator, pidIterator; pthread_mutex_lock(&sessionMutex); ListIterator_ForEach(iterator, downloadSessions) { DSMCCDownloadSession_t *session = ListIterator_Current(iterator); TSFilterGroupRemoveAllFilters(session->filterGroup); ListIterator_ForEach(pidIterator, session->pids) { DSMCCPID_t *pid = ListIterator_Current(pidIterator); if (session->service->multiplexUID == mux->uid) { pid->sectionFilter = dvbpsi_AttachSections(DSMCCSectionCallback, pid); TSFilterGroupAddSectionFilter(session->filterGroup, pid->pid, DSMCC_FILTER_PRIORITY, pid->sectionFilter); } else { if (pid->sectionFilter) { dvbpsi_DetachSections(pid->sectionFilter); pid->sectionFilter = NULL; } } } } pthread_mutex_unlock(&sessionMutex); } static void HandleCachePIDsUpdatedChanged(void *arg, Event_t event, void *payload) { ListIterator_t iterator; pthread_mutex_lock(&sessionMutex); ListIterator_ForEach(iterator, downloadSessions) { DSMCCDownloadSession_t *session = ListIterator_Current(iterator); if (session->service == payload) { /* DownloadSessionProcessPIDs(session); */ } } pthread_mutex_unlock(&sessionMutex); } static void EnableSession(DSMCCSession_t *session) { Service_t *service; if (session->downloadSession) { ObjectRefDec(session->downloadSession); } service = ServiceFilterServiceGet(session->filter); if (service) { session->downloadSession = DownloadSessionGet(service); } else { session->downloadSession = NULL; } } static DSMCCDownloadSession_t *DownloadSessionGet(Service_t *service) { char idStr[SERVICE_ID_STRING_LENGTH]; ListIterator_t iterator; DSMCCDownloadSession_t *session; ListIterator_ForEach(iterator, downloadSessions) { session = ListIterator_Current(iterator); if (ServiceAreEqual(service, session->service)) { return session; } } session = ObjectCreateType(DSMCCDownloadSession_t); session->service = service; session->pids = ListCreate(); ServiceRefInc(service); session->filterGroup = TSReaderCreateFilterGroup(MainTSReaderGet(), service->name, "DSMCC", NULL, NULL); ListAdd(downloadSessions, session); ServiceGetIDStr(service, idStr); dsmcc_init(&session->status, idStr); DownloadSessionProcessPIDs(session); return session; } static void SessionDestructor(void *arg) { DSMCCSession_t *session = arg; if (session->downloadSession) { ObjectRefDec(session->downloadSession); } } static void DownloadSessionDestructor(void *arg) { DSMCCDownloadSession_t *session = arg; TSFilterGroupDestroy(session->filterGroup); ServiceRefDec(session->service); dsmcc_free(&session->status); ObjectListFree(session->pids); ListRemove(downloadSessions, arg); } static void DSMCCPIDDestructor(void *arg) { DSMCCPID_t *pid = arg; if (pid->sectionFilter) { dvbpsi_DetachSections(pid->sectionFilter); } } static void DownloadSessionProcessPIDs(DSMCCDownloadSession_t *session) { ProgramInfo_t *info= CacheProgramInfoGet(session->service); if (info != NULL) { int i; int carouselIndex = 0; printf("Processing PIDS...\n"); for (i = 0; i < info->streamInfoList->nrofStreams; i ++) { printf("%2d : %u %x\n", i , info->streamInfoList->streams[i].pid, info->streamInfoList->streams[i].type); if ((info->streamInfoList->streams[i].type == 0x0b) || (info->streamInfoList->streams[i].type == 0x18)) { dvbpsi_descriptor_t *desc; uint32_t carouselId = 0; uint32_t dataBroadcastId = 0; for (desc = info->streamInfoList->streams[i].descriptors; desc; desc = desc->p_next) { printf("\t0x%02x %u\n", desc->i_tag, desc->i_length & 0xff); switch (desc->i_tag) { case TAG_CAROUSEL_ID_DESCRIPTOR: { dvbpsi_carousel_id_dr_t *carousel_id_dr = dvbpsi_DecodeCarouselIdDr(desc); if (carousel_id_dr) { printf("\t\tCarousel Id = %d\n", carousel_id_dr->i_carousel_id); carouselId = carousel_id_dr->i_carousel_id; } } break; case TAG_DATA_BROADCAST_ID_DESCRIPTOR: { dvbpsi_data_broadcast_id_dr_t *data_bcast_id = dvbpsi_DecodeDataBroadcastIdDr(desc); if (data_bcast_id) { printf("\t\tData Broadcast id = %d\n", data_bcast_id->i_data_broadcast_id); dataBroadcastId = data_bcast_id->i_data_broadcast_id; } } break; case TAG_ASSOCIATION_TAG_DESCRIPTOR: { dvbpsi_association_tag_dr_t *assoc_tag_dr = dvbpsi_DecodeAssociationTagDr(desc); if (assoc_tag_dr) { printf("\t\tAssociation Tag = %u\n", assoc_tag_dr->i_tag); } } break; case TAG_STREAM_ID_DESCRIPTOR: { dvbpsi_stream_identifier_dr_t *stream_id_dr = dvbpsi_DecodeStreamIdentifierDr(desc); if (stream_id_dr) { printf("\t\tStream identifiter = %u\n", stream_id_dr->i_component_tag); } } break; } } if (dataBroadcastId) { printf("Add pid %u for carousel id %u (index %d)\n", info->streamInfoList->streams[i].pid, carouselId, carouselIndex); session->status.carousels[carouselIndex].id = carouselId; DownloadSessionPIDAdd(session, info->streamInfoList->streams[i].pid, carouselId); } } } printf("PIDs Processed.\n"); ObjectRefDec(info); } } static uint16_t AssociationTagToPID(Service_t *service, uint16_t tag) { int i; ProgramInfo_t *info = CacheProgramInfoGet(service); if (info == NULL) { return INVALID_PID; } for (i = 0; i < info->streamInfoList->nrofStreams; i ++) { dvbpsi_descriptor_t *desc; for (desc = info->streamInfoList->streams[i].descriptors; desc; desc = desc->p_next) { if (desc->i_tag == TAG_ASSOCIATION_TAG_DESCRIPTOR) { dvbpsi_association_tag_dr_t *assoc_tag_dr = dvbpsi_DecodeAssociationTagDr(desc); if (assoc_tag_dr && (assoc_tag_dr->i_tag == tag)) { ObjectRefDec(info); return info->streamInfoList->streams[i].pid; } } if (desc->i_tag == TAG_STREAM_ID_DESCRIPTOR) { dvbpsi_stream_identifier_dr_t *stream_id_dr = dvbpsi_DecodeStreamIdentifierDr(desc); if (stream_id_dr && (stream_id_dr->i_component_tag == tag)) { ObjectRefDec(info); return info->streamInfoList->streams[i].pid; } } } } ObjectRefDec(info); return INVALID_PID; } bool DownloadSessionPIDAdd(DSMCCDownloadSession_t *session, uint16_t pid, uint32_t carouselId) { ListIterator_t iterator; Multiplex_t *mux; DSMCCPID_t *dsmccPID; ListIterator_ForEach(iterator, session->pids) { dsmccPID = ListIterator_Current(iterator); if (dsmccPID->pid == pid) { /* Already filtering this PID */ return FALSE; } } dsmccPID = ObjectCreateType(DSMCCPID_t); dsmccPID->pid = pid; dsmccPID->carouselId = carouselId; dsmccPID->session = session; ListAdd(session->pids, dsmccPID); mux = TuningCurrentMultiplexGet(); if (mux->uid == session->service->multiplexUID) { dsmccPID->sectionFilter = dvbpsi_AttachSections(DSMCCSectionCallback, dsmccPID); TSFilterGroupAddSectionFilter(session->filterGroup, pid, DSMCC_FILTER_PRIORITY, dsmccPID->sectionFilter); } ObjectRefDec(mux); return TRUE; } static void DSMCCSectionCallback(void *p_cb_data, dvbpsi_handle h_dvbpsi, dvbpsi_psi_section_t* p_section) { DSMCCPID_t *dsmccPID = p_cb_data; DSMCCDownloadSession_t *session = dsmccPID->session; dsmcc_process_section(&session->status, p_section->p_data, p_section->i_length, dsmccPID->carouselId); /* Process new required streams */ if (session->status.newstreams != NULL) { struct stream_request *streamreq, *nextstream; for (streamreq = session->status.newstreams; streamreq; streamreq = nextstream) { uint16_t pid = AssociationTagToPID(session->service, streamreq->assoc_tag); DownloadSessionPIDAdd(session, pid, streamreq->carouselId); nextstream = streamreq->next; free(streamreq); } session->status.newstreams = NULL; } dvbpsi_ReleasePSISections(h_dvbpsi, p_section); } dvbstreamer-2.1.0/src/plugins/dvbtoepg.c000077500000000000000000000630051217721213100202620ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA schedule.c Plugin to collect EPG schedule information. */ #include #include #include #include #include #include #include "plugin.h" #include "main.h" #include "epgchannel.h" #include "dvbpsi/datetime.h" #include "dvbpsi/eit.h" #include "dvbpsi/dr_4d.h" #include "dvbpsi/dr_4e.h" #include "dvbpsi/dr_55.h" #include "dvbpsi/dr_76.h" #include "list.h" #include "logging.h" #include "dvbtext.h" #include "deferredproc.h" #include "freesat_huffman.h" /******************************************************************************* * Defines * *******************************************************************************/ #define PID_FREESAT_EIT 3842 #define MAX_STRING_LEN 256 #define SHORT_EVENT_DR 0x4d #define EXTENDED_EVENT_DR 0x4e #define PARENTAL_RATINGS_DR 0x55 #define CRID_DR 0x76 #define UK_FREEVIEW_CONTENT 49 #define UK_FREEVIEW_SERIES 50 #define EED_MAX_TEXT_DESCS 16 /******************************************************************************* * Typedefs * *******************************************************************************/ typedef struct ExtTextDesc_s { char lang[4]; char *text[16]; }ExtTextDesc_t; typedef struct NNEvent_s { char name[MAX_STRING_LEN]; char description[MAX_STRING_LEN]; struct tm startTime; uint32_t duration; }NNEvent_t; typedef struct ServiceNowNextInfo_s { uint16_t networkId; uint16_t tsId; uint16_t serviceId; NNEvent_t now; NNEvent_t next; }ServiceNowNextInfo_t; /******************************************************************************* * Prototypes * *******************************************************************************/ static void Install(bool installed); static void SubTableHandler(void * arg, dvbpsi_handle demuxHandle, uint8_t tableId, uint16_t extension); static void ProcessEIT(void *arg, dvbpsi_eit_t *newEIT); static void ProcessPFEIT(void *arg, dvbpsi_eit_t *newEIT); static void DeferredProcessEIT(void *arg); static void CommandEPGCapRestart(int argc, char **argv); static void CommandEPGCapStart(int argc, char **argv); static void CommandEPGCapStop(int argc, char **argv); static void ProcessEvent(EPGServiceRef_t *serviceRef, dvbpsi_eit_event_t *event); static void ConvertToTM(struct tm *startTime, uint32_t duration, struct tm *endTime); static char *ResolveCRID(EPGServiceRef_t *serviceRef, char *relativeCRID); static void ExtTextDescDestructor(void *ptr); static void CommandNow(int argc, char **argv); static void CommandNext(int argc, char **argv); static void PrintEvent(NNEvent_t *event); static ServiceNowNextInfo_t *FindServiceName(char *name); static ServiceNowNextInfo_t *FindService(uint16_t networkId, uint16_t tsId, uint16_t serviceId); static void SubTableHandler(void * arg, dvbpsi_handle demuxHandle, uint8_t tableId, uint16_t extension); static void ProcessPFEIT(void *arg, dvbpsi_eit_t *newEIT); static void UpdateEvent(NNEvent_t *event, dvbpsi_eit_event_t *eitevent); /******************************************************************************* * Global variables * *******************************************************************************/ static const char DVBTOEPG[] = "DVBtoEPG"; static const char ISO639NoLinguisticContent[] = "zxx"; static char *RatingsTable[] = { "Undefined", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18" }; /******************************************************************************* * Plugin Setup * *******************************************************************************/ PLUGIN_FEATURES( PLUGIN_FEATURE_INSTALL(Install) ); PLUGIN_COMMANDS({ "epgcaprestart", 0, 0, "Starts or restarts the capturing of EPG content.", "Starts or restarts the capturing of EPG content, for use by EPG capture applications.", CommandEPGCapRestart }, { "epgcapstart", 0, 0, "Starts the capturing of EPG content.", "Starts the capturing of EPG content, for use by EPG capture applications.", CommandEPGCapStart }, { "epgcapstop", 0, 0, "Stops the capturing of EPG content.", "Stops the capturing of EPG content, for use by EPG capture applications.", CommandEPGCapStop }, { "now", 1, 1, "Display the current program on the specified service.", "now \n" "Display the current program on the specified service (assuming the data is " "present on the current TS).", CommandNow }, { "next", 1, 1, "Display the next program on the specified service.", "next \n" "Display the next program on the specified service (assuming the data is " "present on the current TS).", CommandNext } ); PLUGIN_INTERFACE_CF( PLUGIN_FOR_DVB, "DVBTOEPG", "0.3", "Plugin to capture DVB EPG schedule information.", "charrea6@users.sourceforge.net" ); /******************************************************************************* * Global variables * *******************************************************************************/ static TSFilterGroup_t *tsgroup = NULL; static dvbpsi_handle eitDemux = NULL, freesatDemux = NULL; static List_t *serviceNowNextInfoList; /******************************************************************************* * Filter Functions * *******************************************************************************/ static void Install(bool installed) { if (installed) { serviceNowNextInfoList = ListCreate(); ObjectRegisterTypeDestructor(ExtTextDesc_t, ExtTextDescDestructor); } else { if (tsgroup) { TSFilterGroupDestroy(tsgroup); dvbpsi_DetachDemux(eitDemux); dvbpsi_DetachDemux(freesatDemux); } ListFree(serviceNowNextInfoList, free); } } static void DVBtoEPGFilterGroupEventCallback(void *arg, TSFilterGroup_t *group, TSFilterEventType_e event, void *details) { if ((event == TSFilterEventType_MuxChanged) && tsgroup) { if (eitDemux) { TSFilterGroupRemoveSectionFilter(tsgroup, PID_EIT); TSFilterGroupRemoveSectionFilter(tsgroup, PID_FREESAT_EIT); dvbpsi_DetachDemux(eitDemux); dvbpsi_DetachDemux(freesatDemux); } eitDemux = dvbpsi_AttachDemux(SubTableHandler, NULL); TSFilterGroupAddSectionFilter(tsgroup, PID_EIT, 3, eitDemux); freesatDemux = dvbpsi_AttachDemux(SubTableHandler, NULL); TSFilterGroupAddSectionFilter(tsgroup, PID_FREESAT_EIT, 3, freesatDemux); } } static void SubTableHandler(void * arg, dvbpsi_handle demuxHandle, uint8_t tableId, uint16_t extension) { LogModule(LOG_DEBUG, DVBTOEPG, "Request for Sub-Table handler for %#02x (%#04x)\n", tableId, extension); switch (tableId) { case TABLE_ID_PF_ACTUAL: dvbpsi_AttachEIT(demuxHandle, tableId, extension, ProcessPFEIT, NULL); break; case TABLE_ID_PF_OTHER: dvbpsi_AttachEIT(demuxHandle, tableId, extension, ProcessPFEIT, NULL); break; case 0x50 ... 0x6f: dvbpsi_AttachEIT(demuxHandle, tableId, extension, ProcessEIT, NULL); break; } } static void ProcessEIT(void *arg, dvbpsi_eit_t *newEIT) { LogModule(LOG_DEBUG, DVBTOEPG, "EIT received (version %d) net id %x ts id %x service id %x\n", newEIT->i_version, newEIT->i_network_id, newEIT->i_ts_id, newEIT->i_service_id); DeferredProcessingAddJob(DeferredProcessEIT, newEIT ); ObjectRefDec(newEIT); } static void DeferredProcessEIT(void *arg) { dvbpsi_eit_t *eit = (dvbpsi_eit_t *)arg; EPGServiceRef_t serviceRef; dvbpsi_eit_event_t *event; LogModule(LOG_DEBUG, DVBTOEPG, "Processing EIT (version %d) net id %x ts id %x service id %x\n", eit->i_version, eit->i_network_id, eit->i_ts_id, eit->i_service_id); serviceRef.netId = eit->i_network_id; serviceRef.tsId = eit->i_ts_id; serviceRef.serviceId = eit->i_service_id; for (event = eit->p_first_event; event; event = event->p_next) { ProcessEvent(&serviceRef, event); } ObjectRefDec(eit); } /******************************************************************************* * Command Functions * *******************************************************************************/ static void CommandEPGCapRestart(int argc, char **argv) { if (tsgroup) { DVBtoEPGFilterGroupEventCallback(NULL, tsgroup, TSFilterEventType_MuxChanged, NULL); } } static void CommandEPGCapStart(int argc, char **argv) { if (tsgroup) { CommandError(COMMAND_ERROR_GENERIC, "Already started!"); return; } tsgroup = TSReaderCreateFilterGroup(MainTSReaderGet(), DVBTOEPG, "DVB", DVBtoEPGFilterGroupEventCallback, NULL); eitDemux = dvbpsi_AttachDemux(SubTableHandler, NULL); TSFilterGroupAddSectionFilter(tsgroup, PID_EIT, 3, eitDemux); freesatDemux = dvbpsi_AttachDemux(SubTableHandler, NULL); TSFilterGroupAddSectionFilter(tsgroup, PID_FREESAT_EIT, 3, freesatDemux); } static void CommandEPGCapStop(int argc, char **argv) { if (!tsgroup) { CommandError(COMMAND_ERROR_GENERIC, "Not yet started!"); return; } TSFilterGroupDestroy(tsgroup); dvbpsi_DetachDemux(eitDemux); dvbpsi_DetachDemux(freesatDemux); eitDemux = NULL; freesatDemux = NULL; tsgroup = NULL; } static void CommandNow(int argc, char **argv) { ServiceNowNextInfo_t *info = FindServiceName(argv[0]); if (info) { PrintEvent(&info->now); } else { CommandError(COMMAND_ERROR_GENERIC, "No info found for \"%s\"", argv[0]); } } static void CommandNext(int argc, char **argv) { ServiceNowNextInfo_t *info = FindServiceName(argv[0]); if (info) { PrintEvent(&info->next); } else { CommandError(COMMAND_ERROR_GENERIC, "No info found for \"%s\"", argv[0]); } } static void PrintEvent(NNEvent_t *event) { int h,m,s; time_t startTime = timegm(&event->startTime); time_t endTime = startTime + event->duration; CommandPrintf("Name : %s\n", event->name); CommandPrintf("Start time : %s", ctime(&startTime)); CommandPrintf("End time : %s", ctime(&endTime)); h = event->duration / (60*60); m = (event->duration / 60) - (h * 60); s = event->duration - ((h * 60 * 60) + (m * 60)); CommandPrintf("Duration : %02d:%02d:%02d\n", h, m, s); CommandPrintf("Description:\n%s\n", event->description); } /******************************************************************************* * Helper Functions * *******************************************************************************/ static void ProcessEvent(EPGServiceRef_t *serviceRef, dvbpsi_eit_event_t *eitevent) { EPGEventRef_t eventRef; dvbpsi_descriptor_t *descriptor; struct tm endTime; char startTimeStr[25]; char endTimeStr[25]; ListIterator_t iterator; List_t *extTextDescs = ObjectListCreate(); eventRef.serviceRef = *serviceRef; eventRef.eventId = eitevent->i_event_id; ConvertToTM(&eitevent->t_start_time, eitevent->i_duration, &endTime); if (LogLevelIsEnabled(LOG_DEBUG)) { strftime(startTimeStr, sizeof(startTimeStr), "%Y-%m-%d %T", &eitevent->t_start_time); strftime(endTimeStr, sizeof(startTimeStr), "%Y-%m-%d %T", &endTime); LogModule(LOG_DEBUG, DVBTOEPG, "(%x:%x:%x) Event %x Start Time %s End Time %s\n", eventRef.serviceRef.netId, eventRef.serviceRef.tsId, eventRef.serviceRef.serviceId, eventRef.eventId, startTimeStr, endTimeStr); } if (EPGChannelNewEvent(&eventRef, &eitevent->t_start_time, &endTime, eitevent->b_free_ca) != 0) { LogModule(LOG_DEBUG, DVBTOEPG, "Failed to send returning..."); return; } for (descriptor = eitevent->p_first_descriptor; descriptor; descriptor = descriptor->p_next) { LogModule(LOG_DEBUG, DVBTOEPG, "Tag %02x", descriptor->i_tag); switch(descriptor->i_tag) { case SHORT_EVENT_DR: { char lang[4]; char *temp; dvbpsi_short_event_dr_t * sed = dvbpsi_DecodeShortEventDr(descriptor); lang[0] = sed->i_iso_639_code[0]; lang[1] = sed->i_iso_639_code[1]; lang[2] = sed->i_iso_639_code[2]; lang[3] = 0; if (sed->i_event_name[0] == 0x1f) { /* Freesat huffman encoding */ temp = freesat_huffman_to_string(sed->i_event_name, sed->i_event_name_length); } else { temp = DVBTextToUTF8((char *)sed->i_event_name, sed->i_event_name_length); } if (temp) { EPGChannelNewDetail(&eventRef, lang, EPG_EVENT_DETAIL_TITLE, temp); free(temp); } if (sed->i_text[0] == 0x1f) { /* Freesat hufman encoding */ temp = freesat_huffman_to_string(sed->i_text, sed->i_text_length); } else { temp = DVBTextToUTF8((char *)sed->i_text, sed->i_text_length); } if (temp) { EPGChannelNewDetail(&eventRef, lang, EPG_EVENT_DETAIL_DESCRIPTION, temp); free(temp); } } break; case EXTENDED_EVENT_DR: { char lang[4]; char *temp; ExtTextDesc_t *desc = NULL; dvbpsi_extended_event_dr_t *eed = dvbpsi_DecodeExtendedEventDr(descriptor); LogModule(LOG_DEBUG, DVBTOEPG, "EED: Descriptor number %d of %d", eed->i_descriptor_number, eed->i_last_descriptor_number); lang[0] = eed->i_iso_639_code[0]; lang[1] = eed->i_iso_639_code[1]; lang[2] = eed->i_iso_639_code[2]; lang[3] = 0; if (eed->i_text[0] == 0x1f) { /* Freesat hufman encoding */ temp = NULL; } else { temp = DVBTextToUTF8((char *)eed->i_text, eed->i_text_length); } if (temp) { for (ListIterator_Init(iterator, extTextDescs); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { ExtTextDesc_t *cur = ListIterator_Current(iterator); if (strcmp(cur->lang, lang) == 0) { desc = cur; break; } } if (desc == NULL) { desc = ObjectCreateType(ExtTextDesc_t); strcpy(desc->lang, lang); ListAdd(extTextDescs, desc); } desc->text[eed->i_descriptor_number] = temp; LogModule(LOG_DEBUG, DVBTOEPG, "EED: Text \"%s\"", temp); } } break; case PARENTAL_RATINGS_DR: { dvbpsi_parental_rating_dr_t * prd = dvbpsi_DecodeParentalRatingDr(descriptor); char cc[4]; int i; cc[3] = 0; for (i=0; i < prd->i_ratings_number; i ++) { cc[0] = prd->p_parental_rating[i].i_country_code >> 16; cc[1] = prd->p_parental_rating[i].i_country_code >> 8; cc[2] = prd->p_parental_rating[i].i_country_code >> 0; if (prd->p_parental_rating[i].i_rating < 0x0f) { char *rating = RatingsTable[prd->p_parental_rating[i].i_rating]; EPGChannelNewRating(&eventRef, cc, rating); } } } break; case CRID_DR: { dvbpsi_content_id_dr_t * cridd = dvbpsi_DecodeContentIdDr(descriptor); int i; char *type = NULL; LogModule(LOG_DEBUG, DVBTOEPG, "CRID Descriptor with %d entries\n", cridd->i_number_of_entries); for (i = 0;i < cridd->i_number_of_entries; i ++) { LogModule(LOG_DEBUG, DVBTOEPG, "%d) Type : %d\n", i, cridd->p_entries[i].i_type); switch (cridd->p_entries[i].i_type) { case UK_FREEVIEW_CONTENT: case CRID_TYPE_CONTENT: type = "content"; break; case UK_FREEVIEW_SERIES: case CRID_TYPE_SERIES: type = "series"; break; default: type = NULL; break; } LogModule(LOG_DEBUG, DVBTOEPG, "%d) Location: %d\n", i, cridd->p_entries[i].i_location); if (cridd->p_entries[i].i_location == CRID_LOCATION_DESCRIPTOR) { LogModule(LOG_DEBUG, DVBTOEPG, "%d) Path : %s\n", i, cridd->p_entries[i].value.path); if (type) { if (cridd->p_entries[i].value.path[0] == '/') { char *crid = ResolveCRID(serviceRef, (char*)cridd->p_entries[i].value.path); if (crid) { EPGChannelNewDetail(&eventRef, (char*)ISO639NoLinguisticContent, type, crid); free(crid); } } else { EPGChannelNewDetail(&eventRef, (char*)ISO639NoLinguisticContent, type, (char *)cridd->p_entries[i].value.path); } } } else { LogModule(LOG_DEBUG, DVBTOEPG, "%d) Ref : %d\n", i, cridd->p_entries[i].value.ref); } } } break; } } for (ListIterator_Init(iterator, extTextDescs); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { ExtTextDesc_t *cur = ListIterator_Current(iterator); char *text; int len = 0; int i; for (i = 0; i < EED_MAX_TEXT_DESCS; i ++) { if (cur->text[i]!= NULL) { len += strlen(cur->text[i]); } } text = malloc(len + 1); text[0] = 0; for (i = 0; i < EED_MAX_TEXT_DESCS; i ++) { if (cur->text[i]!= NULL) { strcat(text, cur->text[i]); } } EPGChannelNewDetail(&eventRef, cur->lang, EPG_EVENT_DETAIL_DESCRIPTION, text); free(text); } ObjectListFree(extTextDescs); LogModule(LOG_DEBUG, DVBTOEPG, "(%x:%x:%x) Event %x Finished\n", eventRef.serviceRef.netId, eventRef.serviceRef.tsId, eventRef.serviceRef.serviceId, eventRef.eventId); } static void ConvertToTM(struct tm *startTime, uint32_t duration, struct tm *endTime) { struct tm *temp_time; time_t secs; secs = timegm(startTime); secs += duration; temp_time = gmtime(&secs); *endTime = *temp_time; } static char *ResolveCRID(EPGServiceRef_t *serviceRef, char *relativeCRID) { char *result = NULL; Service_t *service; service = ServiceFindFQID(serviceRef->netId, serviceRef->tsId, serviceRef->serviceId); if (service) { if (service->defaultAuthority) { if (asprintf(&result, "%s%s", service->defaultAuthority,relativeCRID) == -1) { LogModule(LOG_INFO, DVBTOEPG, "Failed to allocate memory for resolved CRID string."); } } ServiceRefDec(service); } return result; } static void ExtTextDescDestructor(void *ptr) { ExtTextDesc_t *ext = ptr; int i; for (i = 0; i < EED_MAX_TEXT_DESCS; i ++) { if (ext->text[i] != NULL) { free(ext->text[i]); } } } static void ProcessPFEIT(void *arg, dvbpsi_eit_t *newEIT) { ServiceNowNextInfo_t *info = FindService(newEIT->i_network_id, newEIT->i_ts_id, newEIT->i_service_id); LogModule(LOG_DEBUG, DVBTOEPG, "EIT received (version %d) net id %x ts id %x service id %x info %p\n", newEIT->i_version, newEIT->i_network_id, newEIT->i_ts_id, newEIT->i_service_id, info); if (!info) { info = calloc(1, sizeof(ServiceNowNextInfo_t)); if (info) { ListAdd(serviceNowNextInfoList, info); info->networkId = newEIT->i_network_id; info->tsId = newEIT->i_ts_id; info->serviceId = newEIT->i_service_id; } } if (info) { memset(&info->now, 0, sizeof(Event_t)); memset(&info->next, 0, sizeof(Event_t)); if (newEIT->p_first_event) { UpdateEvent(&info->now, newEIT->p_first_event); if (newEIT->p_first_event->p_next) { UpdateEvent(&info->next, newEIT->p_first_event->p_next); } } } ObjectRefDec(newEIT); } static void UpdateEvent(NNEvent_t *event, dvbpsi_eit_event_t *eitevent) { dvbpsi_descriptor_t *descriptor; dvbpsi_short_event_dr_t * sedescriptor; event->startTime = eitevent->t_start_time; event->duration = eitevent->i_duration; for (descriptor = eitevent->p_first_descriptor; descriptor; descriptor = descriptor->p_next) { if (descriptor->i_tag == 0x4d) { sedescriptor = dvbpsi_DecodeShortEventDr(descriptor); memcpy(event->name, sedescriptor->i_event_name, sedescriptor->i_event_name_length); event->name[sedescriptor->i_event_name_length] = 0; memcpy(event->description, sedescriptor->i_text, sedescriptor->i_text_length); event->description[sedescriptor->i_text_length] = 0; } } } /******************************************************************************* * Event List Helper Functions * *******************************************************************************/ static ServiceNowNextInfo_t *FindServiceName(char *name) { Service_t *service = ServiceFind(name); ServiceNowNextInfo_t *info; if (!service) { CommandError(COMMAND_ERROR_GENERIC, "Unknown service \"%s\"", name); return NULL; } info = FindService(service->networkId, service->tsId, service->id); ServiceRefDec(service); return info; } static ServiceNowNextInfo_t *FindService(uint16_t networkId, uint16_t tsId, uint16_t serviceId) { ListIterator_t iterator; for (ListIterator_Init(iterator, serviceNowNextInfoList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { ServiceNowNextInfo_t *info = ListIterator_Current(iterator); if ((info->networkId == networkId) && (info->tsId == tsId) && (info->serviceId == serviceId)) { return info; } } return NULL; } dvbstreamer-2.1.0/src/plugins/en50221.c000066400000000000000000002314021217721213100174370ustar00rootroot00000000000000/***************************************************************************** * en50221.c : implementation of the transport, session and applications * layers of EN 50 221 ***************************************************************************** * Copyright (C) 2004-2005 VideoLAN * 2010 A Charrett * $Id: en50221.c 105 2010-02-20 10:53:29Z md $ * * Authors: Christophe Massiot * Based on code from libdvbci Copyright (C) 2000 Klaus Schmidinger * * 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, USA. *****************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* DVB Card Drivers */ #include #include "dvbpsi/dvbpsi.h" #include "dvbpsi/descriptor.h" #include "dvbpsi/pmt.h" #include "logging.h" #include "en50221.h" /***************************************************************************** * DVBStreamer Porting *****************************************************************************/ static char EN50221[]= "EN50221"; #define msg_Dbg(_u, msg...)\ LogModule(LOG_DEBUG, EN50221, msg) #define msg_Info(_u, msg...)\ LogModule(LOG_INFO, EN50221, msg) #define msg_Warn(_u, msg...)\ LogModule(LOG_INFO, EN50221, msg) #define msg_Err(_u, msg...)\ LogModule(LOG_ERROR, EN50221, msg) int b_slow_cam = 0; mtime_t i_ca_timeout = 0; /***************************************************************************** * mdate *****************************************************************************/ mtime_t mdate( void ) { struct timespec ts; /* Try to use POSIX monotonic clock if available */ if( clock_gettime( CLOCK_MONOTONIC, &ts ) == EINVAL ) /* Run-time fallback to real-time clock (always available) */ (void)clock_gettime( CLOCK_REALTIME, &ts ); return ((mtime_t)ts.tv_sec * (mtime_t)1000000) + (mtime_t)(ts.tv_nsec / 1000); } /***************************************************************************** * msleep *****************************************************************************/ void msleep( mtime_t delay ) { struct timespec ts; ts.tv_sec = delay / 1000000; ts.tv_nsec = (delay % 1000000) * 1000; int val; while ( ( val = clock_nanosleep( CLOCK_MONOTONIC, 0, &ts, &ts ) ) == EINTR ); if( val == EINVAL ) { ts.tv_sec = delay / 1000000; ts.tv_nsec = (delay % 1000000) * 1000; while ( clock_nanosleep( CLOCK_REALTIME, 0, &ts, &ts ) == EINTR ); } } /***************************************************************************** * Macros *****************************************************************************/ #define TAB_APPEND( count, tab, p ) \ if( (count) > 0 ) \ { \ (tab) = realloc( tab, sizeof( void ** ) * ( (count) + 1 ) ); \ } \ else \ { \ (tab) = malloc( sizeof( void ** ) ); \ } \ (tab)[count] = (p); \ (count)++ /***************************************************************************** * Local declarations *****************************************************************************/ #undef DEBUG_TPDU #define HLCI_WAIT_CAM_READY 0 #define CAM_PROG_MAX MAX_PROGRAMS #define CAPMT_WAIT 100 /* ms */ typedef struct en50221_session_t { int i_slot; int i_resource_id; void (* pf_handle)( access_t *, int, uint8_t *, int ); void (* pf_close)( access_t *, int ); void (* pf_manage)( access_t *, int ); void *p_sys; } en50221_session_t; int i_ca_handle = 0; int i_ca_type = -1; static int i_nb_slots = 0; static bool pb_active_slot[MAX_CI_SLOTS]; static bool pb_tc_has_data[MAX_CI_SLOTS]; static bool pb_slot_mmi_expected[MAX_CI_SLOTS]; static bool pb_slot_mmi_undisplayed[MAX_CI_SLOTS]; static en50221_session_t p_sessions[MAX_SESSIONS]; /***************************************************************************** * Local prototypes *****************************************************************************/ static void ResourceManagerOpen( access_t * p_access, int i_session_id ); static void ApplicationInformationOpen( access_t * p_access, int i_session_id ); static void ConditionalAccessOpen( access_t * p_access, int i_session_id ); static void DateTimeOpen( access_t * p_access, int i_session_id ); static void MMIOpen( access_t * p_access, int i_session_id ); /***************************************************************************** * Utility functions *****************************************************************************/ #define SIZE_INDICATOR 0x80 static uint8_t *GetLength( uint8_t *p_data, int *pi_length ) { *pi_length = *p_data++; if ( (*pi_length & SIZE_INDICATOR) != 0 ) { int l = *pi_length & ~SIZE_INDICATOR; int i; *pi_length = 0; for ( i = 0; i < l; i++ ) *pi_length = (*pi_length << 8) | *p_data++; } return p_data; } static uint8_t *SetLength( uint8_t *p_data, int i_length ) { uint8_t *p = p_data; if ( i_length < 128 ) { *p++ = i_length; } else if ( i_length < 256 ) { *p++ = SIZE_INDICATOR | 0x1; *p++ = i_length; } else if ( i_length < 65536 ) { *p++ = SIZE_INDICATOR | 0x2; *p++ = i_length >> 8; *p++ = i_length & 0xff; } else if ( i_length < 16777216 ) { *p++ = SIZE_INDICATOR | 0x3; *p++ = i_length >> 16; *p++ = (i_length >> 8) & 0xff; *p++ = i_length & 0xff; } else { *p++ = SIZE_INDICATOR | 0x4; *p++ = i_length >> 24; *p++ = (i_length >> 16) & 0xff; *p++ = (i_length >> 8) & 0xff; *p++ = i_length & 0xff; } return p; } /* * Transport layer */ #define MAX_TPDU_SIZE 4096 #define MAX_TPDU_DATA (MAX_TPDU_SIZE - 4) #define DATA_INDICATOR 0x80 #define T_SB 0x80 #define T_RCV 0x81 #define T_CREATE_TC 0x82 #define T_CTC_REPLY 0x83 #define T_DELETE_TC 0x84 #define T_DTC_REPLY 0x85 #define T_REQUEST_TC 0x86 #define T_NEW_TC 0x87 #define T_TC_ERROR 0x88 #define T_DATA_LAST 0xA0 #define T_DATA_MORE 0xA1 static void Dump( bool b_outgoing, uint8_t *p_data, int i_size ) { #ifdef DEBUG_TPDU int i; #define MAX_DUMP 256 fprintf(stderr, "%s ", b_outgoing ? "-->" : "<--"); for ( i = 0; i < i_size && i < MAX_DUMP; i++) fprintf(stderr, "%02X ", p_data[i]); fprintf(stderr, "%s\n", i_size >= MAX_DUMP ? "..." : ""); #endif } /***************************************************************************** * TPDUSend *****************************************************************************/ static int TPDUSend( access_t * p_access, uint8_t i_slot, uint8_t i_tag, const uint8_t *p_content, int i_length ) { uint8_t i_tcid = i_slot + 1; uint8_t p_data[MAX_TPDU_SIZE]; int i_size; i_size = 0; p_data[0] = i_slot; p_data[1] = i_tcid; p_data[2] = i_tag; switch ( i_tag ) { case T_RCV: case T_CREATE_TC: case T_CTC_REPLY: case T_DELETE_TC: case T_DTC_REPLY: case T_REQUEST_TC: p_data[3] = 1; /* length */ p_data[4] = i_tcid; i_size = 5; break; case T_NEW_TC: case T_TC_ERROR: p_data[3] = 2; /* length */ p_data[4] = i_tcid; p_data[5] = p_content[0]; i_size = 6; break; case T_DATA_LAST: case T_DATA_MORE: { /* i_length <= MAX_TPDU_DATA */ uint8_t *p = p_data + 3; p = SetLength( p, i_length + 1 ); *p++ = i_tcid; if ( i_length ) memcpy( p, p_content, i_length ); i_size = i_length + (p - p_data); } break; default: break; } Dump( true, p_data, i_size ); if ( write( i_ca_handle, p_data, i_size ) != i_size ) { msg_Err( p_access, "cannot write to CAM device (%m)" ); return -1; } return 0; } /***************************************************************************** * TPDURecv *****************************************************************************/ #define CAM_READ_TIMEOUT 3500 // ms static int TPDURecv( access_t * p_access, uint8_t i_slot, uint8_t *pi_tag, uint8_t *p_data, int *pi_size ) { uint8_t i_tcid = i_slot + 1; int i_size; struct pollfd pfd[1]; pfd[0].fd = i_ca_handle; pfd[0].events = POLLIN; if ( !(poll(pfd, 1, CAM_READ_TIMEOUT) > 0 && (pfd[0].revents & POLLIN)) ) { msg_Err( p_access, "cannot poll from CAM device" ); return -1; } if ( pi_size == NULL ) { p_data = malloc( MAX_TPDU_SIZE ); } for ( ; ; ) { i_size = read( i_ca_handle, p_data, MAX_TPDU_SIZE ); if ( i_size >= 0 || errno != EINTR ) break; } if ( i_size < 5 ) { msg_Err( p_access, "cannot read from CAM device (%d:%m)", i_size ); if( pi_size == NULL ) free( p_data ); return -1; } if ( p_data[1] != i_tcid ) { msg_Err( p_access, "invalid read from CAM device (%d instead of %d)", p_data[1], i_tcid ); if( pi_size == NULL ) free( p_data ); return -1; } *pi_tag = p_data[2]; pb_tc_has_data[i_slot] = (i_size >= 4 && p_data[i_size - 4] == T_SB && p_data[i_size - 3] == 2 && (p_data[i_size - 1] & DATA_INDICATOR)) ? true : false; Dump( false, p_data, i_size ); if ( pi_size == NULL ) free( p_data ); else *pi_size = i_size; return 0; } /* * Session layer */ #define ST_SESSION_NUMBER 0x90 #define ST_OPEN_SESSION_REQUEST 0x91 #define ST_OPEN_SESSION_RESPONSE 0x92 #define ST_CREATE_SESSION 0x93 #define ST_CREATE_SESSION_RESPONSE 0x94 #define ST_CLOSE_SESSION_REQUEST 0x95 #define ST_CLOSE_SESSION_RESPONSE 0x96 #define SS_OK 0x00 #define SS_NOT_ALLOCATED 0xF0 #define RI_RESOURCE_MANAGER 0x00010041 #define RI_APPLICATION_INFORMATION 0x00020041 #define RI_CONDITIONAL_ACCESS_SUPPORT 0x00030041 #define RI_HOST_CONTROL 0x00200041 #define RI_DATE_TIME 0x00240041 #define RI_MMI 0x00400041 static int ResourceIdToInt( uint8_t *p_data ) { return ((int)p_data[0] << 24) | ((int)p_data[1] << 16) | ((int)p_data[2] << 8) | p_data[3]; } /***************************************************************************** * SPDUSend *****************************************************************************/ static int SPDUSend( access_t * p_access, int i_session_id, uint8_t *p_data, int i_size ) { uint8_t *p_spdu = malloc( i_size + 4 ); uint8_t *p = p_spdu; uint8_t i_tag; uint8_t i_slot = p_sessions[i_session_id - 1].i_slot; *p++ = ST_SESSION_NUMBER; *p++ = 0x02; *p++ = (i_session_id >> 8); *p++ = i_session_id & 0xff; memcpy( p, p_data, i_size ); i_size += 4; p = p_spdu; while ( i_size > 0 ) { if ( i_size > MAX_TPDU_DATA ) { if ( TPDUSend( p_access, i_slot, T_DATA_MORE, p, MAX_TPDU_DATA ) != 0 ) { msg_Err( p_access, "couldn't send TPDU on session %d", i_session_id ); free( p_spdu ); return -1; } p += MAX_TPDU_DATA; i_size -= MAX_TPDU_DATA; } else { if ( TPDUSend( p_access, i_slot, T_DATA_LAST, p, i_size ) != 0 ) { msg_Err( p_access, "couldn't send TPDU on session %d", i_session_id ); free( p_spdu ); return -1; } i_size = 0; } if ( TPDURecv( p_access, i_slot, &i_tag, NULL, NULL ) != 0 || i_tag != T_SB ) { msg_Err( p_access, "couldn't recv TPDU on session %d", i_session_id ); free( p_spdu ); return -1; } } free( p_spdu ); return 0; } /***************************************************************************** * SessionOpen *****************************************************************************/ static void SessionOpen( access_t * p_access, uint8_t i_slot, uint8_t *p_spdu, int i_size ) { int i_session_id; int i_resource_id = ResourceIdToInt( &p_spdu[2] ); uint8_t p_response[16]; int i_status = SS_NOT_ALLOCATED; uint8_t i_tag; for ( i_session_id = 1; i_session_id <= MAX_SESSIONS; i_session_id++ ) { if ( !p_sessions[i_session_id - 1].i_resource_id ) break; } if ( i_session_id == MAX_SESSIONS ) { msg_Err( p_access, "too many sessions !" ); return; } p_sessions[i_session_id - 1].i_slot = i_slot; p_sessions[i_session_id - 1].i_resource_id = i_resource_id; p_sessions[i_session_id - 1].pf_close = NULL; p_sessions[i_session_id - 1].pf_manage = NULL; if ( i_resource_id == RI_RESOURCE_MANAGER || i_resource_id == RI_APPLICATION_INFORMATION || i_resource_id == RI_CONDITIONAL_ACCESS_SUPPORT || i_resource_id == RI_DATE_TIME || i_resource_id == RI_MMI ) { i_status = SS_OK; } p_response[0] = ST_OPEN_SESSION_RESPONSE; p_response[1] = 0x7; p_response[2] = i_status; p_response[3] = p_spdu[2]; p_response[4] = p_spdu[3]; p_response[5] = p_spdu[4]; p_response[6] = p_spdu[5]; p_response[7] = i_session_id >> 8; p_response[8] = i_session_id & 0xff; if ( TPDUSend( p_access, i_slot, T_DATA_LAST, p_response, 9 ) != 0 ) { msg_Err( p_access, "SessionOpen: couldn't send TPDU on slot %d", i_slot ); return; } if ( TPDURecv( p_access, i_slot, &i_tag, NULL, NULL ) != 0 ) { msg_Err( p_access, "SessionOpen: couldn't recv TPDU on slot %d", i_slot ); return; } switch ( i_resource_id ) { case RI_RESOURCE_MANAGER: ResourceManagerOpen( p_access, i_session_id ); break; case RI_APPLICATION_INFORMATION: ApplicationInformationOpen( p_access, i_session_id ); break; case RI_CONDITIONAL_ACCESS_SUPPORT: ConditionalAccessOpen( p_access, i_session_id ); break; case RI_DATE_TIME: DateTimeOpen( p_access, i_session_id ); break; case RI_MMI: MMIOpen( p_access, i_session_id ); break; case RI_HOST_CONTROL: default: msg_Err( p_access, "unknown resource id (0x%x)", i_resource_id ); p_sessions[i_session_id - 1].i_resource_id = 0; } } #if 0 /* unused code for the moment - commented out to keep gcc happy */ /***************************************************************************** * SessionCreate *****************************************************************************/ static void SessionCreate( access_t * p_access, int i_slot, int i_resource_id ) { uint8_t p_response[16]; uint8_t i_tag; int i_session_id; for ( i_session_id = 1; i_session_id <= MAX_SESSIONS; i_session_id++ ) { if ( !p_sessions[i_session_id - 1].i_resource_id ) break; } if ( i_session_id == MAX_SESSIONS ) { msg_Err( p_access, "too many sessions !" ); return; } p_sessions[i_session_id - 1].i_slot = i_slot; p_sessions[i_session_id - 1].i_resource_id = i_resource_id; p_sessions[i_session_id - 1].pf_close = NULL; p_sessions[i_session_id - 1].pf_manage = NULL; p_sessions[i_session_id - 1].p_sys = NULL; p_response[0] = ST_CREATE_SESSION; p_response[1] = 0x6; p_response[2] = i_resource_id >> 24; p_response[3] = (i_resource_id >> 16) & 0xff; p_response[4] = (i_resource_id >> 8) & 0xff; p_response[5] = i_resource_id & 0xff; p_response[6] = i_session_id >> 8; p_response[7] = i_session_id & 0xff; if ( TPDUSend( p_access, i_slot, T_DATA_LAST, p_response, 4 ) != 0 ) { msg_Err( p_access, "SessionCreate: couldn't send TPDU on slot %d", i_slot ); return; } if ( TPDURecv( p_access, i_slot, &i_tag, NULL, NULL ) != 0 ) { msg_Err( p_access, "SessionCreate: couldn't recv TPDU on slot %d", i_slot ); return; } } #endif /***************************************************************************** * SessionCreateResponse *****************************************************************************/ static void SessionCreateResponse( access_t * p_access, uint8_t i_slot, uint8_t *p_spdu, int i_size ) { int i_status = p_spdu[2]; int i_resource_id = ResourceIdToInt( &p_spdu[3] ); int i_session_id = ((int)p_spdu[7] << 8) | p_spdu[8]; if ( i_status != SS_OK ) { msg_Err( p_access, "SessionCreateResponse: failed to open session %d" " resource=0x%x status=0x%x", i_session_id, i_resource_id, i_status ); p_sessions[i_session_id - 1].i_resource_id = 0; return; } switch ( i_resource_id ) { case RI_RESOURCE_MANAGER: ResourceManagerOpen( p_access, i_session_id ); break; case RI_APPLICATION_INFORMATION: ApplicationInformationOpen( p_access, i_session_id ); break; case RI_CONDITIONAL_ACCESS_SUPPORT: ConditionalAccessOpen( p_access, i_session_id ); break; case RI_DATE_TIME: DateTimeOpen( p_access, i_session_id ); break; case RI_MMI: MMIOpen( p_access, i_session_id ); break; case RI_HOST_CONTROL: default: msg_Err( p_access, "unknown resource id (0x%x)", i_resource_id ); p_sessions[i_session_id - 1].i_resource_id = 0; } } /***************************************************************************** * SessionSendClose *****************************************************************************/ static void SessionSendClose( access_t * p_access, int i_session_id ) { uint8_t p_response[16]; uint8_t i_tag; uint8_t i_slot = p_sessions[i_session_id - 1].i_slot; p_response[0] = ST_CLOSE_SESSION_REQUEST; p_response[1] = 0x2; p_response[2] = i_session_id >> 8; p_response[3] = i_session_id & 0xff; if ( TPDUSend( p_access, i_slot, T_DATA_LAST, p_response, 4 ) != 0 ) { msg_Err( p_access, "SessionSendClose: couldn't send TPDU on slot %d", i_slot ); return; } if ( TPDURecv( p_access, i_slot, &i_tag, NULL, NULL ) != 0 ) { msg_Err( p_access, "SessionSendClose: couldn't recv TPDU on slot %d", i_slot ); return; } } /***************************************************************************** * SessionClose *****************************************************************************/ static void SessionClose( access_t * p_access, int i_session_id ) { uint8_t p_response[16]; uint8_t i_tag; uint8_t i_slot = p_sessions[i_session_id - 1].i_slot; if ( p_sessions[i_session_id - 1].pf_close != NULL ) p_sessions[i_session_id - 1].pf_close( p_access, i_session_id ); p_sessions[i_session_id - 1].i_resource_id = 0; p_response[0] = ST_CLOSE_SESSION_RESPONSE; p_response[1] = 0x3; p_response[2] = SS_OK; p_response[3] = i_session_id >> 8; p_response[4] = i_session_id & 0xff; if ( TPDUSend( p_access, i_slot, T_DATA_LAST, p_response, 5 ) != 0 ) { msg_Err( p_access, "SessionClose: couldn't send TPDU on slot %d", i_slot ); return; } if ( TPDURecv( p_access, i_slot, &i_tag, NULL, NULL ) != 0 ) { msg_Err( p_access, "SessionClose: couldn't recv TPDU on slot %d", i_slot ); return; } } /***************************************************************************** * SPDUHandle *****************************************************************************/ static void SPDUHandle( access_t * p_access, uint8_t i_slot, uint8_t *p_spdu, int i_size ) { int i_session_id; switch ( p_spdu[0] ) { case ST_SESSION_NUMBER: if ( i_size <= 4 ) return; i_session_id = ((int)p_spdu[2] << 8) | p_spdu[3]; p_sessions[i_session_id - 1].pf_handle( p_access, i_session_id, p_spdu + 4, i_size - 4 ); break; case ST_OPEN_SESSION_REQUEST: if ( i_size != 6 || p_spdu[1] != 0x4 ) return; SessionOpen( p_access, i_slot, p_spdu, i_size ); break; case ST_CREATE_SESSION_RESPONSE: if ( i_size != 9 || p_spdu[1] != 0x7 ) return; SessionCreateResponse( p_access, i_slot, p_spdu, i_size ); break; case ST_CLOSE_SESSION_REQUEST: if ( i_size != 4 || p_spdu[1] != 0x2 ) return; i_session_id = ((int)p_spdu[2] << 8) | p_spdu[3]; SessionClose( p_access, i_session_id ); break; case ST_CLOSE_SESSION_RESPONSE: if ( i_size != 5 || p_spdu[1] != 0x3 ) return; i_session_id = ((int)p_spdu[3] << 8) | p_spdu[4]; if ( p_spdu[2] ) { msg_Err( p_access, "closing a session which is not allocated (%d)", i_session_id ); } else { if ( p_sessions[i_session_id - 1].pf_close != NULL ) p_sessions[i_session_id - 1].pf_close( p_access, i_session_id ); p_sessions[i_session_id - 1].i_resource_id = 0; } break; default: msg_Err( p_access, "unexpected tag in SPDUHandle (%x)", p_spdu[0] ); break; } } /* * Application layer */ #define AOT_NONE 0x000000 #define AOT_PROFILE_ENQ 0x9F8010 #define AOT_PROFILE 0x9F8011 #define AOT_PROFILE_CHANGE 0x9F8012 #define AOT_APPLICATION_INFO_ENQ 0x9F8020 #define AOT_APPLICATION_INFO 0x9F8021 #define AOT_ENTER_MENU 0x9F8022 #define AOT_CA_INFO_ENQ 0x9F8030 #define AOT_CA_INFO 0x9F8031 #define AOT_CA_PMT 0x9F8032 #define AOT_CA_PMT_REPLY 0x9F8033 #define AOT_TUNE 0x9F8400 #define AOT_REPLACE 0x9F8401 #define AOT_CLEAR_REPLACE 0x9F8402 #define AOT_ASK_RELEASE 0x9F8403 #define AOT_DATE_TIME_ENQ 0x9F8440 #define AOT_DATE_TIME 0x9F8441 #define AOT_CLOSE_MMI 0x9F8800 #define AOT_DISPLAY_CONTROL 0x9F8801 #define AOT_DISPLAY_REPLY 0x9F8802 #define AOT_TEXT_LAST 0x9F8803 #define AOT_TEXT_MORE 0x9F8804 #define AOT_KEYPAD_CONTROL 0x9F8805 #define AOT_KEYPRESS 0x9F8806 #define AOT_ENQ 0x9F8807 #define AOT_ANSW 0x9F8808 #define AOT_MENU_LAST 0x9F8809 #define AOT_MENU_MORE 0x9F880A #define AOT_MENU_ANSW 0x9F880B #define AOT_LIST_LAST 0x9F880C #define AOT_LIST_MORE 0x9F880D #define AOT_SUBTITLE_SEGMENT_LAST 0x9F880E #define AOT_SUBTITLE_SEGMENT_MORE 0x9F880F #define AOT_DISPLAY_MESSAGE 0x9F8810 #define AOT_SCENE_END_MARK 0x9F8811 #define AOT_SCENE_DONE 0x9F8812 #define AOT_SCENE_CONTROL 0x9F8813 #define AOT_SUBTITLE_DOWNLOAD_LAST 0x9F8814 #define AOT_SUBTITLE_DOWNLOAD_MORE 0x9F8815 #define AOT_FLUSH_DOWNLOAD 0x9F8816 #define AOT_DOWNLOAD_REPLY 0x9F8817 #define AOT_COMMS_CMD 0x9F8C00 #define AOT_CONNECTION_DESCRIPTOR 0x9F8C01 #define AOT_COMMS_REPLY 0x9F8C02 #define AOT_COMMS_SEND_LAST 0x9F8C03 #define AOT_COMMS_SEND_MORE 0x9F8C04 #define AOT_COMMS_RCV_LAST 0x9F8C05 #define AOT_COMMS_RCV_MORE 0x9F8C06 /***************************************************************************** * APDUGetTag *****************************************************************************/ static int APDUGetTag( const uint8_t *p_apdu, int i_size ) { if ( i_size >= 3 ) { int i, t = 0; for ( i = 0; i < 3; i++ ) t = (t << 8) | *p_apdu++; return t; } return AOT_NONE; } /***************************************************************************** * APDUGetLength *****************************************************************************/ static uint8_t *APDUGetLength( uint8_t *p_apdu, int *pi_size ) { return GetLength( &p_apdu[3], pi_size ); } /***************************************************************************** * APDUSend *****************************************************************************/ static int APDUSend( access_t * p_access, int i_session_id, int i_tag, uint8_t *p_data, int i_size ) { uint8_t *p_apdu = malloc( i_size + 12 ); uint8_t *p = p_apdu; ca_msg_t ca_msg; int i_ret; *p++ = (i_tag >> 16); *p++ = (i_tag >> 8) & 0xff; *p++ = i_tag & 0xff; p = SetLength( p, i_size ); if ( i_size ) memcpy( p, p_data, i_size ); if ( i_ca_type == CA_CI_LINK ) { i_ret = SPDUSend( p_access, i_session_id, p_apdu, i_size + p - p_apdu ); } else { if ( i_size + p - p_apdu > 256 ) { msg_Err( p_access, "CAM: apdu overflow" ); i_ret = -1; } else { ca_msg.length = i_size + p - p_apdu; if ( i_size == 0 ) ca_msg.length=3; memcpy( ca_msg.msg, p_apdu, i_size + p - p_apdu ); i_ret = ioctl(i_ca_handle, CA_SEND_MSG, &ca_msg ); if ( i_ret < 0 ) { msg_Err( p_access, "Error sending to CAM: %m" ); i_ret = -1; } } } free( p_apdu ); return i_ret; } /* * Resource Manager */ /***************************************************************************** * ResourceManagerHandle *****************************************************************************/ static void ResourceManagerHandle( access_t * p_access, int i_session_id, uint8_t *p_apdu, int i_size ) { int i_tag = APDUGetTag( p_apdu, i_size ); switch ( i_tag ) { case AOT_PROFILE_ENQ: { int resources[] = { htonl(RI_RESOURCE_MANAGER), htonl(RI_APPLICATION_INFORMATION), htonl(RI_CONDITIONAL_ACCESS_SUPPORT), htonl(RI_DATE_TIME), htonl(RI_MMI) }; APDUSend( p_access, i_session_id, AOT_PROFILE, (uint8_t*)resources, sizeof(resources) ); break; } case AOT_PROFILE: APDUSend( p_access, i_session_id, AOT_PROFILE_CHANGE, NULL, 0 ); break; default: msg_Err( p_access, "unexpected tag in ResourceManagerHandle (0x%x)", i_tag ); } } /***************************************************************************** * ResourceManagerOpen *****************************************************************************/ static void ResourceManagerOpen( access_t * p_access, int i_session_id ) { msg_Dbg( p_access, "opening ResourceManager session (%d)", i_session_id ); p_sessions[i_session_id - 1].pf_handle = ResourceManagerHandle; APDUSend( p_access, i_session_id, AOT_PROFILE_ENQ, NULL, 0 ); } /* * Application Information */ /***************************************************************************** * ApplicationInformationEnterMenu *****************************************************************************/ static void ApplicationInformationEnterMenu( access_t * p_access, int i_session_id ) { int i_slot = p_sessions[i_session_id - 1].i_slot; msg_Dbg( p_access, "entering MMI menus on session %d", i_session_id ); APDUSend( p_access, i_session_id, AOT_ENTER_MENU, NULL, 0 ); pb_slot_mmi_expected[i_slot] = true; } /***************************************************************************** * ApplicationInformationHandle *****************************************************************************/ static void ApplicationInformationHandle( access_t * p_access, int i_session_id, uint8_t *p_apdu, int i_size ) { int i_tag = APDUGetTag( p_apdu, i_size ); switch ( i_tag ) { case AOT_APPLICATION_INFO: { int i_type, i_manufacturer, i_code; int l = 0; uint8_t *d = APDUGetLength( p_apdu, &l ); if ( l < 4 ) break; p_apdu[l + 4] = '\0'; i_type = *d++; i_manufacturer = ((int)d[0] << 8) | d[1]; d += 2; i_code = ((int)d[0] << 8) | d[1]; d += 2; d = GetLength( d, &l ); d[l] = '\0'; msg_Info( p_access, "CAM: %s, %02X, %04X, %04X", d, i_type, i_manufacturer, i_code ); break; } default: msg_Err( p_access, "unexpected tag in ApplicationInformationHandle (0x%x)", i_tag ); } } /***************************************************************************** * ApplicationInformationOpen *****************************************************************************/ static void ApplicationInformationOpen( access_t * p_access, int i_session_id ) { msg_Dbg( p_access, "opening ApplicationInformation session (%d)", i_session_id ); p_sessions[i_session_id - 1].pf_handle = ApplicationInformationHandle; APDUSend( p_access, i_session_id, AOT_APPLICATION_INFO_ENQ, NULL, 0 ); } /* * Conditional Access */ #define MAX_CASYSTEM_IDS 64 typedef struct { uint16_t pi_system_ids[MAX_CASYSTEM_IDS + 1]; int i_selected_programs; int b_high_level; } system_ids_t; static bool CheckSystemID( system_ids_t *p_ids, uint16_t i_id ) { int i = 0; if( !p_ids ) return false; if( p_ids->b_high_level ) return true; while ( p_ids->pi_system_ids[i] ) { if ( p_ids->pi_system_ids[i] == i_id ) return true; i++; } return false; } /***************************************************************************** * CAPMTBuild *****************************************************************************/ static int GetCADSize( system_ids_t *p_ids, dvbpsi_descriptor_t *p_dr ) { int i_cad_size = 0; while ( p_dr != NULL ) { if( p_dr->i_tag == 0x9 ) { uint16_t i_sysid = ((uint16_t)p_dr->p_data[0] << 8) | p_dr->p_data[1]; if ( CheckSystemID( p_ids, i_sysid ) ) i_cad_size += p_dr->i_length + 2; } p_dr = p_dr->p_next; } return i_cad_size; } static uint8_t *CAPMTHeader( system_ids_t *p_ids, uint8_t i_list_mgt, uint16_t i_program_number, uint8_t i_version, int i_size, dvbpsi_descriptor_t *p_dr, uint8_t i_cmd ) { uint8_t *p_data; if ( i_size ) p_data = malloc( 7 + i_size ); else p_data = malloc( 6 ); p_data[0] = i_list_mgt; p_data[1] = i_program_number >> 8; p_data[2] = i_program_number & 0xff; p_data[3] = ((i_version & 0x1f) << 1) | 0x1; if ( i_size ) { int i; p_data[4] = (i_size + 1) >> 8; p_data[5] = (i_size + 1) & 0xff; p_data[6] = i_cmd; i = 7; while ( p_dr != NULL ) { if( p_dr->i_tag == 0x9 ) { uint16_t i_sysid = ((uint16_t)p_dr->p_data[0] << 8) | p_dr->p_data[1]; if ( CheckSystemID( p_ids, i_sysid ) ) { p_data[i] = 0x9; p_data[i + 1] = p_dr->i_length; memcpy( &p_data[i + 2], p_dr->p_data, p_dr->i_length ); // p_data[i+4] &= 0x1f; i += p_dr->i_length + 2; } } p_dr = p_dr->p_next; } } else { p_data[4] = 0; p_data[5] = 0; } return p_data; } static uint8_t *CAPMTES( system_ids_t *p_ids, uint8_t *p_capmt, int i_capmt_size, uint8_t i_type, uint16_t i_pid, int i_size, dvbpsi_descriptor_t *p_dr, uint8_t i_cmd ) { uint8_t *p_data; int i; if ( i_size ) p_data = realloc( p_capmt, i_capmt_size + 6 + i_size ); else p_data = realloc( p_capmt, i_capmt_size + 5 ); i = i_capmt_size; p_data[i] = i_type; p_data[i + 1] = i_pid >> 8; p_data[i + 2] = i_pid & 0xff; if ( i_size ) { p_data[i + 3] = (i_size + 1) >> 8; p_data[i + 4] = (i_size + 1) & 0xff; p_data[i + 5] = i_cmd; i += 6; while ( p_dr != NULL ) { if( p_dr->i_tag == 0x9 ) { uint16_t i_sysid = ((uint16_t)p_dr->p_data[0] << 8) | p_dr->p_data[1]; if ( CheckSystemID( p_ids, i_sysid ) ) { p_data[i] = 0x9; p_data[i + 1] = p_dr->i_length; memcpy( &p_data[i + 2], p_dr->p_data, p_dr->i_length ); i += p_dr->i_length + 2; } } p_dr = p_dr->p_next; } } else { p_data[i + 3] = 0; p_data[i + 4] = 0; } return p_data; } static uint8_t *CAPMTBuild( access_t * p_access, int i_session_id, dvbpsi_pmt_t *p_pmt, uint8_t i_list_mgt, uint8_t i_cmd, int *pi_capmt_size ) { system_ids_t *p_ids = (system_ids_t *)p_sessions[i_session_id - 1].p_sys; dvbpsi_pmt_es_t *p_es; int i_cad_size, i_cad_program_size; uint8_t *p_capmt; i_cad_size = i_cad_program_size = GetCADSize( p_ids, p_pmt->p_first_descriptor ); for( p_es = p_pmt->p_first_es; p_es != NULL; p_es = p_es->p_next ) { i_cad_size += GetCADSize( p_ids, p_es->p_first_descriptor ); } if ( !i_cad_size ) { msg_Warn( p_access, "no compatible scrambling system for SID %d on session %d", p_pmt->i_program_number, i_session_id ); *pi_capmt_size = 0; return NULL; } p_capmt = CAPMTHeader( p_ids, i_list_mgt, p_pmt->i_program_number, p_pmt->i_version, i_cad_program_size, p_pmt->p_first_descriptor, i_cmd ); if ( i_cad_program_size ) *pi_capmt_size = 7 + i_cad_program_size; else *pi_capmt_size = 6; for( p_es = p_pmt->p_first_es; p_es != NULL; p_es = p_es->p_next ) { i_cad_size = GetCADSize( p_ids, p_es->p_first_descriptor ); if ( i_cad_size || i_cad_program_size ) { p_capmt = CAPMTES( p_ids, p_capmt, *pi_capmt_size, p_es->i_type, p_es->i_pid, i_cad_size, p_es->p_first_descriptor, i_cmd ); if ( i_cad_size ) *pi_capmt_size += 6 + i_cad_size; else *pi_capmt_size += 5; } } if ( *pi_capmt_size <= 7 + i_cad_program_size ) { msg_Dbg( p_access, "CAPMT not needed, no ES selected" ); free( p_capmt ); *pi_capmt_size = 0; return NULL; } return p_capmt; } /***************************************************************************** * CAPMTFirst *****************************************************************************/ static void CAPMTFirst( access_t * p_access, int i_session_id, dvbpsi_pmt_t *p_pmt ) { uint8_t *p_capmt; int i_capmt_size; msg_Dbg( p_access, "adding first CAPMT for SID %d on session %d", p_pmt->i_program_number, i_session_id ); p_capmt = CAPMTBuild( p_access, i_session_id, p_pmt, 0x3 /* only */, 0x1 /* ok_descrambling */, &i_capmt_size ); if ( i_capmt_size ) { APDUSend( p_access, i_session_id, AOT_CA_PMT, p_capmt, i_capmt_size ); free( p_capmt ); } } /***************************************************************************** * CAPMTAdd *****************************************************************************/ static void CAPMTAdd( access_t * p_access, int i_session_id, dvbpsi_pmt_t *p_pmt ) { system_ids_t *p_ids = (system_ids_t *)p_sessions[i_session_id - 1].p_sys; uint8_t *p_capmt; int i_capmt_size; if( p_ids->i_selected_programs >= CAM_PROG_MAX ) { msg_Warn( p_access, "Not adding CAPMT for SID %d, too many programs", p_pmt->i_program_number ); return; } p_ids->i_selected_programs++; if( p_ids->i_selected_programs == 1 ) { CAPMTFirst( p_access, i_session_id, p_pmt ); return; } if( b_slow_cam ) msleep( CAPMT_WAIT * 1000 ); msg_Dbg( p_access, "adding CAPMT for SID %d on session %d", p_pmt->i_program_number, i_session_id ); p_capmt = CAPMTBuild( p_access, i_session_id, p_pmt, 0x4 /* add */, 0x1 /* ok_descrambling */, &i_capmt_size ); if ( i_capmt_size ) { APDUSend( p_access, i_session_id, AOT_CA_PMT, p_capmt, i_capmt_size ); free( p_capmt ); } } /***************************************************************************** * CAPMTUpdate *****************************************************************************/ static void CAPMTUpdate( access_t * p_access, int i_session_id, dvbpsi_pmt_t *p_pmt ) { uint8_t *p_capmt; int i_capmt_size; msg_Dbg( p_access, "updating CAPMT for SID %d on session %d", p_pmt->i_program_number, i_session_id ); p_capmt = CAPMTBuild( p_access, i_session_id, p_pmt, 0x5 /* update */, 0x1 /* ok_descrambling */, &i_capmt_size ); if ( i_capmt_size ) { APDUSend( p_access, i_session_id, AOT_CA_PMT, p_capmt, i_capmt_size ); free( p_capmt ); } } /***************************************************************************** * CAPMTDelete *****************************************************************************/ static void CAPMTDelete( access_t * p_access, int i_session_id, dvbpsi_pmt_t *p_pmt ) { system_ids_t *p_ids = (system_ids_t *)p_sessions[i_session_id - 1].p_sys; uint8_t *p_capmt; int i_capmt_size; p_ids->i_selected_programs--; msg_Dbg( p_access, "deleting CAPMT for SID %d on session %d", p_pmt->i_program_number, i_session_id ); p_capmt = CAPMTBuild( p_access, i_session_id, p_pmt, 0x5 /* update */, 0x4 /* not selected */, &i_capmt_size ); if ( i_capmt_size ) { APDUSend( p_access, i_session_id, AOT_CA_PMT, p_capmt, i_capmt_size ); free( p_capmt ); } } /***************************************************************************** * ConditionalAccessHandle *****************************************************************************/ static void ConditionalAccessHandle( access_t * p_access, int i_session_id, uint8_t *p_apdu, int i_size ) { system_ids_t *p_ids = (system_ids_t *)p_sessions[i_session_id - 1].p_sys; int i_tag = APDUGetTag( p_apdu, i_size ); switch ( i_tag ) { case AOT_CA_INFO: { int i; int l = 0; uint8_t *d = APDUGetLength( p_apdu, &l ); msg_Dbg( p_access, "CA system IDs supported by the application :" ); for ( i = 0; i < l / 2; i++ ) { p_ids->pi_system_ids[i] = ((uint16_t)d[0] << 8) | d[1]; d += 2; msg_Dbg( p_access, "- 0x%x", p_ids->pi_system_ids[i] ); } p_ids->pi_system_ids[i] = 0; demux_ResendCAPMTs(); break; } default: msg_Err( p_access, "unexpected tag in ConditionalAccessHandle (0x%x)", i_tag ); } } /***************************************************************************** * ConditionalAccessClose *****************************************************************************/ static void ConditionalAccessClose( access_t * p_access, int i_session_id ) { msg_Dbg( p_access, "closing ConditionalAccess session (%d)", i_session_id ); free( p_sessions[i_session_id - 1].p_sys ); } /***************************************************************************** * ConditionalAccessOpen *****************************************************************************/ static void ConditionalAccessOpen( access_t * p_access, int i_session_id ) { msg_Dbg( p_access, "opening ConditionalAccess session (%d)", i_session_id ); p_sessions[i_session_id - 1].pf_handle = ConditionalAccessHandle; p_sessions[i_session_id - 1].pf_close = ConditionalAccessClose; p_sessions[i_session_id - 1].p_sys = malloc(sizeof(system_ids_t)); memset( p_sessions[i_session_id - 1].p_sys, 0, sizeof(system_ids_t) ); APDUSend( p_access, i_session_id, AOT_CA_INFO_ENQ, NULL, 0 ); } /* * Date Time */ typedef struct { int i_interval; mtime_t i_last; } date_time_t; /***************************************************************************** * DateTimeSend *****************************************************************************/ static void DateTimeSend( access_t * p_access, int i_session_id ) { date_time_t *p_date = (date_time_t *)p_sessions[i_session_id - 1].p_sys; time_t t = time(NULL); struct tm tm_gmt; struct tm tm_loc; if ( gmtime_r(&t, &tm_gmt) && localtime_r(&t, &tm_loc) ) { int Y = tm_gmt.tm_year; int M = tm_gmt.tm_mon + 1; int D = tm_gmt.tm_mday; int L = (M == 1 || M == 2) ? 1 : 0; int MJD = 14956 + D + (int)((Y - L) * 365.25) + (int)((M + 1 + L * 12) * 30.6001); uint8_t p_response[7]; #define DEC2BCD(d) (((d / 10) << 4) + (d % 10)) p_response[0] = htons(MJD) >> 8; p_response[1] = htons(MJD) & 0xff; p_response[2] = DEC2BCD(tm_gmt.tm_hour); p_response[3] = DEC2BCD(tm_gmt.tm_min); p_response[4] = DEC2BCD(tm_gmt.tm_sec); p_response[5] = htons(tm_loc.tm_gmtoff / 60) >> 8; p_response[6] = htons(tm_loc.tm_gmtoff / 60) & 0xff; APDUSend( p_access, i_session_id, AOT_DATE_TIME, p_response, 7 ); p_date->i_last = mdate(); } } /***************************************************************************** * DateTimeHandle *****************************************************************************/ static void DateTimeHandle( access_t * p_access, int i_session_id, uint8_t *p_apdu, int i_size ) { date_time_t *p_date = (date_time_t *)p_sessions[i_session_id - 1].p_sys; int i_tag = APDUGetTag( p_apdu, i_size ); switch ( i_tag ) { case AOT_DATE_TIME_ENQ: { int l; const uint8_t *d = APDUGetLength( p_apdu, &l ); if ( l > 0 ) { p_date->i_interval = *d; msg_Dbg( p_access, "DateTimeHandle : interval set to %d", p_date->i_interval ); } else p_date->i_interval = 0; DateTimeSend( p_access, i_session_id ); break; } default: msg_Err( p_access, "unexpected tag in DateTimeHandle (0x%x)", i_tag ); } } /***************************************************************************** * DateTimeManage *****************************************************************************/ static void DateTimeManage( access_t * p_access, int i_session_id ) { date_time_t *p_date = (date_time_t *)p_sessions[i_session_id - 1].p_sys; if ( p_date->i_interval && mdate() > p_date->i_last + (mtime_t)p_date->i_interval * 1000000 ) { DateTimeSend( p_access, i_session_id ); } } /***************************************************************************** * DateTimeClose *****************************************************************************/ static void DateTimeClose( access_t * p_access, int i_session_id ) { msg_Dbg( p_access, "closing DateTime session (%d)", i_session_id ); free( p_sessions[i_session_id - 1].p_sys ); } /***************************************************************************** * DateTimeOpen *****************************************************************************/ static void DateTimeOpen( access_t * p_access, int i_session_id ) { msg_Dbg( p_access, "opening DateTime session (%d)", i_session_id ); p_sessions[i_session_id - 1].pf_handle = DateTimeHandle; p_sessions[i_session_id - 1].pf_manage = DateTimeManage; p_sessions[i_session_id - 1].pf_close = DateTimeClose; p_sessions[i_session_id - 1].p_sys = malloc(sizeof(date_time_t)); memset( p_sessions[i_session_id - 1].p_sys, 0, sizeof(date_time_t) ); DateTimeSend( p_access, i_session_id ); } /* * MMI */ /* Display Control Commands */ #define DCC_SET_MMI_MODE 0x01 #define DCC_DISPLAY_CHARACTER_TABLE_LIST 0x02 #define DCC_INPUT_CHARACTER_TABLE_LIST 0x03 #define DCC_OVERLAY_GRAPHICS_CHARACTERISTICS 0x04 #define DCC_FULL_SCREEN_GRAPHICS_CHARACTERISTICS 0x05 /* MMI Modes */ #define MM_HIGH_LEVEL 0x01 #define MM_LOW_LEVEL_OVERLAY_GRAPHICS 0x02 #define MM_LOW_LEVEL_FULL_SCREEN_GRAPHICS 0x03 /* Display Reply IDs */ #define DRI_MMI_MODE_ACK 0x01 #define DRI_LIST_DISPLAY_CHARACTER_TABLES 0x02 #define DRI_LIST_INPUT_CHARACTER_TABLES 0x03 #define DRI_LIST_GRAPHIC_OVERLAY_CHARACTERISTICS 0x04 #define DRI_LIST_FULL_SCREEN_GRAPHIC_CHARACTERISTICS 0x05 #define DRI_UNKNOWN_DISPLAY_CONTROL_CMD 0xF0 #define DRI_UNKNOWN_MMI_MODE 0xF1 #define DRI_UNKNOWN_CHARACTER_TABLE 0xF2 /* Enquiry Flags */ #define EF_BLIND 0x01 /* Answer IDs */ #define AI_CANCEL 0x00 #define AI_ANSWER 0x01 typedef struct { en50221_mmi_object_t last_object; } mmi_t; static inline void en50221_MMIFree( en50221_mmi_object_t *p_object ) { int i; switch ( p_object->i_object_type ) { case EN50221_MMI_ENQ: free( p_object->u.enq.psz_text ); break; case EN50221_MMI_ANSW: if ( p_object->u.answ.b_ok ) { free( p_object->u.answ.psz_answ ); } break; case EN50221_MMI_MENU: case EN50221_MMI_LIST: free( p_object->u.menu.psz_title ); free( p_object->u.menu.psz_subtitle ); free( p_object->u.menu.psz_bottom ); for ( i = 0; i < p_object->u.menu.i_choices; i++ ) { free( p_object->u.menu.ppsz_choices[i] ); } free( p_object->u.menu.ppsz_choices ); break; default: break; } } /***************************************************************************** * MMISendObject *****************************************************************************/ static void MMISendObject( access_t *p_access, int i_session_id, en50221_mmi_object_t *p_object ) { int i_slot = p_sessions[i_session_id - 1].i_slot; uint8_t *p_data; int i_size, i_tag; switch ( p_object->i_object_type ) { case EN50221_MMI_ANSW: i_tag = AOT_ANSW; i_size = 1 + strlen( p_object->u.answ.psz_answ ); p_data = malloc( i_size ); p_data[0] = (p_object->u.answ.b_ok == true) ? 0x1 : 0x0; strncpy( (char *)&p_data[1], p_object->u.answ.psz_answ, i_size - 1 ); break; case EN50221_MMI_MENU_ANSW: i_tag = AOT_MENU_ANSW; i_size = 1; p_data = malloc( i_size ); p_data[0] = p_object->u.menu_answ.i_choice; break; default: msg_Err( p_access, "unknown MMI object %d", p_object->i_object_type ); return; } APDUSend( p_access, i_session_id, i_tag, p_data, i_size ); free( p_data ); pb_slot_mmi_expected[i_slot] = true; } /***************************************************************************** * MMISendClose *****************************************************************************/ static void MMISendClose( access_t *p_access, int i_session_id ) { int i_slot = p_sessions[i_session_id - 1].i_slot; APDUSend( p_access, i_session_id, AOT_CLOSE_MMI, NULL, 0 ); pb_slot_mmi_expected[i_slot] = true; } /***************************************************************************** * MMIDisplayReply *****************************************************************************/ static void MMIDisplayReply( access_t *p_access, int i_session_id ) { uint8_t p_response[2]; p_response[0] = DRI_MMI_MODE_ACK; p_response[1] = MM_HIGH_LEVEL; APDUSend( p_access, i_session_id, AOT_DISPLAY_REPLY, p_response, 2 ); msg_Dbg( p_access, "sending DisplayReply on session (%d)", i_session_id ); } /***************************************************************************** * MMIGetText *****************************************************************************/ static char *MMIGetText( access_t *p_access, uint8_t **pp_apdu, int *pi_size ) { int i_tag = APDUGetTag( *pp_apdu, *pi_size ); char *psz_text; int l; uint8_t *d; if ( i_tag != AOT_TEXT_LAST ) { msg_Err( p_access, "unexpected text tag: %06x", i_tag ); *pi_size = 0; return strdup( "" ); } d = APDUGetLength( *pp_apdu, &l ); psz_text = malloc( l + 1 ); strncpy( psz_text, (char *)d, l ); psz_text[l] = '\0'; *pp_apdu += l + 4; *pi_size -= l + 4; return psz_text; } /***************************************************************************** * MMIHandleEnq *****************************************************************************/ static void MMIHandleEnq( access_t *p_access, int i_session_id, uint8_t *p_apdu, int i_size ) { mmi_t *p_mmi = (mmi_t *)p_sessions[i_session_id - 1].p_sys; int i_slot = p_sessions[i_session_id - 1].i_slot; int l; uint8_t *d = APDUGetLength( p_apdu, &l ); en50221_MMIFree( &p_mmi->last_object ); p_mmi->last_object.i_object_type = EN50221_MMI_ENQ; p_mmi->last_object.u.enq.b_blind = (*d & 0x1) ? true : false; d += 2; /* skip answer_text_length because it is not mandatory */ l -= 2; p_mmi->last_object.u.enq.psz_text = malloc( l + 1 ); strncpy( p_mmi->last_object.u.enq.psz_text, (char *)d, l ); p_mmi->last_object.u.enq.psz_text[l] = '\0'; msg_Dbg( p_access, "MMI enq: %s%s", p_mmi->last_object.u.enq.psz_text, p_mmi->last_object.u.enq.b_blind == true ? " (blind)" : "" ); pb_slot_mmi_expected[i_slot] = false; pb_slot_mmi_undisplayed[i_slot] = true; } /***************************************************************************** * MMIHandleMenu *****************************************************************************/ static void MMIHandleMenu( access_t *p_access, int i_session_id, int i_tag, uint8_t *p_apdu, int i_size ) { mmi_t *p_mmi = (mmi_t *)p_sessions[i_session_id - 1].p_sys; int i_slot = p_sessions[i_session_id - 1].i_slot; int l; uint8_t *d = APDUGetLength( p_apdu, &l ); en50221_MMIFree( &p_mmi->last_object ); p_mmi->last_object.i_object_type = (i_tag == AOT_MENU_LAST) ? EN50221_MMI_MENU : EN50221_MMI_LIST; p_mmi->last_object.u.menu.i_choices = 0; p_mmi->last_object.u.menu.ppsz_choices = NULL; if ( l > 0 ) { l--; d++; /* choice_nb */ #define GET_FIELD( x ) \ if ( l > 0 ) \ { \ p_mmi->last_object.u.menu.psz_##x \ = MMIGetText( p_access, &d, &l ); \ msg_Dbg( p_access, "MMI " STRINGIFY( x ) ": %s", \ p_mmi->last_object.u.menu.psz_##x ); \ } GET_FIELD( title ); GET_FIELD( subtitle ); GET_FIELD( bottom ); #undef GET_FIELD while ( l > 0 ) { char *psz_text = MMIGetText( p_access, &d, &l ); TAB_APPEND( p_mmi->last_object.u.menu.i_choices, p_mmi->last_object.u.menu.ppsz_choices, psz_text ); msg_Dbg( p_access, "MMI choice: %s", psz_text ); } } pb_slot_mmi_expected[i_slot] = false; pb_slot_mmi_undisplayed[i_slot] = true; } /***************************************************************************** * MMIHandle *****************************************************************************/ static void MMIHandle( access_t *p_access, int i_session_id, uint8_t *p_apdu, int i_size ) { int i_tag = APDUGetTag( p_apdu, i_size ); switch ( i_tag ) { case AOT_DISPLAY_CONTROL: { int l; uint8_t *d = APDUGetLength( p_apdu, &l ); if ( l > 0 ) { switch ( *d ) { case DCC_SET_MMI_MODE: if ( l == 2 && d[1] == MM_HIGH_LEVEL ) MMIDisplayReply( p_access, i_session_id ); else msg_Err( p_access, "unsupported MMI mode %02x", d[1] ); break; default: msg_Err( p_access, "unsupported display control command %02x", *d ); break; } } break; } case AOT_ENQ: MMIHandleEnq( p_access, i_session_id, p_apdu, i_size ); break; case AOT_LIST_LAST: case AOT_MENU_LAST: MMIHandleMenu( p_access, i_session_id, i_tag, p_apdu, i_size ); break; case AOT_CLOSE_MMI: SessionSendClose( p_access, i_session_id ); break; default: msg_Err( p_access, "unexpected tag in MMIHandle (0x%x)", i_tag ); } } /***************************************************************************** * MMIClose *****************************************************************************/ static void MMIClose( access_t *p_access, int i_session_id ) { int i_slot = p_sessions[i_session_id - 1].i_slot; mmi_t *p_mmi = (mmi_t *)p_sessions[i_session_id - 1].p_sys; en50221_MMIFree( &p_mmi->last_object ); free( p_sessions[i_session_id - 1].p_sys ); msg_Dbg( p_access, "closing MMI session (%d)", i_session_id ); pb_slot_mmi_expected[i_slot] = false; pb_slot_mmi_undisplayed[i_slot] = true; } /***************************************************************************** * MMIOpen *****************************************************************************/ static void MMIOpen( access_t *p_access, int i_session_id ) { mmi_t *p_mmi; msg_Dbg( p_access, "opening MMI session (%d)", i_session_id ); p_sessions[i_session_id - 1].pf_handle = MMIHandle; p_sessions[i_session_id - 1].pf_close = MMIClose; p_sessions[i_session_id - 1].p_sys = malloc(sizeof(mmi_t)); p_mmi = (mmi_t *)p_sessions[i_session_id - 1].p_sys; p_mmi->last_object.i_object_type = EN50221_MMI_NONE; } /* * Hardware handling */ /***************************************************************************** * InitSlot: Open the transport layer *****************************************************************************/ #define MAX_TC_RETRIES 5 static int InitSlot( access_t * p_access, int i_slot ) { int i; if ( TPDUSend( p_access, i_slot, T_CREATE_TC, NULL, 0 ) != 0 ) { msg_Err( p_access, "en50221_Init: couldn't send TPDU on slot %d", i_slot ); return -1; } /* Wait for T_CTC_REPLY */ for ( i = 0; i < MAX_TC_RETRIES; i++ ) { uint8_t i_tag; if ( TPDURecv( p_access, i_slot, &i_tag, NULL, NULL ) == 0 && i_tag == T_CTC_REPLY ) { pb_active_slot[i_slot] = true; break; } } if ( pb_active_slot[i_slot] ) { i_ca_timeout = 100000; return 0; } return -1; } /***************************************************************************** * ResetSlot *****************************************************************************/ static void ResetSlot( int i_slot ) { int i_session_id; if ( ioctl( i_ca_handle, CA_RESET, 1 << i_slot ) != 0 ) msg_Err( NULL, "en50221_Poll: couldn't reset slot %d", i_slot ); pb_active_slot[i_slot] = false; pb_tc_has_data[i_slot] = false; /* Close all sessions for this slot. */ for ( i_session_id = 1; i_session_id <= MAX_SESSIONS; i_session_id++ ) { if ( p_sessions[i_session_id - 1].i_resource_id && p_sessions[i_session_id - 1].i_slot == i_slot ) { if ( p_sessions[i_session_id - 1].pf_close != NULL ) { p_sessions[i_session_id - 1].pf_close( NULL, i_session_id ); } p_sessions[i_session_id - 1].i_resource_id = 0; } } i_ca_timeout = 100000; } /* * External entry points */ /***************************************************************************** * en50221_Init : Initialize the CAM for en50221 *****************************************************************************/ void en50221_Init( int adapter ) { char psz_tmp[128]; ca_caps_t caps; memset( &caps, 0, sizeof( ca_caps_t )); sprintf( psz_tmp, "/dev/dvb/adapter%d/ca0", adapter ); if( (i_ca_handle = open(psz_tmp, O_RDWR | O_NONBLOCK)) < 0 ) { msg_Warn( NULL, "failed opening CAM device %s (%s)", psz_tmp, strerror(errno) ); i_ca_handle = 0; return; } if ( ioctl( i_ca_handle, CA_GET_CAP, &caps ) != 0 ) { msg_Err( NULL, "failed getting CAM capabilities (%s)", strerror(errno) ); close( i_ca_handle ); i_ca_handle = 0; return; } /* Output CA capabilities */ msg_Dbg( NULL, "CA interface with %d %s", caps.slot_num, caps.slot_num == 1 ? "slot" : "slots" ); if ( caps.slot_type & CA_CI ) msg_Dbg( NULL, " CI high level interface type" ); if ( caps.slot_type & CA_CI_LINK ) msg_Dbg( NULL, " CI link layer level interface type" ); if ( caps.slot_type & CA_CI_PHYS ) msg_Dbg( NULL, " CI physical layer level interface type (not supported) " ); if ( caps.slot_type & CA_DESCR ) msg_Dbg( NULL, " built-in descrambler detected" ); if ( caps.slot_type & CA_SC ) msg_Dbg( NULL, " simple smart card interface" ); msg_Dbg( NULL, " %d available %s", caps.descr_num, caps.descr_num == 1 ? "descrambler (key)" : "descramblers (keys)" ); if ( caps.descr_type & CA_ECD ) msg_Dbg( NULL, " ECD scrambling system supported" ); if ( caps.descr_type & CA_NDS ) msg_Dbg( NULL, " NDS scrambling system supported" ); if ( caps.descr_type & CA_DSS ) msg_Dbg( NULL, " DSS scrambling system supported" ); if ( caps.slot_num == 0 ) { msg_Err( NULL, "CAM module with no slots" ); close( i_ca_handle ); i_ca_handle = 0; return; } if( caps.slot_type & CA_CI_LINK ) i_ca_type = CA_CI_LINK; else if( caps.slot_type & CA_CI ) i_ca_type = CA_CI; else { msg_Err( NULL, "Incompatible CAM interface" ); close( i_ca_handle ); i_ca_handle = 0; return; } i_nb_slots = caps.slot_num; memset( p_sessions, 0, sizeof(en50221_session_t) * MAX_SESSIONS ); en50221_Reset(); } /***************************************************************************** * en50221_Reset : Reset the CAM for en50221 *****************************************************************************/ void en50221_Reset( void ) { memset( pb_active_slot, 0, sizeof(bool) * MAX_CI_SLOTS ); memset( pb_tc_has_data, 0, sizeof(bool) * MAX_CI_SLOTS ); memset( pb_slot_mmi_expected, 0, sizeof(bool) * MAX_CI_SLOTS ); memset( pb_slot_mmi_undisplayed, 0, sizeof(bool) * MAX_CI_SLOTS ); if( i_ca_type & CA_CI_LINK ) { int i_slot; for ( i_slot = 0; i_slot < i_nb_slots; i_slot++ ) ResetSlot( i_slot ); } else { struct ca_slot_info info; system_ids_t *p_ids; ca_msg_t ca_msg; info.num = 0; /* We don't reset the CAM in that case because it's done by the * ASIC. */ if ( ioctl( i_ca_handle, CA_GET_SLOT_INFO, &info ) < 0 ) { msg_Err( NULL, "en50221_Init: couldn't get slot info" ); close( i_ca_handle ); i_ca_handle = 0; return; } if( info.flags == 0 ) { msg_Err( NULL, "en50221_Init: no CAM inserted" ); close( i_ca_handle ); i_ca_handle = 0; return; } /* Allocate a dummy sessions */ p_sessions[0].i_resource_id = RI_CONDITIONAL_ACCESS_SUPPORT; p_sessions[0].pf_close = ConditionalAccessClose; if ( p_sessions[0].p_sys == NULL ) p_sessions[0].p_sys = malloc(sizeof(system_ids_t)); memset( p_sessions[0].p_sys, 0, sizeof(system_ids_t) ); p_ids = (system_ids_t *)p_sessions[0].p_sys; p_ids->b_high_level = 1; /* Get application info to find out which cam we are using and make sure everything is ready to play */ ca_msg.length=3; ca_msg.msg[0] = ( AOT_APPLICATION_INFO & 0xFF0000 ) >> 16; ca_msg.msg[1] = ( AOT_APPLICATION_INFO & 0x00FF00 ) >> 8; ca_msg.msg[2] = ( AOT_APPLICATION_INFO & 0x0000FF ) >> 0; memset( &ca_msg.msg[3], 0, 253 ); APDUSend( NULL, 1, AOT_APPLICATION_INFO_ENQ, NULL, 0 ); if ( ioctl( i_ca_handle, CA_GET_MSG, &ca_msg ) < 0 ) { msg_Err( NULL, "en50221_Init: failed getting message" ); close( i_ca_handle ); i_ca_handle = 0; return; } #if HLCI_WAIT_CAM_READY while( ca_msg.msg[8] == 0xff && ca_msg.msg[9] == 0xff ) { msleep(1); msg_Dbg( NULL, "CAM: please wait" ); APDUSend( NULL, 1, AOT_APPLICATION_INFO_ENQ, NULL, 0 ); ca_msg.length=3; ca_msg.msg[0] = ( AOT_APPLICATION_INFO & 0xFF0000 ) >> 16; ca_msg.msg[1] = ( AOT_APPLICATION_INFO & 0x00FF00 ) >> 8; ca_msg.msg[2] = ( AOT_APPLICATION_INFO & 0x0000FF ) >> 0; memset( &ca_msg.msg[3], 0, 253 ); if ( ioctl( i_ca_handle, CA_GET_MSG, &ca_msg ) < 0 ) { msg_Err( NULL, "en50221_Init: failed getting message" ); close( i_ca_handle ); i_ca_handle = 0; return; } msg_Dbg( NULL, "en50221_Init: Got length: %d, tag: 0x%x", ca_msg.length, APDUGetTag( ca_msg.msg, ca_msg.length ) ); } #else if( ca_msg.msg[8] == 0xff && ca_msg.msg[9] == 0xff ) { msg_Err( NULL, "CAM returns garbage as application info!" ); close( i_ca_handle ); i_ca_handle = 0; return; } #endif msg_Dbg( NULL, "found CAM %s using id 0x%x", &ca_msg.msg[12], (ca_msg.msg[8]<<8)|ca_msg.msg[9] ); } } /***************************************************************************** * en50221_Poll : Poll the CAM for TPDUs *****************************************************************************/ void en50221_Poll( void ) { int i_slot; int i_session_id; for ( i_slot = 0; i_slot < i_nb_slots; i_slot++ ) { uint8_t i_tag; ca_slot_info_t sinfo; sinfo.num = i_slot; if ( ioctl( i_ca_handle, CA_GET_SLOT_INFO, &sinfo ) != 0 ) { msg_Err( NULL, "en50221_Poll: couldn't get info on slot %d", i_slot ); continue; } if ( !(sinfo.flags & CA_CI_MODULE_READY) ) { if ( pb_active_slot[i_slot] ) { msg_Dbg( NULL, "en50221_Poll: slot %d has been removed", i_slot ); pb_active_slot[i_slot] = false; pb_slot_mmi_expected[i_slot] = false; pb_slot_mmi_undisplayed[i_slot] = false; /* Close all sessions for this slot. */ for ( i_session_id = 1; i_session_id <= MAX_SESSIONS; i_session_id++ ) { if ( p_sessions[i_session_id - 1].i_resource_id && p_sessions[i_session_id - 1].i_slot == i_slot ) { if ( p_sessions[i_session_id - 1].pf_close != NULL ) { p_sessions[i_session_id - 1].pf_close( NULL, i_session_id ); } p_sessions[i_session_id - 1].i_resource_id = 0; } } } continue; } else if ( !pb_active_slot[i_slot] ) { InitSlot( NULL, i_slot ); if ( !pb_active_slot[i_slot] ) { msg_Dbg( NULL, "en50221_Poll: resetting slot %d", i_slot ); ResetSlot( i_slot ); continue; } msg_Dbg( NULL, "en50221_Poll: slot %d is active", i_slot ); } if ( !pb_tc_has_data[i_slot] ) { if ( TPDUSend( NULL, i_slot, T_DATA_LAST, NULL, 0 ) != 0 ) { msg_Err( NULL, "en50221_Poll: couldn't send TPDU on slot %d, resetting", i_slot ); ResetSlot( i_slot ); continue; } if ( TPDURecv( NULL, i_slot, &i_tag, NULL, NULL ) != 0 ) { msg_Err( NULL, "en50221_Poll: couldn't recv TPDU on slot %d, resetting", i_slot ); ResetSlot( i_slot ); continue; } } while ( pb_tc_has_data[i_slot] ) { uint8_t p_tpdu[MAX_TPDU_SIZE]; int i_size, i_session_size; uint8_t *p_session; if ( TPDUSend( NULL, i_slot, T_RCV, NULL, 0 ) != 0 ) { msg_Err( NULL, "en50221_Poll: couldn't send TPDU on slot %d, resetting", i_slot ); ResetSlot( i_slot ); continue; } if ( TPDURecv( NULL, i_slot, &i_tag, p_tpdu, &i_size ) != 0 ) { msg_Err( NULL, "en50221_Poll: couldn't recv TPDU on slot %d, resetting", i_slot ); ResetSlot( i_slot ); continue; } p_session = GetLength( &p_tpdu[3], &i_session_size ); if ( i_session_size <= 1 ) continue; p_session++; i_session_size--; if ( i_tag != T_DATA_LAST ) { /* I sometimes see a CAM responding T_SB to our T_RCV. * It said it had data to send, but does not send it after * our T_RCV. There is probably something wrong here. I * experienced that this case happens on start-up, and the * CAM doesn't open any session at all, so it is quite * useless. Reset it. */ msg_Err( NULL, "en50221_Poll: invalid TPDU 0x%x, resetting", i_tag ); ResetSlot( i_slot ); break; } SPDUHandle( NULL, i_slot, p_session, i_session_size ); } } for ( i_session_id = 1; i_session_id <= MAX_SESSIONS; i_session_id++ ) { if ( p_sessions[i_session_id - 1].i_resource_id && p_sessions[i_session_id - 1].pf_manage ) { p_sessions[i_session_id - 1].pf_manage( NULL, i_session_id ); } } } /***************************************************************************** * en50221_AddPMT : *****************************************************************************/ void en50221_AddPMT( dvbpsi_pmt_t *p_pmt ) { int i_session_id; for ( i_session_id = 1; i_session_id <= MAX_SESSIONS; i_session_id++ ) if ( p_sessions[i_session_id - 1].i_resource_id == RI_CONDITIONAL_ACCESS_SUPPORT ) CAPMTAdd( NULL, i_session_id, p_pmt ); } /***************************************************************************** * en50221_UpdatePMT : *****************************************************************************/ void en50221_UpdatePMT( dvbpsi_pmt_t *p_pmt ) { int i_session_id; for ( i_session_id = 1; i_session_id <= MAX_SESSIONS; i_session_id++ ) if ( p_sessions[i_session_id - 1].i_resource_id == RI_CONDITIONAL_ACCESS_SUPPORT ) CAPMTUpdate( NULL, i_session_id, p_pmt ); } /***************************************************************************** * en50221_DeletePMT : *****************************************************************************/ void en50221_DeletePMT( dvbpsi_pmt_t *p_pmt ) { int i_session_id; for ( i_session_id = 1; i_session_id <= MAX_SESSIONS; i_session_id++ ) if ( p_sessions[i_session_id - 1].i_resource_id == RI_CONDITIONAL_ACCESS_SUPPORT ) CAPMTDelete( NULL, i_session_id, p_pmt ); } /***************************************************************************** * en50221_StatusMMI : *****************************************************************************/ uint8_t en50221_StatusMMI( uint8_t *p_answer, ssize_t *pi_size ) { struct ret_mmi_status *p_ret = (struct ret_mmi_status *)p_answer; if ( ioctl( i_ca_handle, CA_GET_CAP, &p_ret->caps ) != 0 ) { msg_Err( NULL, "ioctl CA_GET_CAP failed (%s)", strerror(errno) ); return RET_ERR; } *pi_size = sizeof(struct ret_mmi_status); return RET_MMI_STATUS; } /***************************************************************************** * en50221_StatusMMISlot : *****************************************************************************/ uint8_t en50221_StatusMMISlot( uint8_t *p_buffer, ssize_t i_size, uint8_t *p_answer, ssize_t *pi_size ) { int i_slot; struct ret_mmi_slot_status *p_ret = (struct ret_mmi_slot_status *)p_answer; if ( i_size != 1 ) return RET_HUH; i_slot = *p_buffer; p_ret->sinfo.num = i_slot; if ( ioctl( i_ca_handle, CA_GET_SLOT_INFO, &p_ret->sinfo ) != 0 ) { msg_Err( NULL, "ioctl CA_GET_SLOT_INFO failed (%s)", strerror(errno) ); return RET_ERR; } *pi_size = sizeof(struct ret_mmi_slot_status); return RET_MMI_SLOT_STATUS; } /***************************************************************************** * en50221_OpenMMI : *****************************************************************************/ uint8_t en50221_OpenMMI( uint8_t *p_buffer, ssize_t i_size ) { int i_slot; if ( i_size != 1 ) return RET_HUH; i_slot = *p_buffer; if( i_ca_type & CA_CI_LINK ) { int i_session_id; for ( i_session_id = 1; i_session_id <= MAX_SESSIONS; i_session_id++ ) { if ( p_sessions[i_session_id - 1].i_resource_id == RI_MMI && p_sessions[i_session_id - 1].i_slot == i_slot ) { msg_Dbg( NULL, "MMI menu is already opened on slot %d (session=%d)", i_slot, i_session_id ); return RET_OK; } } for ( i_session_id = 1; i_session_id <= MAX_SESSIONS; i_session_id++ ) { if ( p_sessions[i_session_id - 1].i_resource_id == RI_APPLICATION_INFORMATION && p_sessions[i_session_id - 1].i_slot == i_slot ) { ApplicationInformationEnterMenu( NULL, i_session_id ); return RET_OK; } } msg_Err( NULL, "no application information on slot %d", i_slot ); return RET_ERR; } else { msg_Err( NULL, "MMI menu not supported" ); return RET_ERR; } } /***************************************************************************** * en50221_CloseMMI : *****************************************************************************/ uint8_t en50221_CloseMMI( uint8_t *p_buffer, ssize_t i_size ) { int i_slot; if ( i_size != 1 ) return RET_HUH; i_slot = *p_buffer; if( i_ca_type & CA_CI_LINK ) { int i_session_id; for ( i_session_id = 1; i_session_id <= MAX_SESSIONS; i_session_id++ ) { if ( p_sessions[i_session_id - 1].i_resource_id == RI_MMI && p_sessions[i_session_id - 1].i_slot == i_slot ) { MMISendClose( NULL, i_session_id ); return RET_OK; } } msg_Warn( NULL, "closing a non-existing MMI session on slot %d", i_slot ); return RET_ERR; } else { msg_Err( NULL, "MMI menu not supported" ); return RET_ERR; } } /***************************************************************************** * en50221_GetMMIObject : *****************************************************************************/ uint8_t en50221_GetMMIObject( uint8_t *p_buffer, ssize_t i_size, uint8_t *p_answer, ssize_t *pi_size ) { int i_session_id, i_slot; struct ret_mmi_recv *p_ret = (struct ret_mmi_recv *)p_answer; if ( i_size != 1 ) return RET_HUH; i_slot = *p_buffer; if ( pb_slot_mmi_expected[i_slot] == true ) return RET_MMI_WAIT; /* data not yet available */ p_ret->object.i_object_type = EN50221_MMI_NONE; *pi_size = sizeof(struct ret_mmi_recv); for ( i_session_id = 1; i_session_id <= MAX_SESSIONS; i_session_id++ ) { if ( p_sessions[i_session_id - 1].i_resource_id == RI_MMI && p_sessions[i_session_id - 1].i_slot == i_slot ) { mmi_t *p_mmi = (mmi_t *)p_sessions[i_session_id - 1].p_sys; if ( p_mmi == NULL ) { *pi_size = 0; return RET_ERR; /* should not happen */ } *pi_size = COMM_BUFFER_SIZE - COMM_HEADER_SIZE - ((void *)&p_ret->object - (void *)p_ret); if ( en50221_SerializeMMIObject( (uint8_t *)&p_ret->object, pi_size, &p_mmi->last_object ) == -1 ) { *pi_size = 0; msg_Err( NULL, "MMI structure too big" ); return RET_ERR; } *pi_size += ((void *)&p_ret->object - (void *)p_ret); break; } } return RET_MMI_RECV; } /***************************************************************************** * en50221_SendMMIObject : *****************************************************************************/ uint8_t en50221_SendMMIObject( uint8_t *p_buffer, ssize_t i_size ) { int i_session_id, i_slot; struct cmd_mmi_send *p_cmd = (struct cmd_mmi_send *)p_buffer; if ( en50221_UnserializeMMIObject( &p_cmd->object, i_size - ((void *)&p_cmd->object - (void *)p_cmd) ) == -1 ) return RET_ERR; i_slot = p_cmd->i_slot; for ( i_session_id = 1; i_session_id <= MAX_SESSIONS; i_session_id++ ) { if ( p_sessions[i_session_id - 1].i_resource_id == RI_MMI && p_sessions[i_session_id - 1].i_slot == i_slot ) { MMISendObject( NULL, i_session_id, &p_cmd->object ); return RET_OK; } } msg_Err( NULL, "SendMMIObject when no MMI session is opened !" ); return RET_ERR; } dvbstreamer-2.1.0/src/plugins/en50221.h000066400000000000000000000177151217721213100174550ustar00rootroot00000000000000/***************************************************************************** * en50221.h ***************************************************************************** * Copyright (C) 2008 VideoLAN * $Id: en50221.h 27 2009-10-20 19:15:04Z massiot $ * * Authors: Christophe Massiot * * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ #ifndef _EN50221_H #define _EN50221_H #include typedef void * access_t; /* #define STRINGIFY( z ) UGLY_KLUDGE( z ) #define UGLY_KLUDGE( z ) #z */ #define COMM_BUFFER_SIZE 4096 #define COMM_HEADER_SIZE 4 #define RET_OK 0 #define RET_ERR 1 #define RET_MMI_STATUS 3 #define RET_MMI_SLOT_STATUS 4 #define RET_MMI_RECV 5 #define RET_MMI_WAIT 6 #define RET_HUH 255 #define EN50221_MMI_NONE 0 #define EN50221_MMI_ENQ 1 #define EN50221_MMI_ANSW 2 #define EN50221_MMI_MENU 3 #define EN50221_MMI_MENU_ANSW 4 #define EN50221_MMI_LIST 5 typedef struct en50221_mmi_object_t { int i_object_type; union { struct { int b_blind; char *psz_text; } enq; struct { int b_ok; char *psz_answ; } answ; struct { char *psz_title, *psz_subtitle, *psz_bottom; char **ppsz_choices; int i_choices; } menu; /* menu and list are the same */ struct { int i_choice; } menu_answ; } u; } en50221_mmi_object_t; struct ret_mmi_status { ca_caps_t caps; }; struct ret_mmi_slot_status { ca_slot_info_t sinfo; }; struct ret_mmi_recv { en50221_mmi_object_t object; }; struct cmd_mmi_send { uint8_t i_slot; en50221_mmi_object_t object; }; #define MAX_CI_SLOTS 16 #define MAX_SESSIONS 32 #define MAX_PROGRAMS 24 extern int i_ca_handle; extern int i_ca_type; extern int b_slow_cam; typedef int64_t mtime_t; extern mtime_t i_ca_timeout; /***************************************************************************** * Prototypes *****************************************************************************/ void en50221_Init( int adapter ); void en50221_Reset( void ); void en50221_Poll( void ); void en50221_AddPMT( dvbpsi_pmt_t *p_pmt ); void en50221_UpdatePMT( dvbpsi_pmt_t *p_pmt ); void en50221_DeletePMT( dvbpsi_pmt_t *p_pmt ); uint8_t en50221_StatusMMI( uint8_t *p_answer, ssize_t *pi_size ); uint8_t en50221_StatusMMISlot( uint8_t *p_buffer, ssize_t i_size, uint8_t *p_answer, ssize_t *pi_size ); uint8_t en50221_OpenMMI( uint8_t *p_buffer, ssize_t i_size ); uint8_t en50221_CloseMMI( uint8_t *p_buffer, ssize_t i_size ); uint8_t en50221_GetMMIObject( uint8_t *p_buffer, ssize_t i_size, uint8_t *p_answer, ssize_t *pi_size ); uint8_t en50221_SendMMIObject( uint8_t *p_buffer, ssize_t i_size ); void demux_ResendCAPMTs(void); /* * This is where it gets scary: do not show to < 18 yrs old */ /***************************************************************************** * en50221_SerializeMMIObject : *****************************************************************************/ static inline int en50221_SerializeMMIObject( uint8_t *p_answer, ssize_t *pi_size, en50221_mmi_object_t *p_object ) { ssize_t i_max_size = *pi_size; en50221_mmi_object_t *p_serialized = (en50221_mmi_object_t *)p_answer; char **pp_tmp; int i; #define STORE_MEMBER(pp_pointer, i_size) \ if ( i_size + *pi_size > i_max_size ) \ return -1; \ memcpy( p_answer, *pp_pointer, i_size ); \ *pp_pointer = (void *)*pi_size; \ *pi_size += i_size; \ p_answer += i_size; if ( sizeof(en50221_mmi_object_t) > i_max_size ) return -1; memcpy( p_answer, p_object, sizeof(en50221_mmi_object_t) ); *pi_size = sizeof(en50221_mmi_object_t); p_answer += sizeof(en50221_mmi_object_t); switch ( p_object->i_object_type ) { case EN50221_MMI_ENQ: STORE_MEMBER( &p_serialized->u.enq.psz_text, strlen(p_object->u.enq.psz_text) + 1 ); break; case EN50221_MMI_ANSW: STORE_MEMBER( &p_serialized->u.answ.psz_answ, strlen(p_object->u.answ.psz_answ) + 1 ); break; case EN50221_MMI_MENU: case EN50221_MMI_LIST: STORE_MEMBER( &p_serialized->u.menu.psz_title, strlen(p_object->u.menu.psz_title) + 1 ); STORE_MEMBER( &p_serialized->u.menu.psz_subtitle, strlen(p_object->u.menu.psz_subtitle) + 1 ); STORE_MEMBER( &p_serialized->u.menu.psz_bottom, strlen(p_object->u.menu.psz_bottom) + 1 ); /* pointer alignment */ i = ((*pi_size + 7) / 8) * 8 - *pi_size; *pi_size += i; p_answer += i; pp_tmp = (char **)p_answer; STORE_MEMBER( &p_serialized->u.menu.ppsz_choices, p_object->u.menu.i_choices * sizeof(char *) ); for ( i = 0; i < p_object->u.menu.i_choices; i++ ) { STORE_MEMBER( &pp_tmp[i], strlen(p_object->u.menu.ppsz_choices[i]) + 1 ); } break; default: break; } return 0; } /***************************************************************************** * en50221_UnserializeMMIObject : *****************************************************************************/ static inline int en50221_UnserializeMMIObject( en50221_mmi_object_t *p_object, ssize_t i_size ) { int i, j; #define CHECK_MEMBER(pp_member) \ if ( (ptrdiff_t)*pp_member >= i_size ) \ return -1; \ for ( i = 0; ((char *)p_object + (ptrdiff_t)*pp_member)[i] != '\0'; \ i++ ) \ if ( (ptrdiff_t)*pp_member + i >= i_size ) \ return -1; \ *pp_member += (ptrdiff_t)p_object; switch ( p_object->i_object_type ) { case EN50221_MMI_ENQ: CHECK_MEMBER(&p_object->u.enq.psz_text); break; case EN50221_MMI_ANSW: CHECK_MEMBER(&p_object->u.answ.psz_answ); break; case EN50221_MMI_MENU: case EN50221_MMI_LIST: CHECK_MEMBER(&p_object->u.menu.psz_title); CHECK_MEMBER(&p_object->u.menu.psz_subtitle); CHECK_MEMBER(&p_object->u.menu.psz_bottom); if ( (ptrdiff_t)p_object->u.menu.ppsz_choices + p_object->u.menu.i_choices * sizeof(char *) >= i_size ) return -1; p_object->u.menu.ppsz_choices = (char **)((char *)p_object + (ptrdiff_t)p_object->u.menu.ppsz_choices); for ( j = 0; j < p_object->u.menu.i_choices; j++ ) { CHECK_MEMBER(&p_object->u.menu.ppsz_choices[j]); } break; default: break; } return 0; } #endif /* _EN50221_H */ dvbstreamer-2.1.0/src/plugins/epgtoxmltv.c000077500000000000000000000256311217721213100206640ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA epgtoxmltv.c Plugin to dump the EPG Database out in XMLTV format. */ #include #include #include #include #include #include #include "main.h" #include "utf8.h" #include "plugin.h" #include "epgdbase.h" #include "dbase.h" #include "list.h" #include "logging.h" /******************************************************************************* * Typedefs * *******************************************************************************/ typedef struct ServiceMultiplexInfo_s { Service_t *service; Multiplex_t *mux; }ServiceMultiplexInfo_t; /******************************************************************************* * Prototypes * *******************************************************************************/ static void CommandDump(int argc, char **argv); static void DumpChannels(List_t *infoList); static void DumpProgrammes(List_t *infoList); static void DumpServiceProgrammes(Multiplex_t *multiplex, Service_t *service); static void DumpProgramme(Multiplex_t *multiplex, Service_t *service, EPGEvent_t *event); static void PrintXmlified(char *text); static List_t *GetServiceMultiplexInfo(void); static void ServiceMultiplexInfoDestructor(void *obj); /******************************************************************************* * Plugin Setup * *******************************************************************************/ PLUGIN_COMMANDS( { "dumpxmltv", FALSE, 0, 0, "Dump the EPG Database in XMLTV format.", "Output the contents of the EPG Database in XMLTV format.", CommandDump } ); PLUGIN_INTERFACE_C( PLUGIN_FOR_ALL, "EPGtoXMLTV", "0.1", "Plugin to dump the EPG Database out in XMLTV format.", "charrea6@users.sourceforge.net" ); /******************************************************************************* * Command Functions * *******************************************************************************/ static void CommandDump(int argc, char **argv) { List_t *infoList; ObjectRegisterTypeDestructor(ServiceMultiplexInfo_t, ServiceMultiplexInfoDestructor); infoList = GetServiceMultiplexInfo(); CommandPrintf("\n"); CommandPrintf("\n"); DumpChannels(infoList); DumpProgrammes(infoList); CommandPrintf("\n"); ObjectListFree(infoList); } static void DumpChannels(List_t *infoList) { ListIterator_t iterator; ServiceMultiplexInfo_t *info; Service_t *service; Multiplex_t *multiplex; for (ListIterator_Init(iterator, infoList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { info = ListIterator_Current(iterator); service = info->service; multiplex = info->mux; CommandPrintf("\n", multiplex->networkId, multiplex->tsId, service->id); CommandPrintf(""); PrintXmlified(service->name); CommandPrintf("\n"); CommandPrintf("\n"); } } static void DumpProgrammes(List_t *infoList) { ListIterator_t iterator; ServiceMultiplexInfo_t *info; EPGDBaseTransactionStart(); for (ListIterator_Init(iterator, infoList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { info = ListIterator_Current(iterator); DumpServiceProgrammes(info->mux, info->service); } EPGDBaseTransactionCommit(); } static void DumpServiceProgrammes(Multiplex_t *multiplex, Service_t *service) { EPGEvent_t *event; EPGDBaseEnumerator_t enumerator; EPGServiceRef_t serviceRef; serviceRef.netId = multiplex->networkId; serviceRef.tsId = multiplex->tsId; serviceRef.serviceId = service->source; enumerator = EPGDBaseEventEnumeratorGetService(&serviceRef); do { event = EPGDBaseEventGetNext(enumerator); if (event) { DumpProgramme(multiplex, service, event); ObjectRefDec(event); } }while(event && !ExitProgram); EPGDBaseEnumeratorDestroy(enumerator); } static void DumpProgramme(Multiplex_t *multiplex, Service_t *service, EPGEvent_t *event) { EPGDBaseEnumerator_t enumerator; EPGEventDetail_t *detail; EPGServiceRef_t serviceRef; serviceRef.netId = multiplex->networkId; serviceRef.tsId = multiplex->tsId; serviceRef.serviceId = service->source; CommandPrintf("\n", event->startTime.tm_year + 1900, event->startTime.tm_mon + 1, event->startTime.tm_mday, event->startTime.tm_hour, event->startTime.tm_min, event->startTime.tm_sec, event->endTime.tm_year + 1900, event->endTime.tm_mon + 1, event->endTime.tm_mday, event->endTime.tm_hour, event->endTime.tm_min, event->endTime.tm_sec, multiplex->networkId, multiplex->tsId, service->id); enumerator = EPGDBaseDetailGet(&serviceRef, event->eventId, EPG_EVENT_DETAIL_TITLE); do { detail = EPGDBaseDetailGetNext(enumerator); if (detail) { CommandPrintf("", detail->lang); PrintXmlified(detail->value); CommandPrintf("\n"); ObjectRefDec(detail); } }while(detail && !ExitProgram); EPGDBaseEnumeratorDestroy(enumerator); enumerator = EPGDBaseDetailGet(&serviceRef, event->eventId, EPG_EVENT_DETAIL_DESCRIPTION); do { detail = EPGDBaseDetailGetNext(enumerator); if (detail) { CommandPrintf("", detail->lang); PrintXmlified(detail->value); CommandPrintf("\n"); ObjectRefDec(detail); } }while(detail && !ExitProgram); EPGDBaseEnumeratorDestroy(enumerator); /* output seriesid and programid fields */ enumerator = EPGDBaseDetailGet(&serviceRef, event->eventId, "content"); do { detail = EPGDBaseDetailGetNext(enumerator); if (detail) { CommandPrintf("", detail->lang); PrintXmlified(detail->value); CommandPrintf("\n"); ObjectRefDec(detail); } }while(detail && !ExitProgram); EPGDBaseEnumeratorDestroy(enumerator); enumerator = EPGDBaseDetailGet(&serviceRef, event->eventId, "series"); do { detail = EPGDBaseDetailGetNext(enumerator); if (detail) { CommandPrintf("", detail->lang); PrintXmlified(detail->value); CommandPrintf("\n"); ObjectRefDec(detail); } }while(detail && !ExitProgram); EPGDBaseEnumeratorDestroy(enumerator); CommandPrintf("\n"); } static void PrintXmlified(char *text) { char buffer[256]; char temp[10]; int bufferIndex = 0; int i; int utf8CharLen; int len = strlen(text); buffer[0] = 0; for (i = 0; i < len;) { unsigned int ch = UTF8_nextchar(text, &i); switch (ch) { case '\t': case '\n': case ' ' ... '%': // & case '\'' ... ';': // < case '=': // > case '?' ... 0x7E: temp[0] = (char)ch; temp[1] = 0; break; case '&': strcpy(temp, "&"); break; case '<': strcpy(temp, "<"); break; case '>': strcpy(temp, ">"); break; case 0x0000 ... 0x0008: case 0x000B ... 0x001F: case 0x007F: fprintf(stderr, "Illegal char %04x\n", i); default: utf8CharLen = UTF8_wc_toutf8(temp, ch); temp[utf8CharLen] = 0; break; } // switch if (strlen(temp) + bufferIndex >= sizeof(buffer) - 1) { CommandPrintf("%s", buffer); bufferIndex = 0; buffer[0] = 0; } strcat(buffer, temp); bufferIndex += strlen(temp); } if (bufferIndex) { CommandPrintf("%s", buffer); } } static List_t *GetServiceMultiplexInfo(void) { Multiplex_t *multiplex; Service_t *service; List_t *multiplexes; List_t *services; ListIterator_t muxIterator; ListIterator_t serviceIterator; ServiceMultiplexInfo_t *info; List_t *result = ObjectListCreate(); DBaseTransactionBegin(); multiplexes = MultiplexListAll(); for (ListIterator_Init(muxIterator, multiplexes); ListIterator_MoreEntries(muxIterator); ListIterator_Next(muxIterator)) { multiplex = ListIterator_Current(muxIterator); services = ServiceListForMultiplex(multiplex); for (ListIterator_Init(serviceIterator, services); ListIterator_MoreEntries(serviceIterator); ListIterator_Next(serviceIterator)) { service = ListIterator_Current(serviceIterator); info = ObjectCreateType(ServiceMultiplexInfo_t); if (info) { info->service = service; info->mux = multiplex; MultiplexRefInc(multiplex); ListAdd(result, info); } } /* Just free the list not the contained objects */ ListFree(services, NULL); } /* This won't actually free the objects, but reduces the ref count by 1 * so that can be free'd later when the returned list is free'd. */ ObjectListFree(multiplexes); DBaseTransactionCommit(); return result; } static void ServiceMultiplexInfoDestructor(void *obj) { ServiceMultiplexInfo_t *info = obj; ServiceRefDec(info->service); MultiplexRefDec(info->mux); }dvbstreamer-2.1.0/src/plugins/eventsdispatcher.c000077500000000000000000000364071217721213100220310ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA eventsdispatcher.c Plugin to allow access to internal event information. */ #include #include #include #include #include #include #include #include #include "main.h" #include "logging.h" #include "plugin.h" #include "events.h" #include "commands.h" #include "objects.h" #include "deferredproc.h" #include "list.h" #include "deliverymethod.h" #include "properties.h" /******************************************************************************* * Typedefs * *******************************************************************************/ typedef struct EventDescription_s { struct timeval at; char *eventName; char *description; }EventDescription_t; typedef struct EventDispatcherListener_s { char *name; bool allEvents; List_t *events; DeliveryMethodInstance_t *dmInstance; }EventDispatcherListener_t; /******************************************************************************* * Prototypes * *******************************************************************************/ static void EventDispatcherInstalled(bool installed); static void CommandAddListener(int argc, char **argv); static void CommandRemoveListener(int argc, char **argv); static void CommandListListeners(int argc, char **argv); static void CommandAddListenEvent(int argc, char **argv); static void CommandRemoveListenEvent(int argc, char **argv); static void CommandListListenEvents(int argc, char **argv); static void EventCallback(void *arg, Event_t event, void *payload); static void DeferredInformListeners(void *arg); static void EventDescriptionDestructor(void *arg); static void EventDispatcherListenerDestructor(void *arg); static void AddListener(EventDispatcherListener_t *listener); static void RemoveListener(EventDispatcherListener_t *listener); static EventDispatcherListener_t *FindListener(char *name); static void AddListenerEvent(EventDispatcherListener_t *listener, char *filter); static bool RemoveListenerEvent(EventDispatcherListener_t *listener, char *filter); /******************************************************************************* * Global variables * *******************************************************************************/ static List_t *listenersList; static pthread_mutex_t listenersMutex = PTHREAD_MUTEX_INITIALIZER; static const char EVENTDISPATCH[] = "EventDispatch"; /******************************************************************************* * Plugin Setup * *******************************************************************************/ PLUGIN_COMMANDS( { "addlistener", 2, 2, "Add a destination to send event notification to.", "addlistener \n" "Add an MRL destination to send event notifications to.\n" "The MRL can be any delivery system that supports sending opaque chunks," " udp and file are 2 examples.", CommandAddListener }, { "rmlistener", 1, 1, "Remove a destination to send event notification to.", "rmlistener \n" "Remove a destination to send event notifications over udp to.", CommandRemoveListener }, { "lslisteners", 0, 0, "List all registered event listener", "List all registered UDP event listener", CommandListListeners }, { "addlistenevent", 2, 2, "Add an internal event to monitor.", "addlistenevent \n" "Add an internal event () to monitor to the listener specified by .\n" " can be either a full event name, an event source or the special name \"\"", CommandAddListenEvent }, { "rmlistenevent", 2, 2, "Remove an internal event to monitor", "rmlistenevent \n" "Remove an internal event previously monitored by a call to addevent.", CommandRemoveListenEvent }, { "lslistenevents", 1, 1, "List all registered event listener", "List all registered UDP event listener", CommandListListenEvents } ); PLUGIN_FEATURES( PLUGIN_FEATURE_INSTALL(EventDispatcherInstalled) ); PLUGIN_INTERFACE_CF( PLUGIN_FOR_ALL, "EventsDispatcher", "0.1", "Interface to internal events.", "charrea6@users.sourceforge.net" ); static void EventDispatcherInstalled(bool installed) { if (installed) { ObjectRegisterTypeDestructor(EventDescription_t, EventDescriptionDestructor); ObjectRegisterTypeDestructor(EventDispatcherListener_t, EventDispatcherListenerDestructor); listenersList = ListCreate(); } else { ListIterator_t iterator; EventsUnregisterListener(EventCallback, NULL); for (ListIterator_Init(iterator, listenersList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { EventDispatcherListener_t *listener = ListIterator_Current(iterator); listener->dmInstance = NULL; /* Delivery Method Manager will already have destroyed this by the time we get here! */ } ObjectListFree(listenersList); } } /******************************************************************************* * Command Functions * *******************************************************************************/ static void CommandAddListener(int argc, char **argv) { EventDispatcherListener_t *listener; DeliveryMethodInstance_t *mrlInstance; listener = FindListener(argv[0]); if (listener) { ObjectRefDec(listener); CommandError(COMMAND_ERROR_GENERIC, "Listener already exists!"); return; } mrlInstance = DeliveryMethodCreate(argv[1]); if (!mrlInstance) { CommandError(COMMAND_ERROR_GENERIC, "Invalid MRL!"); return; } listener = ObjectCreateType(EventDispatcherListener_t); listener->name = strdup(argv[0]); listener->events = ListCreate(); listener->dmInstance = mrlInstance; AddListener(listener); } static void CommandRemoveListener(int argc, char **argv) { EventDispatcherListener_t *listener; listener = FindListener(argv[0]); if (!listener) { CommandError(COMMAND_ERROR_GENERIC, "Listener not found!"); return; } RemoveListener(listener); ObjectRefDec(listener); ObjectRefDec(listener); /* Do this twice as FindListener increments the ref count */ } static void CommandListListeners(int argc, char **argv) { ListIterator_t iterator; pthread_mutex_lock(&listenersMutex); for (ListIterator_Init(iterator, listenersList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { EventDispatcherListener_t *listener = (EventDispatcherListener_t *)ListIterator_Current(iterator); CommandPrintf("%s : %s\n", listener->name, listener->dmInstance->mrl); } pthread_mutex_unlock(&listenersMutex); } static void CommandAddListenEvent(int argc, char **argv) { EventDispatcherListener_t *listener; listener = FindListener(argv[0]); if (!listener) { CommandError(COMMAND_ERROR_GENERIC, "Listener not found!"); return; } AddListenerEvent(listener, argv[1]); ObjectRefDec(listener); } static void CommandRemoveListenEvent(int argc, char **argv) { EventDispatcherListener_t *listener; listener = FindListener(argv[0]); if (!listener) { CommandError(COMMAND_ERROR_GENERIC, "Listener not found!"); return; } if (!RemoveListenerEvent(listener, argv[1])) { CommandError(COMMAND_ERROR_GENERIC, "Event not found!"); return; } ObjectRefDec(listener); } static void CommandListListenEvents(int argc, char **argv) { EventDispatcherListener_t *listener; ListIterator_t iterator; listener = FindListener(argv[0]); if (!listener) { CommandError(COMMAND_ERROR_GENERIC, "Listener not found!"); return; } for (ListIterator_Init(iterator, listener->events); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { char *eventStr = ListIterator_Current(iterator); CommandPrintf("%s\n", eventStr); } ObjectRefDec(listener); } /******************************************************************************* * Local Functions * *******************************************************************************/ static void EventCallback(void *arg, Event_t event, void *payload) { char *desc = EventsEventToString(event, payload); char *eventName = EventsEventName(event); EventDescription_t *eventDesc = ObjectCreateType(EventDescription_t); gettimeofday(&eventDesc->at, NULL); eventDesc->eventName = eventName; eventDesc->description = desc; DeferredProcessingAddJob(DeferredInformListeners, eventDesc); ObjectRefDec(eventDesc); } static void DeferredInformListeners(void * arg) { EventDescription_t *eventDesc = arg; ListIterator_t iterator; char *outputLine = NULL; size_t outputLineLen = 0; LogModule(LOG_DEBUG, EVENTDISPATCH, "Processing event (%ld.%ld) %s\n", eventDesc->at.tv_sec, eventDesc->at.tv_usec, eventDesc->description); pthread_mutex_lock(&listenersMutex); for (ListIterator_Init(iterator, listenersList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { EventDispatcherListener_t *listener = (EventDispatcherListener_t *)ListIterator_Current(iterator); bool inform = FALSE; LogModule(LOG_DEBUG, EVENTDISPATCH, "Checking listener %s\n", listener->name); if (listener->allEvents) { inform = TRUE; } else { ListIterator_t eventFilterIterator; for (ListIterator_Init(eventFilterIterator, listener->events); ListIterator_MoreEntries(eventFilterIterator); ListIterator_Next(eventFilterIterator)) { char *eventFilter = (char *)ListIterator_Current(eventFilterIterator); if (strncmp(eventFilter, eventDesc->eventName, strlen(eventFilter)) == 0) { inform = TRUE; break; } } } if (inform) { LogModule(LOG_DEBUG, EVENTDISPATCH, "Informing listener %s\n", listener->name); if (outputLine == NULL) { struct tm *localtm = localtime(&eventDesc->at.tv_sec); char timeStr[21]; /* xxxx-xx-xx xx:xx:xx */ PropertyValue_t value; PropertiesGet("adapter.number", &value); strftime(timeStr, sizeof(timeStr)-1, "%F %T", localtm); outputLineLen = asprintf(&outputLine, "---\n" "Time: %s.%ld\n" "Adapter: %d\n" "%s...\n", timeStr, eventDesc->at.tv_usec, value.u.integer, eventDesc->description); } if (outputLine) { DeliveryMethodOutputBlock(listener->dmInstance, outputLine, outputLineLen); } } } pthread_mutex_unlock(&listenersMutex); ObjectRefDec(eventDesc); } static void EventDescriptionDestructor(void *arg) { EventDescription_t *desc = arg; free(desc->eventName); free(desc->description); } static void EventDispatcherListenerDestructor(void *arg) { EventDispatcherListener_t *listener = arg; ListFree(listener->events, free); free(listener->name); if (listener->dmInstance) { DeliveryMethodDestroy(listener->dmInstance); } } static void AddListener(EventDispatcherListener_t *listener) { pthread_mutex_lock(&listenersMutex); ListAdd(listenersList, listener); if (ListCount(listenersList) == 1) { LogModule(LOG_DEBUG, EVENTDISPATCH, "Adding Event callback\n"); EventsRegisterListener(EventCallback, NULL); } pthread_mutex_unlock(&listenersMutex); } static void RemoveListener(EventDispatcherListener_t *listener) { pthread_mutex_lock(&listenersMutex); ListRemove(listenersList, listener); if (ListCount(listenersList) == 0) { LogModule(LOG_DEBUG, EVENTDISPATCH, "Removing Event callback\n"); EventsUnregisterListener(EventCallback, NULL); LogModule(LOG_DEBUG, EVENTDISPATCH, "Removed Event callback\n"); } pthread_mutex_unlock(&listenersMutex); } static EventDispatcherListener_t *FindListener(char *name) { ListIterator_t iterator; EventDispatcherListener_t *result = NULL; pthread_mutex_lock(&listenersMutex); for (ListIterator_Init(iterator, listenersList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { EventDispatcherListener_t *listener = (EventDispatcherListener_t*) ListIterator_Current(iterator); if (strcmp(listener->name, name) == 0) { result = listener; ObjectRefInc(result); break; } } pthread_mutex_unlock(&listenersMutex); return result; } static void AddListenerEvent(EventDispatcherListener_t *listener, char *filter) { pthread_mutex_lock(&listenersMutex); if (strcmp(filter, "") == 0) { listener->allEvents = TRUE; } else { ListAdd(listener->events, strdup(filter)); } pthread_mutex_unlock(&listenersMutex); } static bool RemoveListenerEvent(EventDispatcherListener_t *listener, char *filter) { bool found = FALSE; pthread_mutex_lock(&listenersMutex); if (strcmp(filter, "") == 0) { listener->allEvents = FALSE; found = TRUE; } else { ListIterator_t iterator; for (ListIterator_Init(iterator, listener->events); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { char *eventStr = ListIterator_Current(iterator); if (strcmp(eventStr, filter) == 0) { ListRemoveCurrent(&iterator); free(eventStr); found = TRUE; break; } } } pthread_mutex_unlock(&listenersMutex); return found; } dvbstreamer-2.1.0/src/plugins/fileoutput.c000066400000000000000000000147371217721213100206550ustar00rootroot00000000000000/* Copyright (C) 2006, 2010 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA fileoutput.c File Delivery Method handler, all packets are written to the file of choosing. */ #define _FILE_OFFSET_BITS 64 #include #include #include #include #include "plugin.h" #include "ts.h" #include "deliverymethod.h" #include "logging.h" /******************************************************************************* * Typedefs * *******************************************************************************/ struct FileOutputInstance_t { /* !!! MUST BE THE FIRST FIELD IN THE STRUCTURE !!! * As the address of this field will be passed to all delivery method * functions and a 0 offset is assumed! */ DeliveryMethodInstance_t instance; FILE *fp; }; /******************************************************************************* * Prototypes * *******************************************************************************/ bool FileOutputCanHandle(char *mrl); DeliveryMethodInstance_t *FileOutputCreate(char *arg); void FileOutputSendPacket(DeliveryMethodInstance_t *this, TSPacket_t *packet); void FileOutputSendBlock(DeliveryMethodInstance_t *this, void *block, unsigned long blockLen); void FileOutputDestroy(DeliveryMethodInstance_t *this); void FileReserveHeaderSpace(DeliveryMethodInstance_t *this, int packets); void FileSetHeader(struct DeliveryMethodInstance_t *this, TSPacket_t *packets, int count); /******************************************************************************* * Global variables * *******************************************************************************/ /** Constants for the start of the MRL **/ const char FilePrefix[] = "file://"; const char FileAppendPrefix[] = "filea://"; DeliveryMethodInstanceOps_t FileInstanceOps ={ FileOutputSendPacket, FileOutputSendBlock, FileOutputDestroy, FileReserveHeaderSpace, FileSetHeader, }; static const char FILEOUTPUT[] = "FileOutput"; /******************************************************************************* * Plugin Setup * *******************************************************************************/ PLUGIN_FEATURES( PLUGIN_FEATURE_DELIVERYMETHOD(FileOutputCanHandle, FileOutputCreate) ); PLUGIN_INTERFACE_F( PLUGIN_FOR_ALL, "FileOutput", "0.2", "File Delivery method.\nUse file://\n" "File name can be in absolute or relative.\n" "For an absolute file name use file:///home/user/myts.ts.\n" "For a relative file name use file://myts.ts.\n" "Use the filea:// prefix to append data to an existing file.", "charrea6@users.sourceforge.net" ); /******************************************************************************* * Delivery Method Functions * *******************************************************************************/ bool FileOutputCanHandle(char *mrl) { return (strncmp(FilePrefix, mrl, sizeof(FilePrefix)-1) == 0) || (strncmp(FileAppendPrefix, mrl, sizeof(FileAppendPrefix)-1) == 0); } DeliveryMethodInstance_t *FileOutputCreate(char *arg) { struct FileOutputInstance_t *instance = calloc(1, sizeof(struct FileOutputInstance_t)); bool append = (strncmp(FileAppendPrefix, arg, sizeof(FileAppendPrefix)-1) == 0); char *mode; int prefixLen; if (instance == NULL) { return NULL; } if (append) { mode = "ab"; prefixLen = sizeof(FileAppendPrefix)-1; } else { mode = "wb"; prefixLen = sizeof(FilePrefix)-1; } instance->instance.ops = &FileInstanceOps; instance->fp = fopen((char*)(arg + prefixLen), mode); if (!instance->fp) { free(instance); return NULL; } instance->instance.mrl = strdup(arg); return &instance->instance; } void FileOutputSendPacket(DeliveryMethodInstance_t *this, TSPacket_t *packet) { FileOutputSendBlock(this, (void *)packet, sizeof(TSPacket_t)); } void FileOutputSendBlock(DeliveryMethodInstance_t *this, void *block, unsigned long blockLen) { struct FileOutputInstance_t *instance = (struct FileOutputInstance_t*)this; if (fwrite(block, 1, blockLen, instance->fp) != blockLen) { LogModule(LOG_INFO, FILEOUTPUT, "Failed to write entire block to file!\n"); } fflush(instance->fp); } void FileOutputDestroy(DeliveryMethodInstance_t *this) { struct FileOutputInstance_t *instance = (struct FileOutputInstance_t*)this; fclose(instance->fp); free(this->mrl); free(this); } void FileReserveHeaderSpace(DeliveryMethodInstance_t *this, int packets) { struct FileOutputInstance_t *instance = (struct FileOutputInstance_t*)this; TSPacket_t nullPacket; int i; nullPacket.header[0] = 0x47; nullPacket.header[1] = 0x00; nullPacket.header[2] = 0x00; nullPacket.header[3] = 0x00; TSPACKET_SETPID(nullPacket, 0x1fff); for (i=0; i< packets; i ++) { if (fwrite(&nullPacket, TSPACKET_SIZE, 1, instance->fp) != 1) { LogModule(LOG_INFO, FILEOUTPUT, "Failed to write all of null packet to start of file.\n"); } } } void FileSetHeader(struct DeliveryMethodInstance_t *this, TSPacket_t *packets, int count) { struct FileOutputInstance_t *instance = (struct FileOutputInstance_t*)this; fpos_t current; fgetpos(instance->fp, ¤t); rewind(instance->fp); if (fwrite(packets, TSPACKET_SIZE, count, instance->fp)) { LogModule(LOG_INFO, FILEOUTPUT, "Failed to write all of packet to file.\n"); } fsetpos(instance->fp, ¤t); } dvbstreamer-2.1.0/src/plugins/freesat_huffman.c000077500000000000000000000101411217721213100215760ustar00rootroot00000000000000/* * This code originate from Mythtv and was simply converted to use char * rather * than QString. * Many thanks to the Mythtv developers for working this out :-) */ #include #include #include "freesat_huffman.h" struct fsattab { unsigned int value; short bits; char next; }; #define START '\0' #define STOP '\0' #define ESCAPE '\1' #include "freesat_tables.h" #include "types.h" char *freesat_huffman_to_string(const unsigned char *src, uint size) { struct fsattab *fsat_table; unsigned int *fsat_index; if (src[1] == 1 || src[1] == 2) { if (src[1] == 1) { fsat_table = fsat_table_1; fsat_index = fsat_index_1; } else { fsat_table = fsat_table_2; fsat_index = fsat_index_2; } char *uncompressed = calloc((size * 3) + 1, sizeof(char)); size_t uncompressedSize = size * 3; int p = 0; unsigned value = 0, byte = 2, bit = 0; while (byte < 6 && byte < size) { value |= src[byte] << ((5-byte) * 8); byte++; } char lastch = START; do { bool found = FALSE; unsigned bitShift = 0; char nextCh = STOP; if (lastch == ESCAPE) { found = TRUE; // Encoded in the next 8 bits. // Terminated by the first ASCII character. nextCh = (value >> 24) & 0xff; bitShift = 8; if ((nextCh & 0x80) == 0) { if (nextCh < ' ') { nextCh = STOP; } lastch = nextCh; } } else { unsigned indx = (unsigned)lastch; unsigned j; for (j = fsat_index[indx]; j < fsat_index[indx+1]; j++) { unsigned mask = 0, maskbit = 0x80000000; short kk; for (kk = 0; kk < fsat_table[j].bits; kk++) { mask |= maskbit; maskbit >>= 1; } if ((value & mask) == fsat_table[j].value) { nextCh = fsat_table[j].next; bitShift = fsat_table[j].bits; found = TRUE; lastch = nextCh; break; } } } if (found) { if ((nextCh != STOP) && (nextCh != ESCAPE)) { if (p >= uncompressedSize) { uncompressed = realloc(uncompressed, p + 10 + 1); uncompressedSize = p + 10; } uncompressed[p++] = nextCh; } // Shift up by the number of bits. unsigned b; for (b = 0; b < bitShift; b++) { value = (value << 1) & 0xfffffffe; if (byte < size) { value |= (src[byte] >> (7-bit)) & 1; } if (bit == 7) { bit = 0; byte++; } else { bit++; } } } else { // Entry missing in table. if (p + 3 > uncompressedSize) { uncompressed = realloc(uncompressed, p + 3 + 1); } strcpy(&uncompressed[p], "..."); return uncompressed; } } while (lastch != STOP && byte < size+4); uncompressed[p] = 0; return uncompressed; } return ""; } dvbstreamer-2.1.0/src/plugins/freesat_huffman.h000077500000000000000000000003411217721213100216040ustar00rootroot00000000000000#ifndef _FREESAT_HUFFMAN_H_ #define _FREESAT_HUFFMAN_H_ // POSIX header #include #include char *freesat_huffman_to_string(const unsigned char *compressed, uint size); #endif // _FREESAT_HUFFMAN_H_ dvbstreamer-2.1.0/src/plugins/freesat_tables.h000077500000000000000000007303511217721213100214450ustar00rootroot00000000000000struct fsattab fsat_table_1[] = { /* 51 */ { 0x00000000, 2, 84}, /* 0 'T' */ { 0x40000000, 3, 66}, /* 1 'B' */ { 0x80000000, 4, 67}, /* 2 'C' */ { 0x90000000, 4, 73}, /* 3 'I' */ { 0xd0000000, 4, 83}, /* 4 'S' */ { 0x60000000, 5, 76}, /* 5 'L' */ { 0x70000000, 5, 68}, /* 6 'D' */ { 0x78000000, 5, 72}, /* 7 'H' */ { 0xa0000000, 5, 82}, /* 8 'R' */ { 0xa8000000, 5, 78}, /* 9 'N' */ { 0xb0000000, 5, 69}, /* 10 'E' */ { 0xc0000000, 5, 70}, /* 11 'F' */ { 0xc8000000, 5, 65}, /* 12 'A' */ { 0xe0000000, 5, 77}, /* 13 'M' */ { 0xe8000000, 5, 80}, /* 14 'P' */ { 0xf0000000, 5, 87}, /* 15 'W' */ { 0x6c000000, 6, 81}, /* 16 'Q' */ { 0xbc000000, 6, 71}, /* 17 'G' */ { 0xf8000000, 6, 74}, /* 18 'J' */ { 0x68000000, 7, 75}, /* 19 'K' */ { 0xba000000, 7, 85}, /* 20 'U' */ { 0xfc000000, 7, 79}, /* 21 'O' */ { 0x6a000000, 8, 54}, /* 22 '6' */ { 0x6b000000, 8, 46}, /* 23 '.' */ { 0xb8000000, 8, 86}, /* 24 'V' */ { 0xfe000000, 8, 89}, /* 25 'Y' */ { 0xb9800000, 9, 50}, /* 26 '2' */ { 0xff800000, 9, 88}, /* 27 'X' */ { 0xb9000000, 10, 90}, /* 28 'Z' */ { 0xff000000, 10, 56}, /* 29 '8' */ { 0xb9400000, 11, 49}, /* 30 '1' */ { 0xb9600000, 11, 51}, /* 31 '3' */ { 0xff400000, 12, 52}, /* 32 '4' */ { 0xff500000, 12, 39}, /* 33 '\'' */ { 0xff700000, 12, 32}, /* 34 ' ' */ { 0xff600000, 14, 53}, /* 35 '5' */ { 0xff6c0000, 14, 48}, /* 36 '0' */ { 0xff660000, 15, 109}, /* 37 'm' */ { 0xff640000, 16, 99}, /* 38 'c' */ { 0xff680000, 16, 57}, /* 39 '9' */ { 0xff6a0000, 16, 97}, /* 40 'a' */ { 0xff6b0000, 16, 100}, /* 41 'd' */ { 0xff650000, 17, 115}, /* 42 's' */ { 0xff658000, 17, 112}, /* 43 'p' */ { 0xff690000, 17, 40}, /* 44 '(' */ { 0xff698000, 18, 116}, /* 45 't' */ { 0xff69c000, 19, 55}, /* 46 '7' */ { 0xff69e000, 20, 1}, /* 47 '0x01' */ { 0xff69f000, 20, 108}, /* 48 'l' */ { 0x00000000, 1, 1}, /* 49 '0x01' */ { 0x80000000, 1, 1}, /* 50 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 51 '0x01' */ { 0x80000000, 1, 1}, /* 52 '0x01' */ /* 0 */ /* 2 */ { 0x00000000, 1, 1}, /* 53 '0x01' */ { 0x80000000, 1, 1}, /* 54 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 55 '0x01' */ { 0x80000000, 1, 1}, /* 56 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 57 '0x01' */ { 0x80000000, 1, 1}, /* 58 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 59 '0x01' */ { 0x80000000, 1, 1}, /* 60 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 61 '0x01' */ { 0x80000000, 1, 1}, /* 62 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 63 '0x01' */ { 0x80000000, 1, 1}, /* 64 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 65 '0x01' */ { 0x80000000, 1, 1}, /* 66 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 67 '0x01' */ { 0x80000000, 1, 1}, /* 68 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 69 '0x01' */ { 0x80000000, 1, 1}, /* 70 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 71 '0x01' */ { 0x80000000, 1, 1}, /* 72 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 73 '0x01' */ { 0x80000000, 1, 1}, /* 74 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 75 '0x01' */ { 0x80000000, 1, 1}, /* 76 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 77 '0x01' */ { 0x80000000, 1, 1}, /* 78 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 79 '0x01' */ { 0x80000000, 1, 1}, /* 80 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 81 '0x01' */ { 0x80000000, 1, 1}, /* 82 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 83 '0x01' */ { 0x80000000, 1, 1}, /* 84 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 85 '0x01' */ { 0x80000000, 1, 1}, /* 86 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 87 '0x01' */ { 0x80000000, 1, 1}, /* 88 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 89 '0x01' */ { 0x80000000, 1, 1}, /* 90 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 91 '0x01' */ { 0x80000000, 1, 1}, /* 92 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 93 '0x01' */ { 0x80000000, 1, 1}, /* 94 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 95 '0x01' */ { 0x80000000, 1, 1}, /* 96 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 97 '0x01' */ { 0x80000000, 1, 1}, /* 98 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 99 '0x01' */ { 0x80000000, 1, 1}, /* 100 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 101 '0x01' */ { 0x80000000, 1, 1}, /* 102 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 103 '0x01' */ { 0x80000000, 1, 1}, /* 104 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 105 '0x01' */ { 0x80000000, 1, 1}, /* 106 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 107 '0x01' */ { 0x80000000, 1, 1}, /* 108 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 109 '0x01' */ { 0x80000000, 1, 1}, /* 110 '0x01' */ /* 70 */ { 0x00000000, 4, 87}, /* 111 'W' */ { 0x30000000, 4, 77}, /* 112 'M' */ { 0x40000000, 4, 67}, /* 113 'C' */ { 0x50000000, 4, 66}, /* 114 'B' */ { 0x70000000, 4, 80}, /* 115 'P' */ { 0x90000000, 4, 84}, /* 116 'T' */ { 0xc0000000, 4, 78}, /* 117 'N' */ { 0xf0000000, 4, 83}, /* 118 'S' */ { 0x18000000, 5, 73}, /* 119 'I' */ { 0x20000000, 5, 71}, /* 120 'G' */ { 0x60000000, 5, 72}, /* 121 'H' */ { 0x68000000, 5, 68}, /* 122 'D' */ { 0x80000000, 5, 111}, /* 123 'o' */ { 0x88000000, 5, 65}, /* 124 'A' */ { 0xa0000000, 5, 116}, /* 125 't' */ { 0xb0000000, 5, 97}, /* 126 'a' */ { 0xb8000000, 5, 70}, /* 127 'F' */ { 0xd0000000, 5, 76}, /* 128 'L' */ { 0xd8000000, 5, 82}, /* 129 'R' */ { 0x2c000000, 6, 85}, /* 130 'U' */ { 0xac000000, 6, 79}, /* 131 'O' */ { 0xe4000000, 6, 74}, /* 132 'J' */ { 0xe8000000, 6, 69}, /* 133 'E' */ { 0x10000000, 7, 102}, /* 134 'f' */ { 0x12000000, 7, 81}, /* 135 'Q' */ { 0x16000000, 7, 86}, /* 136 'V' */ { 0x28000000, 7, 0}, /* 137 '0x00' */ { 0x2a000000, 7, 119}, /* 138 'w' */ { 0xe0000000, 7, 50}, /* 139 '2' */ { 0xe2000000, 7, 75}, /* 140 'K' */ { 0xec000000, 7, 89}, /* 141 'Y' */ { 0xee000000, 7, 105}, /* 142 'i' */ { 0x14000000, 8, 45}, /* 143 '-' */ { 0xa9000000, 8, 49}, /* 144 '1' */ { 0xa8000000, 9, 38}, /* 145 '&' */ { 0xaa800000, 9, 88}, /* 146 'X' */ { 0x15400000, 10, 114}, /* 147 'r' */ { 0xa8800000, 10, 53}, /* 148 '5' */ { 0xa8c00000, 10, 90}, /* 149 'Z' */ { 0xaa400000, 10, 57}, /* 150 '9' */ { 0xab400000, 10, 115}, /* 151 's' */ { 0xab800000, 10, 52}, /* 152 '4' */ { 0xabc00000, 10, 51}, /* 153 '3' */ { 0x15000000, 11, 55}, /* 154 '7' */ { 0x15800000, 11, 98}, /* 155 'b' */ { 0x15c00000, 11, 121}, /* 156 'y' */ { 0xaa000000, 11, 39}, /* 157 '\'' */ { 0xab000000, 11, 54}, /* 158 '6' */ { 0x15a00000, 12, 118}, /* 159 'v' */ { 0x15b00000, 12, 100}, /* 160 'd' */ { 0x15e00000, 12, 40}, /* 161 '(' */ { 0xaa200000, 12, 32}, /* 162 ' ' */ { 0xaa300000, 12, 48}, /* 163 '0' */ { 0xab200000, 12, 110}, /* 164 'n' */ { 0xab300000, 12, 56}, /* 165 '8' */ { 0x15300000, 13, 103}, /* 166 'g' */ { 0x15f00000, 13, 117}, /* 167 'u' */ { 0x15200000, 14, 43}, /* 168 '+' */ { 0x15240000, 14, 46}, /* 169 '.' */ { 0x15280000, 14, 1}, /* 170 '0x01' */ { 0x152c0000, 14, 108}, /* 171 'l' */ { 0x153c0000, 14, 109}, /* 172 'm' */ { 0x15f80000, 14, 112}, /* 173 'p' */ { 0x15380000, 15, 92}, /* 174 '\\' */ { 0x153a0000, 15, 47}, /* 175 '/' */ { 0x15fe0000, 15, 101}, /* 176 'e' */ { 0x15fd0000, 16, 34}, /* 177 '\"' */ { 0x15fc8000, 17, 99}, /* 178 'c' */ { 0x15fc0000, 18, 107}, /* 179 'k' */ { 0x15fc4000, 18, 104}, /* 180 'h' */ /* 7 */ { 0x80000000, 1, 0}, /* 181 '0x00' */ { 0x40000000, 2, 32}, /* 182 ' ' */ { 0x20000000, 3, 46}, /* 183 '.' */ { 0x10000000, 4, 33}, /* 184 '!' */ { 0x08000000, 5, 34}, /* 185 '\"' */ { 0x00000000, 6, 1}, /* 186 '0x01' */ { 0x04000000, 6, 58}, /* 187 ':' */ /* 3 */ { 0x00000000, 1, 32}, /* 188 ' ' */ { 0x80000000, 2, 1}, /* 189 '0x01' */ { 0xc0000000, 2, 73}, /* 190 'I' */ /* 2 */ { 0x00000000, 1, 1}, /* 191 '0x01' */ { 0x80000000, 1, 1}, /* 192 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 193 '0x01' */ { 0x80000000, 1, 1}, /* 194 '0x01' */ /* 3 */ { 0x80000000, 1, 32}, /* 195 ' ' */ { 0x00000000, 2, 1}, /* 196 '0x01' */ { 0x40000000, 2, 0}, /* 197 '0x00' */ /* 4 */ { 0x80000000, 1, 32}, /* 198 ' ' */ { 0x40000000, 2, 66}, /* 199 'B' */ { 0x00000000, 3, 1}, /* 200 '0x01' */ { 0x20000000, 3, 46}, /* 201 '.' */ /* 32 */ { 0x80000000, 1, 115}, /* 202 's' */ { 0x00000000, 3, 109}, /* 203 'm' */ { 0x40000000, 3, 67}, /* 204 'C' */ { 0x20000000, 4, 116}, /* 205 't' */ { 0x30000000, 4, 32}, /* 206 ' ' */ { 0x60000000, 5, 100}, /* 207 'd' */ { 0x70000000, 5, 118}, /* 208 'v' */ { 0x6c000000, 6, 114}, /* 209 'r' */ { 0x7c000000, 6, 65}, /* 210 'A' */ { 0x6a000000, 7, 110}, /* 211 'n' */ { 0x68000000, 8, 71}, /* 212 'G' */ { 0x79000000, 8, 108}, /* 213 'l' */ { 0x69800000, 9, 68}, /* 214 'D' */ { 0x78000000, 9, 66}, /* 215 'B' */ { 0x78800000, 9, 101}, /* 216 'e' */ { 0x7a800000, 9, 105}, /* 217 'i' */ { 0x7b000000, 9, 54}, /* 218 '6' */ { 0x69000000, 10, 76}, /* 219 'L' */ { 0x7a400000, 10, 0}, /* 220 '0x00' */ { 0x7bc00000, 10, 119}, /* 221 'w' */ { 0x69400000, 11, 79}, /* 222 'O' */ { 0x7a000000, 11, 83}, /* 223 'S' */ { 0x7a200000, 11, 69}, /* 224 'E' */ { 0x7ba00000, 11, 78}, /* 225 'N' */ { 0x7b900000, 12, 82}, /* 226 'R' */ { 0x69600000, 13, 97}, /* 227 'a' */ { 0x69680000, 13, 77}, /* 228 'M' */ { 0x69700000, 13, 75}, /* 229 'K' */ { 0x69780000, 13, 70}, /* 230 'F' */ { 0x7b800000, 13, 48}, /* 231 '0' */ { 0x7b880000, 14, 1}, /* 232 '0x01' */ { 0x7b8c0000, 14, 99}, /* 233 'c' */ /* 12 */ { 0x80000000, 1, 99}, /* 234 'c' */ { 0x00000000, 3, 49}, /* 235 '1' */ { 0x20000000, 4, 77}, /* 236 'M' */ { 0x30000000, 4, 85}, /* 237 'U' */ { 0x40000000, 4, 82}, /* 238 'R' */ { 0x50000000, 4, 68}, /* 239 'D' */ { 0x60000000, 4, 72}, /* 240 'H' */ { 0x70000000, 5, 83}, /* 241 'S' */ { 0x78000000, 6, 70}, /* 242 'F' */ { 0x7c000000, 7, 71}, /* 243 'G' */ { 0x7e000000, 8, 1}, /* 244 '0x01' */ { 0x7f000000, 8, 89}, /* 245 'Y' */ /* 3 */ { 0x80000000, 1, 0}, /* 246 '0x00' */ { 0x00000000, 2, 1}, /* 247 '0x01' */ { 0x40000000, 2, 32}, /* 248 ' ' */ /* 11 */ { 0x00000000, 1, 42}, /* 249 '*' */ { 0xa0000000, 3, 32}, /* 250 ' ' */ { 0x80000000, 4, 100}, /* 251 'd' */ { 0xc0000000, 4, 109}, /* 252 'm' */ { 0xd0000000, 4, 116}, /* 253 't' */ { 0xf0000000, 4, 115}, /* 254 's' */ { 0x90000000, 5, 101}, /* 255 'e' */ { 0xe0000000, 5, 103}, /* 256 'g' */ { 0xe8000000, 5, 107}, /* 257 'k' */ { 0x98000000, 6, 1}, /* 258 '0x01' */ { 0x9c000000, 6, 121}, /* 259 'y' */ /* 2 */ { 0x00000000, 1, 1}, /* 260 '0x01' */ { 0x80000000, 1, 32}, /* 261 ' ' */ /* 4 */ { 0x80000000, 1, 32}, /* 262 ' ' */ { 0x40000000, 2, 48}, /* 263 '0' */ { 0x00000000, 3, 1}, /* 264 '0x01' */ { 0x20000000, 3, 46}, /* 265 '.' */ /* 37 */ { 0xc0000000, 2, 32}, /* 266 ' ' */ { 0x60000000, 3, 83}, /* 267 'S' */ { 0x80000000, 3, 71}, /* 268 'G' */ { 0xa0000000, 3, 79}, /* 269 'O' */ { 0x30000000, 4, 84}, /* 270 'T' */ { 0x40000000, 4, 85}, /* 271 'U' */ { 0x00000000, 5, 69}, /* 272 'E' */ { 0x10000000, 5, 68}, /* 273 'D' */ { 0x08000000, 6, 109}, /* 274 'm' */ { 0x18000000, 6, 48}, /* 275 '0' */ { 0x1c000000, 6, 73}, /* 276 'I' */ { 0x28000000, 6, 54}, /* 277 '6' */ { 0x50000000, 6, 70}, /* 278 'F' */ { 0x54000000, 6, 111}, /* 279 'o' */ { 0x0c000000, 7, 76}, /* 280 'L' */ { 0x0e000000, 7, 67}, /* 281 'C' */ { 0x22000000, 7, 65}, /* 282 'A' */ { 0x24000000, 7, 116}, /* 283 't' */ { 0x26000000, 7, 89}, /* 284 'Y' */ { 0x2e000000, 7, 50}, /* 285 '2' */ { 0x58000000, 7, 66}, /* 286 'B' */ { 0x5a000000, 7, 46}, /* 287 '.' */ { 0x20000000, 8, 80}, /* 288 'P' */ { 0x21000000, 8, 90}, /* 289 'Z' */ { 0x5c000000, 8, 56}, /* 290 '8' */ { 0x5d000000, 8, 105}, /* 291 'i' */ { 0x5e000000, 8, 100}, /* 292 'd' */ { 0x5f000000, 8, 72}, /* 293 'H' */ { 0x2c800000, 9, 78}, /* 294 'N' */ { 0x2d800000, 9, 82}, /* 295 'R' */ { 0x2c000000, 10, 49}, /* 296 '1' */ { 0x2c400000, 10, 87}, /* 297 'W' */ { 0x2d200000, 11, 99}, /* 298 'c' */ { 0x2d400000, 11, 97}, /* 299 'a' */ { 0x2d600000, 11, 77}, /* 300 'M' */ { 0x2d000000, 12, 1}, /* 301 '0x01' */ { 0x2d100000, 12, 81}, /* 302 'Q' */ /* 25 */ { 0x80000000, 1, 46}, /* 303 '.' */ { 0x40000000, 2, 0}, /* 304 '0x00' */ { 0x20000000, 4, 32}, /* 305 ' ' */ { 0x00000000, 5, 73}, /* 306 'I' */ { 0x08000000, 5, 84}, /* 307 'T' */ { 0x10000000, 5, 67}, /* 308 'C' */ { 0x30000000, 5, 112}, /* 309 'p' */ { 0x38000000, 5, 48}, /* 310 '0' */ { 0x1c000000, 6, 72}, /* 311 'H' */ { 0x1a000000, 8, 87}, /* 312 'W' */ { 0x18800000, 9, 83}, /* 313 'S' */ { 0x1b000000, 9, 51}, /* 314 '3' */ { 0x1b800000, 9, 66}, /* 315 'B' */ { 0x18000000, 10, 49}, /* 316 '1' */ { 0x18400000, 10, 77}, /* 317 'M' */ { 0x19800000, 10, 99}, /* 318 'c' */ { 0x19000000, 11, 116}, /* 319 't' */ { 0x19200000, 11, 82}, /* 320 'R' */ { 0x19400000, 11, 70}, /* 321 'F' */ { 0x19c00000, 11, 69}, /* 322 'E' */ { 0x19e00000, 11, 65}, /* 323 'A' */ { 0x19600000, 13, 1}, /* 324 '0x01' */ { 0x19680000, 13, 108}, /* 325 'l' */ { 0x19700000, 13, 100}, /* 326 'd' */ { 0x19780000, 13, 85}, /* 327 'U' */ /* 18 */ { 0x00000000, 2, 49}, /* 328 '1' */ { 0x80000000, 2, 55}, /* 329 '7' */ { 0x40000000, 3, 52}, /* 330 '4' */ { 0x60000000, 3, 50}, /* 331 '2' */ { 0xc0000000, 3, 51}, /* 332 '3' */ { 0xe0000000, 4, 53}, /* 333 '5' */ { 0xf0000000, 6, 54}, /* 334 '6' */ { 0xf8000000, 6, 67}, /* 335 'C' */ { 0xf4000000, 7, 57}, /* 336 '9' */ { 0xf6000000, 7, 32}, /* 337 ' ' */ { 0xfc000000, 7, 56}, /* 338 '8' */ { 0xff000000, 8, 85}, /* 339 'U' */ { 0xfe000000, 10, 71}, /* 340 'G' */ { 0xfe800000, 10, 48}, /* 341 '0' */ { 0xfe400000, 11, 1}, /* 342 '0x01' */ { 0xfe600000, 11, 87}, /* 343 'W' */ { 0xfec00000, 11, 86}, /* 344 'V' */ { 0xfee00000, 11, 83}, /* 345 'S' */ /* 23 */ { 0x00000000, 2, 54}, /* 346 '6' */ { 0x40000000, 2, 32}, /* 347 ' ' */ { 0xc0000000, 2, 48}, /* 348 '0' */ { 0x90000000, 4, 112}, /* 349 'p' */ { 0xa0000000, 4, 0}, /* 350 '0x00' */ { 0x80000000, 5, 49}, /* 351 '1' */ { 0x88000000, 5, 97}, /* 352 'a' */ { 0xb8000000, 5, 55}, /* 353 '7' */ { 0xb0000000, 7, 45}, /* 354 '-' */ { 0xb4000000, 7, 115}, /* 355 's' */ { 0xb3000000, 8, 52}, /* 356 '4' */ { 0xb6000000, 8, 116}, /* 357 't' */ { 0xb7800000, 9, 37}, /* 358 '%' */ { 0xb2000000, 10, 56}, /* 359 '8' */ { 0xb2400000, 10, 58}, /* 360 ':' */ { 0xb2800000, 10, 53}, /* 361 '5' */ { 0xb2c00000, 10, 50}, /* 362 '2' */ { 0xb7000000, 10, 47}, /* 363 '/' */ { 0xb7600000, 11, 85}, /* 364 'U' */ { 0xb7500000, 12, 44}, /* 365 ',' */ { 0xb7400000, 13, 46}, /* 366 '.' */ { 0xb7480000, 14, 1}, /* 367 '0x01' */ { 0xb74c0000, 14, 108}, /* 368 'l' */ /* 22 */ { 0x40000000, 2, 0}, /* 369 '0x00' */ { 0x00000000, 3, 46}, /* 370 '.' */ { 0xa0000000, 3, 48}, /* 371 '0' */ { 0xe0000000, 3, 49}, /* 372 '1' */ { 0x20000000, 4, 50}, /* 373 '2' */ { 0x30000000, 4, 32}, /* 374 ' ' */ { 0xd0000000, 4, 47}, /* 375 '/' */ { 0x90000000, 5, 56}, /* 376 '8' */ { 0xc0000000, 5, 51}, /* 377 '3' */ { 0x80000000, 6, 53}, /* 378 '5' */ { 0x84000000, 6, 115}, /* 379 's' */ { 0x88000000, 6, 54}, /* 380 '6' */ { 0x8c000000, 6, 58}, /* 381 ':' */ { 0x98000000, 6, 39}, /* 382 '\'' */ { 0xc8000000, 6, 88}, /* 383 'X' */ { 0xcc000000, 6, 57}, /* 384 '9' */ { 0x9e000000, 7, 52}, /* 385 '4' */ { 0x9d000000, 8, 45}, /* 386 '-' */ { 0x9c800000, 9, 55}, /* 387 '7' */ { 0x9c000000, 10, 41}, /* 388 ')' */ { 0x9c400000, 11, 1}, /* 389 '0x01' */ { 0x9c600000, 11, 44}, /* 390 ',' */ /* 18 */ { 0x00000000, 1, 48}, /* 391 '0' */ { 0xc0000000, 2, 52}, /* 392 '4' */ { 0xa0000000, 3, 0}, /* 393 '0x00' */ { 0x90000000, 4, 32}, /* 394 ' ' */ { 0x80000000, 5, 58}, /* 395 ':' */ { 0x8a000000, 7, 53}, /* 396 '5' */ { 0x8e000000, 7, 47}, /* 397 '/' */ { 0x88000000, 8, 46}, /* 398 '.' */ { 0x89000000, 8, 49}, /* 399 '1' */ { 0x8c000000, 8, 87}, /* 400 'W' */ { 0x8d800000, 9, 55}, /* 401 '7' */ { 0x8d200000, 11, 51}, /* 402 '3' */ { 0x8d600000, 11, 90}, /* 403 'Z' */ { 0x8d000000, 12, 110}, /* 404 'n' */ { 0x8d100000, 12, 54}, /* 405 '6' */ { 0x8d500000, 12, 39}, /* 406 '\'' */ { 0x8d400000, 13, 1}, /* 407 '0x01' */ { 0x8d480000, 13, 115}, /* 408 's' */ /* 19 */ { 0x00000000, 1, 32}, /* 409 ' ' */ { 0x80000000, 2, 0}, /* 410 '0x00' */ { 0xc0000000, 4, 114}, /* 411 'r' */ { 0xd0000000, 4, 47}, /* 412 '/' */ { 0xf0000000, 4, 66}, /* 413 'B' */ { 0xe0000000, 5, 48}, /* 414 '0' */ { 0xe8000000, 7, 58}, /* 415 ':' */ { 0xec000000, 7, 45}, /* 416 '-' */ { 0xea000000, 8, 49}, /* 417 '1' */ { 0xeb000000, 8, 56}, /* 418 '8' */ { 0xef000000, 8, 52}, /* 419 '4' */ { 0xee000000, 10, 54}, /* 420 '6' */ { 0xeec00000, 10, 57}, /* 421 '9' */ { 0xee600000, 11, 116}, /* 422 't' */ { 0xee800000, 11, 51}, /* 423 '3' */ { 0xee400000, 12, 1}, /* 424 '0x01' */ { 0xee500000, 12, 101}, /* 425 'e' */ { 0xeea00000, 12, 55}, /* 426 '7' */ { 0xeeb00000, 12, 53}, /* 427 '5' */ /* 19 */ { 0x00000000, 1, 0}, /* 428 '0x00' */ { 0xc0000000, 2, 32}, /* 429 ' ' */ { 0x90000000, 4, 58}, /* 430 ':' */ { 0xb0000000, 4, 47}, /* 431 '/' */ { 0x88000000, 5, 56}, /* 432 '8' */ { 0xa8000000, 5, 46}, /* 433 '.' */ { 0x80000000, 6, 57}, /* 434 '9' */ { 0xa0000000, 6, 48}, /* 435 '0' */ { 0xa4000000, 7, 77}, /* 436 'M' */ { 0x85000000, 8, 73}, /* 437 'I' */ { 0x86000000, 8, 41}, /* 438 ')' */ { 0xa6000000, 8, 82}, /* 439 'R' */ { 0xa7000000, 8, 45}, /* 440 '-' */ { 0x84000000, 9, 87}, /* 441 'W' */ { 0x87000000, 9, 80}, /* 442 'P' */ { 0x87800000, 9, 53}, /* 443 '5' */ { 0x84c00000, 10, 50}, /* 444 '2' */ { 0x84800000, 11, 1}, /* 445 '0x01' */ { 0x84a00000, 11, 39}, /* 446 '\'' */ /* 11 */ { 0x00000000, 1, 0}, /* 447 '0x00' */ { 0xc0000000, 2, 32}, /* 448 ' ' */ { 0xa0000000, 3, 48}, /* 449 '0' */ { 0x90000000, 4, 47}, /* 450 '/' */ { 0x84000000, 6, 45}, /* 451 '-' */ { 0x8c000000, 6, 58}, /* 452 ':' */ { 0x82000000, 7, 116}, /* 453 't' */ { 0x88000000, 7, 51}, /* 454 '3' */ { 0x8a000000, 7, 49}, /* 455 '1' */ { 0x80000000, 8, 1}, /* 456 '0x01' */ { 0x81000000, 8, 97}, /* 457 'a' */ /* 16 */ { 0x00000000, 2, 0}, /* 458 '0x00' */ { 0x40000000, 2, 32}, /* 459 ' ' */ { 0x80000000, 2, 48}, /* 460 '0' */ { 0xe0000000, 3, 58}, /* 461 ':' */ { 0xc8000000, 5, 46}, /* 462 '.' */ { 0xd8000000, 5, 105}, /* 463 'i' */ { 0xc0000000, 6, 45}, /* 464 '-' */ { 0xd4000000, 6, 97}, /* 465 'a' */ { 0xc6000000, 7, 52}, /* 466 '4' */ { 0xd0000000, 7, 56}, /* 467 '8' */ { 0xd2000000, 7, 47}, /* 468 '/' */ { 0xc4000000, 8, 54}, /* 469 '6' */ { 0xc5800000, 9, 57}, /* 470 '9' */ { 0xc5000000, 10, 51}, /* 471 '3' */ { 0xc5400000, 11, 1}, /* 472 '0x01' */ { 0xc5600000, 11, 116}, /* 473 't' */ /* 11 */ { 0x80000000, 1, 0}, /* 474 '0x00' */ { 0x40000000, 2, 32}, /* 475 ' ' */ { 0x00000000, 3, 48}, /* 476 '0' */ { 0x30000000, 4, 46}, /* 477 '.' */ { 0x28000000, 5, 47}, /* 478 '/' */ { 0x20000000, 7, 49}, /* 479 '1' */ { 0x24000000, 7, 53}, /* 480 '5' */ { 0x22000000, 8, 1}, /* 481 '0x01' */ { 0x23000000, 8, 52}, /* 482 '4' */ { 0x26000000, 8, 51}, /* 483 '3' */ { 0x27000000, 8, 50}, /* 484 '2' */ /* 15 */ { 0x80000000, 1, 32}, /* 485 ' ' */ { 0x00000000, 2, 48}, /* 486 '0' */ { 0x40000000, 3, 58}, /* 487 ':' */ { 0x68000000, 5, 0}, /* 488 '0x00' */ { 0x60000000, 6, 116}, /* 489 't' */ { 0x64000000, 6, 112}, /* 490 'p' */ { 0x74000000, 6, 56}, /* 491 '8' */ { 0x78000000, 6, 46}, /* 492 '.' */ { 0x7c000000, 6, 54}, /* 493 '6' */ { 0x70000000, 7, 53}, /* 494 '5' */ { 0x72000000, 8, 57}, /* 495 '9' */ { 0x73000000, 9, 77}, /* 496 'M' */ { 0x73800000, 10, 70}, /* 497 'F' */ { 0x73c00000, 11, 1}, /* 498 '0x01' */ { 0x73e00000, 11, 99}, /* 499 'c' */ /* 14 */ { 0x00000000, 1, 49}, /* 500 '1' */ { 0xc0000000, 2, 0}, /* 501 '0x00' */ { 0x80000000, 4, 57}, /* 502 '9' */ { 0xa0000000, 4, 46}, /* 503 '.' */ { 0x98000000, 5, 48}, /* 504 '0' */ { 0x90000000, 6, 32}, /* 505 ' ' */ { 0x94000000, 6, 56}, /* 506 '8' */ { 0xb0000000, 6, 55}, /* 507 '7' */ { 0xb4000000, 6, 47}, /* 508 '/' */ { 0xb8000000, 6, 54}, /* 509 '6' */ { 0xbe000000, 7, 58}, /* 510 ':' */ { 0xbd000000, 8, 52}, /* 511 '4' */ { 0xbc000000, 9, 1}, /* 512 '0x01' */ { 0xbc800000, 9, 51}, /* 513 '3' */ /* 9 */ { 0x80000000, 1, 32}, /* 514 ' ' */ { 0x00000000, 2, 48}, /* 515 '0' */ { 0x60000000, 3, 46}, /* 516 '.' */ { 0x40000000, 4, 50}, /* 517 '2' */ { 0x50000000, 5, 49}, /* 518 '1' */ { 0x5c000000, 6, 51}, /* 519 '3' */ { 0x5a000000, 7, 67}, /* 520 'C' */ { 0x58000000, 8, 1}, /* 521 '0x01' */ { 0x59000000, 8, 84}, /* 522 'T' */ /* 3 */ { 0x80000000, 1, 32}, /* 523 ' ' */ { 0x00000000, 2, 1}, /* 524 '0x01' */ { 0x40000000, 2, 46}, /* 525 '.' */ /* 2 */ { 0x00000000, 1, 1}, /* 526 '0x01' */ { 0x80000000, 1, 1}, /* 527 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 528 '0x01' */ { 0x80000000, 1, 1}, /* 529 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 530 '0x01' */ { 0x80000000, 1, 1}, /* 531 '0x01' */ /* 5 */ { 0x80000000, 1, 0}, /* 532 '0x00' */ { 0x40000000, 2, 32}, /* 533 ' ' */ { 0x20000000, 3, 58}, /* 534 ':' */ { 0x00000000, 4, 1}, /* 535 '0x01' */ { 0x10000000, 4, 46}, /* 536 '.' */ /* 2 */ { 0x00000000, 1, 1}, /* 537 '0x01' */ { 0x80000000, 1, 72}, /* 538 'H' */ /* 44 */ { 0x20000000, 3, 114}, /* 539 'r' */ { 0x40000000, 3, 32}, /* 540 ' ' */ { 0x80000000, 3, 108}, /* 541 'l' */ { 0xc0000000, 3, 110}, /* 542 'n' */ { 0x00000000, 4, 109}, /* 543 'm' */ { 0x70000000, 4, 103}, /* 544 'g' */ { 0xf0000000, 4, 100}, /* 545 'd' */ { 0x10000000, 5, 119}, /* 546 'w' */ { 0x60000000, 5, 84}, /* 547 'T' */ { 0x68000000, 5, 99}, /* 548 'c' */ { 0xa8000000, 5, 116}, /* 549 't' */ { 0xb0000000, 5, 102}, /* 550 'f' */ { 0xb8000000, 5, 105}, /* 551 'i' */ { 0xe0000000, 5, 115}, /* 552 's' */ { 0x18000000, 6, 117}, /* 553 'u' */ { 0x1c000000, 6, 0}, /* 554 '0x00' */ { 0xa4000000, 6, 82}, /* 555 'R' */ { 0xe8000000, 6, 98}, /* 556 'b' */ { 0xa2000000, 7, 118}, /* 557 'v' */ { 0xec000000, 7, 112}, /* 558 'p' */ { 0xa0000000, 8, 83}, /* 559 'S' */ { 0xee000000, 8, 77}, /* 560 'M' */ { 0xa1800000, 9, 80}, /* 561 'P' */ { 0xef800000, 9, 46}, /* 562 '.' */ { 0xa1000000, 11, 101}, /* 563 'e' */ { 0xa1200000, 11, 66}, /* 564 'B' */ { 0xa1400000, 11, 49}, /* 565 '1' */ { 0xef600000, 11, 45}, /* 566 '-' */ { 0xa1600000, 12, 107}, /* 567 'k' */ { 0xa1700000, 12, 104}, /* 568 'h' */ { 0xef000000, 12, 97}, /* 569 'a' */ { 0xef400000, 12, 121}, /* 570 'y' */ { 0xef500000, 12, 42}, /* 571 '*' */ { 0xef100000, 13, 120}, /* 572 'x' */ { 0xef180000, 13, 39}, /* 573 '\'' */ { 0xef200000, 13, 78}, /* 574 'N' */ { 0xef300000, 13, 50}, /* 575 '2' */ { 0xef280000, 14, 58}, /* 576 ':' */ { 0xef3c0000, 14, 122}, /* 577 'z' */ { 0xef2c0000, 15, 76}, /* 578 'L' */ { 0xef2e0000, 15, 70}, /* 579 'F' */ { 0xef380000, 15, 68}, /* 580 'D' */ { 0xef3a0000, 16, 1}, /* 581 '0x01' */ { 0xef3b0000, 16, 113}, /* 582 'q' */ /* 26 */ { 0x00000000, 2, 67}, /* 583 'C' */ { 0x40000000, 2, 66}, /* 584 'B' */ { 0xa0000000, 3, 114}, /* 585 'r' */ { 0x90000000, 4, 105}, /* 586 'i' */ { 0xc0000000, 4, 111}, /* 587 'o' */ { 0xd0000000, 4, 117}, /* 588 'u' */ { 0xe0000000, 4, 97}, /* 589 'a' */ { 0xf0000000, 4, 101}, /* 590 'e' */ { 0x88000000, 5, 108}, /* 591 'l' */ { 0x80000000, 7, 0}, /* 592 '0x00' */ { 0x84000000, 7, 121}, /* 593 'y' */ { 0x82000000, 8, 79}, /* 594 'O' */ { 0x86000000, 8, 51}, /* 595 '3' */ { 0x83800000, 9, 65}, /* 596 'A' */ { 0x87000000, 9, 83}, /* 597 'S' */ { 0x83400000, 10, 58}, /* 598 ':' */ { 0x83000000, 11, 46}, /* 599 '.' */ { 0x83200000, 11, 119}, /* 600 'w' */ { 0x87a00000, 11, 104}, /* 601 'h' */ { 0x87c00000, 11, 42}, /* 602 '*' */ { 0x87e00000, 11, 32}, /* 603 ' ' */ { 0x87900000, 12, 82}, /* 604 'R' */ { 0x87800000, 13, 39}, /* 605 '\'' */ { 0x878c0000, 14, 84}, /* 606 'T' */ { 0x87880000, 15, 1}, /* 607 '0x01' */ { 0x878a0000, 15, 52}, /* 608 '4' */ /* 31 */ { 0x00000000, 2, 111}, /* 609 'o' */ { 0x40000000, 2, 32}, /* 610 ' ' */ { 0x80000000, 3, 108}, /* 611 'l' */ { 0xc0000000, 3, 104}, /* 612 'h' */ { 0xa0000000, 4, 114}, /* 613 'r' */ { 0xe0000000, 4, 97}, /* 614 'a' */ { 0xb0000000, 5, 105}, /* 615 'i' */ { 0xb8000000, 5, 101}, /* 616 'e' */ { 0xf0000000, 6, 117}, /* 617 'u' */ { 0xf4000000, 6, 66}, /* 618 'B' */ { 0xf8000000, 7, 121}, /* 619 'y' */ { 0xfc000000, 7, 33}, /* 620 '!' */ { 0xfb000000, 8, 46}, /* 621 '.' */ { 0xfa000000, 9, 119}, /* 622 'w' */ { 0xfe000000, 9, 0}, /* 623 '0x00' */ { 0xff000000, 9, 83}, /* 624 'S' */ { 0xff800000, 9, 84}, /* 625 'T' */ { 0xfac00000, 10, 50}, /* 626 '2' */ { 0xfec00000, 10, 73}, /* 627 'I' */ { 0xfa800000, 11, 52}, /* 628 '4' */ { 0xfaa00000, 11, 42}, /* 629 '*' */ { 0xfea00000, 11, 68}, /* 630 'D' */ { 0xfe800000, 12, 85}, /* 631 'U' */ { 0xfe900000, 13, 39}, /* 632 '\'' */ { 0xfe980000, 14, 110}, /* 633 'n' */ { 0xfe9c0000, 15, 122}, /* 634 'z' */ { 0xfe9e0000, 17, 79}, /* 635 'O' */ { 0xfe9e8000, 17, 69}, /* 636 'E' */ { 0xfe9f0000, 17, 65}, /* 637 'A' */ { 0xfe9f8000, 18, 1}, /* 638 '0x01' */ { 0xfe9fc000, 18, 115}, /* 639 's' */ /* 28 */ { 0x40000000, 2, 111}, /* 640 'o' */ { 0x80000000, 2, 97}, /* 641 'a' */ { 0x00000000, 3, 114}, /* 642 'r' */ { 0xc0000000, 3, 101}, /* 643 'e' */ { 0xe0000000, 3, 105}, /* 644 'i' */ { 0x20000000, 5, 116}, /* 645 't' */ { 0x38000000, 5, 117}, /* 646 'u' */ { 0x2c000000, 6, 32}, /* 647 ' ' */ { 0x2a000000, 7, 74}, /* 648 'J' */ { 0x30000000, 7, 121}, /* 649 'y' */ { 0x34000000, 7, 0}, /* 650 '0x00' */ { 0x36000000, 7, 73}, /* 651 'I' */ { 0x33000000, 8, 58}, /* 652 ':' */ { 0x28800000, 9, 42}, /* 653 '*' */ { 0x29000000, 9, 45}, /* 654 '-' */ { 0x29800000, 9, 38}, /* 655 '&' */ { 0x32000000, 9, 39}, /* 656 '\'' */ { 0x28000000, 10, 65}, /* 657 'A' */ { 0x28400000, 10, 104}, /* 658 'h' */ { 0x32a00000, 11, 78}, /* 659 'N' */ { 0x32c00000, 11, 86}, /* 660 'V' */ { 0x32e00000, 12, 68}, /* 661 'D' */ { 0x32f00000, 12, 119}, /* 662 'w' */ { 0x32800000, 13, 79}, /* 663 'O' */ { 0x32880000, 13, 69}, /* 664 'E' */ { 0x32980000, 13, 100}, /* 665 'd' */ { 0x32900000, 14, 1}, /* 666 '0x01' */ { 0x32940000, 14, 84}, /* 667 'T' */ /* 45 */ { 0x00000000, 2, 109}, /* 668 'm' */ { 0x60000000, 3, 118}, /* 669 'v' */ { 0xa0000000, 3, 110}, /* 670 'n' */ { 0xe0000000, 3, 97}, /* 671 'a' */ { 0x40000000, 4, 69}, /* 672 'E' */ { 0x80000000, 4, 0}, /* 673 '0x00' */ { 0xd0000000, 4, 120}, /* 674 'x' */ { 0x98000000, 5, 100}, /* 675 'd' */ { 0xc8000000, 5, 108}, /* 676 'l' */ { 0x50000000, 6, 52}, /* 677 '4' */ { 0x54000000, 6, 121}, /* 678 'y' */ { 0x58000000, 6, 117}, /* 679 'u' */ { 0x90000000, 6, 114}, /* 680 'r' */ { 0xc0000000, 6, 105}, /* 681 'i' */ { 0x5e000000, 7, 115}, /* 682 's' */ { 0x94000000, 7, 70}, /* 683 'F' */ { 0xc4000000, 7, 88}, /* 684 'X' */ { 0x96000000, 8, 82}, /* 685 'R' */ { 0xc7000000, 8, 32}, /* 686 ' ' */ { 0x5d000000, 9, 103}, /* 687 'g' */ { 0x97800000, 9, 58}, /* 688 ':' */ { 0xc6000000, 9, 84}, /* 689 'T' */ { 0xc6800000, 9, 39}, /* 690 '\'' */ { 0x5c400000, 10, 99}, /* 691 'c' */ { 0x5cc00000, 10, 113}, /* 692 'q' */ { 0x5d800000, 10, 101}, /* 693 'e' */ { 0x5dc00000, 10, 67}, /* 694 'C' */ { 0x97000000, 10, 112}, /* 695 'p' */ { 0x5c000000, 11, 45}, /* 696 '-' */ { 0x5ca00000, 11, 90}, /* 697 'Z' */ { 0x97600000, 11, 116}, /* 698 't' */ { 0x5c200000, 12, 83}, /* 699 'S' */ { 0x5c300000, 12, 46}, /* 700 '.' */ { 0x97500000, 12, 87}, /* 701 'W' */ { 0x5c800000, 13, 33}, /* 702 '!' */ { 0x97400000, 13, 111}, /* 703 'o' */ { 0x5c880000, 14, 102}, /* 704 'f' */ { 0x5c8c0000, 14, 85}, /* 705 'U' */ { 0x5c900000, 14, 78}, /* 706 'N' */ { 0x5c940000, 14, 77}, /* 707 'M' */ { 0x5c980000, 14, 76}, /* 708 'L' */ { 0x5c9c0000, 14, 65}, /* 709 'A' */ { 0x974c0000, 14, 68}, /* 710 'D' */ { 0x97480000, 15, 1}, /* 711 '0x01' */ { 0x974a0000, 15, 119}, /* 712 'w' */ /* 26 */ { 0x00000000, 2, 105}, /* 713 'i' */ { 0x80000000, 2, 97}, /* 714 'a' */ { 0x60000000, 3, 114}, /* 715 'r' */ { 0xc0000000, 3, 117}, /* 716 'u' */ { 0xe0000000, 3, 111}, /* 717 'o' */ { 0x40000000, 4, 101}, /* 718 'e' */ { 0x58000000, 5, 108}, /* 719 'l' */ { 0x50000000, 7, 65}, /* 720 'A' */ { 0x54000000, 7, 79}, /* 721 'O' */ { 0x52000000, 8, 32}, /* 722 ' ' */ { 0x53000000, 9, 104}, /* 723 'h' */ { 0x53800000, 9, 116}, /* 724 't' */ { 0x56800000, 9, 102}, /* 725 'f' */ { 0x57800000, 9, 76}, /* 726 'L' */ { 0x56400000, 10, 0}, /* 727 '0x00' */ { 0x57000000, 11, 106}, /* 728 'j' */ { 0x57200000, 11, 73}, /* 729 'I' */ { 0x57400000, 11, 46}, /* 730 '.' */ { 0x57600000, 11, 49}, /* 731 '1' */ { 0x56000000, 12, 77}, /* 732 'M' */ { 0x56200000, 12, 42}, /* 733 '*' */ { 0x56300000, 12, 75}, /* 734 'K' */ { 0x56100000, 13, 121}, /* 735 'y' */ { 0x561c0000, 14, 72}, /* 736 'H' */ { 0x56180000, 15, 1}, /* 737 '0x01' */ { 0x561a0000, 15, 33}, /* 738 '!' */ /* 25 */ { 0x80000000, 2, 114}, /* 739 'r' */ { 0x20000000, 3, 77}, /* 740 'M' */ { 0x40000000, 3, 97}, /* 741 'a' */ { 0x60000000, 3, 111}, /* 742 'o' */ { 0xc0000000, 3, 105}, /* 743 'i' */ { 0xe0000000, 3, 101}, /* 744 'e' */ { 0x08000000, 5, 117}, /* 745 'u' */ { 0x10000000, 5, 88}, /* 746 'X' */ { 0x04000000, 6, 104}, /* 747 'h' */ { 0x1c000000, 6, 108}, /* 748 'l' */ { 0x02000000, 7, 121}, /* 749 'y' */ { 0x18000000, 7, 119}, /* 750 'w' */ { 0x00000000, 8, 58}, /* 751 ':' */ { 0x1b000000, 8, 67}, /* 752 'C' */ { 0x01800000, 9, 0}, /* 753 '0x00' */ { 0x1a000000, 9, 45}, /* 754 '-' */ { 0x1a800000, 10, 80}, /* 755 'P' */ { 0x1ac00000, 10, 32}, /* 756 ' ' */ { 0x01000000, 11, 39}, /* 757 '\'' */ { 0x01400000, 11, 65}, /* 758 'A' */ { 0x01200000, 12, 85}, /* 759 'U' */ { 0x01600000, 12, 84}, /* 760 'T' */ { 0x01700000, 12, 52}, /* 761 '4' */ { 0x01300000, 13, 1}, /* 762 '0x01' */ { 0x01380000, 13, 89}, /* 763 'Y' */ /* 19 */ { 0x00000000, 1, 111}, /* 764 'o' */ { 0x80000000, 3, 97}, /* 765 'a' */ { 0xa0000000, 3, 105}, /* 766 'i' */ { 0xc0000000, 3, 101}, /* 767 'e' */ { 0xe0000000, 4, 117}, /* 768 'u' */ { 0xf0000000, 5, 82}, /* 769 'R' */ { 0xf8000000, 6, 65}, /* 770 'A' */ { 0xfc000000, 7, 46}, /* 771 '.' */ { 0xfe800000, 9, 121}, /* 772 'y' */ { 0xff000000, 9, 83}, /* 773 'S' */ { 0xff800000, 10, 69}, /* 774 'E' */ { 0xffc00000, 10, 114}, /* 775 'r' */ { 0xfe000000, 11, 0}, /* 776 '0x00' */ { 0xfe400000, 11, 76}, /* 777 'L' */ { 0xfe600000, 11, 77}, /* 778 'M' */ { 0xfe300000, 12, 119}, /* 779 'w' */ { 0xfe280000, 13, 68}, /* 780 'D' */ { 0xfe200000, 14, 1}, /* 781 '0x01' */ { 0xfe240000, 14, 73}, /* 782 'I' */ /* 41 */ { 0x00000000, 1, 84}, /* 783 'T' */ { 0x80000000, 3, 115}, /* 784 's' */ { 0xa0000000, 3, 110}, /* 785 'n' */ { 0xd0000000, 4, 116}, /* 786 't' */ { 0xc8000000, 5, 32}, /* 787 ' ' */ { 0xe8000000, 5, 39}, /* 788 '\'' */ { 0xf8000000, 5, 114}, /* 789 'r' */ { 0xc0000000, 6, 73}, /* 790 'I' */ { 0xc4000000, 6, 0}, /* 791 '0x00' */ { 0xe4000000, 6, 109}, /* 792 'm' */ { 0xe0000000, 7, 100}, /* 793 'd' */ { 0xe2000000, 7, 78}, /* 794 'N' */ { 0xf2000000, 7, 122}, /* 795 'z' */ { 0xf4000000, 7, 46}, /* 796 '.' */ { 0xf0000000, 8, 97}, /* 797 'a' */ { 0xf1000000, 8, 89}, /* 798 'Y' */ { 0xf6000000, 9, 83}, /* 799 'S' */ { 0xf7000000, 9, 99}, /* 800 'c' */ { 0xf6a00000, 11, 68}, /* 801 'D' */ { 0xf6c00000, 11, 102}, /* 802 'f' */ { 0xf7800000, 11, 108}, /* 803 'l' */ { 0xf7e00000, 11, 121}, /* 804 'y' */ { 0xf6800000, 12, 86}, /* 805 'V' */ { 0xf6e00000, 12, 111}, /* 806 'o' */ { 0xf7b00000, 12, 70}, /* 807 'F' */ { 0xf6900000, 13, 44}, /* 808 ',' */ { 0xf6980000, 13, 65}, /* 809 'A' */ { 0xf6f00000, 13, 79}, /* 810 'O' */ { 0xf7a80000, 13, 103}, /* 811 'g' */ { 0xf7c00000, 13, 67}, /* 812 'C' */ { 0xf7c80000, 13, 58}, /* 813 ':' */ { 0xf7d80000, 13, 118}, /* 814 'v' */ { 0xf6f80000, 14, 112}, /* 815 'p' */ { 0xf6fc0000, 14, 69}, /* 816 'E' */ { 0xf7a00000, 14, 66}, /* 817 'B' */ { 0xf7d00000, 14, 107}, /* 818 'k' */ { 0xf7d40000, 14, 98}, /* 819 'b' */ { 0xf7a40000, 16, 1}, /* 820 '0x01' */ { 0xf7a50000, 16, 82}, /* 821 'R' */ { 0xf7a60000, 16, 76}, /* 822 'L' */ { 0xf7a70000, 16, 71}, /* 823 'G' */ /* 16 */ { 0x00000000, 2, 97}, /* 824 'a' */ { 0x40000000, 2, 117}, /* 825 'u' */ { 0xc0000000, 2, 101}, /* 826 'e' */ { 0xa0000000, 3, 111}, /* 827 'o' */ { 0x90000000, 4, 105}, /* 828 'i' */ { 0x80000000, 5, 32}, /* 829 ' ' */ { 0x88000000, 6, 75}, /* 830 'K' */ { 0x8e000000, 7, 0}, /* 831 '0x00' */ { 0x8c800000, 9, 115}, /* 832 's' */ { 0x8d000000, 9, 70}, /* 833 'F' */ { 0x8c000000, 10, 86}, /* 834 'V' */ { 0x8c400000, 10, 39}, /* 835 '\'' */ { 0x8dc00000, 10, 102}, /* 836 'f' */ { 0x8da00000, 11, 71}, /* 837 'G' */ { 0x8d800000, 12, 1}, /* 838 '0x01' */ { 0x8d900000, 12, 68}, /* 839 'D' */ /* 26 */ { 0x40000000, 2, 105}, /* 840 'i' */ { 0xc0000000, 2, 121}, /* 841 'y' */ { 0x20000000, 3, 101}, /* 842 'e' */ { 0xa0000000, 3, 32}, /* 843 ' ' */ { 0x00000000, 4, 97}, /* 844 'a' */ { 0x80000000, 4, 111}, /* 845 'o' */ { 0x10000000, 5, 0}, /* 846 '0x00' */ { 0x18000000, 5, 114}, /* 847 'r' */ { 0x94000000, 6, 116}, /* 848 't' */ { 0x98000000, 6, 110}, /* 849 'n' */ { 0x9c000000, 6, 83}, /* 850 'S' */ { 0x93000000, 8, 71}, /* 851 'G' */ { 0x90000000, 9, 45}, /* 852 '-' */ { 0x91800000, 9, 79}, /* 853 'O' */ { 0x92000000, 9, 104}, /* 854 'h' */ { 0x92800000, 9, 119}, /* 855 'w' */ { 0x90800000, 10, 49}, /* 856 '1' */ { 0x90c00000, 10, 39}, /* 857 '\'' */ { 0x91600000, 11, 117}, /* 858 'u' */ { 0x91000000, 12, 84}, /* 859 'T' */ { 0x91100000, 12, 78}, /* 860 'N' */ { 0x91200000, 12, 58}, /* 861 ':' */ { 0x91300000, 12, 46}, /* 862 '.' */ { 0x91400000, 12, 44}, /* 863 ',' */ { 0x91500000, 13, 1}, /* 864 '0x01' */ { 0x91580000, 13, 108}, /* 865 'l' */ /* 19 */ { 0x00000000, 2, 97}, /* 866 'a' */ { 0x80000000, 2, 111}, /* 867 'o' */ { 0xc0000000, 2, 105}, /* 868 'i' */ { 0x40000000, 3, 101}, /* 869 'e' */ { 0x70000000, 4, 117}, /* 870 'u' */ { 0x68000000, 5, 75}, /* 871 'K' */ { 0x60000000, 7, 108}, /* 872 'l' */ { 0x64000000, 7, 65}, /* 873 'A' */ { 0x66000000, 7, 32}, /* 874 ' ' */ { 0x63000000, 8, 121}, /* 875 'y' */ { 0x62000000, 10, 76}, /* 876 'L' */ { 0x62400000, 10, 73}, /* 877 'I' */ { 0x62800000, 11, 67}, /* 878 'C' */ { 0x62a00000, 11, 46}, /* 879 '.' */ { 0x62e00000, 11, 0}, /* 880 '0x00' */ { 0x62d00000, 12, 39}, /* 881 '\'' */ { 0x62c00000, 13, 69}, /* 882 'E' */ { 0x62c80000, 14, 1}, /* 883 '0x01' */ { 0x62cc0000, 14, 89}, /* 884 'Y' */ /* 29 */ { 0x40000000, 2, 97}, /* 885 'a' */ { 0x80000000, 2, 111}, /* 886 'o' */ { 0x00000000, 3, 101}, /* 887 'e' */ { 0xe0000000, 3, 105}, /* 888 'i' */ { 0x20000000, 4, 84}, /* 889 'T' */ { 0xc0000000, 4, 121}, /* 890 'y' */ { 0xd0000000, 4, 117}, /* 891 'u' */ { 0x30000000, 5, 0}, /* 892 '0x00' */ { 0x3c000000, 6, 99}, /* 893 'c' */ { 0x39000000, 8, 114}, /* 894 'r' */ { 0x3a000000, 8, 69}, /* 895 'E' */ { 0x3b800000, 9, 70}, /* 896 'F' */ { 0x38400000, 10, 90}, /* 897 'Z' */ { 0x38c00000, 10, 32}, /* 898 ' ' */ { 0x3b000000, 10, 49}, /* 899 '1' */ { 0x3b400000, 10, 73}, /* 900 'I' */ { 0x38200000, 11, 104}, /* 901 'h' */ { 0x38800000, 11, 67}, /* 902 'C' */ { 0x38100000, 12, 81}, /* 903 'Q' */ { 0x38a00000, 12, 75}, /* 904 'K' */ { 0x38b00000, 13, 80}, /* 905 'P' */ { 0x38000000, 14, 58}, /* 906 ':' */ { 0x38040000, 14, 46}, /* 907 '.' */ { 0x38080000, 14, 39}, /* 908 '\'' */ { 0x38b80000, 14, 77}, /* 909 'M' */ { 0x380c0000, 15, 1}, /* 910 '0x01' */ { 0x380e0000, 15, 119}, /* 911 'w' */ { 0x38bc0000, 15, 83}, /* 912 'S' */ { 0x38be0000, 15, 82}, /* 913 'R' */ /* 22 */ { 0x80000000, 1, 101}, /* 914 'e' */ { 0x00000000, 2, 111}, /* 915 'o' */ { 0x60000000, 3, 105}, /* 916 'i' */ { 0x50000000, 4, 97}, /* 917 'a' */ { 0x48000000, 5, 117}, /* 918 'u' */ { 0x40000000, 6, 67}, /* 919 'C' */ { 0x44000000, 8, 69}, /* 920 'E' */ { 0x46000000, 8, 70}, /* 921 'F' */ { 0x47000000, 9, 66}, /* 922 'B' */ { 0x47800000, 9, 72}, /* 923 'H' */ { 0x45800000, 10, 89}, /* 924 'Y' */ { 0x45000000, 11, 71}, /* 925 'G' */ { 0x45200000, 11, 39}, /* 926 '\'' */ { 0x45600000, 11, 73}, /* 927 'I' */ { 0x45c00000, 11, 65}, /* 928 'A' */ { 0x45400000, 12, 77}, /* 929 'M' */ { 0x45e00000, 12, 32}, /* 930 ' ' */ { 0x45f00000, 12, 0}, /* 931 '0x00' */ { 0x45500000, 13, 84}, /* 932 'T' */ { 0x45580000, 14, 46}, /* 933 '.' */ { 0x455c0000, 15, 1}, /* 934 '0x01' */ { 0x455e0000, 15, 90}, /* 935 'Z' */ /* 44 */ { 0x00000000, 3, 39}, /* 936 '\'' */ { 0x40000000, 3, 102}, /* 937 'f' */ { 0xc0000000, 3, 117}, /* 938 'u' */ { 0xe0000000, 3, 110}, /* 939 'n' */ { 0x20000000, 4, 77}, /* 940 'M' */ { 0x30000000, 4, 108}, /* 941 'l' */ { 0x90000000, 4, 109}, /* 942 'm' */ { 0x68000000, 5, 114}, /* 943 'r' */ { 0x70000000, 5, 100}, /* 944 'd' */ { 0x80000000, 5, 112}, /* 945 'p' */ { 0xa0000000, 5, 104}, /* 946 'h' */ { 0xb0000000, 5, 0}, /* 947 '0x00' */ { 0x64000000, 6, 83}, /* 948 'S' */ { 0x78000000, 6, 122}, /* 949 'z' */ { 0x7c000000, 6, 98}, /* 950 'b' */ { 0x8c000000, 6, 118}, /* 951 'v' */ { 0xa8000000, 6, 119}, /* 952 'w' */ { 0xac000000, 6, 85}, /* 953 'U' */ { 0xb8000000, 7, 84}, /* 954 'T' */ { 0xba000000, 7, 79}, /* 955 'O' */ { 0xbc000000, 7, 75}, /* 956 'K' */ { 0x61000000, 8, 67}, /* 957 'C' */ { 0x62000000, 8, 120}, /* 958 'x' */ { 0x63000000, 8, 46}, /* 959 '.' */ { 0x89000000, 8, 116}, /* 960 't' */ { 0x8b000000, 8, 32}, /* 961 ' ' */ { 0xbe000000, 8, 115}, /* 962 's' */ { 0xbf000000, 8, 78}, /* 963 'N' */ { 0x60800000, 9, 103}, /* 964 'g' */ { 0x88000000, 9, 45}, /* 965 '-' */ { 0x8a800000, 9, 97}, /* 966 'a' */ { 0x88800000, 10, 105}, /* 967 'i' */ { 0x88c00000, 10, 101}, /* 968 'e' */ { 0x8a400000, 10, 111}, /* 969 'o' */ { 0x60000000, 11, 65}, /* 970 'A' */ { 0x60200000, 11, 106}, /* 971 'j' */ { 0x60400000, 11, 99}, /* 972 'c' */ { 0x8a000000, 11, 50}, /* 973 '2' */ { 0x60700000, 12, 82}, /* 974 'R' */ { 0x8a200000, 12, 80}, /* 975 'P' */ { 0x8a300000, 12, 58}, /* 976 ':' */ { 0x60600000, 13, 69}, /* 977 'E' */ { 0x60680000, 14, 1}, /* 978 '0x01' */ { 0x606c0000, 14, 76}, /* 979 'L' */ /* 28 */ { 0x40000000, 2, 114}, /* 980 'r' */ { 0x80000000, 2, 108}, /* 981 'l' */ { 0x00000000, 3, 101}, /* 982 'e' */ { 0x20000000, 3, 97}, /* 983 'a' */ { 0xe0000000, 3, 111}, /* 984 'o' */ { 0xd0000000, 4, 105}, /* 985 'i' */ { 0xc0000000, 6, 68}, /* 986 'D' */ { 0xc4000000, 6, 117}, /* 987 'u' */ { 0xcc000000, 6, 104}, /* 988 'h' */ { 0xc8000000, 8, 32}, /* 989 ' ' */ { 0xca000000, 8, 50}, /* 990 '2' */ { 0xc9000000, 9, 72}, /* 991 'H' */ { 0xc9800000, 9, 77}, /* 992 'M' */ { 0xcb000000, 9, 83}, /* 993 'S' */ { 0xcb800000, 11, 58}, /* 994 ':' */ { 0xcba00000, 11, 42}, /* 995 '*' */ { 0xcbd00000, 12, 115}, /* 996 's' */ { 0xcbc80000, 13, 73}, /* 997 'I' */ { 0xcbe00000, 13, 0}, /* 998 '0x00' */ { 0xcbe80000, 13, 71}, /* 999 'G' */ { 0xcbf00000, 13, 39}, /* 1000 '\'' */ { 0xcbf80000, 14, 121}, /* 1001 'y' */ { 0xcbc00000, 15, 89}, /* 1002 'Y' */ { 0xcbc20000, 15, 76}, /* 1003 'L' */ { 0xcbc40000, 15, 67}, /* 1004 'C' */ { 0xcbc60000, 15, 1}, /* 1005 '0x01' */ { 0xcbfc0000, 15, 79}, /* 1006 'O' */ { 0xcbfe0000, 15, 46}, /* 1007 '.' */ /* 8 */ { 0x80000000, 1, 117}, /* 1008 'u' */ { 0x00000000, 3, 73}, /* 1009 'I' */ { 0x20000000, 3, 0}, /* 1010 '0x00' */ { 0x40000000, 3, 86}, /* 1011 'V' */ { 0x70000000, 4, 32}, /* 1012 ' ' */ { 0x68000000, 5, 67}, /* 1013 'C' */ { 0x60000000, 6, 1}, /* 1014 '0x01' */ { 0x64000000, 6, 39}, /* 1015 '\'' */ /* 23 */ { 0x00000000, 2, 97}, /* 1016 'a' */ { 0x40000000, 2, 111}, /* 1017 'o' */ { 0xc0000000, 2, 101}, /* 1018 'e' */ { 0x80000000, 3, 105}, /* 1019 'i' */ { 0xb0000000, 4, 117}, /* 1020 'u' */ { 0xa8000000, 5, 69}, /* 1021 'E' */ { 0xa0000000, 6, 68}, /* 1022 'D' */ { 0xa6000000, 7, 0}, /* 1023 '0x00' */ { 0xa5000000, 8, 104}, /* 1024 'h' */ { 0xa4000000, 10, 73}, /* 1025 'I' */ { 0xa4800000, 10, 121}, /* 1026 'y' */ { 0xa4c00000, 10, 110}, /* 1027 'n' */ { 0xa4600000, 12, 32}, /* 1028 ' ' */ { 0xa4400000, 13, 39}, /* 1029 '\'' */ { 0xa4580000, 13, 83}, /* 1030 'S' */ { 0xa4700000, 13, 78}, /* 1031 'N' */ { 0xa4480000, 14, 66}, /* 1032 'B' */ { 0xa44c0000, 14, 46}, /* 1033 '.' */ { 0xa4500000, 14, 38}, /* 1034 '&' */ { 0xa4780000, 14, 84}, /* 1035 'T' */ { 0xa47c0000, 14, 49}, /* 1036 '1' */ { 0xa4540000, 15, 1}, /* 1037 '0x01' */ { 0xa4560000, 15, 67}, /* 1038 'C' */ /* 39 */ { 0x20000000, 3, 111}, /* 1039 'o' */ { 0x40000000, 3, 112}, /* 1040 'p' */ { 0x60000000, 3, 117}, /* 1041 'u' */ { 0xc0000000, 3, 104}, /* 1042 'h' */ { 0xe0000000, 3, 116}, /* 1043 't' */ { 0x10000000, 4, 97}, /* 1044 'a' */ { 0x90000000, 4, 101}, /* 1045 'e' */ { 0xb0000000, 4, 99}, /* 1046 'c' */ { 0x00000000, 5, 110}, /* 1047 'n' */ { 0x88000000, 5, 105}, /* 1048 'i' */ { 0xa8000000, 5, 107}, /* 1049 'k' */ { 0x0c000000, 6, 119}, /* 1050 'w' */ { 0xa0000000, 6, 109}, /* 1051 'm' */ { 0x0a000000, 7, 65}, /* 1052 'A' */ { 0x84000000, 7, 108}, /* 1053 'l' */ { 0xa4000000, 7, 113}, /* 1054 'q' */ { 0xa6000000, 7, 77}, /* 1055 'M' */ { 0x08000000, 8, 50}, /* 1056 '2' */ { 0x09000000, 8, 80}, /* 1057 'P' */ { 0x80000000, 8, 79}, /* 1058 'O' */ { 0x82000000, 8, 73}, /* 1059 'I' */ { 0x83000000, 8, 32}, /* 1060 ' ' */ { 0x87000000, 8, 0}, /* 1061 '0x00' */ { 0x81000000, 9, 121}, /* 1062 'y' */ { 0x86000000, 9, 69}, /* 1063 'E' */ { 0x81c00000, 10, 63}, /* 1064 '?' */ { 0x86c00000, 10, 72}, /* 1065 'H' */ { 0x81800000, 11, 66}, /* 1066 'B' */ { 0x86800000, 11, 103}, /* 1067 'g' */ { 0x81b00000, 12, 114}, /* 1068 'r' */ { 0x86a00000, 12, 42}, /* 1069 '*' */ { 0x86b00000, 13, 51}, /* 1070 '3' */ { 0x86b80000, 13, 46}, /* 1071 '.' */ { 0x81a00000, 14, 53}, /* 1072 '5' */ { 0x81a80000, 14, 58}, /* 1073 ':' */ { 0x81ac0000, 14, 49}, /* 1074 '1' */ { 0x81a40000, 15, 67}, /* 1075 'C' */ { 0x81a60000, 16, 1}, /* 1076 '0x01' */ { 0x81a70000, 16, 89}, /* 1077 'Y' */ /* 33 */ { 0x00000000, 1, 104}, /* 1078 'h' */ { 0xa0000000, 3, 111}, /* 1079 'o' */ { 0xe0000000, 3, 86}, /* 1080 'V' */ { 0x80000000, 4, 101}, /* 1081 'e' */ { 0x90000000, 4, 114}, /* 1082 'r' */ { 0xc0000000, 5, 97}, /* 1083 'a' */ { 0xd0000000, 5, 119}, /* 1084 'w' */ { 0xcc000000, 6, 105}, /* 1085 'i' */ { 0xda000000, 7, 79}, /* 1086 'O' */ { 0xde000000, 7, 72}, /* 1087 'H' */ { 0xc9000000, 8, 121}, /* 1088 'y' */ { 0xca000000, 8, 77}, /* 1089 'M' */ { 0xd8000000, 8, 46}, /* 1090 '.' */ { 0xdc000000, 8, 117}, /* 1091 'u' */ { 0xdd000000, 8, 87}, /* 1092 'W' */ { 0xc8800000, 9, 80}, /* 1093 'P' */ { 0xcb000000, 9, 58}, /* 1094 ':' */ { 0xcb800000, 9, 52}, /* 1095 '4' */ { 0xd9800000, 9, 73}, /* 1096 'I' */ { 0xd9000000, 10, 32}, /* 1097 ' ' */ { 0xd9400000, 10, 0}, /* 1098 '0x00' */ { 0xc8400000, 11, 88}, /* 1099 'X' */ { 0xc8600000, 11, 115}, /* 1100 's' */ { 0xc8000000, 12, 84}, /* 1101 'T' */ { 0xc8100000, 12, 83}, /* 1102 'S' */ { 0xc8200000, 12, 66}, /* 1103 'B' */ { 0xc8300000, 13, 85}, /* 1104 'U' */ { 0xc8380000, 14, 65}, /* 1105 'A' */ { 0xc83c0000, 16, 67}, /* 1106 'C' */ { 0xc83d0000, 16, 42}, /* 1107 '*' */ { 0xc83f0000, 16, 78}, /* 1108 'N' */ { 0xc83e0000, 17, 1}, /* 1109 '0x01' */ { 0xc83e8000, 17, 89}, /* 1110 'Y' */ /* 23 */ { 0x00000000, 1, 110}, /* 1111 'n' */ { 0x80000000, 2, 112}, /* 1112 'p' */ { 0xd0000000, 4, 75}, /* 1113 'K' */ { 0xf0000000, 4, 108}, /* 1114 'l' */ { 0xc0000000, 5, 82}, /* 1115 'R' */ { 0xe0000000, 5, 83}, /* 1116 'S' */ { 0xcc000000, 6, 69}, /* 1117 'E' */ { 0xec000000, 6, 115}, /* 1118 's' */ { 0xca000000, 7, 103}, /* 1119 'g' */ { 0xea000000, 7, 84}, /* 1120 'T' */ { 0xc9000000, 8, 32}, /* 1121 ' ' */ { 0xc8000000, 9, 45}, /* 1122 '-' */ { 0xc8800000, 9, 114}, /* 1123 'r' */ { 0xe8000000, 9, 50}, /* 1124 '2' */ { 0xe8800000, 9, 109}, /* 1125 'm' */ { 0xe9800000, 9, 0}, /* 1126 '0x00' */ { 0xe9000000, 10, 46}, /* 1127 '.' */ { 0xe9400000, 11, 99}, /* 1128 'c' */ { 0xe9600000, 12, 107}, /* 1129 'k' */ { 0xe9700000, 14, 1}, /* 1130 '0x01' */ { 0xe9740000, 14, 122}, /* 1131 'z' */ { 0xe9780000, 14, 116}, /* 1132 't' */ { 0xe97c0000, 14, 66}, /* 1133 'B' */ /* 21 */ { 0x80000000, 1, 32}, /* 1134 ' ' */ { 0x00000000, 3, 58}, /* 1135 ':' */ { 0x60000000, 3, 105}, /* 1136 'i' */ { 0x20000000, 4, 101}, /* 1137 'e' */ { 0x30000000, 4, 97}, /* 1138 'a' */ { 0x40000000, 4, 51}, /* 1139 '3' */ { 0x54000000, 6, 67}, /* 1140 'C' */ { 0x5c000000, 6, 0}, /* 1141 '0x00' */ { 0x50000000, 7, 39}, /* 1142 '\'' */ { 0x52000000, 7, 52}, /* 1143 '4' */ { 0x5a000000, 7, 111}, /* 1144 'o' */ { 0x59000000, 8, 73}, /* 1145 'I' */ { 0x58000000, 10, 115}, /* 1146 's' */ { 0x58400000, 10, 68}, /* 1147 'D' */ { 0x58800000, 10, 46}, /* 1148 '.' */ { 0x58c00000, 11, 56}, /* 1149 '8' */ { 0x58e80000, 13, 117}, /* 1150 'u' */ { 0x58f00000, 13, 114}, /* 1151 'r' */ { 0x58f80000, 13, 66}, /* 1152 'B' */ { 0x58e00000, 14, 1}, /* 1153 '0x01' */ { 0x58e40000, 14, 69}, /* 1154 'E' */ /* 18 */ { 0x40000000, 2, 111}, /* 1155 'o' */ { 0xc0000000, 2, 101}, /* 1156 'e' */ { 0x20000000, 3, 104}, /* 1157 'h' */ { 0x80000000, 3, 97}, /* 1158 'a' */ { 0xa0000000, 3, 105}, /* 1159 'i' */ { 0x00000000, 5, 46}, /* 1160 '.' */ { 0x10000000, 5, 79}, /* 1161 'O' */ { 0x18000000, 5, 114}, /* 1162 'r' */ { 0x0c000000, 6, 121}, /* 1163 'y' */ { 0x08000000, 7, 117}, /* 1164 'u' */ { 0x0a000000, 8, 0}, /* 1165 '0x00' */ { 0x0b800000, 9, 65}, /* 1166 'A' */ { 0x0b200000, 11, 89}, /* 1167 'Y' */ { 0x0b400000, 11, 84}, /* 1168 'T' */ { 0x0b600000, 11, 32}, /* 1169 ' ' */ { 0x0b000000, 12, 73}, /* 1170 'I' */ { 0x0b100000, 13, 1}, /* 1171 '0x01' */ { 0x0b180000, 13, 108}, /* 1172 'l' */ /* 14 */ { 0x00000000, 2, 0}, /* 1173 '0x00' */ { 0x80000000, 2, 32}, /* 1174 ' ' */ { 0xc0000000, 2, 116}, /* 1175 't' */ { 0x40000000, 3, 84}, /* 1176 'T' */ { 0x70000000, 4, 99}, /* 1177 'c' */ { 0x68000000, 5, 109}, /* 1178 'm' */ { 0x64000000, 6, 85}, /* 1179 'U' */ { 0x60000000, 8, 97}, /* 1180 'a' */ { 0x61000000, 8, 88}, /* 1181 'X' */ { 0x62000000, 8, 45}, /* 1182 '-' */ { 0x63000000, 9, 120}, /* 1183 'x' */ { 0x63c00000, 10, 57}, /* 1184 '9' */ { 0x63800000, 11, 1}, /* 1185 '0x01' */ { 0x63a00000, 11, 105}, /* 1186 'i' */ /* 19 */ { 0x80000000, 1, 111}, /* 1187 'o' */ { 0x40000000, 2, 101}, /* 1188 'e' */ { 0x00000000, 3, 117}, /* 1189 'u' */ { 0x30000000, 4, 32}, /* 1190 ' ' */ { 0x20000000, 5, 118}, /* 1191 'v' */ { 0x28000000, 6, 97}, /* 1192 'a' */ { 0x2e000000, 8, 80}, /* 1193 'P' */ { 0x2f000000, 8, 39}, /* 1194 '\'' */ { 0x2c000000, 9, 110}, /* 1195 'n' */ { 0x2d800000, 9, 114}, /* 1196 'r' */ { 0x2c800000, 10, 68}, /* 1197 'D' */ { 0x2cc00000, 11, 119}, /* 1198 'w' */ { 0x2ce00000, 11, 115}, /* 1199 's' */ { 0x2d000000, 11, 82}, /* 1200 'R' */ { 0x2d200000, 11, 76}, /* 1201 'L' */ { 0x2d400000, 11, 0}, /* 1202 '0x00' */ { 0x2d600000, 12, 67}, /* 1203 'C' */ { 0x2d700000, 13, 1}, /* 1204 '0x01' */ { 0x2d780000, 13, 78}, /* 1205 'N' */ /* 11 */ { 0x80000000, 1, 111}, /* 1206 'o' */ { 0x00000000, 2, 97}, /* 1207 'a' */ { 0x40000000, 3, 105}, /* 1208 'i' */ { 0x60000000, 5, 79}, /* 1209 'O' */ { 0x68000000, 5, 117}, /* 1210 'u' */ { 0x70000000, 5, 101}, /* 1211 'e' */ { 0x78000000, 6, 32}, /* 1212 ' ' */ { 0x7e000000, 7, 0}, /* 1213 '0x00' */ { 0x7d000000, 8, 58}, /* 1214 ':' */ { 0x7c000000, 9, 1}, /* 1215 '0x01' */ { 0x7c800000, 9, 45}, /* 1216 '-' */ /* 2 */ { 0x00000000, 1, 1}, /* 1217 '0x01' */ { 0x80000000, 1, 1}, /* 1218 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 1219 '0x01' */ { 0x80000000, 1, 120}, /* 1220 'x' */ /* 2 */ { 0x00000000, 1, 1}, /* 1221 '0x01' */ { 0x80000000, 1, 1}, /* 1222 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 1223 '0x01' */ { 0x80000000, 1, 1}, /* 1224 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 1225 '0x01' */ { 0x80000000, 1, 1}, /* 1226 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 1227 '0x01' */ { 0x80000000, 1, 1}, /* 1228 '0x01' */ /* 39 */ { 0x20000000, 3, 114}, /* 1229 'r' */ { 0x60000000, 3, 116}, /* 1230 't' */ { 0x80000000, 3, 108}, /* 1231 'l' */ { 0xc0000000, 3, 110}, /* 1232 'n' */ { 0x10000000, 4, 109}, /* 1233 'm' */ { 0x40000000, 4, 99}, /* 1234 'c' */ { 0xa0000000, 4, 115}, /* 1235 's' */ { 0xe0000000, 4, 121}, /* 1236 'y' */ { 0xb0000000, 5, 32}, /* 1237 ' ' */ { 0xb8000000, 5, 100}, /* 1238 'd' */ { 0xf0000000, 5, 105}, /* 1239 'i' */ { 0xf8000000, 5, 107}, /* 1240 'k' */ { 0x08000000, 6, 98}, /* 1241 'b' */ { 0x0c000000, 6, 0}, /* 1242 '0x00' */ { 0x58000000, 6, 112}, /* 1243 'p' */ { 0x5c000000, 6, 103}, /* 1244 'g' */ { 0x00000000, 7, 101}, /* 1245 'e' */ { 0x02000000, 7, 39}, /* 1246 '\'' */ { 0x06000000, 7, 119}, /* 1247 'w' */ { 0x52000000, 7, 117}, /* 1248 'u' */ { 0x54000000, 7, 122}, /* 1249 'z' */ { 0x56000000, 7, 118}, /* 1250 'v' */ { 0x05000000, 8, 102}, /* 1251 'f' */ { 0x51000000, 8, 104}, /* 1252 'h' */ { 0x04800000, 9, 58}, /* 1253 ':' */ { 0x04000000, 10, 33}, /* 1254 '!' */ { 0x50000000, 10, 111}, /* 1255 'o' */ { 0x50400000, 10, 120}, /* 1256 'x' */ { 0x04400000, 11, 45}, /* 1257 '-' */ { 0x04600000, 11, 97}, /* 1258 'a' */ { 0x50a00000, 11, 46}, /* 1259 '.' */ { 0x50c00000, 11, 78}, /* 1260 'N' */ { 0x50e00000, 11, 44}, /* 1261 ',' */ { 0x50800000, 12, 113}, /* 1262 'q' */ { 0x50900000, 13, 106}, /* 1263 'j' */ { 0x509c0000, 14, 63}, /* 1264 '?' */ { 0x509a0000, 15, 74}, /* 1265 'J' */ { 0x50980000, 16, 1}, /* 1266 '0x01' */ { 0x50990000, 16, 85}, /* 1267 'U' */ /* 24 */ { 0x00000000, 3, 114}, /* 1268 'r' */ { 0x20000000, 3, 111}, /* 1269 'o' */ { 0x40000000, 3, 101}, /* 1270 'e' */ { 0x60000000, 3, 97}, /* 1271 'a' */ { 0x80000000, 3, 105}, /* 1272 'i' */ { 0xb0000000, 4, 117}, /* 1273 'u' */ { 0xc0000000, 4, 121}, /* 1274 'y' */ { 0xd0000000, 4, 108}, /* 1275 'l' */ { 0xf0000000, 4, 32}, /* 1276 ' ' */ { 0xa8000000, 5, 115}, /* 1277 's' */ { 0xe0000000, 5, 98}, /* 1278 'b' */ { 0xe8000000, 5, 0}, /* 1279 '0x00' */ { 0xa0000000, 6, 104}, /* 1280 'h' */ { 0xa4000000, 7, 51}, /* 1281 '3' */ { 0xa7000000, 8, 39}, /* 1282 '\'' */ { 0xa6400000, 10, 116}, /* 1283 't' */ { 0xa6800000, 10, 106}, /* 1284 'j' */ { 0xa6000000, 11, 110}, /* 1285 'n' */ { 0xa6200000, 11, 100}, /* 1286 'd' */ { 0xa6e00000, 11, 119}, /* 1287 'w' */ { 0xa6d00000, 12, 109}, /* 1288 'm' */ { 0xa6c80000, 13, 46}, /* 1289 '.' */ { 0xa6c00000, 14, 1}, /* 1290 '0x01' */ { 0xa6c40000, 14, 58}, /* 1291 ':' */ /* 37 */ { 0x00000000, 2, 107}, /* 1292 'k' */ { 0x40000000, 3, 111}, /* 1293 'o' */ { 0x80000000, 3, 104}, /* 1294 'h' */ { 0xc0000000, 3, 116}, /* 1295 't' */ { 0xe0000000, 3, 101}, /* 1296 'e' */ { 0x70000000, 4, 114}, /* 1297 'r' */ { 0xa0000000, 5, 32}, /* 1298 ' ' */ { 0xb0000000, 5, 105}, /* 1299 'i' */ { 0xb8000000, 5, 97}, /* 1300 'a' */ { 0x60000000, 6, 108}, /* 1301 'l' */ { 0x64000000, 6, 121}, /* 1302 'y' */ { 0x68000000, 6, 115}, /* 1303 's' */ { 0x6c000000, 6, 0}, /* 1304 '0x00' */ { 0xa8000000, 7, 99}, /* 1305 'c' */ { 0xae000000, 7, 117}, /* 1306 'u' */ { 0xaa000000, 8, 58}, /* 1307 ':' */ { 0xab000000, 8, 80}, /* 1308 'P' */ { 0xac800000, 9, 68}, /* 1309 'D' */ { 0xad000000, 10, 71}, /* 1310 'G' */ { 0xad800000, 10, 98}, /* 1311 'b' */ { 0xac000000, 11, 76}, /* 1312 'L' */ { 0xac200000, 11, 75}, /* 1313 'K' */ { 0xac600000, 11, 65}, /* 1314 'A' */ { 0xad400000, 11, 113}, /* 1315 'q' */ { 0xadc00000, 11, 46}, /* 1316 '.' */ { 0xade00000, 11, 67}, /* 1317 'C' */ { 0xac400000, 12, 110}, /* 1318 'n' */ { 0xac500000, 12, 39}, /* 1319 '\'' */ { 0xad600000, 13, 66}, /* 1320 'B' */ { 0xad680000, 13, 73}, /* 1321 'I' */ { 0xad740000, 14, 102}, /* 1322 'f' */ { 0xad780000, 14, 56}, /* 1323 '8' */ { 0xad700000, 15, 77}, /* 1324 'M' */ { 0xad720000, 15, 1}, /* 1325 '0x01' */ { 0xad7e0000, 15, 70}, /* 1326 'F' */ { 0xad7c0000, 16, 119}, /* 1327 'w' */ { 0xad7d0000, 16, 81}, /* 1328 'Q' */ /* 36 */ { 0xc0000000, 2, 32}, /* 1329 ' ' */ { 0x20000000, 3, 101}, /* 1330 'e' */ { 0x80000000, 3, 0}, /* 1331 '0x00' */ { 0xa0000000, 3, 97}, /* 1332 'a' */ { 0x10000000, 4, 121}, /* 1333 'y' */ { 0x40000000, 4, 105}, /* 1334 'i' */ { 0x60000000, 4, 115}, /* 1335 's' */ { 0x00000000, 5, 111}, /* 1336 'o' */ { 0x50000000, 5, 100}, /* 1337 'd' */ { 0x0c000000, 6, 117}, /* 1338 'u' */ { 0x58000000, 6, 114}, /* 1339 'r' */ { 0x5c000000, 6, 108}, /* 1340 'l' */ { 0x74000000, 6, 118}, /* 1341 'v' */ { 0x78000000, 6, 103}, /* 1342 'g' */ { 0x08000000, 7, 39}, /* 1343 '\'' */ { 0x7e000000, 7, 46}, /* 1344 '.' */ { 0x0a000000, 8, 58}, /* 1345 ':' */ { 0x0b000000, 8, 104}, /* 1346 'h' */ { 0x70000000, 8, 99}, /* 1347 'c' */ { 0x72000000, 8, 110}, /* 1348 'n' */ { 0x73000000, 8, 119}, /* 1349 'w' */ { 0x71000000, 9, 63}, /* 1350 '?' */ { 0x7c000000, 9, 33}, /* 1351 '!' */ { 0x7c800000, 9, 45}, /* 1352 '-' */ { 0x7d000000, 9, 102}, /* 1353 'f' */ { 0x71c00000, 10, 109}, /* 1354 'm' */ { 0x7d800000, 10, 44}, /* 1355 ',' */ { 0x7dc00000, 11, 116}, /* 1356 't' */ { 0x7de00000, 11, 98}, /* 1357 'b' */ { 0x71900000, 12, 41}, /* 1358 ')' */ { 0x71a00000, 12, 47}, /* 1359 '/' */ { 0x71b00000, 12, 107}, /* 1360 'k' */ { 0x71880000, 13, 112}, /* 1361 'p' */ { 0x71840000, 14, 122}, /* 1362 'z' */ { 0x71800000, 15, 1}, /* 1363 '0x01' */ { 0x71820000, 15, 52}, /* 1364 '4' */ /* 42 */ { 0x40000000, 2, 32}, /* 1365 ' ' */ { 0x00000000, 3, 115}, /* 1366 's' */ { 0xa0000000, 3, 114}, /* 1367 'r' */ { 0x20000000, 4, 116}, /* 1368 't' */ { 0x90000000, 4, 110}, /* 1369 'n' */ { 0xc0000000, 4, 0}, /* 1370 '0x00' */ { 0xe0000000, 4, 97}, /* 1371 'a' */ { 0xf0000000, 4, 119}, /* 1372 'w' */ { 0x80000000, 5, 108}, /* 1373 'l' */ { 0xd8000000, 5, 101}, /* 1374 'e' */ { 0x38000000, 6, 109}, /* 1375 'm' */ { 0x88000000, 6, 99}, /* 1376 'c' */ { 0x8c000000, 6, 100}, /* 1377 'd' */ { 0x34000000, 7, 105}, /* 1378 'i' */ { 0x36000000, 7, 112}, /* 1379 'p' */ { 0x3c000000, 7, 98}, /* 1380 'b' */ { 0xd0000000, 7, 118}, /* 1381 'v' */ { 0xd6000000, 7, 121}, /* 1382 'y' */ { 0x30000000, 8, 103}, /* 1383 'g' */ { 0x31000000, 8, 102}, /* 1384 'f' */ { 0x32000000, 8, 120}, /* 1385 'x' */ { 0x3e000000, 8, 107}, /* 1386 'k' */ { 0x3f000000, 8, 58}, /* 1387 ':' */ { 0xd3000000, 8, 111}, /* 1388 'o' */ { 0xd4000000, 8, 39}, /* 1389 '\'' */ { 0x33800000, 9, 104}, /* 1390 'h' */ { 0xd2800000, 9, 46}, /* 1391 '.' */ { 0x33000000, 10, 80}, /* 1392 'P' */ { 0x33400000, 10, 66}, /* 1393 'B' */ { 0xd2000000, 10, 44}, /* 1394 ',' */ { 0xd5000000, 10, 86}, /* 1395 'V' */ { 0xd5400000, 10, 122}, /* 1396 'z' */ { 0xd5c00000, 10, 106}, /* 1397 'j' */ { 0xd2400000, 11, 52}, /* 1398 '4' */ { 0xd2600000, 11, 63}, /* 1399 '?' */ { 0xd5a00000, 11, 117}, /* 1400 'u' */ { 0xd5900000, 12, 45}, /* 1401 '-' */ { 0xd5880000, 13, 33}, /* 1402 '!' */ { 0xd5840000, 14, 113}, /* 1403 'q' */ { 0xd5820000, 15, 71}, /* 1404 'G' */ { 0xd5800000, 16, 1}, /* 1405 '0x01' */ { 0xd5810000, 16, 83}, /* 1406 'S' */ /* 24 */ { 0x00000000, 1, 32}, /* 1407 ' ' */ { 0xa0000000, 3, 111}, /* 1408 'o' */ { 0x90000000, 4, 116}, /* 1409 't' */ { 0xc0000000, 4, 97}, /* 1410 'a' */ { 0xd0000000, 4, 105}, /* 1411 'i' */ { 0xf0000000, 4, 101}, /* 1412 'e' */ { 0x80000000, 5, 46}, /* 1413 '.' */ { 0xe0000000, 5, 114}, /* 1414 'r' */ { 0xe8000000, 5, 102}, /* 1415 'f' */ { 0x88000000, 6, 0}, /* 1416 '0x00' */ { 0x8d000000, 8, 121}, /* 1417 'y' */ { 0x8f000000, 8, 117}, /* 1418 'u' */ { 0x8c000000, 9, 39}, /* 1419 '\'' */ { 0x8e800000, 9, 108}, /* 1420 'l' */ { 0x8cc00000, 10, 110}, /* 1421 'n' */ { 0x8e000000, 10, 103}, /* 1422 'g' */ { 0x8c800000, 11, 99}, /* 1423 'c' */ { 0x8e400000, 11, 45}, /* 1424 '-' */ { 0x8ca00000, 12, 44}, /* 1425 ',' */ { 0x8cb00000, 12, 115}, /* 1426 's' */ { 0x8e700000, 12, 58}, /* 1427 ':' */ { 0x8e680000, 13, 107}, /* 1428 'k' */ { 0x8e600000, 14, 1}, /* 1429 '0x01' */ { 0x8e640000, 14, 98}, /* 1430 'b' */ /* 33 */ { 0x00000000, 2, 104}, /* 1431 'h' */ { 0x80000000, 2, 32}, /* 1432 ' ' */ { 0x40000000, 3, 0}, /* 1433 '0x00' */ { 0x60000000, 3, 101}, /* 1434 'e' */ { 0xc0000000, 4, 105}, /* 1435 'i' */ { 0xe0000000, 5, 58}, /* 1436 ':' */ { 0xe8000000, 5, 114}, /* 1437 'r' */ { 0xf8000000, 5, 97}, /* 1438 'a' */ { 0xd0000000, 6, 115}, /* 1439 's' */ { 0xdc000000, 6, 108}, /* 1440 'l' */ { 0xf4000000, 6, 117}, /* 1441 'u' */ { 0xd6000000, 7, 98}, /* 1442 'b' */ { 0xd8000000, 7, 103}, /* 1443 'g' */ { 0xda000000, 7, 111}, /* 1444 'o' */ { 0xf2000000, 7, 110}, /* 1445 'n' */ { 0xd4000000, 8, 50}, /* 1446 '2' */ { 0xf0000000, 8, 33}, /* 1447 '!' */ { 0xf1800000, 9, 100}, /* 1448 'd' */ { 0xd5000000, 10, 46}, /* 1449 '.' */ { 0xd5400000, 10, 44}, /* 1450 ',' */ { 0xd5800000, 10, 39}, /* 1451 '\'' */ { 0xd5c00000, 10, 116}, /* 1452 't' */ { 0xf1400000, 10, 121}, /* 1453 'y' */ { 0xf1000000, 11, 119}, /* 1454 'w' */ { 0xf1300000, 12, 109}, /* 1455 'm' */ { 0xf12c0000, 14, 63}, /* 1456 '?' */ { 0xf1200000, 15, 112}, /* 1457 'p' */ { 0xf1220000, 15, 102}, /* 1458 'f' */ { 0xf1240000, 15, 64}, /* 1459 '@' */ { 0xf1260000, 15, 45}, /* 1460 '-' */ { 0xf12a0000, 15, 59}, /* 1461 ';' */ { 0xf1280000, 16, 1}, /* 1462 '0x01' */ { 0xf1290000, 16, 122}, /* 1463 'z' */ /* 31 */ { 0x00000000, 1, 101}, /* 1464 'e' */ { 0xa0000000, 3, 111}, /* 1465 'o' */ { 0x90000000, 4, 105}, /* 1466 'i' */ { 0xc0000000, 4, 97}, /* 1467 'a' */ { 0xe0000000, 4, 32}, /* 1468 ' ' */ { 0xf0000000, 4, 116}, /* 1469 't' */ { 0xd0000000, 5, 114}, /* 1470 'r' */ { 0xd8000000, 5, 0}, /* 1471 '0x00' */ { 0x80000000, 6, 98}, /* 1472 'b' */ { 0x84000000, 6, 117}, /* 1473 'u' */ { 0x88000000, 8, 119}, /* 1474 'w' */ { 0x89000000, 8, 100}, /* 1475 'd' */ { 0x8a000000, 8, 110}, /* 1476 'n' */ { 0x8b000000, 8, 121}, /* 1477 'y' */ { 0x8c000000, 8, 33}, /* 1478 '!' */ { 0x8d000000, 8, 108}, /* 1479 'l' */ { 0x8f000000, 8, 46}, /* 1480 '.' */ { 0x8e000000, 9, 39}, /* 1481 '\'' */ { 0x8e800000, 10, 115}, /* 1482 's' */ { 0x8ec00000, 11, 109}, /* 1483 'm' */ { 0x8ef00000, 12, 58}, /* 1484 ':' */ { 0x8ee00000, 14, 102}, /* 1485 'f' */ { 0x8ee40000, 14, 63}, /* 1486 '?' */ { 0x8ee80000, 14, 99}, /* 1487 'c' */ { 0x8eec0000, 16, 118}, /* 1488 'v' */ { 0x8eed0000, 16, 113}, /* 1489 'q' */ { 0x8eee0000, 16, 103}, /* 1490 'g' */ { 0x8eef0000, 18, 104}, /* 1491 'h' */ { 0x8eef4000, 18, 1}, /* 1492 '0x01' */ { 0x8eef8000, 18, 44}, /* 1493 ',' */ { 0x8eefc000, 18, 42}, /* 1494 '*' */ /* 35 */ { 0x40000000, 2, 110}, /* 1495 'n' */ { 0x00000000, 3, 99}, /* 1496 'c' */ { 0x90000000, 4, 111}, /* 1497 'o' */ { 0xa0000000, 4, 108}, /* 1498 'l' */ { 0xc0000000, 4, 103}, /* 1499 'g' */ { 0xd0000000, 4, 115}, /* 1500 's' */ { 0xe0000000, 4, 116}, /* 1501 't' */ { 0xf0000000, 4, 101}, /* 1502 'e' */ { 0x28000000, 5, 97}, /* 1503 'a' */ { 0x30000000, 5, 118}, /* 1504 'v' */ { 0x80000000, 5, 114}, /* 1505 'r' */ { 0x88000000, 5, 100}, /* 1506 'd' */ { 0xb0000000, 5, 109}, /* 1507 'm' */ { 0x20000000, 6, 112}, /* 1508 'p' */ { 0x38000000, 6, 32}, /* 1509 ' ' */ { 0xbc000000, 6, 102}, /* 1510 'f' */ { 0x3c000000, 7, 122}, /* 1511 'z' */ { 0x3e000000, 7, 0}, /* 1512 '0x00' */ { 0xb8000000, 7, 98}, /* 1513 'b' */ { 0xba000000, 7, 107}, /* 1514 'k' */ { 0x25000000, 8, 45}, /* 1515 '-' */ { 0x26000000, 8, 120}, /* 1516 'x' */ { 0x24800000, 9, 39}, /* 1517 '\'' */ { 0x27800000, 9, 113}, /* 1518 'q' */ { 0x27000000, 10, 117}, /* 1519 'u' */ { 0x27400000, 10, 105}, /* 1520 'i' */ { 0x24200000, 11, 104}, /* 1521 'h' */ { 0x24400000, 11, 58}, /* 1522 ':' */ { 0x24600000, 11, 119}, /* 1523 'w' */ { 0x24080000, 13, 44}, /* 1524 ',' */ { 0x24100000, 13, 121}, /* 1525 'y' */ { 0x24180000, 13, 47}, /* 1526 '/' */ { 0x24000000, 14, 46}, /* 1527 '.' */ { 0x24040000, 15, 1}, /* 1528 '0x01' */ { 0x24060000, 15, 106}, /* 1529 'j' */ /* 9 */ { 0x00000000, 1, 121}, /* 1530 'y' */ { 0xc0000000, 2, 111}, /* 1531 'o' */ { 0xa0000000, 3, 101}, /* 1532 'e' */ { 0x90000000, 4, 97}, /* 1533 'a' */ { 0x88000000, 5, 117}, /* 1534 'u' */ { 0x84000000, 6, 105}, /* 1535 'i' */ { 0x80000000, 7, 0}, /* 1536 '0x00' */ { 0x82000000, 8, 1}, /* 1537 '0x01' */ { 0x83000000, 8, 32}, /* 1538 ' ' */ /* 33 */ { 0x00000000, 2, 32}, /* 1539 ' ' */ { 0x80000000, 2, 101}, /* 1540 'e' */ { 0x40000000, 3, 105}, /* 1541 'i' */ { 0xc0000000, 3, 0}, /* 1542 '0x00' */ { 0x60000000, 4, 121}, /* 1543 'y' */ { 0x70000000, 4, 115}, /* 1544 's' */ { 0xf0000000, 4, 102}, /* 1545 'f' */ { 0xe4000000, 6, 97}, /* 1546 'a' */ { 0xe8000000, 6, 108}, /* 1547 'l' */ { 0xe2000000, 7, 58}, /* 1548 ':' */ { 0xec000000, 7, 107}, /* 1549 'k' */ { 0xe0000000, 8, 39}, /* 1550 '\'' */ { 0xef000000, 8, 46}, /* 1551 '.' */ { 0xe1800000, 9, 119}, /* 1552 'w' */ { 0xee000000, 9, 111}, /* 1553 'o' */ { 0xe1400000, 10, 104}, /* 1554 'h' */ { 0xe1000000, 11, 98}, /* 1555 'b' */ { 0xe1200000, 11, 44}, /* 1556 ',' */ { 0xeee00000, 11, 110}, /* 1557 'n' */ { 0xeea00000, 12, 63}, /* 1558 '?' */ { 0xeec00000, 12, 109}, /* 1559 'm' */ { 0xeed00000, 12, 33}, /* 1560 '!' */ { 0xee900000, 13, 117}, /* 1561 'u' */ { 0xee980000, 13, 99}, /* 1562 'c' */ { 0xeeb00000, 13, 100}, /* 1563 'd' */ { 0xeeb80000, 13, 116}, /* 1564 't' */ { 0xee840000, 14, 106}, /* 1565 'j' */ { 0xee880000, 14, 45}, /* 1566 '-' */ { 0xee800000, 15, 112}, /* 1567 'p' */ { 0xee820000, 15, 47}, /* 1568 '/' */ { 0xee8e0000, 15, 83}, /* 1569 'S' */ { 0xee8c0000, 16, 1}, /* 1570 '0x01' */ { 0xee8d0000, 16, 114}, /* 1571 'r' */ /* 36 */ { 0x40000000, 2, 101}, /* 1572 'e' */ { 0x00000000, 3, 108}, /* 1573 'l' */ { 0xa0000000, 3, 97}, /* 1574 'a' */ { 0x30000000, 4, 121}, /* 1575 'y' */ { 0x80000000, 4, 0}, /* 1576 '0x00' */ { 0x90000000, 4, 100}, /* 1577 'd' */ { 0xc0000000, 4, 111}, /* 1578 'o' */ { 0xe0000000, 4, 105}, /* 1579 'i' */ { 0xf0000000, 4, 32}, /* 1580 ' ' */ { 0x20000000, 5, 117}, /* 1581 'u' */ { 0xd0000000, 5, 115}, /* 1582 's' */ { 0x28000000, 6, 116}, /* 1583 't' */ { 0x2c000000, 6, 109}, /* 1584 'm' */ { 0xda000000, 7, 107}, /* 1585 'k' */ { 0xd8000000, 8, 102}, /* 1586 'f' */ { 0xdc000000, 8, 98}, /* 1587 'b' */ { 0xde000000, 8, 39}, /* 1588 '\'' */ { 0xdf000000, 8, 99}, /* 1589 'c' */ { 0xd9800000, 9, 118}, /* 1590 'v' */ { 0xdd000000, 9, 58}, /* 1591 ':' */ { 0xd9400000, 10, 46}, /* 1592 '.' */ { 0xdd800000, 10, 119}, /* 1593 'w' */ { 0xd9000000, 11, 122}, /* 1594 'z' */ { 0xdde00000, 11, 112}, /* 1595 'p' */ { 0xd9200000, 12, 104}, /* 1596 'h' */ { 0xd9300000, 12, 42}, /* 1597 '*' */ { 0xddc00000, 13, 103}, /* 1598 'g' */ { 0xddc80000, 13, 44}, /* 1599 ',' */ { 0xddd00000, 14, 114}, /* 1600 'r' */ { 0xddd40000, 14, 110}, /* 1601 'n' */ { 0xdddc0000, 14, 45}, /* 1602 '-' */ { 0xddd80000, 15, 33}, /* 1603 '!' */ { 0xdddb0000, 16, 63}, /* 1604 '?' */ { 0xddda8000, 17, 67}, /* 1605 'C' */ { 0xddda0000, 18, 1}, /* 1606 '0x01' */ { 0xddda4000, 18, 106}, /* 1607 'j' */ /* 25 */ { 0x80000000, 2, 101}, /* 1608 'e' */ { 0x20000000, 3, 109}, /* 1609 'm' */ { 0x60000000, 3, 32}, /* 1610 ' ' */ { 0xe0000000, 3, 97}, /* 1611 'a' */ { 0x00000000, 4, 105}, /* 1612 'i' */ { 0x10000000, 4, 0}, /* 1613 '0x00' */ { 0x40000000, 4, 121}, /* 1614 'y' */ { 0xd0000000, 4, 112}, /* 1615 'p' */ { 0x50000000, 5, 98}, /* 1616 'b' */ { 0xc0000000, 5, 111}, /* 1617 'o' */ { 0xc8000000, 6, 110}, /* 1618 'n' */ { 0xcc000000, 6, 115}, /* 1619 's' */ { 0x58000000, 7, 108}, /* 1620 'l' */ { 0x5c000000, 7, 102}, /* 1621 'f' */ { 0x5a000000, 8, 58}, /* 1622 ':' */ { 0x5e000000, 8, 52}, /* 1623 '4' */ { 0x5b000000, 9, 104}, /* 1624 'h' */ { 0x5f000000, 9, 119}, /* 1625 'w' */ { 0x5bc00000, 10, 39}, /* 1626 '\'' */ { 0x5f800000, 10, 114}, /* 1627 'r' */ { 0x5fc00000, 10, 117}, /* 1628 'u' */ { 0x5ba00000, 11, 46}, /* 1629 '.' */ { 0x5b900000, 12, 107}, /* 1630 'k' */ { 0x5b800000, 13, 1}, /* 1631 '0x01' */ { 0x5b880000, 13, 100}, /* 1632 'd' */ /* 40 */ { 0x00000000, 3, 105}, /* 1633 'i' */ { 0x80000000, 3, 103}, /* 1634 'g' */ { 0xa0000000, 3, 32}, /* 1635 ' ' */ { 0xc0000000, 3, 100}, /* 1636 'd' */ { 0x30000000, 4, 97}, /* 1637 'a' */ { 0x40000000, 4, 115}, /* 1638 's' */ { 0x60000000, 4, 101}, /* 1639 'e' */ { 0xe0000000, 4, 0}, /* 1640 '0x00' */ { 0xf0000000, 4, 116}, /* 1641 't' */ { 0x70000000, 5, 99}, /* 1642 'c' */ { 0x78000000, 5, 110}, /* 1643 'n' */ { 0x28000000, 6, 121}, /* 1644 'y' */ { 0x50000000, 6, 39}, /* 1645 '\'' */ { 0x54000000, 6, 107}, /* 1646 'k' */ { 0x5c000000, 6, 111}, /* 1647 'o' */ { 0x20000000, 7, 114}, /* 1648 'r' */ { 0x26000000, 7, 102}, /* 1649 'f' */ { 0x2c000000, 7, 117}, /* 1650 'u' */ { 0x2e000000, 7, 106}, /* 1651 'j' */ { 0x22000000, 8, 118}, /* 1652 'v' */ { 0x24000000, 8, 45}, /* 1653 '-' */ { 0x25000000, 8, 46}, /* 1654 '.' */ { 0x58000000, 8, 108}, /* 1655 'l' */ { 0x5a000000, 8, 120}, /* 1656 'x' */ { 0x5b000000, 8, 58}, /* 1657 ':' */ { 0x23800000, 9, 44}, /* 1658 ',' */ { 0x59800000, 9, 109}, /* 1659 'm' */ { 0x23000000, 10, 33}, /* 1660 '!' */ { 0x23400000, 11, 122}, /* 1661 'z' */ { 0x59200000, 11, 63}, /* 1662 '?' */ { 0x59400000, 11, 104}, /* 1663 'h' */ { 0x59600000, 11, 98}, /* 1664 'b' */ { 0x23600000, 12, 66}, /* 1665 'B' */ { 0x23700000, 12, 42}, /* 1666 '*' */ { 0x59000000, 12, 119}, /* 1667 'w' */ { 0x59180000, 13, 113}, /* 1668 'q' */ { 0x59140000, 14, 112}, /* 1669 'p' */ { 0x59100000, 15, 59}, /* 1670 ';' */ { 0x59120000, 16, 47}, /* 1671 '/' */ { 0x59130000, 16, 1}, /* 1672 '0x01' */ /* 42 */ { 0x00000000, 2, 114}, /* 1673 'r' */ { 0xc0000000, 3, 110}, /* 1674 'n' */ { 0x40000000, 4, 102}, /* 1675 'f' */ { 0x50000000, 4, 32}, /* 1676 ' ' */ { 0x60000000, 4, 119}, /* 1677 'w' */ { 0x80000000, 4, 111}, /* 1678 'o' */ { 0xb0000000, 4, 117}, /* 1679 'u' */ { 0x78000000, 5, 116}, /* 1680 't' */ { 0x90000000, 5, 99}, /* 1681 'c' */ { 0xa0000000, 5, 112}, /* 1682 'p' */ { 0xa8000000, 5, 100}, /* 1683 'd' */ { 0xe0000000, 5, 109}, /* 1684 'm' */ { 0xf0000000, 5, 108}, /* 1685 'l' */ { 0x70000000, 6, 97}, /* 1686 'a' */ { 0x74000000, 6, 98}, /* 1687 'b' */ { 0x98000000, 6, 121}, /* 1688 'y' */ { 0x9c000000, 6, 0}, /* 1689 '0x00' */ { 0xe8000000, 6, 115}, /* 1690 's' */ { 0xec000000, 6, 107}, /* 1691 'k' */ { 0xfa000000, 7, 118}, /* 1692 'v' */ { 0xfc000000, 7, 103}, /* 1693 'g' */ { 0xff000000, 8, 105}, /* 1694 'i' */ { 0xf8800000, 9, 104}, /* 1695 'h' */ { 0xf9000000, 9, 33}, /* 1696 '!' */ { 0xfe000000, 9, 101}, /* 1697 'e' */ { 0xfe800000, 9, 106}, /* 1698 'j' */ { 0xf9800000, 10, 39}, /* 1699 '\'' */ { 0xf8200000, 11, 63}, /* 1700 '?' */ { 0xf8400000, 11, 58}, /* 1701 ':' */ { 0xf9c00000, 11, 122}, /* 1702 'z' */ { 0xf9e00000, 11, 120}, /* 1703 'x' */ { 0xf8000000, 12, 74}, /* 1704 'J' */ { 0xf8600000, 12, 46}, /* 1705 '.' */ { 0xf8700000, 12, 45}, /* 1706 '-' */ { 0xf8100000, 14, 52}, /* 1707 '4' */ { 0xf8180000, 14, 44}, /* 1708 ',' */ { 0xf81c0000, 14, 71}, /* 1709 'G' */ { 0xf8160000, 15, 41}, /* 1710 ')' */ { 0xf8140000, 16, 83}, /* 1711 'S' */ { 0xf8150000, 17, 68}, /* 1712 'D' */ { 0xf8158000, 18, 1}, /* 1713 '0x01' */ { 0xf815c000, 18, 113}, /* 1714 'q' */ /* 28 */ { 0x00000000, 2, 101}, /* 1715 'e' */ { 0x40000000, 3, 0}, /* 1716 '0x00' */ { 0x80000000, 3, 105}, /* 1717 'i' */ { 0xc0000000, 3, 111}, /* 1718 'o' */ { 0x60000000, 4, 115}, /* 1719 's' */ { 0xa0000000, 4, 32}, /* 1720 ' ' */ { 0xe0000000, 4, 112}, /* 1721 'p' */ { 0x70000000, 5, 108}, /* 1722 'l' */ { 0x78000000, 5, 114}, /* 1723 'r' */ { 0xb0000000, 5, 104}, /* 1724 'h' */ { 0xf0000000, 5, 97}, /* 1725 'a' */ { 0xb8000000, 6, 116}, /* 1726 't' */ { 0xbc000000, 6, 39}, /* 1727 '\'' */ { 0xf8000000, 7, 100}, /* 1728 'd' */ { 0xfa000000, 7, 109}, /* 1729 'm' */ { 0xfc000000, 7, 121}, /* 1730 'y' */ { 0xfe800000, 9, 58}, /* 1731 ':' */ { 0xff800000, 9, 33}, /* 1732 '!' */ { 0xff000000, 10, 119}, /* 1733 'w' */ { 0xff400000, 10, 117}, /* 1734 'u' */ { 0xfe000000, 11, 98}, /* 1735 'b' */ { 0xfe400000, 11, 45}, /* 1736 '-' */ { 0xfe600000, 11, 46}, /* 1737 '.' */ { 0xfe300000, 12, 110}, /* 1738 'n' */ { 0xfe280000, 13, 107}, /* 1739 'k' */ { 0xfe240000, 14, 44}, /* 1740 ',' */ { 0xfe200000, 15, 1}, /* 1741 '0x01' */ { 0xfe220000, 15, 99}, /* 1742 'c' */ /* 5 */ { 0x80000000, 1, 117}, /* 1743 'u' */ { 0x40000000, 2, 0}, /* 1744 '0x00' */ { 0x20000000, 3, 58}, /* 1745 ':' */ { 0x00000000, 4, 1}, /* 1746 '0x01' */ { 0x10000000, 4, 39}, /* 1747 '\'' */ /* 40 */ { 0x00000000, 3, 32}, /* 1748 ' ' */ { 0x60000000, 3, 105}, /* 1749 'i' */ { 0xa0000000, 3, 101}, /* 1750 'e' */ { 0x30000000, 4, 121}, /* 1751 'y' */ { 0x40000000, 4, 100}, /* 1752 'd' */ { 0x80000000, 4, 115}, /* 1753 's' */ { 0x90000000, 4, 116}, /* 1754 't' */ { 0xc0000000, 4, 97}, /* 1755 'a' */ { 0xd0000000, 4, 0}, /* 1756 '0x00' */ { 0xf0000000, 4, 111}, /* 1757 'o' */ { 0x58000000, 5, 110}, /* 1758 'n' */ { 0xe8000000, 5, 108}, /* 1759 'l' */ { 0x24000000, 6, 107}, /* 1760 'k' */ { 0x28000000, 6, 114}, /* 1761 'r' */ { 0x2c000000, 6, 109}, /* 1762 'm' */ { 0x54000000, 6, 117}, /* 1763 'u' */ { 0xe4000000, 6, 103}, /* 1764 'g' */ { 0x20000000, 7, 39}, /* 1765 '\'' */ { 0x52000000, 7, 99}, /* 1766 'c' */ { 0xe2000000, 7, 58}, /* 1767 ':' */ { 0x22000000, 8, 102}, /* 1768 'f' */ { 0x23000000, 8, 46}, /* 1769 '.' */ { 0x51000000, 8, 98}, /* 1770 'b' */ { 0xe0000000, 8, 118}, /* 1771 'v' */ { 0x50000000, 9, 44}, /* 1772 ',' */ { 0x50800000, 9, 112}, /* 1773 'p' */ { 0xe1000000, 9, 119}, /* 1774 'w' */ { 0xe1c00000, 10, 106}, /* 1775 'j' */ { 0xe1800000, 11, 45}, /* 1776 '-' */ { 0xe1a00000, 12, 104}, /* 1777 'h' */ { 0xe1b00000, 13, 71}, /* 1778 'G' */ { 0xe1b80000, 14, 113}, /* 1779 'q' */ { 0xe1be0000, 15, 83}, /* 1780 'S' */ { 0xe1bc0000, 16, 33}, /* 1781 '!' */ { 0xe1bd0000, 18, 42}, /* 1782 '*' */ { 0xe1bd8000, 18, 84}, /* 1783 'T' */ { 0xe1bd4000, 19, 1}, /* 1784 '0x01' */ { 0xe1bd6000, 19, 69}, /* 1785 'E' */ { 0xe1bdc000, 19, 49}, /* 1786 '1' */ { 0xe1bde000, 19, 47}, /* 1787 '/' */ /* 37 */ { 0x80000000, 2, 32}, /* 1788 ' ' */ { 0xc0000000, 2, 0}, /* 1789 '0x00' */ { 0x60000000, 3, 116}, /* 1790 't' */ { 0x00000000, 4, 115}, /* 1791 's' */ { 0x20000000, 4, 105}, /* 1792 'i' */ { 0x30000000, 4, 104}, /* 1793 'h' */ { 0x18000000, 5, 59}, /* 1794 ';' */ { 0x50000000, 5, 101}, /* 1795 'e' */ { 0x44000000, 6, 111}, /* 1796 'o' */ { 0x4c000000, 6, 99}, /* 1797 'c' */ { 0x58000000, 6, 58}, /* 1798 ':' */ { 0x10000000, 7, 46}, /* 1799 '.' */ { 0x12000000, 7, 33}, /* 1800 '!' */ { 0x16000000, 7, 121}, /* 1801 'y' */ { 0x40000000, 7, 112}, /* 1802 'p' */ { 0x48000000, 7, 97}, /* 1803 'a' */ { 0x5e000000, 7, 117}, /* 1804 'u' */ { 0x14000000, 8, 44}, /* 1805 ',' */ { 0x15000000, 8, 102}, /* 1806 'f' */ { 0x43000000, 8, 39}, /* 1807 '\'' */ { 0x4b000000, 8, 110}, /* 1808 'n' */ { 0x5c000000, 8, 108}, /* 1809 'l' */ { 0x5d000000, 8, 114}, /* 1810 'r' */ { 0x42800000, 9, 107}, /* 1811 'k' */ { 0x4a000000, 9, 100}, /* 1812 'd' */ { 0x42400000, 10, 109}, /* 1813 'm' */ { 0x4ac00000, 10, 98}, /* 1814 'b' */ { 0x42000000, 11, 63}, /* 1815 '?' */ { 0x42200000, 11, 119}, /* 1816 'w' */ { 0x4a800000, 11, 103}, /* 1817 'g' */ { 0x4aa00000, 12, 113}, /* 1818 'q' */ { 0x4ab40000, 14, 69}, /* 1819 'E' */ { 0x4ab80000, 14, 45}, /* 1820 '-' */ { 0x4ab00000, 15, 1}, /* 1821 '0x01' */ { 0x4ab20000, 15, 41}, /* 1822 ')' */ { 0x4abc0000, 15, 87}, /* 1823 'W' */ { 0x4abe0000, 15, 49}, /* 1824 '1' */ /* 39 */ { 0x00000000, 3, 105}, /* 1825 'i' */ { 0x60000000, 3, 0}, /* 1826 '0x00' */ { 0x80000000, 3, 32}, /* 1827 ' ' */ { 0xe0000000, 3, 104}, /* 1828 'h' */ { 0x20000000, 4, 97}, /* 1829 'a' */ { 0x40000000, 4, 114}, /* 1830 'r' */ { 0xa0000000, 4, 115}, /* 1831 's' */ { 0xb0000000, 4, 111}, /* 1832 'o' */ { 0xd0000000, 4, 101}, /* 1833 'e' */ { 0x38000000, 5, 116}, /* 1834 't' */ { 0x50000000, 5, 121}, /* 1835 'y' */ { 0xc0000000, 5, 117}, /* 1836 'u' */ { 0x58000000, 6, 109}, /* 1837 'm' */ { 0xc8000000, 6, 99}, /* 1838 'c' */ { 0xcc000000, 6, 108}, /* 1839 'l' */ { 0x30000000, 7, 39}, /* 1840 '\'' */ { 0x34000000, 7, 58}, /* 1841 ':' */ { 0x32000000, 8, 119}, /* 1842 'w' */ { 0x36000000, 8, 33}, /* 1843 '!' */ { 0x5c000000, 8, 46}, /* 1844 '.' */ { 0x5d000000, 8, 98}, /* 1845 'b' */ { 0x5e000000, 8, 69}, /* 1846 'E' */ { 0x5f000000, 8, 102}, /* 1847 'f' */ { 0x33000000, 9, 63}, /* 1848 '?' */ { 0x37000000, 9, 110}, /* 1849 'n' */ { 0x33800000, 10, 122}, /* 1850 'z' */ { 0x37800000, 10, 100}, /* 1851 'd' */ { 0x33e00000, 11, 44}, /* 1852 ',' */ { 0x37c00000, 11, 80}, /* 1853 'P' */ { 0x33c00000, 12, 118}, /* 1854 'v' */ { 0x33d00000, 12, 45}, /* 1855 '-' */ { 0x37e00000, 12, 41}, /* 1856 ')' */ { 0x37f00000, 13, 103}, /* 1857 'g' */ { 0x37f80000, 14, 1}, /* 1858 '0x01' */ { 0x37fc0000, 15, 83}, /* 1859 'S' */ { 0x37ff0000, 16, 52}, /* 1860 '4' */ { 0x37fe0000, 17, 107}, /* 1861 'k' */ { 0x37fe8000, 18, 106}, /* 1862 'j' */ { 0x37fec000, 18, 112}, /* 1863 'p' */ /* 34 */ { 0x00000000, 2, 114}, /* 1864 'r' */ { 0x80000000, 3, 115}, /* 1865 's' */ { 0xe0000000, 3, 110}, /* 1866 'n' */ { 0x40000000, 4, 101}, /* 1867 'e' */ { 0x50000000, 4, 109}, /* 1868 'm' */ { 0xc0000000, 4, 116}, /* 1869 't' */ { 0x60000000, 5, 99}, /* 1870 'c' */ { 0x68000000, 5, 103}, /* 1871 'g' */ { 0x70000000, 5, 98}, /* 1872 'b' */ { 0xa0000000, 5, 112}, /* 1873 'p' */ { 0xa8000000, 5, 105}, /* 1874 'i' */ { 0xb0000000, 5, 108}, /* 1875 'l' */ { 0xd0000000, 5, 100}, /* 1876 'd' */ { 0xd8000000, 5, 97}, /* 1877 'a' */ { 0x78000000, 6, 0}, /* 1878 '0x00' */ { 0xb8000000, 6, 121}, /* 1879 'y' */ { 0x7c000000, 7, 122}, /* 1880 'z' */ { 0xbc000000, 7, 32}, /* 1881 ' ' */ { 0x7f000000, 8, 39}, /* 1882 '\'' */ { 0xbe000000, 8, 45}, /* 1883 '-' */ { 0x7e000000, 9, 107}, /* 1884 'k' */ { 0xbf800000, 9, 58}, /* 1885 ':' */ { 0x7e800000, 10, 102}, /* 1886 'f' */ { 0x7ec00000, 10, 44}, /* 1887 ',' */ { 0xbf000000, 10, 119}, /* 1888 'w' */ { 0xbf400000, 12, 118}, /* 1889 'v' */ { 0xbf500000, 12, 120}, /* 1890 'x' */ { 0xbf700000, 12, 111}, /* 1891 'o' */ { 0xbf600000, 13, 106}, /* 1892 'j' */ { 0xbf680000, 14, 117}, /* 1893 'u' */ { 0xbf6c0000, 15, 46}, /* 1894 '.' */ { 0xbf6f0000, 16, 104}, /* 1895 'h' */ { 0xbf6e0000, 17, 63}, /* 1896 '?' */ { 0xbf6e8000, 17, 1}, /* 1897 '0x01' */ /* 11 */ { 0x80000000, 1, 101}, /* 1898 'e' */ { 0x40000000, 2, 105}, /* 1899 'i' */ { 0x20000000, 3, 97}, /* 1900 'a' */ { 0x10000000, 4, 111}, /* 1901 'o' */ { 0x00000000, 5, 32}, /* 1902 ' ' */ { 0x0c000000, 6, 0}, /* 1903 '0x00' */ { 0x08000000, 7, 121}, /* 1904 'y' */ { 0x0b000000, 8, 115}, /* 1905 's' */ { 0x0a800000, 9, 114}, /* 1906 'r' */ { 0x0a000000, 10, 1}, /* 1907 '0x01' */ { 0x0a400000, 10, 46}, /* 1908 '.' */ /* 31 */ { 0x00000000, 1, 115}, /* 1909 's' */ { 0x80000000, 3, 32}, /* 1910 ' ' */ { 0xc0000000, 3, 0}, /* 1911 '0x00' */ { 0xb0000000, 4, 105}, /* 1912 'i' */ { 0xe0000000, 4, 111}, /* 1913 'o' */ { 0xa0000000, 5, 97}, /* 1914 'a' */ { 0xf0000000, 5, 110}, /* 1915 'n' */ { 0xf8000000, 5, 101}, /* 1916 'e' */ { 0xae000000, 7, 121}, /* 1917 'y' */ { 0xa8000000, 8, 109}, /* 1918 'm' */ { 0xab000000, 8, 100}, /* 1919 'd' */ { 0xad000000, 8, 108}, /* 1920 'l' */ { 0xa9800000, 9, 98}, /* 1921 'b' */ { 0xaa000000, 9, 107}, /* 1922 'k' */ { 0xaa800000, 9, 114}, /* 1923 'r' */ { 0xa9000000, 10, 106}, /* 1924 'j' */ { 0xac400000, 10, 44}, /* 1925 ',' */ { 0xacc00000, 10, 104}, /* 1926 'h' */ { 0xa9600000, 11, 45}, /* 1927 '-' */ { 0xac000000, 11, 99}, /* 1928 'c' */ { 0xac200000, 11, 102}, /* 1929 'f' */ { 0xaca00000, 11, 112}, /* 1930 'p' */ { 0xa9400000, 12, 103}, /* 1931 'g' */ { 0xac800000, 12, 116}, /* 1932 't' */ { 0xa9500000, 13, 46}, /* 1933 '.' */ { 0xa9580000, 13, 58}, /* 1934 ':' */ { 0xac980000, 13, 113}, /* 1935 'q' */ { 0xac940000, 14, 39}, /* 1936 '\'' */ { 0xac920000, 15, 63}, /* 1937 '?' */ { 0xac900000, 16, 1}, /* 1938 '0x01' */ { 0xac910000, 16, 66}, /* 1939 'B' */ /* 20 */ { 0x00000000, 2, 112}, /* 1940 'p' */ { 0x80000000, 2, 32}, /* 1941 ' ' */ { 0xc0000000, 2, 116}, /* 1942 't' */ { 0x60000000, 4, 0}, /* 1943 '0x00' */ { 0x40000000, 5, 111}, /* 1944 'o' */ { 0x50000000, 5, 99}, /* 1945 'c' */ { 0x70000000, 5, 105}, /* 1946 'i' */ { 0x78000000, 5, 109}, /* 1947 'm' */ { 0x48000000, 6, 101}, /* 1948 'e' */ { 0x58000000, 6, 121}, /* 1949 'y' */ { 0x4c000000, 7, 117}, /* 1950 'u' */ { 0x4e000000, 7, 102}, /* 1951 'f' */ { 0x5e000000, 7, 44}, /* 1952 ',' */ { 0x5c000000, 9, 103}, /* 1953 'g' */ { 0x5c800000, 9, 97}, /* 1954 'a' */ { 0x5d800000, 9, 57}, /* 1955 '9' */ { 0x5d400000, 10, 39}, /* 1956 '\'' */ { 0x5d200000, 11, 120}, /* 1957 'x' */ { 0x5d000000, 12, 1}, /* 1958 '0x01' */ { 0x5d100000, 12, 115}, /* 1959 's' */ /* 36 */ { 0x00000000, 1, 32}, /* 1960 ' ' */ { 0xc0000000, 2, 0}, /* 1961 '0x00' */ { 0x88000000, 5, 111}, /* 1962 'o' */ { 0x90000000, 5, 115}, /* 1963 's' */ { 0xa0000000, 5, 97}, /* 1964 'a' */ { 0xb0000000, 5, 108}, /* 1965 'l' */ { 0xb8000000, 5, 58}, /* 1966 ':' */ { 0x98000000, 6, 100}, /* 1967 'd' */ { 0x82000000, 7, 110}, /* 1968 'n' */ { 0x84000000, 7, 116}, /* 1969 't' */ { 0xa8000000, 7, 39}, /* 1970 '\'' */ { 0xaa000000, 7, 98}, /* 1971 'b' */ { 0xae000000, 7, 46}, /* 1972 '.' */ { 0x80000000, 8, 105}, /* 1973 'i' */ { 0x86000000, 8, 44}, /* 1974 ',' */ { 0x87000000, 8, 112}, /* 1975 'p' */ { 0x9c000000, 8, 109}, /* 1976 'm' */ { 0x9e000000, 8, 99}, /* 1977 'c' */ { 0xac000000, 8, 119}, /* 1978 'w' */ { 0xad000000, 8, 101}, /* 1979 'e' */ { 0x81000000, 9, 63}, /* 1980 '?' */ { 0x81800000, 9, 102}, /* 1981 'f' */ { 0x9d000000, 9, 114}, /* 1982 'r' */ { 0x9d800000, 9, 103}, /* 1983 'g' */ { 0x9f000000, 10, 122}, /* 1984 'z' */ { 0x9f800000, 10, 45}, /* 1985 '-' */ { 0x9fc00000, 10, 84}, /* 1986 'T' */ { 0x9f400000, 12, 50}, /* 1987 '2' */ { 0x9f600000, 12, 33}, /* 1988 '!' */ { 0x9f700000, 12, 107}, /* 1989 'k' */ { 0x9f500000, 13, 118}, /* 1990 'v' */ { 0x9f580000, 14, 121}, /* 1991 'y' */ { 0x9f5c0000, 15, 104}, /* 1992 'h' */ { 0x9f5f0000, 16, 106}, /* 1993 'j' */ { 0x9f5e0000, 17, 1}, /* 1994 '0x01' */ { 0x9f5e8000, 17, 41}, /* 1995 ')' */ /* 21 */ { 0x00000000, 2, 122}, /* 1996 'z' */ { 0x40000000, 2, 0}, /* 1997 '0x00' */ { 0xa0000000, 3, 105}, /* 1998 'i' */ { 0x80000000, 4, 121}, /* 1999 'y' */ { 0x90000000, 4, 101}, /* 2000 'e' */ { 0xc0000000, 4, 119}, /* 2001 'w' */ { 0xd0000000, 4, 32}, /* 2002 ' ' */ { 0xe0000000, 4, 108}, /* 2003 'l' */ { 0xf0000000, 5, 97}, /* 2004 'a' */ { 0xf8000000, 6, 111}, /* 2005 'o' */ { 0xfc000000, 8, 109}, /* 2006 'm' */ { 0xfd000000, 8, 58}, /* 2007 ':' */ { 0xff000000, 8, 99}, /* 2008 'c' */ { 0xfe000000, 9, 44}, /* 2009 ',' */ { 0xfec00000, 10, 98}, /* 2010 'b' */ { 0xfe800000, 11, 117}, /* 2011 'u' */ { 0xfeb00000, 12, 33}, /* 2012 '!' */ { 0xfea00000, 14, 1}, /* 2013 '0x01' */ { 0xfea40000, 14, 116}, /* 2014 't' */ { 0xfea80000, 14, 104}, /* 2015 'h' */ { 0xfeac0000, 14, 63}, /* 2016 '?' */ /* 2 */ { 0x00000000, 1, 1}, /* 2017 '0x01' */ { 0x80000000, 1, 1}, /* 2018 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 2019 '0x01' */ { 0x80000000, 1, 1}, /* 2020 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 2021 '0x01' */ { 0x80000000, 1, 1}, /* 2022 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 2023 '0x01' */ { 0x80000000, 1, 1}, /* 2024 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 2025 '0x01' */ { 0x80000000, 1, 1} /* 2026 '0x01' */ }; unsigned fsat_index_1[] = { 0, /* 0 */ 51, /* 1 */ 53, /* 2 */ 53, /* 3 */ 55, /* 4 */ 57, /* 5 */ 59, /* 6 */ 61, /* 7 */ 63, /* 8 */ 65, /* 9 */ 67, /* 10 */ 69, /* 11 */ 71, /* 12 */ 73, /* 13 */ 75, /* 14 */ 77, /* 15 */ 79, /* 16 */ 81, /* 17 */ 83, /* 18 */ 85, /* 19 */ 87, /* 20 */ 89, /* 21 */ 91, /* 22 */ 93, /* 23 */ 95, /* 24 */ 97, /* 25 */ 99, /* 26 */ 101, /* 27 */ 103, /* 28 */ 105, /* 29 */ 107, /* 30 */ 109, /* 31 */ 111, /* 32 */ 181, /* 33 */ 188, /* 34 */ 191, /* 35 */ 193, /* 36 */ 195, /* 37 */ 198, /* 38 */ 202, /* 39 */ 234, /* 40 */ 246, /* 41 */ 249, /* 42 */ 260, /* 43 */ 262, /* 44 */ 266, /* 45 */ 303, /* 46 */ 328, /* 47 */ 346, /* 48 */ 369, /* 49 */ 391, /* 50 */ 409, /* 51 */ 428, /* 52 */ 447, /* 53 */ 458, /* 54 */ 474, /* 55 */ 485, /* 56 */ 500, /* 57 */ 514, /* 58 */ 523, /* 59 */ 526, /* 60 */ 528, /* 61 */ 530, /* 62 */ 532, /* 63 */ 537, /* 64 */ 539, /* 65 */ 583, /* 66 */ 609, /* 67 */ 640, /* 68 */ 668, /* 69 */ 713, /* 70 */ 739, /* 71 */ 764, /* 72 */ 783, /* 73 */ 824, /* 74 */ 840, /* 75 */ 866, /* 76 */ 885, /* 77 */ 914, /* 78 */ 936, /* 79 */ 980, /* 80 */ 1008, /* 81 */ 1016, /* 82 */ 1039, /* 83 */ 1078, /* 84 */ 1111, /* 85 */ 1134, /* 86 */ 1155, /* 87 */ 1173, /* 88 */ 1187, /* 89 */ 1206, /* 90 */ 1217, /* 91 */ 1219, /* 92 */ 1221, /* 93 */ 1223, /* 94 */ 1225, /* 95 */ 1227, /* 96 */ 1229, /* 97 */ 1268, /* 98 */ 1292, /* 99 */ 1329, /* 100 */ 1365, /* 101 */ 1407, /* 102 */ 1431, /* 103 */ 1464, /* 104 */ 1495, /* 105 */ 1530, /* 106 */ 1539, /* 107 */ 1572, /* 108 */ 1608, /* 109 */ 1633, /* 110 */ 1673, /* 111 */ 1715, /* 112 */ 1743, /* 113 */ 1748, /* 114 */ 1788, /* 115 */ 1825, /* 116 */ 1864, /* 117 */ 1898, /* 118 */ 1909, /* 119 */ 1940, /* 120 */ 1960, /* 121 */ 1996, /* 122 */ 2017, /* 123 */ 2019, /* 124 */ 2021, /* 125 */ 2023, /* 126 */ 2025, /* 127 */ 2027 /* 128 */ }; struct fsattab fsat_table_2[] = { /* 51 */ { 0x40000000, 3, 65}, /* 0 'A' */ { 0x80000000, 3, 67}, /* 1 'C' */ { 0xe0000000, 3, 84}, /* 2 'T' */ { 0x10000000, 4, 74}, /* 3 'J' */ { 0x30000000, 4, 68}, /* 4 'D' */ { 0xa0000000, 4, 83}, /* 5 'S' */ { 0x00000000, 5, 72}, /* 6 'H' */ { 0x20000000, 5, 73}, /* 7 'I' */ { 0x28000000, 5, 82}, /* 8 'R' */ { 0x68000000, 5, 70}, /* 9 'F' */ { 0x70000000, 5, 46}, /* 10 '.' */ { 0x78000000, 5, 87}, /* 11 'W' */ { 0xb8000000, 5, 77}, /* 12 'M' */ { 0xc0000000, 5, 66}, /* 13 'B' */ { 0xc8000000, 5, 80}, /* 14 'P' */ { 0xd8000000, 5, 78}, /* 15 'N' */ { 0x08000000, 6, 79}, /* 16 'O' */ { 0x64000000, 6, 91}, /* 17 '[' */ { 0xb4000000, 6, 76}, /* 18 'L' */ { 0xd4000000, 6, 69}, /* 19 'E' */ { 0x0c000000, 7, 75}, /* 20 'K' */ { 0xd0000000, 7, 89}, /* 21 'Y' */ { 0xd2000000, 7, 71}, /* 22 'G' */ { 0x0e000000, 8, 50}, /* 23 '2' */ { 0x60000000, 8, 112}, /* 24 'p' */ { 0x61000000, 8, 98}, /* 25 'b' */ { 0x62000000, 8, 85}, /* 26 'U' */ { 0x63000000, 8, 40}, /* 27 '(' */ { 0xb0000000, 8, 49}, /* 28 '1' */ { 0xb3000000, 8, 86}, /* 29 'V' */ { 0x0f000000, 9, 81}, /* 30 'Q' */ { 0xb1000000, 9, 51}, /* 31 '3' */ { 0x0f800000, 10, 57}, /* 32 '9' */ { 0x0fc00000, 10, 56}, /* 33 '8' */ { 0xb1800000, 10, 54}, /* 34 '6' */ { 0xb1c00000, 10, 53}, /* 35 '5' */ { 0xb2000000, 10, 90}, /* 36 'Z' */ { 0xb2400000, 10, 55}, /* 37 '7' */ { 0xb2800000, 10, 52}, /* 38 '4' */ { 0xb2e00000, 12, 88}, /* 39 'X' */ { 0xb2f00000, 12, 32}, /* 40 ' ' */ { 0xb2c80000, 13, 119}, /* 41 'w' */ { 0xb2d00000, 13, 39}, /* 42 '\'' */ { 0xb2d80000, 13, 34}, /* 43 '\"' */ { 0xb2c00000, 14, 116}, /* 44 't' */ { 0xb2c40000, 15, 97}, /* 45 'a' */ { 0xb2c60000, 16, 96}, /* 46 '`' */ { 0xb2c70000, 17, 1}, /* 47 '0x01' */ { 0xb2c78000, 17, 109}, /* 48 'm' */ { 0x00000000, 1, 1}, /* 49 '0x01' */ { 0x80000000, 1, 1}, /* 50 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 51 '0x01' */ { 0x80000000, 1, 1}, /* 52 '0x01' */ /* 0 */ /* 2 */ { 0x00000000, 1, 1}, /* 53 '0x01' */ { 0x80000000, 1, 1}, /* 54 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 55 '0x01' */ { 0x80000000, 1, 1}, /* 56 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 57 '0x01' */ { 0x80000000, 1, 1}, /* 58 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 59 '0x01' */ { 0x80000000, 1, 1}, /* 60 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 61 '0x01' */ { 0x80000000, 1, 1}, /* 62 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 63 '0x01' */ { 0x80000000, 1, 1}, /* 64 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 65 '0x01' */ { 0x80000000, 1, 1}, /* 66 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 67 '0x01' */ { 0x80000000, 1, 1}, /* 68 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 69 '0x01' */ { 0x80000000, 1, 1}, /* 70 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 71 '0x01' */ { 0x80000000, 1, 1}, /* 72 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 73 '0x01' */ { 0x80000000, 1, 1}, /* 74 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 75 '0x01' */ { 0x80000000, 1, 1}, /* 76 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 77 '0x01' */ { 0x80000000, 1, 1}, /* 78 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 79 '0x01' */ { 0x80000000, 1, 1}, /* 80 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 81 '0x01' */ { 0x80000000, 1, 1}, /* 82 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 83 '0x01' */ { 0x80000000, 1, 1}, /* 84 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 85 '0x01' */ { 0x80000000, 1, 1}, /* 86 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 87 '0x01' */ { 0x80000000, 1, 1}, /* 88 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 89 '0x01' */ { 0x80000000, 1, 1}, /* 90 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 91 '0x01' */ { 0x80000000, 1, 1}, /* 92 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 93 '0x01' */ { 0x80000000, 1, 1}, /* 94 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 95 '0x01' */ { 0x80000000, 1, 1}, /* 96 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 97 '0x01' */ { 0x80000000, 1, 1}, /* 98 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 99 '0x01' */ { 0x80000000, 1, 1}, /* 100 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 101 '0x01' */ { 0x80000000, 1, 1}, /* 102 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 103 '0x01' */ { 0x80000000, 1, 1}, /* 104 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 105 '0x01' */ { 0x80000000, 1, 1}, /* 106 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 107 '0x01' */ { 0x80000000, 1, 1}, /* 108 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 109 '0x01' */ { 0x80000000, 1, 1}, /* 110 '0x01' */ /* 80 */ { 0x40000000, 3, 97}, /* 111 'a' */ { 0x80000000, 3, 116}, /* 112 't' */ { 0x10000000, 4, 111}, /* 113 'o' */ { 0x20000000, 4, 115}, /* 114 's' */ { 0x30000000, 5, 100}, /* 115 'd' */ { 0x60000000, 5, 91}, /* 116 '[' */ { 0x78000000, 5, 112}, /* 117 'p' */ { 0xa8000000, 5, 98}, /* 118 'b' */ { 0xc8000000, 5, 99}, /* 119 'c' */ { 0xd0000000, 5, 104}, /* 120 'h' */ { 0xe0000000, 5, 119}, /* 121 'w' */ { 0xe8000000, 5, 105}, /* 122 'i' */ { 0xf8000000, 5, 102}, /* 123 'f' */ { 0x00000000, 6, 65}, /* 124 'A' */ { 0x0c000000, 6, 77}, /* 125 'M' */ { 0x3c000000, 6, 101}, /* 126 'e' */ { 0x70000000, 6, 66}, /* 127 'B' */ { 0x74000000, 6, 67}, /* 128 'C' */ { 0xa0000000, 6, 84}, /* 129 'T' */ { 0xb4000000, 6, 83}, /* 130 'S' */ { 0xb8000000, 6, 103}, /* 131 'g' */ { 0xc0000000, 6, 114}, /* 132 'r' */ { 0xd8000000, 6, 110}, /* 133 'n' */ { 0xdc000000, 6, 108}, /* 134 'l' */ { 0xf4000000, 6, 109}, /* 135 'm' */ { 0x06000000, 7, 118}, /* 136 'v' */ { 0x08000000, 7, 71}, /* 137 'G' */ { 0x0a000000, 7, 78}, /* 138 'N' */ { 0x3a000000, 7, 121}, /* 139 'y' */ { 0x6a000000, 7, 72}, /* 140 'H' */ { 0x6e000000, 7, 76}, /* 141 'L' */ { 0xa4000000, 7, 74}, /* 142 'J' */ { 0xa6000000, 7, 70}, /* 143 'F' */ { 0xb2000000, 7, 82}, /* 144 'R' */ { 0xbc000000, 7, 117}, /* 145 'u' */ { 0xc4000000, 7, 68}, /* 146 'D' */ { 0xc6000000, 7, 87}, /* 147 'W' */ { 0xf2000000, 7, 80}, /* 148 'P' */ { 0x04000000, 8, 107}, /* 149 'k' */ { 0x05000000, 8, 79}, /* 150 'O' */ { 0x68000000, 8, 45}, /* 151 '-' */ { 0x6d000000, 8, 49}, /* 152 '1' */ { 0xb1000000, 8, 75}, /* 153 'K' */ { 0xbe000000, 8, 106}, /* 154 'j' */ { 0xf0000000, 8, 73}, /* 155 'I' */ { 0xf1000000, 8, 69}, /* 156 'E' */ { 0x39000000, 9, 113}, /* 157 'q' */ { 0x39800000, 9, 85}, /* 158 'U' */ { 0x69000000, 9, 86}, /* 159 'V' */ { 0x6c000000, 9, 89}, /* 160 'Y' */ { 0x6c800000, 9, 32}, /* 161 ' ' */ { 0xb0800000, 9, 50}, /* 162 '2' */ { 0xbf000000, 9, 0}, /* 163 '0x00' */ { 0x38000000, 10, 51}, /* 164 '3' */ { 0x38400000, 10, 56}, /* 165 '8' */ { 0x38800000, 10, 54}, /* 166 '6' */ { 0x69c00000, 10, 53}, /* 167 '5' */ { 0xb0000000, 10, 40}, /* 168 '(' */ { 0xbf800000, 10, 55}, /* 169 '7' */ { 0x38c00000, 11, 48}, /* 170 '0' */ { 0x69800000, 11, 39}, /* 171 '\'' */ { 0x69a00000, 11, 57}, /* 172 '9' */ { 0xb0400000, 11, 90}, /* 173 'Z' */ { 0xbfc00000, 11, 52}, /* 174 '4' */ { 0xbfe00000, 11, 81}, /* 175 'Q' */ { 0x38f00000, 12, 88}, /* 176 'X' */ { 0xb0600000, 13, 1}, /* 177 '0x01' */ { 0xb0680000, 13, 46}, /* 178 '.' */ { 0xb0700000, 13, 38}, /* 179 '&' */ { 0x38e00000, 14, 92}, /* 180 '\\' */ { 0x38e80000, 14, 64}, /* 181 '@' */ { 0x38ec0000, 14, 96}, /* 182 '`' */ { 0xb0780000, 14, 34}, /* 183 '\"' */ { 0xb07c0000, 14, 122}, /* 184 'z' */ { 0x38e60000, 15, 36}, /* 185 '$' */ { 0x38e40000, 16, 43}, /* 186 '+' */ { 0x38e58000, 17, 120}, /* 187 'x' */ { 0x38e54000, 18, 93}, /* 188 ']' */ { 0x38e50000, 19, 47}, /* 189 '/' */ { 0x38e52000, 19, 63}, /* 190 '?' */ /* 13 */ { 0x80000000, 1, 32}, /* 191 ' ' */ { 0x40000000, 2, 0}, /* 192 '0x00' */ { 0x20000000, 3, 46}, /* 193 '.' */ { 0x00000000, 4, 58}, /* 194 ':' */ { 0x18000000, 5, 91}, /* 195 '[' */ { 0x12000000, 7, 34}, /* 196 '\"' */ { 0x14000000, 7, 47}, /* 197 '/' */ { 0x16000000, 7, 33}, /* 198 '!' */ { 0x10000000, 8, 41}, /* 199 ')' */ { 0x11000000, 9, 39}, /* 200 '\'' */ { 0x11c00000, 10, 63}, /* 201 '?' */ { 0x11800000, 11, 1}, /* 202 '0x01' */ { 0x11a00000, 11, 93}, /* 203 ']' */ /* 36 */ { 0xc0000000, 2, 32}, /* 204 ' ' */ { 0x20000000, 3, 46}, /* 205 '.' */ { 0x00000000, 4, 112}, /* 206 'p' */ { 0x50000000, 4, 66}, /* 207 'B' */ { 0x70000000, 4, 84}, /* 208 'T' */ { 0x80000000, 4, 105}, /* 209 'i' */ { 0x10000000, 5, 102}, /* 210 'f' */ { 0x18000000, 5, 87}, /* 211 'W' */ { 0x40000000, 5, 83}, /* 212 'S' */ { 0x60000000, 5, 116}, /* 213 't' */ { 0x68000000, 5, 67}, /* 214 'C' */ { 0xa0000000, 5, 0}, /* 215 '0x00' */ { 0xb8000000, 5, 44}, /* 216 ',' */ { 0x48000000, 6, 74}, /* 217 'J' */ { 0x90000000, 6, 109}, /* 218 'm' */ { 0xa8000000, 6, 110}, /* 219 'n' */ { 0xac000000, 6, 73}, /* 220 'I' */ { 0x4c000000, 7, 69}, /* 221 'E' */ { 0x4e000000, 7, 68}, /* 222 'D' */ { 0x94000000, 7, 119}, /* 223 'w' */ { 0x96000000, 7, 103}, /* 224 'g' */ { 0x98000000, 7, 98}, /* 225 'b' */ { 0x9a000000, 7, 76}, /* 226 'L' */ { 0x9c000000, 7, 45}, /* 227 '-' */ { 0xb0000000, 7, 99}, /* 228 'c' */ { 0xb2000000, 7, 72}, /* 229 'H' */ { 0x9e000000, 8, 80}, /* 230 'P' */ { 0xb4000000, 8, 114}, /* 231 'r' */ { 0xb7000000, 8, 75}, /* 232 'K' */ { 0x9f800000, 9, 108}, /* 233 'l' */ { 0xb5000000, 9, 89}, /* 234 'Y' */ { 0xb5800000, 9, 81}, /* 235 'Q' */ { 0xb6000000, 9, 71}, /* 236 'G' */ { 0xb6800000, 9, 65}, /* 237 'A' */ { 0x9f000000, 10, 1}, /* 238 '0x01' */ { 0x9f400000, 10, 97}, /* 239 'a' */ /* 2 */ { 0x00000000, 1, 1}, /* 240 '0x01' */ { 0x80000000, 1, 1}, /* 241 '0x01' */ /* 8 */ { 0x00000000, 1, 49}, /* 242 '1' */ { 0xc0000000, 2, 51}, /* 243 '3' */ { 0x80000000, 3, 52}, /* 244 '4' */ { 0xb0000000, 4, 50}, /* 245 '2' */ { 0xa8000000, 5, 55}, /* 246 '7' */ { 0xa4000000, 6, 53}, /* 247 '5' */ { 0xa0000000, 7, 1}, /* 248 '0x01' */ { 0xa2000000, 7, 57}, /* 249 '9' */ /* 3 */ { 0x80000000, 1, 32}, /* 250 ' ' */ { 0x00000000, 2, 1}, /* 251 '0x01' */ { 0x40000000, 2, 44}, /* 252 ',' */ /* 12 */ { 0x80000000, 1, 32}, /* 253 ' ' */ { 0x40000000, 2, 119}, /* 254 'w' */ { 0x20000000, 3, 66}, /* 255 'B' */ { 0x00000000, 4, 69}, /* 256 'E' */ { 0x10000000, 6, 50}, /* 257 '2' */ { 0x18000000, 6, 65}, /* 258 'A' */ { 0x1c000000, 6, 82}, /* 259 'R' */ { 0x14000000, 8, 79}, /* 260 'O' */ { 0x15000000, 8, 52}, /* 261 '4' */ { 0x17000000, 8, 74}, /* 262 'J' */ { 0x16000000, 9, 1}, /* 263 '0x01' */ { 0x16800000, 9, 80}, /* 264 'P' */ /* 71 */ { 0x80000000, 1, 115}, /* 265 's' */ { 0x20000000, 3, 116}, /* 266 't' */ { 0x40000000, 3, 32}, /* 267 ' ' */ { 0x00000000, 4, 108}, /* 268 'l' */ { 0x68000000, 5, 114}, /* 269 'r' */ { 0x10000000, 6, 110}, /* 270 'n' */ { 0x14000000, 6, 46}, /* 271 '.' */ { 0x18000000, 6, 67}, /* 272 'C' */ { 0x60000000, 6, 66}, /* 273 'B' */ { 0x74000000, 6, 65}, /* 274 'A' */ { 0x70000000, 7, 100}, /* 275 'd' */ { 0x78000000, 7, 118}, /* 276 'v' */ { 0x1c000000, 8, 83}, /* 277 'S' */ { 0x1f000000, 8, 112}, /* 278 'p' */ { 0x65000000, 8, 68}, /* 279 'D' */ { 0x7b000000, 8, 105}, /* 280 'i' */ { 0x7c000000, 8, 99}, /* 281 'c' */ { 0x7d000000, 8, 109}, /* 282 'm' */ { 0x7f000000, 8, 44}, /* 283 ',' */ { 0x1d000000, 9, 102}, /* 284 'f' */ { 0x1d800000, 9, 103}, /* 285 'g' */ { 0x64000000, 9, 70}, /* 286 'F' */ { 0x64800000, 9, 104}, /* 287 'h' */ { 0x66800000, 9, 72}, /* 288 'H' */ { 0x67000000, 9, 78}, /* 289 'N' */ { 0x72800000, 9, 82}, /* 290 'R' */ { 0x73000000, 9, 0}, /* 291 '0x00' */ { 0x73800000, 9, 84}, /* 292 'T' */ { 0x7a800000, 9, 71}, /* 293 'G' */ { 0x7e800000, 9, 76}, /* 294 'L' */ { 0x1e000000, 10, 111}, /* 295 'o' */ { 0x1e400000, 10, 75}, /* 296 'K' */ { 0x1ec00000, 10, 97}, /* 297 'a' */ { 0x66400000, 10, 117}, /* 298 'u' */ { 0x67c00000, 10, 79}, /* 299 'O' */ { 0x72400000, 10, 73}, /* 300 'I' */ { 0x7a000000, 10, 119}, /* 301 'w' */ { 0x7a400000, 10, 98}, /* 302 'b' */ { 0x7e400000, 10, 101}, /* 303 'e' */ { 0x1ea00000, 11, 63}, /* 304 '?' */ { 0x66000000, 11, 69}, /* 305 'E' */ { 0x66200000, 11, 55}, /* 306 '7' */ { 0x72000000, 11, 80}, /* 307 'P' */ { 0x1e900000, 12, 87}, /* 308 'W' */ { 0x67900000, 12, 58}, /* 309 ':' */ { 0x67a00000, 12, 33}, /* 310 '!' */ { 0x72300000, 12, 74}, /* 311 'J' */ { 0x7e100000, 12, 113}, /* 312 'q' */ { 0x7e300000, 12, 77}, /* 313 'M' */ { 0x1e880000, 13, 86}, /* 314 'V' */ { 0x67880000, 13, 57}, /* 315 '9' */ { 0x67b80000, 13, 121}, /* 316 'y' */ { 0x72200000, 13, 56}, /* 317 '8' */ { 0x72280000, 13, 53}, /* 318 '5' */ { 0x7e000000, 13, 54}, /* 319 '6' */ { 0x7e280000, 13, 107}, /* 320 'k' */ { 0x1e800000, 14, 50}, /* 321 '2' */ { 0x1e840000, 14, 48}, /* 322 '0' */ { 0x67840000, 14, 89}, /* 323 'Y' */ { 0x67b00000, 14, 41}, /* 324 ')' */ { 0x7e080000, 14, 106}, /* 325 'j' */ { 0x7e0c0000, 14, 81}, /* 326 'Q' */ { 0x67800000, 15, 45}, /* 327 '-' */ { 0x67820000, 15, 39}, /* 328 '\'' */ { 0x67b60000, 15, 122}, /* 329 'z' */ { 0x7e200000, 15, 88}, /* 330 'X' */ { 0x7e220000, 15, 85}, /* 331 'U' */ { 0x7e240000, 15, 52}, /* 332 '4' */ { 0x7e260000, 15, 51}, /* 333 '3' */ { 0x67b40000, 16, 1}, /* 334 '0x01' */ { 0x67b50000, 16, 49}, /* 335 '1' */ /* 55 */ { 0x40000000, 2, 49}, /* 336 '1' */ { 0x00000000, 3, 80}, /* 337 'P' */ { 0xa0000000, 3, 116}, /* 338 't' */ { 0x80000000, 4, 50}, /* 339 '2' */ { 0xd0000000, 4, 53}, /* 340 '5' */ { 0xe0000000, 4, 78}, /* 341 'N' */ { 0x38000000, 5, 84}, /* 342 'T' */ { 0x90000000, 5, 112}, /* 343 'p' */ { 0xf8000000, 5, 99}, /* 344 'c' */ { 0x24000000, 6, 97}, /* 345 'a' */ { 0x28000000, 6, 83}, /* 346 'S' */ { 0x30000000, 6, 82}, /* 347 'R' */ { 0x9c000000, 6, 101}, /* 348 'e' */ { 0xf0000000, 6, 74}, /* 349 'J' */ { 0xf4000000, 6, 65}, /* 350 'A' */ { 0x2c000000, 7, 68}, /* 351 'D' */ { 0x36000000, 7, 75}, /* 352 'K' */ { 0x98000000, 7, 118}, /* 353 'v' */ { 0x9a000000, 7, 115}, /* 354 's' */ { 0xc0000000, 7, 98}, /* 355 'b' */ { 0xc4000000, 7, 71}, /* 356 'G' */ { 0xc6000000, 7, 56}, /* 357 '8' */ { 0xc8000000, 7, 77}, /* 358 'M' */ { 0xca000000, 7, 72}, /* 359 'H' */ { 0xcc000000, 7, 67}, /* 360 'C' */ { 0x20000000, 8, 109}, /* 361 'm' */ { 0x22000000, 8, 111}, /* 362 'o' */ { 0x23000000, 8, 69}, /* 363 'E' */ { 0x2e000000, 8, 87}, /* 364 'W' */ { 0xc3000000, 8, 103}, /* 365 'g' */ { 0xce000000, 8, 76}, /* 366 'L' */ { 0x21000000, 9, 100}, /* 367 'd' */ { 0x2f800000, 9, 85}, /* 368 'U' */ { 0x34000000, 9, 70}, /* 369 'F' */ { 0x35000000, 9, 102}, /* 370 'f' */ { 0xc2000000, 9, 119}, /* 371 'w' */ { 0xc2800000, 9, 66}, /* 372 'B' */ { 0xcf800000, 9, 110}, /* 373 'n' */ { 0x21800000, 10, 108}, /* 374 'l' */ { 0x21c00000, 10, 57}, /* 375 '9' */ { 0x2f000000, 10, 52}, /* 376 '4' */ { 0x2f400000, 10, 73}, /* 377 'I' */ { 0x34800000, 10, 51}, /* 378 '3' */ { 0x35c00000, 10, 104}, /* 379 'h' */ { 0xcf400000, 10, 105}, /* 380 'i' */ { 0x34c00000, 11, 90}, /* 381 'Z' */ { 0x34e00000, 11, 86}, /* 382 'V' */ { 0x35800000, 11, 32}, /* 383 ' ' */ { 0xcf000000, 11, 107}, /* 384 'k' */ { 0x35b00000, 12, 79}, /* 385 'O' */ { 0xcf200000, 12, 39}, /* 386 '\'' */ { 0x35a00000, 13, 1}, /* 387 '0x01' */ { 0x35a80000, 13, 117}, /* 388 'u' */ { 0xcf300000, 13, 88}, /* 389 'X' */ { 0xcf380000, 13, 55}, /* 390 '7' */ /* 12 */ { 0x00000000, 1, 32}, /* 391 ' ' */ { 0xc0000000, 2, 46}, /* 392 '.' */ { 0xa0000000, 3, 0}, /* 393 '0x00' */ { 0x90000000, 4, 44}, /* 394 ',' */ { 0x80000000, 5, 58}, /* 395 ':' */ { 0x8c000000, 6, 59}, /* 396 ';' */ { 0x8a000000, 7, 33}, /* 397 '!' */ { 0x89000000, 8, 40}, /* 398 '(' */ { 0x88000000, 10, 1}, /* 399 '0x01' */ { 0x88400000, 10, 111}, /* 400 'o' */ { 0x88800000, 10, 63}, /* 401 '?' */ { 0x88c00000, 10, 41}, /* 402 ')' */ /* 13 */ { 0x00000000, 1, 42}, /* 403 '*' */ { 0x80000000, 3, 115}, /* 404 's' */ { 0xa0000000, 3, 32}, /* 405 ' ' */ { 0xc0000000, 4, 109}, /* 406 'm' */ { 0xe0000000, 4, 116}, /* 407 't' */ { 0xd0000000, 5, 103}, /* 408 'g' */ { 0xd8000000, 5, 107}, /* 409 'k' */ { 0xf8000000, 5, 100}, /* 410 'd' */ { 0xf4000000, 6, 121}, /* 411 'y' */ { 0xf2000000, 7, 101}, /* 412 'e' */ { 0xf0000000, 8, 105}, /* 413 'i' */ { 0xf1000000, 9, 1}, /* 414 '0x01' */ { 0xf1800000, 9, 110}, /* 415 'n' */ /* 3 */ { 0x80000000, 1, 110}, /* 416 'n' */ { 0x00000000, 2, 1}, /* 417 '0x01' */ { 0x40000000, 2, 32}, /* 418 ' ' */ /* 20 */ { 0x80000000, 1, 32}, /* 419 ' ' */ { 0x40000000, 2, 83}, /* 420 'S' */ { 0x20000000, 3, 48}, /* 421 '0' */ { 0x10000000, 4, 65}, /* 422 'A' */ { 0x00000000, 5, 53}, /* 423 '5' */ { 0x0c000000, 7, 98}, /* 424 'b' */ { 0x0e000000, 7, 51}, /* 425 '3' */ { 0x08000000, 8, 50}, /* 426 '2' */ { 0x09000000, 8, 34}, /* 427 '\"' */ { 0x0b000000, 8, 49}, /* 428 '1' */ { 0x0a000000, 10, 81}, /* 429 'Q' */ { 0x0a800000, 10, 39}, /* 430 '\'' */ { 0x0ae00000, 11, 52}, /* 431 '4' */ { 0x0a400000, 12, 84}, /* 432 'T' */ { 0x0a500000, 12, 66}, /* 433 'B' */ { 0x0a600000, 12, 55}, /* 434 '7' */ { 0x0a700000, 12, 54}, /* 435 '6' */ { 0x0ac00000, 12, 0}, /* 436 '0x00' */ { 0x0ad00000, 13, 1}, /* 437 '0x01' */ { 0x0ad80000, 13, 105}, /* 438 'i' */ /* 64 */ { 0x00000000, 2, 32}, /* 439 ' ' */ { 0x40000000, 4, 116}, /* 440 't' */ { 0x50000000, 4, 98}, /* 441 'b' */ { 0x60000000, 4, 119}, /* 442 'w' */ { 0x70000000, 4, 117}, /* 443 'u' */ { 0x90000000, 4, 111}, /* 444 'o' */ { 0xa0000000, 4, 115}, /* 445 's' */ { 0xb0000000, 4, 102}, /* 446 'f' */ { 0x80000000, 5, 99}, /* 447 'c' */ { 0xd8000000, 5, 108}, /* 448 'l' */ { 0xe8000000, 5, 100}, /* 449 'd' */ { 0x88000000, 6, 57}, /* 450 '9' */ { 0xc0000000, 6, 104}, /* 451 'h' */ { 0xc8000000, 6, 49}, /* 452 '1' */ { 0xcc000000, 6, 121}, /* 453 'y' */ { 0xd4000000, 6, 114}, /* 454 'r' */ { 0xe0000000, 6, 97}, /* 455 'a' */ { 0xf0000000, 6, 109}, /* 456 'm' */ { 0xf8000000, 6, 112}, /* 457 'p' */ { 0x8c000000, 7, 83}, /* 458 'S' */ { 0xd0000000, 7, 101}, /* 459 'e' */ { 0xd2000000, 7, 105}, /* 460 'i' */ { 0xf6000000, 7, 110}, /* 461 'n' */ { 0x8e000000, 8, 67}, /* 462 'C' */ { 0xc5000000, 8, 87}, /* 463 'W' */ { 0xc7000000, 8, 103}, /* 464 'g' */ { 0xe5000000, 8, 74}, /* 465 'J' */ { 0xe6000000, 8, 68}, /* 466 'D' */ { 0xf5000000, 8, 50}, /* 467 '2' */ { 0xfc000000, 8, 55}, /* 468 '7' */ { 0xfe000000, 8, 71}, /* 469 'G' */ { 0xff000000, 8, 79}, /* 470 'O' */ { 0x8f800000, 9, 72}, /* 471 'H' */ { 0xc4000000, 9, 65}, /* 472 'A' */ { 0xc6000000, 9, 54}, /* 473 '6' */ { 0xc6800000, 9, 66}, /* 474 'B' */ { 0xe7800000, 9, 77}, /* 475 'M' */ { 0xf4000000, 9, 69}, /* 476 'E' */ { 0xf4800000, 9, 76}, /* 477 'L' */ { 0xfd000000, 9, 85}, /* 478 'U' */ { 0xfd800000, 9, 107}, /* 479 'k' */ { 0x8f000000, 10, 70}, /* 480 'F' */ { 0xc4800000, 10, 106}, /* 481 'j' */ { 0xc4c00000, 10, 80}, /* 482 'P' */ { 0xe4400000, 10, 113}, /* 483 'q' */ { 0xe4800000, 10, 53}, /* 484 '5' */ { 0xe4c00000, 10, 84}, /* 485 'T' */ { 0xe7400000, 10, 73}, /* 486 'I' */ { 0x8f600000, 11, 75}, /* 487 'K' */ { 0xe4000000, 11, 118}, /* 488 'v' */ { 0xe4200000, 11, 90}, /* 489 'Z' */ { 0xe7200000, 11, 78}, /* 490 'N' */ { 0x8f500000, 12, 82}, /* 491 'R' */ { 0xe7100000, 12, 89}, /* 492 'Y' */ { 0x8f480000, 13, 48}, /* 493 '0' */ { 0x8f400000, 14, 52}, /* 494 '4' */ { 0x8f440000, 14, 122}, /* 495 'z' */ { 0xe7040000, 14, 86}, /* 496 'V' */ { 0xe7080000, 14, 51}, /* 497 '3' */ { 0xe70c0000, 14, 56}, /* 498 '8' */ { 0xe7020000, 15, 81}, /* 499 'Q' */ { 0xe7000000, 16, 39}, /* 500 '\'' */ { 0xe7010000, 17, 1}, /* 501 '0x01' */ { 0xe7018000, 17, 120}, /* 502 'x' */ /* 65 */ { 0x80000000, 1, 32}, /* 503 ' ' */ { 0x40000000, 2, 0}, /* 504 '0x00' */ { 0x30000000, 4, 46}, /* 505 '.' */ { 0x10000000, 5, 105}, /* 506 'i' */ { 0x20000000, 5, 48}, /* 507 '0' */ { 0x28000000, 5, 99}, /* 508 'c' */ { 0x04000000, 6, 117}, /* 509 'u' */ { 0x00000000, 7, 97}, /* 510 'a' */ { 0x02000000, 7, 91}, /* 511 '[' */ { 0x1a000000, 7, 51}, /* 512 '3' */ { 0x08000000, 8, 52}, /* 513 '4' */ { 0x0e000000, 8, 72}, /* 514 'H' */ { 0x18000000, 8, 83}, /* 515 'S' */ { 0x19000000, 8, 87}, /* 516 'W' */ { 0x1c000000, 8, 111}, /* 517 'o' */ { 0x1e000000, 8, 49}, /* 518 '1' */ { 0x0a000000, 9, 53}, /* 519 '5' */ { 0x0a800000, 9, 76}, /* 520 'L' */ { 0x0b800000, 9, 112}, /* 521 'p' */ { 0x0c000000, 9, 84}, /* 522 'T' */ { 0x0c800000, 9, 65}, /* 523 'A' */ { 0x0d000000, 9, 77}, /* 524 'M' */ { 0x0f000000, 9, 67}, /* 525 'C' */ { 0x0f800000, 9, 50}, /* 526 '2' */ { 0x1d800000, 9, 68}, /* 527 'D' */ { 0x1f000000, 9, 66}, /* 528 'B' */ { 0x09000000, 10, 78}, /* 529 'N' */ { 0x09800000, 10, 116}, /* 530 't' */ { 0x09c00000, 10, 74}, /* 531 'J' */ { 0x0b400000, 10, 82}, /* 532 'R' */ { 0x0dc00000, 10, 80}, /* 533 'P' */ { 0x1d400000, 10, 115}, /* 534 's' */ { 0x1fc00000, 10, 73}, /* 535 'I' */ { 0x0b000000, 11, 114}, /* 536 'r' */ { 0x0d800000, 11, 86}, /* 537 'V' */ { 0x1d000000, 11, 119}, /* 538 'w' */ { 0x1d200000, 11, 70}, /* 539 'F' */ { 0x1fa00000, 11, 71}, /* 540 'G' */ { 0x09400000, 12, 69}, /* 541 'E' */ { 0x09500000, 12, 58}, /* 542 ':' */ { 0x0b200000, 12, 104}, /* 543 'h' */ { 0x0da00000, 12, 44}, /* 544 ',' */ { 0x1f800000, 12, 39}, /* 545 '\'' */ { 0x09680000, 13, 98}, /* 546 'b' */ { 0x09700000, 13, 75}, /* 547 'K' */ { 0x09780000, 13, 89}, /* 548 'Y' */ { 0x0b380000, 13, 79}, /* 549 'O' */ { 0x0db00000, 13, 45}, /* 550 '-' */ { 0x1f900000, 13, 102}, /* 551 'f' */ { 0x1f980000, 13, 40}, /* 552 '(' */ { 0x0b300000, 14, 34}, /* 553 '\"' */ { 0x0db80000, 14, 121}, /* 554 'y' */ { 0x09600000, 15, 63}, /* 555 '?' */ { 0x09620000, 15, 109}, /* 556 'm' */ { 0x09640000, 15, 81}, /* 557 'Q' */ { 0x0dbc0000, 15, 42}, /* 558 '*' */ { 0x0dbe0000, 15, 38}, /* 559 '&' */ { 0x09660000, 16, 85}, /* 560 'U' */ { 0x09670000, 16, 59}, /* 561 ';' */ { 0x0b340000, 16, 56}, /* 562 '8' */ { 0x0b350000, 16, 54}, /* 563 '6' */ { 0x0b370000, 16, 107}, /* 564 'k' */ { 0x0b360000, 17, 100}, /* 565 'd' */ { 0x0b368000, 18, 1}, /* 566 '0x01' */ { 0x0b36c000, 18, 110}, /* 567 'n' */ /* 51 */ { 0x40000000, 2, 99}, /* 568 'c' */ { 0xc0000000, 3, 49}, /* 569 '1' */ { 0xe0000000, 3, 101}, /* 570 'e' */ { 0x00000000, 4, 53}, /* 571 '5' */ { 0x20000000, 4, 56}, /* 572 '8' */ { 0x10000000, 5, 84}, /* 573 'T' */ { 0x18000000, 5, 102}, /* 574 'f' */ { 0x30000000, 5, 66}, /* 575 'B' */ { 0x38000000, 5, 50}, /* 576 '2' */ { 0x88000000, 5, 51}, /* 577 '3' */ { 0x90000000, 5, 55}, /* 578 '7' */ { 0xa0000000, 5, 54}, /* 579 '6' */ { 0xb0000000, 5, 97}, /* 580 'a' */ { 0xbc000000, 6, 52}, /* 581 '4' */ { 0x80000000, 7, 70}, /* 582 'F' */ { 0x84000000, 7, 115}, /* 583 's' */ { 0x86000000, 7, 77}, /* 584 'M' */ { 0x98000000, 7, 72}, /* 585 'H' */ { 0x9c000000, 7, 68}, /* 586 'D' */ { 0x9e000000, 7, 65}, /* 587 'A' */ { 0xaa000000, 7, 83}, /* 588 'S' */ { 0x83000000, 8, 109}, /* 589 'm' */ { 0x9a000000, 8, 87}, /* 590 'W' */ { 0xa8000000, 8, 71}, /* 591 'G' */ { 0xa9000000, 8, 85}, /* 592 'U' */ { 0xac000000, 8, 100}, /* 593 'd' */ { 0xad000000, 8, 79}, /* 594 'O' */ { 0xae000000, 8, 78}, /* 595 'N' */ { 0xb9000000, 8, 67}, /* 596 'C' */ { 0xbb000000, 8, 80}, /* 597 'P' */ { 0x9b000000, 9, 76}, /* 598 'L' */ { 0xaf000000, 9, 32}, /* 599 ' ' */ { 0xaf800000, 9, 73}, /* 600 'I' */ { 0xb8000000, 9, 69}, /* 601 'E' */ { 0xb8800000, 9, 82}, /* 602 'R' */ { 0xba000000, 9, 75}, /* 603 'K' */ { 0xba800000, 9, 116}, /* 604 't' */ { 0x82400000, 10, 74}, /* 605 'J' */ { 0x82c00000, 10, 57}, /* 606 '9' */ { 0x82000000, 11, 118}, /* 607 'v' */ { 0x82200000, 11, 112}, /* 608 'p' */ { 0x82800000, 11, 104}, /* 609 'h' */ { 0x9ba00000, 11, 111}, /* 610 'o' */ { 0x9bc00000, 11, 81}, /* 611 'Q' */ { 0x9be00000, 11, 48}, /* 612 '0' */ { 0x82a00000, 12, 108}, /* 613 'l' */ { 0x82b00000, 12, 105}, /* 614 'i' */ { 0x9b800000, 12, 86}, /* 615 'V' */ { 0x9b980000, 13, 121}, /* 616 'y' */ { 0x9b900000, 14, 1}, /* 617 '0x01' */ { 0x9b940000, 14, 103}, /* 618 'g' */ /* 35 */ { 0x00000000, 1, 48}, /* 619 '0' */ { 0xe0000000, 3, 32}, /* 620 ' ' */ { 0x90000000, 4, 97}, /* 621 'a' */ { 0xb0000000, 4, 112}, /* 622 'p' */ { 0x88000000, 5, 115}, /* 623 's' */ { 0xc0000000, 5, 46}, /* 624 '.' */ { 0xc8000000, 5, 56}, /* 625 '8' */ { 0xd8000000, 5, 44}, /* 626 ',' */ { 0x80000000, 6, 52}, /* 627 '4' */ { 0x84000000, 6, 116}, /* 628 't' */ { 0xa4000000, 6, 53}, /* 629 '5' */ { 0xd0000000, 6, 54}, /* 630 '6' */ { 0xa0000000, 7, 51}, /* 631 '3' */ { 0xa2000000, 7, 55}, /* 632 '7' */ { 0xaa000000, 7, 93}, /* 633 ']' */ { 0xac000000, 7, 45}, /* 634 '-' */ { 0xae000000, 7, 49}, /* 635 '1' */ { 0xa8000000, 8, 41}, /* 636 ')' */ { 0xa9000000, 8, 47}, /* 637 '/' */ { 0xd4000000, 8, 0}, /* 638 '0x00' */ { 0xd5000000, 8, 57}, /* 639 '9' */ { 0xd7000000, 8, 50}, /* 640 '2' */ { 0xd6000000, 9, 37}, /* 641 '%' */ { 0xd6800000, 10, 58}, /* 642 ':' */ { 0xd6d00000, 12, 102}, /* 643 'f' */ { 0xd6f00000, 12, 109}, /* 644 'm' */ { 0xd6e00000, 13, 121}, /* 645 'y' */ { 0xd6c40000, 14, 108}, /* 646 'l' */ { 0xd6c80000, 14, 59}, /* 647 ';' */ { 0xd6cc0000, 14, 39}, /* 648 '\'' */ { 0xd6e80000, 14, 107}, /* 649 'k' */ { 0xd6ec0000, 14, 33}, /* 650 '!' */ { 0xd6c00000, 15, 67}, /* 651 'C' */ { 0xd6c20000, 16, 1}, /* 652 '0x01' */ { 0xd6c30000, 16, 74}, /* 653 'J' */ /* 38 */ { 0x00000000, 2, 57}, /* 654 '9' */ { 0x80000000, 3, 49}, /* 655 '1' */ { 0xe0000000, 3, 48}, /* 656 '0' */ { 0x50000000, 4, 32}, /* 657 ' ' */ { 0x70000000, 4, 50}, /* 658 '2' */ { 0xb0000000, 4, 46}, /* 659 '.' */ { 0xc0000000, 4, 53}, /* 660 '5' */ { 0x40000000, 5, 54}, /* 661 '6' */ { 0x48000000, 5, 56}, /* 662 '8' */ { 0x68000000, 5, 47}, /* 663 '/' */ { 0xa0000000, 5, 93}, /* 664 ']' */ { 0xd0000000, 5, 51}, /* 665 '3' */ { 0x64000000, 6, 55}, /* 666 '7' */ { 0xd8000000, 6, 52}, /* 667 '4' */ { 0x60000000, 7, 0}, /* 668 '0x00' */ { 0x62000000, 7, 45}, /* 669 '-' */ { 0xa8000000, 7, 41}, /* 670 ')' */ { 0xac000000, 7, 58}, /* 671 ':' */ { 0xae000000, 7, 115}, /* 672 's' */ { 0xdc000000, 7, 44}, /* 673 ',' */ { 0xde000000, 7, 120}, /* 674 'x' */ { 0xaa000000, 8, 39}, /* 675 '\'' */ { 0xab000000, 9, 88}, /* 676 'X' */ { 0xabc00000, 11, 116}, /* 677 't' */ { 0xabe00000, 11, 82}, /* 678 'R' */ { 0xabb00000, 12, 59}, /* 679 ';' */ { 0xab800000, 13, 112}, /* 680 'p' */ { 0xab880000, 13, 109}, /* 681 'm' */ { 0xab900000, 13, 33}, /* 682 '!' */ { 0xaba80000, 13, 38}, /* 683 '&' */ { 0xab980000, 14, 101}, /* 684 'e' */ { 0xab9c0000, 15, 98}, /* 685 'b' */ { 0xab9e0000, 15, 97}, /* 686 'a' */ { 0xaba00000, 15, 68}, /* 687 'D' */ { 0xaba20000, 15, 67}, /* 688 'C' */ { 0xaba40000, 15, 37}, /* 689 '%' */ { 0xaba60000, 16, 1}, /* 690 '0x01' */ { 0xaba70000, 16, 111}, /* 691 'o' */ /* 32 */ { 0xc0000000, 2, 48}, /* 692 '0' */ { 0x00000000, 3, 32}, /* 693 ' ' */ { 0x40000000, 3, 46}, /* 694 '.' */ { 0x80000000, 3, 53}, /* 695 '5' */ { 0x30000000, 4, 47}, /* 696 '/' */ { 0xb0000000, 4, 44}, /* 697 ',' */ { 0x20000000, 5, 93}, /* 698 ']' */ { 0x28000000, 5, 112}, /* 699 'p' */ { 0x68000000, 5, 49}, /* 700 '1' */ { 0xa8000000, 5, 52}, /* 701 '4' */ { 0x60000000, 6, 54}, /* 702 '6' */ { 0x64000000, 6, 50}, /* 703 '2' */ { 0x70000000, 6, 58}, /* 704 ':' */ { 0x74000000, 6, 45}, /* 705 '-' */ { 0x7c000000, 6, 41}, /* 706 ')' */ { 0xa0000000, 7, 0}, /* 707 '0x00' */ { 0xa4000000, 7, 56}, /* 708 '8' */ { 0xa6000000, 7, 57}, /* 709 '9' */ { 0x78000000, 8, 68}, /* 710 'D' */ { 0x79000000, 8, 51}, /* 711 '3' */ { 0x7a000000, 8, 116}, /* 712 't' */ { 0x7b000000, 8, 55}, /* 713 '7' */ { 0xa2000000, 8, 110}, /* 714 'n' */ { 0xa3000000, 9, 97}, /* 715 'a' */ { 0xa3800000, 10, 39}, /* 716 '\'' */ { 0xa3e00000, 11, 59}, /* 717 ';' */ { 0xa3c00000, 12, 115}, /* 718 's' */ { 0xa3d00000, 13, 34}, /* 719 '\"' */ { 0xa3d80000, 15, 1}, /* 720 '0x01' */ { 0xa3da0000, 15, 105}, /* 721 'i' */ { 0xa3dc0000, 15, 87}, /* 722 'W' */ { 0xa3de0000, 15, 76}, /* 723 'L' */ /* 36 */ { 0x00000000, 2, 32}, /* 724 ' ' */ { 0x80000000, 2, 48}, /* 725 '0' */ { 0xc0000000, 3, 46}, /* 726 '.' */ { 0xe0000000, 4, 47}, /* 727 '/' */ { 0x40000000, 5, 50}, /* 728 '2' */ { 0x48000000, 5, 49}, /* 729 '1' */ { 0x50000000, 5, 41}, /* 730 ')' */ { 0x60000000, 5, 58}, /* 731 ':' */ { 0x70000000, 5, 45}, /* 732 '-' */ { 0xf8000000, 5, 93}, /* 733 ']' */ { 0x58000000, 6, 68}, /* 734 'D' */ { 0x68000000, 6, 52}, /* 735 '4' */ { 0x6c000000, 6, 0}, /* 736 '0x00' */ { 0x7c000000, 6, 53}, /* 737 '5' */ { 0xf0000000, 6, 44}, /* 738 ',' */ { 0x5c000000, 7, 55}, /* 739 '7' */ { 0x5e000000, 7, 51}, /* 740 '3' */ { 0x7a000000, 7, 54}, /* 741 '6' */ { 0xf6000000, 7, 116}, /* 742 't' */ { 0x79000000, 8, 66}, /* 743 'B' */ { 0xf4000000, 8, 56}, /* 744 '8' */ { 0xf5000000, 9, 57}, /* 745 '9' */ { 0x78400000, 10, 59}, /* 746 ';' */ { 0xf5800000, 10, 114}, /* 747 'r' */ { 0xf5c00000, 10, 115}, /* 748 's' */ { 0x78000000, 11, 110}, /* 749 'n' */ { 0x78a00000, 11, 98}, /* 750 'b' */ { 0x78c00000, 11, 39}, /* 751 '\'' */ { 0x78e00000, 11, 65}, /* 752 'A' */ { 0x78200000, 12, 112}, /* 753 'p' */ { 0x78300000, 12, 101}, /* 754 'e' */ { 0x78800000, 13, 97}, /* 755 'a' */ { 0x78880000, 13, 38}, /* 756 '&' */ { 0x78900000, 13, 37}, /* 757 '%' */ { 0x78980000, 14, 1}, /* 758 '0x01' */ { 0x789c0000, 14, 107}, /* 759 'k' */ /* 35 */ { 0x40000000, 2, 32}, /* 760 ' ' */ { 0x00000000, 3, 52}, /* 761 '4' */ { 0x80000000, 3, 46}, /* 762 '.' */ { 0xc0000000, 3, 48}, /* 763 '0' */ { 0x20000000, 4, 47}, /* 764 '/' */ { 0xa0000000, 4, 53}, /* 765 '5' */ { 0xb0000000, 4, 45}, /* 766 '-' */ { 0x30000000, 5, 49}, /* 767 '1' */ { 0xe8000000, 5, 93}, /* 768 ']' */ { 0xf0000000, 5, 44}, /* 769 ',' */ { 0x38000000, 6, 50}, /* 770 '2' */ { 0xe4000000, 6, 56}, /* 771 '8' */ { 0xf8000000, 6, 41}, /* 772 ')' */ { 0x3c000000, 7, 58}, /* 773 ':' */ { 0x3e000000, 7, 39}, /* 774 '\'' */ { 0xe0000000, 7, 116}, /* 775 't' */ { 0xe2000000, 7, 51}, /* 776 '3' */ { 0xfe000000, 7, 0}, /* 777 '0x00' */ { 0xfd000000, 8, 54}, /* 778 '6' */ { 0xfc000000, 10, 57}, /* 779 '9' */ { 0xfc800000, 10, 55}, /* 780 '7' */ { 0xfc600000, 11, 67}, /* 781 'C' */ { 0xfcc00000, 11, 59}, /* 782 ';' */ { 0xfc500000, 12, 120}, /* 783 'x' */ { 0xfce80000, 13, 109}, /* 784 'm' */ { 0xfcf00000, 13, 73}, /* 785 'I' */ { 0xfc400000, 14, 102}, /* 786 'f' */ { 0xfc440000, 14, 101}, /* 787 'e' */ { 0xfc480000, 14, 98}, /* 788 'b' */ { 0xfc4c0000, 14, 76}, /* 789 'L' */ { 0xfce00000, 14, 37}, /* 790 '%' */ { 0xfcf80000, 14, 112}, /* 791 'p' */ { 0xfcfc0000, 14, 99}, /* 792 'c' */ { 0xfce40000, 15, 1}, /* 793 '0x01' */ { 0xfce60000, 15, 105}, /* 794 'i' */ /* 32 */ { 0x00000000, 2, 48}, /* 795 '0' */ { 0x80000000, 2, 32}, /* 796 ' ' */ { 0x40000000, 3, 46}, /* 797 '.' */ { 0x70000000, 4, 112}, /* 798 'p' */ { 0xc0000000, 4, 53}, /* 799 '5' */ { 0x60000000, 5, 47}, /* 800 '/' */ { 0xd0000000, 5, 97}, /* 801 'a' */ { 0xd8000000, 5, 45}, /* 802 '-' */ { 0xe8000000, 5, 54}, /* 803 '6' */ { 0x68000000, 6, 51}, /* 804 '3' */ { 0xf0000000, 6, 50}, /* 805 '2' */ { 0xf8000000, 6, 56}, /* 806 '8' */ { 0xfc000000, 6, 93}, /* 807 ']' */ { 0x6c000000, 7, 58}, /* 808 ':' */ { 0xe0000000, 7, 41}, /* 809 ')' */ { 0xe2000000, 7, 115}, /* 810 's' */ { 0xe6000000, 7, 44}, /* 811 ',' */ { 0xf4000000, 7, 55}, /* 812 '7' */ { 0xf6000000, 7, 57}, /* 813 '9' */ { 0x6e000000, 8, 52}, /* 814 '4' */ { 0xe4000000, 8, 0}, /* 815 '0x00' */ { 0xe5000000, 8, 116}, /* 816 't' */ { 0x6f800000, 10, 99}, /* 817 'c' */ { 0x6fc00000, 10, 49}, /* 818 '1' */ { 0x6f200000, 11, 59}, /* 819 ';' */ { 0x6f600000, 11, 109}, /* 820 'm' */ { 0x6f000000, 12, 101}, /* 821 'e' */ { 0x6f100000, 12, 39}, /* 822 '\'' */ { 0x6f500000, 12, 107}, /* 823 'k' */ { 0x6f480000, 13, 108}, /* 824 'l' */ { 0x6f400000, 14, 1}, /* 825 '0x01' */ { 0x6f440000, 14, 102}, /* 826 'f' */ /* 33 */ { 0x00000000, 2, 32}, /* 827 ' ' */ { 0x80000000, 2, 46}, /* 828 '.' */ { 0xe0000000, 3, 48}, /* 829 '0' */ { 0x50000000, 4, 93}, /* 830 ']' */ { 0x48000000, 5, 49}, /* 831 '1' */ { 0x60000000, 5, 55}, /* 832 '7' */ { 0x70000000, 5, 41}, /* 833 ')' */ { 0xc0000000, 5, 44}, /* 834 ',' */ { 0xc8000000, 5, 58}, /* 835 ':' */ { 0xd0000000, 5, 47}, /* 836 '/' */ { 0x44000000, 6, 45}, /* 837 '-' */ { 0x68000000, 6, 53}, /* 838 '5' */ { 0x6c000000, 6, 52}, /* 839 '4' */ { 0x7c000000, 6, 56}, /* 840 '8' */ { 0xdc000000, 6, 116}, /* 841 't' */ { 0x40000000, 7, 54}, /* 842 '6' */ { 0x78000000, 7, 51}, /* 843 '3' */ { 0x7a000000, 7, 50}, /* 844 '2' */ { 0xda000000, 7, 57}, /* 845 '9' */ { 0x42000000, 8, 0}, /* 846 '0x00' */ { 0x43000000, 8, 43}, /* 847 '+' */ { 0xd8000000, 8, 39}, /* 848 '\'' */ { 0xd9400000, 10, 97}, /* 849 'a' */ { 0xd9800000, 10, 63}, /* 850 '?' */ { 0xd9000000, 11, 109}, /* 851 'm' */ { 0xd9200000, 11, 101}, /* 852 'e' */ { 0xd9c00000, 11, 59}, /* 853 ';' */ { 0xd9e00000, 13, 102}, /* 854 'f' */ { 0xd9e80000, 13, 98}, /* 855 'b' */ { 0xd9f00000, 13, 77}, /* 856 'M' */ { 0xd9f80000, 14, 34}, /* 857 '\"' */ { 0xd9fc0000, 15, 1}, /* 858 '0x01' */ { 0xd9fe0000, 15, 105}, /* 859 'i' */ /* 31 */ { 0xc0000000, 2, 46}, /* 860 '.' */ { 0x20000000, 3, 32}, /* 861 ' ' */ { 0x60000000, 3, 48}, /* 862 '0' */ { 0xa0000000, 3, 45}, /* 863 '-' */ { 0x00000000, 4, 56}, /* 864 '8' */ { 0x40000000, 4, 55}, /* 865 '7' */ { 0x90000000, 4, 93}, /* 866 ']' */ { 0x50000000, 5, 47}, /* 867 '/' */ { 0x14000000, 6, 54}, /* 868 '6' */ { 0x18000000, 6, 50}, /* 869 '2' */ { 0x1c000000, 6, 49}, /* 870 '1' */ { 0x5c000000, 6, 116}, /* 871 't' */ { 0x80000000, 6, 57}, /* 872 '9' */ { 0x88000000, 6, 41}, /* 873 ')' */ { 0x8c000000, 6, 53}, /* 874 '5' */ { 0x12000000, 7, 51}, /* 875 '3' */ { 0x5a000000, 7, 44}, /* 876 ',' */ { 0x84000000, 7, 97}, /* 877 'a' */ { 0x86000000, 7, 52}, /* 878 '4' */ { 0x10000000, 8, 0}, /* 879 '0x00' */ { 0x58000000, 8, 58}, /* 880 ':' */ { 0x59000000, 8, 112}, /* 881 'p' */ { 0x11400000, 10, 82}, /* 882 'R' */ { 0x11800000, 10, 59}, /* 883 ';' */ { 0x11000000, 11, 39}, /* 884 '\'' */ { 0x11e00000, 11, 109}, /* 885 'm' */ { 0x11300000, 12, 102}, /* 886 'f' */ { 0x11c00000, 12, 65}, /* 887 'A' */ { 0x11d00000, 12, 63}, /* 888 '?' */ { 0x11200000, 13, 1}, /* 889 '0x01' */ { 0x11280000, 13, 115}, /* 890 's' */ /* 31 */ { 0x40000000, 2, 32}, /* 891 ' ' */ { 0x00000000, 3, 52}, /* 892 '4' */ { 0xc0000000, 3, 46}, /* 893 '.' */ { 0x30000000, 4, 48}, /* 894 '0' */ { 0x80000000, 4, 57}, /* 895 '9' */ { 0x90000000, 4, 55}, /* 896 '7' */ { 0xb0000000, 4, 56}, /* 897 '8' */ { 0xe0000000, 4, 49}, /* 898 '1' */ { 0x20000000, 5, 47}, /* 899 '/' */ { 0xa0000000, 5, 51}, /* 900 '3' */ { 0xf0000000, 5, 53}, /* 901 '5' */ { 0xa8000000, 6, 41}, /* 902 ')' */ { 0xf8000000, 6, 54}, /* 903 '6' */ { 0xfc000000, 6, 93}, /* 904 ']' */ { 0x28000000, 7, 58}, /* 905 ':' */ { 0x2a000000, 7, 44}, /* 906 ',' */ { 0xae000000, 7, 116}, /* 907 't' */ { 0x2c000000, 8, 112}, /* 908 'p' */ { 0x2d000000, 8, 45}, /* 909 '-' */ { 0x2f000000, 8, 97}, /* 910 'a' */ { 0xac000000, 8, 99}, /* 911 'c' */ { 0xad000000, 8, 50}, /* 912 '2' */ { 0x2e800000, 9, 0}, /* 913 '0x00' */ { 0x2e400000, 10, 59}, /* 914 ';' */ { 0x2e000000, 12, 108}, /* 915 'l' */ { 0x2e100000, 12, 39}, /* 916 '\'' */ { 0x2e200000, 13, 102}, /* 917 'f' */ { 0x2e280000, 13, 68}, /* 918 'D' */ { 0x2e300000, 13, 65}, /* 919 'A' */ { 0x2e380000, 14, 1}, /* 920 '0x01' */ { 0x2e3c0000, 14, 105}, /* 921 'i' */ /* 28 */ { 0x00000000, 3, 53}, /* 922 '5' */ { 0x20000000, 3, 93}, /* 923 ']' */ { 0xe0000000, 3, 57}, /* 924 '9' */ { 0x50000000, 4, 48}, /* 925 '0' */ { 0x60000000, 4, 46}, /* 926 '.' */ { 0x70000000, 4, 45}, /* 927 '-' */ { 0x80000000, 4, 52}, /* 928 '4' */ { 0x90000000, 4, 56}, /* 929 '8' */ { 0xb0000000, 4, 54}, /* 930 '6' */ { 0xc0000000, 4, 32}, /* 931 ' ' */ { 0xd0000000, 4, 55}, /* 932 '7' */ { 0x40000000, 5, 50}, /* 933 '2' */ { 0xa0000000, 5, 51}, /* 934 '3' */ { 0x48000000, 6, 49}, /* 935 '1' */ { 0x4c000000, 6, 47}, /* 936 '/' */ { 0xa8000000, 6, 116}, /* 937 't' */ { 0xae000000, 7, 41}, /* 938 ')' */ { 0xac000000, 8, 58}, /* 939 ':' */ { 0xad000000, 9, 44}, /* 940 ',' */ { 0xad800000, 11, 112}, /* 941 'p' */ { 0xada00000, 11, 59}, /* 942 ';' */ { 0xade00000, 11, 0}, /* 943 '0x00' */ { 0xadc00000, 13, 110}, /* 944 'n' */ { 0xadc80000, 13, 109}, /* 945 'm' */ { 0xadd00000, 13, 97}, /* 946 'a' */ { 0xaddc0000, 14, 101}, /* 947 'e' */ { 0xadd80000, 15, 1}, /* 948 '0x01' */ { 0xadda0000, 15, 107}, /* 949 'k' */ /* 9 */ { 0x80000000, 1, 32}, /* 950 ' ' */ { 0x40000000, 2, 48}, /* 951 '0' */ { 0x20000000, 3, 51}, /* 952 '3' */ { 0x08000000, 5, 49}, /* 953 '1' */ { 0x10000000, 5, 84}, /* 954 'T' */ { 0x18000000, 5, 67}, /* 955 'C' */ { 0x04000000, 6, 52}, /* 956 '4' */ { 0x00000000, 7, 1}, /* 957 '0x01' */ { 0x02000000, 7, 53}, /* 958 '5' */ /* 2 */ { 0x00000000, 1, 1}, /* 959 '0x01' */ { 0x80000000, 1, 32}, /* 960 ' ' */ /* 2 */ { 0x00000000, 1, 1}, /* 961 '0x01' */ { 0x80000000, 1, 1}, /* 962 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 963 '0x01' */ { 0x80000000, 1, 1}, /* 964 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 965 '0x01' */ { 0x80000000, 1, 1}, /* 966 '0x01' */ /* 12 */ { 0x80000000, 1, 32}, /* 967 ' ' */ { 0x40000000, 2, 0}, /* 968 '0x00' */ { 0x00000000, 3, 58}, /* 969 ':' */ { 0x20000000, 5, 33}, /* 970 '!' */ { 0x30000000, 5, 91}, /* 971 '[' */ { 0x38000000, 5, 46}, /* 972 '.' */ { 0x28000000, 6, 59}, /* 973 ';' */ { 0x2c000000, 7, 39}, /* 974 '\'' */ { 0x2f000000, 8, 44}, /* 975 ',' */ { 0x2e800000, 9, 47}, /* 976 '/' */ { 0x2e000000, 10, 1}, /* 977 '0x01' */ { 0x2e400000, 10, 81}, /* 978 'Q' */ /* 6 */ { 0x00000000, 1, 107}, /* 979 'k' */ { 0x80000000, 2, 32}, /* 980 ' ' */ { 0xe0000000, 3, 84}, /* 981 'T' */ { 0xd0000000, 4, 98}, /* 982 'b' */ { 0xc0000000, 5, 1}, /* 983 '0x01' */ { 0xc8000000, 5, 72}, /* 984 'H' */ /* 58 */ { 0x40000000, 2, 32}, /* 985 ' ' */ { 0xc0000000, 3, 68}, /* 986 'D' */ { 0xe0000000, 3, 110}, /* 987 'n' */ { 0x00000000, 4, 115}, /* 988 's' */ { 0x10000000, 4, 109}, /* 989 'm' */ { 0x20000000, 4, 100}, /* 990 'd' */ { 0x80000000, 4, 114}, /* 991 'r' */ { 0xb0000000, 4, 108}, /* 992 'l' */ { 0x30000000, 5, 99}, /* 993 'c' */ { 0x90000000, 5, 117}, /* 994 'u' */ { 0xa0000000, 5, 103}, /* 995 'g' */ { 0x3c000000, 6, 98}, /* 996 'b' */ { 0x9c000000, 6, 116}, /* 997 't' */ { 0xac000000, 6, 102}, /* 998 'f' */ { 0xa8000000, 7, 119}, /* 999 'w' */ { 0xaa000000, 7, 105}, /* 1000 'i' */ { 0x99000000, 8, 118}, /* 1001 'v' */ { 0x9b000000, 8, 112}, /* 1002 'p' */ { 0x39000000, 9, 104}, /* 1003 'h' */ { 0x3a000000, 9, 46}, /* 1004 '.' */ { 0x3b800000, 9, 66}, /* 1005 'B' */ { 0x9a000000, 9, 113}, /* 1006 'q' */ { 0x38000000, 10, 67}, /* 1007 'C' */ { 0x38800000, 10, 44}, /* 1008 ',' */ { 0x39800000, 10, 121}, /* 1009 'y' */ { 0x3a800000, 10, 83}, /* 1010 'S' */ { 0x3b000000, 10, 107}, /* 1011 'k' */ { 0x3b400000, 10, 84}, /* 1012 'T' */ { 0x98400000, 10, 82}, /* 1013 'R' */ { 0x98800000, 10, 70}, /* 1014 'F' */ { 0x98c00000, 10, 122}, /* 1015 'z' */ { 0x9ac00000, 10, 97}, /* 1016 'a' */ { 0x38400000, 11, 80}, /* 1017 'P' */ { 0x38c00000, 11, 45}, /* 1018 '-' */ { 0x3ac00000, 11, 65}, /* 1019 'A' */ { 0x3ae00000, 11, 73}, /* 1020 'I' */ { 0x98200000, 11, 101}, /* 1021 'e' */ { 0x9a800000, 11, 78}, /* 1022 'N' */ { 0x9aa00000, 11, 120}, /* 1023 'x' */ { 0x38600000, 12, 88}, /* 1024 'X' */ { 0x38700000, 12, 75}, /* 1025 'K' */ { 0x38e00000, 12, 51}, /* 1026 '3' */ { 0x38f00000, 12, 38}, /* 1027 '&' */ { 0x39d00000, 12, 77}, /* 1028 'M' */ { 0x39f00000, 12, 89}, /* 1029 'Y' */ { 0x39c00000, 13, 76}, /* 1030 'L' */ { 0x39c80000, 13, 87}, /* 1031 'W' */ { 0x39e00000, 13, 42}, /* 1032 '*' */ { 0x98000000, 13, 111}, /* 1033 'o' */ { 0x98080000, 13, 49}, /* 1034 '1' */ { 0x98100000, 13, 39}, /* 1035 '\'' */ { 0x98180000, 13, 58}, /* 1036 ':' */ { 0x39e80000, 14, 106}, /* 1037 'j' */ { 0x39ec0000, 15, 71}, /* 1038 'G' */ { 0x39ee0000, 16, 79}, /* 1039 'O' */ { 0x39ef0000, 17, 52}, /* 1040 '4' */ { 0x39ef8000, 18, 1}, /* 1041 '0x01' */ { 0x39efc000, 18, 69}, /* 1042 'E' */ /* 40 */ { 0x00000000, 2, 67}, /* 1043 'C' */ { 0x40000000, 3, 97}, /* 1044 'a' */ { 0xa0000000, 3, 114}, /* 1045 'r' */ { 0xc0000000, 3, 101}, /* 1046 'e' */ { 0xe0000000, 3, 66}, /* 1047 'B' */ { 0x70000000, 4, 105}, /* 1048 'i' */ { 0x80000000, 4, 117}, /* 1049 'u' */ { 0x90000000, 4, 111}, /* 1050 'o' */ { 0x68000000, 5, 108}, /* 1051 'l' */ { 0x60000000, 8, 84}, /* 1052 'T' */ { 0x61000000, 8, 46}, /* 1053 '.' */ { 0x63000000, 8, 121}, /* 1054 'y' */ { 0x64000000, 8, 73}, /* 1055 'I' */ { 0x66000000, 8, 104}, /* 1056 'h' */ { 0x67000000, 8, 32}, /* 1057 ' ' */ { 0x62000000, 9, 65}, /* 1058 'A' */ { 0x62800000, 10, 79}, /* 1059 'O' */ { 0x62c00000, 11, 58}, /* 1060 ':' */ { 0x65000000, 11, 38}, /* 1061 '&' */ { 0x65200000, 11, 51}, /* 1062 '3' */ { 0x65400000, 11, 106}, /* 1063 'j' */ { 0x65600000, 11, 77}, /* 1064 'M' */ { 0x65c00000, 11, 68}, /* 1065 'D' */ { 0x62f00000, 12, 87}, /* 1066 'W' */ { 0x65800000, 12, 42}, /* 1067 '*' */ { 0x65a00000, 12, 44}, /* 1068 ',' */ { 0x65b00000, 12, 49}, /* 1069 '1' */ { 0x65e00000, 12, 1}, /* 1070 '0x01' */ { 0x65f00000, 12, 80}, /* 1071 'P' */ { 0x62e00000, 13, 69}, /* 1072 'E' */ { 0x65980000, 13, 82}, /* 1073 'R' */ { 0x62ec0000, 14, 119}, /* 1074 'w' */ { 0x62e80000, 15, 45}, /* 1075 '-' */ { 0x65920000, 15, 85}, /* 1076 'U' */ { 0x65940000, 15, 83}, /* 1077 'S' */ { 0x65960000, 15, 70}, /* 1078 'F' */ { 0x62ea0000, 16, 88}, /* 1079 'X' */ { 0x62eb0000, 16, 86}, /* 1080 'V' */ { 0x65900000, 16, 81}, /* 1081 'Q' */ { 0x65910000, 16, 52}, /* 1082 '4' */ /* 47 */ { 0x00000000, 2, 104}, /* 1083 'h' */ { 0x60000000, 3, 66}, /* 1084 'B' */ { 0x80000000, 3, 97}, /* 1085 'a' */ { 0xc0000000, 3, 111}, /* 1086 'o' */ { 0x50000000, 4, 114}, /* 1087 'r' */ { 0xa0000000, 4, 46}, /* 1088 '.' */ { 0xe0000000, 4, 32}, /* 1089 ' ' */ { 0xf0000000, 4, 108}, /* 1090 'l' */ { 0x40000000, 5, 39}, /* 1091 '\'' */ { 0xb8000000, 5, 105}, /* 1092 'i' */ { 0x4c000000, 6, 101}, /* 1093 'e' */ { 0xb4000000, 6, 117}, /* 1094 'u' */ { 0x4a000000, 7, 121}, /* 1095 'y' */ { 0xb2000000, 7, 44}, /* 1096 ',' */ { 0x49000000, 8, 73}, /* 1097 'I' */ { 0x48000000, 9, 65}, /* 1098 'A' */ { 0xb0000000, 10, 67}, /* 1099 'C' */ { 0xb0400000, 10, 68}, /* 1100 'D' */ { 0xb0c00000, 10, 0}, /* 1101 '0x00' */ { 0xb1000000, 10, 83}, /* 1102 'S' */ { 0xb1400000, 10, 84}, /* 1103 'T' */ { 0xb1c00000, 10, 71}, /* 1104 'G' */ { 0x48800000, 11, 42}, /* 1105 '*' */ { 0x48e00000, 11, 119}, /* 1106 'w' */ { 0xb1a00000, 11, 74}, /* 1107 'J' */ { 0x48a00000, 12, 82}, /* 1108 'R' */ { 0x48c00000, 12, 50}, /* 1109 '2' */ { 0x48d00000, 12, 85}, /* 1110 'U' */ { 0xb0800000, 12, 63}, /* 1111 '?' */ { 0xb0a00000, 12, 79}, /* 1112 'O' */ { 0xb0b00000, 12, 72}, /* 1113 'H' */ { 0xb1800000, 12, 69}, /* 1114 'E' */ { 0x48b00000, 13, 122}, /* 1115 'z' */ { 0xb0980000, 13, 45}, /* 1116 '-' */ { 0xb1980000, 13, 115}, /* 1117 's' */ { 0x48bc0000, 14, 49}, /* 1118 '1' */ { 0xb0940000, 14, 33}, /* 1119 '!' */ { 0xb1900000, 14, 80}, /* 1120 'P' */ { 0x48ba0000, 15, 110}, /* 1121 'n' */ { 0xb0900000, 15, 75}, /* 1122 'K' */ { 0xb0920000, 15, 55}, /* 1123 '7' */ { 0xb1960000, 15, 52}, /* 1124 '4' */ { 0x48b80000, 16, 58}, /* 1125 ':' */ { 0xb1940000, 16, 70}, /* 1126 'F' */ { 0xb1950000, 16, 41}, /* 1127 ')' */ { 0x48b90000, 17, 1}, /* 1128 '0x01' */ { 0x48b98000, 17, 98}, /* 1129 'b' */ /* 47 */ { 0x00000000, 2, 97}, /* 1130 'a' */ { 0x40000000, 2, 44}, /* 1131 ',' */ { 0x80000000, 3, 114}, /* 1132 'r' */ { 0xa0000000, 3, 111}, /* 1133 'o' */ { 0xc0000000, 3, 101}, /* 1134 'e' */ { 0xe0000000, 4, 105}, /* 1135 'i' */ { 0xfc000000, 6, 117}, /* 1136 'u' */ { 0xf2000000, 7, 32}, /* 1137 ' ' */ { 0xf6000000, 7, 39}, /* 1138 '\'' */ { 0xf0000000, 8, 46}, /* 1139 '.' */ { 0xf1000000, 8, 93}, /* 1140 ']' */ { 0xfa000000, 8, 121}, /* 1141 'y' */ { 0xf5000000, 9, 119}, /* 1142 'w' */ { 0xf5800000, 9, 87}, /* 1143 'W' */ { 0xf8800000, 9, 78}, /* 1144 'N' */ { 0xf9000000, 9, 67}, /* 1145 'C' */ { 0xfb800000, 9, 74}, /* 1146 'J' */ { 0xf4800000, 10, 104}, /* 1147 'h' */ { 0xf8000000, 10, 116}, /* 1148 't' */ { 0xf9c00000, 10, 73}, /* 1149 'I' */ { 0xfb400000, 10, 58}, /* 1150 ':' */ { 0xf4200000, 11, 77}, /* 1151 'M' */ { 0xf4400000, 11, 38}, /* 1152 '&' */ { 0xf4600000, 11, 86}, /* 1153 'V' */ { 0xf8400000, 11, 45}, /* 1154 '-' */ { 0xf8600000, 11, 71}, /* 1155 'G' */ { 0xf9800000, 11, 79}, /* 1156 'O' */ { 0xf9a00000, 11, 65}, /* 1157 'A' */ { 0xfb200000, 11, 83}, /* 1158 'S' */ { 0xf4000000, 12, 70}, /* 1159 'F' */ { 0xf4c00000, 12, 42}, /* 1160 '*' */ { 0xf4d00000, 12, 115}, /* 1161 's' */ { 0xf4f00000, 12, 100}, /* 1162 'd' */ { 0xfb000000, 12, 118}, /* 1163 'v' */ { 0xf4e00000, 13, 109}, /* 1164 'm' */ { 0xf4e80000, 13, 106}, /* 1165 'j' */ { 0xfb100000, 13, 1}, /* 1166 '0x01' */ { 0xfb180000, 13, 84}, /* 1167 'T' */ { 0xf4180000, 14, 57}, /* 1168 '9' */ { 0xf4100000, 15, 41}, /* 1169 ')' */ { 0xf4160000, 15, 69}, /* 1170 'E' */ { 0xf41c0000, 15, 56}, /* 1171 '8' */ { 0xf41e0000, 15, 55}, /* 1172 '7' */ { 0xf4120000, 16, 85}, /* 1173 'U' */ { 0xf4130000, 16, 82}, /* 1174 'R' */ { 0xf4140000, 16, 66}, /* 1175 'B' */ { 0xf4150000, 16, 52}, /* 1176 '4' */ /* 54 */ { 0x00000000, 3, 112}, /* 1177 'p' */ { 0x40000000, 3, 97}, /* 1178 'a' */ { 0x60000000, 3, 110}, /* 1179 'n' */ { 0xc0000000, 3, 108}, /* 1180 'l' */ { 0x90000000, 4, 109}, /* 1181 'm' */ { 0xa0000000, 4, 120}, /* 1182 'x' */ { 0xe0000000, 4, 118}, /* 1183 'v' */ { 0xf0000000, 4, 100}, /* 1184 'd' */ { 0x20000000, 5, 115}, /* 1185 's' */ { 0x30000000, 5, 114}, /* 1186 'r' */ { 0x38000000, 5, 117}, /* 1187 'u' */ { 0x80000000, 5, 69}, /* 1188 'E' */ { 0x88000000, 5, 32}, /* 1189 ' ' */ { 0x28000000, 6, 46}, /* 1190 '.' */ { 0x2c000000, 6, 105}, /* 1191 'i' */ { 0xb4000000, 6, 58}, /* 1192 ':' */ { 0xb0000000, 7, 121}, /* 1193 'y' */ { 0xb2000000, 7, 116}, /* 1194 't' */ { 0xb8000000, 7, 103}, /* 1195 'g' */ { 0xbc000000, 7, 52}, /* 1196 '4' */ { 0xbb000000, 9, 119}, /* 1197 'w' */ { 0xbe000000, 9, 99}, /* 1198 'c' */ { 0xbf000000, 9, 98}, /* 1199 'b' */ { 0xba800000, 10, 82}, /* 1200 'R' */ { 0xbac00000, 10, 70}, /* 1201 'F' */ { 0xbbc00000, 10, 67}, /* 1202 'C' */ { 0xba200000, 11, 107}, /* 1203 'k' */ { 0xba400000, 11, 102}, /* 1204 'f' */ { 0xba600000, 11, 111}, /* 1205 'o' */ { 0xbb800000, 11, 85}, /* 1206 'U' */ { 0xbba00000, 11, 76}, /* 1207 'L' */ { 0xbea00000, 11, 101}, /* 1208 'e' */ { 0xbec00000, 11, 78}, /* 1209 'N' */ { 0xbf800000, 11, 104}, /* 1210 'h' */ { 0xbfa00000, 11, 73}, /* 1211 'I' */ { 0xbfe00000, 11, 68}, /* 1212 'D' */ { 0xbe800000, 12, 77}, /* 1213 'M' */ { 0xbef00000, 12, 39}, /* 1214 '\'' */ { 0xbfc00000, 12, 50}, /* 1215 '2' */ { 0xbfd00000, 12, 45}, /* 1216 '-' */ { 0xba180000, 13, 113}, /* 1217 'q' */ { 0xbe900000, 13, 79}, /* 1218 'O' */ { 0xbe980000, 13, 65}, /* 1219 'A' */ { 0xbee80000, 13, 90}, /* 1220 'Z' */ { 0xba000000, 14, 87}, /* 1221 'W' */ { 0xba040000, 14, 83}, /* 1222 'S' */ { 0xba080000, 14, 72}, /* 1223 'H' */ { 0xba0c0000, 14, 57}, /* 1224 '9' */ { 0xba100000, 14, 41}, /* 1225 ')' */ { 0xbee00000, 14, 84}, /* 1226 'T' */ { 0xbee40000, 14, 44}, /* 1227 ',' */ { 0xba140000, 15, 80}, /* 1228 'P' */ { 0xba160000, 16, 1}, /* 1229 '0x01' */ { 0xba170000, 16, 122}, /* 1230 'z' */ /* 36 */ { 0x00000000, 2, 111}, /* 1231 'o' */ { 0x80000000, 2, 114}, /* 1232 'r' */ { 0x40000000, 3, 101}, /* 1233 'e' */ { 0xc0000000, 3, 105}, /* 1234 'i' */ { 0xe0000000, 3, 97}, /* 1235 'a' */ { 0x60000000, 4, 108}, /* 1236 'l' */ { 0x70000000, 5, 117}, /* 1237 'u' */ { 0x78000000, 7, 32}, /* 1238 ' ' */ { 0x7a000000, 7, 79}, /* 1239 'O' */ { 0x7d000000, 8, 65}, /* 1240 'A' */ { 0x7f000000, 8, 66}, /* 1241 'B' */ { 0x7e000000, 9, 102}, /* 1242 'f' */ { 0x7c000000, 10, 46}, /* 1243 '.' */ { 0x7cc00000, 10, 76}, /* 1244 'L' */ { 0x7c400000, 11, 77}, /* 1245 'M' */ { 0x7c600000, 11, 69}, /* 1246 'E' */ { 0x7ca00000, 11, 84}, /* 1247 'T' */ { 0x7ea00000, 11, 67}, /* 1248 'C' */ { 0x7ec00000, 11, 87}, /* 1249 'W' */ { 0x7c800000, 12, 58}, /* 1250 ':' */ { 0x7e800000, 12, 85}, /* 1251 'U' */ { 0x7e900000, 12, 39}, /* 1252 '\'' */ { 0x7ef00000, 12, 49}, /* 1253 '1' */ { 0x7c900000, 13, 121}, /* 1254 'y' */ { 0x7c980000, 13, 44}, /* 1255 ',' */ { 0x7ee00000, 14, 45}, /* 1256 '-' */ { 0x7ee80000, 14, 73}, /* 1257 'I' */ { 0x7ee60000, 15, 104}, /* 1258 'h' */ { 0x7ee40000, 16, 42}, /* 1259 '*' */ { 0x7ee50000, 16, 75}, /* 1260 'K' */ { 0x7eec0000, 16, 70}, /* 1261 'F' */ { 0x7eed0000, 16, 1}, /* 1262 '0x01' */ { 0x7eee0000, 17, 88}, /* 1263 'X' */ { 0x7eee8000, 17, 82}, /* 1264 'R' */ { 0x7eef0000, 17, 59}, /* 1265 ';' */ { 0x7eef8000, 17, 52}, /* 1266 '4' */ /* 37 */ { 0x00000000, 2, 114}, /* 1267 'r' */ { 0x40000000, 2, 97}, /* 1268 'a' */ { 0xa0000000, 3, 111}, /* 1269 'o' */ { 0xc0000000, 3, 101}, /* 1270 'e' */ { 0x90000000, 4, 117}, /* 1271 'u' */ { 0xf0000000, 4, 105}, /* 1272 'i' */ { 0x88000000, 5, 110}, /* 1273 'n' */ { 0xe8000000, 5, 108}, /* 1274 'l' */ { 0x80000000, 6, 88}, /* 1275 'X' */ { 0xe0000000, 7, 121}, /* 1276 'y' */ { 0xe2000000, 7, 32}, /* 1277 ' ' */ { 0xe6000000, 7, 119}, /* 1278 'w' */ { 0x85000000, 8, 52}, /* 1279 '4' */ { 0x87000000, 8, 80}, /* 1280 'P' */ { 0xe5000000, 8, 104}, /* 1281 'h' */ { 0x84000000, 9, 45}, /* 1282 '-' */ { 0x86000000, 9, 67}, /* 1283 'C' */ { 0xe4800000, 9, 77}, /* 1284 'M' */ { 0x86800000, 10, 66}, /* 1285 'B' */ { 0xe4000000, 10, 46}, /* 1286 '.' */ { 0xe4400000, 10, 73}, /* 1287 'I' */ { 0x84800000, 11, 59}, /* 1288 ';' */ { 0x84a00000, 11, 44}, /* 1289 ',' */ { 0x84c00000, 11, 65}, /* 1290 'A' */ { 0x84e00000, 11, 78}, /* 1291 'N' */ { 0x86e00000, 11, 58}, /* 1292 ':' */ { 0x86c00000, 13, 79}, /* 1293 'O' */ { 0x86c80000, 13, 76}, /* 1294 'L' */ { 0x86d80000, 14, 98}, /* 1295 'b' */ { 0x86d00000, 15, 75}, /* 1296 'K' */ { 0x86d20000, 15, 50}, /* 1297 '2' */ { 0x86d40000, 15, 49}, /* 1298 '1' */ { 0x86d60000, 15, 39}, /* 1299 '\'' */ { 0x86dc0000, 16, 1}, /* 1300 '0x01' */ { 0x86dd0000, 16, 109}, /* 1301 'm' */ { 0x86de0000, 16, 84}, /* 1302 'T' */ { 0x86df0000, 16, 83}, /* 1303 'S' */ /* 32 */ { 0x00000000, 2, 101}, /* 1304 'e' */ { 0x40000000, 2, 97}, /* 1305 'a' */ { 0x80000000, 2, 111}, /* 1306 'o' */ { 0xc0000000, 3, 105}, /* 1307 'i' */ { 0xf0000000, 4, 117}, /* 1308 'u' */ { 0xe0000000, 5, 82}, /* 1309 'R' */ { 0xe8000000, 7, 80}, /* 1310 'P' */ { 0xec000000, 7, 121}, /* 1311 'y' */ { 0xeb000000, 8, 73}, /* 1312 'I' */ { 0xee000000, 9, 81}, /* 1313 'Q' */ { 0xee800000, 9, 77}, /* 1314 'M' */ { 0xef000000, 9, 65}, /* 1315 'A' */ { 0xef800000, 9, 32}, /* 1316 ' ' */ { 0xea000000, 10, 83}, /* 1317 'S' */ { 0xea400000, 10, 46}, /* 1318 '.' */ { 0xeaa00000, 11, 71}, /* 1319 'G' */ { 0xeac00000, 11, 41}, /* 1320 ')' */ { 0xea900000, 12, 69}, /* 1321 'E' */ { 0xeae00000, 13, 79}, /* 1322 'O' */ { 0xeae80000, 13, 76}, /* 1323 'L' */ { 0xea800000, 14, 49}, /* 1324 '1' */ { 0xea840000, 14, 38}, /* 1325 '&' */ { 0xeaf00000, 14, 72}, /* 1326 'H' */ { 0xeaf40000, 14, 119}, /* 1327 'w' */ { 0xeaf80000, 14, 118}, /* 1328 'v' */ { 0xea880000, 15, 88}, /* 1329 'X' */ { 0xea8a0000, 15, 87}, /* 1330 'W' */ { 0xea8c0000, 15, 68}, /* 1331 'D' */ { 0xeafc0000, 15, 115}, /* 1332 's' */ { 0xeafe0000, 15, 70}, /* 1333 'F' */ { 0xea8e0000, 16, 1}, /* 1334 '0x01' */ { 0xea8f0000, 16, 114}, /* 1335 'r' */ /* 52 */ { 0x00000000, 1, 110}, /* 1336 'n' */ { 0xc0000000, 3, 116}, /* 1337 't' */ { 0x90000000, 4, 115}, /* 1338 's' */ { 0xf0000000, 4, 114}, /* 1339 'r' */ { 0x80000000, 5, 84}, /* 1340 'T' */ { 0xa8000000, 5, 97}, /* 1341 'a' */ { 0xe0000000, 5, 32}, /* 1342 ' ' */ { 0x88000000, 6, 99}, /* 1343 'c' */ { 0xa4000000, 6, 109}, /* 1344 'm' */ { 0xb0000000, 6, 122}, /* 1345 'z' */ { 0xb4000000, 6, 46}, /* 1346 '.' */ { 0xbc000000, 6, 100}, /* 1347 'd' */ { 0xec000000, 6, 73}, /* 1348 'I' */ { 0x8e000000, 7, 39}, /* 1349 '\'' */ { 0xba000000, 7, 108}, /* 1350 'l' */ { 0xa0000000, 8, 65}, /* 1351 'A' */ { 0xa1000000, 8, 118}, /* 1352 'v' */ { 0xb9000000, 8, 86}, /* 1353 'V' */ { 0xe9000000, 8, 102}, /* 1354 'f' */ { 0xeb000000, 8, 111}, /* 1355 'o' */ { 0x8c800000, 9, 67}, /* 1356 'C' */ { 0x8d000000, 9, 80}, /* 1357 'P' */ { 0xa2000000, 9, 119}, /* 1358 'w' */ { 0xa3000000, 9, 58}, /* 1359 ':' */ { 0xb8000000, 9, 112}, /* 1360 'p' */ { 0xe8000000, 9, 82}, /* 1361 'R' */ { 0xe8800000, 9, 44}, /* 1362 ',' */ { 0xea800000, 9, 89}, /* 1363 'Y' */ { 0x8c000000, 10, 69}, /* 1364 'E' */ { 0x8c400000, 10, 54}, /* 1365 '6' */ { 0x8dc00000, 10, 113}, /* 1366 'q' */ { 0xa2c00000, 10, 121}, /* 1367 'y' */ { 0xa3800000, 10, 77}, /* 1368 'M' */ { 0xea000000, 10, 103}, /* 1369 'g' */ { 0xea400000, 10, 68}, /* 1370 'D' */ { 0x8d800000, 11, 101}, /* 1371 'e' */ { 0x8da00000, 11, 53}, /* 1372 '5' */ { 0xa2800000, 11, 83}, /* 1373 'S' */ { 0xa2a00000, 11, 57}, /* 1374 '9' */ { 0xa3e00000, 11, 70}, /* 1375 'F' */ { 0xb8800000, 11, 98}, /* 1376 'b' */ { 0xb8c00000, 11, 45}, /* 1377 '-' */ { 0xb8e00000, 11, 76}, /* 1378 'L' */ { 0xa3c00000, 12, 66}, /* 1379 'B' */ { 0xa3d00000, 12, 41}, /* 1380 ')' */ { 0xb8a00000, 13, 78}, /* 1381 'N' */ { 0xb8a80000, 13, 81}, /* 1382 'Q' */ { 0xb8b00000, 13, 107}, /* 1383 'k' */ { 0xb8bc0000, 14, 79}, /* 1384 'O' */ { 0xb8ba0000, 15, 63}, /* 1385 '?' */ { 0xb8b80000, 16, 1}, /* 1386 '0x01' */ { 0xb8b90000, 16, 104}, /* 1387 'h' */ /* 29 */ { 0x00000000, 2, 101}, /* 1388 'e' */ { 0x80000000, 2, 97}, /* 1389 'a' */ { 0xc0000000, 2, 111}, /* 1390 'o' */ { 0x60000000, 3, 117}, /* 1391 'u' */ { 0x50000000, 4, 105}, /* 1392 'i' */ { 0x40000000, 5, 32}, /* 1393 ' ' */ { 0x4c000000, 7, 68}, /* 1394 'D' */ { 0x4e000000, 7, 46}, /* 1395 '.' */ { 0x49000000, 8, 114}, /* 1396 'r' */ { 0x4b000000, 9, 115}, /* 1397 's' */ { 0x48000000, 10, 77}, /* 1398 'M' */ { 0x48800000, 10, 74}, /* 1399 'J' */ { 0x48c00000, 10, 44}, /* 1400 ',' */ { 0x4a000000, 10, 66}, /* 1401 'B' */ { 0x4a400000, 10, 45}, /* 1402 '-' */ { 0x4a800000, 10, 86}, /* 1403 'V' */ { 0x4b800000, 10, 75}, /* 1404 'K' */ { 0x4bc00000, 10, 84}, /* 1405 'T' */ { 0x48400000, 11, 67}, /* 1406 'C' */ { 0x4ac00000, 11, 110}, /* 1407 'n' */ { 0x48600000, 12, 33}, /* 1408 '!' */ { 0x48700000, 13, 119}, /* 1409 'w' */ { 0x48780000, 13, 82}, /* 1410 'R' */ { 0x4ae00000, 13, 70}, /* 1411 'F' */ { 0x4af00000, 13, 55}, /* 1412 '7' */ { 0x4af80000, 13, 39}, /* 1413 '\'' */ { 0x4ae80000, 14, 71}, /* 1414 'G' */ { 0x4aec0000, 15, 1}, /* 1415 '0x01' */ { 0x4aee0000, 15, 76}, /* 1416 'L' */ /* 40 */ { 0x00000000, 2, 105}, /* 1417 'i' */ { 0x40000000, 2, 97}, /* 1418 'a' */ { 0x80000000, 2, 101}, /* 1419 'e' */ { 0xf0000000, 4, 121}, /* 1420 'y' */ { 0xc0000000, 5, 110}, /* 1421 'n' */ { 0xc8000000, 5, 111}, /* 1422 'o' */ { 0xd8000000, 5, 114}, /* 1423 'r' */ { 0xe8000000, 5, 32}, /* 1424 ' ' */ { 0xd0000000, 6, 39}, /* 1425 '\'' */ { 0xe0000000, 6, 117}, /* 1426 'u' */ { 0xd6000000, 7, 46}, /* 1427 '.' */ { 0xe6000000, 7, 108}, /* 1428 'l' */ { 0xe5000000, 8, 104}, /* 1429 'h' */ { 0xd4000000, 9, 84}, /* 1430 'T' */ { 0xd5800000, 9, 71}, /* 1431 'G' */ { 0xe4800000, 9, 44}, /* 1432 ',' */ { 0xd5000000, 10, 119}, /* 1433 'w' */ { 0xd4800000, 11, 53}, /* 1434 '5' */ { 0xd4a00000, 11, 52}, /* 1435 '4' */ { 0xd4c00000, 11, 65}, /* 1436 'A' */ { 0xd5400000, 11, 51}, /* 1437 '3' */ { 0xe4000000, 11, 50}, /* 1438 '2' */ { 0xe4600000, 11, 77}, /* 1439 'M' */ { 0xd4e00000, 12, 45}, /* 1440 '-' */ { 0xd5600000, 12, 58}, /* 1441 ':' */ { 0xd5700000, 12, 33}, /* 1442 '!' */ { 0xe4200000, 12, 41}, /* 1443 ')' */ { 0xe4500000, 12, 83}, /* 1444 'S' */ { 0xd4f00000, 13, 86}, /* 1445 'V' */ { 0xe4300000, 13, 54}, /* 1446 '6' */ { 0xe4380000, 13, 49}, /* 1447 '1' */ { 0xd4fc0000, 14, 76}, /* 1448 'L' */ { 0xe4400000, 14, 73}, /* 1449 'I' */ { 0xe4440000, 14, 63}, /* 1450 '?' */ { 0xd4f80000, 15, 1}, /* 1451 '0x01' */ { 0xd4fa0000, 15, 118}, /* 1452 'v' */ { 0xe4480000, 15, 107}, /* 1453 'k' */ { 0xe44a0000, 15, 89}, /* 1454 'Y' */ { 0xe44c0000, 15, 78}, /* 1455 'N' */ { 0xe44e0000, 15, 69}, /* 1456 'E' */ /* 36 */ { 0x00000000, 2, 105}, /* 1457 'i' */ { 0x80000000, 2, 111}, /* 1458 'o' */ { 0x60000000, 3, 93}, /* 1459 ']' */ { 0xc0000000, 3, 101}, /* 1460 'e' */ { 0xe0000000, 3, 97}, /* 1461 'a' */ { 0x40000000, 4, 117}, /* 1462 'u' */ { 0x50000000, 6, 108}, /* 1463 'l' */ { 0x54000000, 6, 65}, /* 1464 'A' */ { 0x5c000000, 6, 121}, /* 1465 'y' */ { 0x5b000000, 8, 32}, /* 1466 ' ' */ { 0x58000000, 9, 73}, /* 1467 'I' */ { 0x58800000, 9, 82}, /* 1468 'R' */ { 0x5a800000, 9, 44}, /* 1469 ',' */ { 0x59000000, 10, 79}, /* 1470 'O' */ { 0x59400000, 10, 39}, /* 1471 '\'' */ { 0x59a00000, 11, 46}, /* 1472 '.' */ { 0x59c00000, 11, 67}, /* 1473 'C' */ { 0x59e00000, 11, 89}, /* 1474 'Y' */ { 0x5a200000, 11, 70}, /* 1475 'F' */ { 0x5a400000, 11, 76}, /* 1476 'L' */ { 0x59900000, 12, 116}, /* 1477 't' */ { 0x5a100000, 12, 71}, /* 1478 'G' */ { 0x5a700000, 12, 83}, /* 1479 'S' */ { 0x59880000, 13, 104}, /* 1480 'h' */ { 0x5a080000, 13, 87}, /* 1481 'W' */ { 0x5a600000, 13, 74}, /* 1482 'J' */ { 0x59800000, 14, 69}, /* 1483 'E' */ { 0x5a040000, 14, 34}, /* 1484 '\"' */ { 0x5a6c0000, 14, 0}, /* 1485 '0x00' */ { 0x59840000, 15, 84}, /* 1486 'T' */ { 0x59860000, 15, 80}, /* 1487 'P' */ { 0x5a000000, 15, 68}, /* 1488 'D' */ { 0x5a020000, 15, 55}, /* 1489 '7' */ { 0x5a6a0000, 15, 106}, /* 1490 'j' */ { 0x5a680000, 16, 1}, /* 1491 '0x01' */ { 0x5a690000, 16, 85}, /* 1492 'U' */ /* 47 */ { 0x00000000, 2, 111}, /* 1493 'o' */ { 0xc0000000, 2, 97}, /* 1494 'a' */ { 0x60000000, 3, 101}, /* 1495 'e' */ { 0xa0000000, 3, 105}, /* 1496 'i' */ { 0x50000000, 4, 99}, /* 1497 'c' */ { 0x90000000, 4, 117}, /* 1498 'u' */ { 0x48000000, 5, 121}, /* 1499 'y' */ { 0x88000000, 5, 114}, /* 1500 'r' */ { 0x80000000, 6, 83}, /* 1501 'S' */ { 0x84000000, 6, 80}, /* 1502 'P' */ { 0x42000000, 7, 32}, /* 1503 ' ' */ { 0x41000000, 8, 67}, /* 1504 'C' */ { 0x46000000, 8, 70}, /* 1505 'F' */ { 0x40000000, 9, 49}, /* 1506 '1' */ { 0x44000000, 9, 104}, /* 1507 'h' */ { 0x45000000, 9, 73}, /* 1508 'I' */ { 0x47000000, 9, 84}, /* 1509 'T' */ { 0x47800000, 9, 88}, /* 1510 'X' */ { 0x40800000, 10, 65}, /* 1511 'A' */ { 0x44800000, 10, 122}, /* 1512 'z' */ { 0x44c00000, 11, 102}, /* 1513 'f' */ { 0x45c00000, 11, 46}, /* 1514 '.' */ { 0x40c00000, 12, 90}, /* 1515 'Z' */ { 0x40d00000, 12, 75}, /* 1516 'K' */ { 0x40e00000, 12, 66}, /* 1517 'B' */ { 0x44f00000, 12, 115}, /* 1518 's' */ { 0x45800000, 12, 82}, /* 1519 'R' */ { 0x45900000, 12, 87}, /* 1520 'W' */ { 0x45a00000, 12, 79}, /* 1521 'O' */ { 0x40f00000, 13, 44}, /* 1522 ',' */ { 0x40f80000, 13, 39}, /* 1523 '\'' */ { 0x45b80000, 13, 68}, /* 1524 'D' */ { 0x45e00000, 13, 52}, /* 1525 '4' */ { 0x45f00000, 13, 69}, /* 1526 'E' */ { 0x44e00000, 14, 109}, /* 1527 'm' */ { 0x44e40000, 14, 74}, /* 1528 'J' */ { 0x44e80000, 14, 1}, /* 1529 '0x01' */ { 0x45e80000, 14, 108}, /* 1530 'l' */ { 0x45ec0000, 14, 45}, /* 1531 '-' */ { 0x45f80000, 14, 41}, /* 1532 ')' */ { 0x45fc0000, 14, 119}, /* 1533 'w' */ { 0x44ec0000, 15, 116}, /* 1534 't' */ { 0x44ee0000, 15, 86}, /* 1535 'V' */ { 0x45b00000, 15, 81}, /* 1536 'Q' */ { 0x45b20000, 15, 78}, /* 1537 'N' */ { 0x45b40000, 15, 54}, /* 1538 '6' */ { 0x45b60000, 15, 50}, /* 1539 '2' */ /* 35 */ { 0x00000000, 2, 97}, /* 1540 'a' */ { 0x80000000, 2, 111}, /* 1541 'o' */ { 0xc0000000, 2, 101}, /* 1542 'e' */ { 0x60000000, 3, 105}, /* 1543 'i' */ { 0x50000000, 5, 117}, /* 1544 'u' */ { 0x58000000, 5, 69}, /* 1545 'E' */ { 0x48000000, 6, 65}, /* 1546 'A' */ { 0x44000000, 7, 121}, /* 1547 'y' */ { 0x4c000000, 7, 103}, /* 1548 'g' */ { 0x41000000, 8, 66}, /* 1549 'B' */ { 0x42000000, 8, 73}, /* 1550 'I' */ { 0x46000000, 8, 70}, /* 1551 'F' */ { 0x47000000, 8, 32}, /* 1552 ' ' */ { 0x40000000, 9, 41}, /* 1553 ')' */ { 0x40800000, 9, 39}, /* 1554 '\'' */ { 0x43800000, 9, 89}, /* 1555 'Y' */ { 0x4e000000, 9, 76}, /* 1556 'L' */ { 0x4e800000, 9, 72}, /* 1557 'H' */ { 0x43000000, 10, 67}, /* 1558 'C' */ { 0x4f000000, 10, 87}, /* 1559 'W' */ { 0x4f800000, 10, 78}, /* 1560 'N' */ { 0x4fc00000, 10, 84}, /* 1561 'T' */ { 0x43500000, 12, 77}, /* 1562 'M' */ { 0x43700000, 12, 79}, /* 1563 'O' */ { 0x4f400000, 12, 44}, /* 1564 ',' */ { 0x4f500000, 12, 74}, /* 1565 'J' */ { 0x4f700000, 12, 104}, /* 1566 'h' */ { 0x43400000, 13, 68}, /* 1567 'D' */ { 0x43480000, 13, 46}, /* 1568 '.' */ { 0x4f600000, 13, 88}, /* 1569 'X' */ { 0x4f680000, 13, 1}, /* 1570 '0x01' */ { 0x43600000, 14, 107}, /* 1571 'k' */ { 0x43640000, 14, 90}, /* 1572 'Z' */ { 0x43680000, 14, 81}, /* 1573 'Q' */ { 0x436c0000, 14, 71}, /* 1574 'G' */ /* 59 */ { 0xe0000000, 3, 110}, /* 1575 'n' */ { 0x00000000, 4, 115}, /* 1576 's' */ { 0x10000000, 4, 78}, /* 1577 'N' */ { 0x30000000, 4, 122}, /* 1578 'z' */ { 0x40000000, 4, 114}, /* 1579 'r' */ { 0x80000000, 4, 117}, /* 1580 'u' */ { 0xa0000000, 4, 112}, /* 1581 'p' */ { 0xb0000000, 4, 108}, /* 1582 'l' */ { 0xd0000000, 4, 39}, /* 1583 '\'' */ { 0x28000000, 5, 85}, /* 1584 'U' */ { 0x58000000, 5, 104}, /* 1585 'h' */ { 0x70000000, 5, 102}, /* 1586 'f' */ { 0x78000000, 5, 119}, /* 1587 'w' */ { 0x90000000, 5, 46}, /* 1588 '.' */ { 0xc0000000, 5, 32}, /* 1589 ' ' */ { 0x20000000, 6, 111}, /* 1590 'o' */ { 0x24000000, 6, 74}, /* 1591 'J' */ { 0x50000000, 6, 98}, /* 1592 'b' */ { 0x54000000, 6, 109}, /* 1593 'm' */ { 0x64000000, 6, 72}, /* 1594 'H' */ { 0x68000000, 6, 79}, /* 1595 'O' */ { 0x6c000000, 6, 118}, /* 1596 'v' */ { 0x9c000000, 6, 99}, /* 1597 'c' */ { 0xcc000000, 6, 120}, /* 1598 'x' */ { 0x9a000000, 7, 100}, /* 1599 'd' */ { 0xc8000000, 7, 97}, /* 1600 'a' */ { 0x61000000, 8, 116}, /* 1601 't' */ { 0x62000000, 8, 107}, /* 1602 'k' */ { 0x98000000, 8, 103}, /* 1603 'g' */ { 0xca000000, 8, 82}, /* 1604 'R' */ { 0x60000000, 9, 75}, /* 1605 'K' */ { 0x99000000, 9, 105}, /* 1606 'i' */ { 0xcb800000, 9, 86}, /* 1607 'V' */ { 0x60c00000, 10, 50}, /* 1608 '2' */ { 0x63400000, 10, 83}, /* 1609 'S' */ { 0x63800000, 10, 66}, /* 1610 'B' */ { 0x99800000, 10, 87}, /* 1611 'W' */ { 0x99c00000, 10, 45}, /* 1612 '-' */ { 0x60800000, 11, 44}, /* 1613 ',' */ { 0x63000000, 11, 106}, /* 1614 'j' */ { 0x63200000, 11, 76}, /* 1615 'L' */ { 0x63e00000, 11, 73}, /* 1616 'I' */ { 0xcb200000, 11, 65}, /* 1617 'A' */ { 0xcb600000, 11, 67}, /* 1618 'C' */ { 0x60a00000, 12, 58}, /* 1619 ':' */ { 0x63c00000, 12, 101}, /* 1620 'e' */ { 0xcb000000, 12, 121}, /* 1621 'y' */ { 0xcb100000, 12, 47}, /* 1622 '/' */ { 0xcb400000, 12, 77}, /* 1623 'M' */ { 0x60b00000, 13, 33}, /* 1624 '!' */ { 0x63d80000, 13, 80}, /* 1625 'P' */ { 0xcb580000, 13, 70}, /* 1626 'F' */ { 0x60b80000, 14, 69}, /* 1627 'E' */ { 0x60bc0000, 14, 68}, /* 1628 'D' */ { 0x63d00000, 14, 56}, /* 1629 '8' */ { 0x63d40000, 14, 52}, /* 1630 '4' */ { 0xcb540000, 14, 84}, /* 1631 'T' */ { 0xcb500000, 15, 1}, /* 1632 '0x01' */ { 0xcb520000, 15, 113}, /* 1633 'q' */ /* 39 */ { 0xc0000000, 2, 97}, /* 1634 'a' */ { 0x00000000, 3, 105}, /* 1635 'i' */ { 0x40000000, 3, 101}, /* 1636 'e' */ { 0x60000000, 3, 108}, /* 1637 'l' */ { 0x80000000, 3, 111}, /* 1638 'o' */ { 0xa0000000, 3, 114}, /* 1639 'r' */ { 0x20000000, 4, 104}, /* 1640 'h' */ { 0x3c000000, 6, 117}, /* 1641 'u' */ { 0x34000000, 7, 67}, /* 1642 'C' */ { 0x38000000, 7, 46}, /* 1643 '.' */ { 0x3a000000, 7, 32}, /* 1644 ' ' */ { 0x30000000, 8, 66}, /* 1645 'B' */ { 0x32000000, 8, 68}, /* 1646 'D' */ { 0x37000000, 8, 115}, /* 1647 's' */ { 0x31800000, 9, 79}, /* 1648 'O' */ { 0x33800000, 9, 44}, /* 1649 ',' */ { 0x31400000, 10, 121}, /* 1650 'y' */ { 0x33000000, 10, 77}, /* 1651 'M' */ { 0x36000000, 10, 69}, /* 1652 'E' */ { 0x36400000, 10, 39}, /* 1653 '\'' */ { 0x36c00000, 10, 51}, /* 1654 '3' */ { 0x31200000, 11, 84}, /* 1655 'T' */ { 0x31000000, 12, 76}, /* 1656 'L' */ { 0x31100000, 12, 71}, /* 1657 'G' */ { 0x33400000, 12, 42}, /* 1658 '*' */ { 0x33600000, 12, 65}, /* 1659 'A' */ { 0x33700000, 12, 83}, /* 1660 'S' */ { 0x36800000, 12, 119}, /* 1661 'w' */ { 0x36900000, 12, 70}, /* 1662 'F' */ { 0x33580000, 13, 74}, /* 1663 'J' */ { 0x36a00000, 13, 102}, /* 1664 'f' */ { 0x36a80000, 13, 82}, /* 1665 'R' */ { 0x36b80000, 13, 116}, /* 1666 't' */ { 0x33500000, 14, 86}, /* 1667 'V' */ { 0x36b00000, 14, 89}, /* 1668 'Y' */ { 0x36b40000, 14, 73}, /* 1669 'I' */ { 0x33560000, 15, 38}, /* 1670 '&' */ { 0x33540000, 16, 1}, /* 1671 '0x01' */ { 0x33550000, 16, 41}, /* 1672 ')' */ /* 13 */ { 0x80000000, 1, 117}, /* 1673 'u' */ { 0x00000000, 2, 86}, /* 1674 'V' */ { 0x60000000, 3, 32}, /* 1675 ' ' */ { 0x50000000, 4, 46}, /* 1676 '.' */ { 0x40000000, 5, 97}, /* 1677 'a' */ { 0x48000000, 7, 119}, /* 1678 'w' */ { 0x4c000000, 7, 69}, /* 1679 'E' */ { 0x4e000000, 7, 67}, /* 1680 'C' */ { 0x4b000000, 8, 38}, /* 1681 '&' */ { 0x4a800000, 9, 39}, /* 1682 '\'' */ { 0x4a000000, 10, 84}, /* 1683 'T' */ { 0x4a400000, 11, 1}, /* 1684 '0x01' */ { 0x4a600000, 11, 115}, /* 1685 's' */ /* 37 */ { 0x40000000, 2, 97}, /* 1686 'a' */ { 0xc0000000, 2, 111}, /* 1687 'o' */ { 0x80000000, 3, 105}, /* 1688 'i' */ { 0xa0000000, 3, 101}, /* 1689 'e' */ { 0x00000000, 4, 112}, /* 1690 'p' */ { 0x30000000, 4, 117}, /* 1691 'u' */ { 0x18000000, 5, 69}, /* 1692 'E' */ { 0x20000000, 5, 104}, /* 1693 'h' */ { 0x10000000, 6, 32}, /* 1694 ' ' */ { 0x28000000, 6, 121}, /* 1695 'y' */ { 0x14000000, 8, 68}, /* 1696 'D' */ { 0x16000000, 8, 46}, /* 1697 '.' */ { 0x2c000000, 8, 84}, /* 1698 'T' */ { 0x2e000000, 8, 83}, /* 1699 'S' */ { 0x15000000, 9, 70}, /* 1700 'F' */ { 0x2d000000, 9, 66}, /* 1701 'B' */ { 0x2d800000, 9, 110}, /* 1702 'n' */ { 0x2f800000, 9, 65}, /* 1703 'A' */ { 0x15800000, 10, 119}, /* 1704 'w' */ { 0x17000000, 10, 78}, /* 1705 'N' */ { 0x17400000, 10, 38}, /* 1706 '&' */ { 0x17800000, 10, 86}, /* 1707 'V' */ { 0x17c00000, 10, 72}, /* 1708 'H' */ { 0x2f400000, 10, 39}, /* 1709 '\'' */ { 0x15c00000, 11, 116}, /* 1710 't' */ { 0x15e00000, 11, 73}, /* 1711 'I' */ { 0x2f000000, 12, 67}, /* 1712 'C' */ { 0x2f200000, 12, 79}, /* 1713 'O' */ { 0x2f100000, 14, 44}, /* 1714 ',' */ { 0x2f140000, 14, 115}, /* 1715 's' */ { 0x2f180000, 14, 85}, /* 1716 'U' */ { 0x2f1c0000, 14, 77}, /* 1717 'M' */ { 0x2f300000, 14, 45}, /* 1718 '-' */ { 0x2f340000, 14, 1}, /* 1719 '0x01' */ { 0x2f3c0000, 14, 58}, /* 1720 ':' */ { 0x2f380000, 15, 50}, /* 1721 '2' */ { 0x2f3a0000, 15, 82}, /* 1722 'R' */ /* 59 */ { 0x80000000, 1, 93}, /* 1723 ']' */ { 0x00000000, 4, 97}, /* 1724 'a' */ { 0x20000000, 4, 104}, /* 1725 'h' */ { 0x70000000, 4, 116}, /* 1726 't' */ { 0x10000000, 5, 112}, /* 1727 'p' */ { 0x18000000, 5, 44}, /* 1728 ',' */ { 0x30000000, 5, 76}, /* 1729 'L' */ { 0x40000000, 5, 105}, /* 1730 'i' */ { 0x48000000, 5, 117}, /* 1731 'u' */ { 0x50000000, 5, 111}, /* 1732 'o' */ { 0x58000000, 5, 99}, /* 1733 'c' */ { 0x60000000, 5, 101}, /* 1734 'e' */ { 0x3c000000, 6, 107}, /* 1735 'k' */ { 0x38000000, 7, 119}, /* 1736 'w' */ { 0x6a000000, 7, 32}, /* 1737 ' ' */ { 0x6e000000, 7, 109}, /* 1738 'm' */ { 0x3a000000, 8, 113}, /* 1739 'q' */ { 0x68000000, 8, 77}, /* 1740 'M' */ { 0x69000000, 8, 110}, /* 1741 'n' */ { 0x6c000000, 8, 108}, /* 1742 'l' */ { 0x3b000000, 9, 80}, /* 1743 'P' */ { 0x6d800000, 9, 121}, /* 1744 'y' */ { 0x3b800000, 10, 65}, /* 1745 'A' */ { 0x6d200000, 11, 46}, /* 1746 '.' */ { 0x3bd00000, 12, 114}, /* 1747 'r' */ { 0x3be00000, 12, 83}, /* 1748 'S' */ { 0x3bf00000, 12, 87}, /* 1749 'W' */ { 0x6d000000, 12, 67}, /* 1750 'C' */ { 0x6d500000, 12, 69}, /* 1751 'E' */ { 0x6d600000, 12, 118}, /* 1752 'v' */ { 0x6d180000, 13, 1}, /* 1753 '0x01' */ { 0x6d400000, 13, 73}, /* 1754 'I' */ { 0x6d780000, 13, 103}, /* 1755 'g' */ { 0x3bc00000, 14, 42}, /* 1756 '*' */ { 0x3bc80000, 14, 52}, /* 1757 '4' */ { 0x3bcc0000, 14, 49}, /* 1758 '1' */ { 0x6d100000, 14, 79}, /* 1759 'O' */ { 0x6d480000, 14, 0}, /* 1760 '0x00' */ { 0x6d700000, 14, 122}, /* 1761 'z' */ { 0x6d160000, 15, 66}, /* 1762 'B' */ { 0x6d740000, 15, 72}, /* 1763 'H' */ { 0x6d760000, 15, 84}, /* 1764 'T' */ { 0x3bc40000, 16, 71}, /* 1765 'G' */ { 0x3bc60000, 16, 125}, /* 1766 '}' */ { 0x3bc70000, 16, 68}, /* 1767 'D' */ { 0x6d140000, 16, 45}, /* 1768 '-' */ { 0x6d4c0000, 16, 51}, /* 1769 '3' */ { 0x6d4d0000, 16, 50}, /* 1770 '2' */ { 0x3bc50000, 17, 39}, /* 1771 '\'' */ { 0x3bc58000, 17, 63}, /* 1772 '?' */ { 0x6d4e8000, 17, 115}, /* 1773 's' */ { 0x6d4f0000, 17, 106}, /* 1774 'j' */ { 0x6d4f8000, 17, 98}, /* 1775 'b' */ { 0x6d150000, 18, 82}, /* 1776 'R' */ { 0x6d154000, 18, 75}, /* 1777 'K' */ { 0x6d158000, 18, 74}, /* 1778 'J' */ { 0x6d15c000, 18, 70}, /* 1779 'F' */ { 0x6d4e0000, 18, 58}, /* 1780 ':' */ { 0x6d4e4000, 18, 41}, /* 1781 ')' */ /* 44 */ { 0x00000000, 1, 104}, /* 1782 'h' */ { 0x80000000, 3, 111}, /* 1783 'o' */ { 0xa0000000, 4, 86}, /* 1784 'V' */ { 0xb0000000, 4, 119}, /* 1785 'w' */ { 0xc0000000, 4, 114}, /* 1786 'r' */ { 0xf0000000, 4, 101}, /* 1787 'e' */ { 0xd0000000, 5, 97}, /* 1788 'a' */ { 0xd8000000, 5, 105}, /* 1789 'i' */ { 0xe0000000, 5, 117}, /* 1790 'u' */ { 0xe8000000, 7, 72}, /* 1791 'H' */ { 0xec000000, 7, 87}, /* 1792 'W' */ { 0xea000000, 8, 32}, /* 1793 ' ' */ { 0xeb000000, 8, 121}, /* 1794 'y' */ { 0xee800000, 9, 77}, /* 1795 'M' */ { 0xef800000, 9, 120}, /* 1796 'x' */ { 0xee000000, 10, 83}, /* 1797 'S' */ { 0xee400000, 11, 65}, /* 1798 'A' */ { 0xef200000, 11, 115}, /* 1799 's' */ { 0xef600000, 11, 74}, /* 1800 'J' */ { 0xee700000, 12, 88}, /* 1801 'X' */ { 0xef000000, 12, 46}, /* 1802 '.' */ { 0xee680000, 13, 45}, /* 1803 '-' */ { 0xef180000, 13, 76}, /* 1804 'L' */ { 0xef400000, 13, 67}, /* 1805 'C' */ { 0xef580000, 13, 99}, /* 1806 'c' */ { 0xee600000, 14, 84}, /* 1807 'T' */ { 0xee640000, 14, 85}, /* 1808 'U' */ { 0xef140000, 14, 52}, /* 1809 '4' */ { 0xef480000, 14, 79}, /* 1810 'O' */ { 0xef120000, 15, 71}, /* 1811 'G' */ { 0xef4c0000, 15, 69}, /* 1812 'E' */ { 0xef4e0000, 15, 44}, /* 1813 ',' */ { 0xef540000, 15, 39}, /* 1814 '\'' */ { 0xef110000, 16, 59}, /* 1815 ';' */ { 0xef500000, 16, 80}, /* 1816 'P' */ { 0xef510000, 16, 49}, /* 1817 '1' */ { 0xef520000, 16, 1}, /* 1818 '0x01' */ { 0xef570000, 16, 68}, /* 1819 'D' */ { 0xef100000, 17, 58}, /* 1820 ':' */ { 0xef108000, 17, 42}, /* 1821 '*' */ { 0xef530000, 17, 82}, /* 1822 'R' */ { 0xef538000, 17, 78}, /* 1823 'N' */ { 0xef560000, 17, 73}, /* 1824 'I' */ { 0xef568000, 17, 66}, /* 1825 'B' */ /* 45 */ { 0x00000000, 2, 75}, /* 1826 'K' */ { 0x80000000, 2, 110}, /* 1827 'n' */ { 0x60000000, 3, 83}, /* 1828 'S' */ { 0xc0000000, 3, 112}, /* 1829 'p' */ { 0xf0000000, 4, 108}, /* 1830 'l' */ { 0x50000000, 5, 115}, /* 1831 's' */ { 0x58000000, 5, 114}, /* 1832 'r' */ { 0xe8000000, 5, 82}, /* 1833 'R' */ { 0x40000000, 6, 103}, /* 1834 'g' */ { 0xe0000000, 6, 32}, /* 1835 ' ' */ { 0x4e000000, 7, 46}, /* 1836 '.' */ { 0xe4000000, 7, 109}, /* 1837 'm' */ { 0x44000000, 8, 107}, /* 1838 'k' */ { 0x45000000, 8, 116}, /* 1839 't' */ { 0x46000000, 8, 69}, /* 1840 'E' */ { 0x47000000, 8, 45}, /* 1841 '-' */ { 0x48000000, 8, 70}, /* 1842 'F' */ { 0x4c000000, 8, 50}, /* 1843 '2' */ { 0xe6000000, 8, 99}, /* 1844 'c' */ { 0xe7000000, 8, 78}, /* 1845 'N' */ { 0x49000000, 9, 102}, /* 1846 'f' */ { 0x49800000, 9, 56}, /* 1847 '8' */ { 0x4a000000, 9, 44}, /* 1848 ',' */ { 0x4b800000, 9, 90}, /* 1849 'Z' */ { 0x4a800000, 10, 104}, /* 1850 'h' */ { 0x4d000000, 10, 105}, /* 1851 'i' */ { 0x4d400000, 10, 119}, /* 1852 'w' */ { 0x4d800000, 10, 97}, /* 1853 'a' */ { 0x4ac00000, 11, 98}, /* 1854 'b' */ { 0x4ae00000, 11, 68}, /* 1855 'D' */ { 0x4dc00000, 11, 33}, /* 1856 '!' */ { 0x4b000000, 12, 101}, /* 1857 'e' */ { 0x4b100000, 12, 86}, /* 1858 'V' */ { 0x4b200000, 12, 80}, /* 1859 'P' */ { 0x4b300000, 12, 73}, /* 1860 'I' */ { 0x4b400000, 12, 66}, /* 1861 'B' */ { 0x4b500000, 12, 65}, /* 1862 'A' */ { 0x4df00000, 12, 100}, /* 1863 'd' */ { 0x4b600000, 13, 72}, /* 1864 'H' */ { 0x4b680000, 13, 67}, /* 1865 'C' */ { 0x4b700000, 13, 58}, /* 1866 ':' */ { 0x4b780000, 13, 41}, /* 1867 ')' */ { 0x4de80000, 13, 122}, /* 1868 'z' */ { 0x4de00000, 14, 1}, /* 1869 '0x01' */ { 0x4de40000, 14, 84}, /* 1870 'T' */ /* 38 */ { 0x40000000, 2, 32}, /* 1871 ' ' */ { 0xc0000000, 2, 105}, /* 1872 'i' */ { 0x00000000, 3, 46}, /* 1873 '.' */ { 0x20000000, 3, 97}, /* 1874 'a' */ { 0xa0000000, 3, 101}, /* 1875 'e' */ { 0x88000000, 5, 67}, /* 1876 'C' */ { 0x98000000, 5, 111}, /* 1877 'o' */ { 0x82000000, 7, 70}, /* 1878 'F' */ { 0x86000000, 7, 73}, /* 1879 'I' */ { 0x81000000, 8, 49}, /* 1880 '1' */ { 0x85000000, 8, 52}, /* 1881 '4' */ { 0x90000000, 8, 114}, /* 1882 'r' */ { 0x92000000, 8, 69}, /* 1883 'E' */ { 0x93000000, 8, 115}, /* 1884 's' */ { 0x95000000, 8, 39}, /* 1885 '\'' */ { 0x96000000, 8, 58}, /* 1886 ':' */ { 0x97000000, 8, 108}, /* 1887 'l' */ { 0x80800000, 9, 47}, /* 1888 '/' */ { 0x84800000, 9, 45}, /* 1889 '-' */ { 0x91000000, 9, 68}, /* 1890 'D' */ { 0x91800000, 9, 117}, /* 1891 'u' */ { 0x94800000, 9, 44}, /* 1892 ',' */ { 0x80000000, 10, 54}, /* 1893 '6' */ { 0x80400000, 10, 50}, /* 1894 '2' */ { 0x84000000, 10, 53}, /* 1895 '5' */ { 0x94000000, 10, 59}, /* 1896 ';' */ { 0x94400000, 11, 1}, /* 1897 '0x01' */ { 0x84400000, 12, 55}, /* 1898 '7' */ { 0x94600000, 12, 51}, /* 1899 '3' */ { 0x84500000, 13, 57}, /* 1900 '9' */ { 0x84580000, 13, 121}, /* 1901 'y' */ { 0x84600000, 13, 80}, /* 1902 'P' */ { 0x84680000, 13, 72}, /* 1903 'H' */ { 0x84700000, 13, 65}, /* 1904 'A' */ { 0x84780000, 13, 56}, /* 1905 '8' */ { 0x94780000, 13, 87}, /* 1906 'W' */ { 0x94700000, 14, 102}, /* 1907 'f' */ { 0x94740000, 14, 66}, /* 1908 'B' */ /* 30 */ { 0x00000000, 2, 104}, /* 1909 'h' */ { 0x80000000, 2, 105}, /* 1910 'i' */ { 0x60000000, 3, 97}, /* 1911 'a' */ { 0xc0000000, 3, 111}, /* 1912 'o' */ { 0xe0000000, 3, 101}, /* 1913 'e' */ { 0x40000000, 4, 114}, /* 1914 'r' */ { 0x58000000, 5, 79}, /* 1915 'O' */ { 0x52000000, 7, 32}, /* 1916 ' ' */ { 0x54000000, 7, 121}, /* 1917 'y' */ { 0x50000000, 9, 66}, /* 1918 'B' */ { 0x50800000, 9, 46}, /* 1919 '.' */ { 0x56000000, 9, 73}, /* 1920 'I' */ { 0x57000000, 9, 87}, /* 1921 'W' */ { 0x57800000, 9, 65}, /* 1922 'A' */ { 0x51000000, 10, 39}, /* 1923 '\'' */ { 0x51400000, 10, 77}, /* 1924 'M' */ { 0x51c00000, 10, 84}, /* 1925 'T' */ { 0x51800000, 11, 50}, /* 1926 '2' */ { 0x51a00000, 11, 58}, /* 1927 ':' */ { 0x56800000, 11, 72}, /* 1928 'H' */ { 0x56c00000, 11, 86}, /* 1929 'V' */ { 0x56a00000, 12, 108}, /* 1930 'l' */ { 0x56e00000, 12, 115}, /* 1931 's' */ { 0x56f00000, 12, 44}, /* 1932 ',' */ { 0x56b80000, 13, 117}, /* 1933 'u' */ { 0x56b00000, 15, 53}, /* 1934 '5' */ { 0x56b20000, 15, 41}, /* 1935 ')' */ { 0x56b60000, 15, 69}, /* 1936 'E' */ { 0x56b40000, 16, 1}, /* 1937 '0x01' */ { 0x56b50000, 16, 109}, /* 1938 'm' */ /* 24 */ { 0x80000000, 1, 32}, /* 1939 ' ' */ { 0x00000000, 3, 97}, /* 1940 'a' */ { 0x20000000, 4, 122}, /* 1941 'z' */ { 0x30000000, 4, 109}, /* 1942 'm' */ { 0x70000000, 4, 116}, /* 1943 't' */ { 0x48000000, 5, 85}, /* 1944 'U' */ { 0x50000000, 5, 45}, /* 1945 '-' */ { 0x58000000, 5, 101}, /* 1946 'e' */ { 0x60000000, 6, 117}, /* 1947 'u' */ { 0x64000000, 6, 73}, /* 1948 'I' */ { 0x6c000000, 6, 44}, /* 1949 ',' */ { 0x44000000, 7, 86}, /* 1950 'V' */ { 0x68000000, 7, 53}, /* 1951 '5' */ { 0x6a000000, 7, 46}, /* 1952 '.' */ { 0x40000000, 8, 83}, /* 1953 'S' */ { 0x42000000, 8, 58}, /* 1954 ':' */ { 0x46000000, 8, 99}, /* 1955 'c' */ { 0x47000000, 8, 105}, /* 1956 'i' */ { 0x41000000, 9, 57}, /* 1957 '9' */ { 0x41800000, 9, 39}, /* 1958 '\'' */ { 0x43800000, 9, 88}, /* 1959 'X' */ { 0x43000000, 10, 41}, /* 1960 ')' */ { 0x43400000, 11, 1}, /* 1961 '0x01' */ { 0x43600000, 11, 121}, /* 1962 'y' */ /* 24 */ { 0x80000000, 1, 111}, /* 1963 'o' */ { 0x00000000, 2, 101}, /* 1964 'e' */ { 0x40000000, 3, 117}, /* 1965 'u' */ { 0x60000000, 5, 97}, /* 1966 'a' */ { 0x70000000, 5, 118}, /* 1967 'v' */ { 0x78000000, 5, 32}, /* 1968 ' ' */ { 0x68000000, 7, 110}, /* 1969 'n' */ { 0x6a000000, 8, 114}, /* 1970 'r' */ { 0x6d000000, 8, 79}, /* 1971 'O' */ { 0x6f000000, 8, 105}, /* 1972 'i' */ { 0x6b800000, 9, 78}, /* 1973 'N' */ { 0x6c000000, 9, 76}, /* 1974 'L' */ { 0x6c800000, 9, 115}, /* 1975 's' */ { 0x6e800000, 9, 109}, /* 1976 'm' */ { 0x6b000000, 10, 46}, /* 1977 '.' */ { 0x6b400000, 10, 77}, /* 1978 'M' */ { 0x6e400000, 10, 80}, /* 1979 'P' */ { 0x6e100000, 12, 82}, /* 1980 'R' */ { 0x6e200000, 12, 50}, /* 1981 '2' */ { 0x6e000000, 13, 45}, /* 1982 '-' */ { 0x6e300000, 13, 67}, /* 1983 'C' */ { 0x6e380000, 13, 44}, /* 1984 ',' */ { 0x6e080000, 14, 1}, /* 1985 '0x01' */ { 0x6e0c0000, 14, 100}, /* 1986 'd' */ /* 18 */ { 0x40000000, 2, 97}, /* 1987 'a' */ { 0x80000000, 2, 101}, /* 1988 'e' */ { 0xc0000000, 2, 111}, /* 1989 'o' */ { 0x20000000, 4, 122}, /* 1990 'z' */ { 0x30000000, 4, 105}, /* 1991 'i' */ { 0x08000000, 5, 90}, /* 1992 'Z' */ { 0x10000000, 5, 32}, /* 1993 ' ' */ { 0x18000000, 5, 117}, /* 1994 'u' */ { 0x04000000, 7, 79}, /* 1995 'O' */ { 0x06000000, 7, 46}, /* 1996 '.' */ { 0x00000000, 8, 121}, /* 1997 'y' */ { 0x01000000, 8, 52}, /* 1998 '4' */ { 0x02000000, 8, 44}, /* 1999 ',' */ { 0x03000000, 10, 102}, /* 2000 'f' */ { 0x03400000, 10, 45}, /* 2001 '-' */ { 0x03800000, 10, 0}, /* 2002 '0x00' */ { 0x03c00000, 11, 1}, /* 2003 '0x01' */ { 0x03e00000, 11, 108}, /* 2004 'l' */ /* 34 */ { 0x80000000, 1, 83}, /* 2005 'S' */ { 0x40000000, 2, 65}, /* 2006 'A' */ { 0x00000000, 4, 50}, /* 2007 '2' */ { 0x20000000, 4, 82}, /* 2008 'R' */ { 0x30000000, 4, 49}, /* 2009 '1' */ { 0x14000000, 6, 110}, /* 2010 'n' */ { 0x18000000, 6, 109}, /* 2011 'm' */ { 0x1e000000, 7, 108}, /* 2012 'l' */ { 0x13000000, 8, 114}, /* 2013 'r' */ { 0x1d000000, 8, 98}, /* 2014 'b' */ { 0x10800000, 9, 67}, /* 2015 'C' */ { 0x11000000, 9, 102}, /* 2016 'f' */ { 0x12800000, 9, 77}, /* 2017 'M' */ { 0x1c800000, 9, 99}, /* 2018 'c' */ { 0x10400000, 10, 0}, /* 2019 '0x00' */ { 0x11c00000, 10, 75}, /* 2020 'K' */ { 0x12000000, 10, 72}, /* 2021 'H' */ { 0x1c400000, 10, 84}, /* 2022 'T' */ { 0x10000000, 11, 74}, /* 2023 'J' */ { 0x10200000, 11, 66}, /* 2024 'B' */ { 0x11a00000, 11, 90}, /* 2025 'Z' */ { 0x12600000, 11, 80}, /* 2026 'P' */ { 0x1c000000, 11, 76}, /* 2027 'L' */ { 0x11800000, 12, 70}, /* 2028 'F' */ { 0x12500000, 12, 73}, /* 2029 'I' */ { 0x1c300000, 12, 78}, /* 2030 'N' */ { 0x11900000, 13, 115}, /* 2031 's' */ { 0x11980000, 13, 86}, /* 2032 'V' */ { 0x12400000, 13, 85}, /* 2033 'U' */ { 0x12480000, 13, 71}, /* 2034 'G' */ { 0x1c280000, 13, 68}, /* 2035 'D' */ { 0x1c200000, 14, 79}, /* 2036 'O' */ { 0x1c240000, 15, 1}, /* 2037 '0x01' */ { 0x1c260000, 15, 87}, /* 2038 'W' */ /* 2 */ { 0x00000000, 1, 1}, /* 2039 '0x01' */ { 0x80000000, 1, 120}, /* 2040 'x' */ /* 9 */ { 0x80000000, 1, 0}, /* 2041 '0x00' */ { 0x40000000, 2, 32}, /* 2042 ' ' */ { 0x20000000, 3, 46}, /* 2043 '.' */ { 0x10000000, 4, 91}, /* 2044 '[' */ { 0x08000000, 5, 58}, /* 2045 ':' */ { 0x04000000, 6, 44}, /* 2046 ',' */ { 0x02000000, 7, 59}, /* 2047 ';' */ { 0x00000000, 8, 1}, /* 2048 '0x01' */ { 0x01000000, 8, 93}, /* 2049 ']' */ /* 2 */ { 0x00000000, 1, 1}, /* 2050 '0x01' */ { 0x80000000, 1, 1}, /* 2051 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 2052 '0x01' */ { 0x80000000, 1, 1}, /* 2053 '0x01' */ /* 31 */ { 0x20000000, 3, 119}, /* 2054 'w' */ { 0x60000000, 3, 72}, /* 2055 'H' */ { 0xc0000000, 3, 80}, /* 2056 'P' */ { 0xe0000000, 3, 70}, /* 2057 'F' */ { 0x50000000, 4, 110}, /* 2058 'n' */ { 0xb0000000, 4, 68}, /* 2059 'D' */ { 0x08000000, 5, 115}, /* 2060 's' */ { 0x10000000, 5, 65}, /* 2061 'A' */ { 0x48000000, 5, 116}, /* 2062 't' */ { 0x80000000, 5, 103}, /* 2063 'g' */ { 0x98000000, 5, 99}, /* 2064 'c' */ { 0x00000000, 6, 87}, /* 2065 'W' */ { 0x04000000, 6, 114}, /* 2066 'r' */ { 0x18000000, 6, 101}, /* 2067 'e' */ { 0x1c000000, 6, 67}, /* 2068 'C' */ { 0x8c000000, 6, 108}, /* 2069 'l' */ { 0x90000000, 6, 104}, /* 2070 'h' */ { 0x94000000, 6, 71}, /* 2071 'G' */ { 0xa4000000, 6, 66}, /* 2072 'B' */ { 0xa8000000, 6, 84}, /* 2073 'T' */ { 0xac000000, 6, 83}, /* 2074 'S' */ { 0x40000000, 7, 111}, /* 2075 'o' */ { 0x42000000, 7, 100}, /* 2076 'd' */ { 0x44000000, 7, 98}, /* 2077 'b' */ { 0x46000000, 7, 82}, /* 2078 'R' */ { 0x88000000, 7, 79}, /* 2079 'O' */ { 0x8a000000, 7, 76}, /* 2080 'L' */ { 0xa2000000, 7, 102}, /* 2081 'f' */ { 0xa0000000, 8, 74}, /* 2082 'J' */ { 0xa1000000, 9, 1}, /* 2083 '0x01' */ { 0xa1800000, 9, 77}, /* 2084 'M' */ /* 51 */ { 0x40000000, 2, 110}, /* 2085 'n' */ { 0x20000000, 3, 114}, /* 2086 'r' */ { 0xa0000000, 3, 116}, /* 2087 't' */ { 0x00000000, 4, 109}, /* 2088 'm' */ { 0x90000000, 4, 115}, /* 2089 's' */ { 0xe0000000, 4, 32}, /* 2090 ' ' */ { 0xf0000000, 4, 108}, /* 2091 'l' */ { 0x18000000, 5, 100}, /* 2092 'd' */ { 0x80000000, 5, 105}, /* 2093 'i' */ { 0xc0000000, 5, 121}, /* 2094 'y' */ { 0xd0000000, 5, 99}, /* 2095 'c' */ { 0x10000000, 6, 112}, /* 2096 'p' */ { 0x88000000, 6, 117}, /* 2097 'u' */ { 0x8c000000, 6, 118}, /* 2098 'v' */ { 0xcc000000, 6, 103}, /* 2099 'g' */ { 0xd8000000, 6, 98}, /* 2100 'b' */ { 0xdc000000, 6, 107}, /* 2101 'k' */ { 0x14000000, 7, 119}, /* 2102 'w' */ { 0x17000000, 8, 122}, /* 2103 'z' */ { 0xc8000000, 8, 46}, /* 2104 '.' */ { 0xcb000000, 8, 102}, /* 2105 'f' */ { 0x16000000, 9, 44}, /* 2106 ',' */ { 0x16800000, 9, 39}, /* 2107 '\'' */ { 0xc9800000, 9, 101}, /* 2108 'e' */ { 0xca800000, 9, 104}, /* 2109 'h' */ { 0xca400000, 10, 120}, /* 2110 'x' */ { 0xc9000000, 11, 97}, /* 2111 'a' */ { 0xc9200000, 11, 45}, /* 2112 '-' */ { 0xc9600000, 11, 106}, /* 2113 'j' */ { 0xca000000, 11, 58}, /* 2114 ':' */ { 0xca200000, 11, 111}, /* 2115 'o' */ { 0xc9400000, 12, 113}, /* 2116 'q' */ { 0xc9500000, 14, 33}, /* 2117 '!' */ { 0xc95c0000, 14, 63}, /* 2118 '?' */ { 0xc9540000, 16, 1}, /* 2119 '0x01' */ { 0xc9560000, 16, 59}, /* 2120 ';' */ { 0xc9570000, 16, 41}, /* 2121 ')' */ { 0xc9590000, 16, 47}, /* 2122 '/' */ { 0xc95b0000, 16, 64}, /* 2123 '@' */ { 0xc9550000, 17, 74}, /* 2124 'J' */ { 0xc9558000, 17, 93}, /* 2125 ']' */ { 0xc95a0000, 17, 78}, /* 2126 'N' */ { 0xc95a8000, 17, 76}, /* 2127 'L' */ { 0xc9580000, 18, 82}, /* 2128 'R' */ { 0xc9584000, 18, 83}, /* 2129 'S' */ { 0xc9588000, 18, 86}, /* 2130 'V' */ { 0xc958c000, 20, 91}, /* 2131 '[' */ { 0xc958e000, 20, 80}, /* 2132 'P' */ { 0xc958f000, 20, 0}, /* 2133 '0x00' */ { 0xc958d000, 21, 87}, /* 2134 'W' */ { 0xc958d800, 21, 49}, /* 2135 '1' */ /* 39 */ { 0x00000000, 2, 101}, /* 2136 'e' */ { 0x40000000, 3, 117}, /* 2137 'u' */ { 0x60000000, 3, 97}, /* 2138 'a' */ { 0x80000000, 3, 121}, /* 2139 'y' */ { 0xa0000000, 3, 111}, /* 2140 'o' */ { 0xc0000000, 4, 108}, /* 2141 'l' */ { 0xe0000000, 4, 114}, /* 2142 'r' */ { 0xf0000000, 4, 105}, /* 2143 'i' */ { 0xd0000000, 6, 115}, /* 2144 's' */ { 0xd8000000, 6, 32}, /* 2145 ' ' */ { 0xdc000000, 6, 98}, /* 2146 'b' */ { 0xd5000000, 8, 99}, /* 2147 'c' */ { 0xd4000000, 9, 106}, /* 2148 'j' */ { 0xd6000000, 9, 44}, /* 2149 ',' */ { 0xd6800000, 9, 46}, /* 2150 '.' */ { 0xd4c00000, 10, 39}, /* 2151 '\'' */ { 0xd7c00000, 10, 116}, /* 2152 't' */ { 0xd4a00000, 11, 58}, /* 2153 ':' */ { 0xd7000000, 11, 119}, /* 2154 'w' */ { 0xd7200000, 11, 100}, /* 2155 'd' */ { 0xd7400000, 11, 104}, /* 2156 'h' */ { 0xd7600000, 11, 38}, /* 2157 '&' */ { 0xd7a00000, 11, 45}, /* 2158 '-' */ { 0xd7800000, 12, 109}, /* 2159 'm' */ { 0xd7900000, 12, 110}, /* 2160 'n' */ { 0xd4800000, 13, 63}, /* 2161 '?' */ { 0xd4900000, 13, 118}, /* 2162 'v' */ { 0xd4880000, 14, 102}, /* 2163 'f' */ { 0xd49c0000, 14, 112}, /* 2164 'p' */ { 0xd48e0000, 15, 59}, /* 2165 ';' */ { 0xd49a0000, 15, 68}, /* 2166 'D' */ { 0xd48c0000, 16, 47}, /* 2167 '/' */ { 0xd4990000, 16, 64}, /* 2168 '@' */ { 0xd48d0000, 17, 88}, /* 2169 'X' */ { 0xd48d8000, 17, 34}, /* 2170 '\"' */ { 0xd4988000, 17, 107}, /* 2171 'k' */ { 0xd4980000, 18, 0}, /* 2172 '0x00' */ { 0xd4984000, 19, 1}, /* 2173 '0x01' */ { 0xd4986000, 19, 33}, /* 2174 '!' */ /* 57 */ { 0x00000000, 2, 111}, /* 2175 'o' */ { 0x60000000, 3, 97}, /* 2176 'a' */ { 0x80000000, 3, 101}, /* 2177 'e' */ { 0xc0000000, 3, 104}, /* 2178 'h' */ { 0x40000000, 4, 105}, /* 2179 'i' */ { 0x50000000, 4, 108}, /* 2180 'l' */ { 0xb0000000, 4, 107}, /* 2181 'k' */ { 0xf0000000, 4, 116}, /* 2182 't' */ { 0xa0000000, 5, 117}, /* 2183 'u' */ { 0xa8000000, 5, 114}, /* 2184 'r' */ { 0xe0000000, 5, 32}, /* 2185 ' ' */ { 0xe8000000, 7, 121}, /* 2186 'y' */ { 0xea000000, 7, 99}, /* 2187 'c' */ { 0xed000000, 8, 115}, /* 2188 's' */ { 0xee000000, 8, 46}, /* 2189 '.' */ { 0xef800000, 9, 44}, /* 2190 ',' */ { 0xec400000, 10, 71}, /* 2191 'G' */ { 0xec200000, 11, 110}, /* 2192 'n' */ { 0xecc00000, 11, 68}, /* 2193 'D' */ { 0xef000000, 11, 75}, /* 2194 'K' */ { 0xef600000, 11, 67}, /* 2195 'C' */ { 0xec000000, 12, 58}, /* 2196 ':' */ { 0xec900000, 12, 45}, /* 2197 '-' */ { 0xeca00000, 12, 65}, /* 2198 'A' */ { 0xece00000, 12, 76}, /* 2199 'L' */ { 0xecf00000, 12, 39}, /* 2200 '\'' */ { 0xef200000, 12, 100}, /* 2201 'd' */ { 0xef400000, 12, 113}, /* 2202 'q' */ { 0xef500000, 12, 73}, /* 2203 'I' */ { 0xec800000, 13, 78}, /* 2204 'N' */ { 0xec880000, 13, 122}, /* 2205 'z' */ { 0xef380000, 13, 70}, /* 2206 'F' */ { 0xec140000, 14, 119}, /* 2207 'w' */ { 0xec1c0000, 14, 69}, /* 2208 'E' */ { 0xecb00000, 14, 63}, /* 2209 '?' */ { 0xef300000, 14, 77}, /* 2210 'M' */ { 0xef340000, 14, 83}, /* 2211 'S' */ { 0xec100000, 15, 98}, /* 2212 'b' */ { 0xec120000, 15, 1}, /* 2213 '0x01' */ { 0xec180000, 15, 33}, /* 2214 '!' */ { 0xecb40000, 15, 81}, /* 2215 'Q' */ { 0xecb60000, 15, 80}, /* 2216 'P' */ { 0xecb80000, 15, 59}, /* 2217 ';' */ { 0xecbc0000, 15, 66}, /* 2218 'B' */ { 0xec1b0000, 16, 86}, /* 2219 'V' */ { 0xecbb0000, 16, 109}, /* 2220 'm' */ { 0xecbe0000, 16, 47}, /* 2221 '/' */ { 0xec1a8000, 17, 41}, /* 2222 ')' */ { 0xecba0000, 17, 85}, /* 2223 'U' */ { 0xecbf0000, 17, 87}, /* 2224 'W' */ { 0xec1a0000, 18, 112}, /* 2225 'p' */ { 0xec1a4000, 18, 72}, /* 2226 'H' */ { 0xecba8000, 18, 0}, /* 2227 '0x00' */ { 0xecbf8000, 18, 82}, /* 2228 'R' */ { 0xecbfc000, 18, 84}, /* 2229 'T' */ { 0xecbac000, 19, 93}, /* 2230 ']' */ { 0xecbae000, 19, 91}, /* 2231 '[' */ /* 46 */ { 0x00000000, 1, 32}, /* 2232 ' ' */ { 0xa0000000, 3, 101}, /* 2233 'e' */ { 0xc0000000, 4, 97}, /* 2234 'a' */ { 0xe0000000, 4, 105}, /* 2235 'i' */ { 0x88000000, 5, 46}, /* 2236 '.' */ { 0x98000000, 5, 111}, /* 2237 'o' */ { 0xd8000000, 5, 114}, /* 2238 'r' */ { 0xf8000000, 5, 115}, /* 2239 's' */ { 0x84000000, 6, 100}, /* 2240 'd' */ { 0x94000000, 6, 108}, /* 2241 'l' */ { 0xd0000000, 6, 117}, /* 2242 'u' */ { 0xf4000000, 6, 121}, /* 2243 'y' */ { 0x92000000, 7, 45}, /* 2244 '-' */ { 0xd6000000, 7, 118}, /* 2245 'v' */ { 0xf0000000, 7, 103}, /* 2246 'g' */ { 0xf2000000, 7, 44}, /* 2247 ',' */ { 0x80000000, 8, 104}, /* 2248 'h' */ { 0x81000000, 8, 58}, /* 2249 ':' */ { 0x82000000, 8, 109}, /* 2250 'm' */ { 0x90000000, 8, 119}, /* 2251 'w' */ { 0x91000000, 8, 110}, /* 2252 'n' */ { 0xd5000000, 8, 39}, /* 2253 '\'' */ { 0x83800000, 9, 102}, /* 2254 'f' */ { 0xd4400000, 10, 63}, /* 2255 '?' */ { 0xd4800000, 10, 98}, /* 2256 'b' */ { 0xd4c00000, 10, 99}, /* 2257 'c' */ { 0x83000000, 11, 33}, /* 2258 '!' */ { 0xd4000000, 11, 112}, /* 2259 'p' */ { 0xd4200000, 11, 116}, /* 2260 't' */ { 0x83200000, 12, 0}, /* 2261 '0x00' */ { 0x83300000, 12, 41}, /* 2262 ')' */ { 0x83400000, 12, 107}, /* 2263 'k' */ { 0x83500000, 12, 59}, /* 2264 ';' */ { 0x83700000, 12, 47}, /* 2265 '/' */ { 0x83680000, 14, 34}, /* 2266 '\"' */ { 0x836c0000, 14, 106}, /* 2267 'j' */ { 0x83600000, 15, 122}, /* 2268 'z' */ { 0x83660000, 15, 113}, /* 2269 'q' */ { 0x83630000, 16, 64}, /* 2270 '@' */ { 0x83640000, 16, 1}, /* 2271 '0x01' */ { 0x83628000, 17, 67}, /* 2272 'C' */ { 0x83650000, 17, 93}, /* 2273 ']' */ { 0x83620000, 18, 90}, /* 2274 'Z' */ { 0x83624000, 18, 91}, /* 2275 '[' */ { 0x83658000, 18, 84}, /* 2276 'T' */ { 0x8365c000, 18, 96}, /* 2277 '`' */ /* 61 */ { 0x80000000, 2, 32}, /* 2278 ' ' */ { 0x40000000, 3, 115}, /* 2279 's' */ { 0xc0000000, 3, 114}, /* 2280 'r' */ { 0x00000000, 4, 100}, /* 2281 'd' */ { 0x30000000, 4, 97}, /* 2282 'a' */ { 0xf0000000, 4, 110}, /* 2283 'n' */ { 0x10000000, 5, 99}, /* 2284 'c' */ { 0x60000000, 5, 101}, /* 2285 'e' */ { 0x68000000, 5, 119}, /* 2286 'w' */ { 0x78000000, 5, 116}, /* 2287 't' */ { 0xe0000000, 5, 108}, /* 2288 'l' */ { 0x18000000, 6, 120}, /* 2289 'x' */ { 0x20000000, 6, 118}, /* 2290 'v' */ { 0x24000000, 6, 105}, /* 2291 'i' */ { 0x28000000, 6, 121}, /* 2292 'y' */ { 0x70000000, 6, 109}, /* 2293 'm' */ { 0xe8000000, 6, 46}, /* 2294 '.' */ { 0x1c000000, 7, 102}, /* 2295 'f' */ { 0x2e000000, 7, 98}, /* 2296 'b' */ { 0x74000000, 7, 44}, /* 2297 ',' */ { 0xec000000, 7, 112}, /* 2298 'p' */ { 0x1e000000, 8, 45}, /* 2299 '-' */ { 0x1f000000, 8, 104}, /* 2300 'h' */ { 0x2c000000, 8, 107}, /* 2301 'k' */ { 0x76000000, 8, 39}, /* 2302 '\'' */ { 0xee000000, 8, 103}, /* 2303 'g' */ { 0xef000000, 8, 111}, /* 2304 'o' */ { 0x2d800000, 9, 58}, /* 2305 ':' */ { 0x2d000000, 10, 41}, /* 2306 ')' */ { 0x2d400000, 10, 113}, /* 2307 'q' */ { 0x77400000, 10, 63}, /* 2308 '?' */ { 0x77800000, 10, 117}, /* 2309 'u' */ { 0x77000000, 11, 122}, /* 2310 'z' */ { 0x77c00000, 11, 33}, /* 2311 '!' */ { 0x77e00000, 12, 0}, /* 2312 '0x00' */ { 0x77f00000, 12, 106}, /* 2313 'j' */ { 0x77300000, 13, 47}, /* 2314 '/' */ { 0x77240000, 14, 52}, /* 2315 '4' */ { 0x77280000, 14, 66}, /* 2316 'B' */ { 0x77380000, 14, 93}, /* 2317 ']' */ { 0x773c0000, 14, 59}, /* 2318 ';' */ { 0x77200000, 15, 34}, /* 2319 '\"' */ { 0x77230000, 16, 68}, /* 2320 'D' */ { 0x772c0000, 16, 1}, /* 2321 '0x01' */ { 0x772e0000, 16, 64}, /* 2322 '@' */ { 0x77220000, 17, 84}, /* 2323 'T' */ { 0x77228000, 17, 67}, /* 2324 'C' */ { 0x772d8000, 17, 91}, /* 2325 '[' */ { 0x772f8000, 17, 76}, /* 2326 'L' */ { 0x772d0000, 18, 86}, /* 2327 'V' */ { 0x772d4000, 18, 71}, /* 2328 'G' */ { 0x772f0000, 18, 49}, /* 2329 '1' */ { 0x772f5000, 20, 69}, /* 2330 'E' */ { 0x772f4000, 21, 50}, /* 2331 '2' */ { 0x772f4800, 21, 78}, /* 2332 'N' */ { 0x772f6000, 21, 70}, /* 2333 'F' */ { 0x772f6800, 21, 65}, /* 2334 'A' */ { 0x772f7000, 22, 92}, /* 2335 '\\' */ { 0x772f7400, 22, 80}, /* 2336 'P' */ { 0x772f7800, 22, 77}, /* 2337 'M' */ { 0x772f7c00, 22, 72}, /* 2338 'H' */ /* 35 */ { 0x00000000, 2, 111}, /* 2339 'o' */ { 0x80000000, 2, 32}, /* 2340 ' ' */ { 0x40000000, 3, 105}, /* 2341 'i' */ { 0xc0000000, 3, 114}, /* 2342 'r' */ { 0x70000000, 4, 97}, /* 2343 'a' */ { 0xe0000000, 4, 101}, /* 2344 'e' */ { 0x60000000, 5, 116}, /* 2345 't' */ { 0xf0000000, 5, 117}, /* 2346 'u' */ { 0xf8000000, 5, 102}, /* 2347 'f' */ { 0x6c000000, 6, 108}, /* 2348 'l' */ { 0x68000000, 8, 115}, /* 2349 's' */ { 0x69000000, 8, 121}, /* 2350 'y' */ { 0x6b000000, 9, 46}, /* 2351 '.' */ { 0x6a000000, 10, 63}, /* 2352 '?' */ { 0x6ac00000, 10, 44}, /* 2353 ',' */ { 0x6bc00000, 10, 45}, /* 2354 '-' */ { 0x6a600000, 11, 58}, /* 2355 ':' */ { 0x6a800000, 11, 39}, /* 2356 '\'' */ { 0x6aa00000, 11, 103}, /* 2357 'g' */ { 0x6a400000, 12, 109}, /* 2358 'm' */ { 0x6b800000, 12, 1}, /* 2359 '0x01' */ { 0x6ba00000, 12, 98}, /* 2360 'b' */ { 0x6bb00000, 12, 110}, /* 2361 'n' */ { 0x6a580000, 13, 99}, /* 2362 'c' */ { 0x6b900000, 13, 33}, /* 2363 '!' */ { 0x6b980000, 14, 41}, /* 2364 ')' */ { 0x6b9c0000, 14, 119}, /* 2365 'w' */ { 0x6a520000, 15, 112}, /* 2366 'p' */ { 0x6a540000, 15, 47}, /* 2367 '/' */ { 0x6a500000, 16, 104}, /* 2368 'h' */ { 0x6a560000, 16, 59}, /* 2369 ';' */ { 0x6a510000, 17, 0}, /* 2370 '0x00' */ { 0x6a518000, 17, 100}, /* 2371 'd' */ { 0x6a570000, 17, 107}, /* 2372 'k' */ { 0x6a578000, 17, 118}, /* 2373 'v' */ /* 40 */ { 0xc0000000, 2, 32}, /* 2374 ' ' */ { 0x00000000, 3, 97}, /* 2375 'a' */ { 0x40000000, 3, 104}, /* 2376 'h' */ { 0xa0000000, 3, 101}, /* 2377 'e' */ { 0x30000000, 4, 117}, /* 2378 'u' */ { 0x60000000, 4, 114}, /* 2379 'r' */ { 0x80000000, 4, 105}, /* 2380 'i' */ { 0x70000000, 5, 108}, /* 2381 'l' */ { 0x90000000, 5, 115}, /* 2382 's' */ { 0x98000000, 5, 111}, /* 2383 'o' */ { 0x24000000, 6, 44}, /* 2384 ',' */ { 0x28000000, 6, 110}, /* 2385 'n' */ { 0x78000000, 6, 103}, /* 2386 'g' */ { 0x7c000000, 6, 46}, /* 2387 '.' */ { 0x2c000000, 7, 121}, /* 2388 'y' */ { 0x21000000, 8, 39}, /* 2389 '\'' */ { 0x22000000, 8, 45}, /* 2390 '-' */ { 0x23000000, 8, 58}, /* 2391 ':' */ { 0x20000000, 9, 100}, /* 2392 'd' */ { 0x2e800000, 9, 98}, /* 2393 'b' */ { 0x2f000000, 9, 116}, /* 2394 't' */ { 0x2f800000, 9, 119}, /* 2395 'w' */ { 0x20800000, 10, 63}, /* 2396 '?' */ { 0x20c00000, 10, 109}, /* 2397 'm' */ { 0x2e200000, 11, 33}, /* 2398 '!' */ { 0x2e600000, 11, 102}, /* 2399 'f' */ { 0x2e100000, 12, 59}, /* 2400 ';' */ { 0x2e500000, 12, 0}, /* 2401 '0x00' */ { 0x2e000000, 13, 107}, /* 2402 'k' */ { 0x2e400000, 13, 112}, /* 2403 'p' */ { 0x2e080000, 14, 41}, /* 2404 ')' */ { 0x2e0c0000, 14, 34}, /* 2405 '\"' */ { 0x2e4a0000, 15, 99}, /* 2406 'c' */ { 0x2e4e0000, 15, 47}, /* 2407 '/' */ { 0x2e480000, 16, 1}, /* 2408 '0x01' */ { 0x2e4c0000, 16, 93}, /* 2409 ']' */ { 0x2e4d0000, 16, 122}, /* 2410 'z' */ { 0x2e490000, 17, 96}, /* 2411 '`' */ { 0x2e498000, 18, 118}, /* 2412 'v' */ { 0x2e49c000, 18, 64}, /* 2413 '@' */ /* 41 */ { 0x00000000, 1, 101}, /* 2414 'e' */ { 0x80000000, 3, 111}, /* 2415 'o' */ { 0xa0000000, 3, 105}, /* 2416 'i' */ { 0xc0000000, 3, 32}, /* 2417 ' ' */ { 0xf0000000, 4, 97}, /* 2418 'a' */ { 0xe4000000, 6, 114}, /* 2419 'r' */ { 0xec000000, 6, 116}, /* 2420 't' */ { 0xe1000000, 8, 121}, /* 2421 'y' */ { 0xe3000000, 8, 108}, /* 2422 'l' */ { 0xe8000000, 8, 46}, /* 2423 '.' */ { 0xe9000000, 8, 110}, /* 2424 'n' */ { 0xeb000000, 8, 117}, /* 2425 'u' */ { 0xe0000000, 9, 100}, /* 2426 'd' */ { 0xe2000000, 9, 115}, /* 2427 's' */ { 0xea000000, 9, 44}, /* 2428 ',' */ { 0xe0c00000, 10, 119}, /* 2429 'w' */ { 0xe2800000, 10, 39}, /* 2430 '\'' */ { 0xe2c00000, 10, 45}, /* 2431 '-' */ { 0xeaa00000, 11, 109}, /* 2432 'm' */ { 0xeac00000, 11, 58}, /* 2433 ':' */ { 0xeae00000, 11, 98}, /* 2434 'b' */ { 0xe0900000, 12, 99}, /* 2435 'c' */ { 0xe0b00000, 12, 63}, /* 2436 '?' */ { 0xea800000, 12, 33}, /* 2437 '!' */ { 0xe0800000, 13, 41}, /* 2438 ')' */ { 0xe0a00000, 13, 104}, /* 2439 'h' */ { 0xe0a80000, 13, 107}, /* 2440 'k' */ { 0xea980000, 13, 102}, /* 2441 'f' */ { 0xea940000, 14, 103}, /* 2442 'g' */ { 0xe0880000, 15, 112}, /* 2443 'p' */ { 0xe08a0000, 15, 59}, /* 2444 ';' */ { 0xe08c0000, 15, 47}, /* 2445 '/' */ { 0xe08e0000, 15, 0}, /* 2446 '0x00' */ { 0xea920000, 15, 118}, /* 2447 'v' */ { 0xea900000, 16, 113}, /* 2448 'q' */ { 0xea910000, 17, 1}, /* 2449 '0x01' */ { 0xea918000, 18, 34}, /* 2450 '\"' */ { 0xea91c000, 20, 122}, /* 2451 'z' */ { 0xea91d000, 20, 106}, /* 2452 'j' */ { 0xea91e000, 20, 93}, /* 2453 ']' */ { 0xea91f000, 20, 42}, /* 2454 '*' */ /* 44 */ { 0x80000000, 2, 110}, /* 2455 'n' */ { 0x00000000, 3, 116}, /* 2456 't' */ { 0x40000000, 3, 115}, /* 2457 's' */ { 0x30000000, 4, 108}, /* 2458 'l' */ { 0xc0000000, 4, 111}, /* 2459 'o' */ { 0xd0000000, 4, 99}, /* 2460 'c' */ { 0xf0000000, 4, 101}, /* 2461 'e' */ { 0x20000000, 5, 97}, /* 2462 'a' */ { 0x60000000, 5, 109}, /* 2463 'm' */ { 0x68000000, 5, 100}, /* 2464 'd' */ { 0x70000000, 5, 118}, /* 2465 'v' */ { 0xe0000000, 5, 103}, /* 2466 'g' */ { 0xe8000000, 5, 114}, /* 2467 'r' */ { 0x28000000, 6, 112}, /* 2468 'p' */ { 0x78000000, 6, 102}, /* 2469 'f' */ { 0x2c000000, 7, 122}, /* 2470 'z' */ { 0x7c000000, 7, 32}, /* 2471 ' ' */ { 0x2f000000, 8, 98}, /* 2472 'b' */ { 0x7e000000, 8, 107}, /* 2473 'k' */ { 0x2e000000, 9, 45}, /* 2474 '-' */ { 0x2e800000, 9, 120}, /* 2475 'x' */ { 0x7f000000, 10, 117}, /* 2476 'u' */ { 0x7f800000, 10, 113}, /* 2477 'q' */ { 0x7f400000, 11, 46}, /* 2478 '.' */ { 0x7fc00000, 11, 44}, /* 2479 ',' */ { 0x7f700000, 12, 119}, /* 2480 'w' */ { 0x7ff00000, 12, 39}, /* 2481 '\'' */ { 0x7f680000, 13, 105}, /* 2482 'i' */ { 0x7fe80000, 13, 106}, /* 2483 'j' */ { 0x7f640000, 14, 58}, /* 2484 ':' */ { 0x7fe00000, 14, 104}, /* 2485 'h' */ { 0x7f600000, 15, 47}, /* 2486 '/' */ { 0x7fe60000, 15, 121}, /* 2487 'y' */ { 0x7f630000, 16, 63}, /* 2488 '?' */ { 0x7fe40000, 16, 80}, /* 2489 'P' */ { 0x7f628000, 17, 82}, /* 2490 'R' */ { 0x7fe58000, 17, 33}, /* 2491 '!' */ { 0x7fe50000, 18, 41}, /* 2492 ')' */ { 0x7fe54000, 18, 83}, /* 2493 'S' */ { 0x7f620000, 19, 0}, /* 2494 '0x00' */ { 0x7f622000, 19, 67}, /* 2495 'C' */ { 0x7f624000, 19, 1}, /* 2496 '0x01' */ { 0x7f626000, 20, 68}, /* 2497 'D' */ { 0x7f627000, 20, 59}, /* 2498 ';' */ /* 14 */ { 0x00000000, 1, 111}, /* 2499 'o' */ { 0xc0000000, 2, 117}, /* 2500 'u' */ { 0xa0000000, 3, 97}, /* 2501 'a' */ { 0x90000000, 4, 101}, /* 2502 'e' */ { 0x80000000, 5, 105}, /* 2503 'i' */ { 0x8c000000, 6, 121}, /* 2504 'y' */ { 0x8a000000, 7, 32}, /* 2505 ' ' */ { 0x89000000, 8, 46}, /* 2506 '.' */ { 0x88000000, 9, 39}, /* 2507 '\'' */ { 0x88c00000, 10, 116}, /* 2508 't' */ { 0x88800000, 11, 110}, /* 2509 'n' */ { 0x88b00000, 12, 115}, /* 2510 's' */ { 0x88a00000, 13, 1}, /* 2511 '0x01' */ { 0x88a80000, 13, 104}, /* 2512 'h' */ /* 40 */ { 0x80000000, 2, 32}, /* 2513 ' ' */ { 0xc0000000, 2, 101}, /* 2514 'e' */ { 0x00000000, 3, 115}, /* 2515 's' */ { 0x60000000, 3, 105}, /* 2516 'i' */ { 0x20000000, 4, 46}, /* 2517 '.' */ { 0x48000000, 5, 121}, /* 2518 'y' */ { 0x30000000, 6, 39}, /* 2519 '\'' */ { 0x34000000, 6, 97}, /* 2520 'a' */ { 0x38000000, 6, 112}, /* 2521 'p' */ { 0x3c000000, 6, 44}, /* 2522 ',' */ { 0x50000000, 6, 108}, /* 2523 'l' */ { 0x54000000, 6, 102}, /* 2524 'f' */ { 0x58000000, 6, 110}, /* 2525 'n' */ { 0x40000000, 7, 47}, /* 2526 '/' */ { 0x44000000, 7, 45}, /* 2527 '-' */ { 0x46000000, 7, 111}, /* 2528 'o' */ { 0x5d000000, 8, 58}, /* 2529 ':' */ { 0x43800000, 9, 98}, /* 2530 'b' */ { 0x5c000000, 9, 119}, /* 2531 'w' */ { 0x5c800000, 9, 109}, /* 2532 'm' */ { 0x5e000000, 9, 104}, /* 2533 'h' */ { 0x5f000000, 9, 117}, /* 2534 'u' */ { 0x5f800000, 9, 107}, /* 2535 'k' */ { 0x42000000, 10, 114}, /* 2536 'r' */ { 0x42400000, 10, 1}, /* 2537 '0x01' */ { 0x42800000, 10, 63}, /* 2538 '?' */ { 0x43000000, 10, 116}, /* 2539 't' */ { 0x43400000, 10, 103}, /* 2540 'g' */ { 0x5ec00000, 10, 100}, /* 2541 'd' */ { 0x42c00000, 11, 106}, /* 2542 'j' */ { 0x42e00000, 12, 41}, /* 2543 ')' */ { 0x5e800000, 12, 59}, /* 2544 ';' */ { 0x5e900000, 12, 99}, /* 2545 'c' */ { 0x5ea00000, 12, 83}, /* 2546 'S' */ { 0x42f00000, 13, 118}, /* 2547 'v' */ { 0x42f80000, 13, 82}, /* 2548 'R' */ { 0x5eb00000, 13, 33}, /* 2549 '!' */ { 0x5eb80000, 14, 64}, /* 2550 '@' */ { 0x5ebc0000, 15, 34}, /* 2551 '\"' */ { 0x5ebe0000, 15, 0}, /* 2552 '0x00' */ /* 43 */ { 0x40000000, 3, 97}, /* 2553 'a' */ { 0x60000000, 3, 105}, /* 2554 'i' */ { 0x80000000, 3, 108}, /* 2555 'l' */ { 0xc0000000, 3, 101}, /* 2556 'e' */ { 0xe0000000, 3, 32}, /* 2557 ' ' */ { 0x00000000, 4, 117}, /* 2558 'u' */ { 0x10000000, 4, 100}, /* 2559 'd' */ { 0x20000000, 4, 121}, /* 2560 'y' */ { 0xb0000000, 4, 111}, /* 2561 'o' */ { 0xa0000000, 5, 115}, /* 2562 's' */ { 0x30000000, 6, 46}, /* 2563 '.' */ { 0x38000000, 6, 116}, /* 2564 't' */ { 0x34000000, 7, 118}, /* 2565 'v' */ { 0x3c000000, 7, 102}, /* 2566 'f' */ { 0xa8000000, 7, 109}, /* 2567 'm' */ { 0xaa000000, 7, 107}, /* 2568 'k' */ { 0xac000000, 7, 112}, /* 2569 'p' */ { 0x37000000, 8, 99}, /* 2570 'c' */ { 0x3e000000, 8, 45}, /* 2571 '-' */ { 0xaf000000, 8, 44}, /* 2572 ',' */ { 0x36800000, 9, 58}, /* 2573 ':' */ { 0x3f800000, 9, 98}, /* 2574 'b' */ { 0xae000000, 9, 39}, /* 2575 '\'' */ { 0x36000000, 10, 114}, /* 2576 'r' */ { 0x36400000, 10, 104}, /* 2577 'h' */ { 0x3f000000, 10, 110}, /* 2578 'n' */ { 0x3f400000, 10, 103}, /* 2579 'g' */ { 0xaec00000, 10, 119}, /* 2580 'w' */ { 0xae800000, 11, 63}, /* 2581 '?' */ { 0xaea00000, 13, 33}, /* 2582 '!' */ { 0xaeb00000, 13, 122}, /* 2583 'z' */ { 0xaeac0000, 14, 47}, /* 2584 '/' */ { 0xaea80000, 15, 59}, /* 2585 ';' */ { 0xaeb80000, 15, 69}, /* 2586 'E' */ { 0xaeba0000, 15, 42}, /* 2587 '*' */ { 0xaebe0000, 15, 0}, /* 2588 '0x00' */ { 0xaeab0000, 16, 1}, /* 2589 '0x01' */ { 0xaebc0000, 16, 41}, /* 2590 ')' */ { 0xaeaa0000, 17, 64}, /* 2591 '@' */ { 0xaeaa8000, 17, 106}, /* 2592 'j' */ { 0xaebd0000, 17, 34}, /* 2593 '\"' */ { 0xaebd8000, 18, 91}, /* 2594 '[' */ { 0xaebdc000, 18, 93}, /* 2595 ']' */ /* 40 */ { 0x00000000, 2, 97}, /* 2596 'a' */ { 0x40000000, 2, 101}, /* 2597 'e' */ { 0xe0000000, 3, 32}, /* 2598 ' ' */ { 0x90000000, 4, 112}, /* 2599 'p' */ { 0xb0000000, 4, 111}, /* 2600 'o' */ { 0xc0000000, 4, 105}, /* 2601 'i' */ { 0x80000000, 5, 46}, /* 2602 '.' */ { 0x88000000, 5, 115}, /* 2603 's' */ { 0xd0000000, 5, 117}, /* 2604 'u' */ { 0xd8000000, 5, 109}, /* 2605 'm' */ { 0xa4000000, 6, 121}, /* 2606 'y' */ { 0xac000000, 6, 98}, /* 2607 'b' */ { 0xa0000000, 7, 44}, /* 2608 ',' */ { 0xa8000000, 7, 47}, /* 2609 '/' */ { 0xa2000000, 8, 93}, /* 2610 ']' */ { 0xa3000000, 9, 58}, /* 2611 ':' */ { 0xaa000000, 9, 39}, /* 2612 '\'' */ { 0xa3c00000, 10, 114}, /* 2613 'r' */ { 0xaac00000, 10, 102}, /* 2614 'f' */ { 0xab000000, 10, 108}, /* 2615 'l' */ { 0xab800000, 10, 110}, /* 2616 'n' */ { 0xa3800000, 11, 63}, /* 2617 '?' */ { 0xa3a00000, 11, 33}, /* 2618 '!' */ { 0xaa800000, 11, 0}, /* 2619 '0x00' */ { 0xaaa00000, 11, 119}, /* 2620 'w' */ { 0xab600000, 11, 104}, /* 2621 'h' */ { 0xabc00000, 11, 45}, /* 2622 '-' */ { 0xabe00000, 12, 52}, /* 2623 '4' */ { 0xab500000, 13, 116}, /* 2624 't' */ { 0xab580000, 13, 64}, /* 2625 '@' */ { 0xabf00000, 13, 59}, /* 2626 ';' */ { 0xabf80000, 13, 99}, /* 2627 'c' */ { 0xab400000, 14, 41}, /* 2628 ')' */ { 0xab440000, 14, 1}, /* 2629 '0x01' */ { 0xab4c0000, 14, 100}, /* 2630 'd' */ { 0xab4a0000, 15, 103}, /* 2631 'g' */ { 0xab480000, 17, 91}, /* 2632 '[' */ { 0xab488000, 17, 118}, /* 2633 'v' */ { 0xab490000, 17, 107}, /* 2634 'k' */ { 0xab498000, 17, 122}, /* 2635 'z' */ /* 44 */ { 0x40000000, 2, 32}, /* 2636 ' ' */ { 0x20000000, 3, 116}, /* 2637 't' */ { 0x80000000, 3, 103}, /* 2638 'g' */ { 0xe0000000, 3, 100}, /* 2639 'd' */ { 0x00000000, 4, 115}, /* 2640 's' */ { 0xa0000000, 4, 97}, /* 2641 'a' */ { 0xd0000000, 4, 101}, /* 2642 'e' */ { 0xb0000000, 5, 99}, /* 2643 'c' */ { 0xc0000000, 5, 105}, /* 2644 'i' */ { 0x1c000000, 6, 46}, /* 2645 '.' */ { 0xbc000000, 6, 110}, /* 2646 'n' */ { 0xcc000000, 6, 111}, /* 2647 'o' */ { 0x12000000, 7, 117}, /* 2648 'u' */ { 0x16000000, 7, 118}, /* 2649 'v' */ { 0x18000000, 7, 102}, /* 2650 'f' */ { 0xb8000000, 7, 107}, /* 2651 'k' */ { 0xba000000, 7, 39}, /* 2652 '\'' */ { 0xc8000000, 7, 121}, /* 2653 'y' */ { 0xca000000, 7, 44}, /* 2654 ',' */ { 0x10000000, 8, 109}, /* 2655 'm' */ { 0x14000000, 8, 108}, /* 2656 'l' */ { 0x15000000, 8, 45}, /* 2657 '-' */ { 0x11800000, 9, 119}, /* 2658 'w' */ { 0x1a800000, 9, 58}, /* 2659 ':' */ { 0x11400000, 10, 122}, /* 2660 'z' */ { 0x1a000000, 10, 104}, /* 2661 'h' */ { 0x1b000000, 10, 98}, /* 2662 'b' */ { 0x1b400000, 10, 106}, /* 2663 'j' */ { 0x1b800000, 10, 114}, /* 2664 'r' */ { 0x11000000, 11, 112}, /* 2665 'p' */ { 0x1a600000, 11, 120}, /* 2666 'x' */ { 0x1be00000, 11, 63}, /* 2667 '?' */ { 0x11300000, 12, 59}, /* 2668 ';' */ { 0x1a500000, 12, 41}, /* 2669 ')' */ { 0x1bc00000, 12, 33}, /* 2670 '!' */ { 0x1bd00000, 12, 113}, /* 2671 'q' */ { 0x11200000, 13, 47}, /* 2672 '/' */ { 0x11280000, 13, 0}, /* 2673 '0x00' */ { 0x1a400000, 13, 1}, /* 2674 '0x01' */ { 0x1a480000, 14, 66}, /* 2675 'B' */ { 0x1a4c0000, 16, 93}, /* 2676 ']' */ { 0x1a4d0000, 16, 34}, /* 2677 '\"' */ { 0x1a4e0000, 16, 64}, /* 2678 '@' */ { 0x1a4f0000, 16, 42}, /* 2679 '*' */ /* 48 */ { 0x20000000, 3, 117}, /* 2680 'u' */ { 0x60000000, 3, 32}, /* 2681 ' ' */ { 0x80000000, 3, 114}, /* 2682 'r' */ { 0xe0000000, 3, 110}, /* 2683 'n' */ { 0x00000000, 4, 108}, /* 2684 'l' */ { 0xc0000000, 4, 109}, /* 2685 'm' */ { 0xd0000000, 4, 102}, /* 2686 'f' */ { 0x10000000, 5, 118}, /* 2687 'v' */ { 0x40000000, 5, 115}, /* 2688 's' */ { 0x48000000, 5, 112}, /* 2689 'p' */ { 0xa0000000, 5, 116}, /* 2690 't' */ { 0xa8000000, 5, 111}, /* 2691 'o' */ { 0xb8000000, 5, 119}, /* 2692 'w' */ { 0x18000000, 6, 107}, /* 2693 'k' */ { 0x1c000000, 6, 105}, /* 2694 'i' */ { 0x50000000, 6, 103}, /* 2695 'g' */ { 0x5c000000, 6, 99}, /* 2696 'c' */ { 0xb4000000, 6, 100}, /* 2697 'd' */ { 0x56000000, 7, 101}, /* 2698 'e' */ { 0x58000000, 7, 121}, /* 2699 'y' */ { 0x5a000000, 7, 97}, /* 2700 'a' */ { 0xb2000000, 7, 98}, /* 2701 'b' */ { 0x55000000, 8, 104}, /* 2702 'h' */ { 0xb0000000, 8, 46}, /* 2703 '.' */ { 0x54000000, 9, 45}, /* 2704 '-' */ { 0x54800000, 9, 44}, /* 2705 ',' */ { 0xb1400000, 10, 39}, /* 2706 '\'' */ { 0xb1c00000, 10, 120}, /* 2707 'x' */ { 0xb1200000, 11, 58}, /* 2708 ':' */ { 0xb1a00000, 11, 122}, /* 2709 'z' */ { 0xb1100000, 12, 63}, /* 2710 '?' */ { 0xb1900000, 12, 106}, /* 2711 'j' */ { 0xb1000000, 13, 33}, /* 2712 '!' */ { 0xb1880000, 13, 113}, /* 2713 'q' */ { 0xb1080000, 14, 74}, /* 2714 'J' */ { 0xb1800000, 14, 47}, /* 2715 '/' */ { 0xb1840000, 14, 41}, /* 2716 ')' */ { 0xb10d0000, 16, 59}, /* 2717 ';' */ { 0xb10e0000, 16, 71}, /* 2718 'G' */ { 0xb10c0000, 17, 34}, /* 2719 '\"' */ { 0xb10f0000, 17, 1}, /* 2720 '0x01' */ { 0xb10c8000, 18, 93}, /* 2721 ']' */ { 0xb10cc000, 18, 64}, /* 2722 '@' */ { 0xb10f8000, 19, 52}, /* 2723 '4' */ { 0xb10fa000, 19, 0}, /* 2724 '0x00' */ { 0xb10fc000, 19, 66}, /* 2725 'B' */ { 0xb10fe000, 20, 79}, /* 2726 'O' */ { 0xb10ff000, 20, 67}, /* 2727 'C' */ /* 39 */ { 0x20000000, 3, 108}, /* 2728 'l' */ { 0x40000000, 3, 32}, /* 2729 ' ' */ { 0x60000000, 3, 111}, /* 2730 'o' */ { 0xa0000000, 3, 114}, /* 2731 'r' */ { 0xe0000000, 3, 101}, /* 2732 'e' */ { 0x00000000, 4, 112}, /* 2733 'p' */ { 0xc0000000, 4, 97}, /* 2734 'a' */ { 0xd0000000, 4, 105}, /* 2735 'i' */ { 0x18000000, 5, 116}, /* 2736 't' */ { 0x80000000, 5, 117}, /* 2737 'u' */ { 0x88000000, 5, 104}, /* 2738 'h' */ { 0x90000000, 5, 115}, /* 2739 's' */ { 0x14000000, 6, 109}, /* 2740 'm' */ { 0x12000000, 7, 100}, /* 2741 'd' */ { 0x9a000000, 7, 121}, /* 2742 'y' */ { 0x9c000000, 7, 46}, /* 2743 '.' */ { 0x9e000000, 7, 44}, /* 2744 ',' */ { 0x10000000, 8, 45}, /* 2745 '-' */ { 0x11800000, 9, 63}, /* 2746 '?' */ { 0x98800000, 9, 58}, /* 2747 ':' */ { 0x99000000, 10, 39}, /* 2748 '\'' */ { 0x99400000, 10, 93}, /* 2749 ']' */ { 0x99800000, 10, 43}, /* 2750 '+' */ { 0x99c00000, 10, 98}, /* 2751 'b' */ { 0x11200000, 11, 102}, /* 2752 'f' */ { 0x11400000, 11, 107}, /* 2753 'k' */ { 0x11600000, 11, 33}, /* 2754 '!' */ { 0x98200000, 11, 99}, /* 2755 'c' */ { 0x98400000, 11, 110}, /* 2756 'n' */ { 0x98600000, 11, 119}, /* 2757 'w' */ { 0x11000000, 12, 0}, /* 2758 '0x00' */ { 0x11100000, 12, 59}, /* 2759 ';' */ { 0x98100000, 12, 47}, /* 2760 '/' */ { 0x98080000, 13, 103}, /* 2761 'g' */ { 0x98040000, 14, 41}, /* 2762 ')' */ { 0x98020000, 15, 34}, /* 2763 '\"' */ { 0x98010000, 16, 83}, /* 2764 'S' */ { 0x98000000, 17, 1}, /* 2765 '0x01' */ { 0x98008000, 17, 66}, /* 2766 'B' */ /* 13 */ { 0x80000000, 1, 117}, /* 2767 'u' */ { 0x00000000, 3, 44}, /* 2768 ',' */ { 0x20000000, 3, 46}, /* 2769 '.' */ { 0x60000000, 3, 32}, /* 2770 ' ' */ { 0x48000000, 5, 98}, /* 2771 'b' */ { 0x50000000, 5, 39}, /* 2772 '\'' */ { 0x58000000, 5, 105}, /* 2773 'i' */ { 0x44000000, 6, 97}, /* 2774 'a' */ { 0x40000000, 8, 63}, /* 2775 '?' */ { 0x41000000, 8, 58}, /* 2776 ':' */ { 0x43000000, 8, 41}, /* 2777 ')' */ { 0x42000000, 9, 1}, /* 2778 '0x01' */ { 0x42800000, 9, 119}, /* 2779 'w' */ /* 47 */ { 0x00000000, 3, 97}, /* 2780 'a' */ { 0x20000000, 3, 111}, /* 2781 'o' */ { 0x80000000, 3, 105}, /* 2782 'i' */ { 0xc0000000, 3, 32}, /* 2783 ' ' */ { 0xe0000000, 3, 101}, /* 2784 'e' */ { 0x40000000, 4, 115}, /* 2785 's' */ { 0x50000000, 4, 116}, /* 2786 't' */ { 0x70000000, 5, 100}, /* 2787 'd' */ { 0xa0000000, 5, 110}, /* 2788 'n' */ { 0xa8000000, 5, 121}, /* 2789 'y' */ { 0x68000000, 6, 117}, /* 2790 'u' */ { 0x6c000000, 6, 109}, /* 2791 'm' */ { 0x7c000000, 6, 107}, /* 2792 'k' */ { 0xb4000000, 6, 108}, /* 2793 'l' */ { 0xb8000000, 6, 46}, /* 2794 '.' */ { 0xbc000000, 6, 114}, /* 2795 'r' */ { 0x60000000, 7, 102}, /* 2796 'f' */ { 0x64000000, 7, 44}, /* 2797 ',' */ { 0x66000000, 7, 118}, /* 2798 'v' */ { 0xb0000000, 7, 99}, /* 2799 'c' */ { 0xb2000000, 7, 103}, /* 2800 'g' */ { 0x63000000, 8, 39}, /* 2801 '\'' */ { 0x78000000, 8, 45}, /* 2802 '-' */ { 0x79000000, 8, 98}, /* 2803 'b' */ { 0x7b000000, 8, 112}, /* 2804 'p' */ { 0x62800000, 9, 58}, /* 2805 ':' */ { 0x7a000000, 9, 119}, /* 2806 'w' */ { 0x7a800000, 10, 63}, /* 2807 '?' */ { 0x7ac00000, 10, 104}, /* 2808 'h' */ { 0x62400000, 11, 33}, /* 2809 '!' */ { 0x62100000, 12, 113}, /* 2810 'q' */ { 0x62200000, 12, 106}, /* 2811 'j' */ { 0x62300000, 12, 0}, /* 2812 '0x00' */ { 0x62600000, 12, 47}, /* 2813 '/' */ { 0x62080000, 13, 59}, /* 2814 ';' */ { 0x62780000, 13, 41}, /* 2815 ')' */ { 0x62700000, 14, 56}, /* 2816 '8' */ { 0x62740000, 14, 122}, /* 2817 'z' */ { 0x62020000, 15, 34}, /* 2818 '\"' */ { 0x62060000, 15, 93}, /* 2819 ']' */ { 0x62000000, 16, 84}, /* 2820 'T' */ { 0x62040000, 16, 120}, /* 2821 'x' */ { 0x62050000, 16, 1}, /* 2822 '0x01' */ { 0x62018000, 17, 90}, /* 2823 'Z' */ { 0x62010000, 18, 42}, /* 2824 '*' */ { 0x62014000, 19, 68}, /* 2825 'D' */ { 0x62016000, 19, 66}, /* 2826 'B' */ /* 45 */ { 0x00000000, 1, 32}, /* 2827 ' ' */ { 0xa0000000, 3, 116}, /* 2828 't' */ { 0x80000000, 4, 46}, /* 2829 '.' */ { 0xe0000000, 4, 101}, /* 2830 'e' */ { 0x98000000, 5, 44}, /* 2831 ',' */ { 0xc0000000, 5, 111}, /* 2832 'o' */ { 0xc8000000, 5, 115}, /* 2833 's' */ { 0xf0000000, 5, 104}, /* 2834 'h' */ { 0xf8000000, 5, 105}, /* 2835 'i' */ { 0x94000000, 6, 99}, /* 2836 'c' */ { 0xd0000000, 6, 117}, /* 2837 'u' */ { 0xd8000000, 6, 112}, /* 2838 'p' */ { 0xde000000, 7, 97}, /* 2839 'a' */ { 0x91000000, 8, 110}, /* 2840 'n' */ { 0x93000000, 8, 109}, /* 2841 'm' */ { 0xd4000000, 8, 121}, /* 2842 'y' */ { 0xd6000000, 8, 58}, /* 2843 ':' */ { 0xdc000000, 8, 108}, /* 2844 'l' */ { 0xdd000000, 8, 107}, /* 2845 'k' */ { 0x90800000, 9, 98}, /* 2846 'b' */ { 0x92000000, 9, 102}, /* 2847 'f' */ { 0xd5000000, 9, 119}, /* 2848 'w' */ { 0xd7800000, 9, 39}, /* 2849 '\'' */ { 0x90000000, 10, 33}, /* 2850 '!' */ { 0x90400000, 10, 103}, /* 2851 'g' */ { 0x92800000, 10, 114}, /* 2852 'r' */ { 0xd5800000, 10, 63}, /* 2853 '?' */ { 0xd5c00000, 10, 45}, /* 2854 '-' */ { 0xd7400000, 10, 113}, /* 2855 'q' */ { 0xd7200000, 11, 100}, /* 2856 'd' */ { 0x92c00000, 12, 47}, /* 2857 '/' */ { 0x92d00000, 12, 41}, /* 2858 ')' */ { 0x92f00000, 12, 0}, /* 2859 '0x00' */ { 0xd7000000, 12, 93}, /* 2860 ']' */ { 0xd7100000, 12, 59}, /* 2861 ';' */ { 0x92e80000, 13, 118}, /* 2862 'v' */ { 0x92e20000, 15, 34}, /* 2863 '\"' */ { 0x92e60000, 15, 122}, /* 2864 'z' */ { 0x92e00000, 16, 106}, /* 2865 'j' */ { 0x92e10000, 16, 1}, /* 2866 '0x01' */ { 0x92e40000, 16, 91}, /* 2867 '[' */ { 0x92e58000, 17, 64}, /* 2868 '@' */ { 0x92e54000, 18, 84}, /* 2869 'T' */ { 0x92e50000, 19, 120}, /* 2870 'x' */ { 0x92e52000, 19, 96}, /* 2871 '`' */ /* 49 */ { 0x80000000, 2, 104}, /* 2872 'h' */ { 0x00000000, 3, 105}, /* 2873 'i' */ { 0x40000000, 3, 111}, /* 2874 'o' */ { 0x60000000, 3, 101}, /* 2875 'e' */ { 0xe0000000, 3, 32}, /* 2876 ' ' */ { 0x20000000, 4, 97}, /* 2877 'a' */ { 0x30000000, 5, 117}, /* 2878 'u' */ { 0xc8000000, 5, 114}, /* 2879 'r' */ { 0xd8000000, 5, 115}, /* 2880 's' */ { 0x3c000000, 6, 46}, /* 2881 '.' */ { 0xc4000000, 6, 116}, /* 2882 't' */ { 0xd0000000, 6, 121}, /* 2883 'y' */ { 0x3a000000, 7, 99}, /* 2884 'c' */ { 0xc2000000, 7, 108}, /* 2885 'l' */ { 0x39000000, 8, 45}, /* 2886 '-' */ { 0xc0000000, 8, 118}, /* 2887 'v' */ { 0xc1000000, 8, 109}, /* 2888 'm' */ { 0xd5000000, 8, 119}, /* 2889 'w' */ { 0xd6000000, 8, 44}, /* 2890 ',' */ { 0xd7000000, 8, 39}, /* 2891 '\'' */ { 0x38000000, 9, 110}, /* 2892 'n' */ { 0x38c00000, 10, 63}, /* 2893 '?' */ { 0xd4400000, 10, 98}, /* 2894 'b' */ { 0xd4800000, 10, 58}, /* 2895 ':' */ { 0x38800000, 11, 33}, /* 2896 '!' */ { 0xd4000000, 11, 122}, /* 2897 'z' */ { 0xd4c00000, 11, 100}, /* 2898 'd' */ { 0xd4e00000, 11, 102}, /* 2899 'f' */ { 0xd4200000, 12, 120}, /* 2900 'x' */ { 0x38a00000, 13, 103}, /* 2901 'g' */ { 0x38a80000, 13, 59}, /* 2902 ';' */ { 0xd4300000, 13, 112}, /* 2903 'p' */ { 0x38b00000, 14, 80}, /* 2904 'P' */ { 0x38b40000, 14, 0}, /* 2905 '0x00' */ { 0x38bc0000, 14, 41}, /* 2906 ')' */ { 0xd4380000, 14, 47}, /* 2907 '/' */ { 0xd43c0000, 14, 107}, /* 2908 'k' */ { 0x38b80000, 16, 64}, /* 2909 '@' */ { 0x38ba0000, 16, 69}, /* 2910 'E' */ { 0x38b98000, 17, 93}, /* 2911 ']' */ { 0x38bb8000, 17, 34}, /* 2912 '\"' */ { 0x38b90000, 18, 70}, /* 2913 'F' */ { 0x38bb0000, 18, 1}, /* 2914 '0x01' */ { 0x38b94000, 19, 106}, /* 2915 'j' */ { 0x38bb4000, 19, 49}, /* 2916 '1' */ { 0x38bb6000, 19, 91}, /* 2917 '[' */ { 0x38b96000, 20, 92}, /* 2918 '\\' */ { 0x38b97000, 21, 75}, /* 2919 'K' */ { 0x38b97800, 21, 67}, /* 2920 'C' */ /* 43 */ { 0x60000000, 3, 116}, /* 2921 't' */ { 0xa0000000, 3, 110}, /* 2922 'n' */ { 0xc0000000, 3, 115}, /* 2923 's' */ { 0xe0000000, 3, 114}, /* 2924 'r' */ { 0x10000000, 4, 100}, /* 2925 'd' */ { 0x20000000, 4, 101}, /* 2926 'e' */ { 0x50000000, 4, 108}, /* 2927 'l' */ { 0x80000000, 4, 112}, /* 2928 'p' */ { 0x00000000, 5, 98}, /* 2929 'b' */ { 0x08000000, 5, 32}, /* 2930 ' ' */ { 0x30000000, 5, 105}, /* 2931 'i' */ { 0x40000000, 5, 97}, /* 2932 'a' */ { 0x48000000, 5, 103}, /* 2933 'g' */ { 0x90000000, 5, 99}, /* 2934 'c' */ { 0x98000000, 5, 109}, /* 2935 'm' */ { 0x38000000, 7, 121}, /* 2936 'y' */ { 0x3a000000, 8, 122}, /* 2937 'z' */ { 0x3c000000, 8, 39}, /* 2938 '\'' */ { 0x3e000000, 8, 102}, /* 2939 'f' */ { 0x3f000000, 8, 107}, /* 2940 'k' */ { 0x3d000000, 9, 44}, /* 2941 ',' */ { 0x3b400000, 10, 45}, /* 2942 '-' */ { 0x3b800000, 10, 111}, /* 2943 'o' */ { 0x3d800000, 10, 46}, /* 2944 '.' */ { 0x3dc00000, 10, 120}, /* 2945 'x' */ { 0x3b000000, 11, 119}, /* 2946 'w' */ { 0x3bc00000, 11, 58}, /* 2947 ':' */ { 0x3b200000, 12, 113}, /* 2948 'q' */ { 0x3be00000, 12, 104}, /* 2949 'h' */ { 0x3bf00000, 12, 118}, /* 2950 'v' */ { 0x3b300000, 13, 106}, /* 2951 'j' */ { 0x3b380000, 15, 117}, /* 2952 'u' */ { 0x3b3a0000, 15, 63}, /* 2953 '?' */ { 0x3b3e0000, 16, 47}, /* 2954 '/' */ { 0x3b3f0000, 16, 33}, /* 2955 '!' */ { 0x3b3c8000, 17, 1}, /* 2956 '0x01' */ { 0x3b3c0000, 18, 92}, /* 2957 '\\' */ { 0x3b3c4000, 18, 0}, /* 2958 '0x00' */ { 0x3b3d0000, 18, 59}, /* 2959 ';' */ { 0x3b3d8000, 18, 74}, /* 2960 'J' */ { 0x3b3dc000, 18, 41}, /* 2961 ')' */ { 0x3b3d4000, 19, 84}, /* 2962 'T' */ { 0x3b3d6000, 19, 93}, /* 2963 ']' */ /* 26 */ { 0x80000000, 1, 101}, /* 2964 'e' */ { 0x40000000, 2, 105}, /* 2965 'i' */ { 0x00000000, 3, 97}, /* 2966 'a' */ { 0x30000000, 4, 111}, /* 2967 'o' */ { 0x28000000, 5, 46}, /* 2968 '.' */ { 0x24000000, 6, 32}, /* 2969 ' ' */ { 0x21000000, 8, 39}, /* 2970 '\'' */ { 0x23000000, 8, 121}, /* 2971 'y' */ { 0x20000000, 9, 117}, /* 2972 'u' */ { 0x22000000, 9, 115}, /* 2973 's' */ { 0x22800000, 10, 114}, /* 2974 'r' */ { 0x20800000, 11, 45}, /* 2975 '-' */ { 0x20c00000, 11, 44}, /* 2976 ',' */ { 0x22c00000, 11, 110}, /* 2977 'n' */ { 0x20a00000, 12, 103}, /* 2978 'g' */ { 0x20b00000, 12, 118}, /* 2979 'v' */ { 0x20f00000, 12, 108}, /* 2980 'l' */ { 0x22e00000, 12, 64}, /* 2981 '@' */ { 0x22f00000, 12, 58}, /* 2982 ':' */ { 0x20e80000, 13, 107}, /* 2983 'k' */ { 0x20e00000, 14, 98}, /* 2984 'b' */ { 0x20e40000, 15, 116}, /* 2985 't' */ { 0x20e60000, 16, 100}, /* 2986 'd' */ { 0x20e70000, 17, 47}, /* 2987 '/' */ { 0x20e78000, 18, 1}, /* 2988 '0x01' */ { 0x20e7c000, 18, 49}, /* 2989 '1' */ /* 39 */ { 0x00000000, 2, 105}, /* 2990 'i' */ { 0x60000000, 3, 101}, /* 2991 'e' */ { 0x80000000, 3, 32}, /* 2992 ' ' */ { 0xa0000000, 3, 115}, /* 2993 's' */ { 0xc0000000, 3, 104}, /* 2994 'h' */ { 0x50000000, 4, 97}, /* 2995 'a' */ { 0xf0000000, 4, 111}, /* 2996 'o' */ { 0x40000000, 5, 46}, /* 2997 '.' */ { 0x48000000, 5, 119}, /* 2998 'w' */ { 0xe0000000, 5, 110}, /* 2999 'n' */ { 0xec000000, 7, 114}, /* 3000 'r' */ { 0xea000000, 8, 44}, /* 3001 ',' */ { 0xeb000000, 8, 108}, /* 3002 'l' */ { 0xef000000, 8, 121}, /* 3003 'y' */ { 0xe9000000, 9, 99}, /* 3004 'c' */ { 0xee800000, 9, 98}, /* 3005 'b' */ { 0xe8800000, 10, 58}, /* 3006 ':' */ { 0xe9800000, 10, 109}, /* 3007 'm' */ { 0xe9c00000, 10, 39}, /* 3008 '\'' */ { 0xee000000, 10, 100}, /* 3009 'd' */ { 0xe8000000, 11, 102}, /* 3010 'f' */ { 0xe8200000, 11, 93}, /* 3011 ']' */ { 0xe8400000, 11, 33}, /* 3012 '!' */ { 0xe8e00000, 11, 107}, /* 3013 'k' */ { 0xee400000, 11, 45}, /* 3014 '-' */ { 0xe8700000, 12, 103}, /* 3015 'g' */ { 0xe8c00000, 12, 63}, /* 3016 '?' */ { 0xe8d00000, 12, 116}, /* 3017 't' */ { 0xee700000, 12, 112}, /* 3018 'p' */ { 0xe8600000, 13, 0}, /* 3019 '0x00' */ { 0xe8680000, 13, 117}, /* 3020 'u' */ { 0xee680000, 13, 41}, /* 3021 ')' */ { 0xee640000, 14, 106}, /* 3022 'j' */ { 0xee620000, 15, 113}, /* 3023 'q' */ { 0xee600000, 16, 47}, /* 3024 '/' */ { 0xee610000, 17, 59}, /* 3025 ';' */ { 0xee61c000, 18, 91}, /* 3026 '[' */ { 0xee618000, 19, 1}, /* 3027 '0x01' */ { 0xee61a000, 19, 66}, /* 3028 'B' */ /* 39 */ { 0x40000000, 2, 112}, /* 3029 'p' */ { 0xc0000000, 2, 116}, /* 3030 't' */ { 0xa0000000, 3, 32}, /* 3031 ' ' */ { 0x00000000, 4, 105}, /* 3032 'i' */ { 0x20000000, 4, 97}, /* 3033 'a' */ { 0x80000000, 4, 99}, /* 3034 'c' */ { 0x10000000, 5, 117}, /* 3035 'u' */ { 0x38000000, 5, 101}, /* 3036 'e' */ { 0x98000000, 5, 45}, /* 3037 '-' */ { 0x18000000, 6, 102}, /* 3038 'f' */ { 0x34000000, 6, 111}, /* 3039 'o' */ { 0x90000000, 6, 46}, /* 3040 '.' */ { 0x1c000000, 7, 44}, /* 3041 ',' */ { 0x1e000000, 7, 109}, /* 3042 'm' */ { 0x32000000, 7, 121}, /* 3043 'y' */ { 0x31000000, 8, 57}, /* 3044 '9' */ { 0x95000000, 8, 39}, /* 3045 '\'' */ { 0x96000000, 8, 113}, /* 3046 'q' */ { 0x30000000, 9, 115}, /* 3047 's' */ { 0x94000000, 9, 58}, /* 3048 ':' */ { 0x97000000, 9, 104}, /* 3049 'h' */ { 0x30c00000, 10, 63}, /* 3050 '?' */ { 0x94800000, 10, 108}, /* 3051 'l' */ { 0x97800000, 10, 119}, /* 3052 'w' */ { 0x30800000, 11, 65}, /* 3053 'A' */ { 0x94c00000, 11, 120}, /* 3054 'x' */ { 0x94e00000, 11, 98}, /* 3055 'b' */ { 0x97e00000, 11, 41}, /* 3056 ')' */ { 0x30b00000, 12, 47}, /* 3057 '/' */ { 0x30a00000, 13, 52}, /* 3058 '4' */ { 0x30a80000, 13, 33}, /* 3059 '!' */ { 0x97c00000, 13, 103}, /* 3060 'g' */ { 0x97c80000, 13, 0}, /* 3061 '0x00' */ { 0x97d80000, 13, 59}, /* 3062 ';' */ { 0x97d20000, 15, 118}, /* 3063 'v' */ { 0x97d40000, 15, 70}, /* 3064 'F' */ { 0x97d60000, 15, 69}, /* 3065 'E' */ { 0x97d00000, 16, 1}, /* 3066 '0x01' */ { 0x97d10000, 16, 67}, /* 3067 'C' */ /* 45 */ { 0x80000000, 1, 32}, /* 3068 ' ' */ { 0x00000000, 3, 111}, /* 3069 'o' */ { 0x30000000, 4, 115}, /* 3070 's' */ { 0x50000000, 4, 46}, /* 3071 '.' */ { 0x48000000, 5, 44}, /* 3072 ',' */ { 0x60000000, 5, 101}, /* 3073 'e' */ { 0x70000000, 5, 39}, /* 3074 '\'' */ { 0x24000000, 6, 97}, /* 3075 'a' */ { 0x28000000, 6, 105}, /* 3076 'i' */ { 0x2c000000, 6, 100}, /* 3077 'd' */ { 0x44000000, 6, 110}, /* 3078 'n' */ { 0x6c000000, 6, 58}, /* 3079 ':' */ { 0x7c000000, 6, 108}, /* 3080 'l' */ { 0x20000000, 7, 119}, /* 3081 'w' */ { 0x68000000, 7, 116}, /* 3082 't' */ { 0x6a000000, 7, 109}, /* 3083 'm' */ { 0x7a000000, 7, 45}, /* 3084 '-' */ { 0x23000000, 8, 98}, /* 3085 'b' */ { 0x40000000, 8, 63}, /* 3086 '?' */ { 0x41000000, 8, 114}, /* 3087 'r' */ { 0x42000000, 8, 112}, /* 3088 'p' */ { 0x43000000, 8, 102}, /* 3089 'f' */ { 0x79000000, 8, 99}, /* 3090 'c' */ { 0x22400000, 10, 59}, /* 3091 ';' */ { 0x22800000, 10, 74}, /* 3092 'J' */ { 0x78000000, 10, 104}, /* 3093 'h' */ { 0x78400000, 10, 33}, /* 3094 '!' */ { 0x78c00000, 10, 103}, /* 3095 'g' */ { 0x22000000, 11, 41}, /* 3096 ')' */ { 0x22e00000, 11, 47}, /* 3097 '/' */ { 0x78a00000, 11, 93}, /* 3098 ']' */ { 0x22300000, 12, 107}, /* 3099 'k' */ { 0x22c00000, 12, 1}, /* 3100 '0x01' */ { 0x22d00000, 12, 117}, /* 3101 'u' */ { 0x78900000, 12, 0}, /* 3102 '0x00' */ { 0x22200000, 13, 122}, /* 3103 'z' */ { 0x78880000, 13, 34}, /* 3104 '\"' */ { 0x222c0000, 14, 106}, /* 3105 'j' */ { 0x78840000, 14, 50}, /* 3106 '2' */ { 0x22280000, 15, 121}, /* 3107 'y' */ { 0x222a0000, 15, 120}, /* 3108 'x' */ { 0x78800000, 16, 118}, /* 3109 'v' */ { 0x78810000, 16, 84}, /* 3110 'T' */ { 0x78820000, 16, 69}, /* 3111 'E' */ { 0x78830000, 16, 80}, /* 3112 'P' */ /* 37 */ { 0x80000000, 2, 101}, /* 3113 'e' */ { 0x20000000, 3, 97}, /* 3114 'a' */ { 0x60000000, 3, 122}, /* 3115 'z' */ { 0xc0000000, 3, 32}, /* 3116 ' ' */ { 0xe0000000, 3, 105}, /* 3117 'i' */ { 0x10000000, 4, 108}, /* 3118 'l' */ { 0x40000000, 4, 121}, /* 3119 'y' */ { 0x50000000, 5, 111}, /* 3120 'o' */ { 0x00000000, 6, 99}, /* 3121 'c' */ { 0x08000000, 6, 44}, /* 3122 ',' */ { 0x0c000000, 6, 46}, /* 3123 '.' */ { 0x58000000, 6, 119}, /* 3124 'w' */ { 0x04000000, 7, 39}, /* 3125 '\'' */ { 0x06000000, 8, 58}, /* 3126 ':' */ { 0x07000000, 8, 116}, /* 3127 't' */ { 0x5d000000, 8, 109}, /* 3128 'm' */ { 0x5c000000, 9, 107}, /* 3129 'k' */ { 0x5e000000, 9, 45}, /* 3130 '-' */ { 0x5e800000, 9, 117}, /* 3131 'u' */ { 0x5f800000, 9, 98}, /* 3132 'b' */ { 0x5c800000, 11, 115}, /* 3133 's' */ { 0x5ca00000, 11, 47}, /* 3134 '/' */ { 0x5ce00000, 11, 100}, /* 3135 'd' */ { 0x5f200000, 11, 112}, /* 3136 'p' */ { 0x5f600000, 11, 63}, /* 3137 '?' */ { 0x5cc00000, 12, 104}, /* 3138 'h' */ { 0x5f000000, 12, 64}, /* 3139 '@' */ { 0x5f400000, 12, 41}, /* 3140 ')' */ { 0x5cd00000, 13, 33}, /* 3141 '!' */ { 0x5f180000, 13, 118}, /* 3142 'v' */ { 0x5f500000, 13, 103}, /* 3143 'g' */ { 0x5cd80000, 14, 102}, /* 3144 'f' */ { 0x5cdc0000, 14, 114}, /* 3145 'r' */ { 0x5f100000, 14, 113}, /* 3146 'q' */ { 0x5f140000, 14, 110}, /* 3147 'n' */ { 0x5f580000, 14, 1}, /* 3148 '0x01' */ { 0x5f5c0000, 14, 93}, /* 3149 ']' */ /* 2 */ { 0x00000000, 1, 1}, /* 3150 '0x01' */ { 0x80000000, 1, 1}, /* 3151 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 3152 '0x01' */ { 0x80000000, 1, 1}, /* 3153 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 3154 '0x01' */ { 0x80000000, 1, 0}, /* 3155 '0x00' */ /* 2 */ { 0x00000000, 1, 1}, /* 3156 '0x01' */ { 0x80000000, 1, 1}, /* 3157 '0x01' */ /* 2 */ { 0x00000000, 1, 1}, /* 3158 '0x01' */ { 0x80000000, 1, 1} /* 3159 '0x01' */ }; unsigned fsat_index_2[] = { 0, /* 0 */ 51, /* 1 */ 53, /* 2 */ 53, /* 3 */ 55, /* 4 */ 57, /* 5 */ 59, /* 6 */ 61, /* 7 */ 63, /* 8 */ 65, /* 9 */ 67, /* 10 */ 69, /* 11 */ 71, /* 12 */ 73, /* 13 */ 75, /* 14 */ 77, /* 15 */ 79, /* 16 */ 81, /* 17 */ 83, /* 18 */ 85, /* 19 */ 87, /* 20 */ 89, /* 21 */ 91, /* 22 */ 93, /* 23 */ 95, /* 24 */ 97, /* 25 */ 99, /* 26 */ 101, /* 27 */ 103, /* 28 */ 105, /* 29 */ 107, /* 30 */ 109, /* 31 */ 111, /* 32 */ 191, /* 33 */ 204, /* 34 */ 240, /* 35 */ 242, /* 36 */ 250, /* 37 */ 253, /* 38 */ 265, /* 39 */ 336, /* 40 */ 391, /* 41 */ 403, /* 42 */ 416, /* 43 */ 419, /* 44 */ 439, /* 45 */ 503, /* 46 */ 568, /* 47 */ 619, /* 48 */ 654, /* 49 */ 692, /* 50 */ 724, /* 51 */ 760, /* 52 */ 795, /* 53 */ 827, /* 54 */ 860, /* 55 */ 891, /* 56 */ 922, /* 57 */ 950, /* 58 */ 959, /* 59 */ 961, /* 60 */ 963, /* 61 */ 965, /* 62 */ 967, /* 63 */ 979, /* 64 */ 985, /* 65 */ 1043, /* 66 */ 1083, /* 67 */ 1130, /* 68 */ 1177, /* 69 */ 1231, /* 70 */ 1267, /* 71 */ 1304, /* 72 */ 1336, /* 73 */ 1388, /* 74 */ 1417, /* 75 */ 1457, /* 76 */ 1493, /* 77 */ 1540, /* 78 */ 1575, /* 79 */ 1634, /* 80 */ 1673, /* 81 */ 1686, /* 82 */ 1723, /* 83 */ 1782, /* 84 */ 1826, /* 85 */ 1871, /* 86 */ 1909, /* 87 */ 1939, /* 88 */ 1963, /* 89 */ 1987, /* 90 */ 2005, /* 91 */ 2039, /* 92 */ 2041, /* 93 */ 2050, /* 94 */ 2052, /* 95 */ 2054, /* 96 */ 2085, /* 97 */ 2136, /* 98 */ 2175, /* 99 */ 2232, /* 100 */ 2278, /* 101 */ 2339, /* 102 */ 2374, /* 103 */ 2414, /* 104 */ 2455, /* 105 */ 2499, /* 106 */ 2513, /* 107 */ 2553, /* 108 */ 2596, /* 109 */ 2636, /* 110 */ 2680, /* 111 */ 2728, /* 112 */ 2767, /* 113 */ 2780, /* 114 */ 2827, /* 115 */ 2872, /* 116 */ 2921, /* 117 */ 2964, /* 118 */ 2990, /* 119 */ 3029, /* 120 */ 3068, /* 121 */ 3113, /* 122 */ 3150, /* 123 */ 3152, /* 124 */ 3154, /* 125 */ 3156, /* 126 */ 3158, /* 127 */ 3160 /* 128 */ }; dvbstreamer-2.1.0/src/plugins/lcnquery.c000077500000000000000000000266311217721213100203160ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA lcnquery.c Logical Channel Number Query Plugin. */ #include #include #include #include #include #include "logging.h" #include "plugin.h" #include "dbase.h" #include "tuning.h" #include "services.h" #include "multiplexes.h" #include "dvbpsi/nit.h" #include "dvbpsi/dr_83.h" /******************************************************************************* * Defines * *******************************************************************************/ /* Database entry names */ #define LCNENTRIES_TABLE "LCNEntries" #define LCNENTRY_NUMBER "number" #define LCNENTRY_ONETID "networkId" #define LCNENTRY_TSID "tsId" #define LCNENTRY_SERVICEID "serviceId" #define LCNENTRY_VISIBLE "visible" #define LCNENTRY_FIELDS LCNENTRY_NUMBER "," \ LCNENTRY_ONETID "," \ LCNENTRY_TSID "," \ LCNENTRY_SERVICEID "," \ LCNENTRY_VISIBLE #define MAX_ENTRIES 999 /******************************************************************************* * Typedefs * *******************************************************************************/ /* LCN Entry structure */ #define ONETID_INVALID 0 typedef struct LCNEntry_s { uint16_t networkId; uint16_t tsId; uint16_t serviceId; bool visible; }LCNEntry_t; /******************************************************************************* * Prototypes * *******************************************************************************/ static void ProcessNIT(dvbpsi_nit_t *nit); static void LCNQueryInstalled(bool installed ); static void CommandListLCN(int argc, char **argv); static void CommandFindLCN(int argc, char **argv); static void CommandSelectLCN(int argc, char **argv); static LCNEntry_t *GetEntry(int lcn); /******************************************************************************* * Global variables * *******************************************************************************/ static LCNEntry_t entries[MAX_ENTRIES]; /******************************************************************************* * Plugin Setup * *******************************************************************************/ PLUGIN_FEATURES( PLUGIN_FEATURE_NITPROCESSOR(ProcessNIT), PLUGIN_FEATURE_INSTALL(LCNQueryInstalled) ); PLUGIN_COMMANDS( { "lslcn", 0, 1, "List the logical channel numbers to services.", "List all the logical channel numbers and the services they refer to.", CommandListLCN }, { "findlcn", 1, 1, "Find the service for a logical channel number.", "Given a logical channel number return the service name it refers to.", CommandFindLCN }, { "selectlcn", 1, 1, "Select the service from a logical channel number.", "Select service refered to by the logical channel number as the primary service.", CommandSelectLCN } ); PLUGIN_INTERFACE_CF( PLUGIN_FOR_DVB, "LCNQuery", "0.2", "Logical Channel Number look-up/list", "charrea6@users.sourceforge.net" ); /******************************************************************************* * Plugin Install Function * *******************************************************************************/ static void LCNQueryInstalled(bool installed) { STATEMENT_INIT; if (installed) { int i; for (i = 0; i < MAX_ENTRIES; i++) { entries[i].networkId = ONETID_INVALID; entries[i].visible = FALSE; } // Load from the database sqlite3_exec(DBaseConnectionGet(), "CREATE TABLE " LCNENTRIES_TABLE "(" LCNENTRY_NUMBER " PRIMARY KEY," LCNENTRY_ONETID "," LCNENTRY_TSID "," LCNENTRY_SERVICEID "," LCNENTRY_VISIBLE ");", NULL, NULL, NULL); STATEMENT_PREPARE("SELECT " LCNENTRY_FIELDS " FROM " LCNENTRIES_TABLE ";"); if (rc == SQLITE_OK) { bool more = TRUE; while (more) { STATEMENT_STEP(); if (rc == SQLITE_ROW) { LCNEntry_t *entry; int lcn = STATEMENT_COLUMN_INT(0); entry = GetEntry(lcn); if (entry) { entry->networkId = STATEMENT_COLUMN_INT(1); entry->tsId = STATEMENT_COLUMN_INT(2); entry->serviceId= STATEMENT_COLUMN_INT(3); entry->visible = STATEMENT_COLUMN_INT(4); } } else { more = FALSE; } } } STATEMENT_FINALIZE(); } else { int i; // Store to the database sqlite3_exec(DBaseConnectionGet(), "BEGIN TRANSACTION;", NULL, NULL, NULL); sqlite3_exec(DBaseConnectionGet(), "DELETE * FROM " LCNENTRIES_TABLE ";", NULL, NULL, NULL); for (i = 0; i < MAX_ENTRIES; i ++) { if (entries[i].networkId != ONETID_INVALID) { STATEMENT_PREPAREVA("INSERT INTO " LCNENTRIES_TABLE " VALUES (%d,%d,%d,%d,%d);", i + 1, entries[i].networkId, entries[i].tsId, entries[i].serviceId, entries[i].visible); STATEMENT_STEP(); STATEMENT_FINALIZE(); } } sqlite3_exec(DBaseConnectionGet(), "COMMIT TRANSACTION;", NULL, NULL, NULL); } } /******************************************************************************* * NIT Processing Function * *******************************************************************************/ static void ProcessNIT(dvbpsi_nit_t *nit) { dvbpsi_nit_transport_t *transport = nit->p_first_transport; for (transport= nit->p_first_transport; transport; transport = transport->p_next) { dvbpsi_descriptor_t *descriptor; for (descriptor = transport->p_first_descriptor; descriptor; descriptor = descriptor->p_next) { if (descriptor->i_tag == 0x83) { dvbpsi_lcn_dr_t * lcn_descriptor = dvbpsi_DecodeLCNDr(descriptor); if (lcn_descriptor) { int i; for (i = 0; i < lcn_descriptor->i_number_of_entries; i ++) { LCNEntry_t *entry; entry = GetEntry(lcn_descriptor->p_entries[i].i_logical_channel_number); if (entry) { if (!entry->visible || lcn_descriptor->p_entries[i].b_visible_service_flag) { entry->networkId = transport->i_original_network_id; entry->tsId = transport->i_ts_id; entry->serviceId = lcn_descriptor->p_entries[i].i_service_id; entry->visible = lcn_descriptor->p_entries[i].b_visible_service_flag; } } } } } } } } /******************************************************************************* * Command Functions * *******************************************************************************/ static void CommandListLCN(int argc, char **argv) { int i; int count = 0; bool printId = FALSE; if (argc > 0) { for (i = 0; i < argc; i ++) { if (strcmp(argv[i], "-id") == 0) { printId = TRUE; } } } for ( i = 0; i < MAX_ENTRIES; i ++) { if (entries[i].networkId != ONETID_INVALID) { Service_t *service = ServiceFindFQID(entries[i].networkId, entries[i].tsId, entries[i].serviceId); if (service) { if (entries[i].visible) { if (printId) { Multiplex_t *multiplex = MultiplexFindUID(service->multiplexUID); CommandPrintf("%4d : %04x.%04x.%04x : %s\n", i + 1, multiplex->networkId & 0xffff, multiplex->tsId & 0xffff, service->id, service->name); MultiplexRefDec(multiplex); } else { CommandPrintf("%4d : %s\n", i + 1, service->name); } count ++; } ServiceRefDec(service); } } } CommandError(COMMAND_OK, "%d channels found", count); } static void CommandFindLCN(int argc, char **argv) { int lcn = atoi(argv[0]); Service_t *service; LCNEntry_t *entry; if (lcn == 0) { CommandError(COMMAND_ERROR_WRONG_ARGS, "Unknown Logical Channel Number."); return; } entry = GetEntry(lcn); if (entry->networkId == ONETID_INVALID) { CommandError(COMMAND_ERROR_GENERIC, "No such Logical Channel Number."); return; } service = ServiceFindFQID(entry->networkId, entry->tsId, entry->serviceId); if (service) { CommandPrintf("%s\n", service->name); ServiceRefDec(service); } } static void CommandSelectLCN(int argc, char **argv) { int lcn = atoi(argv[0]); Service_t *service; LCNEntry_t *entry; if (lcn == 0) { CommandError(COMMAND_ERROR_WRONG_ARGS, "Unknown Logical Channel Number."); return; } entry = GetEntry(lcn); if (entry->networkId == ONETID_INVALID) { CommandError(COMMAND_ERROR_GENERIC, "No such Logical Channel Number."); return; } service = ServiceFindFQID(entry->networkId, entry->tsId, entry->serviceId); if (service) { TuningCurrentServiceSet(service); CommandPrintf("%04x.%04x.%04x : \"%s\"\n", entry->networkId, entry->tsId, entry->serviceId, service->name); ServiceRefDec(service); } else { CommandError(COMMAND_ERROR_GENERIC, "Failed to find service!"); } } static LCNEntry_t *GetEntry(int lcn) { return &entries[lcn - 1]; } dvbstreamer-2.1.0/src/plugins/libdsmcc/000077500000000000000000000000001217721213100200555ustar00rootroot00000000000000dvbstreamer-2.1.0/src/plugins/libdsmcc/dsmcc-biop.c000066400000000000000000000455001217721213100222450ustar00rootroot00000000000000#include #include #include #ifdef USE_MPATROL #include #endif #include "logging.h" #include "libdsmcc.h" // FILE *biop_fd; // FILE *bd_fd; /* struct biop_stream * dsmcc_biop_process_strream() { ; } struct biop_streamevent * dsmcc_biop_process_event() { ; } */ int dsmcc_biop_process_msg_hdr(struct biop_message *bm, struct cache_module_data *cachep) { struct biop_msg_header *hdr = &bm->hdr; unsigned char *Data = cachep->data + cachep->curp; int off = 0; if (Data == NULL) { return -1; } // fprintf(bd_fd, "Hdr -> Checking magic\n"); if (Data[0] != 'B' || Data[1] != 'I' || Data[2] != 'O' || Data[3] != 'P') { return -2; } // fprintf(bd_fd, "Hdr -> Magic OK!\n"); // fflush(bd_fd); off += 4;/* skip magic */ hdr->version_major = Data[off++]; // fprintf(bd_fd, "Hdr -> Version Major = %d\n", hdr->version_major); hdr->version_minor = Data[off++]; off += 2; /* skip byte order & message type */ // fprintf(bd_fd, "Hdr -> Version Minor = %d\n", hdr->version_minor); hdr->message_size = (Data[off] << 24) | (Data[off+1] << 16) | (Data[off+2] << 8) | Data[off+3]; off += 4; // fprintf(bd_fd, "Hdr -> Message Size = %d\n", hdr->message_size); hdr->objkey_len = Data[off++]; // fprintf(bd_fd, "Hdr -> ObjKey Len = %d\n", hdr->objkey_len); hdr->objkey = (char *)malloc(hdr->objkey_len); memcpy(hdr->objkey, Data + off, hdr->objkey_len); // fprintf(bd_fd, "Hdr -> ObjKey = %c%c%c%c\n", hdr->objkey[0], hdr->objkey[1], hdr->objkey[2], hdr->objkey[3]); off += hdr->objkey_len; hdr->objkind_len = (Data[off] << 24) | (Data[off+1] << 16) | (Data[off+2] << 8) | Data[off+3]; off += 4; // fprintf(bd_fd, "Hdr -> ObjKind Len = %ld\n", hdr->objkind_len); hdr->objkind = (char *)malloc(hdr->objkind_len); memcpy(hdr->objkind, Data + off, hdr->objkind_len); // fprintf(bd_fd, "Hdr -> ObjKind Data = %s\n", hdr->objkind); off += hdr->objkind_len; hdr->objinfo_len = Data[off] << 8 | Data[off+1]; off += 2; // fprintf(bd_fd, "Hdr -> ObjInfo Len = %d\n", hdr->objkey_len); hdr->objinfo = (char *)malloc(hdr->objinfo_len); memcpy(hdr->objinfo, Data + off, hdr->objinfo_len); // fprintf(bd_fd, "Hdr -> ObjInfo = %c%c%c\n", hdr->objinfo[0], hdr->objinfo[1], hdr->objinfo[2]); off += hdr->objinfo_len; cachep->curp += off; return 0; } int dsmcc_biop_process_name_comp(struct biop_name_comp *comp, unsigned char *Data) { int off = 0; comp->id_len = Data[off++]; // fprintf(bd_fd, "Dir -> Binding -> Name -> Comp -> Id Len = %d\n", comp->id_len); comp->id = (char *)malloc(comp->id_len); memcpy(comp->id, Data + off, comp->id_len); off += comp->id_len; comp->kind_len = Data[off++]; // fprintf(bd_fd, "Dir -> Binding -> Name -> Comp -> Kind Len = %d\n", comp->kind_len); comp->kind = (char *)malloc(comp->kind_len); memcpy(comp->kind, Data + off, comp->kind_len); off += comp->kind_len; // fprintf(bd_fd, "Dir -> Binding -> Name -> Comp -> Kind = %s\n", comp->kind); return off; } int dsmcc_biop_process_name(struct biop_name *name, unsigned char *Data) { int i, off = 0, ret; name->comp_count = Data[0]; // fprintf(bd_fd, "Dir -> Binding -> Name -> Comp Count = %d\n", name->comp_count); off++; name->comps = (struct biop_name_comp *) malloc(sizeof(struct biop_name_comp) * name->comp_count); for (i = 0; i < name->comp_count; i++) { ret = dsmcc_biop_process_name_comp(&name->comps[i], Data + off); if (ret > 0) { off += ret; } else { /* TODO error */ } } return off; } int dsmcc_biop_process_binding(struct biop_binding *bind, unsigned char *Data) { int off = 0, ret; // fprintf(bd_fd, "Dir -> Binding -> Processing Name \n"); ret = dsmcc_biop_process_name(&bind->name, Data); if (ret > 0) { off += ret; } else { /* TODO error */ } bind->binding_type = Data[off++]; // fprintf(bd_fd, "Dir -> Binding -> Type = %d\n", bind->binding_type); ret = dsmcc_biop_process_ior(&bind->ior, Data + off); if (ret > 0) { off += ret; } else { /*TODO error */ } bind->objinfo_len = (Data[off] << 8) | Data[off+1]; // fprintf(bd_fd, "Dir -> Binding -> ObjInfo Len = %d\n", bind->objinfo_len); off += 2; if (bind->objinfo_len > 0) { bind->objinfo = (char *)malloc(bind->objinfo_len); memcpy(bind->objinfo, Data + off, bind->objinfo_len); } else { bind->objinfo = NULL; } // fprintf(bd_fd, "Dir -> Binding -> ObjInfo = %s\n", bind->objinfo); off += bind->objinfo_len; return off; } int dsmcc_biop_process_srg(struct dsmcc_status *status, struct biop_message *bm, struct cache_module_data *cachep, struct cache *filecache) { unsigned int i; int off = 0, ret; unsigned char *Data = cachep->data + cachep->curp; off++; /* skip service context count */ bm->body.srg.msgbody_len = (Data[off] << 24) | (Data[off+1] << 16) | (Data[off+2] << 8) | Data[off+3]; LogModule(LOG_DEBUG, LIBDSMCC, "Gateway -> MsgBody Len = %ld\n", bm->body.srg.msgbody_len); off += 4; bm->body.srg.bindings_count = Data[off] << 8 | Data[off+1]; LogModule(LOG_DEBUG, LIBDSMCC, "Gateway -> Bindings Count = %d\n", bm->body.srg.bindings_count); off += 2; for (i = 0; i < bm->body.srg.bindings_count; i++) { ret = dsmcc_biop_process_binding(&bm->body.srg.binding, Data + off); if (ret > 0) { off += ret; } else { /* TODO error */ } if (!strcmp("dir", bm->body.srg.binding.name.comps[0].kind)) { dsmcc_cache_dir_info(filecache, 0, 0, NULL, &bm->body.srg.binding); dsmcc_add_stream(status, bm->body.dir.binding.ior.body.full.obj_loc.carousel_id, bm->body.dir.binding.ior.body.full.dsm_conn.tap.assoc_tag); } else if (!strcmp("fil", bm->body.srg.binding.name.comps[0].kind)) { dsmcc_cache_file_info(filecache, 0, 0, NULL, &bm->body.srg.binding); } dsmcc_biop_free_binding(&bm->body.srg.binding); } cachep->curp += off; return 0; } void dsmcc_biop_free_binding(struct biop_binding *binding) { int i; for (i = 0; i < binding->name.comp_count; i++) { if (binding->name.comps[i].id_len > 0) free(binding->name.comps[i].id); if (binding->name.comps[i].kind_len > 0) free(binding->name.comps[i].kind); } free(binding->name.comps); if (binding->ior.type_id_len > 0) free(binding->ior.type_id); if (binding->ior.body.full.obj_loc.objkey_len > 0) free(binding->ior.body.full.obj_loc.objkey); if (binding->ior.body.full.dsm_conn.tap.selector_len > 0) free(binding->ior.body.full.dsm_conn.tap.selector_data); if (binding->objinfo_len > 0) free(binding->objinfo); } void dsmcc_biop_process_dir(struct dsmcc_status *status, struct biop_message *bm, struct cache_module_data *cachep, struct cache *filecache) { unsigned int i; int off = 0, ret; unsigned char *Data = cachep->data + cachep->curp; off++; /* skip service context count */ bm->body.dir.msgbody_len = (Data[off] << 24) | (Data[off+1] << 16) | (Data[off+2] << 8) | Data[off+3]; LogModule(LOG_DEBUG, LIBDSMCC, "Dir -> MsgBody Len = %ld\n", bm->body.dir.msgbody_len); off += 4; bm->body.dir.bindings_count = Data[off] << 8 | Data[off+1]; LogModule(LOG_DEBUG, LIBDSMCC, "Dir -> Bindings Count = %d\n", bm->body.dir.bindings_count); off += 2; for (i = 0; i < bm->body.dir.bindings_count; i++) { ret = dsmcc_biop_process_binding(&bm->body.dir.binding, Data + off); if (ret > 0) { off += ret; } else { /* TODO error */ } if (!strcmp("dir", bm->body.dir.binding.name.comps[0].kind)) { dsmcc_cache_dir_info(filecache, cachep->module_id, bm->hdr.objkey_len, bm->hdr.objkey, &bm->body.dir.binding); dsmcc_add_stream(status, bm->body.dir.binding.ior.body.full.obj_loc.carousel_id, bm->body.dir.binding.ior.body.full.dsm_conn.tap.assoc_tag); } else if (!strcmp("fil", bm->body.dir.binding.name.comps[0].kind)) { dsmcc_cache_file_info(filecache, cachep->module_id, bm->hdr.objkey_len, bm->hdr.objkey, &bm->body.dir.binding); } dsmcc_biop_free_binding(&bm->body.dir.binding); } cachep->curp += off; filecache->num_dirs--; } void dsmcc_biop_process_file(struct biop_message *bm, struct cache_module_data *cachep, struct cache *filecache) { int off = 0; unsigned char *Data = cachep->data + cachep->curp; /* skip service contect count */ off++; bm->body.file.msgbody_len = (Data[off] << 24) | (Data[off+1] << 16) | (Data[off+2] << 8) | Data[off+3]; off += 4; // fprintf(bd_fd, "File -> MsgBody Len = %ld\n",bm->body.file.msgbody_len); bm->body.file.content_len = (Data[off] << 24) | (Data[off+1] << 16) | (Data[off+2] << 8) | Data[off+3]; off += 4; // fprintf(bd_fd, "File -> Content Len = %ld\n", bm->body.file.content_len); cachep->curp += off; dsmcc_cache_file(filecache, bm, cachep); cachep->curp += bm->body.file.content_len; } void dsmcc_biop_process_data(struct dsmcc_status *status, struct cache *filecache, struct cache_module_data *cachep) { struct biop_message bm; struct descriptor *desc; int ret; unsigned int len; for (desc = cachep->descriptors; desc != NULL; desc = desc->next) { if (desc->tag == 0x09) { break; } } if (desc != NULL) { len = desc->data.compressed.original_size; } else { len = cachep->size; } cachep->curp = 0; LogModule(LOG_DEBUG, LIBDSMCC, "[libbiop] Module size (uncompressed) = %d\n", len); LogModule(LOG_DEBUG, LIBDSMCC, "Full Length - %d\n", len); /* Replace off with cachep->curp.... */ while (cachep->curp < len) { LogModule(LOG_DEBUG, LIBDSMCC, "Current %ld / Full %d\n", cachep->curp, len); LogModule(LOG_DEBUG, LIBDSMCC, "Processing header\n"); /* Parse header */ ret = dsmcc_biop_process_msg_hdr(&bm, cachep); if (ret < 0) { LogModule(LOG_DEBUG, LIBDSMCC, "[libbiop] Invalid biop header, dropping rest of module\n"); /* not valid, skip rest of data */ break; } /* Handle each message type */ if (strcmp(bm.hdr.objkind, "fil") == 0) { LogModule(LOG_DEBUG, LIBDSMCC, "[libbiop] Processing file\n"); dsmcc_biop_process_file(&bm, cachep, filecache); } else if (strcmp(bm.hdr.objkind, "dir") == 0) { LogModule(LOG_DEBUG, LIBDSMCC, "[libbiop] Processing directory\n"); dsmcc_biop_process_dir(status, &bm, cachep, filecache); } else if (strcmp(bm.hdr.objkind, "srg") == 0) { LogModule(LOG_DEBUG, LIBDSMCC, "[libbiop] Processing gateway\n"); dsmcc_biop_process_srg(status, &bm, cachep, filecache); } else if (strcmp(bm.hdr.objkind, "str") == 0) { LogModule(LOG_DEBUG, LIBDSMCC, "[libbiop] Processing stream (todo)\n"); /*dsmcc_biop_process_stream(&bm, cachep); */ } else if (strcmp(bm.hdr.objkind, "ste") == 0) { LogModule(LOG_DEBUG, LIBDSMCC, "[libbiop] Processing events (todo)\n"); /*dsmcc_biop_process_event(&bm, cachep); */ } else { /* Error */ LogModule(LOG_DEBUG, LIBDSMCC, "[libbiop] Unknown type %s", bm.hdr.objkind); } free(bm.hdr.objkey); free(bm.hdr.objkind); free(bm.hdr.objinfo); } // fclose(bd_fd); } int dsmcc_biop_process_module_info(struct biop_module_info *modinfo, unsigned char *Data) { int off, ret; // biop_fd = fopen("/tmp/biop2.debug", "a"); modinfo->mod_timeout = (Data[0] << 24) | (Data[1] << 16) | (Data[2] << 8) | Data[3]; // fprintf(biop_fd, "Module Info -> Mod Timeout = %ld\n", modinfo->mod_timeout); modinfo->block_timeout = (Data[4] << 24) | (Data[5] << 16) | (Data[6] << 8) | Data[7]; // fprintf(biop_fd, "Module Info -> BLock Timeout = %ld\n", modinfo->block_timeout); modinfo->min_blocktime = (Data[8] << 24) | (Data[9] << 16) | (Data[10] << 8) | Data[11]; // fprintf(biop_fd, "Module Info -> Min Block Timeout = %ld\n", modinfo->min_blocktime); modinfo->taps_count = Data[12]; // fprintf(biop_fd,"Module Info -> Taps Count = %d\n",modinfo->taps_count); off = 13; /* only 1 allowed TODO - may not be first though ? */ ret = dsmcc_biop_process_tap(&modinfo->tap, Data + off); if (ret > 0) { off += ret; } else { /* TODO error */ } modinfo->userinfo_len = Data[off++]; // fprintf(biop_fd, "Module Info -> UserInfo Len = %d\n", modinfo->userinfo_len); if (modinfo->userinfo_len > 0) { modinfo->descriptors = dsmcc_desc_process(Data + off, modinfo->userinfo_len, &off); } else { modinfo->descriptors = NULL; } // fclose(biop_fd); return off; } int dsmcc_biop_process_tap(struct biop_tap *tap, unsigned char *Data) { int off = 0; tap->id = (Data[0] << 8) | Data[1]; // fprintf(biop_fd, "Tap -> ID = %X\n",tap->id); off += 2; tap->use = (Data[off] << 8) | Data[off+1]; // fprintf(biop_fd, "Tap -> Use = %X\n",tap->use); off += 2; tap->assoc_tag = (Data[off] << 8) | Data[off+1]; // syslog(LOG_ERR, ("Tap for stream %X", tap->assoc_tag); // fprintf(biop_fd, "Tap -> Assoc = %X\n",tap->assoc_tag); off += 2; tap->selector_len = Data[off++]; // fprintf(biop_fd, "Tap -> Selector Length= %d\n",tap->selector_len); tap->selector_data = (char *)malloc(tap->selector_len); memcpy(tap->selector_data, Data + off, tap->selector_len); off += tap->selector_len; return off; } int dsmcc_biop_process_binder(struct biop_dsm_connbinder *binder, unsigned char *Data) { int off = 0, ret; binder->component_tag = (Data[0] << 24) | (Data[1] << 16) | (Data[2] << 8) | Data[3]; off += 4; // fprintf(biop_fd, "Binder -> Component_tag = %lX\n", binder->component_tag); binder->component_data_len = Data[off++]; // fprintf(biop_fd, "Binder -> Component data len = %d\n", binder->component_data_len); binder->taps_count = Data[off++]; // fprintf(biop_fd, "Binder -> Taps count = %d\n",binder->taps_count); /* UKProfile - only first tap read */ ret = dsmcc_biop_process_tap(&binder->tap, Data + off); if (ret > 0) { off += ret; } else { /* TODO error */ } return off; } int dsmcc_biop_process_object(struct biop_obj_location *loc, unsigned char *Data) { int off = 0; loc->component_tag = (Data[0] << 24) | (Data[1] << 16) | (Data[2] << 8) | Data[3]; // fprintf(biop_fd, "Object -> Component_tag = %lX\n",loc->component_tag); off += 4; loc->component_data_len = Data[off++]; // fprintf(biop_fd, "Object -> Component data len = %d\n", loc->component_data_len); loc->carousel_id = (Data[off] << 24) | (Data[off+1] << 16) | (Data[off+2] << 8) | Data[off+3]; // fprintf(biop_fd, "Object -> Carousel id = %ld\n",loc->carousel_id); off += 4; loc->module_id = (Data[off] << 8) | Data[off+1]; // fprintf(biop_fd, "Object -> Module id = %d\n",loc->module_id); off += 2; loc->version_major = Data[off++]; loc->version_minor = Data[off++]; // fprintf(biop_fd, "Object -> Version = (%d/%d)\n", loc->version_major, loc->version_minor); loc->objkey_len = Data[off++]; /* <= 4 */ // fprintf(biop_fd, "Object -> Key Length = %d\n",loc->objkey_len ); loc->objkey = (char *)malloc(loc->objkey_len); memcpy(loc->objkey, Data + off, loc->objkey_len); off += loc->objkey_len; return off; } int dsmcc_biop_process_lite(struct biop_profile_lite *lite, unsigned char *Data) { LogModule(LOG_ERROR, LIBDSMCC, "BiopLite - Not Implemented Yet"); return 0; } int dsmcc_biop_process_body(struct biop_profile_body *body, unsigned char *Data) { int off = 0, ret; body->data_len = (Data[off] << 24) | (Data[off+1] << 16) | (Data[off+2] << 8) | Data[off+3]; // fprintf(biop_fd, "Body -> Data Length = %ld\n", body->data_len); off += 4; /* skip bit order */ off += 1; body->lite_components_count = Data[off++]; // fprintf(biop_fd, "Body -> Lite Components Count= %x\n", body->lite_components_count); ret = dsmcc_biop_process_object(&body->obj_loc, Data + off); if (ret > 0) { off += ret; } else { /* TODO error */ } ret = dsmcc_biop_process_binder(&body->dsm_conn, Data + off); if (ret > 0) { off += ret; } else { /* TODO error */ } /* UKProfile - ignore anything else */ return off; } int dsmcc_biop_process_ior(struct biop_ior *ior, unsigned char *Data) { int off = 0, ret; // biop_fd = fopen("/tmp/biop.debug", "a"); // fprintf(biop_fd, "New BIOP IOR\n"); ior->type_id_len = (Data[0] << 24) | (Data[1] << 16) | (Data[2] << 8) | (Data[3]); // fprintf(biop_fd, "Type id length = %ld\n", ior->type_id_len); ior->type_id = (char *)malloc(ior->type_id_len); off += 4; memcpy(ior->type_id, Data + off, ior->type_id_len); off += ior->type_id_len; ior->tagged_profiles_count = (Data[off] << 24) | (Data[off+1] << 16) | (Data[off+2] << 8) | (Data[off+3]); // fprintf(biop_fd,"Tagged Profiles Count= %ld\n", ior->tagged_profiles_count); off += 4; ior->profile_id_tag = (Data[off] << 24) | (Data[off+1] << 16) | (Data[off+2] << 8) | Data[off+3]; // fprintf(biop_fd, "Profile Id Tag= %lX\n", ior->profile_id_tag); off += 4; // fprintf(biop_fd, "Profile Id Tag last= %lX\n", (ior->profile_id_tag & 0xFF)); if ((ior->profile_id_tag & 0xFF) == 0x06) { ret = dsmcc_biop_process_body(&ior->body.full, Data + off); if (ret > 0) { off += ret; } else { /* TODO error */ } } else if ((ior->profile_id_tag & 0xFF) == 0x05) { ret = dsmcc_biop_process_lite(&ior->body.lite, Data + off); if (ret > 0) { off += ret; } else { /* TODO error */ } } /* UKProfile - receiver may ignore other profiles */ // fclose(biop_fd); return off; } dvbstreamer-2.1.0/src/plugins/libdsmcc/dsmcc-biop.h000066400000000000000000000126231217721213100222520ustar00rootroot00000000000000#ifndef DSMCC_BIOP_H #define DSMCC_BIOP_H #include "dsmcc-cache.h" #include "dsmcc-descriptor.h" #define BIOP_OBJ_OFFSET 11 #define BIOP_TAG_OFFSET 17 struct biop_name_comp { unsigned char id_len; char *id; unsigned char kind_len; char *kind; }; struct biop_name { unsigned char comp_count; struct biop_name_comp *comps; }; struct biop_body_file { unsigned long msgbody_len; unsigned long content_len; /* char *content_byte; */ }; /* struct biop_body_stream { struct str_info_t info_t; unsigned char contextlist_count}; struct context *contexts; unsigned long msgbody_len; unsigned char taps_count; struct biop_tap *taps; }; struct biop_body_stream_event { struct str_info_t info_t; struct str_eventlist_t *eventlist_t; unsigned char contextlist_count; struct context *contexts; unsigned long msgbody_len; unsigned char taps_count; struct biop_tap *taps; unsigned char eventids_count; unsigned short *eventids; }; struct str_info_t { unsigned char aDesc_len; char *aDesc; unsigned long aSec; unsigned long aMicro; unsigned char audio; unsigned char video; unsigned char data; }; struct str_event_list_t event_list_t { unsigned short evNames_count; struct event_name *names; }; struct event_name { unsigned char length; char *data; }; */ struct biop_msg_header { unsigned char version_major; unsigned char version_minor; unsigned int message_size; unsigned char objkey_len; char *objkey; unsigned long objkind_len; char *objkind; unsigned int objinfo_len; char *objinfo; }; struct biop_tap { unsigned short id; unsigned short use; unsigned short assoc_tag; unsigned short selector_len; char *selector_data; }; struct biop_module_info { unsigned long mod_timeout; unsigned long block_timeout; unsigned long min_blocktime; unsigned char taps_count; struct biop_tap tap; unsigned char userinfo_len; struct descriptor *descriptors; }; struct biop_dsm_connbinder { unsigned long component_tag; unsigned char component_data_len; unsigned char taps_count; struct biop_tap tap; }; struct biop_obj_location { unsigned long component_tag; char component_data_len; unsigned long carousel_id; unsigned short module_id; char version_major; char version_minor; unsigned char objkey_len; char *objkey; }; struct biop_profile_body { unsigned long data_len; char byte_order; char lite_components_count; struct biop_obj_location obj_loc; struct biop_dsm_connbinder dsm_conn; /* ignore the rest */ }; struct biop_profile_lite { ; }; struct biop_ior { unsigned long type_id_len; char *type_id; unsigned long tagged_profiles_count; unsigned long profile_id_tag; union { struct biop_profile_body full; struct biop_profile_lite lite; } body; /* UKProfile - ignore other profiles */ }; struct biop_binding { struct biop_name name; char binding_type; struct biop_ior ior; unsigned int objinfo_len; char *objinfo; }; struct biop_body_gateway { unsigned long msgbody_len; unsigned int bindings_count; struct biop_binding binding; }; struct biop_body_directory { unsigned long msgbody_len; unsigned int bindings_count; struct biop_binding binding; }; struct biop_message { struct biop_msg_header hdr; union { struct biop_body_file file; struct biop_body_directory dir; struct biop_body_gateway srg; /* struct biop_body_stream str; struct biop_body_streamevent eve; */ } body; }; struct dsmcc_module_info { unsigned short module_id; unsigned long module_size; unsigned char module_version; unsigned char module_info_len; struct biop_module_info modinfo; unsigned char *data; unsigned int curp; struct dsmcc_module_info *next; }; struct dsmcc_dsi { unsigned short data_len; unsigned short num_groups; /*struct dsmcc_group *groups */ struct biop_ior profile; unsigned short user_data_len; unsigned char *user_data; }; int dsmcc_biop_process_ior(struct biop_ior *, unsigned char *); int dsmcc_biop_process_name(struct biop_name *, unsigned char *); int dsmcc_biop_process_name_comp(struct biop_name_comp*, unsigned char *); int dsmcc_biop_process_binding(struct biop_binding*, unsigned char *Data); int dsmcc_biop_process_module_info(struct biop_module_info *, unsigned char *Data); void dsmcc_biop_process_data(struct dsmcc_status *status, struct cache *cache, struct cache_module_data *cachep); int dsmcc_biop_process_srg(struct dsmcc_status *status, struct biop_message *, struct cache_module_data *cachep, struct cache *cache); void dsmcc_biop_process_dir(struct dsmcc_status *status, struct biop_message *, struct cache_module_data *cachep, struct cache *cache); void dsmcc_biop_process_file(struct biop_message *, struct cache_module_data *cachep, struct cache *cache); int dsmcc_biop_process_msg_hdr(struct biop_message *, struct cache_module_data *cachep); int dsmcc_biop_process_tap(struct biop_tap *, unsigned char *); int dsmcc_biop_process_binder(struct biop_dsm_connbinder*, unsigned char*); int dsmcc_biop_process_object(struct biop_obj_location*, unsigned char*); int dsmcc_biop_process_body(struct biop_profile_body *, unsigned char *); int dsmcc_biop_process_lite(struct biop_profile_lite *, unsigned char *); void dsmcc_biop_free_binding(struct biop_binding *); #endif dvbstreamer-2.1.0/src/plugins/libdsmcc/dsmcc-cache.c000066400000000000000000000670031217721213100223610ustar00rootroot00000000000000#include #include #include #include #include #include #include #include "logging.h" #include "libdsmcc.h" // #include /* TODO This should be stored in obj_carousel structure */ void dsmcc_cache_init(struct cache *filecache, const char *channel_name) { /* TODO - load cache from disk into obj_carousel */ filecache->gateway = filecache->dir_cache = NULL; filecache->file_cache = NULL; filecache->data_cache = NULL; /* Write contents under channel name */ if (channel_name) { filecache->name = (char*)malloc(strlen(channel_name) + 1); strcpy(filecache->name, channel_name); } else { filecache->name = (char*)malloc(1); filecache->name = '\0'; } mkdir("/tmp/cache", 0755); /* By popular demand... */ filecache->num_files = filecache->num_dirs = filecache->total_files = filecache->total_dirs = 0; filecache->files = NULL; } void dsmcc_cache_free(struct cache *filecache) { struct cache_file *f, *fn; struct cache_dir *d, *dn; /* Free unconnected files */ f = filecache->file_cache; while (f != NULL) { fn = f->next; if (f->key_len > 0) { free(f->key); } if (f->filename != NULL) { free(f->filename); } if (f->data != NULL) { free(f->data); } if (f->p_key_len > 0) { free(f->p_key); } free(f); f = fn; } /* Free cached data */ f = filecache->data_cache; while (f != NULL) { fn = f->next; if (f->key_len > 0) { free(f->key); } if (f->data != NULL) { free(f->data); } free(f); f = fn; } /* Free unconnected dirs */ d = filecache->dir_cache; while (d != NULL) { dn = d->next; if (d->name != NULL) { free(d->name); } if (d->dirpath != NULL) { free(d->dirpath); } if (d->key_len > 0) { free(d->key); } if (d->p_key_len > 0) { free(d->p_key); } f = d->files; while (f != NULL) { fn = f->next; if (f->key_len > 0) { free(f->key); } if (f->filename != NULL) { free(f->filename); } if (f->data != NULL) { free(f->data); } if (f->p_key_len > 0) { free(f->p_key); } free(f); f = fn; } free(d); d = dn; } /* Free cache - TODO improve this */ if (filecache->gateway != NULL) dsmcc_cache_free_dir(filecache->gateway); filecache->file_cache = filecache->data_cache = NULL; filecache->gateway = filecache->dir_cache = NULL; if (filecache->name) free(filecache->name); } void dsmcc_cache_free_dir(struct cache_dir *d) { struct cache_dir *dn, *dnn; struct cache_file *f, *fn; if (d->sub != NULL) { dn = d->sub; while (dn != NULL) { dnn = dn->next; dsmcc_cache_free_dir(dn); dn = dnn; } } if (d->name != NULL) { free(d->name); } if (d->dirpath != NULL) { free(d->dirpath); } if (d->key_len > 0) { free(d->key); } if (d->p_key_len > 0) { free(d->p_key); } f = d->files; while (f != NULL) { fn = f->next; if (f->key_len > 0) { free(f->key); } if (f->filename != NULL) { free(f->filename); } if (f->data != NULL) { free(f->data); } if (f->p_key_len > 0) { free(f->p_key); } free(f); f = fn; } free(d); } unsigned int dsmcc_cache_key_cmp(char *str1, char *str2, unsigned int len1, unsigned int len2) { unsigned int i; /* Key Len must be equal */ if (len1 != len2) { return 0; } for (i = 0; i < len1; i++) { if (str1[i] != str2[i]) { return 0; } } return 1; } struct cache_dir * dsmcc_cache_scan_dir(struct cache_dir *dir, unsigned long car_id, unsigned short module_id, unsigned int key_len, char *key) { struct cache_dir *founddir, *subdir; if (dir == NULL) { return NULL; } if ((dir->carousel_id == car_id) && (dir->module_id == module_id) && dsmcc_cache_key_cmp(dir->key, key, dir->key_len, key_len)) { return dir; } /* Search sub dirs */ for (subdir = dir->sub; subdir != NULL; subdir = subdir->next) { founddir = dsmcc_cache_scan_dir(subdir, car_id, module_id, key_len, key); if (founddir != NULL) return founddir; } return NULL; } struct cache_dir * dsmcc_cache_dir_find(struct cache *filecache, unsigned long car_id, unsigned short module_id, unsigned int key_len, char *key) { struct cache_dir *dir, *fdir; struct cache_file *file, *nf; // fprintf(cache_fd,"Searching for dir %d/%d/(key)\n", module_id, key_len); /* Scan through known dirs and return details if known else NULL */ if (module_id == 0 && key_len == 0) { /* Return gateway object. Create if not already */ if (filecache->gateway == NULL) { filecache->gateway = (struct cache_dir *)malloc(sizeof(struct cache_dir)); filecache->gateway->name = (char *)malloc(2); filecache->gateway->carousel_id = car_id; filecache->gateway->module_id = filecache->gateway->key_len = filecache->gateway->p_key_len = 0; /*TODO argg! a hack to fix a bug caused by a hack.Need better linking */ strcpy(filecache->gateway->name, "/"); filecache->gateway->dirpath = (char *)malloc(2); strcpy(filecache->gateway->dirpath, "/"); filecache->gateway->sub = filecache->gateway->parent = filecache->gateway->prev = filecache->gateway->next = NULL; filecache->gateway->files = NULL; /* Attach any subdirs or files that arrived prev. */ for (file = filecache->file_cache; file != NULL; file = nf) { nf = file->next; if ((file->carousel_id == filecache->gateway->carousel_id) && (file->p_module_id == filecache->gateway->module_id) && dsmcc_cache_key_cmp(file->p_key, filecache->gateway->key, file->p_key_len, filecache->gateway->key_len)) { dsmcc_cache_attach_file(filecache, filecache->gateway, file); } } for (fdir = filecache->dir_cache;fdir != NULL;fdir = fdir->next) dsmcc_cache_attach_dir(filecache, filecache->gateway, fdir); dsmcc_cache_write_dir(filecache, filecache->gateway); /* Write files to filesystem */ return filecache->gateway; } else { return filecache->gateway; } } /* Find dir magic */ dir = dsmcc_cache_scan_dir(filecache->gateway, car_id, module_id, key_len, key); if (dir == NULL) /* Try looking in unlinked dirs list */ { for (fdir = filecache->dir_cache;(dir == NULL) && (fdir != NULL); fdir = fdir->next) { dir = dsmcc_cache_scan_dir(fdir, car_id, module_id, key_len, key); } } /* TODO - Directory not known yet, cache it ? */ return dir; } void dsmcc_cache_attach_file(struct cache *filecache, struct cache_dir *root, struct cache_file *file) { struct cache_file *cfile; /* Search for any files that arrived previously in unknown files list*/ if (root->files == NULL) { if (file->prev != NULL) { file->prev->next = file->next; LogModule(LOG_DEBUG, LIBDSMCC, "[libcache] Set filecache prev to next file\n"); } else { filecache->file_cache = file->next; LogModule(LOG_DEBUG, LIBDSMCC, "[libcache] Set filecache to next file\n"); } if (file->next != NULL) file->next->prev = file->prev; root->files = file; root->files->next = root->files->prev = NULL; file->parent = root; } else { if (file->prev != NULL) { file->prev->next = file->next; LogModule(LOG_DEBUG, LIBDSMCC, "[libcache] Set filecache (not start) prev to next file\n"); } else { filecache->file_cache = file->next; LogModule(LOG_DEBUG, LIBDSMCC, "[libcache] Set filecache (not start) to next file\n"); } if (file->next != NULL) file->next->prev = file->prev; for (cfile = root->files;cfile->next != NULL;cfile = cfile->next) { ; } cfile->next = file; file->prev = cfile; file->next = NULL; /* TODO uurrgh */ file->parent = root; } } void dsmcc_cache_attach_dir(struct cache *filecache, struct cache_dir *root, struct cache_dir *dir) { struct cache_dir *last; if ((dir->carousel_id == root->carousel_id) && (dir->p_module_id == root->module_id) && dsmcc_cache_key_cmp(dir->p_key, root->key, dir->p_key_len, root->key_len)) { if (root->sub == NULL) { if (dir->prev != NULL) { dir->prev->next = dir->next; } else { filecache->dir_cache = dir->next; } if (dir->next != NULL) dir->next->prev = dir->prev; root->sub = dir; root->sub->next = root->sub->prev = NULL; dir->parent = root; } else { if (dir->prev != NULL) { dir->prev->next = dir->next; } else { filecache->dir_cache = dir->next; } if (dir->next != NULL) dir->next->prev = dir->prev; for (last = root->sub;last->next != NULL;last = last->next) { ; } last->next = dir; dir->prev = last; dir->next = NULL; dir->parent = root; } } } struct cache_file * dsmcc_cache_scan_file(struct cache_dir *dir, unsigned long car_id, unsigned int mod_id, unsigned int key_len, char *key) { struct cache_file *file; struct cache_dir *subdir; if (dir == NULL) { return NULL; } /* fprintf(cache_fd,"Searching for file %d - \n", mod_id); for(i = 0; i < key_len; i++) { fprintf(cache_fd, "%c", key[i]); } fprintf(cache_fd, "\n"); */ /* Search files in this dir */ for (file = dir->files; file != NULL; file = file->next) { if ((file->carousel_id == car_id) && (file->module_id == mod_id) && dsmcc_cache_key_cmp(file->key, key, file->key_len, key_len)) { return file; } } /* Search sub dirs */ for (subdir = dir->sub; subdir != NULL; subdir = subdir->next) { file = dsmcc_cache_scan_file(subdir, car_id, mod_id, key_len, key); if (file != NULL) { return file; } } return NULL; } struct cache_file * dsmcc_cache_file_find(struct cache *filecache, unsigned long car_id, unsigned short module_id, unsigned int key_len, char *key) { struct cache_file *file; /* Try looking in parent-less list */ for (file = filecache->file_cache; file != NULL; file = file->next) { if ((file->carousel_id == car_id) && (file->module_id == module_id) && dsmcc_cache_key_cmp(file->key, key, file->key_len, key_len)) { return file; } } /* Scan through known files and return details if known else NULL */ file = dsmcc_cache_scan_file(filecache->gateway, car_id, module_id, key_len, key); return file; } void dsmcc_cache_dir_info(struct cache *filecache, unsigned short module_id, unsigned int objkey_len, char *objkey, struct biop_binding *bind) { struct cache_dir *dir, *last, *subdir; struct cache_file *file, *nf; dir = dsmcc_cache_dir_find(filecache, bind->ior.body.full.obj_loc.carousel_id, bind->ior.body.full.obj_loc.module_id, bind->ior.body.full.obj_loc.objkey_len, bind->ior.body.full.obj_loc.objkey); if (dir != NULL) { return; /* Already got (check version TODO) */ } dir = (struct cache_dir *)malloc(sizeof(struct cache_dir)); dir->name = (char *)malloc(bind->name.comps[0].id_len); memcpy(dir->name, bind->name.comps[0].id, bind->name.comps[0].id_len); dir->dirpath = NULL; dir->next = dir->prev = dir->sub = NULL; dir->files = NULL; dir->carousel_id = bind->ior.body.full.obj_loc.carousel_id; dir->module_id = bind->ior.body.full.obj_loc.module_id; dir->key_len = bind->ior.body.full.obj_loc.objkey_len; dir->key = (char *)malloc(dir->key_len); memcpy(dir->key, bind->ior.body.full.obj_loc.objkey, dir->key_len); // dir->p_carousel_id = carousel_id; Must be the same ? dir->p_module_id = module_id; dir->p_key_len = objkey_len; dir->p_key = (char *)malloc(dir->p_key_len); memcpy(dir->p_key, objkey, objkey_len); dir->parent = dsmcc_cache_dir_find(filecache, dir->carousel_id, module_id, objkey_len, objkey); LogModule(LOG_DEBUG, LIBDSMCC, "[libcache] Caching dir %s (with parent %d/%d/%c%c%c%c\n", dir->name, dir->p_module_id, dir->p_key_len, dir->p_key[0], dir->p_key[1], dir->p_key[2], dir->p_key[3]); if (dir->parent == NULL) { if (filecache->dir_cache == NULL) { filecache->dir_cache = dir; } else { /* Directory not yet known. Add this to dirs list */ for (last = filecache->dir_cache;last->next != NULL;last = last->next) { ; } LogModule(LOG_DEBUG, LIBDSMCC, "Added to Unknown list not empty\n"); last->next = dir; dir->prev = last; } } else { LogModule(LOG_DEBUG, LIBDSMCC, "[libcache] Caching dir %s under parent %s\n", dir->name, dir->parent->name); /* Create under parent directory */ if (dir->parent->sub == NULL) { LogModule(LOG_DEBUG, LIBDSMCC, "Parent has no subdirs\n"); dir->parent->sub = dir; } else { LogModule(LOG_DEBUG, LIBDSMCC, "Parent has other subdirs\n"); for (last = dir->parent->sub;last->next != NULL;last = last->next) { ; } last->next = dir; dir->prev = last; LogModule(LOG_DEBUG, LIBDSMCC, "Added to Parent has other subdirs\n"); } } /* Attach any files that arrived previously */ for (file = filecache->file_cache; file != NULL; file = nf) { nf = file->next; if ((file->carousel_id == dir->carousel_id) && (file->p_module_id == dir->module_id) && dsmcc_cache_key_cmp(file->p_key, dir->key, file->p_key_len, dir->key_len)) { LogModule(LOG_DEBUG, LIBDSMCC, "[libcache] Attaching previously arrived file %s to newly created directory %s\n", file->filename, dir->name); dsmcc_cache_attach_file(filecache, dir, file); } } /* Attach any subdirs that arrived beforehand */ for (subdir = filecache->dir_cache; subdir != NULL; subdir = subdir->next) { dsmcc_cache_attach_dir(filecache, dir, subdir); } if ((dir->parent != NULL) && (dir->parent->dirpath != NULL)) dsmcc_cache_write_dir(filecache, dir); /* Write dir/files to filesystem */ filecache->num_dirs++; filecache->total_dirs++; } void dsmcc_cache_write_dir(struct cache *filecache, struct cache_dir *dir) { struct cache_dir *subdir; struct cache_file *file; char dirbuf[256]; if (dir->dirpath == NULL) { dir->dirpath = (char*) malloc(strlen(dir->parent->dirpath) + strlen(dir->name) + 2); strcpy(dir->dirpath, dir->parent->dirpath); strcat(dir->dirpath, "/"); strcat(dir->dirpath, dir->name); } sprintf(dirbuf, "%s/%s/%s", "/tmp/cache/", filecache->name, dir->dirpath); LogModule(LOG_DEBUG, LIBDSMCC, "[libcache] Writing directory %s to filesystem\n", dir->dirpath); mkdir(dirbuf, 0755); /* Write out files that had arrived before directory */ for (file = dir->files;file != NULL;file = file->next) { if (file->data != NULL) { LogModule(LOG_DEBUG, LIBDSMCC, "[libcache] Writing out file %s under new dir %s\n", file->filename, dir->dirpath); dsmcc_cache_write_file(filecache, file); } } /* Recurse thorugh child directories */ for (subdir = dir->sub;subdir != NULL;subdir = subdir->next) { dsmcc_cache_write_dir(filecache, subdir); } } void dsmcc_cache_file(struct cache *filecache, struct biop_message *bm, struct cache_module_data *cachep) { struct cache_file *file; /* search for file info */ file = dsmcc_cache_file_find(filecache, cachep->carousel_id, cachep->module_id, bm->hdr.objkey_len, bm->hdr.objkey); if (file == NULL) { LogModule(LOG_DEBUG, LIBDSMCC, "[libcache] Unknown file %ld/%d/%d/%c%c%c, caching data\n", cachep->carousel_id, cachep->module_id, bm->hdr.objkey_len, bm->hdr.objkey[0], bm->hdr.objkey[1], bm->hdr.objkey[2]); /* Not known yet. Save data */ file = (struct cache_file *)malloc(sizeof(struct cache_file)); file->data_len = bm->body.file.content_len; file->data = (char*)malloc(file->data_len); memcpy(file->data, cachep->data + cachep->curp, file->data_len); file->carousel_id = cachep->carousel_id; file->module_id = cachep->module_id; file->key_len = bm->hdr.objkey_len; file->key = (char*)malloc(file->key_len); memcpy(file->key, bm->hdr.objkey, file->key_len); file->next = file->prev = NULL; // Add to unknown data cache if (filecache->data_cache == NULL) { filecache->data_cache = file; } else { struct cache_file *last; for (last = filecache->data_cache;last->next != NULL;last = last->next) { ; } last->next = file; file->prev = last; } filecache->num_files++; filecache->total_files++; } else { /* Save data. Save file if wanted (TODO check versions ) */ LogModule(LOG_DEBUG, LIBDSMCC, "[libcache] Data for file %s\n", file->filename); if (file->data == NULL) { file->data_len = bm->body.file.content_len; file->data = (char *)malloc(file->data_len); memcpy(file->data, cachep->data + cachep->curp, file->data_len); /* TODO this should be a config option */ dsmcc_cache_write_file(filecache, file); } else { LogModule(LOG_DEBUG, LIBDSMCC, "[libcache] Data for file %s had already arrived\n", file->filename); } } } void dsmcc_cache_write_file(struct cache *filecache, struct cache_file *file) { FILE *data_fd; char buf[128]; struct file_info *filei, *files; /* TODO create directory structure rather than one big mess! */ if ((file->parent != NULL) && (file->parent->dirpath != NULL)) { LogModule(LOG_DEBUG, LIBDSMCC, "[libcache] Writing file %s/%s (%d bytes)\n", file->parent->dirpath, file->filename, file->data_len); sprintf(buf, "/tmp/cache/%s/%s/%s", filecache->name, file->parent->dirpath, file->filename); data_fd = fopen(buf, "wb"); if (data_fd != NULL) { fwrite(file->data, 1, file->data_len, data_fd); fclose(data_fd); } else { /* fprintf(stderr, "Failed to open file"); */ } /* Free data as no longer needed */ free(file->data); file->data = NULL; file->data_len = 0; filecache->num_files--; /* Update information in file info */ filei = malloc(sizeof(struct file_info)); filei->filename = malloc(strlen(file->filename) + 1); strcpy(filei->filename, file->filename); filei->path = malloc(strlen(buf) + 1); strcpy(filei->path, buf); filei->arrived = filei->written = 1; if (filecache->files == NULL) { filecache->files = filei; } else { for (files = filecache->files;files->next != NULL;files = files->next) { ; } files->next = filei; } filei->next = NULL; } else { LogModule(LOG_DEBUG, LIBDSMCC, "[libcache] File %s Parent == %p Dirpath == %s\n", file->filename, file->parent, file->parent->dirpath); } } void dsmcc_cache_unknown_dir_info(struct cache *filecache, struct cache_dir *newdir) { struct cache_dir *last; if (filecache->dir_cache == NULL) { filecache->dir_cache = newdir; newdir->next = newdir->prev = NULL; } else { for (last = filecache->dir_cache;last->next != NULL;last = last->next) { ; } last->next = newdir; newdir->prev = last; newdir->next = NULL; } } void dsmcc_cache_unknown_file_info(struct cache *filecache, struct cache_file *newfile) { struct cache_file *last; /* TODO Check if already unknown file (i.e. data arrived twice before * dir/srg or missed dir/srg message, if so skip. */ if (filecache->file_cache == NULL) { filecache->file_cache = newfile; filecache->file_cache->next = filecache->file_cache->prev = NULL; } else { for (last = filecache->file_cache;last->next != NULL; last = last->next) { ; } last->next = newfile; newfile->prev = last; newfile->next = NULL; } } struct cache_file * dsmcc_cache_file_find_data(struct cache *filecache, unsigned long car_id, unsigned short mod_id, unsigned int key_len, char *key) { struct cache_file *last; for (last = filecache->data_cache; last != NULL; last = last->next) { if ((last->carousel_id == car_id) && (last->module_id == mod_id) && dsmcc_cache_key_cmp(key, last->key, key_len, last->key_len)) { if (last->prev != NULL) { last->prev->next = last->next; } else { filecache->data_cache = last->next; } if (last->next != NULL) last->next->prev = last->prev; break; } } return last; } void dsmcc_cache_file_info(struct cache *filecache, unsigned short mod_id, unsigned int key_len, char *key, struct biop_binding *bind) { struct cache_file *newfile, *last; struct cache_dir *dir; LogModule(LOG_DEBUG, LIBDSMCC, "[libcache] Caching file info\n"); // Check we do not already have file (or file info) cached if (dsmcc_cache_file_find(filecache, bind->ior.body.full.obj_loc.carousel_id, bind->ior.body.full.obj_loc.module_id, bind->ior.body.full.obj_loc.objkey_len, bind->ior.body.full.obj_loc.objkey) != NULL) { return; } // See if the data had already arrived for the file newfile = dsmcc_cache_file_find_data(filecache, bind->ior.body.full.obj_loc.carousel_id, bind->ior.body.full.obj_loc.module_id, bind->ior.body.full.obj_loc.objkey_len, bind->ior.body.full.obj_loc.objkey); if (newfile == NULL) { LogModule(LOG_DEBUG, LIBDSMCC, "[libcache] Data not arrived for file %s, caching\n", bind->name.comps[0].id); // Create the file from scratch newfile = (struct cache_file*)malloc(sizeof(struct cache_file)); newfile->carousel_id = bind->ior.body.full.obj_loc.carousel_id; newfile->module_id = bind->ior.body.full.obj_loc.module_id; newfile->key_len = bind->ior.body.full.obj_loc.objkey_len; newfile->key = (char *)malloc(newfile->key_len); memcpy(newfile->key, bind->ior.body.full.obj_loc.objkey, newfile->key_len); newfile->data = NULL; } else { LogModule(LOG_DEBUG, LIBDSMCC, "[libcache] Data already arrived for file %s\n", bind->name.comps[0].id); } newfile->filename = (char*)malloc(bind->name.comps[0].id_len); memcpy(newfile->filename, bind->name.comps[0].id, bind->name.comps[0].id_len); newfile->next = NULL; dir = dsmcc_cache_dir_find(filecache, newfile->carousel_id, mod_id, key_len, key); filecache->num_files++; filecache->total_files++; if (dir == NULL) { /* Parent directory not yet known */ newfile->p_module_id = mod_id; newfile->p_key_len = key_len; newfile->p_key = (char *)malloc(newfile->p_key_len); memcpy(newfile->p_key, key, key_len); newfile->parent = NULL; LogModule(LOG_DEBUG, LIBDSMCC, "[libcache] Caching info for file %s with unknown parent dir (file info - %ld/%d/%d/%c%c%c%c)\n", newfile->filename, newfile->carousel_id, newfile->module_id, newfile->key_len, newfile->key[0], newfile->key[1], newfile->key[2], newfile->key[3]); dsmcc_cache_unknown_file_info(filecache, newfile); } else { /* TODO Check if already stored under directory (new version?) * Checking version info for a file is difficult, * the data should not be passed to us by dsmcc layer * unless the version has changed. Need to remove old * and store new. */ /* If not append to list */ newfile->p_key_len = dir->key_len; newfile->p_key = malloc(dir->key_len); memcpy(newfile->p_key, dir->key, dir->key_len); newfile->parent = dir; if (dir->files == NULL) { dir->files = newfile; newfile->prev = NULL; } else { for (last = dir->files;last->next != NULL;last = last->next) { ; } last->next = newfile; newfile->prev = last; } LogModule(LOG_DEBUG, LIBDSMCC, "[libcache] Caching info for file %s with known parent dir (file info - %ld/%d/%d/%c%c%c)\n", newfile->filename, newfile->carousel_id, newfile->module_id, newfile->key_len, newfile->key[0], newfile->key[1], newfile->key[2]); if (newfile->data != NULL) dsmcc_cache_write_file(filecache, newfile); } } dvbstreamer-2.1.0/src/plugins/libdsmcc/dsmcc-cache.h000066400000000000000000000060371217721213100223660ustar00rootroot00000000000000#ifndef DSMCC_CACHE_H #define DSMCC_CACHE_H #include /* Very quick hack to resolve circular dependencies between biop and cache. */ struct biop_binding; struct biop_message; /* and receiver */ struct cache_module_data; struct cache_dir { struct cache_dir *next, *prev, *parent, *sub; /* TODO uugh! */ struct cache_file *files; char *name; char *dirpath; unsigned long carousel_id; unsigned short module_id; unsigned int key_len; char *key; unsigned long p_carousel_id; /* TODO this is a hack */ unsigned short p_module_id; unsigned int p_key_len; char *p_key; }; struct cache_file { unsigned long carousel_id; unsigned short module_id; unsigned int key_len; char *key; unsigned int data_len; char *filename; char *data; char complete; struct cache_file *next, *prev;; struct cache_dir *parent; unsigned long p_carousel_id; /* TODO this is a hack */ unsigned short p_module_id; unsigned int p_key_len; char *p_key; }; struct file_info { char *filename; char *path; unsigned int size; char arrived; char written; struct file_info *next; }; struct cache { struct cache_dir *gateway; struct cache_dir *dir_cache; struct cache_file *file_cache; struct cache_file *data_cache; int num_files, total_files; int num_dirs, total_dirs; char *name; struct file_info *files; }; unsigned int dsmcc_cache_key_cmp(char *, char *, unsigned int, unsigned int); struct cache_dir * dsmcc_cache_scan_dir(struct cache_dir *, unsigned long carousel_id, unsigned short module_id, unsigned int key_len, char *key); struct cache_file * dsmcc_cache_scan_file(struct cache_dir *, unsigned long, unsigned int, unsigned int, char *); void dsmcc_cache_write_file(struct cache *, struct cache_file *); void dsmcc_cache_unknown_dir_info(struct cache *, struct cache_dir *); void dsmcc_cache_unknown_file_info(struct cache *, struct cache_file *); struct cache_file * dsmcc_cache_file_find_data(struct cache *, unsigned long, unsigned short, unsigned int, char *); void dsmcc_cache_free_dir(struct cache_dir *); void dsmcc_cache_init(struct cache *, const char *); void dsmcc_cache_free(struct cache *); struct cache_dir * dsmcc_cache_dir_find(struct cache *, unsigned long carousel_id, unsigned short module_id, unsigned int key_len, char *key); struct cache_file * dsmcc_cache_file_find(struct cache *, unsigned long carousel_id, unsigned short module_id, unsigned int key_len, char *key); void dsmcc_cache_dir_info(struct cache *, unsigned short, unsigned int, char *, struct biop_binding *); void dsmcc_cache_file(struct cache *, struct biop_message *, struct cache_module_data *); void dsmcc_cache_file_info(struct cache *, unsigned short, unsigned int, char *, struct biop_binding *); void dsmcc_cache_write_dir(struct cache *, struct cache_dir *); void dsmcc_cache_attach_dir(struct cache *, struct cache_dir *, struct cache_dir *); void dsmcc_cache_attach_file(struct cache *, struct cache_dir *, struct cache_file *); #endif dvbstreamer-2.1.0/src/plugins/libdsmcc/dsmcc-carousel.c000066400000000000000000000030711217721213100231260ustar00rootroot00000000000000#include #include "dsmcc-receiver.h" #include "dsmcc-descriptor.h" #include "dsmcc-carousel.h" #include "libdsmcc.h" void dsmcc_objcar_free(struct obj_carousel *obj) { struct cache_module_data *cachep, *cachepnext; struct descriptor *desc, *last; /* Free gateway info */ if (obj->gate != NULL) { if (obj->gate->user_data_len > 0) free(obj->gate->user_data); if (obj->gate->profile.type_id_len > 0) free(obj->gate->profile.type_id); if (obj->gate->profile.body.full.obj_loc.objkey_len > 0) free(obj->gate->profile.body.full.obj_loc.objkey); if (obj->gate->profile.body.full.dsm_conn.taps_count > 0) { if (obj->gate->profile.body.full.dsm_conn.tap.selector_len > 0) free(obj->gate->profile.body.full.dsm_conn.tap.selector_data); } } /* Free cache info */ cachep = obj->cache; while (cachep != NULL) { cachepnext = cachep->next; if (cachep->data != NULL) /* should be empty */ { free(cachep->data); } if (cachep->bstatus != NULL) { free(cachep->bstatus); } if (cachep->descriptors != NULL) /* TODO badness */ { desc = cachep->descriptors; while (desc != NULL) { last = desc->next; dsmcc_desc_free(desc); desc = last; } } free(cachep); cachep = cachepnext; } dsmcc_cache_free(obj->filecache); } dvbstreamer-2.1.0/src/plugins/libdsmcc/dsmcc-carousel.h000066400000000000000000000004171217721213100231340ustar00rootroot00000000000000#ifndef DSMCC_CAROUSEL #define DSMCC_CAROUSEL #include "dsmcc-cache.h" struct obj_carousel { struct cache *filecache; struct cache_module_data *cache; struct dsmcc_dsi *gate; unsigned long id; }; void dsmcc_objcar_free(struct obj_carousel *); #endif dvbstreamer-2.1.0/src/plugins/libdsmcc/dsmcc-descriptor.c000066400000000000000000000137361217721213100235000ustar00rootroot00000000000000#include #include #include "dsmcc-descriptor.h" void dsmcc_desc_free(struct descriptor *desc) { free(desc); } void dsmcc_desc_process_type(unsigned char *Data, struct descriptor *desc) { struct descriptor_type *type = &desc->data.type; type->text = (char *)malloc(desc->len); memcpy(type->text, Data, desc->len); } void dsmcc_desc_process_name(unsigned char *Data, struct descriptor *desc) { struct descriptor_name *name = &desc->data.name; name->text = (char *)malloc(desc->len); memcpy(name->text, Data, desc->len); } void dsmcc_desc_process_info(unsigned char *Data, struct descriptor *desc) { struct descriptor_info *info = &desc->data.info; memcpy(info->lang_code, Data, 3); info->text = (char *)malloc(desc->len - 3); memcpy(info->text, Data + 3, desc->len - 3); } void dsmcc_desc_process_modlink(unsigned char *Data, struct descriptor *desc) { struct descriptor_modlink *modlink = &desc->data.modlink; modlink->position = Data[0]; // fprintf(desc_fd, "Info -> Module -> Descriptor -> Modlink -> Position = %d\n", modlink->position); modlink->module_id = (Data[1] << 8) | Data[2]; // fprintf(desc_fd, "Info -> Module -> Descriptor -> Modlink -> Mod Id = %d\n", modlink->module_id); } void dsmcc_desc_process_crc32(unsigned char *Data, struct descriptor *desc) { struct descriptor_crc32 *crc32 = &desc->data.crc32; crc32->crc = (Data[0] << 24) | (Data[1] << 16) | (Data[2] << 8) | Data[3]; // fprintf(desc_fd, "Info -> Module -> Descriptor -> CRC32 -> CRC = %ld\n", crc32->crc); } void dsmcc_desc_process_location(unsigned char *Data, struct descriptor *desc) { struct descriptor_location *location = &desc->data.location; location = malloc(sizeof(struct descriptor_location)); location->location_tag = Data[0]; // fprintf(desc_fd, "Info -> Module -> Descriptor -> Location -> Tag = %d\n", location->location_tag); } void dsmcc_desc_process_dltime(unsigned char *Data, struct descriptor *desc) { struct descriptor_dltime *dltime = &desc->data.dltime; dltime->download_time = (Data[0] << 24) | (Data[1] << 16) | (Data[2] << 8) | Data[3]; // fprintf(desc_fd, "Info -> Module -> Descriptor -> Download -> Time = %ld\n", dltime->download_time); } void dsmcc_desc_process_grouplink(unsigned char *Data, struct descriptor *desc) { struct descriptor_grouplink *grouplink = &desc->data.grouplink; grouplink->position = Data[0]; // fprintf(desc_fd, "Info -> Module -> Descriptor -> Grouplink -> Position = %d\n", grouplink->position); grouplink->group_id = (Data[1] << 24) | (Data[2] << 16) | (Data[3] << 8) | Data[4]; // fprintf(desc_fd, "Info -> Module -> Descriptor -> Grouplink -> Group Id = %ld\n", grouplink->group_id); } void dsmcc_desc_process_compressed(unsigned char *Data, struct descriptor *desc) { struct descriptor_compressed *compressed = &desc->data.compressed; compressed->method = Data[0]; // fprintf(desc_fd, "Info -> Module -> Descriptor -> Compressed -> Method = %d\n", compressed->method); compressed->original_size = (Data[1] << 24) | (Data[2] << 16) | (Data[3] << 8) | Data[4]; // fprintf(desc_fd, "Info -> Module -> Descriptor -> Compressed -> Size = %ld\n", compressed->original_size); } /* void dsmcc_desc_process_pirvate(unsigned char *Data, struct descriptor *desc) { struct descriptor_private *private = &desc->data.private; private = malloc(sizeof(struct descriptor_private)); private->descriptor = (char *)malloc(desc->len); memcpy(private->descriptor, Data, desc->len); return private; } */ struct descriptor * dsmcc_desc_process_one(unsigned char *Data, int *offset) { struct descriptor *desc; int off = 0; desc = malloc(sizeof(struct descriptor)); desc->tag = Data[0]; desc->len = Data[1]; /* fprintf(desc_fd, "Info -> Module -> Descriptor -> Tag = %d\n", desc->tag); fprintf(desc_fd, "Info -> Module -> Descriptor -> Length = %d\n", desc->len); fflush(desc_fd); */ off += 2; switch (desc->tag) { case 0x01: dsmcc_desc_process_type(Data + 2, desc); break; case 0x02: dsmcc_desc_process_name(Data + 2, desc); break; case 0x03: dsmcc_desc_process_info(Data + 2, desc); break; case 0x04: dsmcc_desc_process_modlink(Data + 2, desc); break; case 0x05: dsmcc_desc_process_crc32(Data + 2, desc); break; case 0x06: dsmcc_desc_process_location(Data + 2, desc); break; case 0x07: dsmcc_desc_process_dltime(Data + 2, desc); break; case 0x08: dsmcc_desc_process_grouplink(Data + 2, desc); break; case 0x09: dsmcc_desc_process_compressed(Data + 2, desc); break; /* case 0x0A: Subgroup Association */ default: break; /* if(desc->tag >= 0x80 && desc->tag <= 0xFF) dsmcc_desc_process_private(Data+2, desc); } else if( MHP tag ) */ } off += desc->len; *offset += off; return desc; } struct descriptor * dsmcc_desc_process(unsigned char *Data, int data_len, int *offset) { int index = 0; struct descriptor *desc, *list, *l; desc = list = NULL; while (data_len > index) { // fprintf(desc_fd, "Data_len %d Index %d\n", data_len, index); desc = dsmcc_desc_process_one(Data + index, &index); if (list == NULL) { list = desc; list->next = NULL; } else { for (l = list;l->next != NULL;l = l->next) { ; } l->next = desc; desc->next = NULL; } } *offset += index; return list; } dvbstreamer-2.1.0/src/plugins/libdsmcc/dsmcc-descriptor.h000066400000000000000000000042761217721213100235040ustar00rootroot00000000000000#ifndef DSMCC_DESCRIPTOR_H #define DSMCC_DESCRIPTOR_H #include struct descriptor_type { char *text; }; struct descriptor_name { char *text; }; struct descriptor_info { char lang_code[3]; char *text; }; struct descriptor_modlink { char position; unsigned short module_id; }; struct descriptor_crc32 { unsigned long crc; }; struct descriptor_location { char location_tag; }; struct descriptor_dltime { unsigned long download_time; }; struct descriptor_grouplink { char position; unsigned long group_id; }; struct descriptor_private { char *descriptor; }; struct descriptor_compressed { char method; unsigned long original_size; }; struct descriptor { unsigned char tag; unsigned char len; union { struct descriptor_type type; struct descriptor_name name; struct descriptor_info info; struct descriptor_modlink modlink; struct descriptor_crc32 crc32; struct descriptor_location location; struct descriptor_dltime dltime; struct descriptor_grouplink grouplink; struct descriptor_compressed compressed; /* struct descriptor_private private; struct descriptor_subgroup subgroup #ref. DVB SSU */ } data; struct descriptor *next; }; void dsmcc_desc_free(struct descriptor *desc); void dsmcc_desc_process_type(unsigned char *Data, struct descriptor *); void dsmcc_desc_process_name(unsigned char *Data, struct descriptor *); void dsmcc_desc_process_info(unsigned char *Data, struct descriptor *); void dsmcc_desc_process_modlink(unsigned char *Data, struct descriptor *); void dsmcc_desc_process_crc32(unsigned char *Data, struct descriptor *); void dsmcc_desc_process_location(unsigned char *Data, struct descriptor *); void dsmcc_desc_process_dltime(unsigned char *Data, struct descriptor *); void dsmcc_desc_process_grouplink(unsigned char *Data, struct descriptor *); void dsmcc_desc_process_compressed(unsigned char *Data, struct descriptor *); struct descriptor * dsmcc_desc_process_one(unsigned char *Data, int *offset); struct descriptor * dsmcc_desc_process(unsigned char *Data, int data_len, int *offset); #endif dvbstreamer-2.1.0/src/plugins/libdsmcc/dsmcc-receiver.c000066400000000000000000000672751217721213100231350ustar00rootroot00000000000000/* Copyright (C) 2010 Adam Charrett based on libdsmcc by Richard Palmer 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dsmcc-receiver.c */ #include #include #include #include #include #include "logging.h" #include "dsmcc-receiver.h" #include "dsmcc-descriptor.h" #include "dsmcc-biop.h" #include "dsmcc-cache.h" #include "dsmcc-util.h" #include "libdsmcc.h" char LIBDSMCC[] = "libdsmcc"; void dsmcc_init(struct dsmcc_status *status, const char *channel) { int i; status->rec_files = status->total_files = 0; status->rec_dirs = status->total_dirs = 0; status->gzip_size = status->total_size = 0; for (i = 0;i < MAXCAROUSELS;i++) { status->carousels[i].cache = NULL; status->carousels[i].filecache = malloc(sizeof(struct cache)); status->carousels[i].gate = NULL; status->carousels[i].id = 0; dsmcc_cache_init(status->carousels[i].filecache, channel); } } void dsmcc_free(struct dsmcc_status *status) { /* Free any carousel data and cached data. * TODO - actually cache on disk the cache data * TODO - more terrible memory madness, this all needs improving */ } void dsmcc_add_stream(struct dsmcc_status *status, uint32_t carouselId, uint16_t tag) { struct stream_request *stream; for (stream = status->newstreams; stream; stream = stream->next) { if ((stream->carouselId == carouselId) && (stream->assoc_tag == tag)) { return; } } LogModule(LOG_DEBUG, LIBDSMCC, "Adding stream carouselId %u tag %u\n", carouselId, tag); stream = malloc(sizeof(struct stream_request)); stream->assoc_tag = tag; stream->carouselId = carouselId; stream->next = status->newstreams; status->newstreams = stream; } int dsmcc_process_section_header(struct dsmcc_section *section, unsigned char *Data, int Length) { struct dsmcc_section_header *header = §ion->sec; int crc_offset = 0; header->table_id = Data[0]; header->flags[0] = Data[1]; header->flags[1] = Data[2]; /* Check CRC is set and private_indicator is set to its complement, * else skip packet */ if (((header->flags[0] & 0x80) == 0) || (header->flags[0] & 0x40) != 0) { return 1; /* Section invalid */ } /* Data[3] - reserved */ header->table_id_extension = (Data[4] << 8) | Data[5]; header->flags2 = Data[6]; crc_offset = Length - 4 - 1; /* 4 bytes */ /* skip to end, read last 4 bytes and store in crc */ header->crc = (Data[crc_offset] << 24) | (Data[crc_offset+1] << 16) | (Data[crc_offset+2] << 8) | (Data[crc_offset+3]); return 0; } int dsmcc_process_msg_header(struct dsmcc_section *section, unsigned char *Data) { struct dsmcc_message_header *header = §ion->hdr.info; header->protocol = Data[0]; if (header->protocol != 0x11) { return 1; } LogModule(LOG_DEBUG, LIBDSMCC, "Protocol: %X\n", header->protocol); header->type = Data[1]; if (header->type != 0x03) { return 1; } LogModule(LOG_DEBUG, LIBDSMCC, "Type: %X\n", header->type); header->message_id = (Data[2] << 8) | Data[3]; LogModule(LOG_DEBUG, LIBDSMCC, "Message ID: %X\n", header->message_id); header->transaction_id = (Data[4] << 24) | (Data[5] << 16) | (Data[6] << 8) | Data[7]; LogModule(LOG_DEBUG, LIBDSMCC, "Transaction ID: %lX\n", header->transaction_id); /* Data[8] - reserved */ /* Data[9] - adapationLength 0x00 */ header->message_len = (Data[10] << 8) | Data[11]; if (header->message_len > 4076) /* Beyond valid length */ { return 1; } LogModule(LOG_DEBUG, LIBDSMCC, "Message Length: %d\n", header->message_len); return 0; } int dsmcc_process_section_gateway(struct dsmcc_status *status, unsigned char *Data, int Length, uint32_t carouselId) { int off = 0, ret, i; struct obj_carousel *car = NULL; LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Setting gateway for carouselId %u\n", carouselId); /* Find which object carousel this pid's data belongs to */ for (i = 0;i < MAXCAROUSELS;i++) { LogModule(LOG_DEBUG, LIBDSMCC,"%d: id %u", i , status->carousels[i].id); if (status->carousels[i].id == carouselId) { car = &status->carousels[i]; if (car->gate != NULL) /* TODO check gate version not changed */ { return 0; /* We already have gateway */ } else { break; } } } if (car == NULL) { LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Gateway for unknown carousel\n"); return 0; } car->gate = (struct dsmcc_dsi *)malloc(sizeof(struct dsmcc_dsi)); /* 0-19 Server id = 20 * 0xFF */ /* 20,21 compatibilydescriptorlength = 0x0000 */ off = 22; car->gate->data_len = (Data[off] << 8) | Data[off+1]; off += 2; LogModule(LOG_DEBUG, LIBDSMCC, "Data Length: %d\n", car->gate->data_len); /* does not even exist ? gate->num_groups = (Data[off] << 8) | Data[off+1]; off+=2; fprintf(dsi_debug, "Num. Groups: %d\n", gate->num_groups); */ /* TODO - process groups ( if ever exist ? ) */ LogModule(LOG_DEBUG, LIBDSMCC, "Processing BiopBody...\n"); ret = dsmcc_biop_process_ior(&car->gate->profile, Data + DSMCC_BIOP_OFFSET); if (ret > 0) { off += ret; } else { /* TODO error */ } LogModule(LOG_DEBUG, LIBDSMCC, "Done BiopBody"); /* Set carousel id if not already given in data_broadcast_id_descriptor (only teletext doesnt bother with this ) */ if (car->id == 0) /* TODO is carousel id 0 ever valid ? */ { car->id = car->gate->profile.body.full.obj_loc.carousel_id; } LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Gateway Module %d on carousel %ld\n", car->gate->profile.body.full.obj_loc.module_id, car->id); dsmcc_add_stream(status, car->gate->profile.body.full.obj_loc.carousel_id, car->gate->profile.body.full.dsm_conn.tap.assoc_tag); /* skip taps and context */ off += 2; /* TODO process descriptors */ car->gate->user_data_len = Data[off++]; if (car->gate->user_data_len > 0) { car->gate->user_data = (unsigned char *)malloc(car->gate->data_len); memcpy(car->gate->user_data, Data + off, car->gate->data_len); } LogModule(LOG_DEBUG, LIBDSMCC, "BiopBody - Data Length %ld\n", car->gate->profile.body.full.data_len); LogModule(LOG_DEBUG, LIBDSMCC, "BiopBody - Lite Components %d\n", car->gate->profile.body.full.lite_components_count); return 0; } int dsmcc_process_section_info(struct dsmcc_status *status, struct dsmcc_section *section, unsigned char *Data, int Length) { struct dsmcc_dii *dii = §ion->msg.dii; struct obj_carousel *car = NULL; int off = 0, i, ret; dii->download_id = (Data[0] << 24) | (Data[1] << 16) | (Data[2] << 8) | (Data[3]) ; for (i = 0;i < MAXCAROUSELS;i++) { car = &status->carousels[i]; if (car->id == dii->download_id) { break; } } if (car == NULL) { LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Section Info for unknown carousel %ld\n", dii->download_id); /* No known carousels yet (possible?) TODO ! */ return 1; } LogModule(LOG_DEBUG, LIBDSMCC, "Info -> Download ID = %lX\n", dii->download_id); off += 4; dii->block_size = Data[off] << 8 | Data[off+1]; LogModule(LOG_DEBUG, LIBDSMCC, "Info -> Block Size = %d\n", dii->block_size); off += 2; off += 6; /* not used fields */ dii->tc_download_scenario = (Data[off] << 24) | (Data[off+1] << 16) | (Data[off+2] << 8) | Data[off+3]; LogModule(LOG_DEBUG, LIBDSMCC, "Info -> tc download scenario = %ld\n", dii->tc_download_scenario); off += 4; /* skip unused compatibility descriptor len */ off += 2; dii->number_modules = (Data[off] << 8) | Data[off+1]; LogModule(LOG_DEBUG, LIBDSMCC, "Info -> number modules = %d\n",dii->number_modules); off += 2; dii->modules = (struct dsmcc_module_info*) malloc(sizeof(struct dsmcc_module_info) * dii->number_modules); for (i = 0; i < dii->number_modules; i++) { dii->modules[i].module_id = (Data[off] << 8) | Data[off+1]; off += 2; dii->modules[i].module_size = (Data[off] << 24) | (Data[off+1] << 16) | (Data[off+2] << 8) | Data[off+3]; off += 4; dii->modules[i].module_version = Data[off++]; dii->modules[i].module_info_len = Data[off++]; LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Module %d -> Size = %ld Version = %d\n", dii->modules[i].module_id, dii->modules[i].module_size, dii->modules[i].module_version); ret = dsmcc_biop_process_module_info(&dii->modules[i].modinfo, Data + off); if (ret > 0) { off += ret; } else { /* TODO error */ } } dii->private_data_len = (Data[off] << 8) | Data[off+1]; LogModule(LOG_DEBUG, LIBDSMCC, "Info -> Private Data Length = %d\n", dii->private_data_len); /* UKProfile - ignored dii->private_data = (char *)malloc(dii->private_data_len); memcpy(dii->private_data, Data+off, dii->private_data_len); */ /* TODO add module info within this function */ dsmcc_add_module_info(status, section, car); /* Free most of the memory up... all that effort for nothing */ for (i = 0; i < dii->number_modules; i++) { if (dii->modules[i].modinfo.tap.selector_len > 0) free(dii->modules[i].modinfo.tap.selector_data); } free(dii->modules); /* TODO clean up properly... done? */ return 0; } void dsmcc_process_section_indication(struct dsmcc_status *status, unsigned char *Data, int Length, uint32_t carouselId) { struct dsmcc_section section; int ret; ret = dsmcc_process_section_header(§ion, Data + DSMCC_SECTION_OFFSET, Length); if (ret != 0) { LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Indication Section Header error"); return; } ret = dsmcc_process_msg_header(§ion, Data + DSMCC_MSGHDR_OFFSET); if (ret != 0) { LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Indication Msg Header error"); return; } if (section.hdr.info.message_id == 0x1006) { LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Server Gateway\n"); dsmcc_process_section_gateway(status, Data + DSMCC_DSI_OFFSET, Length, carouselId); } else if (section.hdr.info.message_id == 0x1002) { LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Module Info\n"); dsmcc_process_section_info(status, §ion, Data + DSMCC_DII_OFFSET, Length); } else { /* Error */ } } void dsmcc_add_module_info(struct dsmcc_status *status, struct dsmcc_section *section, struct obj_carousel *car) { int i, num_blocks, found; struct cache_module_data *cachep = car->cache; struct descriptor *desc, *last; struct dsmcc_dii *dii = §ion->msg.dii; /* loop through modules and add to cache list if no module with * same id or a different version. */ for (i = 0; i < dii->number_modules; i++) { found = 0; for (;cachep != NULL;cachep = cachep->next) { if (cachep->carousel_id == dii->download_id && cachep->module_id == dii->modules[i].module_id) { /* already known */ if (cachep->version == dii->modules[i].module_version) { LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Already Know Module %d\n", dii->modules[i].module_id); found = 1; break; } else { /* Drop old data */ LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Updated Module %d\n", dii->modules[i].module_id); if (cachep->descriptors != NULL) { desc = cachep->descriptors; while (desc != NULL) { last = desc; desc = desc->next; dsmcc_desc_free(last); } } if (cachep->data != NULL) { free(cachep->data); } if (cachep->prev != NULL) { cachep->prev->next = cachep->next; if (cachep->next != NULL) { cachep->next->prev = cachep->prev; } } else { car->cache = cachep->next; if (cachep->next != NULL) { cachep->next->prev = NULL; } } free(cachep); break; } } } if (found == 0) { LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Saving info for module %d\n", dii->modules[i].module_id); if (car->cache != NULL) { for (cachep = car->cache; cachep->next != NULL;cachep = cachep->next) { ; } cachep->next = (struct cache_module_data *)malloc(sizeof(struct cache_module_data)); cachep->next->prev = cachep; cachep = cachep->next; } else { car->cache = (struct cache_module_data *)malloc(sizeof(struct cache_module_data)); cachep = car->cache; cachep->prev = NULL; } cachep->carousel_id = dii->download_id; cachep->module_id = dii->modules[i].module_id; cachep->version = dii->modules[i].module_version; cachep->size = dii->modules[i].module_size; cachep->curp = cachep->block_num = 0; num_blocks = cachep->size / dii->block_size; if ((cachep->size % dii->block_size) != 0) num_blocks++; cachep->bstatus = (char*)malloc(((num_blocks / 8) + 1) * sizeof(char)); bzero(cachep->bstatus, (num_blocks / 8) + 1); /* syslog(LOG_ERR, "Allocated %d bytes to store status for module %d", (num_blocks/8)+1, cachep->module_id); */ cachep->data = NULL; cachep->next = NULL; cachep->blocks = NULL; cachep->tag = dii->modules[i].modinfo.tap.assoc_tag; dsmcc_add_stream(status, car->id, cachep->tag); /* Steal the descriptors TODO this is very bad... */ cachep->descriptors = dii->modules[i].modinfo.descriptors; dii->modules[i].modinfo.descriptors = NULL; cachep->cached = 0; } } } int dsmcc_process_data_header(struct dsmcc_section *section, unsigned char *Data, int Length) { struct dsmcc_data_header *hdr = §ion->hdr.data; hdr->protocol = Data[0]; LogModule(LOG_DEBUG, LIBDSMCC, "Data -> Header - > Protocol %d\n", hdr->protocol); hdr->type = Data[1]; LogModule(LOG_DEBUG, LIBDSMCC, "Data -> Header - > Type %d\n", hdr->type); hdr->message_id = (Data[2] << 8) | Data[3]; LogModule(LOG_DEBUG, LIBDSMCC, "Data -> Header - > MessageID %d\n",hdr->message_id); hdr->download_id = (Data[4] << 24) | (Data[5] << 16) | (Data[6] << 8) | Data[7]; LogModule(LOG_DEBUG, LIBDSMCC, "Data -> Header - > DownloadID %ld\n", hdr->download_id); /* skip reserved byte */ hdr->adaptation_len = Data[9]; LogModule(LOG_DEBUG, LIBDSMCC, "Data -> Header - > Adaption Len %d\n", hdr->adaptation_len); hdr->message_len = (Data[10] << 8) | Data[11]; LogModule(LOG_DEBUG, LIBDSMCC, "Data -> Header - > Message Len %d\n", hdr->message_len); /* TODO adapationHeader ?? */ return 0; } int dsmcc_process_section_block(struct dsmcc_status *status, struct dsmcc_section *section, unsigned char *Data, int Length) { struct dsmcc_ddb *ddb = §ion->msg.ddb; ddb->module_id = (Data[0] << 8) | Data[1]; LogModule(LOG_DEBUG, LIBDSMCC, "Data -> Block - > Module ID %u\n", ddb->module_id); ddb->module_version = Data[2]; LogModule(LOG_DEBUG, LIBDSMCC, "Data -> Block - > Module Version %u\n", ddb->module_version); /* skip reserved byte */ ddb->block_number = (Data[4] << 8) | Data[5]; LogModule(LOG_DEBUG, LIBDSMCC, "Data -> Block - > Block Num %u\n",ddb->block_number); ddb->len = section->hdr.data.message_len - 6; ddb->next = NULL; /* Not used here, used to link all data blocks in order in AddModuleData. Hmmm. */ ddb->blockdata = NULL; LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Data Block ModID %d Pos %d Version %d\n", ddb->module_id, ddb->block_number, ddb->module_version); dsmcc_add_module_data(status, section, Data + 6); return 0; } void dsmcc_process_section_data(struct dsmcc_status *status, unsigned char *Data, int Length) { struct dsmcc_section *section; section = (struct dsmcc_section *)malloc(sizeof(struct dsmcc_section)); LogModule(LOG_DEBUG, LIBDSMCC, "Reading section header\n"); dsmcc_process_section_header(section, Data + DSMCC_SECTION_OFFSET, Length); LogModule(LOG_DEBUG, LIBDSMCC, "Reading data header\n"); dsmcc_process_data_header(section, Data + DSMCC_DATAHDR_OFFSET, Length); LogModule(LOG_DEBUG, LIBDSMCC, "Reading data \n"); dsmcc_process_section_block(status, section, Data + DSMCC_DDB_OFFSET, Length); free(section); } void dsmcc_add_module_data(struct dsmcc_status *status, struct dsmcc_section *section, unsigned char *Data) { int i, ret, found = 0; unsigned char *data = NULL; unsigned long data_len = 0; struct cache_module_data *cachep = NULL; struct descriptor *desc = NULL; struct dsmcc_ddb *lb, *pb, *nb, *ddb = §ion->msg.ddb; struct obj_carousel *car; i = ret = 0; /* Scan through known modules and append data */ for (i = 0;i < MAXCAROUSELS;i++) { if (status->carousels[i].id == section->hdr.data.download_id) { car = &status->carousels[i]; break; } } if (car == NULL) { LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Data block for module in unknown carousel %ld", section->hdr.data.download_id); /* TODO carousel not yet known! is this possible ? */ return; } LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Data block on carousel %ld\n", car->id); cachep = car->cache; for (; cachep != NULL; cachep = cachep->next) { if (cachep->carousel_id == section->hdr.data.download_id && cachep->module_id == ddb->module_id) { found = 1; LogModule(LOG_DEBUG, LIBDSMCC, "Found linking module (%d)...\n", ddb->module_id); break; } } if (found == 0) { return; /* Not found module info */ } if (cachep->version == ddb->module_version) { if (cachep->cached) { LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Cached complete module already %d\n", cachep->module_id); return;/* Already got it */ } else { /* Check if we have this block already or not. If not append * to list */ if (BLOCK_GOT(cachep->bstatus, ddb->block_number) == 0) { if ((cachep->blocks == NULL) || (cachep->blocks->block_number > ddb->block_number)) { nb = cachep->blocks; /* NULL or previous first in list */ cachep->blocks = (struct dsmcc_ddb*)malloc(sizeof(struct dsmcc_ddb)); lb = cachep->blocks; } else { for (pb = lb = cachep->blocks; (lb != NULL) && (lb->block_number < ddb->block_number); pb = lb, lb = lb->next) { ; } nb = pb->next; pb->next = (struct dsmcc_ddb*)malloc(sizeof(struct dsmcc_ddb)); lb = pb->next; } lb->module_id = ddb->module_id; lb->module_version = ddb->module_version; lb->block_number = ddb->block_number; lb->blockdata = (unsigned char*)malloc(ddb->len); memcpy(lb->blockdata, Data, ddb->len); lb->len = ddb->len; cachep->curp += ddb->len; lb->next = nb; BLOCK_SET(cachep->bstatus, ddb->block_number); } } LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Module %d Current Size %lu Total Size %lu\n", cachep->module_id, cachep->curp, cachep->size); if (cachep->curp >= cachep->size) { LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Reconstructing module %d from blocks\n", cachep->module_id); /* Re-assemble the blocks into the complete module */ cachep->data = (unsigned char*)malloc(cachep->size); cachep->curp = 0; pb = lb = cachep->blocks; while (lb != NULL) { memcpy(cachep->data + cachep->curp, lb->blockdata, lb->len); cachep->curp += lb->len; pb = lb; lb = lb->next; if (pb->blockdata != NULL) free(pb->blockdata); free(pb); } cachep->blocks = NULL; /* Uncompress.... TODO - scan for compressed descriptor */ for (desc = cachep->descriptors;desc != NULL; desc = desc->next) { if (desc && (desc->tag == 0x09)) { break; } } if (desc != NULL) { LogModule(LOG_DEBUG, LIBDSMCC, "Uncompressing...(%lu bytes compressed - %lu bytes memory", cachep->curp, desc->data.compressed.original_size); data_len = desc->data.compressed.original_size + 1; data = (unsigned char *)malloc(data_len + 1); LogModule(LOG_DEBUG, LIBDSMCC, "Compress data memory %p - %p (%ld bytes)", cachep->data, cachep->data+cachep->size, cachep->size); LogModule(LOG_DEBUG, LIBDSMCC, "Uncompress data memory %p - %p (%ld bytes)", data, data+data_len, data_len); LogModule(LOG_DEBUG, LIBDSMCC, "(set %lu ", data_len); ret = uncompress(data, &data_len, cachep->data, cachep->size); LogModule(LOG_DEBUG, LIBDSMCC, "expected %lu real %lu ret %d)", cachep->size, data_len, ret); if (ret == Z_DATA_ERROR) { LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] compression error - invalid data, skipping\n"); if (data != NULL) { free(data); } cachep->curp = 0; if (cachep->data != NULL) { free(cachep->data); cachep->data = NULL; } return; } else if (ret == Z_BUF_ERROR) { LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] compression error - buffer error, skipping\n"); if (data != NULL) { free(data); } cachep->curp = 0; if (cachep->data != NULL) { free(cachep->data); cachep->data = NULL; } return; } else if (ret == Z_MEM_ERROR) { LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] compression error - out of mem, skipping\n"); if (data != NULL) { free(data); } cachep->curp = 0; if (cachep->data != NULL) { free(cachep->data); cachep->data = NULL; } return; } if (cachep->data != NULL) { free(cachep->data); } cachep->data = data; LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Processing data\n"); // Return list of streams that directory needs dsmcc_biop_process_data(status, car->filecache, cachep); cachep->cached = 1; } else { /* not compressed */ LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Processing data (uncompressed)\n"); // Return list of streams that directory needs dsmcc_biop_process_data(status, car->filecache, cachep); cachep->cached = 1; } } } } void dsmcc_process_section_desc(unsigned char *Data, int Length) { struct dsmcc_section section; int ret; ret = dsmcc_process_section_header(§ion, Data + DSMCC_SECTION_OFFSET, Length); /* TODO */ } void dsmcc_process_section(struct dsmcc_status *status, unsigned char *Data, int Length, uint32_t carouselId) { unsigned long crc32_decode; unsigned short section_len; /* Check CRC before trying to parse */ section_len = ((Data[1] & 0xF) << 8) | (Data[2]) ; section_len += 3;/* 3 bytes before length count starts */ crc32_decode = dsmcc_crc32(Data, section_len); if (crc32_decode != 0) { LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Corrupt CRC for section, dropping"); return; } LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Section 0x%02x length %u\n", Data[0], Length); switch (Data[0]) { case DSMCC_SECTION_INDICATION: LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Server/Info Section\n"); dsmcc_process_section_indication(status, Data, Length, carouselId); break; case DSMCC_SECTION_DATA: LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Data Section\n"); dsmcc_process_section_data(status, Data, Length); break; case DSMCC_SECTION_DESCR: LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Descriptor Section\n"); dsmcc_process_section_desc(Data, Length); break; default: break; } LogModule(LOG_DEBUG, LIBDSMCC, "[libdsmcc] Section Processed\n"); } dvbstreamer-2.1.0/src/plugins/libdsmcc/dsmcc-receiver.h000066400000000000000000000110641217721213100231230ustar00rootroot00000000000000#ifndef DSMCC_RECEIVER_H #define DSMCC_RECEIVER_H #include struct dsmcc_status; #include "dsmcc-carousel.h" #include "dsmcc-biop.h" #define MAXCAROUSELS 16 #define DSMCC_SYNC_BYTE 0x47 #define DSMCC_TRANSPORT_ERROR 0x80 #define DSMCC_START_INDICATOR 0x40 #define DSMCC_MESSAGE_DSI 0x1006 #define DSMCC_MESSAGE_DII 0x1002 #define DSMCC_MESSAGE_DDB 0x1003 #define DSMCC_SECTION_INDICATION 0x3B #define DSMCC_SECTION_DATA 0x3C #define DSMCC_SECTION_DESCR 0x3D #define DSMCC_SECTION_OFFSET 0 #define DSMCC_MSGHDR_OFFSET 8 #define DSMCC_DATAHDR_OFFSET 8 #define DSMCC_DSI_OFFSET 20 #define DSMCC_DII_OFFSET 20 #define DSMCC_DDB_OFFSET 20 #define DSMCC_BIOP_OFFSET 24 #define BLOCK_GOT(s,i) (s[i/8]& (1<<(i%8))) #define BLOCK_SET(s,i) (s[i/8]|=(1<<(i%8))) /* hack forward decls */ struct cache_module_data { unsigned long carousel_id; unsigned short module_id; unsigned char version; unsigned long size; unsigned long curp; unsigned short block_num; char *bstatus; /* Block status bit field */ struct dsmcc_ddb *blocks; char cached; unsigned char *data; unsigned short tag; struct cache_module_data *next, *prev; struct descriptor *descriptors; }; struct dsmcc_dii { unsigned long download_id; unsigned short block_size; unsigned long tc_download_scenario; unsigned short number_modules; struct dsmcc_module_info *modules; unsigned short private_data_len; unsigned char *private_data; }; struct dsmcc_section_header { char table_id; /* always 0x3B */ unsigned char flags[2]; unsigned short table_id_extension; /* * unsigned int section_syntax_indicator : 1; UKProfile - always 1 * unsigned int private_indicator : 1; UKProfile - hence always 0 * unsigned int reserved : 2; always 11b * unsigned int dsmcc_section_length : 12; **/ unsigned char flags2; /* * unsigned int reserved : 2; always 11b * unsigned int version_number : 5; 00000b * unsigned int current_next_indicator : 1 1b * */ unsigned long crc; /* UKProfile */ }; struct dsmcc_message_header { unsigned char protocol; /* 0x11 */ unsigned char type; /* 0x03 U-N */ unsigned short message_id; /* 0x1002 -DDI */ unsigned long transaction_id; /* transactionID * unsigned int orig_subfield : 2; 10b * unsigned int version_subfield : 14; * unsigned int id_subfield : 15; 000000000000000 * unsigned int update_subfield : 1; */ unsigned short message_len; }; struct dsmcc_data_header { char protocol;/* 0x11 */ char type;/* 0x03 */ unsigned short message_id;/* 0x1003 */ unsigned long download_id; char adaptation_len;/* 0x00 or 0x08 */ unsigned short message_len; /* struct dsmcc_adaption_hdr ??? */ }; struct dsmcc_ddb { unsigned short module_id; unsigned char module_version; unsigned short block_number; unsigned char *blockdata; unsigned int len; struct dsmcc_ddb *next; /* Needed for caching */ }; struct dsmcc_section { struct dsmcc_section_header sec; union { struct dsmcc_message_header info; struct dsmcc_data_header data; } hdr; union { struct dsmcc_dsi dsi; struct dsmcc_dii dii; struct dsmcc_ddb ddb; } msg; }; void dsmcc_init(struct dsmcc_status *, const char *channel); void dsmcc_free(struct dsmcc_status *); void dsmcc_add_stream(struct dsmcc_status *, uint32_t carouselId, uint16_t tag); void dsmcc_add_module_info(struct dsmcc_status *, struct dsmcc_section *, struct obj_carousel *); void dsmcc_add_module_data(struct dsmcc_status *, struct dsmcc_section *, unsigned char *); int dsmcc_process_section_gateway(struct dsmcc_status *, unsigned char *, int, uint32_t); int dsmcc_process_section_info(struct dsmcc_status *, struct dsmcc_section *, unsigned char *, int); int dsmcc_process_section_block(struct dsmcc_status *, struct dsmcc_section *, unsigned char *, int); int dsmcc_process_section_header(struct dsmcc_section *, unsigned char *, int); int dsmcc_process_msg_header(struct dsmcc_section *, unsigned char *); int dsmcc_process_data_header(struct dsmcc_section *, unsigned char *, int); void dsmcc_process_section_desc(unsigned char *Data, int Length); void dsmcc_process_section_data(struct dsmcc_status *, unsigned char *Data, int Length); void dsmcc_process_section_indication(struct dsmcc_status *, unsigned char *Data, int Length, uint32_t carouselId); void dsmcc_process_section(struct dsmcc_status *, unsigned char *Data, int Length, uint32_t carouselId); #endif dvbstreamer-2.1.0/src/plugins/libdsmcc/dsmcc-util.c000066400000000000000000000071371217721213100222750ustar00rootroot00000000000000#include #include #include "dsmcc-util.h" // CRC code taken from libdtv (Rolf Hakenes) // CRC32 lookup table for polynomial 0x04c11db7 static unsigned long crc_table[256] = { 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95, 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3, 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4 }; unsigned long dsmcc_crc32(unsigned char *data, int len) { register int i; unsigned long crc = 0xffffffff; for (i = 0; i < len; i++) crc = (crc << 8) ^ crc_table[((crc >> 24) ^ *data++) & 0xff]; return crc; } dvbstreamer-2.1.0/src/plugins/libdsmcc/dsmcc-util.h000066400000000000000000000001551217721213100222730ustar00rootroot00000000000000#ifndef DSMCC_UTIL_H #define DSMCC_UTIL_H unsigned long dsmcc_crc32(unsigned char *data, int len); #endif dvbstreamer-2.1.0/src/plugins/libdsmcc/libdsmcc.h000066400000000000000000000016351217721213100220130ustar00rootroot00000000000000#ifndef LIBDSMCC_H #define LIBDSMCC_H #ifdef __cplusplus extern "C" { #endif #include #include "dsmcc-receiver.h" #include "dsmcc-carousel.h" struct stream_request { uint32_t carouselId; uint16_t assoc_tag; struct stream_request *next; }; struct dsmcc_status { int rec_files, total_files; int rec_dirs, total_dirs; int gzip_size, total_size; enum cachestate { EMPTY, LISTINGS, FILLING, FULL } state; enum running { NOTRUNNING, RUNNINGSOON, PAUSED, RUNNING } runstate; /* must check to see if any new streams to subscribe to after calling receive each time (new stream info comes from within dsmcc */ struct stream_request *newstreams; /* Private Information (ish) */ struct obj_carousel carousels[MAXCAROUSELS]; }; extern char LIBDSMCC[]; #ifdef __cplusplus } #endif #endif dvbstreamer-2.1.0/src/plugins/manualfilters.c000077500000000000000000000276751217721213100213330ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA manualfilters.c Plugin to allow manual filtering of PIDs. */ #include #include #include #include #include #include #include #include "plugin.h" #include "main.h" #include "list.h" #include "logging.h" #include "deliverymethod.h" #include "ts.h" /******************************************************************************* * Defines * *******************************************************************************/ #define FIND_MANUAL_FILTER(_name) \ {\ TSFilterGroup_t *group = TSReaderFindFilterGroup(MainTSReaderGet(), (_name), ManualPIDFilterType);\ if (!group)\ {\ CommandError(COMMAND_ERROR_GENERIC, "Manual filter not found!");\ return;\ }\ filter = group->userArg;\ } /******************************************************************************* * Typedefs * *******************************************************************************/ typedef struct ManualFilter_s{ TSFilterGroup_t *tsgroup; DeliveryMethodInstance_t *dmInstance; }ManualFilter_t; /******************************************************************************* * Prototypes * *******************************************************************************/ static void PluginInstall(bool installed); static void CommandAddMF(int argc, char **argv); static void CommandRemoveMF(int argc, char **argv); static void CommandListMF(int argc, char **argv); static void CommandSetOutputMRL(int argc, char **argv); static void CommandAddMFPID(int argc, char **argv); static void CommandRemoveMFPID(int argc, char **argv); static void CommandListMFPIDs(int argc, char **argv); static void OutputPacket(void *userArg, TSFilterGroup_t *group, TSPacket_t *packet); static int ParsePID(char *argument); /******************************************************************************* * Global variables * *******************************************************************************/ /* For log output (not used yet) static char MANUALFILTER[]="ManualFilter"; */ static char ManualPIDFilterType[] = "Manual"; static pthread_mutex_t manualFiltersMutex = PTHREAD_MUTEX_INITIALIZER; /******************************************************************************* * Plugin Setup * *******************************************************************************/ PLUGIN_COMMANDS( { "addmf", 2, 2, "Add a new destination for manually filtered PIDs.", "addmf \n" "Adds a new destination for sending packets to. This is only used for " "manually filtered packets. " "To send packets to this destination you'll need to also call \'addmfpid\' " "with this output as an argument.", CommandAddMF }, { "rmmf", 1, 1, "Remove a destination for manually filtered PIDs.", "rmoutput \n" "Removes the destination and stops all filters associated with this output.", CommandRemoveMF }, { "lsmfs", 0, 0, "List current filters.", "List all active additonal output names and destinations.", CommandListMF }, { "setmfmrl", 2, 2, "Set the filter's MRL.", "setmfmrl \n" "Change the destination for packets sent to this output. If the MRL cannot be" " parsed no change will be made to the output.", CommandSetOutputMRL }, { "addmfpid", 2, 2, "Adds a PID to a filter.", "addmfpid \n" "Adds a PID to the filter to be sent to the specified output. The PID can be " "specified in either hex (starting with 0x) or decimal format.", CommandAddMFPID }, { "rmmfpid", 2, 2, "Removes a PID from a filter.", "rmmfpid \n" "Removes the PID from the filter that is sending packets to the specified output." "The PID can be specified in either hex (starting with 0x) or decimal format.", CommandRemoveMFPID }, { "lsmfpids", 1, 1, "List PIDs for filter.", "lsmfpids \n" "List the PIDs being filtered for a specific output.", CommandListMFPIDs } ); PLUGIN_FEATURES( PLUGIN_FEATURE_INSTALL(PluginInstall) ); PLUGIN_INTERFACE_CF( PLUGIN_FOR_ALL, "ManualFilter", "0.1", "Plugin to allow manual filtering of PID.", "charrea6@users.sourceforge.net" ); static void PluginInstall(bool installed) { if (!installed) { TSReader_t *tsReader = MainTSReaderGet(); ListIterator_t iterator; ManualFilter_t *filter; pthread_mutex_lock(&manualFiltersMutex); for ( ListIterator_Init(iterator, tsReader->groups); ListIterator_MoreEntries(iterator); ) { TSFilterGroup_t *group = (TSFilterGroup_t *)ListIterator_Current(iterator); if (strcmp(group->type, ManualPIDFilterType) == 0) { ListIterator_Next(iterator); filter = group->userArg; TSFilterGroupDestroy(filter->tsgroup); } else { ListIterator_Next(iterator); } } pthread_mutex_unlock(&manualFiltersMutex); } } /******************************************************************************* * Command Functions * *******************************************************************************/ static void CommandAddMF(int argc, char **argv) { TSReader_t *tsReader = MainTSReaderGet(); TSFilterGroup_t *group; ManualFilter_t *filter; CommandCheckAuthenticated(); group = TSReaderFindFilterGroup(tsReader, argv[0], ManualPIDFilterType); if (group) { CommandError(COMMAND_ERROR_GENERIC, "A manual filter with this name exists!"); return; } ObjectRegisterType(ManualFilter_t); filter = ObjectCreateType(ManualFilter_t); if (!filter) { CommandError(COMMAND_ERROR_GENERIC, "Failed to allocate a filter!"); return; } filter->dmInstance = DeliveryMethodCreate(argv[1]); if (filter->dmInstance == NULL) { filter->dmInstance = DeliveryMethodCreate("null://"); } pthread_mutex_lock(&manualFiltersMutex); filter->tsgroup = TSReaderCreateFilterGroup(tsReader, strdup(argv[0]), ManualPIDFilterType, NULL, filter); if (!filter->tsgroup) { DeliveryMethodDestroy(filter->dmInstance); ObjectRefDec(filter); CommandError(COMMAND_ERROR_GENERIC, "Failed to allocate a filter!"); } pthread_mutex_unlock(&manualFiltersMutex); } static void CommandRemoveMF(int argc, char **argv) { ManualFilter_t *filter; char *name; CommandCheckAuthenticated(); FIND_MANUAL_FILTER(argv[0]); pthread_mutex_lock(&manualFiltersMutex); name = filter->tsgroup->name; TSFilterGroupDestroy(filter->tsgroup); pthread_mutex_unlock(&manualFiltersMutex); free(name); DeliveryMethodDestroy(filter->dmInstance); ObjectRefDec(filter); } static void CommandListMF(int argc, char **argv) { TSReader_t *tsReader = MainTSReaderGet(); ListIterator_t iterator; pthread_mutex_lock(&manualFiltersMutex); for ( ListIterator_Init(iterator, tsReader->groups); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { TSFilterGroup_t *group = (TSFilterGroup_t *)ListIterator_Current(iterator); if (strcmp(group->type, ManualPIDFilterType) == 0) { CommandPrintf("%10s : %s\n", group->name, DeliveryMethodGetMRL(group->userArg)); } } pthread_mutex_unlock(&manualFiltersMutex); } static void CommandSetOutputMRL(int argc, char **argv) { ManualFilter_t *filter; DeliveryMethodInstance_t *instance; CommandCheckAuthenticated(); FIND_MANUAL_FILTER(argv[0]); pthread_mutex_lock(&manualFiltersMutex); instance = DeliveryMethodCreate(argv[1]); if (instance) { pthread_mutex_lock(&manualFiltersMutex); DeliveryMethodDestroy(filter->dmInstance); filter->dmInstance = instance; pthread_mutex_unlock(&manualFiltersMutex); CommandPrintf("MRL set to \"%s\" for %s\n", DeliveryMethodGetMRL(filter->dmInstance), argv[0]); } else { CommandError(COMMAND_ERROR_GENERIC,"Failed to set MRL"); } pthread_mutex_unlock(&manualFiltersMutex); } static void CommandAddMFPID(int argc, char **argv) { ManualFilter_t *filter; int pid; CommandCheckAuthenticated(); FIND_MANUAL_FILTER(argv[0]); pid = ParsePID(argv[1]); if ((pid < 0) || (pid > 0x2000)) { CommandError(COMMAND_ERROR_GENERIC, "Invalid PID!"); return; } pthread_mutex_lock(&manualFiltersMutex); if (TSFilterGroupAddPacketFilter(filter->tsgroup, pid, OutputPacket, filter)) { CommandError(COMMAND_ERROR_GENERIC,"No more available PID entries!"); } pthread_mutex_unlock(&manualFiltersMutex); } static void CommandRemoveMFPID(int argc, char **argv) { ManualFilter_t *filter; int pid; CommandCheckAuthenticated(); FIND_MANUAL_FILTER(argv[0]); pid = ParsePID(argv[1]); if ((pid < 0) || (pid > 0x2000)) { CommandError(COMMAND_ERROR_GENERIC, "Invalid PID!"); return; } pthread_mutex_lock(&manualFiltersMutex); TSFilterGroupRemovePacketFilter(filter->tsgroup, pid); pthread_mutex_unlock(&manualFiltersMutex); } static void CommandListMFPIDs(int argc, char **argv) { ManualFilter_t *filter; TSPacketFilter_t *packetFilter; int count = 0; FIND_MANUAL_FILTER(argv[0]); pthread_mutex_lock(&manualFiltersMutex); for (packetFilter=filter->tsgroup->packetFilters; packetFilter; packetFilter=packetFilter->next) { count ++; } CommandPrintf("%d PIDs for \'%s\'\n", count, argv[0]); for (packetFilter=filter->tsgroup->packetFilters; packetFilter; packetFilter=packetFilter->next) { CommandPrintf("0x%x\n", packetFilter->pid); } pthread_mutex_unlock(&manualFiltersMutex); } /******************************************************************************* * Helper Functions * *******************************************************************************/ static void OutputPacket(void *userArg, TSFilterGroup_t *group, TSPacket_t *packet) { ManualFilter_t *filter = userArg; DeliveryMethodOutputPacket(filter->dmInstance, packet); } static int ParsePID(char *argument) { char *formatstr; int pid = 0; if ((argument[0] == '0') && (tolower(argument[1])=='x')) { argument[1] = 'x'; formatstr = "0x%x"; } else { formatstr = "%d"; } if (sscanf(argument, formatstr, &pid) == 0) { return -1; } return pid; } dvbstreamer-2.1.0/src/plugins/outputs.c000077500000000000000000000277631217721213100202060ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA outputs.c Outputs Delivery Method handler. */ #include #include #include #include #include #include #include #include #include #include "plugin.h" #include "ts.h" #include "deliverymethod.h" #include "logging.h" #include "list.h" #include "properties.h" /******************************************************************************* * Defines * *******************************************************************************/ /******************************************************************************* * Typedefs * *******************************************************************************/ typedef struct Output_s { char *name; unsigned int refCount; DeliveryMethodInstance_t *dmInstance; char *mrl; }Output_t; typedef struct OutputsState_s { /* !!! MUST BE THE FIRST FIELD IN THE STRUCTURE !!! * As the address of this field will be passed to all delivery method * functions and a 0 offset is assumed! */ DeliveryMethodInstance_t instance; Output_t *output; }OutputsState_t; /******************************************************************************* * Prototypes * *******************************************************************************/ void OutputsInstall(bool installed); static bool OutputsCanHandle(char *mrl); static DeliveryMethodInstance_t *OutputsCreate(char *arg); static void OutputsSendPacket(DeliveryMethodInstance_t *this, TSPacket_t *packet); static void OutputsSendBlock(DeliveryMethodInstance_t *this, void *block, unsigned long blockLen); static void OutputsDestroy(DeliveryMethodInstance_t *this); static void CommandAddOutput(int argc, char **argv); static void CommandRemoveOutput(int argc, char **argv); static void OutputDestructor(void *arg); static int OutputPropertyMRLGet(void *userArg, PropertyValue_t *value); static int OutputPropertyMRLSet(void * userArg, PropertyValue_t * value); /******************************************************************************* * Global variables * *******************************************************************************/ /** Constants for the start of the MRL **/ #define PREFIX_LEN (sizeof(OutputPrefix) - 1) const char OutputPrefix[] = "out://"; DeliveryMethodInstanceOps_t OutputInstanceOps = { OutputsSendPacket, OutputsSendBlock, OutputsDestroy, NULL, NULL }; const char OUTPUTS[] = "Outputs"; static pthread_mutex_t outputsMutex = PTHREAD_MUTEX_INITIALIZER; static List_t *outputsList; static char *propertiesParent = "outputs"; /******************************************************************************* * Plugin Setup * *******************************************************************************/ PLUGIN_FEATURES( PLUGIN_FEATURE_INSTALL(OutputsInstall), PLUGIN_FEATURE_DELIVERYMETHOD(OutputsCanHandle, OutputsCreate) ); PLUGIN_COMMANDS( { "addoutput", 1, 2, "Add a new output.", "addoutput []\n" "Add a new output that can be used by multiple filters. \n" "An optional initial mrl can be specified, otherwise the default mrl is null://." "To change the mrl for the new output use setprop outputs. ", CommandAddOutput }, { "rmoutput", 1, 1, "Remove an output.", "rmoutput \n" "Remove an output, note that the output must not currently be in use to be able to remove it.", CommandRemoveOutput } ); PLUGIN_INTERFACE_CF( PLUGIN_FOR_ALL, "Outputs", "0.1", "Multifilter Outputs Delivery methods.\n" "Use output://[output name] for to send packets to the specified output.\n", "charrea6@users.sourceforge.net" ); void OutputsInstall(bool installed) { if (installed) { ObjectRegisterTypeDestructor(Output_t, OutputDestructor); outputsList = ObjectListCreate(); PropertiesAddProperty(NULL, propertiesParent, "Branch containing all created outputs", PropertyType_None, NULL, NULL, NULL); } else { PropertiesRemoveAllProperties(propertiesParent); ObjectListFree(outputsList) } } /******************************************************************************* * Delivery Method Functions * *******************************************************************************/ static bool OutputsCanHandle(char *mrl) { return (strncmp(OutputPrefix, mrl, PREFIX_LEN) == 0); } static DeliveryMethodInstance_t *OutputsCreate(char *arg) { OutputsState_t *state = NULL; Output_t *output = NULL; ListIterator_t iterator; char *outputName = arg + PREFIX_LEN; pthread_mutex_lock(&outputsMutex); for (ListIterator_Init(iterator, outputsList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { Output_t *currentOutput = (Output_t*)ListIterator_Current(iterator); if (strcmp(outputName, currentOutput->name) == 0) { output = currentOutput; output->refCount ++; break; } } pthread_mutex_unlock(&outputsMutex); if (output == NULL) { LogModule(LOG_DEBUG, OUTPUTS, "Failed to find output %s\n", outputName); return NULL; } state = calloc(1, sizeof(OutputsState_t)); if (state == NULL) { LogModule(LOG_DEBUG, OUTPUTS, "Failed to allocate Outputs state\n"); return NULL; } state->instance.ops = &OutputInstanceOps; state->instance.mrl = output->mrl; state->output = output; return &state->instance; } static void OutputsDestroy(DeliveryMethodInstance_t *this) { OutputsState_t *state = (OutputsState_t *)this; pthread_mutex_lock(&outputsMutex); state->output->refCount --; pthread_mutex_unlock(&outputsMutex); free(state); } static void OutputsSendPacket(DeliveryMethodInstance_t *this, TSPacket_t *packet) { OutputsState_t *state = (OutputsState_t *)this; pthread_mutex_lock(&outputsMutex); DeliveryMethodOutputPacket(state->output->dmInstance, packet); pthread_mutex_unlock(&outputsMutex); } static void OutputsSendBlock(DeliveryMethodInstance_t *this, void *block, unsigned long blockLen) { OutputsState_t *state = (OutputsState_t *)this; pthread_mutex_lock(&outputsMutex); DeliveryMethodOutputBlock(state->output->dmInstance, block, blockLen); pthread_mutex_unlock(&outputsMutex); } /******************************************************************************* * Command functions * *******************************************************************************/ static void CommandAddOutput(int argc, char **argv) { Output_t *output = NULL; ListIterator_t iterator; pthread_mutex_lock(&outputsMutex); for (ListIterator_Init(iterator, outputsList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { Output_t *currentOutput = (Output_t*)ListIterator_Current(iterator); if (strcmp(argv[0], currentOutput->name) == 0) { output = currentOutput; CommandError(COMMAND_ERROR_GENERIC, "Another output with that name already exists!"); break; } } if (output == NULL) { output = ObjectCreateType(Output_t); if (output) { char *mrl = "null://"; output->name = strdup(argv[0]); if (output->name) { if (asprintf(&output->mrl, "%s%s", OutputPrefix, argv[0]) == -1) { LogModule(LOG_INFO, OUTPUTS, "Failed to allocate memory for mrl!"); } output->dmInstance = DeliveryMethodCreate(mrl); if (output->dmInstance) { char propertyPath[PROPERTIES_PATH_MAX]; sprintf(propertyPath, "%s.%s", propertiesParent, output->name); PropertiesAddProperty(propertyPath, "mrl", "The destination all packets sent to this output will be routed to.", PropertyType_String, output, OutputPropertyMRLGet, OutputPropertyMRLSet); PropertiesAddProperty(propertyPath, "refcount", "The number of mrls referencing this output.", PropertyType_Int, &output->refCount, PropertiesSimplePropertyGet, NULL); ListAdd(outputsList, output); } else { ObjectRefDec(output); CommandError(COMMAND_ERROR_GENERIC, "Failed to create mrl for output."); } } else { ObjectRefDec(output); CommandError(COMMAND_ERROR_GENERIC, "Failed to allocate memory for output name."); } } else { CommandError(COMMAND_ERROR_GENERIC, "Failed to allocate memory for output."); } } pthread_mutex_unlock(&outputsMutex); } static void CommandRemoveOutput(int argc, char **argv) { ListIterator_t iterator; pthread_mutex_lock(&outputsMutex); for (ListIterator_Init(iterator, outputsList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { Output_t *currentOutput = (Output_t*)ListIterator_Current(iterator); if (strcmp(argv[0], currentOutput->name) == 0) { if (currentOutput->refCount == 0) { char propertyPath[PROPERTIES_PATH_MAX]; ListRemoveCurrent(&iterator); sprintf(propertyPath, "%s.%s", propertiesParent, currentOutput->name); PropertiesRemoveAllProperties(propertyPath); ObjectRefDec(currentOutput); } else { CommandError(COMMAND_ERROR_GENERIC, "Output still in use!"); } break; } } pthread_mutex_unlock(&outputsMutex); } /******************************************************************************* * Local Functions * *******************************************************************************/ static void OutputDestructor(void *arg) { Output_t *output = arg; if (output->name != NULL) { free(output->name); } if (output->mrl != NULL) { free(output->mrl); } if (output->dmInstance) { DeliveryMethodDestroy(output->dmInstance); } } static int OutputPropertyMRLGet(void *userArg, PropertyValue_t *value) { Output_t *output = (Output_t *) userArg; value->u.string = strdup(output->dmInstance->mrl); return 0; } static int OutputPropertyMRLSet(void * userArg, PropertyValue_t * value) { int result = -1; Output_t *output = (Output_t *) userArg; DeliveryMethodInstance_t *newDMInstance = NULL; newDMInstance = DeliveryMethodCreate(value->u.string); if (newDMInstance) { DeliveryMethodDestroy(output->dmInstance); output->dmInstance = newDMInstance; result = 0; } return result; } dvbstreamer-2.1.0/src/plugins/pipeoutput.c000066400000000000000000000121611217721213100206600ustar00rootroot00000000000000/* Copyright (C) 2010 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA pipeoutput.c Pipe/Named Fifo Delivery Method handler. */ #include #include #include #include #include #include #include #include #include "plugin.h" #include "ts.h" #include "deliverymethod.h" #include "logging.h" /******************************************************************************* * Typedefs * *******************************************************************************/ struct PipeOutputInstance_t { /* !!! MUST BE THE FIRST FIELD IN THE STRUCTURE !!! * As the address of this field will be passed to all delivery method * functions and a 0 offset is assumed! */ DeliveryMethodInstance_t instance; int fd; }; /******************************************************************************* * Prototypes * *******************************************************************************/ bool PipeOutputCanHandle(char *mrl); DeliveryMethodInstance_t *PipeOutputCreate(char *arg); void PipeOutputSendPacket(DeliveryMethodInstance_t *this, TSPacket_t *packet); void PipeOutputSendBlock(DeliveryMethodInstance_t *this, void *block, unsigned long blockLen); void PipeOutputDestroy(DeliveryMethodInstance_t *this); /******************************************************************************* * Global variables * *******************************************************************************/ /** Constants for the start of the MRL **/ const char PipePrefix[] = "pipe://"; DeliveryMethodInstanceOps_t PipeInstanceOps ={ PipeOutputSendPacket, PipeOutputSendBlock, PipeOutputDestroy, NULL, NULL, }; static const char PIPEOUTPUT[] = "PipeOutput"; /******************************************************************************* * Plugin Setup * *******************************************************************************/ PLUGIN_FEATURES( PLUGIN_FEATURE_DELIVERYMETHOD(PipeOutputCanHandle, PipeOutputCreate) ); PLUGIN_INTERFACE_F( PLUGIN_FOR_ALL, "PipeOutput", "0.1", "Pipe/Named fifo Delivery method.\nUse pipe://\n" "File name can be in absolute or relative.\n" "For an absolute file name use pipe:///home/user/mypipe.\n" "For a relative file name use file://mypipe.\n", "charrea6@users.sourceforge.net" ); /******************************************************************************* * Delivery Method Functions * *******************************************************************************/ bool PipeOutputCanHandle(char *mrl) { return (strncmp(PipePrefix, mrl, sizeof(PipePrefix)-1) == 0); } DeliveryMethodInstance_t *PipeOutputCreate(char *arg) { struct PipeOutputInstance_t *instance = calloc(1, sizeof(struct PipeOutputInstance_t)); char *path = (char*)(arg + (sizeof(PipePrefix)-1)); struct stat statInfo; if (instance == NULL) { return NULL; } instance->instance.ops = &PipeInstanceOps; if (stat(path, &statInfo) == -1) { /* path doesn't exist try and create it */ if (mkfifo(path, 0666) == -1) { free(instance); return NULL; } } else { if (!S_ISFIFO(statInfo.st_mode)) { free(instance); return NULL; } } instance->fd = open(path, O_RDWR); if (instance->fd == -1) { free(instance); return NULL; } instance->instance.mrl = strdup(arg); return &instance->instance; } void PipeOutputSendPacket(DeliveryMethodInstance_t *this, TSPacket_t *packet) { PipeOutputSendBlock(this, (void *)packet, sizeof(TSPacket_t)); } void PipeOutputSendBlock(DeliveryMethodInstance_t *this, void *block, unsigned long blockLen) { struct PipeOutputInstance_t *instance = (struct PipeOutputInstance_t*)this; if (write(instance->fd, block, blockLen) != blockLen) { LogModule(LOG_INFO, PIPEOUTPUT, "Failed to write entire block to pipe!\n"); } } void PipeOutputDestroy(DeliveryMethodInstance_t *this) { struct PipeOutputInstance_t *instance = (struct PipeOutputInstance_t*)this; close(instance->fd); free(this->mrl); free(this); } dvbstreamer-2.1.0/src/plugins/sap.c000077500000000000000000000245201217721213100172320ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA sap.c Session Announcement Protocol. */ #include "config.h" #include #include #include #include #include #include #include #include #include #include "main.h" #include "dispatchers.h" #include "logging.h" #include "list.h" #include "objects.h" #include "udp.h" #include "sap.h" #include "dispatchers.h" /******************************************************************************* * Defines * *******************************************************************************/ #define SAP_PORT (9875) /******************************************************************************* * Typedefs * *******************************************************************************/ typedef struct SAPSession_s { bool deleted; uint16_t messageIdHash; struct sockaddr_storage originatingSource; char sdp[1000]; }SAPSession_t; /******************************************************************************* * Prototypes * *******************************************************************************/ static void SAPSessionFree(void *data); static int CreateSAPPacket(SAPSession_t *session, uint8_t *packet); static void DetermineSAPMulticast(SAPSession_t *session, struct sockaddr_storage *sockAddr); static void AnnouncementCallback(struct ev_loop *loop, ev_timer *w, int revent); /******************************************************************************* * Global variables * *******************************************************************************/ static const char mimeType[] = "application/sdp"; static List_t *sessionList; static pthread_mutex_t sessionListMutex = PTHREAD_MUTEX_INITIALIZER; static uint16_t nextMessageIdHash = 1; static char SAP[] = "SAP"; static int socket4 = -1; static int socket6 = -1; static ev_timer announcementTimer; /******************************************************************************* * Global functions * *******************************************************************************/ bool IsMulticastAddress(struct sockaddr_storage *addr) { bool result = FALSE; if (addr->ss_family == PF_INET) { struct sockaddr_in *inAddr = (struct sockaddr_in *)addr; in_addr_t ip = ntohl(inAddr->sin_addr.s_addr); result = ((ip >= 0xe0000000) && (ip <= 0xefffffff)); LogModule(LOG_DEBUG, SAP, "ip=0x%08x result=%d\n", ip,result); } else { struct sockaddr_in6 *in6Addr = (struct sockaddr_in6*)addr; result = (in6Addr->sin6_addr.s6_addr[0] == 0xff); } return result; } void SAPServerInit(void) { int ttl = 255; ObjectRegisterType(SAPSession_t); sessionList = ListCreate(); socket4 = UDPCreateSocket(PF_INET); socket6 = UDPCreateSocket(PF_INET6); if (socket4 != -1) { setsockopt(socket4,IPPROTO_IP,IP_MULTICAST_TTL, &ttl,sizeof(ttl)); } if (socket6 != -1) { setsockopt(socket6,IPPROTO_IPV6,IPV6_MULTICAST_HOPS, &ttl,sizeof(ttl)); } ev_timer_init(&announcementTimer, AnnouncementCallback, 1.0, 1.0); ev_timer_start(DispatchersGetNetwork(), &announcementTimer); } void SAPServerDeinit(void) { ev_timer_stop(DispatchersGetNetwork(), &announcementTimer); if (socket4 != -1) { close(socket4); } if (socket6 != -1) { close(socket6); } ListFree(sessionList, SAPSessionFree); } SAPSessionHandle_t SAPServerAddSession(struct sockaddr_storage *originatingSource, char *sdp) { SAPSession_t *session; pthread_mutex_lock(&sessionListMutex); session = ObjectCreateType(SAPSession_t); if (session) { session->messageIdHash = nextMessageIdHash; nextMessageIdHash ++; memcpy(&session->originatingSource, originatingSource, sizeof(struct sockaddr_storage)); strcpy(session->sdp, sdp); ListAdd(sessionList, session); } pthread_mutex_unlock(&sessionListMutex); LogModule(LOG_DEBUG, SAP, "Added SAP session %x sdp:\n%s", session,sdp); return session; } void SAPServerDeleteSession(SAPSessionHandle_t handle) { SAPSession_t *session = handle; ListIterator_t iterator; pthread_mutex_lock(&sessionListMutex); ListRemove(sessionList, session); session->deleted = TRUE; ListIterator_Init(iterator, sessionList); ListInsertBeforeCurrent(&iterator, session); pthread_mutex_unlock(&sessionListMutex); LogModule(LOG_DEBUG, SAP, "Deleted SAP session %x\n", handle); } /******************************************************************************* * Local Functions * *******************************************************************************/ static void SAPSessionFree(void *data) { ObjectRefDec(data); } static int CreateSAPPacket(SAPSession_t *session, uint8_t *packet) { int mimeTypeOffset = 0; /* Byte 0 : Version number V1 = 001 (3 bits) * Address type IPv4/IPv6 = 0/1 (1 bit) * Reserved 0 (1 bit) * Message Type ann/del = 0/1 (1 bit) * Encryption on/off = 0/1 (1 bit) * Compressed on/off = 0/1 (1 bit) */ packet[0] = 0x20 | (session->deleted ? 4:0); packet[1] = 0x00; /* Authentication length (not supported) */ packet[2] = session->messageIdHash & 0xff; packet[3] = (session->messageIdHash >> 8) & 0xff; if (session->originatingSource.ss_family == PF_INET) { struct sockaddr_in *inAddr =(struct sockaddr_in *)&session->originatingSource; mimeTypeOffset = 8; memcpy(&packet[4], &inAddr->sin_addr, 4); } else { struct sockaddr_in6 *in6Addr =(struct sockaddr_in6 *)&session->originatingSource; mimeTypeOffset = 20; memcpy(&packet[4], &in6Addr->sin6_addr, 16); } memcpy(&packet[mimeTypeOffset], mimeType, sizeof(mimeType)); memcpy(&packet[mimeTypeOffset + sizeof(mimeType)], session->sdp, strlen(session->sdp)); return mimeTypeOffset + sizeof(mimeType) + strlen(session->sdp); } static void DetermineSAPMulticast(SAPSession_t *session, struct sockaddr_storage *sockAddr) { if (session->originatingSource.ss_family == PF_INET) { struct sockaddr_in *sessionAddr4 = (struct sockaddr_in*)&session->originatingSource; struct sockaddr_in *sockAddr4 = (struct sockaddr_in *)sockAddr; /* str is an IPv4 address */ in_addr_t ip = ntohl (sessionAddr4->sin_addr.s_addr); /* 224.0.0.0/24 => 224.0.0.255 */ if ((ip & 0xffffff00) == 0xe0000000) { ip = 0xe00000ff; } /* 239.255.0.0/16 => 239.255.255.255 */ else if ((ip & 0xffff0000) == 0xefff0000) { ip = 0xefffffff; } /* 239.192.0.0/14 => 239.195.255.255 */ else if ((ip & 0xfffc0000) == 0xefc00000) { ip = 0xefc3ffff; } /* other multicast address => 224.2.127.254 */ else { ip = 0xe0027ffe; } ip = htonl (ip); memset (sockAddr4, 0, sizeof (struct sockaddr_in)); sockAddr4->sin_family = AF_INET; sockAddr4->sin_port = htons (SAP_PORT); memcpy (&sockAddr4->sin_addr.s_addr, &ip, sizeof (ip)); } else { struct sockaddr_in6 *sessionAddr6 = (struct sockaddr_in6*)&session->originatingSource; struct sockaddr_in6 *sockAddr6 = (struct sockaddr_in6 *)sockAddr; memset (sockAddr6, 0, sizeof (struct sockaddr_in6)); sockAddr6->sin6_family = AF_INET6; sockAddr6->sin6_scope_id = sessionAddr6->sin6_scope_id; sockAddr6->sin6_port = htons (SAP_PORT); memcpy (&sockAddr6->sin6_addr.s6_addr, "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x7f\xfe", 16); sockAddr6->sin6_addr.s6_addr[1] = sessionAddr6->sin6_addr.s6_addr[1] & 0x0f; } } static void AnnouncementCallback(struct ev_loop *loop, ev_timer *w, int revent) { uint8_t packet[UDP_PAYLOAD_SIZE]; int packetLen; SAPSession_t *session; int sessionCount; ListIterator_t iterator; struct sockaddr_storage sapMulticastAddr; pthread_mutex_lock(&sessionListMutex); sessionCount = ListCount(sessionList); if (sessionCount > 0) { /* Remove the first message from the front of the list, send it and * add it to the back. */ ListIterator_Init(iterator, sessionList); session = (SAPSession_t*)ListIterator_Current(iterator); ListRemoveCurrent(&iterator); if (session->deleted) { ObjectRefDec(session); } else { ListAdd(sessionList, session); } packetLen = CreateSAPPacket(session, packet); DetermineSAPMulticast(session, &sapMulticastAddr); /* Send the message */ if (session->originatingSource.ss_family == PF_INET) { if (socket4 != -1) { UDPSendTo(socket4, packet, packetLen, (struct sockaddr *)&sapMulticastAddr, sizeof(struct sockaddr_in)); } } else { if (socket6 != -1) { UDPSendTo(socket6, packet, packetLen, (struct sockaddr *)&sapMulticastAddr, sizeof(struct sockaddr_in6)); } } } pthread_mutex_unlock(&sessionListMutex); } dvbstreamer-2.1.0/src/plugins/sap.h000077500000000000000000000023241217721213100172350ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA sap.h Session Announcement Protocol. */ #ifndef _SAP_H #define _SAP_H #include /** * @defgroup SAP Session Announcement Protocol Functions and Structures * @{ */ typedef struct SAPSession_s *SAPSessionHandle_t; bool IsMulticastAddress(struct sockaddr_storage *addr); void SAPServerInit(void); void SAPServerDeinit(void); SAPSessionHandle_t SAPServerAddSession(struct sockaddr_storage *originatingSource, char *sdp); void SAPServerDeleteSession(SAPSessionHandle_t session); /** @} */ #endif dvbstreamer-2.1.0/src/plugins/sectionfilters.c000066400000000000000000000246741217721213100215130ustar00rootroot00000000000000/* Copyright (C) 2009 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA sectionfilters.c Plugin to allow manual filtering of sections. */ #include #include #include #include #include #include #include #include "plugin.h" #include "main.h" #include "list.h" #include "logging.h" #include "deliverymethod.h" #include "ts.h" /******************************************************************************* * Defines * *******************************************************************************/ #define FIND_SECTION_FILTER(_name) \ do { \ int pid; \ char filterName[20]; /* Section(PID 0x%04x) */ \ pid = ParsePID(_name); \ sprintf(filterName, SectionFilterNameFormat, pid); \ filter = TSReaderFindPIDFilter(MainTSReaderGet(), (filterName), SectionPIDFilterType);\ if (!filter)\ {\ CommandError(COMMAND_ERROR_GENERIC, "Section filter not found!");\ return;\ }\ }while(0) /******************************************************************************* * Typedefs * *******************************************************************************/ typedef struct SectionFilter_s { DeliveryMethodInstance_t *dmInstance; dvbpsi_handle dvbpsiHandle; }SectionFilter_t; /******************************************************************************* * Prototypes * *******************************************************************************/ static void CommandAddSecF(int argc, char **argv); static void CommandRemoveSecF(int argc, char **argv); static void CommandListSecF(int argc, char **argv); static void CommandSetOutputMRL(int argc, char **argv); static TSPacket_t * SectionFilterProcessPacket(PIDFilter_t *pidfilter, void *arg, TSPacket_t *packet); static void SectionFilterGatherSections(dvbpsi_decoder_t* p_decoder, dvbpsi_psi_section_t* p_section); static int ParsePID(char *argument); /******************************************************************************* * Global variables * *******************************************************************************/ /* For log output (not used yet) static char SECTIONFILTER[]="SectionFilter"; */ static char SectionPIDFilterType[] = "Section"; static char SectionFilterNameFormat[] = "Section(PID 0x%04x)"; static pthread_mutex_t sectionFiltersMutex = PTHREAD_MUTEX_INITIALIZER; /******************************************************************************* * Plugin Setup * *******************************************************************************/ PLUGIN_COMMANDS( { "addsecf", 2, 2, "Add a new section filter for a PID.", "addsecf \n" "Adds a new section filter for the specified PID.", CommandAddSecF }, { "rmsecf", 1, 1, "Remove a section filter.", "rmoutput \n" "Stops and removes the section filter for the specified PID.", CommandRemoveSecF }, { "lssecfs", 0, 0, "List sections filters.", "List all active section filters.", CommandListSecF }, { "setsecfmrl", 2, 2, "Set the filter's MRL.", "setmfmrl \n" "Change the destination for sections sent to this output. If the MRL cannot be" " parsed no change will be made to the output.", CommandSetOutputMRL } ); PLUGIN_INTERFACE_C( PLUGIN_FOR_ALL, "SectionFilter", "0.1", "Plugin to allow filtering of sections for a PID.", "charrea6@users.sourceforge.net" ); /******************************************************************************* * Command Functions * *******************************************************************************/ static void CommandAddSecF(int argc, char **argv) { DVBAdapter_t *adapter = MainDVBAdapterGet(); TSReader_t *tsFilter = MainTSReaderGet(); PIDFilter_t *filter; PIDFilterSimpleFilter_t *simplePIDFilter; DeliveryMethodInstance_t *dmInstance; uint16_t pid; char filterName[20]; /* Section(PID 0x%04x) */ dvbpsi_decoder_t* dvbpsiHandle; SectionFilter_t *sectionFilter; if (adapter->hardwareRestricted) { CommandError(COMMAND_ERROR_GENERIC, "Not supported in hardware restricted mode!"); return; } CommandCheckAuthenticated(); pid = ParsePID(argv[0]); sprintf(filterName, SectionFilterNameFormat, pid); filter = TSReaderFindPIDFilter(tsFilter, filterName, SectionPIDFilterType); if (filter) { CommandError(COMMAND_ERROR_GENERIC, "Already section filtering this PID!"); return; } filter = PIDFilterAllocate(tsFilter); if (!filter) { CommandError(COMMAND_ERROR_GENERIC, "Failed to allocate a filter!"); return; } simplePIDFilter =(PIDFilterSimpleFilter_t*)ObjectAlloc(sizeof(PIDFilterSimpleFilter_t)); if (!simplePIDFilter) { CommandError(COMMAND_ERROR_GENERIC, "Failed to allocate PIDFilterSimpleFilter_t structure!"); PIDFilterFree(filter); return; } simplePIDFilter->pidcount = 1; simplePIDFilter->pids[0] = pid; dmInstance = DeliveryMethodCreate(argv[1]); if (dmInstance == NULL) { dmInstance = DeliveryMethodCreate("null://"); } ObjectRegisterType(SectionFilter_t); sectionFilter = ObjectCreateType(SectionFilter_t); if (sectionFilter == NULL) { CommandError(COMMAND_ERROR_GENERIC, "Failed to allocate SectionFilter_t structure!"); DeliveryMethodDestroy(dmInstance); ObjectRefDec(simplePIDFilter); PIDFilterFree(filter); return; } dvbpsiHandle = (dvbpsi_decoder_t*)malloc(sizeof(dvbpsi_decoder_t)); sectionFilter->dvbpsiHandle = dvbpsiHandle; sectionFilter->dmInstance = dmInstance; dvbpsiHandle->pf_callback = SectionFilterGatherSections; dvbpsiHandle->p_private_decoder = sectionFilter; dvbpsiHandle->i_section_max_size = 1024; /* PSI decoder initial state */ dvbpsiHandle->i_continuity_counter = 31; dvbpsiHandle->b_discontinuity = 1; dvbpsiHandle->p_current_section = NULL; dvbpsiHandle->p_free_sections = NULL; PIDFilterFilterPacketSet(filter, PIDFilterSimpleFilter, simplePIDFilter); PIDFilterProcessPacketSet(filter, SectionFilterProcessPacket, sectionFilter); filter->name = strdup(filterName); filter->type = SectionPIDFilterType; filter->enabled = TRUE; } static void CommandRemoveSecF(int argc, char **argv) { PIDFilter_t *filter; PIDFilterSimpleFilter_t *simplePIDFilter; DeliveryMethodInstance_t *deliveryMethod; char *name; CommandCheckAuthenticated(); FIND_SECTION_FILTER(argv[0]); name = filter->name; simplePIDFilter = filter->fpArg; deliveryMethod = filter->opArg; PIDFilterFree(filter); ObjectRefDec(simplePIDFilter); free(name); DeliveryMethodDestroy(deliveryMethod); } static void CommandListSecF(int argc, char **argv) { TSReader_t *tsFilter = MainTSReaderGet(); ListIterator_t iterator; TSReaderLock(tsFilter); for ( ListIterator_Init(iterator, tsFilter->pidFilters); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { PIDFilter_t *filter = (PIDFilter_t *)ListIterator_Current(iterator); if (strcmp(filter->type, SectionPIDFilterType) == 0) { CommandPrintf("%10s : %s\n", filter->name, ((SectionFilter_t*)filter->ppArg)->dmInstance->mrl); } } TSReaderUnLock(tsFilter); } static void CommandSetOutputMRL(int argc, char **argv) { PIDFilter_t *filter; DeliveryMethodInstance_t *instance; CommandCheckAuthenticated(); FIND_SECTION_FILTER(argv[0]); pthread_mutex_lock(§ionFiltersMutex); instance = DeliveryMethodCreate(argv[1]); if (instance) { DeliveryMethodDestroy(filter->opArg); filter->opArg = instance; CommandPrintf("MRL set to \"%s\" for %s\n", DeliveryMethodGetMRL(filter), argv[0]); } else { CommandError(COMMAND_ERROR_GENERIC,"Failed to set MRL"); } pthread_mutex_unlock(§ionFiltersMutex); } /******************************************************************************* * Processor Functions * *******************************************************************************/ static TSPacket_t * SectionFilterProcessPacket(PIDFilter_t *pidfilter, void *arg, TSPacket_t *packet) { SectionFilter_t *state = arg; dvbpsi_PushPacket(state->dvbpsiHandle, (uint8_t*)packet); return NULL; } static void SectionFilterGatherSections(dvbpsi_decoder_t* decoder, dvbpsi_psi_section_t* section) { SectionFilter_t *state = decoder->p_private_decoder; DeliveryMethodInstance_t *dmInstance = state->dmInstance; dmInstance->ops->SendBlock(dmInstance, section->p_data, section->i_length + 3); } /******************************************************************************* * Helper Functions * *******************************************************************************/ static int ParsePID(char *argument) { char *formatstr; int pid = 0; if ((argument[0] == '0') && (tolower(argument[1])=='x')) { argument[1] = 'x'; formatstr = "0x%x"; } else { formatstr = "%d"; } if (sscanf(argument, formatstr, &pid) == 0) { return -1; } return pid; } dvbstreamer-2.1.0/src/plugins/sicapture.c000077500000000000000000000223471217721213100204530ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA sicapture.c Plugin to capture only PSI/SI information to an MRL. */ #include #include #include #include #include #include #include "main.h" #include "plugin.h" #include "multiplexes.h" #include "services.h" #include "tuning.h" #include "cache.h" #include "logging.h" #include "deliverymethod.h" /******************************************************************************* * Defines * *******************************************************************************/ #define MAX_EITS 128 /* Maximum number of EIT tables (PIDs) */ #define MAX_ETTS 128 /* Maximum number of ETT tables (PIDs) */ /******************************************************************************* * Prototypes * *******************************************************************************/ static void NewMGT(dvbpsi_atsc_mgt_t *newMGT); static void FilterPacket(void *arg, TSFilterGroup_t *group, TSPacket_t *packet); static void CommandEnableSICapture(int argc, char **argv); static void CommandDisableSICapture(int argc, char **argv); /******************************************************************************* * Global variables * *******************************************************************************/ static TSFilterGroup_t *tsgroup = NULL; static DeliveryMethodInstance_t *dmInstance; static const char SICAPTURE[] = "SICapture"; static int EventInfoTableCount = 0; static uint16_t EventInfoTablePIDs[MAX_EITS]; static int ExtendedTextTableCount = 0; static uint16_t ExtendedTextTablePIDs[MAX_ETTS]; static uint16_t channelETT = 0; /******************************************************************************* * Plugin Setup * *******************************************************************************/ PLUGIN_FEATURES( PLUGIN_FEATURE_MGTPROCESSOR(NewMGT) ); PLUGIN_COMMANDS( { "enablesicap", 1, 1, "Enable the capture of PSI/SI data.", "enablesicap \n" "Enables and sets the MRL to send captured PSI/SI packets to.", CommandEnableSICapture }, { "disablesicap", 0, 0, "Disable the capture of PSI/SI data.", "enablesicap \n" "Disables the capture of PSI/SI packets.", CommandDisableSICapture } ); PLUGIN_INTERFACE_CF( PLUGIN_FOR_ALL, "SICapture", "0.1", "Plugin to capture PSI/SI to an MRL.", "charrea6@users.sourceforge.net" ); /******************************************************************************* * Filter Functions * *******************************************************************************/ static void NewMGT(dvbpsi_atsc_mgt_t *newMGT) { dvbpsi_atsc_mgt_table_t * table; EventInfoTableCount = 0; ExtendedTextTableCount = 0; channelETT = 0; for (table = newMGT->p_first_table; table; table = table->p_next) { if (table->i_type == 0x004) { channelETT = table->i_pid; LogModule(LOG_DEBUG, SICAPTURE, "Channel ETT (%04x)\n", channelETT); } if ((table->i_type >= 0x100) && (table->i_type <= 0x17f)) { LogModule(LOG_DEBUG, SICAPTURE, "EIT %d (%04x)\n",table->i_type - 0x100, table->i_pid); EventInfoTablePIDs[EventInfoTableCount] = table->i_pid; EventInfoTableCount ++; } if ((table->i_type >= 0x200) && (table->i_type <= 0x27f)) { LogModule(LOG_DEBUG, SICAPTURE, "ETT %d (%04x)\n",table->i_type - 0x200, table->i_pid); ExtendedTextTablePIDs[ExtendedTextTableCount] = table->i_pid; ExtendedTextTableCount ++; } } } static void FilterPacket(void *arg, TSFilterGroup_t *group, TSPacket_t *packet) { int result = 0; int i; Multiplex_t *mux; uint16_t pid = TSPACKET_GETPID(*packet); /* Handle PAT */ if (pid == 0) { result = 1; } /* Handle CAT */ if (pid == 1) { result = 1; } /* Handle PMTs */ if(result == 0) { mux = TuningCurrentMultiplexGet(); if (mux) { int i; int count; Service_t **services; services = CacheServicesGet(&count); for (i = 0; i < count; i ++) { if (pid == services[i]->pmtPID) { result = 1; break; } } CacheServicesRelease(); MultiplexRefDec(mux); } } /* Standard specific PIDs */ if (result == 0) { if (MainIsDVB()) { switch(pid) { case 0x10: /* NIT, ST*/ case 0x11: /* SDT, BAT, ST*/ case 0x12: /* EIT, ST, CIT */ case 0x13: /* RST, ST */ case 0x14: /* TDT, TOT, ST */ case 0x16: /* RNT */ result = 1; break; default: break; } } if (MainIsATSC()) { if (pid == 0x1ffb) { result = 1; } else { if (channelETT && (channelETT == pid)) { result = 1; } if (result == 0) { for (i = 0; i < EventInfoTableCount; i ++) { if (EventInfoTablePIDs[i] == pid) { result = 1; break; } } } if (result == 0) { for (i = 0; i < ExtendedTextTableCount; i ++) { if (ExtendedTextTablePIDs[i] == pid) { result = 1; break; } } } } } if (MainIsISDB()) { switch(pid) { case 0x10: /* NIT, ST*/ case 0x11: /* SDT, BAT, ST*/ case 0x12: /* EIT, ST, CIT */ case 0x13: /* RST, ST */ case 0x14: /* TDT, TOT, ST */ case 0x16: /* RNT */ case 0x17: /* DCT */ case 0x1e: /* DIT */ case 0x1f: /* SIT */ case 0x20: /* LIT */ case 0x21: /* ERT */ case 0x22: /* PCAT */ case 0x23: /* SDTT */ case 0x24: /* BIT */ case 0x25: /* NBIT, LDT */ case 0x26: /* EIT */ case 0x27: /* EIT */ case 0x28: /* SDTT */ case 0x29: /* CDT */ result = 1; break; default: break; } } } if (result) { DeliveryMethodOutputPacket(dmInstance, packet); } } /******************************************************************************* * Command Functions * *******************************************************************************/ static void CommandEnableSICapture(int argc, char **argv) { TSReader_t *reader = MainTSReaderGet(); if (tsgroup != NULL) { CommandError(COMMAND_ERROR_GENERIC, "Already enabled!"); return; } tsgroup = TSReaderCreateFilterGroup(reader, "SI Capture", "Misc", NULL, NULL); dmInstance = DeliveryMethodCreate(argv[0]); if (dmInstance) { TSFilterGroupAddPacketFilter(tsgroup, TSREADER_PID_ALL, FilterPacket, NULL); CommandPrintf("SI Capture started (%s)\n", argv[0]); } else { CommandPrintf("Failed to find handler for %s\n", argv[0]); TSFilterGroupDestroy(tsgroup); tsgroup = NULL; } } static void CommandDisableSICapture(int argc, char **argv) { if (tsgroup != NULL) { CommandError(COMMAND_ERROR_GENERIC, "Not enabled!"); return; } TSFilterGroupDestroy(tsgroup); DeliveryMethodDestroy(dmInstance); CommandPrintf("SI Capture stopped\n"); tsgroup = NULL; } dvbstreamer-2.1.0/src/plugins/traffic.c000077500000000000000000000312151217721213100200640ustar00rootroot00000000000000/* Copyright (C) 2008 Steve VanDeBogart 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA traffic.c Plugin to display PID traffic. */ #include #include #include #include #include #include #include "main.h" #include "plugin.h" #include "cache.h" #include "tuning.h" #include "list.h" /******************************************************************************* * Typedefs * *******************************************************************************/ typedef struct TrafficPIDCount_s { uint16_t PID; uint16_t count; uint16_t oldCount; } TrafficPIDCount_t; #define PID_EOL ((1 << 16) - 1) /******************************************************************************* * Prototypes * *******************************************************************************/ static void InitFilter(PIDFilter_t *filter); static void DeinitFilter(PIDFilter_t *filter); static int FilterPacket(PIDFilter_t *pidfilter, void *arg, uint16_t pid, TSPacket_t *packet); static TSPacket_t* ProcessPacket(PIDFilter_t *pidfilter, void *arg, TSPacket_t *packet); static void HandleMuxChange(struct PIDFilter_s *pidfilter, void *userarg, Multiplex_t *multiplex); static void RotateData(void); static TrafficPIDCount_t * CopyPIDCounts(void); static void CommandTraffic(int argc, char **argv); /******************************************************************************* * Global variables * *******************************************************************************/ static PluginFilter_t TrafficFilter = {NULL, InitFilter, DeinitFilter}; static pthread_mutex_t TrafficMutex = PTHREAD_MUTEX_INITIALIZER; static List_t * PIDCounts = NULL; static int pidListLength = 0; static struct timeval currentStart; static struct timeval lastStart; static bool serviceLock; /******************************************************************************* * Plugin Setup * *******************************************************************************/ PLUGIN_FEATURES( PLUGIN_FEATURE_FILTER(TrafficFilter) ); PLUGIN_COMMANDS( { "traffic", 0, 2, "Display the packet rate for each PID in the TS", "traffic [-s] [-i]\n" "Display the packet rate for each PID in the TS.\n" "Optionally, display known service association (-s) or information (-i).", CommandTraffic } ); PLUGIN_INTERFACE_CF( PLUGIN_FOR_ALL, "Traffic", "0.1", "Plugin to display traffic on the current mux.", "dvbstreamerplugin@nerdbox.net" ); /******************************************************************************* * Filter Functions * *******************************************************************************/ static void InitFilter(PIDFilter_t *filter) { filter->name = "Traffic Capture"; PIDFilterFilterPacketSet(filter, FilterPacket, NULL); PIDFilterProcessPacketSet(filter, ProcessPacket, NULL); PIDFilterMultiplexChangeSet(filter, HandleMuxChange, NULL); pthread_mutex_lock(&TrafficMutex); PIDCounts = ListCreate(); pidListLength = 0; serviceLock = FALSE; lastStart.tv_sec = currentStart.tv_sec = 0; lastStart.tv_usec = currentStart.tv_usec = 0; filter->enabled = TRUE; pthread_mutex_unlock(&TrafficMutex); } static void DeinitFilter(PIDFilter_t *filter) { filter->enabled = FALSE; pthread_mutex_lock(&TrafficMutex); ListFree(PIDCounts, free); pidListLength = 0; PIDCounts = NULL; pthread_mutex_unlock(&TrafficMutex); } static void HandleMuxChange(struct PIDFilter_s *pidfilter, void *userarg, Multiplex_t *multiplex) { pthread_mutex_lock(&TrafficMutex); ListFree(PIDCounts, free); PIDCounts = ListCreate(); pidListLength = 0; serviceLock = FALSE; lastStart.tv_sec = currentStart.tv_sec = 0; lastStart.tv_usec = currentStart.tv_usec = 0; pthread_mutex_unlock(&TrafficMutex); } static int FilterPacket(PIDFilter_t *pidfilter, void *arg, uint16_t pid, TSPacket_t *packet) { // We're only interested in collecting data when there's a lock on a mux if (serviceLock == FALSE) { DVBAdapter_t *adapter; Service_t * service; service = TuningCurrentServiceGet(); if (!service) { return 0; } ServiceRefDec(service); adapter = MainDVBAdapterGet(); if (!adapter->frontEndLocked) { return 0; } serviceLock = TRUE; } return 1; } static TSPacket_t * ProcessPacket(PIDFilter_t *pidfilter, void *arg, TSPacket_t *packet) { ListIterator_t iterator; TrafficPIDCount_t * data = NULL; uint16_t pid = TSPACKET_GETPID(*packet); if (PIDCounts != NULL) { pthread_mutex_lock(&TrafficMutex); RotateData(); for (ListIterator_Init(iterator, PIDCounts); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { data = (TrafficPIDCount_t *)ListIterator_Current(iterator); if (data->PID >= pid) { break; } } if (data && data->PID == pid) { data->count++; } else { data = calloc(1, sizeof(TrafficPIDCount_t)); if (data) { data->PID = pid; data->count = 1; data->oldCount = 0; ListInsertBeforeCurrent(&iterator, data); pidListLength++; } } pthread_mutex_unlock(&TrafficMutex); } return NULL; } static void subtract_timeval(struct timeval a, struct timeval b, struct timeval * result) { result->tv_sec = a.tv_sec - b.tv_sec; result->tv_usec = a.tv_usec - b.tv_usec; if (result->tv_usec < 0) { result->tv_sec--; result->tv_usec += 1000000; } } static void RotateData() { ListIterator_t iterator; TrafficPIDCount_t * data; struct timeval tmp; struct timeval now; if (serviceLock == FALSE) { return; } gettimeofday(&now, 0); if (currentStart.tv_sec == 0) { currentStart = now; lastStart = now; } subtract_timeval(now, currentStart, &tmp); if (tmp.tv_sec) { lastStart = currentStart; currentStart = now; for (ListIterator_Init(iterator, PIDCounts); ListIterator_MoreEntries(iterator); ) { data = (TrafficPIDCount_t *)ListIterator_Current(iterator); if (data->count == 0 && data->oldCount == 0) { ListRemoveCurrent(&iterator); pidListLength--; } else { data->oldCount = data->count; data->count = 0; ListIterator_Next(iterator); } } } } static TrafficPIDCount_t * CopyPIDCounts(void) { ListIterator_t iterator; TrafficPIDCount_t * data; int i; data = calloc(pidListLength + 1, sizeof(TrafficPIDCount_t)); if (data == NULL) { return NULL; } for (i = 0, ListIterator_Init(iterator, PIDCounts); i < pidListLength && ListIterator_MoreEntries(iterator); i++, ListIterator_Next(iterator)) { data[i] = *(TrafficPIDCount_t *)ListIterator_Current(iterator); } data[i].PID = PID_EOL; return data; } /******************************************************************************* * Command Functions * *******************************************************************************/ static void CommandTraffic(int argc, char **argv) { bool printService = FALSE; bool printServiceName = FALSE; bool printServiceInfo = FALSE; TrafficPIDCount_t * data; Multiplex_t *multiplex = NULL; int i; uint64_t freq = 0; uint64_t rate; struct timeval tmp; uint64_t time; int timeout = 30; // Wait up to 6s, (30 * 200000 usec) for (i = 0; i < argc; i++) { if (strcmp(argv[i], "-s") == 0) { printService = TRUE; printServiceName = TRUE; } else if (strcmp(argv[i], "-i") == 0) { printService = TRUE; printServiceInfo = TRUE; } else { CommandPrintf("Invalid argument\n"); return; } } /* Ensure the database is up-to-date */ UpdateDatabase(); /* Wait until there's data available */ pthread_mutex_lock(&TrafficMutex); if (lastStart.tv_sec == currentStart.tv_sec && lastStart.tv_usec == currentStart.tv_usec) { RotateData(); while (timeout > 0 && lastStart.tv_sec == currentStart.tv_sec && lastStart.tv_usec == currentStart.tv_usec) { pthread_mutex_unlock(&TrafficMutex); if (timeout == 28) { CommandPrintf("...Waiting up to 6 seconds for data to arrive...\n"); } usleep(200000); pthread_mutex_lock(&TrafficMutex); RotateData(); timeout--; } } if (serviceLock == FALSE) { pthread_mutex_unlock(&TrafficMutex); return; } /* Copy the data so that we don't printf on the critical path */ data = CopyPIDCounts(); pthread_mutex_unlock(&TrafficMutex); CommandPrintf(" PID Frequency Datarate%s\n", printService ? " Service" : ""); CommandPrintf(" (pkts/s) (kbit/s)\n"); subtract_timeval(currentStart, lastStart, &tmp); time = tmp.tv_usec + tmp.tv_sec * 1000000; if (data == NULL) { printService = FALSE; } if (printService) { multiplex = TuningCurrentMultiplexGet(); } if (!multiplex) { printService = FALSE; } for (i = 0; data[i].PID != PID_EOL; i++) { if (time != 0 && data[i].oldCount != 0) { freq = ((uint64_t)data[i].oldCount * 1000000)/time; rate = (freq * 188 * 8)/1024; if (printService) { char * name = ""; char * info = ""; Service_t *service; void **ptr = (void*)&service; List_t *list = ServiceListForPID(data[i].PID, multiplex); if (list && (ListCount(list) > 0)) { ListGet(list, 0, ptr); if (printServiceName) { name = service->name; } if (printServiceInfo && data[i].PID == service->pmtPID) { info = " (PMT)"; } if (printServiceInfo && data[i].PID == service->pcrPid) { info = " (PCR)"; } } CommandPrintf("%4d (0x%04x) %5lld %5lld - %s%s\n", data[i].PID, data[i].PID, freq, rate, name, info); if (list) { ObjectListFree(list); } } else { CommandPrintf("%4d (0x%04x) %5lld %5lld\n", data[i].PID, data[i].PID, freq, rate); } } } free(data); if (printService) { MultiplexRefDec(multiplex); } } dvbstreamer-2.1.0/src/plugins/udp.c000066400000000000000000000066001217721213100172330ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA udpsend.c Simplify UDP socket creation and packet sending. */ #include "config.h" #include #include #include #include #include #include #include #include #include "main.h" #include "logging.h" #include "udp.h" /******************************************************************************* * Defines * *******************************************************************************/ #define PORT 54197 // 0xd3b5 ~= DVBS /******************************************************************************* * Global variables * *******************************************************************************/ static const char UDP[] = "UDP"; /******************************************************************************* * Global functions * *******************************************************************************/ int UDPCreateSocket(sa_family_t family) { int socketfd = socket(family, SOCK_DGRAM, IPPROTO_UDP); int reuseAddr = 1; struct sockaddr *addr; socklen_t addr_len; #ifdef USE_GETADDRINFO struct addrinfo *addrinfo, hints; int ret; #else struct sockaddr_in ip4addr; #endif if (socketfd < 0) { LogModule(LOG_INFO, UDP, "socket() failed (%d: %s)\n", errno, strerror(errno)); return -1; } if (setsockopt(socketfd, SOL_SOCKET, SO_REUSEADDR, &reuseAddr, sizeof(int))) { LogModule(LOG_INFO, UDP, "setsockopt(SOL_SOCKET, SO_REUSEADDR) failed (%d: %s)\n", errno, strerror(errno)); close(socketfd); return -1; } #ifdef USE_GETADDRINFO memset((void *)&hints, 0, sizeof(hints)); hints.ai_family = family; hints.ai_socktype = SOCK_DGRAM; hints.ai_flags = AI_PASSIVE | AI_NUMERICSERV; ret = getaddrinfo(NULL, TOSTRING(PORT), &hints, &addrinfo); if (ret != 0 || addrinfo == NULL) { LogModule(LOG_INFO, UDP, "getaddrinfo() failed with error %s\n", gai_strerror(ret)); return -1; } addr = addrinfo->ai_addr; addr_len = addrinfo->ai_addrlen; #else ip4addr.sin_family = AF_INET; ip4addr.sin_port = PORT; ip4addr.sin_addr.s_addr = INADDR_ANY; addr = (struct sockaddr*)&ip4addr; addr_len = sizeof(ip4addr); #endif if (bind(socketfd, addr, addr_len)<0) { LogModule(LOG_INFO,UDP, "bind() failed (%d: %s)\n", errno, strerror(errno)); close(socketfd); socketfd = -1; } #ifdef USE_GETADDRINFO freeaddrinfo(addrinfo); #endif return socketfd; } dvbstreamer-2.1.0/src/plugins/udpoutput.c000066400000000000000000000370471217721213100205250ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA udpoutput.c UDP Output Delivery Method handler. */ #include #include #include #include #include #include #include #include #include #include "plugin.h" #include "ts.h" #include "udp.h" #include "deliverymethod.h" #include "logging.h" #include "sap.h" /******************************************************************************* * Defines * *******************************************************************************/ #define MTU 1400 /* Conservative estimate */ #define IP_HEADER (5*4) #define UDP_HEADER (2*4) #define MAX_TS_PACKETS_PER_DATAGRAM ((MTU - (IP_HEADER+UDP_HEADER)) / sizeof(TSPacket_t)) #define RTP_HEADER_SIZE 12 /* Default output targets if only host or port part is given */ #define DEFAULT_HOST "localhost" #define DEFAULT_PORT "1234" /******************************************************************************* * Typedefs * *******************************************************************************/ struct UDPOutputState_t { /* !!! MUST BE THE FIRST FIELD IN THE STRUCTURE !!! * As the address of this field will be passed to all delivery method * functions and a 0 offset is assumed! */ DeliveryMethodInstance_t instance; int socket; socklen_t addressLen; struct sockaddr_storage address; SAPSessionHandle_t sapHandle; int datagramFullCount; int tsPacketCount; uint16_t sequence; /* rtpHeader must always come before outputBuffer as the order is important when sending RTP packets as rtpHeader is passed as the address of the buffer to send! */ uint8_t rtpHeader[RTP_HEADER_SIZE]; TSPacket_t outputBuffer[MAX_TS_PACKETS_PER_DATAGRAM]; }; /******************************************************************************* * Prototypes * *******************************************************************************/ void UDPOutputInstall(bool installed); static bool UDPOutputCanHandle(char *mrl); static DeliveryMethodInstance_t *UDPOutputCreate(char *arg); static void UDPOutputSendPacket(DeliveryMethodInstance_t *this, TSPacket_t *packet); static void UDPOutputSendBlock(DeliveryMethodInstance_t *this, void *block, unsigned long blockLen); static void UDPOutputDestroy(DeliveryMethodInstance_t *this); static void RTPOutputSendPacket(DeliveryMethodInstance_t *this, TSPacket_t *packet); static void RTPHeaderInit(uint8_t *header, uint16_t sequence); static void CreateSAPSession(struct UDPOutputState_t *state, bool rtp, unsigned char ttl, char *sessionName); /******************************************************************************* * Global variables * *******************************************************************************/ /** Constants for the start of the MRL **/ #define PREFIX_LEN (sizeof(UDPPrefix) - 1) const char UDPPrefix[] = "udp://"; const char RTPPrefix[] = "rtp://"; DeliveryMethodInstanceOps_t UDPInstanceOps = { UDPOutputSendPacket, UDPOutputSendBlock, UDPOutputDestroy, NULL, NULL }; DeliveryMethodInstanceOps_t RTPInstanceOps = { RTPOutputSendPacket, NULL, UDPOutputDestroy, NULL, NULL }; const char UDPOUTPUT[] = "UDPOutput"; /******************************************************************************* * Plugin Setup * *******************************************************************************/ PLUGIN_FEATURES( PLUGIN_FEATURE_DELIVERYMETHOD(UDPOutputCanHandle, UDPOutputCreate), PLUGIN_FEATURE_INSTALL(UDPOutputInstall) ); PLUGIN_INTERFACE_F( PLUGIN_FOR_ALL, "UDPOutput", "0.3", "UDP Delivery methods.\n" "Use udp://[:[[:[:session name]]]] for simple raw TS packets in a UDP datagram.\n" "Use rtp://[:[[:[:session name]]]] for RTP encapsulation.\n" "Default host is localhost, default port is 1234", "charrea6@users.sourceforge.net" ); void UDPOutputInstall(bool installed) { if (installed) { SAPServerInit(); } else { SAPServerDeinit(); } } /******************************************************************************* * Delivery Method Functions * *******************************************************************************/ static bool UDPOutputCanHandle(char *mrl) { return (strncmp(UDPPrefix, mrl, PREFIX_LEN) == 0) || (strncmp(RTPPrefix, mrl, PREFIX_LEN) == 0); } static DeliveryMethodInstance_t *UDPOutputCreate(char *arg) { struct UDPOutputState_t *state; int i = 0; unsigned char ttl = 1; char hostbuffer[256]; char portbuffer[6]; /* 65536\0 */ char *sessionName= "DVBStreamer"; bool rtp; char *mrl = arg; hostbuffer[0] = 0; portbuffer[0] = 0; /* * Process the mrl */ /* Is this a RTP MRL? */ rtp = (strncmp(RTPPrefix, mrl, PREFIX_LEN) == 0); /* Ignore the prefix */ mrl += PREFIX_LEN; if (mrl[0] == '[') { mrl ++; LogModule(LOG_DEBUG, UDPOUTPUT, "IPv6 Address! %s\n", mrl); for (i = 0;mrl[i] && (mrl[i] != ']'); i ++) { hostbuffer[i] = mrl[i]; } hostbuffer[i] = 0; mrl += i; if (*mrl == ']') { mrl ++; } } else { LogModule(LOG_DEBUG, UDPOUTPUT, "IPv4 Address! %s\n", mrl); for (i = 0;mrl[i] && (mrl[i] != ':'); i ++) { hostbuffer[i] = mrl[i]; } hostbuffer[i] = 0; mrl += i; } /* Port */ if (*mrl == ':') { mrl ++; LogModule(LOG_DEBUG, UDPOUTPUT, "Port parameter detected! %s\n", mrl); /* Process port */ for (i = 0;mrl[i] && (mrl[i] != ':'); i ++) { portbuffer[i] = mrl[i]; } portbuffer[i] = 0; mrl += i; } /* TTL */ if (*mrl == ':') { char ttlbuffer[4]; mrl ++; LogModule(LOG_DEBUG, UDPOUTPUT, "TTL parameter detected! %s\n", mrl); for (i = 0;mrl[i] && (mrl[i] != ':') && (i < 3); i ++) { ttlbuffer[i] = mrl[i]; } /* process ttl */ ttl = (unsigned char)atoi(ttlbuffer) & 255; mrl += i; } /* Anything else is the session name for SAP/SDP */ if (*mrl == ':') { mrl ++; sessionName = mrl; } /* * Lookup the host name and port */ if (hostbuffer[0] == 0) { strcpy(hostbuffer, DEFAULT_HOST); } if (portbuffer[0] == 0) { strcpy(portbuffer, DEFAULT_PORT); } state = calloc(1, sizeof(struct UDPOutputState_t)); if (state == NULL) { LogModule(LOG_DEBUG, UDPOUTPUT, "Failed to allocate UDP Output state\n"); return NULL; } if (rtp) { state->instance.ops = &RTPInstanceOps; } else { state->instance.ops = &UDPInstanceOps; } LogModule(LOG_DEBUG, UDPOUTPUT, "UDP Host \"%s\" Port \"%s\" TTL %d\n", hostbuffer, portbuffer, ttl); #ifdef USE_GETADDRINFO { struct addrinfo *addrinfo, hints; memset((void *)&hints, 0, sizeof(hints)); hints.ai_socktype = SOCK_DGRAM; hints.ai_flags = AI_ADDRCONFIG; if ((getaddrinfo(hostbuffer, portbuffer, &hints, &addrinfo) != 0) || (addrinfo == NULL)) { LogModule(LOG_DEBUG, UDPOUTPUT,"Failed to set UDP target address\n"); free(state); return NULL; } if (addrinfo->ai_addrlen > sizeof(struct sockaddr_storage)) { freeaddrinfo(addrinfo); free(state); return NULL; } state->addressLen = addrinfo->ai_addrlen; memcpy(&state->address, addrinfo->ai_addr, addrinfo->ai_addrlen); freeaddrinfo(addrinfo); } #else { struct sockaddr_in sockaddr; struct hostent *hostinfo; sockaddr.sin_port=htons(atoi(portbuffer)); hostinfo = gethostbyname(hostbuffer); if (hostinfo == NULL) { LogModule(LOG_DEBUG, UDPOUTPUT,"Failed to set UDP target address\n"); return NULL; } sockaddr.sin_family = hostinfo->h_addrtype; memcpy((char *)&(sockaddr.sin_addr), hostinfo->h_addr, hostinfo->h_length); memcpy(&state->address, &sockaddr, sizeof(sockaddr)); state->addressLen = sizeof(sockaddr); } #endif state->socket = UDPCreateSocket(state->address.ss_family); if (state->socket == -1) { LogModule(LOG_DEBUG, UDPOUTPUT,"Failed to create UDP socket\n"); free(state); return NULL; } if (IsMulticastAddress(&state->address)) { if (ttl > 1) { setsockopt(state->socket,IPPROTO_IP,IP_MULTICAST_TTL, &ttl,sizeof(ttl)); } CreateSAPSession(state, rtp, ttl, sessionName); } state->datagramFullCount = MAX_TS_PACKETS_PER_DATAGRAM; state->instance.mrl = strdup(arg); return &state->instance; } static void UDPOutputDestroy(DeliveryMethodInstance_t *this) { struct UDPOutputState_t *state = (struct UDPOutputState_t *)this; close(state->socket); if (state->sapHandle) { SAPServerDeleteSession(state->sapHandle); } free(this->mrl); free(state); } static void UDPOutputSendPacket(DeliveryMethodInstance_t *this, TSPacket_t *packet) { struct UDPOutputState_t *state = (struct UDPOutputState_t*)this; state->outputBuffer[state->tsPacketCount++] = *packet; if (state->tsPacketCount >= state->datagramFullCount) { UDPSendTo(state->socket, (char*)state->outputBuffer, state->datagramFullCount * TSPACKET_SIZE, (struct sockaddr *)(&state->address), state->addressLen); state->tsPacketCount = 0; } } static void UDPOutputSendBlock(DeliveryMethodInstance_t *this, void *block, unsigned long blockLen) { struct UDPOutputState_t *state = (struct UDPOutputState_t*)this; UDPSendTo(state->socket, (char*)block, blockLen, (struct sockaddr *)(&state->address), state->addressLen); } static void RTPOutputSendPacket(DeliveryMethodInstance_t *this, TSPacket_t *packet) { struct UDPOutputState_t *state = (struct UDPOutputState_t*)this; state->outputBuffer[state->tsPacketCount++] = *packet; if (state->tsPacketCount >= state->datagramFullCount) { RTPHeaderInit(state->rtpHeader, state->sequence); UDPSendTo(state->socket, (char*)state->rtpHeader, (state->datagramFullCount * TSPACKET_SIZE) + RTP_HEADER_SIZE, (struct sockaddr *)(&state->address), state->addressLen); state->tsPacketCount = 0; state->sequence ++; } } static void RTPHeaderInit(uint8_t *header, uint16_t sequence) { uint32_t temp; struct timeval tv; gettimeofday(&tv,(struct timezone*) NULL); /* Flags and payload type */ header[0] = (2 << 6); /* Version 2, No Padding, No Extensions, No CSRC count */ header[1] = 33; /* No Marker, Payload type MP2T */ /* Sequence */ header[2] = (uint8_t) (sequence >> 8) & 0xff; header[3] = (uint8_t) (sequence >> 0) & 0xff; /* Time stamp */ temp = ((tv.tv_sec%1000000)*1000000 + tv.tv_usec)/11; /* approximately a 90Khz clock (1000000/90000 = 11.1111111...)*/ header[4] = (temp >> 24) & 0xff; header[5] = (temp >> 16) & 0xff; header[6] = (temp >> 8) & 0xff; header[7] = temp & 0xff; /* SSRC (Not implemented) */ header[8] = 0x0f; header[9] = 0x0f; header[10] = 0x0f; header[11] = 0x0f; } static void CreateSAPSession(struct UDPOutputState_t *state, bool rtp, unsigned char ttl, char *sessionName) { char sdp[1000] = {0}; char hostname[256]; char addrtype[4]; char ipaddr[256]; char typevalue[256]; in_port_t port = 0; struct timeval tv; gettimeofday(&tv,(struct timezone*) NULL); gethostname(hostname, sizeof(hostname) - 1); #ifdef USE_GETADDRINFO { struct addrinfo *addrinfo, hints; memset((void *)&hints, 0, sizeof(hints)); hints.ai_socktype = SOCK_DGRAM; hints.ai_flags = AI_ADDRCONFIG; if ((getaddrinfo(hostname, NULL, &hints, &addrinfo) != 0) || (addrinfo == NULL)) { LogModule(LOG_DEBUG, UDPOUTPUT,"Failed to get host address\n"); return; } if (addrinfo->ai_addrlen > sizeof(struct sockaddr_storage)) { freeaddrinfo(addrinfo); return; } if (addrinfo->ai_family == AF_INET) { struct sockaddr_in *inaddr = (struct sockaddr_in *) addrinfo->ai_addr; inet_ntop(AF_INET, &inaddr->sin_addr, ipaddr, sizeof(ipaddr)); strcpy(addrtype, "IP4"); } else { struct sockaddr_in6 *in6addr = (struct sockaddr_in6 *) addrinfo->ai_addr; inet_ntop(AF_INET6, &in6addr->sin6_addr, ipaddr, sizeof(ipaddr)); strcpy(addrtype, "IP6"); } freeaddrinfo(addrinfo); } #else { struct hostent *hostinfo; hostinfo = gethostbyname(hostname); if (hostinfo == NULL) { LogModule(LOG_DEBUG, UDPOUTPUT,"Failed to get host address\n"); return; } inet_ntop(hostinfo->h_addrtype, hostinfo->h_addr, ipaddr, sizeof(ipaddr)); if (hostinfo->h_addrtype) { strcpy(addrtype, "IP4"); } else { strcpy(addrtype, "IP6"); } } #endif #define SDPAdd(type,value) \ do{\ sprintf(typevalue,"%c=" value "\r\n", type);\ strcat(sdp,typevalue);\ }while(0) #define SDPAddf(type,fmt,values...) \ do{\ sprintf(typevalue,"%c=" fmt "\r\n", type, values);\ strcat(sdp,typevalue);\ }while(0) SDPAdd('v',"0"); SDPAddf('o',"- %ld%ld 0 IN %s %s", tv.tv_sec, tv.tv_usec, addrtype, ipaddr); SDPAddf('s',"%s", sessionName); if (state->address.ss_family == AF_INET) { struct sockaddr_in *inaddr = (struct sockaddr_in *) &state->address; inet_ntop(AF_INET, &inaddr->sin_addr, ipaddr, sizeof(ipaddr)); SDPAddf('c',"IN IP4 %s/%d", ipaddr,ttl); port = ntohs(inaddr->sin_port); } #ifdef USE_GETADDRINFO else { struct sockaddr_in6 *in6addr = (struct sockaddr_in6 *) &state->address; inet_ntop(AF_INET6, &in6addr->sin6_addr, ipaddr, sizeof(ipaddr)); SDPAddf('c',"IN IP6 %s", ipaddr); port = ntohs(in6addr->sin6_port); } #endif SDPAdd('t',"0 0"); if (rtp) { SDPAddf('m',"video %d RTP/AVP 33", port); } else { SDPAddf('m',"video %d udp 33", port); } state->sapHandle = SAPServerAddSession(&state->address, sdp); } dvbstreamer-2.1.0/src/properties.c000077500000000000000000000452201217721213100171620ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA properties.c Expose internal properties to the user. */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include "objects.h" #include "logging.h" #include "properties.h" /******************************************************************************* * Defines * *******************************************************************************/ typedef struct PropertyNode_s { struct PropertyNode_s *parent; struct PropertyNode_s *next; const char *name; const char *desc; PropertyType_e type; void *userArg; union { struct { PropertySimpleAccessor_t set; PropertySimpleAccessor_t get; }simple; }accessors; struct PropertyNode_s *childNodes; }PropertyNode_t; /******************************************************************************* * Prototypes * *******************************************************************************/ static PropertyNode_t *PropertiesCreateNodes(const char *path); static PropertyNode_t *PropertiesCreateNode(PropertyNode_t *parentNode, const char *newProp); static PropertyNode_t *PropertiesFindNode(PropertyPathElements_t *pathElements, int *leftOver, PropertyNode_t **before); static int PropertiesStrToValue(char *input, PropertyType_e toType, PropertyValue_t *output); static PropertyPathElements_t * PropertyPathSplitElements(const char *path); static void PropertyPathElementsDestructor(void * ptr); static void PropertryDestructor(void *ptr); /******************************************************************************* * Global variables * *******************************************************************************/ static PropertyNode_t rootProperty; static char PROPERTIES[]="Properties"; /******************************************************************************* * Global functions * *******************************************************************************/ int PropertiesInit(void) { rootProperty.parent = NULL; rootProperty.next = NULL; rootProperty.name = ""; rootProperty.desc = "Root of all properties"; rootProperty.type = PropertyType_None; rootProperty.childNodes = NULL; ObjectRegisterTypeDestructor(PropertyNode_t, PropertryDestructor); ObjectRegisterTypeDestructor(PropertyPathElements_t, PropertyPathElementsDestructor); return 0; } int PropertiesDeInit(void) { /* Run down the tree and free all Property Nodes and lists. */ while (rootProperty.childNodes) { PropertiesRemoveAllProperties(rootProperty.childNodes->name); } return 0; } int PropertiesAddProperty(const char *path, const char *name, const char *desc, PropertyType_e type, void *userArg, PropertySimpleAccessor_t get, PropertySimpleAccessor_t set) { PropertyNode_t *parentNode = PropertiesCreateNodes(path); PropertyNode_t *propertyNode = PropertiesCreateNode(parentNode, name); propertyNode->desc =desc; propertyNode->type = type; propertyNode->userArg = userArg; propertyNode->accessors.simple.get = get; propertyNode->accessors.simple.set = set; return 0; } int PropertiesRemoveProperty(const char *path, const char *name) { int result = 0; int leftOver; PropertyPathElements_t *pathElements = PropertyPathSplitElements(path); PropertyNode_t *parentNode = PropertiesFindNode(pathElements, &leftOver, NULL); ObjectRefDec(pathElements); if ((parentNode == NULL) || (leftOver != -1)) { LogModule(LOG_ERROR, PROPERTIES, "Couldn't find parent \"%s\" while trying to remove node %s", path, name); result = -1; } else { PropertyNode_t *prevNode = NULL; PropertyNode_t *currentNode; for (currentNode = parentNode->childNodes; currentNode; currentNode = currentNode->next) { if (strcmp(name, currentNode->name) == 0) { break; } prevNode = currentNode; } if (currentNode == NULL) { LogModule(LOG_ERROR, PROPERTIES, "Couldn't find \"%s\" with parent %s", name, path); result = -1; } else { if (currentNode->childNodes != NULL) { LogModule(LOG_ERROR, PROPERTIES, "Not removing \"%s\" with parent %s as it has children", name, path); result = -1; } else { prevNode->next = currentNode->next; ObjectRefDec(currentNode); } } } return result; } int PropertiesRemoveAllProperties(const char *path) { int result = 0; int leftOver; PropertyPathElements_t *pathElements = PropertyPathSplitElements(path); PropertyNode_t *prevNode = NULL; PropertyNode_t *node = PropertiesFindNode(pathElements, &leftOver, &prevNode); PropertyNode_t *nextNode; PropertyNode_t *parentNode = node; if ((node == NULL) || (leftOver != -1)) { LogModule(LOG_ERROR, PROPERTIES, "Couldn't find parent \"%s\" while trying to remove nodes", path); result = -1; } else { do { for (;node->childNodes != NULL; node = node->childNodes); if (node != parentNode) { if (node->next == NULL) { nextNode = node->parent; nextNode->childNodes = NULL; } else { nextNode = node->next; } ObjectRefDec(node); node = nextNode; } }while (node != parentNode); nextNode = parentNode->next; if (parentNode->parent->childNodes == parentNode) { parentNode->parent->childNodes = nextNode; } if (prevNode != NULL) { prevNode->next = nextNode; } ObjectRefDec(parentNode); } ObjectRefDec(pathElements); return result; } int PropertiesSet(char *path, PropertyValue_t *value) { int result = -1; int leftOver; PropertyPathElements_t *pathElements = PropertyPathSplitElements(path); PropertyNode_t *node = PropertiesFindNode(pathElements, &leftOver, NULL); if ((node != NULL) && (leftOver == -1)) { if ((node->type == value->type) && (node->accessors.simple.set != NULL)) { result = node->accessors.simple.set(node->userArg, value); } else { LogModule(LOG_ERROR, PROPERTIES, "Wrong type supplied as value while trying to set property %s!", path); } } ObjectRefDec(pathElements); return result; } int PropertiesGet(char *path, PropertyValue_t *value) { int result = -1; int leftOver; PropertyPathElements_t *pathElements = PropertyPathSplitElements(path); PropertyNode_t *node = PropertiesFindNode(pathElements, &leftOver, NULL); if ((node != NULL) && (leftOver == -1)) { if (node->accessors.simple.get != NULL) { value->type = node->type; result = node->accessors.simple.get(node->userArg, value); } } ObjectRefDec(pathElements); return result; } int PropertiesSetStr(char *path, char *value) { int result = -1; PropertyValue_t newValue; int leftOver; PropertyPathElements_t *pathElements = PropertyPathSplitElements(path); PropertyNode_t *node = PropertiesFindNode(pathElements, &leftOver, NULL); if ((node == NULL) || (leftOver != -1)) { result = -1; } else { PropertiesStrToValue(value, node->type, &newValue); if ((node->type == newValue.type) && (node->accessors.simple.set != NULL)) { result = node->accessors.simple.set(node->userArg, &newValue); } else { LogModule(LOG_ERROR, PROPERTIES, "Wrong type supplied as value while trying to set property %s!", path); result = -1; } } ObjectRefDec(pathElements); return result; } int PropertiesEnumerate(char *path, PropertiesEnumerator_t *pos) { int result = 0; int leftOver = -1; PropertyPathElements_t *pathElements = NULL; PropertyNode_t *node = NULL; if ((path == NULL) || (path[0] == 0)) { node = &rootProperty; } else { pathElements = PropertyPathSplitElements(path); node = PropertiesFindNode(pathElements, &leftOver, NULL); } if ((node == NULL) || (leftOver != -1)) { result = -1; } else { *pos = node->childNodes; } if (pathElements) { ObjectRefDec(pathElements); } return result; } PropertiesEnumerator_t PropertiesEnumNext(PropertiesEnumerator_t pos) { PropertyNode_t *node = pos; if (node) { return node->next; } return NULL; } void PropertiesEnumGetInfo(PropertiesEnumerator_t pos, PropertyInfo_t *propInfo) { PropertyNode_t *node = pos; if (node) { propInfo->name = (char *)node->name; propInfo->desc = (char *)node->desc; propInfo->type = node->type; propInfo->readable = (node->accessors.simple.get != NULL); propInfo->writeable = (node->accessors.simple.set != NULL); propInfo->hasChildren = (node->childNodes != NULL); } } int PropertiesGetInfo(char *path, PropertyInfo_t *propInfo) { int result = 0; int leftOver; PropertyPathElements_t *pathElements = PropertyPathSplitElements(path); PropertyNode_t *node = PropertiesFindNode(pathElements, &leftOver, NULL); if ((node == NULL) || (leftOver != -1)) { result = -1; } else { propInfo->name = (char *)node->name; propInfo->desc = (char *)node->desc; propInfo->type = node->type; propInfo->readable = (node->accessors.simple.get != NULL); propInfo->writeable = (node->accessors.simple.set != NULL); propInfo->hasChildren = (node->childNodes != NULL); } ObjectRefDec(pathElements); return result; } static int PropertiesStrToValue(char *input, PropertyType_e toType, PropertyValue_t *output) { unsigned int pid; output->type = PropertyType_None; switch(toType) { case PropertyType_Int: if (sscanf(input, "%d", &output->u.integer) == 1) { output->type = PropertyType_Int; } break; case PropertyType_Float: if (sscanf(input, "%lf", &output->u.fp) == 1) { output->type = PropertyType_Float; } break; case PropertyType_Boolean: if (strcasecmp(input, "true") == 0) { output->type = PropertyType_Boolean; output->u.boolean = TRUE; } else if (strcasecmp(input, "false") == 0) { output->type = PropertyType_Boolean; output->u.boolean = FALSE; } break; case PropertyType_String: output->type = PropertyType_String; output->u.string = strdup(input); break; case PropertyType_Char: output->type = PropertyType_Char; output->u.ch = *input; break; case PropertyType_PID: if (sscanf(input, "%u", &pid) == 0) { if (pid < 8193) { output->type = PropertyType_PID; output->u.pid = (uint16_t)pid; } } break; case PropertyType_IPAddress: break; default: break; } return output->type == PropertyType_None ? -1:0; } int PropertiesSimplePropertyGet(void *userArg, PropertyValue_t *value) { int result = 0; switch(value->type) { case PropertyType_Int: value->u.integer = *(int *)userArg; break; case PropertyType_Float: value->u.fp = *(double *)userArg; break; case PropertyType_Boolean: value->u.boolean = *(bool*)userArg; break; case PropertyType_String: value->u.string = strdup(*(char**)userArg); break; case PropertyType_Char: value->u.ch = *(char*)userArg; break; case PropertyType_PID: value->u.pid = *(uint16_t*)userArg; break; case PropertyType_IPAddress: result = -1; break; default: result = -1; break; } return result; } int PropertiesSimplePropertySet(void *userArg, PropertyValue_t *value) { int result = 0; switch(value->type) { case PropertyType_Int: *(int *)userArg = value->u.integer; break; case PropertyType_Float: *(double *)userArg = value->u.fp; break; case PropertyType_Boolean: *(bool*)userArg = value->u.boolean; break; case PropertyType_String: *(char**)userArg = value->u.string; break; case PropertyType_Char: *(char*)userArg = value->u.ch; break; case PropertyType_PID: *(uint16_t*)userArg = value->u.pid; break; case PropertyType_IPAddress: result = -1; break; default: result = -1; break; } return result; } static PropertyNode_t *PropertiesCreateNodes(const char *path) { int toCreate = -1; int i; PropertyNode_t *currentNode; PropertyPathElements_t *pathElements = PropertyPathSplitElements(path); currentNode = PropertiesFindNode(pathElements, &toCreate, NULL); if (currentNode == NULL) { currentNode = &rootProperty; } if (toCreate != -1) { for (i = toCreate; i < pathElements->nrofElements; i ++) { currentNode = PropertiesCreateNode(currentNode, pathElements->elements[i]); } } ObjectRefDec(pathElements); return currentNode; } static PropertyNode_t *PropertiesCreateNode(PropertyNode_t *parentNode, const char *newProp) { PropertyNode_t *childNode = NULL; childNode = ObjectCreateType(PropertyNode_t); childNode->name = strdup(newProp); childNode->type = PropertyType_None; childNode->desc = NULL; childNode->parent = parentNode; if (parentNode->childNodes) { PropertyNode_t *node, *prevNode = NULL; for (node = parentNode->childNodes; node; node = node->next) { if (strcmp(node->name, newProp) > 0) { break; } prevNode = node; } if (node == NULL) { prevNode->next = childNode; childNode->next = NULL; } else { childNode->next = node; if (prevNode) { prevNode->next = childNode; } else { parentNode->childNodes = childNode; } } } else { parentNode->childNodes = childNode; } return childNode; } static PropertyNode_t *PropertiesFindNode(PropertyPathElements_t *pathElements, int *leftOver, PropertyNode_t **before) { PropertyNode_t *result = NULL; PropertyNode_t *currentNode = &rootProperty; PropertyNode_t *prevNode = NULL; PropertyNode_t *childNode; int i; bool nodeFound = TRUE; *leftOver = -1; for (i = 0; (i < pathElements->nrofElements); i ++) { nodeFound = FALSE; prevNode = NULL; for (childNode = currentNode->childNodes; childNode; childNode = childNode->next) { if (strcmp(childNode->name, pathElements->elements[i]) == 0) { currentNode = childNode; nodeFound = TRUE; break; } prevNode = childNode; } if (!nodeFound) { break; } } if (before != NULL) { *before = prevNode; } if (i < pathElements->nrofElements) { *leftOver = i; } if (currentNode != &rootProperty) { result = currentNode; } return result; } static PropertyPathElements_t * PropertyPathSplitElements(const char *path) { PropertyPathElements_t *pathElements = ObjectCreateType(PropertyPathElements_t); char *elementStart = (char *)path; char *elementEnd = NULL; char nodeName[PROPERTIES_PATH_MAX]; while(elementStart != NULL) { elementEnd = strchr(elementStart, '.'); if (elementEnd) { int len = elementEnd - elementStart; strncpy(nodeName, elementStart, len); nodeName[len] = 0; elementStart = elementEnd + 1; } else { strcpy(nodeName, elementStart); elementStart = NULL; } pathElements->elements[pathElements->nrofElements] = strdup(nodeName); pathElements->nrofElements += 1; }; return pathElements; } static void PropertyPathElementsDestructor(void *ptr) { PropertyPathElements_t *pathElements = ptr; int i; for (i = 0; i < pathElements->nrofElements; i ++) { free(pathElements->elements[i]); } } static void PropertryDestructor(void *ptr) { PropertyNode_t *node = (PropertyNode_t*)ptr; free((char *)node->name); } dvbstreamer-2.1.0/src/remoteintf.c000066400000000000000000000374431217721213100171470ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA remoteintf.c Remote Interface functions. */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "dispatchers.h" #include "logging.h" #include "commands.h" #include "remoteintf.h" #include "properties.h" /******************************************************************************* * Defines * *******************************************************************************/ #define MAX_CONNECTIONS 2 /* 1 for monitoring by web and another for control */ #define MAX_LINE_LENGTH 256 /* Max connection string = [xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]:xxxxx */ #define MAX_CONNECTION_STR_LENGTH 48 /******************************************************************************* * Typedefs * *******************************************************************************/ typedef struct Connection_t { int socketfd; FILE *fp; struct sockaddr_storage clientAddress; bool connected; pthread_t thread; } Connection_t; /******************************************************************************* * Prototypes * *******************************************************************************/ static void RemoteInterfaceAcceptCallback(struct ev_loop *loop, ev_io *w, int revents); static void AddConnection(int socketfd, struct sockaddr_storage *clientAddress); static void RemoveConnection(Connection_t *connection); static void HandleConnection(Connection_t *connection); static void GetConnectionString(struct sockaddr_storage *connAddr, char *output); static void RemoteInterfaceAuthenticate(int argc, char **argv); static void RemoteInterfaceWho(int argc, char **argv); static void RemoteInterfaceLogout(int argc, char **argv); static void PrintResponse(FILE *fp, uint16_t errno, char * msg); /******************************************************************************* * Global variables * *******************************************************************************/ static Command_t RemoteInterfaceCommands[] = { { "who", 0, 0, "Display current control connections.", "List all the control connections and if they are authenticated.", RemoteInterfaceWho }, COMMANDS_SENTINEL }; static Command_t ConnectionCommands[] = { { "auth", 2, 2, "Login to control dvbstreamer.", "auth \n" "Authenticate as the user that is able to select channels etc.", RemoteInterfaceAuthenticate }, { "logout", 0, 0, "Close the current control connection.", "Close the current control connection (only works for remote connections).", RemoteInterfaceLogout }, COMMANDS_SENTINEL }; static bool remoteIntfExit = FALSE; static pthread_mutex_t connectionsMutex = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t connectionCondVar = PTHREAD_COND_INITIALIZER; static int serverSocket; static ev_io serverSocketWatcher; static List_t *connectionsList; static char *infoStreamerName; static char *authUsername; static char *authPassword; static time_t serverStartTime; static char responselineStart[] = "DVBStreamer/" VERSION "/"; static char REMOTEINTERFACE[] = "RemoteInterface"; /******************************************************************************* * Global functions * *******************************************************************************/ int RemoteInterfaceInit(int adapter, char *streamerName, char *bindAddress, char *username, char *password) { struct ev_loop *netLoop = DispatchersGetNetwork(); #ifdef USE_GETADDRINFO socklen_t address_len; struct sockaddr_storage address; struct addrinfo *addrinfo, hints; char portnumber[10]; sprintf(portnumber, "%d", REMOTEINTERFACE_PORT + adapter); memset((void *)&hints, 0, sizeof(hints)); hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_ADDRCONFIG | AI_PASSIVE; if ((getaddrinfo(bindAddress, portnumber, &hints, &addrinfo) != 0) || (addrinfo == NULL)) { LogModule(LOG_DEBUG, REMOTEINTERFACE, "Failed to set bind address\n"); return 1; } if (addrinfo->ai_addrlen > sizeof(struct sockaddr_storage)) { freeaddrinfo(addrinfo); LogModule(LOG_DEBUG, REMOTEINTERFACE, "Failed to parse bind address\n"); return 1; } address_len = addrinfo->ai_addrlen; memcpy(&address, addrinfo->ai_addr, addrinfo->ai_addrlen); freeaddrinfo(addrinfo); serverSocket = socket(address.ss_family, SOCK_STREAM, IPPROTO_TCP); if (serverSocket < 0) { LogModule(LOG_ERROR, REMOTEINTERFACE, "Failed to create server socket!\n"); return 1; } if (bind(serverSocket, (struct sockaddr *) &address, address_len) < 0) { LogModule(LOG_ERROR, REMOTEINTERFACE, "Failed to bind server to port %d\n", REMOTEINTERFACE_PORT + adapter); close(serverSocket); return 1; } #else struct sockaddr_in serverAddress; serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (serverSocket < 0) { LogModule(LOG_ERROR, REMOTEINTERFACE, "Failed to create server socket!\n"); return 1; } memset((void *) &serverAddress, 0, sizeof(serverAddress)); serverAddress.sin_family = AF_INET; serverAddress.sin_addr.s_addr = INADDR_ANY; serverAddress.sin_port = htons(REMOTEINTERFACE_PORT + adapter); if (bind(serverSocket, (struct sockaddr *) &serverAddress, sizeof(serverAddress)) < 0) { LogModule(LOG_ERROR, REMOTEINTERFACE, "Failed to bind server to port %d\n", REMOTEINTERFACE_PORT + adapter); close(serverSocket); return 1; } #endif ObjectRegisterType(Connection_t); connectionsList = ListCreate(); listen(serverSocket, 1); infoStreamerName = strdup(streamerName); authUsername = strdup(username); authPassword = strdup(password); time(&serverStartTime); LogModule(LOG_INFO, REMOTEINTERFACE, "Server created %s", ctime(&serverStartTime)); LogModule(LOG_DEBUG, REMOTEINTERFACE, "Username : %s\n", authUsername); LogModule(LOG_DEBUG, REMOTEINTERFACE, "Password : %s\n", authPassword); LogModule(LOG_DEBUG, REMOTEINTERFACE, "Server Name : %s\n", infoStreamerName); CommandRegisterCommands(RemoteInterfaceCommands); PropertiesAddProperty("sys.rc", "servername", "Name of this dvbstreamer instance.", PropertyType_String, &infoStreamerName, PropertiesSimplePropertyGet, NULL); PropertiesAddProperty("sys.rc", "username", "Username used to authenticate.", PropertyType_String, &infoStreamerName, NULL, PropertiesSimplePropertySet); PropertiesAddProperty("sys.rc", "password", "Password used to authenticate.", PropertyType_String, &infoStreamerName, NULL, PropertiesSimplePropertySet); ev_io_init(&serverSocketWatcher, RemoteInterfaceAcceptCallback, serverSocket, EV_READ); ev_io_start(netLoop, &serverSocketWatcher); return 0; } void RemoteInterfaceDeInit(void) { ListIterator_t iterator; ev_io_start(DispatchersGetNetwork(), &serverSocketWatcher); CommandUnRegisterCommands(RemoteInterfaceCommands); remoteIntfExit = TRUE; close(serverSocket); pthread_mutex_lock(&connectionsMutex); if (ListCount(connectionsList) > 0) { for (ListIterator_Init(iterator, connectionsList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { Connection_t *connection = (Connection_t*)ListIterator_Current(iterator); close(connection->socketfd); } pthread_cond_wait(&connectionCondVar, &connectionsMutex); } pthread_mutex_unlock(&connectionsMutex); free(infoStreamerName); free(authUsername); free(authPassword); ListFree(connectionsList, NULL); } static void RemoteInterfaceAcceptCallback(struct ev_loop *loop, ev_io *w, int revents) { int clientfd; struct sockaddr_storage clientAddress; socklen_t clientAddressSize; clientAddressSize = sizeof(clientAddress); clientfd = accept(serverSocket, (struct sockaddr *) &clientAddress, &clientAddressSize); if (clientfd < 0) { return; } AddConnection(clientfd, &clientAddress); } static void AddConnection(int socketfd, struct sockaddr_storage *clientAddress) { char connectionStr[MAX_CONNECTION_STR_LENGTH]; FILE *fp; Connection_t *connection = ObjectCreateType(Connection_t); GetConnectionString(clientAddress, connectionStr); fp = fdopen(socketfd, "r+"); if (connection) { connection->connected = TRUE; connection->socketfd = socketfd; connection->fp = fp; connection->clientAddress = *clientAddress; LogModule(LOG_INFO, REMOTEINTERFACE, "Connection attempt from %s accepted!\n", connectionStr); pthread_mutex_lock(&connectionsMutex); ListAdd(connectionsList, connection); pthread_mutex_unlock(&connectionsMutex); pthread_create(&connection->thread, NULL, (void*)HandleConnection, (void*)connection); LogRegisterThread(connection->thread, connectionStr); } else { LogModule(LOG_INFO, REMOTEINTERFACE, "Connection attempt from %s rejected as no connections structures left!\n", connectionStr); PrintResponse(fp, COMMAND_ERROR_TOO_MANY_CONNS, "Too many connect clients!"); fclose(fp); } } static void RemoveConnection(Connection_t *connection) { pthread_mutex_lock(&connectionsMutex); ListRemove(connectionsList, connection); ObjectRefDec(connection); if ((ListCount(connectionsList) == 0) && remoteIntfExit) { pthread_cond_broadcast(&connectionCondVar); } pthread_mutex_unlock(&connectionsMutex); } /****************************************************************************** * Connection functions * ******************************************************************************/ static void HandleConnection(Connection_t *connection) { struct pollfd pfd[1]; char connectionStr[MAX_CONNECTION_STR_LENGTH]; char line[MAX_LINE_LENGTH]; int socketfd; FILE *fp; CommandContext_t context; /* Setup context */ GetConnectionString(&connection->clientAddress, connectionStr); context.interface = connectionStr; context.authenticated = FALSE; context.remote = TRUE; context.infp = connection->fp; context.outfp = connection->fp; context.privateArg = connection; context.commands = ConnectionCommands; socketfd = connection->socketfd; fp = connection->fp; pfd[0].fd = socketfd; pfd[0].events = POLLIN; PrintResponse(fp,COMMAND_OK, "Ready"); while (!remoteIntfExit && connection->connected) { int r; pfd[0].revents = 0; r = poll(pfd, 1, 30000); if (pfd[0].revents & POLLIN) { char *nl; // Read in the command if (fgets(line, MAX_LINE_LENGTH, fp)) { nl = strchr(line, '\n'); if (nl) { *nl = 0; } nl = strchr(line, '\r'); if (nl) { *nl = 0; } LogModule(LOG_DEBUG, REMOTEINTERFACE, "%s: Received Line: \"%s\"\n", context.interface, line); CommandExecute(&context, line); PrintResponse(fp,context.errorNumber, context.errorMessage); } else { connection->connected = FALSE; } } else { connection->connected = FALSE; } } LogModule(LOG_INFO, REMOTEINTERFACE, "%s: Connection closed!\n", context.interface); /* Close the socket and free our resources */ fclose(fp); connection->connected = FALSE; LogModule(LOG_DEBUG,REMOTEINTERFACE,"Connection thread exiting.\n"); LogUnregisterThread(pthread_self()); pthread_detach(connection->thread); RemoveConnection(connection); } static void PrintResponse(FILE *fp, uint16_t errno, char * msg) { fprintf(fp, "%s%d %s\n", responselineStart, errno, msg); fflush(fp); } /****************************************************************************** * Commands * ******************************************************************************/ static void RemoteInterfaceAuthenticate(int argc, char **argv) { CommandContext_t *context = CommandContextGet(); if ((strcmp(argv[0], authUsername) == 0) && (strcmp(argv[1], authPassword) == 0)) { context->authenticated = TRUE; CommandError(COMMAND_OK, "Authenticated."); } else { context->authenticated = FALSE; CommandError(COMMAND_ERROR_AUTHENTICATION, "Authentication failed!"); } } static void RemoteInterfaceWho(int argc, char **argv) { char connectionStr[MAX_CONNECTION_STR_LENGTH]; ListIterator_t iterator; for (ListIterator_Init(iterator, connectionsList); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { Connection_t *connection = (Connection_t*)ListIterator_Current(iterator); if (connection->connected) { GetConnectionString(&connection->clientAddress, connectionStr); CommandPrintf("%s\n", connectionStr); } } } static void RemoteInterfaceLogout(int argc, char **argv) { CommandContext_t *context = CommandContextGet(); if (context->remote) { Connection_t *connection = (Connection_t*)context->privateArg; connection->connected = FALSE; CommandError(COMMAND_OK, "Bye!"); } else { CommandError(COMMAND_ERROR_GENERIC, "Not a remote connection!"); } } static void GetConnectionString(struct sockaddr_storage *connAddr, char *output) { if (connAddr->ss_family == AF_INET) { inet_ntop(connAddr->ss_family, &((struct sockaddr_in*)connAddr)->sin_addr, output, INET_ADDRSTRLEN); sprintf(output + strlen(output), ":%d", ((struct sockaddr_in*)connAddr)->sin_port); } else if (connAddr->ss_family == AF_INET6) { *output = '['; inet_ntop(connAddr->ss_family, &((struct sockaddr_in*)connAddr)->sin_addr, output + 1, INET6_ADDRSTRLEN); sprintf(output + strlen(output), "]:%d", ((struct sockaddr_in*)connAddr)->sin_port); } else { strcpy(output, ""); LogModule(LOG_ERROR, REMOTEINTERFACE, "Unknown family %d\n", connAddr->ss_family); } } dvbstreamer-2.1.0/src/servicefilter.c000066400000000000000000000553351217721213100176410ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA servicefilter.c Filter all packets for a service include the PMT, rewriting the PAT sent out in the output to only include this service. */ #include #include #include #include #include #include #include #include #include #include "multiplexes.h" #include "services.h" #include "pids.h" #include "dvbadapter.h" #include "ts.h" #include "main.h" #include "cache.h" #include "logging.h" #include "deliverymethod.h" #include "tuning.h" #include "properties.h" #include "servicefilter.h" #include "events.h" #include "yamlutils.h" /******************************************************************************* * Defines * *******************************************************************************/ #define INVALID_PID 0xffff #define PAT_PACKETS 1 #define PMT_PACKETS 6 #define HEADER_PACKETS (PAT_PACKETS + PMT_PACKETS) #define PACKETS_INDEX_PAT 0 #define PACKETS_INDEX_PMT 1 /* Start of PMT */ /******************************************************************************* * Typedefs * *******************************************************************************/ struct ServiceFilter_s { char *name; TSFilterGroup_t *tsgroup; char propertyPath[PROPERTIES_PATH_MAX]; DeliveryMethodInstance_t *dmInstance; Service_t *service; Multiplex_t *multiplex; /* PAT */ uint16_t patVersion; uint8_t patPacketCounter; /* PMT */ bool avsOnly; uint16_t serviceVersion; uint16_t pmtVersion; uint8_t pmtPacketCounter; uint16_t pcrPID; uint16_t videoPID; uint16_t audioPID; uint16_t subPID; int pmtPacketCount; TSPacket_t pmtPackets[PMT_PACKETS]; /* Header */ bool setHeader; int headerCount; bool headerGotPAT; bool headerGotPMT; TSPacket_t packets[HEADER_PACKETS]; }; /******************************************************************************* * Prototypes * *******************************************************************************/ static void ServiceFilterFilterEventCallback(void *userArg, TSFilterGroup_t *group, TSFilterEventType_e event, void *details); static void ServiceFilterPIDSUpdatedListener(void *userArg, Event_t event, void *details); static void ServiceFilterProcessPacket(void *arg, TSFilterGroup_t *group, TSPacket_t *packet); static void ServiceFilterPATRewrite(ServiceFilter_t filter); static void ServiceFilterPMTRewrite(ServiceFilter_t filter); static void ServiceFilterInitPacket(TSPacket_t *packet, dvbpsi_psi_section_t* section, char *sectionname); static void ServiceFilterAllocateFilters(ServiceFilter_t state); static int ServiceFilterEventToString(yaml_document_t *document, Event_t event, void *payload); static int ServiceFilterPropertyServiceGet(void *userArg, PropertyValue_t *value); static int ServiceFilterPropertyAVSOnlyGet(void *userArg, PropertyValue_t *value); static int ServiceFilterPropertyAVSOnlySet(void *userArg, PropertyValue_t *value); /******************************************************************************* * Global variables * *******************************************************************************/ char ServiceFilterGroupType[] = "Service Filter"; static char SERVICEFILTER[] = "ServiceFilter"; static List_t *ServiceFilterList; static EventSource_t eventSource; static Event_t filterAddedEvent; static Event_t filterRemovedEvent; static Event_t serviceChangedEvent; /******************************************************************************* * Global functions * *******************************************************************************/ int ServiceFilterInit(void) { ServiceFilterList = ListCreate(); ObjectRegisterClass("ServiceFilter_t", sizeof(struct ServiceFilter_s), NULL); eventSource = EventsRegisterSource("ServiceFilter"); filterAddedEvent = EventsRegisterEvent(eventSource, "Added", ServiceFilterEventToString); filterRemovedEvent = EventsRegisterEvent(eventSource, "Removed", ServiceFilterEventToString); serviceChangedEvent = EventsRegisterEvent(eventSource, "ServiceChanged", ServiceFilterEventToString); return 0; } int ServiceFilterDeInit(void) { EventsUnregisterEvent(filterAddedEvent); EventsUnregisterEvent(filterRemovedEvent); EventsUnregisterEvent(serviceChangedEvent); EventsUnregisterSource(eventSource); ListFree(ServiceFilterList, NULL); return 0; } ServiceFilter_t ServiceFilterCreate(TSReader_t *reader, char* name) { ServiceFilter_t result; Event_t cachePIDSUpdatedEvent; result = ObjectCreateType(ServiceFilter_t); if (result) { result->name = strdup(name); result->tsgroup = TSReaderCreateFilterGroup(reader, name, ServiceFilterGroupType, ServiceFilterFilterEventCallback, result); sprintf(result->propertyPath, "filters.service.%s", name); PropertiesAddProperty(result->propertyPath, "service", "The service that is currently being filtered", PropertyType_String, result, ServiceFilterPropertyServiceGet, NULL); PropertiesAddProperty(result->propertyPath, "avsonly", "Whether only the first Audio/Video/Subtitle streams should be filtered.", PropertyType_Boolean, result, ServiceFilterPropertyAVSOnlyGet, ServiceFilterPropertyAVSOnlySet); cachePIDSUpdatedEvent = EventsFindEvent("Cache.PIDsUpdated"); EventsRegisterEventListener(cachePIDSUpdatedEvent, ServiceFilterPIDSUpdatedListener, result); ListAdd(ServiceFilterList, result); EventsFireEventListeners(filterAddedEvent, result); } return result; } void ServiceFilterDestroy(ServiceFilter_t filter) { Event_t cachePIDSUpdatedEvent; EventsFireEventListeners(filterRemovedEvent, filter); cachePIDSUpdatedEvent = EventsFindEvent("Cache.PIDsUpdated"); EventsUnregisterEventListener(cachePIDSUpdatedEvent, ServiceFilterPIDSUpdatedListener, filter); PropertiesRemoveAllProperties(filter->propertyPath); TSFilterGroupDestroy(filter->tsgroup); DeliveryMethodDestroy(filter->dmInstance); if (filter->multiplex) { MultiplexRefDec(filter->multiplex); } if (filter->service) { ServiceRefDec(filter->service); } ListRemove(ServiceFilterList, filter); free(filter->name); ObjectRefDec(filter); } void ServiceFilterDestroyAll(TSReader_t *reader) { ListIterator_t iterator; TSReaderLock(reader); for ( ListIterator_Init(iterator, ServiceFilterList); ListIterator_MoreEntries(iterator); ) { ServiceFilter_t filter = (ServiceFilter_t)ListIterator_Current(iterator); ListIterator_Next(iterator); ServiceFilterDestroy(filter); } TSReaderUnLock(reader); } ListIterator_t *ServiceFilterGetListIterator(void) { ListIterator_t *iterator = ObjectAlloc(sizeof(ListIterator_t)); ListIterator_Init(*iterator,ServiceFilterList); return iterator; } ServiceFilter_t ServiceFilterFindFilter(TSReader_t *reader, const char *name) { ListIterator_t iterator; ListIterator_ForEach(iterator,reader->groups) { TSFilterGroup_t *group = ListIterator_Current(iterator); if (strcmp(group->type, ServiceFilterGroupType) == 0) { ServiceFilter_t filter = group->userArg; if (strcmp(filter->name, name) == 0) { return filter; } } } return NULL; } void ServiceFilterServiceSet(ServiceFilter_t filter, Service_t *service) { if (filter->service) { ServiceRefDec(filter->service); MultiplexRefDec(filter->multiplex); } TSFilterGroupRemoveAllFilters(filter->tsgroup); filter->service = service; if (service) { filter->multiplex = MultiplexFindUID(service->multiplexUID); ServiceRefInc(service); ServiceFilterPATRewrite(filter); if (filter->avsOnly) { ServiceFilterPMTRewrite(filter); } ServiceFilterAllocateFilters(filter); } else { filter->multiplex = NULL; } EventsFireEventListeners(serviceChangedEvent, filter); } char *ServiceFilterNameGet(ServiceFilter_t filter) { return filter->name; } Service_t *ServiceFilterServiceGet(ServiceFilter_t filter) { return filter->service; } void ServiceFilterAVSOnlySet(ServiceFilter_t filter, bool enable) { if (enable != filter->avsOnly) { TSFilterGroupRemoveAllFilters(filter->tsgroup); filter->avsOnly = enable; if (filter->service) { if (filter->avsOnly) { ServiceFilterPMTRewrite(filter); } ServiceFilterAllocateFilters(filter); } } } bool ServiceFilterAVSOnlyGet(ServiceFilter_t filter) { return filter->avsOnly; } void ServiceFilterDeliveryMethodSet(ServiceFilter_t filter, DeliveryMethodInstance_t *instance) { DeliveryMethodInstance_t *prevInstance = filter->dmInstance; DeliveryMethodReserveHeaderSpace(instance, HEADER_PACKETS); filter->dmInstance = instance; filter->setHeader = TRUE; if (prevInstance) { DeliveryMethodDestroy(prevInstance); } } DeliveryMethodInstance_t * ServiceFilterDeliveryMethodGet(ServiceFilter_t filter) { return filter->dmInstance; } /******************************************************************************* * Local Functions * *******************************************************************************/ static void ServiceFilterFilterEventCallback(void *userArg, TSFilterGroup_t *group, TSFilterEventType_e event, void *details) { ServiceFilter_t filter = (ServiceFilter_t)userArg; TSFilterGroupRemoveAllFilters(filter->tsgroup); if (event == TSFilterEventType_StructureChanged) { if (filter->service) { ServiceFilterPATRewrite(filter); if (filter->avsOnly) { ServiceFilterPMTRewrite(filter); } } } ServiceFilterAllocateFilters(filter); } static void ServiceFilterPIDSUpdatedListener(void *userArg, Event_t event, void *details) { ServiceFilter_t filter = (ServiceFilter_t)userArg; Service_t *updatedService = details; if (filter->service && ServiceAreEqual(filter->service, updatedService)) { TSFilterGroupRemoveAllFilters(filter->tsgroup); ServiceFilterPMTRewrite(filter); ServiceFilterAllocateFilters(filter); } } static void ServiceFilterProcessPacket(void *arg, TSFilterGroup_t *group, TSPacket_t *packet) { ServiceFilter_t filter = (ServiceFilter_t)arg; unsigned short pid = TSPACKET_GETPID(*packet); /* If this is the PAT PID we need to rewrite it! */ if (pid == 0) { TSPACKET_SETCOUNT(filter->packets[PACKETS_INDEX_PAT], filter->patPacketCounter ++); packet = &filter->packets[PACKETS_INDEX_PAT]; } if (pid == filter->service->pmtPID) { if (filter->avsOnly) { TSPACKET_SETCOUNT(filter->packets[PACKETS_INDEX_PMT], filter->pmtPacketCounter ++); packet = &filter->packets[PACKETS_INDEX_PMT]; } else { if (TSPACKET_ISPAYLOADUNITSTART(*packet)) { if (filter->pmtPacketCount > 0) { filter->headerGotPMT = TRUE; filter->headerCount = 1 + filter->pmtPacketCount; memcpy(&filter->packets[PACKETS_INDEX_PMT], &filter->pmtPackets, TSPACKET_SIZE * filter->pmtPacketCount); } filter->pmtPacketCount = 0; } if (filter->pmtPacketCount < PMT_PACKETS) { memcpy(&filter->pmtPackets[filter->pmtPacketCount], packet, TSPACKET_SIZE); filter->pmtPacketCount ++; } } } if (filter->setHeader && filter->headerGotPMT) { DeliveryMethodSetHeader(filter->dmInstance, filter->packets, filter->headerCount); filter->setHeader = FALSE; } DeliveryMethodOutputPacket(filter->dmInstance, packet); } static void ServiceFilterPATRewrite(ServiceFilter_t filter) { dvbpsi_pat_t pat; dvbpsi_psi_section_t* section; filter->patVersion ++; dvbpsi_InitPAT(&pat, filter->multiplex->tsId, filter->patVersion, 1); dvbpsi_PATAddProgram(&pat, filter->service->id, filter->service->pmtPID); section = dvbpsi_GenPATSections(&pat, 1); ServiceFilterInitPacket(&filter->packets[PACKETS_INDEX_PAT], section, "PAT"); dvbpsi_DeletePSISections(section); dvbpsi_EmptyPAT(&pat); } static void ServiceFilterPMTRewrite(ServiceFilter_t state) { int i; ProgramInfo_t *info; bool vfound = FALSE; bool afound = FALSE; bool sfound = FALSE; dvbpsi_pmt_t pmt; dvbpsi_pmt_es_t *es; dvbpsi_psi_section_t* section; state->pmtVersion ++; dvbpsi_InitPMT(&pmt, state->service->id, state->pmtVersion, 1, PID_STUFFING); state->pcrPID = INVALID_PID; state->videoPID = INVALID_PID; state->audioPID = INVALID_PID; state->subPID = INVALID_PID; LogModule(LOG_DEBUG, SERVICEFILTER, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); LogModule(LOG_DEBUG, SERVICEFILTER, "Rewriting PMT on PID %x\n", state->service->pmtPID); info = CacheProgramInfoGet(state->service); if (info) { pmt.i_pcr_pid = state->pcrPID = info->pcrPID; for (i = 0; (i < info->streamInfoList->nrofStreams) && (!vfound || !afound || !sfound); i ++) { LogModule(LOG_DEBUG, SERVICEFILTER, "\tpid = %x type =%d\n", info->streamInfoList->streams[i].pid, info->streamInfoList->streams[i].type); /* Look for: * 0x01 = ISO/IEC 11172 Video * 0x02 = ITU-T Rec. H.262 | ISO/IEC 13818-2 Video or ISO/IEC 11172-2 constrained parameter video stream */ if (!vfound && ((info->streamInfoList->streams[i].type == 1) || (info->streamInfoList->streams[i].type == 2))) { vfound = TRUE; state->videoPID = info->streamInfoList->streams[i].pid; es = dvbpsi_PMTAddES(&pmt, info->streamInfoList->streams[i].type, info->streamInfoList->streams[i].pid); } /* Look for: * 0x03 = ISO/IEC 11172 Audio * 0x04 = ISO/IEC 13818-3 Audio * 0x81 = ATSC AC-3 (User Private in ISO 13818-1 : 2000) */ if (!afound && ((info->streamInfoList->streams[i].type == 3) || (info->streamInfoList->streams[i].type == 4) || (info->streamInfoList->streams[i].type == 0x81))) { afound = TRUE; state->audioPID = info->streamInfoList->streams[i].pid; es = dvbpsi_PMTAddES(&pmt,info->streamInfoList->streams[i].type, info->streamInfoList->streams[i].pid); } /* For DVB, we look at type 0x06 = ITU-T Rec. H.222.0 | ISO/IEC 13818-1 PES packets containing private data * which is used for DVB subtitles and AC-3 streams. */ if (info->streamInfoList->streams[i].type == 6) { dvbpsi_descriptor_t *desc = info->streamInfoList->streams[i].descriptors; while(desc) { /* DVB Subtitles */ if (!sfound && (desc->i_tag == 0x59)) { sfound = TRUE; state->subPID = info->streamInfoList->streams[i].pid; es = dvbpsi_PMTAddES(&pmt, info->streamInfoList->streams[i].type, info->streamInfoList->streams[i].pid); dvbpsi_PMTESAddDescriptor(es, desc->i_tag, desc->i_length, desc->p_data); break; } /* AC3 */ if (!afound && (desc->i_tag == 0x6a)) { afound = TRUE; state->audioPID = info->streamInfoList->streams[i].pid; es = dvbpsi_PMTAddES(&pmt,info->streamInfoList->streams[i].type, info->streamInfoList->streams[i].pid); dvbpsi_PMTESAddDescriptor(es, desc->i_tag, desc->i_length, desc->p_data); break; } desc = desc->p_next; } } } ObjectRefDec(info); } LogModule(LOG_DEBUG, SERVICEFILTER, "videopid = %x audiopid = %x subpid = %x\n", state->videoPID,state->audioPID,state->subPID); section = dvbpsi_GenPMTSections(&pmt); ServiceFilterInitPacket(&state->packets[PACKETS_INDEX_PMT], section, "PMT"); TSPACKET_SETPID(state->packets[PACKETS_INDEX_PMT], state->service->pmtPID); LogModule(LOG_DEBUG, SERVICEFILTER, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); dvbpsi_DeletePSISections(section); dvbpsi_EmptyPMT(&pmt); state->headerGotPMT = TRUE; state->headerCount = 2; } static void ServiceFilterInitPacket(TSPacket_t *packet, dvbpsi_psi_section_t* section, char *sectionname) { uint8_t *data; int len,i; // Fill in header packet->header[0] = 0x47; packet->header[1] = 0x40; // Payload unit start set packet->header[2] = 0x00; packet->header[3] = 0x10; packet->payload[0] = 0; // Pointer field data = section->p_data; len = section->i_length + 3; if (len > (sizeof(TSPacket_t) - 5)) { LogModule(LOG_ERROR, SERVICEFILTER, "!!! ERROR %s section too big to fit in 1 TS packet !!!\n" ); } for (i = 0; i < len; i ++) { packet->payload[1 + i] = data[i]; } for (i = len + 1; i < 184; i ++) { packet->payload[i] = 0xff; } } static void ServiceFilterAllocateFilters(ServiceFilter_t filter) { int muxUID; Multiplex_t *mux = TuningCurrentMultiplexGet(); /* No mux is selected yet */ if (mux == NULL) { return; } muxUID = mux->uid; MultiplexRefDec(mux); /* Service is not part of the current mux */ if ((filter->service == NULL) || (filter->service->multiplexUID != muxUID)) { return; } TSReaderLock(filter->tsgroup->tsReader); TSFilterGroupAddPacketFilter(filter->tsgroup, 0x00, ServiceFilterProcessPacket, filter); /* PAT */ TSFilterGroupAddPacketFilter(filter->tsgroup, filter->service->pmtPID, ServiceFilterProcessPacket, filter); /* PMT */ if (filter->avsOnly) { /* Make sure we also stream the PCR PID just in case its not the audio/video */ TSFilterGroupAddPacketFilter(filter->tsgroup, filter->pcrPID, ServiceFilterProcessPacket, filter); /* PCR */ if ((filter->audioPID != INVALID_PID) && (filter->audioPID != filter->pcrPID)) { TSFilterGroupAddPacketFilter(filter->tsgroup, filter->audioPID, ServiceFilterProcessPacket, filter); } if ((filter->videoPID != INVALID_PID) && (filter->videoPID != filter->pcrPID)) { TSFilterGroupAddPacketFilter(filter->tsgroup, filter->videoPID, ServiceFilterProcessPacket, filter); } if ((filter->subPID != INVALID_PID) && (filter->subPID != filter->pcrPID)) { TSFilterGroupAddPacketFilter(filter->tsgroup, filter->subPID, ServiceFilterProcessPacket, filter); } } else { ProgramInfo_t *info = CacheProgramInfoGet(filter->service); if (info) { int i; /* Make sure we also stream the PCR PID just in case its not the audio/video */ if (info->pcrPID != PID_STUFFING) { TSFilterGroupAddPacketFilter(filter->tsgroup, info->pcrPID, ServiceFilterProcessPacket, filter); /* PCR */ } for (i = 0; i < info->streamInfoList->nrofStreams; i ++) { if (info->streamInfoList->streams[i].pid != info->pcrPID) { TSFilterGroupAddPacketFilter(filter->tsgroup, info->streamInfoList->streams[i].pid, ServiceFilterProcessPacket, filter); } } ObjectRefDec(info); } } TSReaderUnLock(filter->tsgroup->tsReader); } static int ServiceFilterPropertyServiceGet(void *userArg, PropertyValue_t *value) { ServiceFilter_t state = userArg; value->type = PropertyType_String; if (state->service) { value->u.string = ServiceGetIDNameStr(state->service, NULL); } else { value->u.string = strdup(""); } return 0; } static int ServiceFilterPropertyAVSOnlyGet(void *userArg, PropertyValue_t *value) { ServiceFilter_t state = userArg; value->type = PropertyType_Boolean; value->u.boolean = state->avsOnly; return 0; } static int ServiceFilterPropertyAVSOnlySet(void *userArg, PropertyValue_t *value) { ServiceFilter_t filter = userArg; ServiceFilterAVSOnlySet(filter, value->u.boolean); return 0; } static int ServiceFilterEventToString(yaml_document_t *document, Event_t event, void *payload) { ServiceFilter_t filter = payload; int mappingId = yaml_document_add_mapping(document, (yaml_char_t*)YAML_MAP_TAG, YAML_ANY_MAPPING_STYLE); YamlUtils_MappingAdd(document, mappingId, "Filter Name", filter->name); if (event == serviceChangedEvent) { char serviceId[16] = ""; char *serviceName = ""; Service_t *service = ServiceFilterServiceGet(filter); if (service) { sprintf(serviceId, "%04x.%04x.%04x", service->networkId, service->tsId, service->id); serviceName = service->name; } YamlUtils_MappingAdd(document, mappingId, "Service Name", serviceName); YamlUtils_MappingAdd(document, mappingId, "Service ID", serviceId); } return mappingId; } dvbstreamer-2.1.0/src/services.c000066400000000000000000000465711217721213100166200ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA services.c Manage services and PIDs. */ #include #include #include #include "dbase.h" #include "multiplexes.h" #include "services.h" #include "logging.h" #include "events.h" #include "yamlutils.h" /******************************************************************************* * Defines * *******************************************************************************/ #define SERVICE_FIELDS SERVICES_TABLE "." SERVICE_MULTIPLEXUID "," \ SERVICES_TABLE "." SERVICE_ID "," \ SERVICES_TABLE "." SERVICE_SOURCE "," \ SERVICES_TABLE "." SERVICE_CA "," \ SERVICES_TABLE "." SERVICE_TYPE "," \ SERVICES_TABLE "." SERVICE_NAME "," \ SERVICES_TABLE "." SERVICE_PMTPID ","\ SERVICES_TABLE "." SERVICE_PROVIDER "," \ SERVICES_TABLE "." SERVICE_DEFAUTHORITY "," \ MULTIPLEXES_TABLE "." MULTIPLEX_NETID "," \ MULTIPLEXES_TABLE "." MULTIPLEX_TSID " " /******************************************************************************* * Prototypes * *******************************************************************************/ static List_t *ServiceCreateList(ServiceEnumerator_t enumerator); static ServiceList_t *ServiceGetList(char *where); static void ServiceDestructor(void * arg); static void ServiceListDestructor(void * arg); /******************************************************************************* * Global variables * *******************************************************************************/ static EventSource_t servicesSource; static Event_t serviceAddedEvent; static Event_t serviceDeletedEvent; static Event_t serviceAllDeletedEvent; static const char SERVICES[] = "Services"; /******************************************************************************* * Global functions * *******************************************************************************/ int ServiceInit(void) { int result = 0; result = ObjectRegisterTypeDestructor(Service_t, ServiceDestructor); if (!result) { result = ObjectRegisterCollection(TOSTRING(ServiceList_t),sizeof(Service_t *),ServiceListDestructor); } if (!result) { servicesSource = EventsRegisterSource("Services"); serviceAddedEvent = EventsRegisterEvent(servicesSource, "Added", ServiceEventToString); serviceDeletedEvent = EventsRegisterEvent(servicesSource, "Deleted", ServiceEventToString); serviceAllDeletedEvent = EventsRegisterEvent(servicesSource, "AllDeleted", MultiplexEventToString); } return result; } int ServiceDeInit(void) { EventsUnregisterSource(servicesSource); return 0; } int ServiceDelete(Service_t *service) { STATEMENT_INIT; STATEMENT_PREPAREVA("DELETE FROM " SERVICES_TABLE " " "WHERE " SERVICE_MULTIPLEXUID "=%d AND " SERVICE_ID "=%d;", service->multiplexUID, service->id); RETURN_RC_ON_ERROR; STATEMENT_STEP(); STATEMENT_FINALIZE(); EventsFireEventListeners(serviceDeletedEvent, service); return 0; } int ServiceDeleteAll(Multiplex_t *mux) { STATEMENT_INIT; STATEMENT_PREPAREVA("DELETE FROM " SERVICES_TABLE " " "WHERE " SERVICE_MULTIPLEXUID "=%d;", mux->uid); RETURN_RC_ON_ERROR; STATEMENT_STEP(); STATEMENT_FINALIZE(); EventsFireEventListeners(serviceAllDeletedEvent, mux); return 0; } int ServiceAdd(int uid, char *name, int id, int source) { Service_t *service = NULL; STATEMENT_INIT; STATEMENT_PREPAREVA("INSERT INTO "SERVICES_TABLE "(" SERVICE_MULTIPLEXUID "," SERVICE_ID "," SERVICE_SOURCE "," SERVICE_CA "," SERVICE_TYPE "," SERVICE_PMTPID "," SERVICE_NAME ")" "VALUES (%d,%d,%d,%d,%d,%d,'%q');", uid, id, source, FALSE, ServiceType_Unknown, 8191, name); RETURN_RC_ON_ERROR; STATEMENT_STEP(); RETURN_RC_ON_ERROR; STATEMENT_FINALIZE(); /* Create a service object to send in the event. */ service = ServiceNew(); service->multiplexUID = uid; service->id = id; service->name = strdup(name); service->source = source; service->conditionalAccess = FALSE; service->type = ServiceType_Unknown; service->pmtPID = 8191; EventsFireEventListeners(serviceAddedEvent, service); ServiceRefDec(service); return 0; } int ServicePMTPIDSet(Service_t *service, int pmtpid) { STATEMENT_INIT; STATEMENT_PREPAREVA("UPDATE " SERVICES_TABLE " " "SET " SERVICE_PMTPID "=%d " "WHERE " SERVICE_MULTIPLEXUID "=%d AND " SERVICE_ID "=%d;", pmtpid, service->multiplexUID, service->id); RETURN_RC_ON_ERROR; STATEMENT_STEP(); if (rc == SQLITE_DONE) { service->pmtPID = pmtpid; rc = SQLITE_OK; } else { PRINTLOG_SQLITE3ERROR(); } STATEMENT_FINALIZE(); return rc; } int ServiceNameSet(Service_t *service, char *name) { STATEMENT_INIT; STATEMENT_PREPAREVA("UPDATE " SERVICES_TABLE " " "SET " SERVICE_NAME "='%q' " "WHERE " SERVICE_MULTIPLEXUID "=%d AND " SERVICE_ID "=%d;", name, service->multiplexUID, service->id); RETURN_RC_ON_ERROR; STATEMENT_STEP(); if (rc == SQLITE_DONE) { if (name != service->name) { if (service->name) { free(service->name); } service->name = strdup(name); } rc = SQLITE_OK; } else { PRINTLOG_SQLITE3ERROR(); } STATEMENT_FINALIZE(); return rc; } int ServiceSourceSet(Service_t *service, int source) { STATEMENT_INIT; STATEMENT_PREPAREVA("UPDATE " SERVICES_TABLE " " "SET " SERVICE_SOURCE "=%d " "WHERE " SERVICE_MULTIPLEXUID "=%d AND " SERVICE_ID "=%d;", source, service->multiplexUID, service->id); RETURN_RC_ON_ERROR; STATEMENT_STEP(); if (rc == SQLITE_DONE) { service->source = source; rc = SQLITE_OK; } else { PRINTLOG_SQLITE3ERROR(); } STATEMENT_FINALIZE(); return rc; } int ServiceConditionalAccessSet(Service_t *service, bool ca) { STATEMENT_INIT; STATEMENT_PREPAREVA("UPDATE " SERVICES_TABLE " " "SET " SERVICE_CA "=%d " "WHERE " SERVICE_MULTIPLEXUID "=%d AND " SERVICE_ID "=%d;", ca, service->multiplexUID, service->id); RETURN_RC_ON_ERROR; STATEMENT_STEP(); if (rc == SQLITE_DONE) { service->conditionalAccess = ca; rc = SQLITE_OK; } else { PRINTLOG_SQLITE3ERROR(); } STATEMENT_FINALIZE(); return rc; } int ServiceTypeSet(Service_t *service, ServiceType type) { STATEMENT_INIT; STATEMENT_PREPAREVA("UPDATE " SERVICES_TABLE " " "SET " SERVICE_TYPE "=%d " "WHERE " SERVICE_MULTIPLEXUID "=%d AND " SERVICE_ID "=%d;", type, service->multiplexUID, service->id); RETURN_RC_ON_ERROR; STATEMENT_STEP(); if (rc == SQLITE_DONE) { service->type = type; rc = SQLITE_OK; } else { PRINTLOG_SQLITE3ERROR(); } STATEMENT_FINALIZE(); return rc; } int ServiceProviderSet(Service_t *service, char *provider) { STATEMENT_INIT; STATEMENT_PREPAREVA("UPDATE " SERVICES_TABLE " " "SET " SERVICE_PROVIDER "='%q' " "WHERE " SERVICE_MULTIPLEXUID "=%d AND " SERVICE_ID "=%d;", provider, service->multiplexUID, service->id); RETURN_RC_ON_ERROR; STATEMENT_STEP(); if (rc == SQLITE_DONE) { if (provider != service->provider) { if (service->provider) { free(service->provider); } service->provider = strdup(provider); } rc = SQLITE_OK; } else { PRINTLOG_SQLITE3ERROR(); } STATEMENT_FINALIZE(); return rc; } int ServiceDefaultAuthoritySet(Service_t *service, char *defaultAuthority) { STATEMENT_INIT; STATEMENT_PREPAREVA("UPDATE " SERVICES_TABLE " " "SET " SERVICE_DEFAUTHORITY "='%q' " "WHERE " SERVICE_MULTIPLEXUID "=%d AND " SERVICE_ID "=%d;", defaultAuthority, service->multiplexUID, service->id); RETURN_RC_ON_ERROR; STATEMENT_STEP(); if (rc == SQLITE_DONE) { if (defaultAuthority != service->defaultAuthority) { if (service->defaultAuthority) { free(service->defaultAuthority); } service->defaultAuthority = strdup(defaultAuthority); } rc = SQLITE_OK; } else { PRINTLOG_SQLITE3ERROR(); } STATEMENT_FINALIZE(); return rc; } Service_t *ServiceFind(char *name) { Service_t *result = ServiceFindName( name); if (!result) { result = ServiceFindFQIDStr(name); } return result; } Service_t *ServiceFindName(char *name) { STATEMENT_INIT; Service_t *result; STATEMENT_PREPAREVA("SELECT " SERVICE_FIELDS "FROM " SERVICES_TABLE "," MULTIPLEXES_TABLE " WHERE " SERVICES_TABLE "." SERVICE_NAME "='%q' AND " MULTIPLEXES_TABLE "." MULTIPLEX_UID "=" SERVICES_TABLE "." SERVICE_MULTIPLEXUID ";", name); RETURN_ON_ERROR(NULL); result = ServiceGetNext((ServiceEnumerator_t) stmt); STATEMENT_FINALIZE(); return result; } Service_t *ServiceFindId(Multiplex_t *multiplex, int id) { STATEMENT_INIT; Service_t *result; STATEMENT_PREPAREVA("SELECT " SERVICE_FIELDS "FROM " SERVICES_TABLE "," MULTIPLEXES_TABLE " WHERE " SERVICES_TABLE "." SERVICE_MULTIPLEXUID "=%d AND " SERVICES_TABLE "." SERVICE_ID "=%d AND " MULTIPLEXES_TABLE "." MULTIPLEX_UID "=" SERVICES_TABLE "." SERVICE_MULTIPLEXUID ";", multiplex->uid, id); RETURN_ON_ERROR(NULL); result = ServiceGetNext((ServiceEnumerator_t) stmt); STATEMENT_FINALIZE(); return result; } Service_t *ServiceFindFQID(uint16_t networkId, uint16_t tsId, uint16_t serviceId) { STATEMENT_INIT; Service_t *result; STATEMENT_PREPAREVA("SELECT " SERVICE_FIELDS "FROM " SERVICES_TABLE "," MULTIPLEXES_TABLE " WHERE " MULTIPLEXES_TABLE "." MULTIPLEX_NETID "=%d AND " MULTIPLEXES_TABLE "." MULTIPLEX_TSID "=%d AND " SERVICES_TABLE "." SERVICE_MULTIPLEXUID "=" MULTIPLEXES_TABLE "." MULTIPLEX_UID " AND " SERVICE_ID "=%d;", networkId, tsId, serviceId); RETURN_ON_ERROR(NULL); result = ServiceGetNext((ServiceEnumerator_t) stmt); STATEMENT_FINALIZE(); return result; } Service_t *ServiceFindFQIDStr(char *FQIdStr) { uint16_t networkId = 0; uint16_t tsId = 0; uint16_t serviceId = 0; Service_t *service = NULL; if (sscanf(FQIdStr, "%hx.%hx.%hx", &networkId, &tsId, &serviceId) == 3) { service = ServiceFindFQID(networkId, tsId, serviceId); } return service; } ServiceEnumerator_t ServiceEnumeratorGet() { STATEMENT_INIT; STATEMENT_PREPARE("SELECT " SERVICE_FIELDS "FROM " SERVICES_TABLE"," MULTIPLEXES_TABLE " WHERE " SERVICES_TABLE "." SERVICE_MULTIPLEXUID "=" MULTIPLEXES_TABLE "." MULTIPLEX_UID ";"); RETURN_ON_ERROR(NULL); return stmt; } List_t *ServiceListAll() { return ServiceCreateList(ServiceEnumeratorGet()); } ServiceList_t *ServiceGetAll() { return ServiceGetList(NULL); } ServiceEnumerator_t ServiceEnumeratorForMultiplex(Multiplex_t *multiplex) { STATEMENT_INIT; STATEMENT_PREPAREVA("SELECT " SERVICE_FIELDS "FROM " SERVICES_TABLE"," MULTIPLEXES_TABLE " WHERE " SERVICES_TABLE "." SERVICE_MULTIPLEXUID "=" MULTIPLEXES_TABLE "." MULTIPLEX_UID " AND " SERVICES_TABLE "."SERVICE_MULTIPLEXUID"=%d;", multiplex->uid); RETURN_ON_ERROR(NULL); return stmt; } List_t *ServiceListForMultiplex(Multiplex_t *multiplex) { return ServiceCreateList(ServiceEnumeratorForMultiplex(multiplex)); } ServiceList_t *ServiceGetListForMultiplex(Multiplex_t *multiplex) { char where[50]; sprintf(where, SERVICES_TABLE "." SERVICE_MULTIPLEXUID"=%d", multiplex->uid); return ServiceGetList(where); } ServiceEnumerator_t ServiceQueryNameLike(char *query) { STATEMENT_INIT; STATEMENT_PREPAREVA("SELECT " SERVICE_FIELDS "FROM " SERVICES_TABLE"," MULTIPLEXES_TABLE " WHERE " SERVICES_TABLE "." SERVICE_MULTIPLEXUID "=" MULTIPLEXES_TABLE "." MULTIPLEX_UID " AND " SERVICES_TABLE "." SERVICE_NAME " LIKE %Q;", query); RETURN_ON_ERROR(NULL); return stmt; } List_t *ServiceListForNameLike(char *query) { return ServiceCreateList(ServiceQueryNameLike(query)); } ServiceList_t *ServiceGetListForNameLike(char *query) { char *where; ServiceList_t *list; where = sqlite3_mprintf(SERVICES_TABLE "." SERVICE_NAME " LIKE %Q", query); list = ServiceGetList(where); sqlite3_free(where); return list; } void ServiceEnumeratorDestroy(ServiceEnumerator_t enumerator) { int rc; sqlite3_stmt *stmt = (sqlite3_stmt *)enumerator; STATEMENT_FINALIZE(); } Service_t *ServiceGetNext(ServiceEnumerator_t enumerator) { sqlite3_stmt *stmt = (sqlite3_stmt *)enumerator; int rc; STATEMENT_STEP(); if (rc == SQLITE_ROW) { Service_t *service = NULL; char *name; service = ServiceNew(); service->multiplexUID = STATEMENT_COLUMN_INT( 0); service->id = STATEMENT_COLUMN_INT( 1) & 0xffff; service->source = STATEMENT_COLUMN_INT( 2); service->conditionalAccess = STATEMENT_COLUMN_INT(3) ? TRUE:FALSE; service->type = STATEMENT_COLUMN_INT( 4); name = STATEMENT_COLUMN_TEXT( 5); if (name) { service->name = strdup(name); } service->pmtPID = STATEMENT_COLUMN_INT( 6) & 0xffff; name = STATEMENT_COLUMN_TEXT( 7); if (name) { service->provider = strdup(name); } name = STATEMENT_COLUMN_TEXT( 8); if (name) { service->defaultAuthority= strdup(name); } service->networkId = STATEMENT_COLUMN_INT(9) & 0xffff; service->tsId = STATEMENT_COLUMN_INT(10) & 0xffff; return service; } if (rc != SQLITE_DONE) { PRINTLOG_SQLITE3ERROR(); } return NULL; } char *ServiceGetIDStr(Service_t *service, char *buffer) { if (buffer == NULL) { buffer = malloc(SERVICE_ID_STRING_LENGTH); } if (buffer) { sprintf(buffer, "%04x.%04x.%04x", service->networkId & 0xffff, service->tsId & 0xffff, service->id & 0xffff); return buffer; } return NULL; } char *ServiceGetIDNameStr(Service_t *service, char *buffer) { if (buffer == NULL) { buffer = malloc(SERVICE_ID_STRING_LENGTH + 5 /* : ""*/ + strlen(service->name)); } if (buffer) { sprintf(buffer, "%04x.%04x.%04x : \"%s\"", service->networkId & 0xffff, service->tsId & 0xffff, service->id & 0xffff, service->name); return buffer; } return NULL; } /******************************************************************************* * Local Functions * *******************************************************************************/ static List_t *ServiceCreateList(ServiceEnumerator_t enumerator) { List_t *list = ObjectListCreate(); Service_t *service = NULL; do { service = ServiceGetNext(enumerator); if (service) { ListAdd(list, service); } } while (service != NULL); ServiceEnumeratorDestroy(enumerator); return list; } static ServiceList_t *ServiceGetList(char *where) { int count, i; ServiceList_t *list; STATEMENT_INIT; count = DBaseCount(SERVICES_TABLE, where); if (where) { STATEMENT_PREPAREVA("SELECT " SERVICE_FIELDS "FROM " SERVICES_TABLE"," MULTIPLEXES_TABLE " WHERE " SERVICES_TABLE "." SERVICE_MULTIPLEXUID "=" MULTIPLEXES_TABLE "." MULTIPLEX_UID " AND %s;", where); } else { STATEMENT_PREPARE("SELECT " SERVICE_FIELDS "FROM " SERVICES_TABLE"," MULTIPLEXES_TABLE " WHERE " SERVICES_TABLE "." SERVICE_MULTIPLEXUID "=" MULTIPLEXES_TABLE "." MULTIPLEX_UID ";"); } list = (ServiceList_t*)ObjectCollectionCreate(TOSTRING(ServiceList_t), count); if (list) { for (i = 0; i < count; i ++) { list->services[i] = ServiceGetNext((ServiceEnumerator_t)stmt); } } STATEMENT_FINALIZE(); return list; } static void ServiceDestructor(void * arg) { Service_t *service = arg; if (service->name) { free(service->name); } if (service->provider) { free(service->provider); } if (service->defaultAuthority) { free(service->defaultAuthority); } } static void ServiceListDestructor(void * arg) { ServiceList_t *list = arg; int i; for (i = 0;i < list->nrofServices; i ++) { ObjectRefDec(list->services[i]); } } int ServiceEventToString(yaml_document_t *document, Event_t event, void * payload) { Service_t *service = payload; char idStr[20] = {0}; char *name = idStr; int mappingId = yaml_document_add_mapping(document, (yaml_char_t*)YAML_MAP_TAG, YAML_ANY_MAPPING_STYLE); if (service) { sprintf(idStr, "%04x.%04x.%04x", service->networkId & 0xffff, service->tsId & 0xffff, service->id & 0xffff); name = service->name; } YamlUtils_MappingAdd(document, mappingId, "Service ID", idStr); YamlUtils_MappingAdd(document, mappingId, "Service Name", name); return mappingId; } dvbstreamer-2.1.0/src/setup.c000066400000000000000000000241361217721213100161260ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA setup.c Setups the database for the main application. */ #include "config.h" #include #include #include #include #include #include #include #include "parsezap.h" #include "dbase.h" #include "multiplexes.h" #include "services.h" #include "main.h" #include "logging.h" #include "events.h" #include "lnb.h" /******************************************************************************* * Defines * *******************************************************************************/ #define INIT(_func, _name) \ do {\ if (_func) \ { \ LogModule(LOG_ERROR, SETUP, "Failed to initialise %s.\n", _name); \ exit(1);\ }\ LogModule(LOG_DEBUGV, SETUP, "Initialised %s.\n", _name);\ }while(0) #define DEINIT(_func, _name) \ do {\ _func;\ LogModule(LOG_DEBUGV, SETUP, "Deinitialised %s\n", _name);\ }while(0) /******************************************************************************* * Prototypes * *******************************************************************************/ static void usage(char *appname); static void version(void); /******************************************************************************* * Global variables * *******************************************************************************/ static const char SETUP[] = "Setup"; char DataDirectory[PATH_MAX]; /******************************************************************************* * Global functions * *******************************************************************************/ int main(int argc, char *argv[]) { DVBDeliverySystem_e channelsFileType = DELSYS_DVBT; char *channelsFile = NULL; int adapterNumber = 0; #if defined(ENABLE_DVB) LNBInfo_t lnbInfo = {NULL,NULL,0,0,0}; #endif int rc; int logLevel = 0; char logFilename[PATH_MAX] = {0}; /* Create the data directory */ sprintf(DataDirectory, "%s/.dvbstreamer", getenv("HOME")); mkdir(DataDirectory, S_IRWXU); while (TRUE) { int c; c = getopt(argc, argv, "vVdro:a:t:s:S:c:A:l:hL:i:"); if (c == -1) { break; } switch (c) { case 'v': logLevel++; break; case 'L': strcpy(logFilename, optarg); break; case 'V': version(); exit(0); break; case 'a': adapterNumber = atoi(optarg); break; /* Database initialisation options*/ #if defined(ENABLE_DVB) case 't': channelsFile = optarg; channelsFileType = DELSYS_DVBT; break; case 's': channelsFile = optarg; channelsFileType = DELSYS_DVBS; break; case 'S': channelsFile = optarg; channelsFileType = DELSYS_DVBS2; break; case 'c': channelsFile = optarg; channelsFileType = DELSYS_DVBC; break; #endif #if defined(ENABLE_ATSC) case 'A': channelsFile = optarg; channelsFileType = DELSYS_ATSC; break; #endif case 'i': channelsFile = optarg; channelsFileType = DELSYS_ISDBT; break; #if defined(ENABLE_DVB) case 'l': /* LNB settings */ if (LNBDecode(optarg, &lnbInfo)) { int i = 0; LNBInfo_t *knownLNB; do { knownLNB = LNBEnumerate(i); if (knownLNB) { char **desclines; printf("%s :\n", knownLNB->name); for (desclines = knownLNB->desc; *desclines; desclines ++) { printf(" %s\n", *desclines); } printf("\n"); i ++; } }while(knownLNB); exit(1); } break; #endif case 'h': default: usage(argv[0]); exit(1); } } if (logFilename[0]) { if (LoggingInitFile(logFilename, logLevel)) { perror("Could not open user specified log file:"); exit(1); } } else { sprintf(logFilename, "setupdvbstreamer-%d.log", adapterNumber); if (LoggingInit(logFilename, logLevel)) { perror("Couldn't initialising logging module:"); exit(1); } } #if defined(ENABLE_DVB) if (((channelsFileType == DELSYS_DVBS) || (channelsFileType == DELSYS_DVBS2)) && (lnbInfo.lowFrequency == 0)) { fprintf(stderr, "No LNB information provide for DVB-S channels.conf file!\n"); exit(1); } #endif INIT(ObjectInit(), "objects"); INIT(EventsInit(), "events"); INIT(DBaseInit(adapterNumber), "database"); INIT(MultiplexInit(), "multiplex"); INIT(ServiceInit(), "service"); if (!channelsFile) { usage(argv[0]); exit(1); } rc = DBaseTransactionBegin(); if (rc != SQLITE_OK) { LogModule(LOG_ERROR, SETUP, "Begin Transaction failed (%d:%s)\n", rc, sqlite3_errmsg(DBaseConnectionGet())); } LogModule(LOG_INFO, SETUP, "Importing services from %s\n", channelsFile); if (!parsezapfile(channelsFile, channelsFileType)) { exit(1); } #if defined(ENABLE_DVB) if ((channelsFileType == DELSYS_DVBS) || (channelsFileType == DELSYS_DVBS2)) { /* Write out LNB settings. */ DBaseMetadataSetInt(METADATA_NAME_LNB_LOW_FREQ, lnbInfo.lowFrequency); DBaseMetadataSetInt(METADATA_NAME_LNB_HIGH_FREQ, lnbInfo.highFrequency); DBaseMetadataSetInt(METADATA_NAME_LNB_SWITCH_FREQ, lnbInfo.switchFrequency); } #endif DBaseMetadataSetInt(METADATA_NAME_SCAN_ALL, 1); rc = 0; rc = DBaseTransactionCommit(); if (rc != SQLITE_OK) { LogModule(LOG_ERROR, SETUP, "Begin Transaction failed (%d:%s)\n", rc, sqlite3_errmsg(DBaseConnectionGet())); } printf("%d Services available on %d Multiplexes\n", ServiceCount(), MultiplexCount()); DEINIT(ServiceDeInit(), "service"); DEINIT(MultiplexDeInit(), "multiplex"); DEINIT(DBaseDeInit(), "database"); DEINIT(EventsDeInit(), "events"); DEINIT(ObjectDeinit(), "objects"); LoggingDeInit(); return 0; } /* * Output command line usage and help. */ static void usage(char *appname) { fprintf(stderr,"Usage:%s \n" " Options:\n" " -v : Increase the amount of debug output, can be used multiple\n" " times for more output\n" " -L : Set the location of the log file.\n" " -V : Print version information then exit\n" "\n" " -a : Use adapter number (ie /dev/dvb/adapter/...)\n" "\n" #if defined(ENABLE_DVB) " -t : Terrestrial channels.conf file to import services and \n" " multiplexes from. (DVB-T)\n" "\n" " -s : Satellite channels.conf file to import services and \n" " multiplexes from.(DVB-S)\n" " -S : DVB-S/S2 Satellite channels.conf file to import services and \n" " multiplexes from. NOTE: File must be in VDR format!\n" " -l : (DVB-S Only) Set LNB type being used\n" " (Use -l help to print types) or \n" " -l ,, Specify LO frequencies in MHz\n" "\n" " -c : Cable channels.conf file to import services and \n" " multiplexes from. (DVB-C)\n" "\n" #endif " -i : ISDB channels.conf file to import services and \n" " multiplexes from. (ISDB-T) (EXPERIMENTAL)\n" " NOTE: The file should be in dvb-t format\n" "\n" #if defined(ENABLE_ATSC) " -A : ATSC channels.conf file to import services and \n" " multiplexes from. (ATSC)\n" #endif ,appname ); } /* * Output version and license conditions */ static void version(void) { printf("%s - %s (Compiled %s %s)\n" "Written by Adam Charrett (charrea6@users.sourceforge.net).\n" "\n" "Copyright 2006 Adam Charrett\n" "This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n", PACKAGE, VERSION, __DATE__, __TIME__); } dvbstreamer-2.1.0/src/standard/000077500000000000000000000000001217721213100164145ustar00rootroot00000000000000dvbstreamer-2.1.0/src/standard/atsc/000077500000000000000000000000001217721213100173465ustar00rootroot00000000000000dvbstreamer-2.1.0/src/standard/atsc/atsc.c000066400000000000000000000042661217721213100204540ustar00rootroot00000000000000/* Copyright (C) 2009 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA atsc.c Initialise/Deinitialise the ATSC Standard. */ #include #include #include #include #include #include #include "standard/mpeg2.h" #include "standard/atsc.h" #include "psipprocessor.h" #include "atsctext.h" /******************************************************************************* * Global variables * *******************************************************************************/ EventSource_t ATSCEventSource = NULL; char ATSCFilterType[]="ATSC"; static PSIPProcessor_t psipProcessor; /******************************************************************************* * Global functions * *******************************************************************************/ int ATSCStandardInit(TSReader_t *reader) { if (ATSCEventSource == NULL) { ATSCEventSource = EventsRegisterSource(ATSCFilterType); } if (ATSCMultipleStringsInit()) { return -1; } if (MPEG2StandardInit(reader)) { return -1; } psipProcessor = PSIPProcessorCreate(reader); if (psipProcessor == NULL) { MPEG2StandardDeinit(reader); return -1; } return 0; } int ATSCStandardDeinit(TSReader_t *reader) { MPEG2StandardDeinit(reader); PSIPProcessorDestroy(psipProcessor); ATSCMultipleStringsDeInit(); return 0; } dvbstreamer-2.1.0/src/standard/atsc/atsctext.c000077500000000000000000000750621217721213100213660ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA atsctext.c Convert ATSC Multiple strings text to UTF-8. Note: Huffman decode and tables are taken from pchdtvr.c by inkling@nop.org The tables are copyrighted by (from A/65C Annex C Page 91 footnote 19): ********************************************************************* * Tables C4 through C7 are (C) 1997 General Instrument Corporation. * * Unlimited use in conjunction with this ATSC standard is granted * * on a royalty-free basis by General Instrument Corporation. * ********************************************************************* */ #include "config.h" #include #include #include #include #include #include "logging.h" #include "objects.h" #include "atsctext.h" /******************************************************************************* * Prototypes * *******************************************************************************/ static void ATSCMultipleStringsDestructor(ATSCMultipleStrings_t *strings); static uint8_t *AppendSegment(uint8_t *segment, int *sbIndex, bool *supported); static void HuffmanDecode(uint8_t *dest, uint8_t *src, int destLen, int srcLen, int comp); /******************************************************************************* * Global variables * *******************************************************************************/ /********************************************************* ATSC HUFFMAN DECODE A/65b Table C5 Huffman Title Decode Tree (c) 1997 General Instruments Corp. not exact table, extracted from specs by me, faster and more useful this way since exact table is big endian but x86 isn't. byte offsets of character i tree root */ static unsigned int huffman1bo[128] = { 0x0000, 0x003A, 0x003C, 0x003E, 0x0040, 0x0042, 0x0044, 0x0046, 0x0048, 0x004A, 0x004C, 0x004E, 0x0050, 0x0052, 0x0054, 0x0056, 0x0058, 0x005A, 0x005C, 0x005E, 0x0060, 0x0062, 0x0064, 0x0066, 0x0068, 0x006A, 0x006C, 0x006E, 0x0070, 0x0072, 0x0074, 0x0076, 0x0078, 0x00CE, 0x00D2, 0x00D4, 0x00D6, 0x00D8, 0x00DA, 0x00DC, 0x00E6, 0x00E8, 0x00EA, 0x00F0, 0x00F2, 0x00F4, 0x0106, 0x0112, 0x0114, 0x011C, 0x0128, 0x0130, 0x0134, 0x0136, 0x0138, 0x013A, 0x013C, 0x013E, 0x0146, 0x0148, 0x014A, 0x014C, 0x014E, 0x0150, 0x0152, 0x0154, 0x017E, 0x0192, 0x01AC, 0x01BA, 0x01D2, 0x01E4, 0x01FA, 0x0206, 0x021E, 0x0226, 0x0232, 0x023E, 0x0252, 0x0264, 0x027A, 0x0294, 0x0298, 0x02A4, 0x02C8, 0x02DE, 0x02E6, 0x02F4, 0x0304, 0x0306, 0x030C, 0x0310, 0x0312, 0x0314, 0x0316, 0x0318, 0x031A, 0x031C, 0x0352, 0x036A, 0x038E, 0x03AE, 0x03EE, 0x0406, 0x0428, 0x0444, 0x0472, 0x0476, 0x0490, 0x04BE, 0x04D6, 0x050A, 0x0544, 0x0564, 0x0566, 0x059A, 0x05D0, 0x05FC, 0x0622, 0x062C, 0x0646, 0x0654, 0x067C, 0x068A, 0x068C, 0x068E, 0x0690, 0x0692 }; /* character i order-1 trees NOTE: byte lookup should not have endian issues also extracted from specs by me */ #define TITLE_COZ 1683 static unsigned char huffman1co[1684] = { 0x1B,0x1C,0xB4,0xA4,0xB2,0xB7,0xDA,0x01,0xD1,0x02,0x03,0x9B,0x04,0xD5,0xD9,0x05, 0xCB,0xD6,0x06,0xCF,0x07,0x08,0xCA,0x09,0xC9,0xC5,0xC6,0x0A,0xD2,0xC4,0xC7,0xCC, 0xD0,0xC8,0xD7,0xCE,0x0B,0xC1,0x0C,0xC2,0xCD,0xC3,0x0D,0x0E,0x0F,0x10,0xD3,0x11, 0xD4,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B, 0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B, 0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B, 0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B, 0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x29,0x2A,0xD8,0xE5,0xB9,0x01,0xA7,0xB1, 0xEC,0xD1,0x02,0xAD,0xB2,0xDA,0xE3,0xB3,0x03,0xE4,0xE6,0x04,0x9B,0xE2,0x05,0x06, 0x07,0x08,0x09,0xD5,0x0A,0xD6,0x0B,0xD9,0x0C,0xA6,0xE9,0xCB,0xC5,0xCF,0x0D,0x0E, 0xCA,0xC9,0x0F,0xC7,0x10,0x11,0xE1,0x12,0x13,0xC6,0xD2,0xC8,0xCE,0xC1,0xC4,0xD0, 0xCC,0x14,0x15,0xEF,0xC2,0xD7,0x16,0xCD,0x17,0xF4,0xD4,0x18,0x19,0x1A,0xC3,0xD3, 0x1B,0x1C,0x1D,0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x01,0x80, 0xA0,0x9B,0x9B,0x9B,0x9B,0x9B,0xB1,0x9B,0x9B,0x9B,0x9B,0xA0,0x04,0xF3,0xE4,0xB9, 0x01,0xF4,0xA0,0x9B,0x02,0x03,0x9B,0x9B,0x9B,0x9B,0x01,0x02,0x9B,0xC1,0xC8,0xD3, 0x9B,0x9B,0x9B,0xA0,0x07,0x08,0xB1,0xD2,0xD3,0xD4,0xD5,0xAD,0xCD,0xC1,0x01,0x02, 0x03,0xA0,0x04,0x9B,0x05,0x06,0xA0,0x05,0xC9,0xD7,0xD3,0x01,0x02,0x9B,0xAE,0x80, 0x03,0x04,0x9B,0x9B,0x02,0x03,0xAD,0x9B,0x01,0x80,0xA0,0xB0,0x04,0x05,0x80,0x9B, 0xB1,0xB2,0xA0,0xB0,0xB9,0x01,0x02,0x03,0x02,0x03,0xB1,0xBA,0x01,0xB0,0x9B,0x80, 0x80,0x01,0xB0,0x9B,0x9B,0xB8,0x9B,0x9B,0x9B,0x9B,0x9B,0xB0,0x9B,0xA0,0x02,0x03, 0xB1,0xB3,0xB9,0xB0,0x01,0x9B,0x9B,0xA0,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B, 0x9B,0x80,0x9B,0x9B,0x13,0x14,0xAA,0xAD,0xAE,0xF6,0xE7,0xF4,0xE2,0xE9,0x01,0x02, 0xC2,0xF0,0x9B,0xF3,0xE3,0xE6,0xF7,0x03,0xF5,0x04,0x05,0x06,0xF2,0x07,0x08,0x09, 0x0A,0x0B,0x0C,0xE4,0xA0,0x0D,0xEC,0xEE,0x0E,0xED,0x0F,0x10,0x11,0x12,0x08,0x09, 0xC1,0xD3,0x9B,0x01,0xC3,0x02,0xE9,0xEC,0x03,0xF2,0xF5,0x04,0xEF,0xE1,0x05,0xE5, 0x06,0x07,0x0B,0x0C,0xC1,0xF9,0x01,0xC2,0xCF,0xE5,0xF5,0x9B,0xE9,0x02,0xA0,0x03, 0x04,0x05,0xF2,0x06,0xEC,0x07,0xE1,0x08,0x09,0xE8,0x0A,0xEF,0x05,0x06,0xF9,0x9B, 0x01,0xF5,0x02,0xF2,0xE9,0xE5,0xEF,0x03,0xE1,0x04,0x0A,0x0B,0xF1,0xF5,0xF3,0x01, 0xED,0xF9,0xC3,0x02,0xEC,0xEE,0xE4,0xF8,0x03,0x9B,0xF6,0x04,0x05,0xE1,0x06,0x07, 0x08,0x09,0x07,0x08,0xA0,0x9B,0xCC,0x01,0xE5,0x02,0xEC,0xF5,0xEF,0x03,0xE9,0xF2, 0x04,0x05,0xE1,0x06,0x09,0x0A,0xAE,0xEC,0xF9,0xC1,0xE8,0x01,0x9B,0x02,0x03,0x04, 0xE1,0xF5,0xE9,0x05,0xE5,0x06,0xF2,0xEF,0x07,0x08,0xEF,0x05,0x80,0x9B,0xF5,0x01, 0x02,0xE9,0xE1,0x03,0xE5,0x04,0xEE,0x0B,0xBA,0xD4,0xAE,0xF2,0xE3,0x01,0xA0,0x02, 0x80,0x9B,0xED,0x03,0xC9,0xF3,0xF4,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x02,0x03, 0x9B,0xF5,0x01,0xE1,0xEF,0xE5,0x05,0xE9,0xE1,0xEF,0xF5,0xEE,0x9B,0xE5,0x01,0x02, 0x03,0x04,0x04,0x05,0xA0,0x9B,0x01,0xF5,0x02,0xE5,0xEF,0x03,0xE1,0xE9,0x08,0x09, 0xAA,0xD4,0x01,0x9B,0xE3,0x02,0xF2,0x03,0xE5,0x04,0xF5,0xF9,0xE9,0x05,0xEF,0x06, 0x07,0xE1,0xE5,0x08,0xCE,0xA0,0xC6,0xF5,0x01,0x02,0x9B,0xC2,0x03,0xE1,0x04,0xEF, 0x05,0xE9,0x06,0x07,0x09,0x0A,0xE4,0xF3,0xE6,0xF6,0xF7,0xF0,0xF2,0x01,0xEC,0x02, 0x03,0xA0,0x9B,0x04,0x05,0xF5,0x06,0x07,0xEE,0x08,0x0B,0x0C,0xA0,0xF3,0xF9,0xAE, 0xD2,0xC7,0x01,0x9B,0x02,0xF5,0x03,0x04,0x05,0xE9,0xEC,0x06,0xE5,0x07,0xEF,0x08, 0xE1,0x09,0xF2,0x0A,0x01,0xF5,0x9B,0xD6,0x04,0x05,0xE8,0x9B,0x01,0xF5,0x02,0xE1, 0xE9,0xEF,0x03,0xE5,0x10,0x11,0xAA,0xEC,0xF1,0xAE,0xA0,0xF7,0xED,0xEE,0x01,0x02, 0x9B,0xEB,0x03,0x04,0x05,0x06,0xE3,0x07,0xEF,0x08,0xE9,0xF5,0x09,0xE1,0xE5,0xF0, 0xE8,0x0A,0x0B,0x0C,0x0D,0xF4,0x0E,0x0F,0xE8,0x0A,0xAD,0xCE,0x9B,0x01,0xD6,0x02, 0xF5,0xF7,0x03,0x04,0xE1,0xE5,0xE9,0x05,0xF2,0x06,0xEF,0x07,0x08,0x09,0xEE,0x03, 0xEC,0xAE,0x01,0x9B,0x02,0xF0,0x06,0xE9,0xA0,0xC3,0xEF,0x9B,0xE5,0x01,0x80,0x02, 0x03,0xE1,0x04,0x05,0x06,0x07,0xC6,0xD7,0x01,0x9B,0xF2,0x02,0x03,0xE8,0xE5,0xE1, 0x04,0xE9,0xEF,0x05,0x9B,0x9B,0x02,0xEF,0xE1,0x9B,0x01,0xE5,0x01,0xEF,0x9B,0xE1, 0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x19,0x1A,0x9B,0xBA, 0xE5,0xEA,0xF8,0x01,0x02,0xE6,0xA7,0x03,0xFA,0xE8,0x04,0xF7,0x05,0xF5,0xE2,0x06, 0xEB,0x07,0xF0,0x08,0x80,0xF6,0xE7,0x09,0xE4,0x0A,0xA0,0xE9,0x0B,0xE3,0xF9,0x0C, 0x0D,0xED,0x0E,0x0F,0xF3,0x10,0x11,0xEC,0x12,0xF4,0xF2,0x13,0xEE,0x14,0x15,0x16, 0x17,0x18,0x0A,0x0B,0xF3,0x9B,0xF5,0xE2,0x01,0x80,0xA0,0x02,0xE5,0xF2,0xE9,0x03, 0xEC,0x04,0xF9,0x05,0xEF,0x06,0xE1,0x07,0x08,0x09,0x10,0x11,0xC3,0xCC,0xC7,0x9B, 0xE3,0x01,0x80,0xEC,0xF9,0x02,0xF3,0x03,0xF5,0x04,0x05,0xF2,0x06,0xE9,0xA0,0x07, 0x08,0xEF,0xF4,0x09,0x0A,0xE1,0x0B,0xE8,0xEB,0xE5,0x0C,0x0D,0x0E,0x0F,0x0E,0x0F, 0xAE,0xF5,0xF7,0x01,0xEC,0x02,0xE4,0xE7,0xF2,0x03,0x9B,0xEF,0x04,0xF6,0x05,0x06, 0xF9,0xF3,0x07,0xE9,0xE1,0x08,0x09,0x80,0x0A,0x0B,0xE5,0x0C,0x0D,0xA0,0x1E,0x1F, 0x9B,0xA1,0xAD,0xE8,0xEA,0xF1,0xF5,0xFA,0x01,0x02,0x03,0x04,0xBA,0xF8,0xA7,0xE2, 0xE9,0x05,0x06,0x07,0xE6,0xED,0xE7,0xEB,0x08,0x09,0xF6,0xF0,0x0A,0xEF,0x0B,0xE3, 0x0C,0x0D,0x0E,0xF9,0x0F,0xE4,0xEC,0x10,0xE5,0x11,0xF4,0xF7,0x12,0x13,0xE1,0x14, 0x15,0x16,0xEE,0xF3,0x17,0x80,0x18,0x19,0xF2,0x1A,0x1B,0xA0,0x1C,0x1D,0xA0,0x0B, 0xF5,0x9B,0x01,0xEC,0xF3,0xF2,0x80,0xE1,0x02,0x03,0xF4,0xE9,0xEF,0xE6,0x04,0x05, 0x06,0x07,0xE5,0x08,0x09,0x0A,0x0F,0x10,0xBA,0xF9,0xA7,0xF4,0x9B,0x01,0xE7,0xEC, 0x02,0xEE,0x03,0xEF,0xF5,0x04,0xF2,0x05,0x06,0xE9,0x07,0xF3,0xE1,0x08,0x09,0x0A, 0x0B,0xE5,0x80,0x0C,0xE8,0xA0,0x0D,0x0E,0xE5,0x0D,0xE2,0xF5,0xF7,0x9B,0xEC,0x01, 0xF9,0xEE,0x02,0x03,0x04,0xF2,0x05,0x80,0x06,0xA0,0xE1,0xEF,0x07,0xF4,0xE9,0x08, 0x09,0x0A,0x0B,0x0C,0x15,0x16,0xA1,0xF8,0xE9,0xEB,0x01,0x80,0x9B,0xFA,0xE2,0x02, 0x03,0x04,0xA0,0xF0,0x05,0x06,0x07,0xE1,0x08,0xE6,0xF2,0xED,0xF6,0x09,0xE4,0x0A, 0xEF,0xF4,0xEC,0xF3,0xE7,0xE5,0x0B,0xE3,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13, 0xEE,0x14,0xEF,0x01,0x9B,0xE1,0x0B,0x0C,0xD4,0xEF,0xE6,0xEC,0xF7,0xE1,0x01,0xBA, 0x02,0x9B,0xF9,0x03,0x04,0x05,0xF3,0x06,0x07,0x08,0xE9,0xA0,0x09,0x80,0xE5,0x0A, 0x15,0x16,0xA7,0xBA,0xE3,0xF7,0xF2,0xAD,0xE2,0x01,0x02,0x9B,0xE6,0x03,0xED,0xF6, 0x04,0xEB,0x05,0xF4,0x06,0x07,0x08,0xF3,0x09,0xF5,0x0A,0xEF,0x0B,0x0C,0x80,0xF9, 0xE1,0x0D,0xE4,0xE9,0xA0,0x0E,0x0F,0xEC,0xE5,0x10,0x11,0x12,0x13,0x14,0x0A,0x0B, 0xF9,0x9B,0xF5,0xF3,0x01,0x02,0xE2,0xED,0x80,0x03,0xF0,0xEF,0x04,0xA0,0x05,0xE9, 0x06,0xE1,0x07,0x08,0x09,0xE5,0x18,0x19,0xE2,0xEA,0xF2,0xE8,0xEC,0xED,0xFA,0x9B, 0x01,0xF5,0x02,0x03,0xF6,0x04,0xBA,0xE6,0x05,0x06,0xEB,0xEF,0x07,0xA7,0xF9,0x08, 0x09,0x0A,0x0B,0xE3,0x0C,0xEE,0xE1,0x0D,0xF3,0x0E,0xE9,0x0F,0x10,0xF4,0x80,0xE4, 0xE5,0x11,0x12,0xE7,0xA0,0x13,0x14,0x15,0x16,0x17,0x1B,0x1C,0xAE,0xFA,0xBF,0x01, 0xA7,0x9B,0x02,0xE9,0xF8,0xF9,0x03,0xE5,0xE8,0x04,0xE1,0xEB,0x05,0xE2,0x06,0x07, 0xE3,0x08,0xE7,0xF4,0x09,0x80,0xF6,0xF0,0x0A,0xE4,0x0B,0xF3,0xF7,0x0C,0x0D,0xEF, 0xEC,0xA0,0x0E,0x0F,0xED,0xE6,0x10,0xF5,0x11,0x12,0x13,0x14,0x15,0xF2,0x16,0xEE, 0x17,0x18,0x19,0x1A,0x0E,0x0F,0xED,0xA7,0x9B,0xE4,0x01,0xF9,0xF3,0xF2,0xF4,0x02, 0xE8,0x03,0xEC,0xF0,0x04,0xE1,0xE9,0x05,0x06,0x80,0xA0,0x07,0x08,0x09,0x0A,0xE5, 0xEF,0x0B,0x0C,0x0D,0x9B,0xF5,0x18,0x19,0xBA,0xAC,0xF6,0x9B,0xF0,0xE2,0x01,0xE6, 0x02,0xA7,0xAE,0xE7,0x03,0xE3,0xF5,0x04,0xED,0x05,0x06,0x07,0xEB,0x08,0x09,0xEE, 0xF2,0x0A,0xE4,0x0B,0xF9,0xEC,0x0C,0x0D,0xF4,0x80,0x0E,0xEF,0xF3,0xA0,0xE1,0x0F, 0xE9,0x10,0x11,0xE5,0x12,0x13,0x14,0x15,0x16,0x17,0x19,0x1A,0xA7,0xAC,0xBF,0xC3, 0xC8,0xE4,0xE6,0xED,0xF2,0xAE,0xEC,0xEE,0xF9,0x01,0x02,0x03,0x04,0xBA,0x05,0x9B, 0xF5,0x06,0x07,0x08,0x09,0xEB,0xF0,0x0A,0x0B,0x0C,0xE1,0xE3,0x0D,0xE8,0x0E,0x0F, 0xEF,0x10,0x11,0xF3,0x12,0xE9,0x13,0xE5,0x14,0x15,0xF4,0x16,0x17,0xA0,0x18,0x80, 0x14,0x15,0xBA,0xBF,0xE4,0xF7,0x9B,0xA7,0x01,0xEE,0x02,0x03,0x04,0xE3,0xE2,0xED, 0x05,0xF9,0x06,0xF4,0x07,0xEC,0x08,0xF5,0xF2,0x09,0xE1,0xF3,0x0A,0xEF,0x0B,0x0C, 0x0D,0xE9,0x80,0xE5,0x0E,0xA0,0x0F,0xE8,0x10,0x11,0x12,0x13,0x11,0x12,0xEB,0xFA, 0x80,0xE6,0x9B,0x01,0xA0,0x02,0x03,0xE9,0xE1,0x04,0xE4,0xF0,0xED,0xE2,0xE3,0xE7, 0xEC,0x05,0xE5,0x06,0x07,0x08,0x09,0xF4,0x0A,0x0B,0x0C,0xF3,0xEE,0x0D,0x0E,0xF2, 0x0F,0x10,0x04,0xE5,0xF3,0xEF,0x9B,0x01,0xE1,0x02,0x03,0xE9,0x0B,0x0C,0xA7,0xE2, 0xEC,0xE3,0xF2,0x01,0x9B,0x02,0x03,0x04,0xE9,0xEF,0xEE,0xE5,0xE1,0x80,0x05,0xA0, 0x06,0x07,0x08,0x09,0xF3,0x0A,0x05,0x06,0x9B,0xA0,0xE1,0xE5,0xE9,0x01,0x80,0xF0, 0x02,0xF4,0x03,0x04,0xA0,0x13,0xE3,0xAD,0xE4,0xE9,0xEE,0xEF,0xF0,0xF4,0xF6,0xA1, 0xE1,0xED,0x01,0xE2,0x02,0x03,0x04,0xA7,0x05,0x06,0xF7,0x07,0x9B,0xEC,0x08,0xE5, 0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0xF3,0x0F,0x10,0x11,0x80,0x12,0x05,0x06,0xE5,0xFA, 0xA0,0xF9,0x9B,0x01,0x80,0xE9,0x02,0xE1,0x03,0x04,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B, 0x9B,0x9B,0x9B,0x9B }; /* A/65b Table C7 Huffman Description Decode Tree (c) General Instruments Corp. not exact table, extracted from specs by me, faster more useful version since exact table is big endian but x86 isn't. byte offsets of character i tree root */ static unsigned int huffman2bo[128] = { 0x0000, 0x002C, 0x002E, 0x0030, 0x0032, 0x0034, 0x0036, 0x0038, 0x003A, 0x003C, 0x003E, 0x0040, 0x0042, 0x0044, 0x0046, 0x0048, 0x004A, 0x004C, 0x004E, 0x0050, 0x0052, 0x0054, 0x0056, 0x0058, 0x005A, 0x005C, 0x005E, 0x0060, 0x0062, 0x0064, 0x0066, 0x0068, 0x006A, 0x00DE, 0x00E0, 0x00EA, 0x00EC, 0x00EE, 0x00F0, 0x00F2, 0x00F8, 0x00FA, 0x00FC, 0x00FE, 0x0100, 0x0104, 0x0116, 0x0120, 0x0122, 0x012C, 0x0132, 0x0138, 0x013C, 0x0140, 0x0144, 0x0146, 0x014A, 0x014C, 0x0154, 0x0156, 0x0158, 0x015A, 0x015C, 0x015E, 0x0160, 0x0162, 0x0176, 0x0184, 0x0194, 0x01A2, 0x01B2, 0x01BA, 0x01C8, 0x01D2, 0x01DE, 0x01EA, 0x01F2, 0x01FC, 0x0208, 0x0210, 0x021A, 0x0228, 0x022A, 0x0234, 0x024A, 0x025A, 0x025E, 0x0264, 0x026E, 0x0270, 0x0272, 0x0274, 0x0276, 0x0278, 0x027A, 0x027C, 0x027E, 0x0280, 0x02B4, 0x02CE, 0x02F0, 0x031A, 0x0358, 0x036E, 0x038E, 0x03AC, 0x03D8, 0x03E0, 0x03F4, 0x0424, 0x0440, 0x0476, 0x04AE, 0x04CE, 0x04D0, 0x0506, 0x0534, 0x0560, 0x0586, 0x0592, 0x05AA, 0x05B8, 0x05DC, 0x05EC, 0x05EE, 0x05F0, 0x05F2, 0x05F4, }; #define DESCR_COZ 1525 /* character i order-1 trees */ static unsigned char huffman2co[1526] = { 0x14,0x15,0x9B,0xD6,0xC9,0xCF,0xD7,0xC7,0x01,0xA2,0xCE,0xCB,0x02,0x03,0xC5,0xCC, 0xC6,0xC8,0x04,0xC4,0x05,0xC2,0x06,0xC3,0xD2,0x07,0xD3,0x08,0xCA,0xD4,0x09,0xCD, 0xD0,0x0A,0xC1,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x9B,0x9B,0x9B,0x9B, 0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B, 0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B, 0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B, 0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x38,0x39,0xAD,0xAF,0xB7,0xDA, 0xA8,0xB3,0xB5,0x01,0x02,0x9B,0xB4,0xF1,0xA2,0xD5,0xD6,0xD9,0x03,0x04,0x05,0xCF, 0x06,0xC9,0xF9,0xEA,0xEB,0xF5,0xF6,0x07,0x08,0x09,0xB2,0xC5,0xC6,0xB1,0x0A,0xEE, 0xCB,0x0B,0xD4,0x0C,0xC4,0xC8,0xD2,0x0D,0x0E,0x0F,0xC7,0xCA,0xCE,0xD0,0xD7,0x10, 0xC2,0x11,0xCC,0xEC,0xE5,0xE7,0x12,0xCD,0x13,0x14,0xC3,0x15,0x16,0x17,0xED,0x18, 0x19,0xF2,0x1A,0xD3,0x1B,0x1C,0xE4,0x1D,0xC1,0xE3,0x1E,0xE9,0xF0,0xE2,0xF7,0x1F, 0xF3,0xE6,0x20,0x21,0x22,0xE8,0xEF,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0xF4, 0x2B,0x2C,0x2D,0x2E,0x2F,0xE1,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x9B,0x9B, 0x03,0x04,0x80,0xAE,0xC8,0xD4,0x01,0x02,0x9B,0xA0,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B, 0x9B,0x9B,0x02,0xF3,0xA0,0xF4,0x9B,0x01,0x9B,0x9B,0xAC,0x9B,0x9B,0x9B,0x9B,0x9B, 0x01,0xA0,0x9B,0xA2,0x07,0x08,0xE2,0xE4,0xE5,0xE6,0xA0,0xF2,0xE1,0x01,0x02,0xF3, 0xE3,0x03,0x04,0x05,0x9B,0x06,0x04,0x80,0xCA,0xD3,0xA2,0x01,0x9B,0x02,0x03,0xA0, 0x9B,0xA0,0x03,0x04,0x9B,0xB7,0xF4,0xA0,0xB0,0xF3,0x01,0x02,0xB9,0x02,0xB8,0x9B, 0xA0,0x01,0xAE,0x02,0xB6,0x9B,0x01,0xA0,0xA0,0x01,0x9B,0xB0,0xAE,0x01,0x9B,0xA0, 0xAE,0x01,0xA0,0x9B,0x9B,0x9B,0x9B,0x01,0xAC,0xAE,0x9B,0x9B,0x02,0x03,0x9B,0xA0, 0xB5,0xB6,0xB8,0x01,0x9B,0xA0,0x9B,0xA0,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0xA0, 0x9B,0x9B,0x08,0x09,0xE6,0xF5,0xF3,0xF4,0x9B,0xE4,0x01,0xED,0x02,0x03,0x04,0xF2, 0x05,0x06,0xEC,0xEE,0x07,0xA0,0x05,0x06,0x9B,0xEC,0xF5,0x01,0x02,0xE1,0xEF,0xE5, 0xE9,0xF2,0x03,0x04,0x06,0x07,0x9B,0xE9,0xF9,0xF2,0xF5,0x01,0x02,0x03,0xEC,0xEF, 0xE1,0x04,0xE8,0x05,0x05,0x06,0xF9,0xF2,0xF5,0x9B,0xE5,0xEF,0x01,0x02,0xE9,0xE1, 0x03,0x04,0x06,0x07,0xE1,0xE9,0xEE,0xF6,0xE4,0xEC,0xF3,0x01,0x02,0xF2,0x03,0x04, 0x9B,0x05,0x02,0x03,0xE5,0xEC,0x9B,0xEF,0x01,0xF2,0x05,0x06,0xF5,0xEF,0x9B,0xEC, 0xE9,0x01,0xE1,0xF2,0x02,0xE5,0x03,0x04,0x03,0x04,0x9B,0xE5,0xE9,0xF5,0xE1,0x01, 0xEF,0x02,0x04,0x05,0xA0,0xC9,0xF3,0x9B,0xAE,0xF2,0x01,0x02,0x03,0xEE,0xEF,0x05, 0x9B,0xAE,0xE9,0xE5,0x01,0xF5,0x02,0xE1,0x03,0x04,0xE5,0x03,0xE1,0xE9,0xF2,0x9B, 0x01,0x02,0x03,0x04,0x9B,0xE9,0xF5,0x01,0xE5,0x02,0xEF,0xE1,0xE1,0x05,0x9B,0xE3, 0xEF,0x01,0xF5,0xE5,0x02,0x03,0xE9,0x04,0xE5,0x03,0x9B,0xE9,0x01,0xE1,0xEF,0x02, 0x03,0x04,0xA7,0xEE,0xEC,0xF2,0xF3,0x01,0x9B,0x02,0xE1,0x06,0x9B,0xE8,0xE9,0x01, 0xF2,0xEC,0x02,0xEF,0x03,0xE5,0x04,0x05,0x9B,0x9B,0x03,0x04,0x9B,0xAE,0x01,0xE9, 0x02,0xE1,0xE5,0xEF,0x09,0x0A,0xF6,0xF9,0x01,0xAE,0xE3,0xE9,0xF5,0x9B,0xE5,0xEF, 0x02,0x03,0xE1,0x04,0xE8,0x05,0x06,0xF4,0x07,0x08,0xE8,0x07,0xE5,0xF7,0xD6,0xE1, 0x9B,0xE9,0xF2,0x01,0x02,0x03,0x04,0xEF,0x05,0x06,0xAE,0x01,0x9B,0xEE,0xE9,0x02, 0xE5,0x9B,0xA0,0x01,0x03,0x04,0x9B,0xE8,0xE5,0xE1,0xEF,0x01,0xE9,0x02,0x9B,0x9B, 0x9B,0xEF,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B, 0x18,0x19,0xE8,0xEF,0xF8,0x9B,0xA7,0xF7,0xFA,0x01,0x02,0x03,0x04,0xE5,0xAE,0x05, 0xE6,0xE2,0x06,0xF6,0xEB,0xF5,0xE9,0x07,0xF0,0xF9,0xE7,0x08,0x09,0xE4,0x0A,0xE3, 0x0B,0xED,0x0C,0xF3,0x0D,0x0E,0x0F,0xEC,0x10,0xF4,0x11,0x12,0xF2,0xA0,0x13,0x14, 0x15,0xEE,0x16,0x17,0x0B,0x0C,0xE4,0xF3,0x9B,0xAE,0xE2,0x01,0x02,0x03,0xEC,0xA0, 0x04,0xE9,0xF2,0xF5,0x05,0xF9,0xE1,0x06,0xEF,0x07,0xE5,0x08,0x09,0x0A,0x0F,0x10, 0xF1,0xAE,0xC4,0xF9,0xAC,0x01,0xE3,0x02,0x9B,0xF2,0x03,0x04,0xA0,0xEC,0xF5,0x05, 0x06,0xE9,0x07,0xEB,0x08,0xF4,0x09,0xE5,0x0A,0xEF,0xE1,0xE8,0x0B,0x0C,0x0D,0x0E, 0x13,0x14,0xA7,0xBB,0xE6,0xED,0xF7,0xE7,0xF6,0x01,0x02,0x9B,0xEE,0x03,0x04,0xEC, 0x05,0xF5,0x06,0xAC,0xE4,0xF9,0xF2,0x07,0x08,0x09,0xAE,0x0A,0xEF,0x0B,0xE1,0xF3, 0x0C,0xE9,0x0D,0x0E,0x0F,0x10,0xE5,0x11,0x12,0xA0,0x1D,0x1E,0xA9,0xE8,0xF5,0x9B, 0x01,0xAD,0xBB,0xEB,0xFA,0x02,0xA7,0xE6,0xE2,0xE7,0x03,0x04,0x05,0x06,0xE9,0xF8, 0x07,0xAC,0xEF,0xF0,0x08,0xED,0xF6,0xF9,0x09,0xF7,0x0A,0x0B,0xAE,0x0C,0xE3,0x0D, 0xE5,0xF4,0x0E,0x0F,0xE4,0x10,0xEC,0x11,0xE1,0x12,0x13,0x14,0x15,0x16,0xEE,0xF3, 0x17,0x18,0xF2,0xA0,0x19,0x1A,0x1B,0x1C,0x09,0x0A,0xAE,0x9B,0xEC,0x01,0xF5,0x02, 0xF4,0xE6,0x03,0xE1,0xE5,0xE9,0x04,0xF2,0xEF,0x05,0x06,0x07,0xA0,0x08,0x0E,0x0F, 0xAD,0xE7,0x9B,0xA7,0xF9,0x01,0xEC,0x02,0xAC,0xF2,0x03,0xAE,0xF3,0xF5,0x04,0x05, 0xEF,0x06,0x07,0xE9,0xE1,0x08,0x09,0xE8,0x0A,0x0B,0xE5,0x0C,0xA0,0x0D,0x0D,0x0E, 0xA7,0xAC,0xF3,0xAD,0x01,0x02,0x9B,0xF9,0xF5,0xAE,0x03,0xEE,0x04,0xF2,0x05,0x06, 0xF4,0x07,0x08,0x09,0xEF,0xE1,0xA0,0x0A,0xE9,0x0B,0x0C,0xE5,0x14,0x15,0xAC,0xE2, 0xF8,0x9B,0xAE,0xFA,0x01,0xEB,0x02,0xA0,0x03,0x04,0xF0,0x05,0x06,0xE6,0xF6,0x07, 0xE4,0xED,0xE7,0x08,0xE1,0xEF,0xF2,0x09,0x0A,0x0B,0xEC,0x0C,0xE5,0xE3,0x0D,0xF4, 0x0E,0xF3,0x0F,0x10,0x11,0xEE,0x12,0x13,0x03,0xEF,0x9B,0xE1,0xE5,0xF5,0x01,0x02, 0x08,0x09,0xEC,0xF9,0xA7,0xEE,0x01,0xAC,0x9B,0xAE,0x02,0x03,0x04,0xF3,0x05,0xE9, 0x06,0xA0,0x07,0xE5,0x16,0x17,0xA7,0xAD,0xEE,0xE3,0xEB,0xF2,0x9B,0xE2,0x01,0x02, 0xF5,0x03,0xF4,0xAC,0x04,0x05,0xE6,0xED,0xF6,0x06,0xAE,0xF0,0x07,0x08,0xF3,0x09, 0x0A,0xE4,0x0B,0x0C,0xF9,0x0D,0xEF,0x0E,0xE1,0x0F,0x10,0xE9,0xEC,0x11,0xA0,0xE5, 0x12,0x13,0x14,0x15,0x0C,0x0D,0xA7,0xBB,0x9B,0x01,0xF9,0xAE,0xE2,0x02,0xED,0xF3, 0x03,0xF5,0xEF,0xF0,0x04,0x05,0xE9,0x06,0x07,0x08,0x09,0xA0,0xE1,0xE5,0x0A,0x0B, 0x19,0x1A,0xAD,0xBB,0xE2,0xEA,0xED,0xF2,0xFA,0xE6,0xEC,0x01,0x02,0x03,0x9B,0xF5, 0x04,0xA7,0xF6,0xF9,0x05,0x06,0xEB,0xEF,0x07,0x08,0x09,0x0A,0xAC,0x0B,0x0C,0xE3, 0xAE,0x0D,0xEE,0xE9,0x0E,0xE1,0x0F,0xF3,0x10,0x11,0xF4,0x12,0xE7,0xE5,0x13,0x14, 0xE4,0x15,0x16,0x17,0xA0,0x18,0x1A,0x1B,0xC2,0x9B,0xAD,0xAC,0xF8,0x01,0xAE,0x02, 0x03,0xE5,0xE7,0xE8,0xF9,0xE9,0xEB,0x04,0xE3,0xE1,0x05,0xF6,0x06,0xE4,0x07,0xE2, 0xF0,0x08,0x09,0xF3,0xF4,0xF7,0xEF,0x0A,0x0B,0x0C,0x0D,0xEC,0x0E,0x0F,0x10,0xF5, 0xED,0x11,0xE6,0xA0,0x12,0xF2,0x13,0x14,0x15,0xEE,0x16,0x17,0x18,0x19,0x0E,0x0F, 0xAD,0xED,0xF9,0x9B,0xAE,0x01,0xF3,0x02,0x03,0xF5,0xF4,0xF0,0x04,0xEF,0x05,0xE9, 0x06,0xE8,0xA0,0xE1,0xEC,0x07,0xF2,0x08,0xE5,0x09,0x0A,0x0B,0x0C,0x0D,0x9B,0xF5, 0x19,0x1A,0xA9,0xBB,0xF6,0xE6,0x01,0x9B,0xAD,0xE2,0xF0,0x02,0xA7,0x03,0x04,0x05, 0xF5,0xE3,0xAC,0xE7,0xF2,0x06,0xEB,0x07,0xEC,0xED,0xEE,0xF9,0x08,0xAE,0x09,0x0A, 0xE4,0x0B,0x0C,0xF4,0x0D,0xF3,0x0E,0x0F,0x10,0xE1,0xEF,0x11,0xE9,0x12,0x13,0xE5, 0x14,0xA0,0x15,0x16,0x17,0x18,0xA0,0x16,0xA2,0xA7,0xE2,0xEB,0xED,0xEE,0x9B,0xF7, 0x01,0x02,0x03,0xBB,0xF9,0xF0,0x04,0x05,0xEC,0x06,0x07,0x08,0xF5,0xE1,0x09,0xAC, 0xE3,0x0A,0xE8,0x0B,0xE9,0x0C,0xEF,0xF3,0xAE,0x0D,0x0E,0xE5,0x0F,0x10,0x11,0xF4, 0x12,0x13,0x14,0x15,0x14,0x15,0xBB,0xE2,0xAD,0xED,0x01,0x9B,0xA7,0xE3,0xAC,0xEC, 0xEE,0x02,0xF7,0x03,0x04,0xF9,0x05,0x06,0x07,0x08,0xF4,0xAE,0xF5,0x09,0x0A,0xF2, 0xE1,0xF3,0x0B,0x0C,0x0D,0xE9,0x0E,0x0F,0xEF,0xE5,0x10,0xA0,0xE8,0x11,0x12,0x13, 0x11,0x12,0xEF,0xF6,0x9B,0xEB,0xF9,0x01,0xA0,0xE2,0x02,0xE1,0x03,0xED,0x04,0xE3, 0xE9,0x05,0xE4,0xE5,0xE7,0x06,0xEC,0xF0,0x07,0x08,0x09,0x0A,0x0B,0xF3,0x0C,0xF4, 0xEE,0x0D,0xF2,0x0E,0x0F,0x10,0x05,0xE5,0xF3,0xF9,0x9B,0x01,0xEF,0x02,0x03,0xE1, 0x04,0xE9,0x0A,0x0B,0xAE,0x9B,0xEC,0xED,0x01,0x02,0xF3,0xEE,0xF2,0x03,0xE5,0x04, 0xE8,0xA0,0xE1,0x05,0xEF,0x06,0x07,0x08,0xE9,0x09,0x05,0x06,0xA0,0xAC,0xAD,0xF4, 0xE9,0x01,0x02,0xE1,0xE5,0x03,0x9B,0x04,0x11,0xA0,0xBF,0xE1,0xE2,0xE6,0xED,0xE4, 0xE9,0xF7,0xA7,0x01,0x02,0xBB,0x03,0x04,0xEC,0x05,0x9B,0xEE,0x06,0xEF,0x07,0xAC, 0xE5,0xF3,0x08,0x09,0x0A,0xAE,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x06,0x07,0xA0,0xAE, 0xE1,0xE5,0xEC,0xFA,0x9B,0xEF,0xE9,0x01,0x02,0x03,0x04,0x05,0x9B,0x9B,0x9B,0x9B, 0x9B,0x9B,0x9B,0x9B,0x9B,0x9B, }; /* 256 Unicode characters more than enough room to accumlate the segments. */ static char TextBuffer[1024]; static char SegmentBuffer[512]; static char DecompressionBuffer[512]; static iconv_t *Utf16ToUtf8CD; static iconv_t *Ucs2ToUtf8CD; static iconv_t *AsciiToUtf8CD; static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; static const char ATSCTEXT[] = "ATSCText"; /******************************************************************************* * Global functions * *******************************************************************************/ int ATSCMultipleStringsInit(void) { ObjectRegisterTypeDestructor(ATSCMultipleStrings_t, (ObjectDestructor_t)ATSCMultipleStringsDestructor); Utf16ToUtf8CD = iconv_open("UTF-8", "UTF-16BE"); if ((long) Utf16ToUtf8CD == -1) { return 1; } Ucs2ToUtf8CD = iconv_open("UTF-8", "UCS-2BE"); if ((long) Ucs2ToUtf8CD == -1) { return 1; } AsciiToUtf8CD = iconv_open("ASCII", "UCS-2BE"); if ((long) AsciiToUtf8CD == -1) { return 1; } return 0; } void ATSCMultipleStringsDeInit(void) { iconv_close(Utf16ToUtf8CD); iconv_close(Ucs2ToUtf8CD); iconv_close(AsciiToUtf8CD); } ATSCMultipleStrings_t *ATSCMultipleStringsConvert(uint8_t *data, uint8_t len) { ATSCMultipleStrings_t *result; int stringIndex; uint8_t *pos = data + 1; pthread_mutex_lock(&mutex); result = ObjectCreateType(ATSCMultipleStrings_t); result->number_of_strings = data[0]; result->strings = calloc( result->number_of_strings, sizeof(ATSCString_t)); LogModule(LOG_DEBUGV, ATSCTEXT, "Start of conversion: Number of strings = %d\n", data[0]); for (stringIndex = 0; stringIndex < result->number_of_strings; stringIndex ++) { int segments; int segmentIndex; int sbIndex; bool supported = TRUE; result->strings[stringIndex].lang[0] = pos[0]; result->strings[stringIndex].lang[1] = pos[1]; result->strings[stringIndex].lang[2] = pos[2]; segments = pos[3]; pos += 4; TextBuffer[0] = 0; sbIndex = 0; LogModule(LOG_DEBUGV, ATSCTEXT, "Number of segments = %d\n", segments); for (segmentIndex = 0; segmentIndex < segments; segmentIndex ++) { pos = AppendSegment(pos, &sbIndex, &supported); } if (supported) { /* Set strings[]->text to the decoded reassembled text. */ result->strings[stringIndex].text = strdup(TextBuffer); } else { result->strings[stringIndex].text = NULL; } } LogModule(LOG_DEBUGV, ATSCTEXT, "End of conversion\n"); pthread_mutex_unlock(&mutex); return result; } /******************************************************************************* * Local Functions * *******************************************************************************/ static void ATSCMultipleStringsDestructor(ATSCMultipleStrings_t *strings) { int i; for (i = 0; i < strings->number_of_strings; i ++) { free(strings->strings[i].text); } free(strings->strings); } static uint8_t *AppendSegment(uint8_t *segment, int *sbIndex, bool *supported) { iconv_t textStandard = NULL; int compressionType = segment[0]; int mode = segment[1]; int numberBytes = segment[2]; uint8_t *rawText; int i; size_t inBytesLeft; size_t outBytesLeft; char *outBytes; char *inBytes; size_t ret; rawText = segment + 3; segment += 3 + numberBytes; LogModule(LOG_DEBUGV, ATSCTEXT, "Segment: compressionType=%d mode=%d numberBytes=%d *sbIndex=%d\n", compressionType, mode, numberBytes, *sbIndex); switch (mode) { case 0x07 ... 0x08: /* Reserved */ case 0x11 ... 0x1f: /* Reserved */ case 0x28 ... 0x2f: /* Reserved */ case 0x34 ... 0x3d: /* Reserved */ case 0x3e: /* Standard Compression Scheme for Unicode (SCSU) */ case 0x40 ... 0x41: /* Assigned to ATSC standard for Taiwan */ case 0x42 ... 0x47: /* Reserved for future ATSC use. */ case 0x48: /* Assigned to ATSC standard for South Korea */ case 0x49 ... 0xdf: /* Reserved for future ATSC use. */ case 0xe0 ... 0xfe: /* Used in other systems */ LogModule(LOG_DEBUGV, ATSCTEXT, "Unsupported mode!(%d)\n", mode); *supported = FALSE; break; case 0xff: /* Not applicable */ LogModule(LOG_DEBUGV, ATSCTEXT, "ASCII to UTF8(%d)\n", mode); textStandard = AsciiToUtf8CD; break; case 0x3f: LogModule(LOG_DEBUGV, ATSCTEXT, "UTF16 to UTF8(%d)\n", mode); textStandard = Utf16ToUtf8CD; break; default: LogModule(LOG_DEBUGV, ATSCTEXT, "UCS2 to UTF8(%d)\n", mode); textStandard = Ucs2ToUtf8CD; break; } if (!*supported) { /* We still need to run though all the segments as there is no * way to jump straight to the next string. */ return segment; } switch(compressionType) { case 0x00: /* No Compression */ for (i = 0; i < numberBytes; i ++) { SegmentBuffer[(i * 2) + 0] = mode; SegmentBuffer[(i * 2) + 1] = rawText[i]; } inBytes = SegmentBuffer; inBytesLeft = numberBytes * 2; break; case 0x01: /* Huffman coding */ case 0x02: HuffmanDecode((uint8_t*)&DecompressionBuffer, rawText, sizeof(DecompressionBuffer) - 1, numberBytes, compressionType); inBytes = DecompressionBuffer; inBytesLeft = strlen(DecompressionBuffer); break; default: *supported = FALSE; break; } if (!*supported) { /* We still need to run though all the segments as there is no * way to jump straight to the next string. */ return segment; } /* Convert using iconv */ outBytesLeft = sizeof(TextBuffer) - *sbIndex; outBytes = TextBuffer + *sbIndex; ret = iconv(textStandard, (ICONV_INPUT_CAST) &inBytes, &inBytesLeft, &outBytes, &outBytesLeft); if (ret != -1) { *outBytes = 0; *sbIndex += (long)outBytes - (long)(TextBuffer + *sbIndex); } return segment; } /* It's a binary tree lookup for common letter combinations, used for EIT Event Title and ETT Event Description Text compression modes. *d destination, dlen destination max length, *s source, slen source length comp is 1 for title decode, 2 for description decode This was fun to write. */ static void HuffmanDecode(uint8_t *dest, uint8_t *src, int destLen, int srcLen, int comp) { uint8_t p = 0; uint8_t c = 0; uint8_t o =0; uint8_t b = 0; uint8_t *co; unsigned int i, j, k, to, zo, z, *bo; if (comp == 1) { bo = huffman1bo; /* byte offset of char p tree root */ co = huffman1co; /* char p order-1 tree */ z = TITLE_COZ; } else { bo = huffman2bo; co = huffman2co; z = DESCR_COZ; } /* should be pointing to correct tables now */ for (i=0; i < (srcLen<<3); i++) { if (p > 127) { return; } /* get tree offset for char p from order-1 tree byte offset table */ to = bo[ p ]; /* direction in tree from bit in compressed string */ /* compressed bit sets to left(0) or right(1) for next branch or leaf */ b = src[ i >> 3 ] & (1 << (~i & 7)); /* force comparison to binary */ if (b != 0) { b = 1; } /* minimum of two linked-list lookups for shortest first order entry such as common following letters, but most will be multiple lookups */ zo = to + (o << 1) + b; /* sanity check, don't stray outside table */ if (zo > z) { return; } /* first entry has tree lookup to first order left/right choice tree */ o = co[ zo ]; /* tree root offset is anchor for branches */ /* top bit set means it's a leaf char. this implies that */ /* branches will loop until it is a leaf char */ if (0 != (0x80 & o) ) { c = 0x7F & o; if ( c == 27 ) { /* handle Escape to 8 bit mode */ i++; /* point to msb of uncompressed byte */ j = i & 7; k = 8 - j; /* get current byte */ c = src[ i >> 3 ]; /* shift needed? */ if (0 != j) { c <<= j; b = src[ (i >> 3) + 1]; b >>= k; c |= b; } i += 7; /* skip past lsb of uncompressed byte */ } p = c; /* c leaf becomes new index for order-1 tree root offset */ o = 0; /* clear offset to order-1 tree */ *dest = c; destLen--; /* out of space gets nul term and exits */ if (destLen < 1) { *dest = 0; break; } dest++; /* else move to next char */ /* nul term exits */ if ( c == 0 ) { break; } } } } dvbstreamer-2.1.0/src/standard/atsc/psipprocessor.c000077500000000000000000000324411217721213100224340ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA psipprocessor.c Process ATSC PSIP tables */ #include #include #include #include #include #include #include #include #include #include #include #include "dvbpsi/atsc/mgt.h" #include "dvbpsi/atsc/stt.h" #include "dvbpsi/atsc/vct.h" #include "multiplexes.h" #include "services.h" #include "pids.h" #include "dvbadapter.h" #include "ts.h" #include "main.h" #include "cache.h" #include "logging.h" #include "list.h" #include "tuning.h" #include "psipprocessor.h" #include "atsctext.h" #include "events.h" #include "standard/atsc.h" /******************************************************************************* * Defines * *******************************************************************************/ #define PID_PSIP 0x1ffb /******************************************************************************* * Typedefs * *******************************************************************************/ struct PSIPProcessor_s { TSFilterGroup_t *tsgroup; dvbpsi_handle demux; }; /******************************************************************************* * Prototypes * *******************************************************************************/ static void PSIPProcessorFilterEventCallback(void *userArg, struct TSFilterGroup_t *group, TSFilterEventType_e event, void *details); static void SubTableHandler(void * state, dvbpsi_handle demuxHandle, uint8_t tableId, uint16_t extension); static void ProcessMGT(void *arg, dvbpsi_atsc_mgt_t *newMGT); static void ProcessSTT(void *arg, dvbpsi_atsc_stt_t *newSTT); static void ProcessVCT(void *arg, dvbpsi_atsc_vct_t *newVCT); static void DumpDescriptor(char *prefix, dvbpsi_descriptor_t *descriptor); /******************************************************************************* * Global variables * *******************************************************************************/ static const char PSIPPROCESSOR[] = "PSIPProcessor"; static int initCount = 0; static iconv_t utf16ToUtf8CD; static Event_t mgtEvent = NULL; static Event_t sttEvent = NULL; static Event_t vctEvent = NULL; /******************************************************************************* * Global functions * *******************************************************************************/ PSIPProcessor_t PSIPProcessorCreate(TSReader_t *reader) { PSIPProcessor_t result; if (initCount == 0) { utf16ToUtf8CD = iconv_open("UTF-8", "UTF-16BE"); if ((long)utf16ToUtf8CD == -1) { LogModule(LOG_ERROR, PSIPPROCESSOR, "Failed to open iconv to convert UTF16 to UTF8\n"); return NULL; } } initCount ++; if (mgtEvent == NULL) { mgtEvent = EventsRegisterEvent(ATSCEventSource, "MGT", NULL); sttEvent = EventsRegisterEvent(ATSCEventSource, "STT", NULL); vctEvent = EventsRegisterEvent(ATSCEventSource, "VCT", NULL); } ObjectRegisterClass("PSIPProcessor_t", sizeof(struct PSIPProcessor_s), NULL); result = ObjectCreateType(PSIPProcessor_t); if (result) { result->tsgroup = TSReaderCreateFilterGroup(reader, PSIPPROCESSOR, ATSCFilterType, PSIPProcessorFilterEventCallback, result); } return result; } void PSIPProcessorDestroy(PSIPProcessor_t filter) { TSFilterGroupDestroy(filter->tsgroup); if (filter->demux) { dvbpsi_DetachDemux(filter->demux); } ObjectRefDec(filter); initCount --; if (initCount == 0) { iconv_close(utf16ToUtf8CD); } } /******************************************************************************* * Local Functions * *******************************************************************************/ static void PSIPProcessorFilterEventCallback(void *userArg, struct TSFilterGroup_t *group, TSFilterEventType_e event, void *details) { PSIPProcessor_t state = (PSIPProcessor_t)userArg; if (state->demux) { TSFilterGroupRemoveSectionFilter(state->tsgroup, PID_PSIP); dvbpsi_DetachDemux(state->demux); } state->demux = dvbpsi_AttachDemux(SubTableHandler, state); TSFilterGroupAddSectionFilter(state->tsgroup, PID_PSIP, 1, state->demux); } static void SubTableHandler(void * arg, dvbpsi_handle demuxHandle, uint8_t tableId, uint16_t extension) { switch (tableId) { /* MGT */ case 0xC7: dvbpsi_atsc_AttachMGT(demuxHandle, tableId, ProcessMGT, arg); break; /* TVCT */ case 0xC8: /* Fall through intended */ /* CVCT */ case 0xC9: { Multiplex_t *current = TuningCurrentMultiplexGet(); /* Currently only handle VCT for the current multiplex */ if (extension == current->tsId) { dvbpsi_atsc_AttachVCT(demuxHandle, tableId, extension, ProcessVCT, arg); } MultiplexRefDec(current); } break; /* RRT */ case 0xCA: break; /* STT */ case 0xCD: dvbpsi_atsc_AttachSTT(demuxHandle,tableId, ProcessSTT, arg); break; } } static void ProcessMGT(void *arg, dvbpsi_atsc_mgt_t *newMGT) { dvbpsi_atsc_mgt_table_t *table; dvbpsi_descriptor_t *descriptor; Multiplex_t *current = TuningCurrentMultiplexGet(); if (current->networkId == -1) { CacheUpdateNetworkId(current, current->uid & 0xffff); } MultiplexRefDec(current); LogModule(LOG_DEBUG, PSIPPROCESSOR,"New MGT Received! Version %d Protocol %d\n", newMGT->i_version, newMGT->i_protocol); for (table = newMGT->p_first_table; table; table = table->p_next) { LogModule(LOG_DEBUG, PSIPPROCESSOR, "\tType=%d PID=%d Version=%d number bytes=%d\n", table->i_type, table->i_pid, table->i_version, table->i_number_bytes); LogModule(LOG_DEBUG, PSIPPROCESSOR, "\tStart of Descriptors\n"); for (descriptor = table->p_first_descriptor; descriptor; descriptor = descriptor->p_next) { DumpDescriptor("\t\t\t",descriptor); } LogModule(LOG_DEBUG, PSIPPROCESSOR, "\tEnd of Descriptors\n"); } LogModule(LOG_DEBUG, PSIPPROCESSOR, "\tStart of Descriptors\n"); for (descriptor = newMGT->p_first_descriptor; descriptor; descriptor = descriptor->p_next) { DumpDescriptor("\t\t",descriptor); } LogModule(LOG_DEBUG, PSIPPROCESSOR, "\tEnd of Descriptors\n"); EventsFireEventListeners(mgtEvent, newMGT); ObjectRefDec(newMGT); } static void ProcessSTT(void *arg, dvbpsi_atsc_stt_t *newSTT) { LogModule(LOG_DEBUGV, PSIPPROCESSOR,"New STT Received! Protocol %d GPS Time =%lu GPS->UTC Offset = %u \n", newSTT->i_protocol, newSTT->i_system_time, newSTT->i_gps_utc_offset); EventsFireEventListeners(sttEvent, newSTT); ObjectRefDec(newSTT); } static void ProcessVCT(void *arg, dvbpsi_atsc_vct_t *newVCT) { dvbpsi_descriptor_t *descriptor; dvbpsi_atsc_vct_channel_t *channel; int count,i; Service_t **services; TSReader_t *tsReader = ((TSFilterGroup_t*)arg)->tsReader; LogModule(LOG_DEBUG, PSIPPROCESSOR, "New VCT Recieved! Version %d Protocol %d Cable VCT? %s TS Id = 0x%04x\n", newVCT->i_version, newVCT->i_protocol, newVCT->b_cable_vct ? "Yes":"No", newVCT->i_ts_id); for (channel = newVCT->p_first_channel; channel; channel = channel->p_next) { char serviceName[10 + (7 * 6) + 1]; char *inbuf; size_t inbytes; char *outbuf; size_t outbytes; int ret; /* Prepend the channels major-minor number to the name to get round * problems with broadcasters not using a unique name for each channel! */ sprintf(serviceName, "%d-%d ", channel->i_major_number, channel->i_minor_number); inbuf = (char *)channel->i_short_name; inbytes = 14; outbuf = serviceName + strlen(serviceName); outbytes = sizeof(serviceName) - 10; ret = iconv(utf16ToUtf8CD, (ICONV_INPUT_CAST) &inbuf, &inbytes, &outbuf, &outbytes); if (ret == -1) { LogModule(LOG_ERROR, PSIPPROCESSOR, "Failed to convert service name\n"); } else { Service_t *service = CacheServiceFindId(channel->i_program_number); *outbuf = 0; if (!service) { service = CacheServiceAdd(channel->i_program_number, channel->i_source_id); } else { CacheServiceSeen(service, TRUE, FALSE); } if (service->source != channel->i_source_id) { CacheUpdateServiceSource(service, channel->i_source_id); } if (strcmp(service->name, serviceName)) { CacheUpdateServiceName(service, serviceName); } LogModule(LOG_DEBUG, PSIPPROCESSOR, "\t%s\n", serviceName); LogModule(LOG_DEBUG, PSIPPROCESSOR, "\t\tTS ID = %04x\n", channel->i_channel_tsid); LogModule(LOG_DEBUG, PSIPPROCESSOR, "\t\tProgram number = %04x\n", channel->i_program_number); LogModule(LOG_DEBUG, PSIPPROCESSOR, "\t\tSource id = %04x\n", channel->i_source_id); LogModule(LOG_DEBUG, PSIPPROCESSOR, "\t\tService type = %d\n", channel->i_service_type); ServiceRefDec(service); } LogModule(LOG_DEBUG, PSIPPROCESSOR, "\tStart of Descriptors\n"); for (descriptor = channel->p_first_descriptor; descriptor; descriptor = descriptor->p_next) { DumpDescriptor("\t\t\t",descriptor); if (descriptor->i_tag == 0xa0) { ATSCMultipleStrings_t *strings = ATSCMultipleStringsConvert(descriptor->p_data, descriptor->i_length); int s; for (s = 0; s < strings->number_of_strings; s ++) { LogModule(LOG_DEBUG, PSIPPROCESSOR, "\t\t\t\t%d (%c%c%c): %s\n", s, strings->strings[s].lang[0],strings->strings[s].lang[1],strings->strings[s].lang[2], strings->strings[s].text); } ObjectRefDec(strings); } } LogModule(LOG_DEBUG, PSIPPROCESSOR, "\tEnd of Descriptors\n"); } for (descriptor = newVCT->p_first_descriptor; descriptor; descriptor = descriptor->p_next) { DumpDescriptor("\t\t",descriptor); } LogModule(LOG_DEBUG, PSIPPROCESSOR, "\tEnd of Descriptors\n"); /* Delete any services that no longer exist */ services = CacheServicesGet(&count); for (i = 0; i < count; i ++) { bool found = FALSE; for (channel = newVCT->p_first_channel; channel; channel = channel->p_next) { if (services[i]->id == channel->i_program_number) { found = TRUE; break; } } if (!found) { LogModule(LOG_DEBUG, PSIPPROCESSOR, "Channel not found in VCT while checking cache, deleting 0x%04x (%s)\n", services[i]->id, services[i]->name); if (!CacheServiceSeen(services[i], FALSE, FALSE)) { CacheServicesRelease(); CacheServiceDelete(services[i]); services = CacheServicesGet(&count); i --; /* Cause a TS Structure change call back*/ tsReader->tsStructureChanged = TRUE; } } } CacheServicesRelease(); EventsFireEventListeners(vctEvent, newVCT); ObjectRefDec(newVCT); } static void DumpDescriptor(char *prefix, dvbpsi_descriptor_t *descriptor) { int i; char line[(16 * 3) + 1]; line[0] = 0; LogModule(LOG_DEBUG, PSIPPROCESSOR, "%sTag : 0x%02x (Length %d)\n", prefix, descriptor->i_tag, descriptor->i_length); for (i = 0; i < descriptor->i_length; i ++) { if (i && ((i % 16) == 0)) { LogModule(LOG_DEBUG, PSIPPROCESSOR, "%s%s\n", prefix, line); line[0] = 0; } sprintf(line + strlen(line), "%02x ", descriptor->p_data[i]); } if (line[0]) { LogModule(LOG_DEBUG, PSIPPROCESSOR, "%s%s\n", prefix, line); } } dvbstreamer-2.1.0/src/standard/dvb/000077500000000000000000000000001217721213100171675ustar00rootroot00000000000000dvbstreamer-2.1.0/src/standard/dvb/dvb.c000066400000000000000000000053311217721213100201100ustar00rootroot00000000000000/* Copyright (C) 2009 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dvb.c Initialise/Deinitialise the DVB Standard. */ #include #include #include #include #include #include #include "standard/mpeg2.h" #include "standard/dvb.h" #include "sdtprocessor.h" #include "nitprocessor.h" #include "tdtprocessor.h" /******************************************************************************* * Global variables * *******************************************************************************/ EventSource_t DVBEventSource; char DVBFilterType[] = "DVB"; static SDTProcessor_t sdtProcessor = NULL; static NITProcessor_t nitProcessor = NULL; static TDTProcessor_t tdtProcessor = NULL; /******************************************************************************* * Global functions * *******************************************************************************/ int DVBStandardInit(TSReader_t *reader) { if (DVBEventSource == NULL) { DVBEventSource = EventsRegisterSource(DVBFilterType); } if (MPEG2StandardInit(reader)) { return -1; } sdtProcessor = SDTProcessorCreate(reader); if (sdtProcessor == NULL) { goto failure; } nitProcessor = NITProcessorCreate(reader); if (nitProcessor == NULL) { goto failure; } tdtProcessor = TDTProcessorCreate(reader); if (tdtProcessor == NULL) { goto failure; } return 0; failure: MPEG2StandardDeinit(reader); if (sdtProcessor) { SDTProcessorDestroy(sdtProcessor); } if (nitProcessor) { NITProcessorDestroy(nitProcessor); } if (tdtProcessor) { TDTProcessorDestroy(tdtProcessor); } return -1; } int DVBStandardDeinit(TSReader_t *reader) { MPEG2StandardDeinit(reader); SDTProcessorDestroy(sdtProcessor); NITProcessorDestroy(nitProcessor); TDTProcessorDestroy(tdtProcessor); return 0; } dvbstreamer-2.1.0/src/standard/dvb/dvbtext.c000077500000000000000000000174721217721213100210310ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dvbtext.c Convert DVB text to UTF-8. Note: A lot of this code is taken from the tvgrab_dvb source! http://www.darkskiez.co.uk/index.php?page=tv_grab_dvb */ #include "config.h" #include #include #include #include #include #include "logging.h" #include "dvbtext.h" /******************************************************************************* * Typedefs * *******************************************************************************/ enum CS { CS_UNKNOWN, ISO6937, ISO8859_5, ISO8859_6, ISO8859_7, ISO8859_8, ISO8859_9, ISO10646, CS_OTHER, }; /******************************************************************************* * Global variables * *******************************************************************************/ static enum CS cs_old = CS_UNKNOWN; static iconv_t cd; static pthread_mutex_t ResultBufferMutex = PTHREAD_MUTEX_INITIALIZER; static char ResultBuffer[256 * 6]; static char UTF8[] = "UTF-8"; static char DVBTEXT[] = "DVBText"; /******************************************************************************* * Global functions * *******************************************************************************/ char *DVBTextToUTF8(char *toConvert, size_t toConvertLen) { enum CS cs_new = CS_UNKNOWN; char asciiBuffer[256]; /* Used when no ISO6937 conversion is provided. */ size_t inBytesLeft; size_t outBytesLeft; char *outBytes; char *inBytes; size_t ret; char *result; if (toConvertLen == 0) { return NULL; } switch ((unsigned char)*toConvert) { /* if the first byte of the text field has a value in the range of "0x20" to "0xFF" then this and all subsequent bytes in the text item are coded using the default coding table (table 00 - Latin alphabet) of figure A.1 */ case 0x20 ... 0xFF: cs_new = ISO6937; break; /* if the first byte of the text field is in the range "0x01" to "0x05" then the remaining bytes in the text item are coded in accordance with character coding table 01 to 05 respectively, which are given in figures A.2 to A.6 respectively */ case 0x01: cs_new = ISO8859_5; toConvert += 1; toConvertLen -=1; break; case 0x02: cs_new = ISO8859_6; toConvert += 1; toConvertLen -=1; break; case 0x03: cs_new = ISO8859_7; toConvert += 1; toConvertLen -=1; break; case 0x04: cs_new = ISO8859_8; toConvert += 1; toConvertLen -=1; break; case 0x05: cs_new = ISO8859_9; toConvert += 1; toConvertLen -=1; break; /* if the first byte of the text field has a value "0x10" then the following two bytes carry a 16-bit value (uimsbf) N to indicate that the remaining data of the text field is coded using the character code table specified by ISO Standard 8859, Parts 1 to 9. */ case 0x10: cs_new = CS_OTHER + ((unsigned char)toConvert[1] << 8) + (unsigned char)toConvert[2]; toConvert += 3; toConvertLen -=3; break; /* if the first byte of the text field has a value "0x11" then the ramaining bytes in the text item are coded in pairs in accordance with the Basic Multilingual Plane of ISO/IEC 10646-1 */ case 0x11: cs_new = ISO10646; toConvert += 1; toConvertLen -=1; break; /* Values for the first byte of "0x00", "0x06" to "0x0F", and "0x12" to "0x1F" are reserved for future use. */ case 0x06 ... 0x0F: case 0x12 ... 0x1F: LogModule(LOG_ERROR, DVBTEXT, "Reserved encoding: %02x\n", *toConvert); return NULL; case 0x00: return NULL; } pthread_mutex_lock(&ResultBufferMutex); if ((cs_old != cs_new) || (cs_old == CS_UNKNOWN)) { if (cd) { LogModule(LOG_DEBUG, DVBTEXT, "Closing previous conversion descriptor.\n"); iconv_close(cd); cd = NULL; } LogModule(LOG_DEBUG, DVBTEXT, "Opening new conversion descriptor.\n"); switch (cs_new) { case ISO6937: cd = iconv_open(UTF8, "ISO6937"); if ((long)cd == -1) { int toConvertIndex, asciiIndex = 0; /* libiconv doesn't support ISO 6937, but glibc does?! so fall back to ISO8859-1 and strip out the non spacing diacritical mark/graphical characters etc. */ for (toConvertIndex = 0; toConvertIndex < toConvertLen; toConvertIndex ++) { unsigned char ch = (unsigned char)toConvert[toConvertIndex]; if (ch < 128) { asciiBuffer[asciiIndex] = (char)ch; asciiIndex ++; } } toConvert = asciiBuffer; toConvertLen = asciiIndex; cd = iconv_open(UTF8, "ISO8859-1"); } break; case ISO8859_5: cd = iconv_open(UTF8, "ISO8859-5"); break; case ISO8859_6: cd = iconv_open(UTF8, "ISO8859-6"); break; case ISO8859_7: cd = iconv_open(UTF8, "ISO8859-7"); break; case ISO8859_8: cd = iconv_open(UTF8, "ISO8859-8"); break; case ISO8859_9: cd = iconv_open(UTF8, "ISO8859-9"); break; case ISO10646: cd = iconv_open(UTF8, "ISO-10646/UTF8"); break; default: { char from[14]; int i = cs_new - CS_OTHER; snprintf(from, sizeof(from), "ISO8859-%d", i); cd = iconv_open(UTF8, from); } } cs_old = cs_new; } if ((long)cd == -1) { LogModule(LOG_ERROR, DVBTEXT, "Failed to open conversion descriptor!\n"); return NULL; } inBytes = toConvert; inBytesLeft = toConvertLen; outBytesLeft = sizeof(ResultBuffer); outBytes = ResultBuffer; ret = iconv(cd, (ICONV_INPUT_CAST)&inBytes, &inBytesLeft, &outBytes, &outBytesLeft); if (ret == -1) { pthread_mutex_unlock(&ResultBufferMutex); return NULL; } *outBytes = 0; result = strdup(ResultBuffer); pthread_mutex_unlock(&ResultBufferMutex); return result; } dvbstreamer-2.1.0/src/standard/dvb/nitprocessor.c000066400000000000000000000107511217721213100220710ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA nitprocessor.c Process Network Information Tables. */ #include #include #include #include #include #include #include #include #include #include "ts.h" #include "logging.h" #include "nitprocessor.h" #include "dvbpsi/nit.h" #include "events.h" #include "standard/dvb.h" /******************************************************************************* * Defines * *******************************************************************************/ struct NITProcessor_s { TSFilterGroup_t *tsgroup; dvbpsi_handle demux; }; /******************************************************************************* * Prototypes * *******************************************************************************/ static void NITProcessorFilterEventCallback(void *userArg, struct TSFilterGroup_t *group, TSFilterEventType_e event, void *details); static void SubTableHandler(void * state, dvbpsi_handle demuxHandle, uint8_t tableId, uint16_t extension); static void NITHandler(void* arg, dvbpsi_nit_t* newNIT); /******************************************************************************* * Global variables * *******************************************************************************/ static Event_t nitEvent = NULL; static char NITPROCESSOR[] = "NITProcessor"; /******************************************************************************* * Global functions * *******************************************************************************/ NITProcessor_t NITProcessorCreate(TSReader_t *reader) { NITProcessor_t result; if (nitEvent == NULL) { nitEvent = EventsRegisterEvent(DVBEventSource, "NIT", NULL); } ObjectRegisterClass("NITProcessor_t", sizeof(struct NITProcessor_s), NULL); result = ObjectCreateType(NITProcessor_t); if (result) { result->tsgroup = TSReaderCreateFilterGroup(reader, NITPROCESSOR, "DVB", NITProcessorFilterEventCallback, result); } return result; } void NITProcessorDestroy(NITProcessor_t processor) { TSFilterGroupDestroy(processor->tsgroup); if (processor->demux) { dvbpsi_DetachDemux(processor->demux); } ObjectRefDec(processor); } /******************************************************************************* * Local Functions * *******************************************************************************/ static void NITProcessorFilterEventCallback(void *userArg, struct TSFilterGroup_t *group, TSFilterEventType_e event, void *details) { NITProcessor_t state= (NITProcessor_t)userArg; if (event == TSFilterEventType_MuxChanged) { if (state->demux) { TSFilterGroupRemoveSectionFilter(state->tsgroup, PID_NIT); dvbpsi_DetachDemux(state->demux); } if (details) { state->demux = dvbpsi_AttachDemux(SubTableHandler, state); TSFilterGroupAddSectionFilter(state->tsgroup, PID_NIT, 1, state->demux); } else { state->demux = NULL; } } } static void SubTableHandler(void * arg, dvbpsi_handle demuxHandle, uint8_t tableId, uint16_t extension) { if((tableId == TABLE_ID_NIT_ACTUAL) || (tableId == TABLE_ID_NIT_OTHER)) { dvbpsi_AttachNIT(demuxHandle, tableId, extension, NITHandler, arg); } } static void NITHandler(void* arg, dvbpsi_nit_t* newNIT) { EventsFireEventListeners(nitEvent, newNIT); ObjectRefDec(newNIT); } dvbstreamer-2.1.0/src/standard/dvb/sdtprocessor.c000066400000000000000000000240371217721213100220730ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA sdtprocessor.c Process Service Description Tables and update the services information. */ #include #include #include #include #include #include #include #include #include #include #include #include #include "events.h" #include "multiplexes.h" #include "services.h" #include "dvbadapter.h" #include "ts.h" #include "main.h" #include "cache.h" #include "logging.h" #include "tuning.h" #include "sdtprocessor.h" #include "dvbtext.h" #include "standard/dvb.h" /******************************************************************************* * Defines * *******************************************************************************/ #define PID_SDT 0x11 #define TABLE_ID_SDT_ACTUAL 0x42 #define TABLE_ID_SDT_OTHER 0x46 #define DESCRIPTOR_SERVICE 0x48 #define DESCRIPTOR_DEFAUTH 0x73 /******************************************************************************* * Typedefs * *******************************************************************************/ struct SDTProcessor_s { TSFilterGroup_t *tsgroup; dvbpsi_handle demux; }; /******************************************************************************* * Prototypes * *******************************************************************************/ static void SDTProcessorFilterEventCallback(void *userArg, struct TSFilterGroup_t *group, TSFilterEventType_e event, void *details); static void SubTableHandler(void * state, dvbpsi_handle demuxHandle, uint8_t tableId, uint16_t extension); static void SDTHandler(void* arg, dvbpsi_sdt_t* newSDT); static ServiceType ConvertDVBServiceType(int type); /******************************************************************************* * Global variables * *******************************************************************************/ static char SDTPROCESSOR[] = "SDTProcessor"; static Event_t sdtEvent = NULL; /******************************************************************************* * Global functions * *******************************************************************************/ SDTProcessor_t SDTProcessorCreate(TSReader_t *reader) { SDTProcessor_t state = NULL; if (sdtEvent == NULL) { sdtEvent = EventsRegisterEvent(DVBEventSource, "SDT", NULL); } ObjectRegisterClass("SDTProcessor_t", sizeof(struct SDTProcessor_s), NULL); state = ObjectCreateType(SDTProcessor_t); if (state) { state->tsgroup = TSReaderCreateFilterGroup(reader, SDTPROCESSOR, "DVB", SDTProcessorFilterEventCallback, state); } return state; } void SDTProcessorDestroy(SDTProcessor_t processor) { TSFilterGroupDestroy(processor->tsgroup); if (processor->demux) { dvbpsi_DetachDemux(processor->demux); } ObjectRefDec(processor); } /******************************************************************************* * Local Functions * *******************************************************************************/ static void SDTProcessorFilterEventCallback(void *userArg, struct TSFilterGroup_t *group, TSFilterEventType_e event, void *details) { SDTProcessor_t state = (SDTProcessor_t)userArg; if (state->demux) { TSFilterGroupRemoveSectionFilter(state->tsgroup, PID_SDT); dvbpsi_DetachDemux(state->demux); } state->demux = dvbpsi_AttachDemux(SubTableHandler, state); TSFilterGroupAddSectionFilter(state->tsgroup, PID_SDT, 1, state->demux); } static void SubTableHandler(void * arg, dvbpsi_handle demuxHandle, uint8_t tableId, uint16_t extension) { if(tableId == TABLE_ID_SDT_ACTUAL) { dvbpsi_AttachSDT(demuxHandle, tableId, extension, SDTHandler, arg); } } static void SDTHandler(void* arg, dvbpsi_sdt_t* newSDT) { SDTProcessor_t state = arg; dvbpsi_sdt_service_t* sdtservice = newSDT->p_first_service; int count,i; Service_t **services; Multiplex_t *mux; LogModule(LOG_DEBUG, SDTPROCESSOR, "SDT recieved, version %d\n", newSDT->i_version); while(sdtservice) { dvbpsi_descriptor_t* descriptor = sdtservice->p_first_descriptor; bool ca; Service_t *service = CacheServiceFindId(sdtservice->i_service_id); if (!service) { service = CacheServiceAdd(sdtservice->i_service_id, sdtservice->i_service_id); } else { CacheServiceSeen(service, TRUE, FALSE); } while(descriptor) { if (descriptor->i_tag == DESCRIPTOR_SERVICE) { dvbpsi_service_dr_t* servicedesc = dvbpsi_DecodeServiceDr(descriptor); if (servicedesc) { char *name; ServiceType type = ConvertDVBServiceType(servicedesc->i_service_type); name = DVBTextToUTF8((char *)servicedesc->i_service_name, servicedesc->i_service_name_length); if (name) { /* Only update the name if it has changed */ if (strcmp(name, service->name)) { LogModule(LOG_DEBUG, SDTPROCESSOR, "Updating service 0x%04x = %s\n", sdtservice->i_service_id, name); CacheUpdateServiceName(service, name); } free(name); } name = DVBTextToUTF8((char *)servicedesc->i_service_provider_name, servicedesc->i_service_provider_name_length); if (name) { if ((service->provider==NULL) || strcmp(name, service->provider)) { LogModule(LOG_DEBUG, SDTPROCESSOR, "Updating service provider 0x%04x = %s\n", sdtservice->i_service_id, name); CacheUpdateServiceProvider(service, name); } free(name); } if (service->type != type) { CacheUpdateServiceType(service, type); } } } if (descriptor->i_tag == DESCRIPTOR_DEFAUTH) { dvbpsi_default_authority_dr_t *defAuthDesc = dvbpsi_DecodeDefaultAuthorityDr(descriptor); if (defAuthDesc) { if ((service->defaultAuthority == NULL) || strcmp((char*)defAuthDesc->authority, service->defaultAuthority)) { LogModule(LOG_DEBUG, SDTPROCESSOR, "Updating service default authority 0x%04x = %s\n", sdtservice->i_service_id, defAuthDesc->authority); CacheUpdateServiceDefaultAuthority(service, (char*)defAuthDesc->authority); } } } descriptor = descriptor->p_next; } ca = sdtservice->b_free_ca ? TRUE:FALSE; if (service->conditionalAccess != ca) { CacheUpdateServiceConditionalAccess(service,ca); } ServiceRefDec(service); sdtservice =sdtservice->p_next; } /* Delete any services that no longer exist */ services = CacheServicesGet(&count); for (i = 0; i < count; i ++) { bool found = FALSE; for (sdtservice = newSDT->p_first_service; sdtservice; sdtservice = sdtservice->p_next) { if (services[i]->id == sdtservice->i_service_id) { found = TRUE; break; } } if (!found) { LogModule(LOG_DEBUG, SDTPROCESSOR, "Service not found in SDT while checking cache, deleting 0x%04x (%s)\n", services[i]->id, services[i]->name); if (!CacheServiceSeen(services[i], FALSE, FALSE)) { CacheServicesRelease(); CacheServiceDelete(services[i]); services = CacheServicesGet(&count); i --; /* Cause a TS Structure change call back*/ state->tsgroup->tsReader->tsStructureChanged = TRUE; } } } CacheServicesRelease(); mux = TuningCurrentMultiplexGet(); /* Set the Original Network id, this is a hack should really get and decode the NIT */ if (mux->networkId != newSDT->i_network_id) { CacheUpdateNetworkId(mux, newSDT->i_network_id); } MultiplexRefDec(mux); EventsFireEventListeners(sdtEvent, newSDT); ObjectRefDec(newSDT); } static ServiceType ConvertDVBServiceType(int type) { ServiceType result = ServiceType_Unknown; switch(type) { case 1: result = ServiceType_TV; break; case 2: result = ServiceType_Radio; break; case 3: case 12: case 16: result = ServiceType_Data; break; } return result; } dvbstreamer-2.1.0/src/standard/dvb/tdtprocessor.c000066400000000000000000000104131217721213100220650ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA tdtprocessor.c Process Time/Date and Time Offset Tables. */ #include #include #include #include #include #include #include #include #include #include "multiplexes.h" #include "services.h" #include "pids.h" #include "dvbadapter.h" #include "ts.h" #include "main.h" #include "cache.h" #include "logging.h" #include "list.h" #include "tdtprocessor.h" #include "dvbpsi/tdttot.h" #include "events.h" #include "standard/dvb.h" /******************************************************************************* * Typedefs * *******************************************************************************/ struct TDTProcessor_s { TSFilterGroup_t *tsgroup; dvbpsi_handle handle; }; /******************************************************************************* * Prototypes * *******************************************************************************/ static void TDTProcessorFilterEventCallback(void *userArg, struct TSFilterGroup_t *group, TSFilterEventType_e event, void *details); static void TDTHandler(void* arg, dvbpsi_tdt_tot_t* newTDT); /******************************************************************************* * Global variables * *******************************************************************************/ static Event_t tdtEvent = NULL; static char TDTPROCESSOR[] = "TDTProcessor"; /******************************************************************************* * Global functions * *******************************************************************************/ TDTProcessor_t TDTProcessorCreate(TSReader_t *reader) { TDTProcessor_t state; if (tdtEvent == NULL) { tdtEvent = EventsRegisterEvent(DVBEventSource, "TDT", NULL); } ObjectRegisterClass("TDTProcessor_t", sizeof(struct TDTProcessor_s), NULL); state = ObjectCreateType(TDTProcessor_t); if (state) { state->tsgroup = TSReaderCreateFilterGroup(reader, TDTPROCESSOR, "DVB", TDTProcessorFilterEventCallback, state); } return state; } void TDTProcessorDestroy(TDTProcessor_t processor) { TSFilterGroupDestroy(processor->tsgroup); if (processor->handle) { dvbpsi_DetachTDTTOT(processor->handle); } ObjectRefDec(processor); } /******************************************************************************* * Local Functions * *******************************************************************************/ static void TDTProcessorFilterEventCallback(void *userArg, struct TSFilterGroup_t *group, TSFilterEventType_e event, void *details) { TDTProcessor_t state = (TDTProcessor_t)userArg; if (event == TSFilterEventType_MuxChanged) { if (state->handle) { TSFilterGroupRemoveSectionFilter(state->tsgroup, PID_TDT); dvbpsi_DetachTDTTOT(state->handle); } if (details) { state->handle = dvbpsi_AttachTDTTOT(TDTHandler, state); TSFilterGroupAddSectionFilter(state->tsgroup, PID_TDT, 2, state->handle); } else { state->handle = NULL; } } } static void TDTHandler(void* arg, dvbpsi_tdt_tot_t* newTDT) { EventsFireEventListeners(tdtEvent, newTDT); ObjectRefDec(newTDT); } dvbstreamer-2.1.0/src/standard/mpeg2/000077500000000000000000000000001217721213100174265ustar00rootroot00000000000000dvbstreamer-2.1.0/src/standard/mpeg2/mpeg2.c000066400000000000000000000043571217721213100206150ustar00rootroot00000000000000/* Copyright (C) 2009 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA mpeg2.c Initialise/Deinitialise the MPEG2 Standard. */ #include #include #include #include #include #include #include "events.h" #include "multiplexes.h" #include "dvbadapter.h" #include "ts.h" #include "standard/mpeg2.h" #include "patprocessor.h" #include "pmtprocessor.h" /******************************************************************************* * Global variables * *******************************************************************************/ EventSource_t MPEG2EventSource = NULL; char MPEG2FilterType[]="MPEG2"; static PATProcessor_t patProcessor; static PMTProcessor_t pmtProcessor; /******************************************************************************* * Global functions * *******************************************************************************/ int MPEG2StandardInit(TSReader_t *reader) { if (MPEG2EventSource == NULL) { MPEG2EventSource = EventsRegisterSource(MPEG2FilterType); } patProcessor = PATProcessorCreate(reader); if (patProcessor == NULL) { return -1; } pmtProcessor = PMTProcessorCreate(reader); if (pmtProcessor == NULL) { PATProcessorDestroy(patProcessor); return -1; } return 0; } int MPEG2StandardDeinit(TSReader_t *reader) { reader = reader; PATProcessorDestroy(patProcessor); PMTProcessorDestroy(pmtProcessor); return 0; } dvbstreamer-2.1.0/src/standard/mpeg2/patprocessor.c000066400000000000000000000157441217721213100223310ustar00rootroot00000000000000/* Copyright (C) 2009 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA patprocessor.c Process Program Association Tables and update the services information. */ #include #include #include #include #include #include #include "multiplexes.h" #include "services.h" #include "dvbadapter.h" #include "ts.h" #include "standard/mpeg2.h" #include "patprocessor.h" #include "cache.h" #include "logging.h" #include "main.h" #include "list.h" /******************************************************************************* * Typedefs * *******************************************************************************/ struct PATProcessor_s { TSFilterGroup_t *tsgroup; Multiplex_t *multiplex; dvbpsi_handle pathandle; }; /******************************************************************************* * Prototypes * *******************************************************************************/ static void PATProcessorFilterEventCallback(void *userArg, struct TSFilterGroup_t *group, TSFilterEventType_e event, void *details); static void PATHandler(void* arg, dvbpsi_pat_t* newpat); /******************************************************************************* * Global variables * *******************************************************************************/ static char PATPROCESSOR[] = "PATProcessor"; static Event_t patEvent = NULL; /******************************************************************************* * Global functions * *******************************************************************************/ PATProcessor_t PATProcessorCreate(TSReader_t *reader) { PATProcessor_t state; if (patEvent == NULL) { patEvent = EventsRegisterEvent(MPEG2EventSource, "PAT", NULL); } ObjectRegisterClass("PATProcessor_t", sizeof(struct PATProcessor_s), NULL); state = ObjectCreateType(PATProcessor_t); if (state) { state->tsgroup = TSReaderCreateFilterGroup(reader, PATPROCESSOR, MPEG2FilterType, PATProcessorFilterEventCallback, state); } return state; } void PATProcessorDestroy(PATProcessor_t processor) { TSFilterGroupDestroy(processor->tsgroup); if (processor->multiplex) { dvbpsi_DetachPAT(processor->pathandle); MultiplexRefDec(processor->multiplex); } ObjectRefDec(processor); } /******************************************************************************* * Local Functions * *******************************************************************************/ static void PATProcessorFilterEventCallback(void *userArg, struct TSFilterGroup_t *group, TSFilterEventType_e event, void *details) { PATProcessor_t state= (PATProcessor_t)userArg; if (event == TSFilterEventType_MuxChanged) { if (state->multiplex) { MultiplexRefDec(state->multiplex); TSFilterGroupRemoveSectionFilter(state->tsgroup, 0); dvbpsi_DetachPAT(state->pathandle); } state->multiplex = details; if (details) { MultiplexRefInc(state->multiplex); state->pathandle = dvbpsi_AttachPAT(PATHandler, (void*)state); TSFilterGroupAddSectionFilter(state->tsgroup, 0, -1, state->pathandle); } } } static void PATHandler(void* arg, dvbpsi_pat_t* newpat) { PATProcessor_t state = (PATProcessor_t)arg; Multiplex_t *multiplex = state->multiplex; int count,i; Service_t **services; dvbpsi_pat_program_t *patentry; LogModule(LOG_DEBUG, PATPROCESSOR, "PAT recieved, version %d (old version %d)\n", newpat->i_version, multiplex->patVersion); if (multiplex->patVersion == -1) { /* Cause a TS Structure change call back*/ state->tsgroup->tsReader->tsStructureChanged = TRUE; } /* Version has changed update the services */ for (patentry = newpat->p_first_program; patentry; patentry = patentry->p_next) { LogModule(LOG_DEBUG, PATPROCESSOR, "Service 0x%04x PMT PID 0x%04x\n", patentry->i_number, patentry->i_pid); if (patentry->i_number != 0x0000) { Service_t *service = CacheServiceFindId(patentry->i_number); if (!service) { LogModule(LOG_DEBUG, PATPROCESSOR, "Service not found in cache while processing PAT, adding 0x%04x\n", patentry->i_number); service = CacheServiceAdd(patentry->i_number, patentry->i_number); /* Cause a TS Structure change call back*/ state->tsgroup->tsReader->tsStructureChanged = TRUE; } else { CacheServiceSeen(service, TRUE, TRUE); } if (service && (service->pmtPID != patentry->i_pid)) { CacheUpdateServicePMTPID(service, patentry->i_pid); } if (service) { ServiceRefDec(service); } } } /* Delete any services that no longer exist */ services = CacheServicesGet(&count); for (i = 0; i < count; i ++) { bool found = FALSE; for (patentry = newpat->p_first_program; patentry; patentry = patentry->p_next) { if (services[i]->id == patentry->i_number) { found = TRUE; break; } } if (!found) { LogModule(LOG_DEBUG, PATPROCESSOR, "Service not found in PAT while checking cache, deleting 0x%04x (%s)\n", services[i]->id, services[i]->name); if (!CacheServiceSeen(services[i], FALSE, TRUE)) { CacheServicesRelease(); CacheServiceDelete(services[i]); services = CacheServicesGet(&count); i --; /* Cause a TS Structure change call back*/ state->tsgroup->tsReader->tsStructureChanged = TRUE; } } } CacheServicesRelease(); CacheUpdateMultiplex(multiplex, newpat->i_version, newpat->i_ts_id); EventsFireEventListeners(patEvent, newpat); ObjectRefDec(newpat); } dvbstreamer-2.1.0/src/standard/mpeg2/pmtprocessor.c000066400000000000000000000157611217721213100223440ustar00rootroot00000000000000/* Copyright (C) 2009 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA pmtprocessor.c Process Program Map Tables and update the services information and PIDs. */ #include #include #include #include #include #include "multiplexes.h" #include "services.h" #include "pids.h" #include "dvbadapter.h" #include "ts.h" #include "main.h" #include "cache.h" #include "logging.h" #include "list.h" #include "standard/mpeg2.h" #include "pmtprocessor.h" #include /******************************************************************************* * Defines * *******************************************************************************/ #define MAX_HANDLES 256 /******************************************************************************* * Typedefs * *******************************************************************************/ struct PMTProcessor_s { TSFilterGroup_t *tsgroup; Service_t *services[MAX_HANDLES]; unsigned short pmtpids[MAX_HANDLES]; dvbpsi_handle pmthandles[MAX_HANDLES]; }; /******************************************************************************* * Prototypes * *******************************************************************************/ static void PMTProcessorFilterEventCallback(void *userArg, struct TSFilterGroup_t *group, TSFilterEventType_e event, void *details); static void PMTHandler(void* arg, dvbpsi_pmt_t* newpmt); /******************************************************************************* * Global variables * *******************************************************************************/ static char PMTPROCESSOR[] = "PMTProcessor"; static Event_t pmtEvent = NULL; /******************************************************************************* * Global functions * *******************************************************************************/ PMTProcessor_t PMTProcessorCreate(TSReader_t *reader) { PMTProcessor_t state; if (pmtEvent == NULL) { pmtEvent = EventsRegisterEvent(MPEG2EventSource, "PMT", NULL); } ObjectRegisterClass("PMTProcessor_t", sizeof(struct PMTProcessor_s), NULL); state = ObjectCreateType(PMTProcessor_t); if (state) { state->tsgroup = TSReaderCreateFilterGroup(reader, PMTPROCESSOR, MPEG2FilterType, PMTProcessorFilterEventCallback, state); } return state; } void PMTProcessorDestroy(PMTProcessor_t processor) { int i; TSFilterGroupDestroy(processor->tsgroup); for (i = 0; i < MAX_HANDLES; i ++) { if (processor->pmthandles[i]) { dvbpsi_DetachPMT(processor->pmthandles[i]); processor->pmthandles[i] = NULL; ServiceRefDec(processor->services[i]); processor->services[i] = NULL; } } ObjectRefDec(processor); } /******************************************************************************* * Local Functions * *******************************************************************************/ static void PMTProcessorFilterEventCallback(void *userArg, struct TSFilterGroup_t *group, TSFilterEventType_e event, void *details) { PMTProcessor_t state = (PMTProcessor_t)userArg; int count; int i; Service_t **services; TSFilterGroupRemoveAllFilters(state->tsgroup); for (i = 0; i < MAX_HANDLES; i ++) { if (state->pmthandles[i]) { dvbpsi_DetachPMT(state->pmthandles[i]); state->pmthandles[i] = NULL; ServiceRefDec(state->services[i]); state->services[i] = NULL; } } services = CacheServicesGet(&count); if (count > MAX_HANDLES) { LogModule(LOG_ERROR, PMTPROCESSOR, "Too many services in TS, cannot monitor them all only monitoring %d out of %d\n", MAX_HANDLES, count); count = MAX_HANDLES; } for (i = 0; i < count; i ++) { ServiceRefInc(services[i]); state->services[i] = services[i]; } CacheServicesRelease(); /* Make sure we don't try and create the filter while we have the cache locked. */ for (i = 0; i < count; i ++) { state->pmthandles[i] = dvbpsi_AttachPMT(services[i]->id, PMTHandler, (void*)services[i]); TSFilterGroupAddSectionFilter(state->tsgroup, services[i]->pmtPID, 0, state->pmthandles[i]); } } static void PMTHandler(void* arg, dvbpsi_pmt_t* newpmt) { Service_t *service = (Service_t*)arg; ProgramInfo_t *info; dvbpsi_pmt_es_t *esentry = newpmt->p_first_es; int count = 0; LogModule(LOG_DEBUG, PMTPROCESSOR, "PMT recieved, version %d on PID %d\n", newpmt->i_version, service->pmtPID); EventsFireEventListeners(pmtEvent, newpmt); while(esentry) { esentry = esentry->p_next; count ++; } LogModule(LOG_DEBUGV, PMTPROCESSOR, "%d PIDs in PMT\n", count); info = ProgramInfoNew(count); if (info) { int i; info->pcrPID = newpmt->i_pcr_pid; info->descriptors = newpmt->p_first_descriptor; newpmt->p_first_descriptor = NULL; esentry = newpmt->p_first_es; for (i = 0; i < count; i ++) { LogModule(LOG_DEBUGV, PMTPROCESSOR, " %u %d\n", esentry->i_pid, esentry->i_type); info->streamInfoList->streams[i].pid = esentry->i_pid; info->streamInfoList->streams[i].type = esentry->i_type; info->streamInfoList->streams[i].descriptors = esentry->p_first_descriptor; { dvbpsi_descriptor_t *desc = esentry->p_first_descriptor; while(desc) { LogModule(LOG_DEBUGV, PMTPROCESSOR, " Descriptor 0x%02x %u\n", desc->i_tag, desc->i_length); desc = desc->p_next; } } esentry->p_first_descriptor = NULL; /* Take over the descriptors */ esentry = esentry->p_next; } LogModule(LOG_DEBUGV,PMTPROCESSOR, "About to update cache\n"); CacheUpdateProgramInfo(service, info); } ObjectRefDec(newpmt); } dvbstreamer-2.1.0/src/threading/000077500000000000000000000000001217721213100165615ustar00rootroot00000000000000dvbstreamer-2.1.0/src/threading/deferredproc.c000077500000000000000000000105571217721213100214040ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA deferredproc.h Deferred Processing thread. */ #include #include #include #include #include #include "deferredproc.h" #include "messageq.h" #include "logging.h" #include "objects.h" #include "list.h" /******************************************************************************* * Typedefs * *******************************************************************************/ typedef struct DeferredJob_s { DeferredProcessor_t processor; void *arg; }DeferredJob_t; /******************************************************************************* * Prototypes * *******************************************************************************/ static void *DeferredProcessingThread(void* arg); /******************************************************************************* * Global variables * *******************************************************************************/ static const char DEFERREDPROC[] = "DeferredProc"; static MessageQ_t jobQ = NULL; static pthread_t processingThread; /******************************************************************************* * Global functions * *******************************************************************************/ int DeferredProcessingInit(void) { ObjectRegisterType(DeferredJob_t); jobQ = MessageQCreate(); pthread_create(&processingThread, NULL, DeferredProcessingThread, NULL); return 0; } void DeferredProcessingDeinit(void) { /* Signal thread to exit and wait */ MessageQSetQuit(jobQ); pthread_join(processingThread, NULL); /* Destory thread and queue */ MessageQDestroy(jobQ); pthread_detach(processingThread); jobQ = NULL; } void DeferredProcessingAddJob(DeferredProcessor_t processor, void *arg) { if (jobQ) { DeferredJob_t *job = ObjectCreateType(DeferredJob_t); LogModule(LOG_DEBUGV, DEFERREDPROC, "Adding job %p (processor:%p, arg:%p)\n", job, processor, arg); job->processor = processor; job->arg = arg; ObjectRefInc(arg); MessageQSend(jobQ, job); ObjectRefDec(job); } } /******************************************************************************* * Local Functions * *******************************************************************************/ static void *DeferredProcessingThread(void* arg) { DeferredJob_t *job; LogRegisterThread(processingThread, DEFERREDPROC); LogModule(LOG_DEBUG, DEFERREDPROC, "Deferred processing thread started\n"); while(!MessageQIsQuitSet(jobQ)) { job = (DeferredJob_t*)MessageQReceive(jobQ); if (job) { LogModule(LOG_DEBUGV, DEFERREDPROC, "Running job %p (processor:%p, arg:%p)\n", job, job->processor, job->arg); job->processor(job->arg); LogModule(LOG_DEBUGV, DEFERREDPROC, "Finished job %p (processor:%p, arg:%p)\n", job, job->processor, job->arg); ObjectRefDec(job); } } MessageQResetQuit(jobQ); LogModule(LOG_DEBUG, DEFERREDPROC, "Discarding %d jobs\n", MessageQAvailable(jobQ)); while(MessageQAvailable(jobQ)) { job = (DeferredJob_t*)MessageQReceive(jobQ); if (job) { ObjectRefDec(job->arg); ObjectRefDec(job); } } LogModule(LOG_DEBUG, DEFERREDPROC, "Deferred processing thread stopped\n"); return NULL; } dvbstreamer-2.1.0/src/threading/messageq.c000077500000000000000000000126421217721213100205420ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA messageq.h Thread safe message queue. */ #include #include #include #include #include #include "messageq.h" #include "logging.h" #include "objects.h" #include "list.h" /******************************************************************************* * Typedefs * *******************************************************************************/ struct MessageQ_s { pthread_mutex_t mutex; pthread_cond_t availableCond; bool quit; List_t *messages; }; /******************************************************************************* * Global variables * *******************************************************************************/ static char MessageQClass[] = "MessageQ"; static const char MESSAGEQ[] = "MessageQ"; /******************************************************************************* * Global functions * *******************************************************************************/ MessageQ_t MessageQCreate() { MessageQ_t result; ObjectRegisterClass(MessageQClass, sizeof(struct MessageQ_s), NULL); result = ObjectCreate(MessageQClass); if (result) { result->messages = ListCreate(); if (result->messages) { pthread_mutex_init(&result->mutex, NULL); pthread_cond_init(&result->availableCond, NULL); LogModule(LOG_DEBUG, MESSAGEQ, "Create messageq %p\n", result); } else { ObjectRefDec(result); result = NULL; } } return result; } void MessageQDestroy(MessageQ_t msgQ) { ListIterator_t iterator; LogModule(LOG_DEBUG, MESSAGEQ, "Destroying messageq %p\n", msgQ); MessageQSetQuit(msgQ); pthread_mutex_lock(&msgQ->mutex); for (ListIterator_Init(iterator, msgQ->messages); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { void *object = ListIterator_Current(iterator); ObjectRefDec(object); } ListFree(msgQ->messages, NULL); pthread_mutex_unlock(&msgQ->mutex); pthread_mutex_destroy(&msgQ->mutex); pthread_cond_destroy(&msgQ->availableCond); ObjectRefDec(msgQ); LogModule(LOG_DEBUG, MESSAGEQ, "Destroyed messageq %p\n", msgQ); } void MessageQSend(MessageQ_t msgQ, void *msg) { pthread_mutex_lock(&msgQ->mutex); if (!msgQ->quit) { ObjectRefInc(msg); ListAdd(msgQ->messages, msg); pthread_cond_signal(&msgQ->availableCond); } pthread_mutex_unlock(&msgQ->mutex); } int MessageQAvailable(MessageQ_t msgQ) { int count = 0; pthread_mutex_lock(&msgQ->mutex); count = ListCount(msgQ->messages); pthread_mutex_unlock(&msgQ->mutex); return count; } void *MessageQReceive(MessageQ_t msgQ) { void *result = NULL; pthread_mutex_lock(&msgQ->mutex); if (!msgQ->quit) { if (ListCount(msgQ->messages) == 0) { pthread_cond_wait(&msgQ->availableCond, &msgQ->mutex); } if (!msgQ->quit) { ListIterator_t iterator; ListIterator_Init(iterator, msgQ->messages); result = ListIterator_Current(iterator); ListRemoveCurrent(&iterator); } } pthread_mutex_unlock(&msgQ->mutex); return result; } void *MessageQReceiveTimed(MessageQ_t msgQ, ulong timeout) { void *result = NULL; struct timespec tilltime; pthread_mutex_lock(&msgQ->mutex); if (!msgQ->quit) { if (ListCount(msgQ->messages) == 0) { clock_gettime(CLOCK_REALTIME, &tilltime); tilltime.tv_nsec += timeout * 1000000; pthread_cond_timedwait(&msgQ->availableCond, &msgQ->mutex, &tilltime); } if ((!msgQ->quit) && (ListCount(msgQ->messages) > 0)) { ListIterator_t iterator; ListIterator_Init(iterator, msgQ->messages); result = ListIterator_Current(iterator); ListRemoveCurrent(&iterator); } } pthread_mutex_unlock(&msgQ->mutex); return result; } void MessageQSetQuit(MessageQ_t msgQ) { pthread_mutex_lock(&msgQ->mutex); msgQ->quit = TRUE; pthread_cond_signal(&msgQ->availableCond); pthread_mutex_unlock(&msgQ->mutex); } void MessageQResetQuit(MessageQ_t msgQ) { pthread_mutex_lock(&msgQ->mutex); msgQ->quit = FALSE; pthread_mutex_unlock(&msgQ->mutex); } bool MessageQIsQuitSet(MessageQ_t msgQ) { bool result = FALSE; pthread_mutex_lock(&msgQ->mutex); result = msgQ->quit; pthread_mutex_unlock(&msgQ->mutex); return result; } dvbstreamer-2.1.0/src/ts.c000066400000000000000000001040321217721213100154060ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ts.c Transport stream processing and filter management. */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include "multiplexes.h" #include "services.h" #include "ts.h" #include "logging.h" #include "dispatchers.h" /******************************************************************************* * Defines * *******************************************************************************/ #define PACKET_FILTER_DISABLED 0x8000 #define TSREADER_PID_INVALID 0xffff #define CHECK_PID_VALID(pid) \ do{\ if ((pid) > TSREADER_PID_ALL)\ {\ LogModule(LOG_ERROR, TSREADER, "Invalid PID %u supplied to %s", pid, __func__);\ return;\ }\ }while(0) /** * Minimum number of PID Filters to reserve for section filters. */ #define MIN_SECTION_FILTER_PIDS 4 /******************************************************************************* * Prototypes * *******************************************************************************/ static void TSReaderStatsDestructor(void *ptr); static void StatsAddFilterGroupStats(TSReaderStats_t *stats, const char *type, TSFilterGroupStats_t *filterGroupStats); static void PromiscusModeEnable(TSReader_t *reader, bool enable); static TSPacketFilter_t * PacketFilterListAddFilter(TSReader_t *reader, TSFilterGroup_t *group, uint16_t pid, TSPacketFilterCallback_t callback, void *userArg); static void PacketFilterListRemoveFilter(TSReader_t *reader, TSPacketFilter_t *packetFilter); static TSSectionFilterList_t * SectionFilterListCreate(TSReader_t *reader, uint16_t pid); static void SectionFilterListDestroy(TSReader_t *reader, TSSectionFilterList_t *sfList); static void SectionFilterListAddFilter(TSReader_t *reader, TSSectionFilter_t *filter); static void SectionFilterListRemoveFilter(TSReader_t *reader, TSSectionFilter_t *filter); static void SectionFilterListUpdatePriority(TSSectionFilterList_t *sfList); static TSSectionFilterList_t * SectionFilterListFind(TSReader_t *reader, uint16_t pid); static void SectionFilterListScheduleFilters(TSReader_t *reader); static void SectionFilterListDescheduleFilters(TSReader_t *reader); static void SectionFilterListDescheduleOneFilter(TSReader_t *reader); static void SectionFilterListPacketCallback(void *userArg, struct TSFilterGroup_t *group, TSPacket_t *packet); static void SectionFilterListPushSection(void *userArg, dvbpsi_handle sectionsHandle, dvbpsi_psi_section_t *section); static void TSReaderDVRCallback(struct ev_loop *loop, ev_io *w, int revents); static void TSReaderBitrateCallback(struct ev_loop *loop, ev_timer *w, int revents); static void TSReaderNotificationCallback(struct ev_loop *loop, ev_async *w, int revents); static void ProcessPacket(TSReader_t *reader, TSPacket_t *packet); static void SendToPacketFilters(TSReader_t *reader, uint16_t pid, TSPacket_t *packet); static void InformTSStructureChanged(TSReader_t *reader); static void InformMultiplexChanged(TSReader_t *reader); /******************************************************************************* * Global variables * *******************************************************************************/ char PSISIPIDFilterType[] = "PSI/SI"; static char TSREADER[] = "TSReader"; /******************************************************************************* * Transport Stream Filter Functions * *******************************************************************************/ TSReader_t* TSReaderCreate(DVBAdapter_t *adapter) { TSReader_t *result; struct ev_loop *inputLoop; ObjectRegisterType(TSReader_t); ObjectRegisterType(TSFilterGroup_t); ObjectRegisterType(TSSectionFilter_t); ObjectRegisterType(TSSectionFilterList_t); ObjectRegisterType(TSPacketFilter_t); ObjectRegisterTypeDestructor(TSReaderStats_t, TSReaderStatsDestructor); ObjectRegisterType(TSFilterGroupTypeStats_t); ObjectRegisterType(TSFilterGroupStats_t); result = ObjectCreateType(TSReader_t); if (result) { pthread_mutexattr_t mutexAttr; result->adapter = adapter; DVBDemuxSetBufferSize(adapter, TSREADER_MAX_PACKETS * TSPACKET_SIZE); result->groups = ListCreate(); result->activeSectionFilters = ListCreate(); result->sectionFilters = ListCreate(); result->currentlyProcessingPid = TSREADER_PID_INVALID; pthread_mutexattr_init(&mutexAttr); pthread_mutexattr_settype(&mutexAttr, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init(&result->mutex, &mutexAttr); pthread_mutexattr_destroy(&mutexAttr); inputLoop = DispatchersGetInput(); ev_io_init(&result->dvrWatcher, TSReaderDVRCallback, DVBDVRGetFD(adapter), EV_READ); ev_timer_init(&result->bitrateWatcher, TSReaderBitrateCallback, 1.0, 1.0); ev_async_init(&result->notificationWatcher, TSReaderNotificationCallback); result->dvrWatcher.data = result; result->bitrateWatcher.data = result; result->notificationWatcher.data = result; ev_io_start(inputLoop, &result->dvrWatcher); ev_timer_start(inputLoop, &result->bitrateWatcher); ev_async_start(inputLoop, &result->notificationWatcher); } return result; } void TSReaderDestroy(TSReader_t* reader) { int i; struct ev_loop *inputLoop = DispatchersGetInput(); ev_io_stop(inputLoop, &reader->dvrWatcher); ev_timer_stop(inputLoop, &reader->bitrateWatcher); SectionFilterListDescheduleFilters(reader); pthread_mutex_destroy(&reader->mutex); ListFree(reader->groups, (void (*)(void*))TSFilterGroupDestroy); for (i = 0; i < TSREADER_NROF_FILTERS; i ++) { if (reader->packetFilters[i] == NULL) { TSPacketFilter_t *cur, *next; DVBDemuxReleaseFilter(reader->adapter, i); for (cur = reader->packetFilters[i]; cur; cur = next) { next = cur->next; if (cur->group) { ObjectRefDec(cur); } } } } ListFree(reader->activeSectionFilters,NULL); ListFree(reader->sectionFilters,NULL); ObjectRefDec(reader); } void TSReaderEnable(TSReader_t* reader, bool enable) { pthread_mutex_lock(&reader->mutex); reader->enabled = enable; pthread_mutex_unlock(&reader->mutex); } TSReaderStats_t *TSReaderExtractStats(TSReader_t *reader) { ListIterator_t iterator; TSReaderStats_t *stats = ObjectCreateType(TSReaderStats_t); pthread_mutex_lock(&reader->mutex); /* Clear all filter stats */ stats->totalPackets = reader->totalPackets; stats->bitrate = reader->bitrate; for (ListIterator_Init(iterator, reader->groups); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { TSFilterGroup_t *group = (TSFilterGroup_t*)ListIterator_Current(iterator); TSFilterGroupStats_t * filterGroupStats = ObjectCreateType(TSFilterGroupStats_t); filterGroupStats->name = group->name; filterGroupStats->packetsProcessed = group->packetsProcessed; filterGroupStats->sectionsProcessed = group->sectionsProcessed; StatsAddFilterGroupStats(stats, group->type, filterGroupStats); } pthread_mutex_unlock(&reader->mutex); return stats; } void TSReaderZeroStats(TSReader_t* reader) { ListIterator_t iterator; pthread_mutex_lock(&reader->mutex); /* Clear all filter stats */ reader->totalPackets = 0; reader->bitrate = 0; for (ListIterator_Init(iterator, reader->groups); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { TSFilterGroup_t *group = (TSFilterGroup_t*)ListIterator_Current(iterator); group->packetsProcessed = 0; group->sectionsProcessed = 0; } pthread_mutex_unlock(&reader->mutex); } void TSReaderMultiplexChanged(TSReader_t *reader, Multiplex_t *newmultiplex) { struct ev_loop *inputLoop = DispatchersGetInput(); reader->multiplexChanged = TRUE; reader->multiplex = newmultiplex; LogModule(LOG_INFO, TSREADER, "Notifying mux changed!"); ev_async_send(inputLoop, &reader->notificationWatcher); } void TSReaderSectionFilterOverridePriority(TSReader_t *reader, uint16_t pid, int priority) { TSSectionFilterList_t *sfList; pthread_mutex_lock(&reader->mutex); sfList = SectionFilterListFind(reader, pid); if (sfList) { sfList->priority = priority; sfList->flags |= TSSectFilterListFlags_PRIORITY_OVERRIDE; } pthread_mutex_unlock(&reader->mutex); } void TSReaderSectionFilterResetPriority(TSReader_t *reader, uint16_t pid) { TSSectionFilterList_t *sfList; pthread_mutex_lock(&reader->mutex); sfList = SectionFilterListFind(reader, pid); if (sfList) { SectionFilterListUpdatePriority(sfList); sfList->flags &= ~TSSectFilterListFlags_PRIORITY_OVERRIDE; } pthread_mutex_unlock(&reader->mutex); } TSFilterGroup_t* TSReaderCreateFilterGroup(TSReader_t *reader, const char *name, const char *type, TSFilterGroupEventCallback_t callback, void *userArg ) { TSFilterGroup_t *group = ObjectCreateType(TSFilterGroup_t); if (group) { group->name = (char *)name; group->type = (char *)type; group->eventCallback = callback; group->userArg = userArg; group->tsReader = reader; pthread_mutex_lock(&reader->mutex); ListAdd(reader->groups, group); pthread_mutex_unlock(&reader->mutex); } return group; } TSFilterGroup_t* TSReaderFindFilterGroup(TSReader_t *reader, const char *name, const char *type) { ListIterator_t iterator; TSFilterGroup_t* result = NULL; pthread_mutex_lock(&reader->mutex); for (ListIterator_Init(iterator, reader->groups); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { TSFilterGroup_t *group = ListIterator_Current(iterator); if ((strcmp(group->name, name) == 0) && (strcmp(group->type, type) == 0)) { result = group; break; } } pthread_mutex_unlock(&reader->mutex); return result; } void TSFilterGroupDestroy(TSFilterGroup_t* group) { LogModule(LOG_DEBUG, TSREADER, "Destroying filter group %s", group->name); TSFilterGroupRemoveAllFilters(group); pthread_mutex_lock(&group->tsReader->mutex); ListRemove(group->tsReader->groups, group); pthread_mutex_unlock(&group->tsReader->mutex); ObjectRefDec(group); } void TSFilterGroupResetStats(TSFilterGroup_t* group) { LogModule(LOG_DEBUG, TSREADER, "Resetting stats for filter group %s", group->name); pthread_mutex_lock(&group->tsReader->mutex); group->packetFilters = 0; group->sectionFilters = 0; pthread_mutex_unlock(&group->tsReader->mutex); } void TSFilterGroupRemoveAllFilters(TSFilterGroup_t* group) { TSPacketFilter_t *packetFilter; TSPacketFilter_t *packetFilterNext; TSSectionFilter_t *sectionFilter; TSSectionFilter_t *sectionFilterNext; LogModule(LOG_DEBUG, TSREADER, "Removing all filters for filter group %s", group->name); pthread_mutex_lock(&group->tsReader->mutex); for (packetFilter = group->packetFilters; packetFilter; packetFilter = packetFilterNext) { LogModule(LOG_DEBUG, TSREADER, "Removing %p", packetFilter); packetFilterNext = packetFilter->next; PacketFilterListRemoveFilter(group->tsReader, packetFilter); } group->packetFilters = NULL; for (sectionFilter = group->sectionFilters; sectionFilter; sectionFilter = sectionFilterNext) { SectionFilterListRemoveFilter(group->tsReader, sectionFilter); sectionFilterNext = sectionFilter->next; ObjectRefDec(sectionFilter); } group->sectionFilters = NULL; pthread_mutex_unlock(&group->tsReader->mutex); } void TSFilterGroupAddSectionFilter(TSFilterGroup_t *group, uint16_t pid, int priority, dvbpsi_handle handle) { TSSectionFilter_t *sectionFilter; CHECK_PID_VALID(pid); sectionFilter = ObjectCreateType(TSSectionFilter_t); sectionFilter->pid = pid; sectionFilter->priority = priority; sectionFilter->sectionHandle = handle; sectionFilter->group = group; LogModule(LOG_DEBUG, TSREADER, "Adding section filter 0x%04x for filter group %s", pid, group->name); pthread_mutex_lock(&group->tsReader->mutex); sectionFilter->next = group->sectionFilters; group->sectionFilters = sectionFilter; SectionFilterListAddFilter(group->tsReader, sectionFilter); pthread_mutex_unlock(&group->tsReader->mutex); } void TSFilterGroupRemoveSectionFilter(TSFilterGroup_t *group, uint16_t pid) { TSSectionFilter_t *sectionFilter; TSSectionFilter_t *sectionFilterPrev = NULL; CHECK_PID_VALID(pid); LogModule(LOG_DEBUG, TSREADER, "Removing section filter 0x%04x for filter group %s", pid, group->name); pthread_mutex_lock(&group->tsReader->mutex); for (sectionFilter = group->sectionFilters; sectionFilter; sectionFilter = sectionFilter->next) { if (sectionFilter->pid == pid) { if (sectionFilterPrev) { sectionFilterPrev->next = sectionFilter->next; } else { group->sectionFilters = sectionFilter->next; } SectionFilterListRemoveFilter(group->tsReader, sectionFilter); ObjectRefDec(sectionFilter); break; } sectionFilterPrev = sectionFilter; } pthread_mutex_unlock(&group->tsReader->mutex); } bool TSFilterGroupAddPacketFilter(TSFilterGroup_t *group, uint16_t pid, TSPacketFilterCallback_t callback, void *userArg) { TSPacketFilter_t *packetFilter; bool result = TRUE; if (pid > TSREADER_PID_ALL) { LogModule(LOG_INFO, TSREADER, "Invalid PID %u supplied to %s", pid, __func__); return FALSE; } pthread_mutex_lock(&group->tsReader->mutex); for (packetFilter = group->packetFilters; packetFilter; packetFilter = packetFilter->next) { if (packetFilter->pid == pid) { LogModule(LOG_DEBUG, TSREADER, "PID 0x%04x is already being packet filtered for filter group %s", pid, group->name); result = FALSE; break; } } if (result) { LogModule(LOG_DEBUG, TSREADER, "Adding packet filter 0x%04x for filter group %s", pid, group->name); packetFilter = PacketFilterListAddFilter(group->tsReader, group, pid, callback, userArg); if (packetFilter != NULL) { packetFilter->next = group->packetFilters; group->packetFilters = packetFilter; } else { result = FALSE; } } pthread_mutex_unlock(&group->tsReader->mutex); return result; } void TSFilterGroupRemovePacketFilter(TSFilterGroup_t *group, uint16_t pid) { TSPacketFilter_t *packetFilter; TSPacketFilter_t *packetFilterPrev = NULL; CHECK_PID_VALID(pid); LogModule(LOG_DEBUG, TSREADER, "Removing packet filter 0x%04x for filter group %s", pid, group->name); pthread_mutex_lock(&group->tsReader->mutex); for (packetFilter = group->packetFilters; packetFilter; packetFilter = packetFilter->next) { if (packetFilter->pid == pid) { if (packetFilterPrev) { packetFilterPrev->next = packetFilter->next; } else { group->packetFilters = packetFilter->next; } PacketFilterListRemoveFilter(group->tsReader, packetFilter); break; } packetFilterPrev = packetFilter; } pthread_mutex_unlock(&group->tsReader->mutex); } /******************************************************************************* * Internal Functions * *******************************************************************************/ static void TSReaderStatsDestructor(void *ptr) { TSReaderStats_t *stats = ptr; TSFilterGroupTypeStats_t *typeStats; TSFilterGroupTypeStats_t *typeStatsNext; for (typeStats = stats->types; typeStats; typeStats = typeStatsNext) { TSFilterGroupStats_t *groupStats; TSFilterGroupStats_t *groupStatsNext; for (groupStats = typeStats->groups; groupStats; groupStats = groupStatsNext) { groupStatsNext = groupStats->next; ObjectRefDec(groupStats); } typeStatsNext = typeStats->next; ObjectRefDec(typeStats); } } static void StatsAddFilterGroupStats(TSReaderStats_t *stats, const char *type, TSFilterGroupStats_t *filterGroupStats) { TSFilterGroupTypeStats_t *typeStats; for (typeStats = stats->types; typeStats; typeStats = typeStats->next) { if (strcmp(typeStats->type, type) == 0) { break; } } if (typeStats == NULL) { typeStats = ObjectCreateType(TSFilterGroupTypeStats_t); typeStats->type = (char*)type; typeStats->next = stats->types; stats->types = typeStats; } filterGroupStats->next = typeStats->groups; typeStats->groups = filterGroupStats; } static void PromiscusModeEnable(TSReader_t *reader, bool enable) { int i; if (enable == reader->promiscuousMode) { return; } for (i = 0; i < TSREADER_NROF_FILTERS; i ++) { if (reader->packetFilters[i]) { if (enable) { DVBDemuxReleaseFilter(reader->adapter, i); } else { DVBDemuxAllocateFilter(reader->adapter, i); LogModule(LOG_INFO, TSREADER, "Failed to allocate filter for 0x%04x", i); } } } if (enable) { DVBDemuxAllocateFilter(reader->adapter, TSREADER_PID_ALL); } else { DVBDemuxReleaseFilter(reader->adapter, TSREADER_PID_ALL); } reader->promiscuousMode = enable; } static TSPacketFilter_t * PacketFilterListAddFilter(TSReader_t *reader, TSFilterGroup_t *group, uint16_t pid, TSPacketFilterCallback_t callback, void *userArg) { TSPacketFilter_t *packetFilter; if (reader->packetFilters[pid] == NULL) { if (!reader->promiscuousMode && (pid != TSREADER_PID_ALL)) { int p, pidCount = 0; int freePIDCount; for (p = 0; p < TSREADER_NROF_FILTERS; p ++) { pidCount += (reader->packetFilters[p] != NULL) ? 1:0; } freePIDCount = DVBDemuxGetMaxFilters(reader->adapter) - pidCount; if (ListCount(reader->activeSectionFilters) < MIN_SECTION_FILTER_PIDS) { freePIDCount -= MIN_SECTION_FILTER_PIDS - ListCount(reader->activeSectionFilters); } if ((group != NULL) && (freePIDCount <= 0)) { return NULL; } if (DVBDemuxAllocateFilter(reader->adapter, pid)) { if (DVBDemuxIsHardwareRestricted(reader->adapter)) { /* If this is a section filter and we are HW restricted fail straight away*/ if (group == NULL) { return NULL; } /* If this is not for a section filter and we are HW restricted try * and release a Section Filter PID filter so we can start this one. */ if ((group != NULL) && (ListCount(reader->activeSectionFilters) > MIN_SECTION_FILTER_PIDS)) { SectionFilterListDescheduleOneFilter(reader); } if (DVBDemuxAllocateFilter(reader->adapter, pid)) { LogModule(LOG_INFO, TSREADER, "Failed to allocate filter for 0x%04x", pid); return NULL; } } else { PromiscusModeEnable(reader, TRUE); } } } if (!DVBDemuxIsHardwareRestricted(reader->adapter) && !reader->promiscuousMode && (pid == TSREADER_PID_ALL)) { PromiscusModeEnable(reader, TRUE); } } packetFilter = ObjectCreateType(TSPacketFilter_t); packetFilter->pid = pid; packetFilter->group = group; packetFilter->callback = callback; packetFilter->userArg = userArg; packetFilter->flNext = reader->packetFilters[pid]; reader->packetFilters[pid] = packetFilter; return packetFilter; } static void PacketFilterListRemoveFilter(TSReader_t *reader, TSPacketFilter_t *packetFilter) { TSPacketFilter_t *cur = NULL; TSPacketFilter_t *prev = NULL; LogModule(LOG_DEBUG, TSREADER, "Removing packet filter %p on pid 0x%02x", packetFilter, packetFilter->pid); if (reader->currentlyProcessingPid == (packetFilter->pid & ~PACKET_FILTER_DISABLED)) { LogModule(LOG_DEBUG, TSREADER, "Removing packet filter (replaced with NULL)"); packetFilter->pid |= PACKET_FILTER_DISABLED; return; } for (cur = reader->packetFilters[packetFilter->pid]; cur; cur = cur->flNext) { if (cur == packetFilter) { break; } prev = cur; } if (cur == packetFilter) { if (prev == NULL) { reader->packetFilters[packetFilter->pid] = cur->flNext; } else { prev->flNext = cur->flNext; } } if (reader->packetFilters[packetFilter->pid] == NULL) { if (!reader->promiscuousMode && (packetFilter->pid != TSREADER_PID_ALL)) { DVBDemuxReleaseFilter(reader->adapter, packetFilter->pid); } } ObjectRefDec(packetFilter); } static TSSectionFilterList_t * SectionFilterListCreate(TSReader_t *reader, uint16_t pid) { TSSectionFilterList_t *sfList = ObjectCreateType(TSSectionFilterList_t); sfList->pid = pid; sfList->filters = ListCreate(); sfList->tsReader = reader; sfList->sectionHandle = dvbpsi_AttachSections(SectionFilterListPushSection, sfList); ListAdd(reader->sectionFilters, sfList); return sfList; } static void SectionFilterListDestroy(TSReader_t *reader, TSSectionFilterList_t *sfList) { if (ListRemove(reader->activeSectionFilters, sfList)) { LogModule(LOG_DEBUG, TSREADER, "Removed active section filter %p", sfList); PacketFilterListRemoveFilter(reader, sfList->packetFilter); } else { LogModule(LOG_DEBUG, TSREADER, "Removed section filter %p", sfList); ListRemove(reader->sectionFilters, sfList); } ListFree(sfList->filters, NULL); dvbpsi_DetachSections(sfList->sectionHandle); ObjectRefDec(sfList); } static void SectionFilterListAddFilter(TSReader_t *reader, TSSectionFilter_t *filter) { TSSectionFilterList_t *sfList = SectionFilterListFind(reader, filter->pid); if (sfList == NULL) { sfList = SectionFilterListCreate(reader, filter->pid); if (sfList == NULL) { return; } } ListAdd(sfList->filters, filter); SectionFilterListUpdatePriority(sfList); SectionFilterListScheduleFilters(reader); } static void SectionFilterListRemoveFilter(TSReader_t *reader, TSSectionFilter_t *filter) { TSSectionFilterList_t *sfList = SectionFilterListFind(reader, filter->pid); if (sfList) { ListRemove(sfList->filters, filter); if (ListCount(sfList->filters) == 0) { SectionFilterListDestroy(reader, sfList); } else { SectionFilterListUpdatePriority(sfList); } } } static void SectionFilterListUpdatePriority(TSSectionFilterList_t *sfList) { ListIterator_t iterator; bool first = TRUE; int currentPriority = 0; if (sfList->flags & TSSectFilterListFlags_PRIORITY_OVERRIDE) { return; } for (ListIterator_Init(iterator, sfList->filters); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { TSSectionFilter_t *filter = ListIterator_Current(iterator); if (first) { currentPriority = filter->priority; first = FALSE; } else { if (currentPriority > filter->priority) { currentPriority = filter->priority; } } } sfList->priority = currentPriority; } static TSSectionFilterList_t * SectionFilterListFind(TSReader_t *reader, uint16_t pid) { ListIterator_t iterator; for (ListIterator_Init(iterator, reader->activeSectionFilters); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { TSSectionFilterList_t *sfList = ListIterator_Current(iterator); if (sfList->pid == pid) { return sfList; } } for (ListIterator_Init(iterator, reader->sectionFilters); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { TSSectionFilterList_t *sfList = ListIterator_Current(iterator); if (sfList->pid == pid) { return sfList; } } return NULL; } static void SectionFilterListScheduleFilters(TSReader_t *reader) { ListIterator_t iterator; LogModule(LOG_DEBUG, TSREADER, "Scheduling section filters"); /* TODO: Take into account priority */ for (ListIterator_Init(iterator, reader->sectionFilters); ListIterator_MoreEntries(iterator);) { TSSectionFilterList_t *sfList = ListIterator_Current(iterator); sfList->flags |= TSSectFilterListFlags_PAYLOAD_START; sfList->packetFilter = PacketFilterListAddFilter(reader, NULL, sfList->pid, SectionFilterListPacketCallback, sfList); if (sfList->packetFilter == NULL) { break; } ListRemoveCurrent(&iterator); ListAdd(reader->activeSectionFilters, sfList); } } static void SectionFilterListDescheduleFilters(TSReader_t *reader) { ListIterator_t iterator; LogModule(LOG_DEBUG, TSREADER, "Descheduling section filters"); for (ListIterator_Init(iterator, reader->activeSectionFilters); ListIterator_MoreEntries(iterator);) { TSSectionFilterList_t *sfList = ListIterator_Current(iterator); PacketFilterListRemoveFilter(sfList->tsReader, sfList->packetFilter); sfList->packetFilter = NULL; ListRemoveCurrent(&iterator); ListAdd(reader->sectionFilters, sfList); } } static void SectionFilterListDescheduleOneFilter(TSReader_t *reader) { ListIterator_t iterator; TSSectionFilterList_t *toDeschedule = NULL; LogModule(LOG_DEBUG, TSREADER, "Descheduling one section filter"); for (ListIterator_Init(iterator, reader->activeSectionFilters); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { TSSectionFilterList_t *sfList = ListIterator_Current(iterator); if ((reader->packetFilters[sfList->pid] == sfList->packetFilter) && (sfList->packetFilter->flNext == NULL)) { if ((toDeschedule == NULL) || (toDeschedule->priority < sfList->priority)) { toDeschedule = sfList; } } } if (toDeschedule) { LogModule(LOG_DEBUG, TSREADER, "Chose %d to deschedule.", toDeschedule->pid); ListRemove(reader->activeSectionFilters, toDeschedule); ListAdd(reader->sectionFilters, toDeschedule); PacketFilterListRemoveFilter(reader, toDeschedule->packetFilter); toDeschedule->packetFilter = NULL; } } static void SectionFilterListPacketCallback(void *userArg, struct TSFilterGroup_t *group, TSPacket_t *packet) { TSSectionFilterList_t *sfList = userArg; if (sfList->flags & TSSectFilterListFlags_PAYLOAD_START) { if (!TSPACKET_ISPAYLOADUNITSTART(*packet)) { return; } sfList->flags &= ~TSSectFilterListFlags_PAYLOAD_START; } dvbpsi_PushPacket(sfList->sectionHandle, (uint8_t *) packet); } static void SectionFilterListPushSection(void *userArg, dvbpsi_handle sectionsHandle, dvbpsi_psi_section_t *section) { TSSectionFilterList_t *sfList = userArg; ListIterator_t iterator; dvbpsi_psi_section_t *cloned; for (ListIterator_Init(iterator, sfList->filters); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { TSSectionFilter_t *filter = ListIterator_Current(iterator); cloned = dvbpsi_ClonePSISection(filter->sectionHandle, section); if (filter->group) { filter->group->sectionsProcessed ++; } dvbpsi_PushSection(filter->sectionHandle, cloned); } dvbpsi_ReleasePSISections(sfList->sectionHandle, section); if (sfList->packetFilter && ListCount(sfList->tsReader->sectionFilters)) { ListRemove(sfList->tsReader->activeSectionFilters, sfList); ListAdd(sfList->tsReader->sectionFilters, sfList); PacketFilterListRemoveFilter(sfList->tsReader, sfList->packetFilter); sfList->packetFilter = NULL; } } static void TSReaderDVRCallback(struct ev_loop *loop, ev_io *w, int revents) { TSReader_t *reader = (TSReader_t*)w->data; DVBAdapter_t *adapter = reader->adapter; int count, p; count = read(DVBDVRGetFD(adapter), (char*)reader->buffer, sizeof(reader->buffer)); if (!DVBFrontEndIsLocked(adapter) || !reader->enabled) { return; } pthread_mutex_lock(&reader->mutex); for (p = 0; (p < (count / TSPACKET_SIZE)) && reader->enabled; p ++) { if (!TSPACKET_ISVALID(reader->buffer[p])) { continue; } ProcessPacket(reader, &reader->buffer[p]); /* The structure of the transport stream has changed in a major way, (ie new services, services removed) so inform all of the filters that are interested. */ if (reader->tsStructureChanged) { InformTSStructureChanged(reader); reader->tsStructureChanged = FALSE; } } pthread_mutex_unlock(&reader->mutex); } static void TSReaderBitrateCallback(struct ev_loop *loop, ev_timer *w, int revents) { TSReader_t *reader = (TSReader_t*)w->data; reader->bitrate = (unsigned long)((reader->totalPackets - reader->prevTotalPackets) * (188 * 8)); reader->prevTotalPackets = reader->totalPackets; } static void TSReaderNotificationCallback(struct ev_loop *loop, ev_async *w, int revents) { TSReader_t *reader = (TSReader_t*)w->data; if (reader->multiplexChanged) { LogModule(LOG_INFO, TSREADER, "Informing mux changed!"); InformMultiplexChanged(reader); reader->multiplexChanged = FALSE; } } static void ProcessPacket(TSReader_t *reader, TSPacket_t *packet) { SendToPacketFilters(reader, TSPACKET_GETPID(*packet), packet); SendToPacketFilters(reader, TSREADER_PID_ALL, packet); reader->totalPackets ++; } static void SendToPacketFilters(TSReader_t *reader, uint16_t pid, TSPacket_t *packet) { TSPacketFilter_t *cur, *prev=NULL, *next; if (reader->packetFilters[pid] == NULL) { return; } reader->currentlyProcessingPid = pid; for (cur = reader->packetFilters[pid]; cur; cur = cur->flNext) { if (cur->pid & PACKET_FILTER_DISABLED) { continue; } if (cur->group) { cur->group->packetsProcessed ++; } cur->callback(cur->userArg, cur->group, packet); } reader->currentlyProcessingPid = TSREADER_PID_INVALID; for (cur = reader->packetFilters[pid]; cur; cur = next) { next = cur->flNext; if (cur->pid & PACKET_FILTER_DISABLED) { LogModule(LOG_DEBUG, TSREADER, "Removing %p (%d) as marked as disabled", cur, cur->pid & 0x7fff); if (prev == NULL) { reader->packetFilters[pid] = cur->flNext; } else { prev->flNext = cur->flNext; } ObjectRefDec(cur); } else { prev = cur; } } if (reader->packetFilters[pid] == NULL) { if (!reader->promiscuousMode && (pid != TSREADER_PID_ALL)) { DVBDemuxReleaseFilter(reader->adapter, pid); } SectionFilterListScheduleFilters(reader); } } static void InformTSStructureChanged(TSReader_t *reader) { ListIterator_t iterator; for (ListIterator_Init(iterator, reader->groups); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { TSFilterGroup_t *group =(TSFilterGroup_t *)ListIterator_Current(iterator); if (group->eventCallback) { group->eventCallback(group->userArg, group, TSFilterEventType_StructureChanged, NULL); } } } static void InformMultiplexChanged(TSReader_t *reader) { ListIterator_t iterator; for (ListIterator_Init(iterator, reader->groups); ListIterator_MoreEntries(iterator); ListIterator_Next(iterator)) { TSFilterGroup_t *group =(TSFilterGroup_t *)ListIterator_Current(iterator); if (group->eventCallback) { group->eventCallback(group->userArg, group, TSFilterEventType_MuxChanged, reader->multiplex); } } } dvbstreamer-2.1.0/src/tuning.c000077500000000000000000000173671217721213100163050ustar00rootroot00000000000000/* Copyright (C) 2006 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA tuning.c Control tuning of the dvb adapter. */ #include "config.h" #include #include "main.h" #include "tuning.h" #include "cache.h" #include "logging.h" #include "dvbadapter.h" #include "ts.h" #include "servicefilter.h" #include "events.h" /******************************************************************************* * Prototypes * *******************************************************************************/ static void TuneMultiplex(Multiplex_t *multiplex); /******************************************************************************* * Global variables * *******************************************************************************/ static Multiplex_t *CurrentMultiplex = NULL; static Service_t *CurrentService = NULL; static EventSource_t tuningSource; static Event_t serviceChangedEvent; static Event_t mulitplexChangedEvent; static pthread_mutex_t lockMutex = PTHREAD_MUTEX_INITIALIZER; static bool locked = FALSE; static const char TUNING[] = "tuning"; /******************************************************************************* * Global functions * *******************************************************************************/ int TuningInit(void) { tuningSource = EventsRegisterSource("Tuning"); serviceChangedEvent = EventsRegisterEvent(tuningSource, "ServiceChanged", ServiceEventToString); mulitplexChangedEvent = EventsRegisterEvent(tuningSource, "MultiplexChanged", MultiplexEventToString); return 0; } int TuningDeInit(void) { MultiplexRefDec(CurrentMultiplex); ServiceRefDec(CurrentService); EventsUnregisterSource(tuningSource); return 0; } /******************************************************************************* * Channel Change functions * *******************************************************************************/ bool TuningCurrentServiceLock(void) { bool r = FALSE; pthread_mutex_lock(&lockMutex); if (!locked) { locked = TRUE; r = TRUE; } pthread_mutex_unlock(&lockMutex); return r; } void TuningCurrentServiceUnlock(void) { pthread_mutex_lock(&lockMutex); locked = FALSE; pthread_mutex_unlock(&lockMutex); } bool TuningCurrentServiceIsLocked(void) { bool r; pthread_mutex_lock(&lockMutex); r = locked; pthread_mutex_unlock(&lockMutex); return r; } Service_t *TuningCurrentServiceGet(void) { ServiceRefInc(CurrentService); return CurrentService; } bool TuningCurrentServiceSet(Service_t *service) { Multiplex_t *multiplex; TSReader_t *reader = MainTSReaderGet(); ServiceFilter_t primaryServiceFilter = MainServiceFilterGetPrimary(); if (!service) { return FALSE; } if (TuningCurrentServiceIsLocked()) { return FALSE; } if ((CurrentService == NULL) || (!ServiceAreEqual(service,CurrentService))) { LogModule(LOG_DEBUGV, TUNING, "Disabling filters\n"); TSReaderEnable(reader, FALSE); multiplex = MultiplexFindUID(service->multiplexUID); if ((CurrentMultiplex!= NULL) && MultiplexAreEqual(multiplex, CurrentMultiplex)) { LogModule(LOG_DEBUGV, TUNING, "Same multiplex\n"); /* TODO Reset primary service filter stats */ } else { LogModule(LOG_DEBUG, TUNING, "New Multiplex UID = %d (%04x.%04x)\n", multiplex->uid, multiplex->networkId & 0xffff, multiplex->tsId & 0xffff); TuneMultiplex(multiplex); /* Reset all stats as this is a new TS */ TSReaderZeroStats(reader); } MultiplexRefDec(multiplex); if (CurrentService) { ServiceRefDec(CurrentService); } CurrentService = CacheServiceFindId(service->id); ServiceFilterServiceSet(primaryServiceFilter, CurrentService); /* * Inform any interested parties that we have now changed the current * service. */ EventsFireEventListeners(serviceChangedEvent, CurrentService); LogModule(LOG_DEBUGV, TUNING, "Enabling filters\n"); TSReaderEnable(reader, TRUE); } return TRUE; } void TuningCurrentServiceRetune(void) { Multiplex_t *multiplex; TSReader_t *reader = MainTSReaderGet(); if (CurrentService == NULL) { return; } LogModule(LOG_DEBUGV, TUNING, "Disabling filters\n"); TSReaderEnable(reader, FALSE); multiplex = MultiplexFindUID(CurrentService->multiplexUID); if ((CurrentMultiplex!= NULL) && MultiplexAreEqual(multiplex, CurrentMultiplex)) { LogModule(LOG_DEBUGV, TUNING, "Same multiplex\n"); ObjectRefDec(multiplex); multiplex = CurrentMultiplex; ObjectRefInc(multiplex); } else { LogModule(LOG_DEBUG, TUNING, "New Multiplex UID = %d (%04x.%04x)\n", multiplex->uid, multiplex->networkId & 0xffff, multiplex->tsId & 0xffff); } TuneMultiplex(multiplex); /* Reset all stats as this is a new TS */ TSReaderZeroStats(reader); MultiplexRefDec(multiplex); LogModule(LOG_DEBUGV, TUNING, "Enabling filters\n"); TSReaderEnable(reader, TRUE); } Multiplex_t *TuningCurrentMultiplexGet(void) { MultiplexRefInc(CurrentMultiplex); return CurrentMultiplex; } void TuningCurrentMultiplexSet(Multiplex_t *multiplex) { TSReader_t *reader = MainTSReaderGet(); TSReaderLock(reader); LogModule(LOG_DEBUG, TUNING, "Writing changes back to database.\n"); CacheWriteback(); TSReaderUnLock(reader); LogModule(LOG_DEBUGV, TUNING, "Disabling filters\n"); TSReaderEnable(reader, FALSE); TuneMultiplex(multiplex); TSReaderZeroStats(reader); /* * Inform any interested parties that we have now changed the current * service. */ EventsFireEventListeners(serviceChangedEvent, NULL); LogModule(LOG_DEBUGV, TUNING, "Enabling filters\n"); TSReaderEnable(reader, TRUE); } /******************************************************************************* * Local Functions * *******************************************************************************/ static void TuneMultiplex(Multiplex_t *multiplex) { DVBAdapter_t *dvbAdapter = MainDVBAdapterGet(); TSReader_t *reader = MainTSReaderGet(); MultiplexRefDec(CurrentMultiplex); LogModule(LOG_DEBUGV, TUNING, "Caching Services\n"); CacheLoad(multiplex); MultiplexRefInc(multiplex); CurrentMultiplex = multiplex; LogModule(LOG_DEBUGV, TUNING, "Tuning\n"); if (DVBFrontEndTune(dvbAdapter, multiplex->deliverySystem, multiplex->tuningParams)) { LogModule(LOG_ERROR, TUNING, "Tuning failed!\n"); } LogModule(LOG_DEBUGV,TUNING, "Informing TSReader multiplex has changed!\n"); TSReaderMultiplexChanged(reader, CurrentMultiplex); EventsFireEventListeners(mulitplexChangedEvent, multiplex); } dvbstreamer-2.1.0/src/utf8.c000077500000000000000000000302011217721213100156450ustar00rootroot00000000000000/* Basic UTF-8 manipulation routines by Jeff Bezanson placed in the public domain Fall 2005 This code is designed to provide the utilities you need to manipulate UTF-8 as an internal string encoding. These functions do not perform the error checking normally needed when handling UTF-8 data, so if you happen to be from the Unicode Consortium you will want to flay me alive. I do this because error checking can be performed at the boundaries (I/O), with these routines reserved for higher performance on data known to be valid. */ /* UTF8 code from http://www.cprogramming.com/ */ #include #include #include #include #ifdef WIN32 #include #else #include #endif #include "utf8.h" /* utility predicates used by the above */ static int octal_digit(char c); static int hex_digit(char c); static const u_int32_t offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL, 0x03C82080UL, 0xFA082080UL, 0x82082080UL }; static const char trailingBytesForUTF8[256] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 }; /* returns length of next utf-8 sequence */ int UTF8_seqlen(char *s) { return trailingBytesForUTF8[(unsigned int)(unsigned char)s[0]] + 1; } /* conversions without error checking only works for valid UTF-8, i.e. no 5- or 6-byte sequences srcsz = source size in bytes, or -1 if 0-terminated sz = dest size in # of wide characters returns # characters converted dest will always be L'\0'-terminated, even if there isn't enough room for all the characters. if sz = srcsz+1 (i.e. 4*srcsz+4 bytes), there will always be enough space. */ int UTF8_toucs(u_int32_t *dest, int sz, char *src, int srcsz) { u_int32_t ch; char *src_end = src + srcsz; int nb; int i=0; while (i < sz-1) { nb = trailingBytesForUTF8[(unsigned char)*src]; if (srcsz == -1) { if (*src == 0) goto done_toucs; } else { if (src + nb >= src_end) goto done_toucs; } ch = 0; switch (nb) { /* these fall through deliberately */ case 3: ch += (unsigned char)*src++; ch <<= 6; case 2: ch += (unsigned char)*src++; ch <<= 6; case 1: ch += (unsigned char)*src++; ch <<= 6; case 0: ch += (unsigned char)*src++; } ch -= offsetsFromUTF8[nb]; dest[i++] = ch; } done_toucs: dest[i] = 0; return i; } /* srcsz = number of source characters, or -1 if 0-terminated sz = size of dest buffer in bytes returns # characters converted dest will only be '\0'-terminated if there is enough space. this is for consistency; imagine there are 2 bytes of space left, but the next character requires 3 bytes. in this case we could NUL-terminate, but in general we can't when there's insufficient space. therefore this function only NUL-terminates if all the characters fit, and there's space for the NUL as well. the destination string will never be bigger than the source string. */ int UTF8_toutf8(char *dest, int sz, u_int32_t *src, int srcsz) { u_int32_t ch; int i = 0; char *dest_end = dest + sz; while (srcsz<0 ? src[i]!=0 : i < srcsz) { ch = src[i]; if (ch < 0x80) { if (dest >= dest_end) return i; *dest++ = (char)ch; } else if (ch < 0x800) { if (dest >= dest_end-1) return i; *dest++ = (ch>>6) | 0xC0; *dest++ = (ch & 0x3F) | 0x80; } else if (ch < 0x10000) { if (dest >= dest_end-2) return i; *dest++ = (ch>>12) | 0xE0; *dest++ = ((ch>>6) & 0x3F) | 0x80; *dest++ = (ch & 0x3F) | 0x80; } else if (ch < 0x110000) { if (dest >= dest_end-3) return i; *dest++ = (ch>>18) | 0xF0; *dest++ = ((ch>>12) & 0x3F) | 0x80; *dest++ = ((ch>>6) & 0x3F) | 0x80; *dest++ = (ch & 0x3F) | 0x80; } i++; } if (dest < dest_end) *dest = '\0'; return i; } int UTF8_wc_toutf8(char *dest, u_int32_t ch) { if (ch < 0x80) { dest[0] = (char)ch; return 1; } if (ch < 0x800) { dest[0] = (ch>>6) | 0xC0; dest[1] = (ch & 0x3F) | 0x80; return 2; } if (ch < 0x10000) { dest[0] = (ch>>12) | 0xE0; dest[1] = ((ch>>6) & 0x3F) | 0x80; dest[2] = (ch & 0x3F) | 0x80; return 3; } if (ch < 0x110000) { dest[0] = (ch>>18) | 0xF0; dest[1] = ((ch>>12) & 0x3F) | 0x80; dest[2] = ((ch>>6) & 0x3F) | 0x80; dest[3] = (ch & 0x3F) | 0x80; return 4; } return 0; } /* charnum => byte offset */ int UTF8_offset(char *str, int charnum) { int offs=0; while (charnum > 0 && str[offs]) { (void)(isutf(str[++offs]) || isutf(str[++offs]) || isutf(str[++offs]) || ++offs); charnum--; } return offs; } /* byte offset => charnum */ int UTF8_charnum(char *s, int offset) { int charnum = 0, offs=0; while (offs < offset && s[offs]) { (void)(isutf(s[++offs]) || isutf(s[++offs]) || isutf(s[++offs]) || ++offs); charnum++; } return charnum; } /* number of characters */ int UTF8_strlen(char *s) { int count = 0; int i = 0; while (UTF8_nextchar(s, &i) != 0) count++; return count; } /* reads the next utf-8 sequence out of a string, updating an index */ u_int32_t UTF8_nextchar(char *s, int *i) { u_int32_t ch = 0; int sz = 0; do { ch <<= 6; ch += (unsigned char)s[(*i)++]; sz++; } while (s[*i] && !isutf(s[*i])); ch -= offsetsFromUTF8[sz-1]; return ch; } void UTF8_inc(char *s, int *i) { (void)(isutf(s[++(*i)]) || isutf(s[++(*i)]) || isutf(s[++(*i)]) || ++(*i)); } void UTF8_dec(char *s, int *i) { (void)(isutf(s[--(*i)]) || isutf(s[--(*i)]) || isutf(s[--(*i)]) || --(*i)); } static int octal_digit(char c) { return (c >= '0' && c <= '7'); } static int hex_digit(char c) { return ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f')); } /* assumes that src points to the character after a backslash returns number of input characters processed */ int UTF8_read_escape_sequence(char *str, u_int32_t *dest) { u_int32_t ch; char digs[9]="\0\0\0\0\0\0\0\0\0"; int dno=0, i=1; ch = (u_int32_t)str[0]; /* take literal character */ if (str[0] == 'n') ch = L'\n'; else if (str[0] == 't') ch = L'\t'; else if (str[0] == 'r') ch = L'\r'; else if (str[0] == 'b') ch = L'\b'; else if (str[0] == 'f') ch = L'\f'; else if (str[0] == 'v') ch = L'\v'; else if (str[0] == 'a') ch = L'\a'; else if (octal_digit(str[0])) { i = 0; do { digs[dno++] = str[i++]; } while (octal_digit(str[i]) && dno < 3); ch = strtol(digs, NULL, 8); } else if (str[0] == 'x') { while (hex_digit(str[i]) && dno < 2) { digs[dno++] = str[i++]; } if (dno > 0) ch = strtol(digs, NULL, 16); } else if (str[0] == 'u') { while (hex_digit(str[i]) && dno < 4) { digs[dno++] = str[i++]; } if (dno > 0) ch = strtol(digs, NULL, 16); } else if (str[0] == 'U') { while (hex_digit(str[i]) && dno < 8) { digs[dno++] = str[i++]; } if (dno > 0) ch = strtol(digs, NULL, 16); } *dest = ch; return i; } /* convert a string with literal \uxxxx or \Uxxxxxxxx characters to UTF-8 example: UTF8_unescape(mybuf, 256, "hello\\u220e") note the double backslash is needed if called on a C string literal */ int UTF8_unescape(char *buf, int sz, char *src) { int c=0, amt; u_int32_t ch; char temp[4]; while (*src && c < sz) { if (*src == '\\') { src++; amt = UTF8_read_escape_sequence(src, &ch); } else { ch = (u_int32_t)*src; amt = 1; } src += amt; amt = UTF8_wc_toutf8(temp, ch); if (amt > sz-c) break; memcpy(&buf[c], temp, amt); c += amt; } if (c < sz) buf[c] = '\0'; return c; } int UTF8_escape_wchar(char *buf, int sz, u_int32_t ch) { if (ch == L'\n') return snprintf(buf, sz, "\\n"); else if (ch == L'\t') return snprintf(buf, sz, "\\t"); else if (ch == L'\r') return snprintf(buf, sz, "\\r"); else if (ch == L'\b') return snprintf(buf, sz, "\\b"); else if (ch == L'\f') return snprintf(buf, sz, "\\f"); else if (ch == L'\v') return snprintf(buf, sz, "\\v"); else if (ch == L'\a') return snprintf(buf, sz, "\\a"); else if (ch == L'\\') return snprintf(buf, sz, "\\\\"); else if (ch < 32 || ch == 0x7f) return snprintf(buf, sz, "\\x%hhX", (unsigned char)ch); else if (ch > 0xFFFF) return snprintf(buf, sz, "\\U%.8X", (u_int32_t)ch); else if (ch >= 0x80 && ch <= 0xFFFF) return snprintf(buf, sz, "\\u%.4hX", (unsigned short)ch); return snprintf(buf, sz, "%c", (char)ch); } int UTF8_escape(char *buf, int sz, char *src, int escape_quotes) { int c=0, i=0, amt; while (src[i] && c < sz) { if (escape_quotes && src[i] == '"') { amt = snprintf(buf, sz - c, "\\\""); i++; } else { amt = UTF8_escape_wchar(buf, sz - c, UTF8_nextchar(src, &i)); } c += amt; buf += amt; } if (c < sz) *buf = '\0'; return c; } char *UTF8_strchr(char *s, u_int32_t ch, int *charn) { int i = 0, lasti=0; u_int32_t c; *charn = 0; while (s[i]) { c = UTF8_nextchar(s, &i); if (c == ch) { return &s[lasti]; } lasti = i; (*charn)++; } return NULL; } char *UTF8_memchr(char *s, u_int32_t ch, size_t sz, int *charn) { int i = 0, lasti=0; u_int32_t c; int csz; *charn = 0; while (i < sz) { c = csz = 0; do { c <<= 6; c += (unsigned char)s[i++]; csz++; } while (i < sz && !isutf(s[i])); c -= offsetsFromUTF8[csz-1]; if (c == ch) { return &s[lasti]; } lasti = i; (*charn)++; } return NULL; } int UTF8_is_locale_utf8(char *locale) { /* this code based on libutf8 */ const char* cp = locale; for (; *cp != '\0' && *cp != '@' && *cp != '+' && *cp != ','; cp++) { if (*cp == '.') { const char* encoding = ++cp; for (; *cp != '\0' && *cp != '@' && *cp != '+' && *cp != ','; cp++) ; if ((cp-encoding == 5 && !strncmp(encoding, "UTF-8", 5)) || (cp-encoding == 4 && !strncmp(encoding, "utf8", 4))) return 1; /* it's UTF-8 */ break; } } return 0; } int UTF8_vprintf(char *fmt, va_list ap) { int cnt, sz=0; char *buf; u_int32_t *wcs; sz = 512; buf = (char*)alloca(sz); try_print: cnt = vsnprintf(buf, sz, fmt, ap); if (cnt >= sz) { buf = (char*)alloca(cnt - sz + 1); sz = cnt + 1; goto try_print; } wcs = (u_int32_t*)alloca((cnt+1) * sizeof(u_int32_t)); cnt = UTF8_toucs(wcs, cnt+1, buf, cnt); printf("%ls", (wchar_t*)wcs); return cnt; } int UTF8_printf(char *fmt, ...) { int cnt; va_list args; va_start(args, fmt); cnt = UTF8_vprintf(fmt, args); va_end(args); return cnt; } dvbstreamer-2.1.0/src/yamlutils.c000066400000000000000000000153301217721213100170050ustar00rootroot00000000000000/* Copyright (C) 2010 Adam Charrett 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA yamlutils.c Misc functions for processing YAML. */ #include "logging.h" #include "objects.h" #include "yaml.h" /******************************************************************************* * Defines * *******************************************************************************/ #define STRING_SECTION_SIZE 256 /******************************************************************************* * Typedefs * *******************************************************************************/ typedef struct YUStringSection_s{ char buffer[STRING_SECTION_SIZE]; struct YUStringSection_s *next; }YUStringSection_t; typedef struct StringOutput_s { size_t written; int currentSectionPos; YUStringSection_t *currentSection; YUStringSection_t *sections; YUStringSection_t *sectionsEnd; }StringOutput_t; /******************************************************************************* * Prototypes * *******************************************************************************/ static int YamlUtils_OutputToStringSections(void *data, unsigned char* buffer, size_t size); static void YamlUtils_AddStringSection(StringOutput_t *output); /******************************************************************************* * Global variables * *******************************************************************************/ static char YAMLUTILS[] = "YamlUtils"; /******************************************************************************* * Global functions * *******************************************************************************/ int YamlUtils_Parse(char *str, yaml_document_t *document) { int r; yaml_parser_t parser; yaml_parser_initialize(&parser); yaml_parser_set_input_string(&parser, (const unsigned char*)str, strlen(str)); r = yaml_parser_load(&parser, document); yaml_parser_delete(&parser); return r; } yaml_node_t *YamlUtils_MappingFind(yaml_document_t *document, yaml_node_t *node, const char *key) { yaml_node_pair_t *pair; yaml_node_t *keyNode; if (node->type != YAML_MAPPING_NODE) { LogModule(LOG_ERROR,YAMLUTILS,"Node was not a mapping node!"); return NULL; } for (pair = node->data.mapping.pairs.start; pair && (pair != node->data.mapping.pairs.top); pair ++) { keyNode = yaml_document_get_node(document, pair->key); if (keyNode) { if (strcmp((char*)keyNode->data.scalar.value, key) == 0) { return yaml_document_get_node(document, pair->value); } } } return NULL; } int YamlUtils_MappingAdd(yaml_document_t *document, int mapping, const char *key, const char *value) { int keyId; int valueId; keyId = yaml_document_add_scalar(document, (yaml_char_t*)YAML_STR_TAG, (yaml_char_t*)key, strlen(key), YAML_ANY_SCALAR_STYLE); valueId = yaml_document_add_scalar(document, (yaml_char_t*)YAML_STR_TAG, (yaml_char_t*)value, strlen(value), YAML_ANY_SCALAR_STYLE); return yaml_document_append_mapping_pair(document, mapping, keyId, valueId); } int YamlUtils_DocumentToString(yaml_document_t *document, bool removeDocStartEnd, char **outputStr) { StringOutput_t output; char *current; YUStringSection_t *section; size_t left; yaml_emitter_t emitter; int offset = 0; size_t toCopy; ObjectRegisterType(YUStringSection_t); bzero(&output, sizeof(output)); YamlUtils_AddStringSection(&output); yaml_emitter_initialize(&emitter); yaml_emitter_set_output(&emitter, YamlUtils_OutputToStringSections, &output); yaml_emitter_dump(&emitter, document); if (removeDocStartEnd) { output.written -= 8; /* Remove start and end document markers */ offset = 4; } *outputStr = malloc(output.written + 1); current = *outputStr; section = output.sections; for (left = output.written; left && section; left -= toCopy) { toCopy = (STRING_SECTION_SIZE - offset); if (left < toCopy) { toCopy = left; } memcpy(current, section->buffer + offset, toCopy); offset = 0; current += toCopy; section = section->next; } *current = 0; for (section = output.sections; section;) { YUStringSection_t *prev = section; section = prev->next; ObjectRefDec(prev); } return output.written; } static int YamlUtils_OutputToStringSections(void *data, unsigned char* buffer, size_t size) { StringOutput_t *output = data; int offset = 0; size_t left = size; while (left) { size_t available = STRING_SECTION_SIZE - output->currentSectionPos; if (left > available) { memcpy(output->currentSection->buffer + output->currentSectionPos, buffer + offset, available); YamlUtils_AddStringSection(output); left -= available; offset += available; } else { memcpy(output->currentSection->buffer + output->currentSectionPos, buffer + offset, left); output->currentSectionPos += left; left = 0; } } output->written += size; return 1; } static void YamlUtils_AddStringSection(StringOutput_t *output) { YUStringSection_t *result = ObjectCreateType(YUStringSection_t); if (output->sections == NULL) { output->sections = result; } else { output->sectionsEnd->next = result; } output->sectionsEnd = result; output->currentSection = result; output->currentSectionPos = 0; } dvbstreamer-2.1.0/test/000077500000000000000000000000001217721213100150045ustar00rootroot00000000000000dvbstreamer-2.1.0/test/atsc.conf000077500000000000000000000000371217721213100166100ustar00rootroot00000000000000TEST:1000000000:QAM_256:65:68:4dvbstreamer-2.1.0/test/cable.conf000066400000000000000000000023531217721213100167240ustar00rootroot00000000000000YLE TV1:162000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_128:512:650:17 YLE TV2:162000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_128:513:660:33 MTV3:154000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_128:305:561:49 Nelonen:154000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_128:512:650:65 SubTV:154000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_128:353:609:97 YLE FST:162000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_128:514:670:81 YLE24:162000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_128:515:680:129 YLE Teema:162000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_128:516:690:145 Turku TV:154000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_128:532:788:323 Urheilukanava:154000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_128:417:673:113 YLE PEILI:162000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_128:0:692:4369 YLEQ:162000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_128:0:653:4385 YLEN KLASSINEN:162000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_128:0:662:4401 YLE FSR+:162000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_128:0:663:4417 YLEMONDO:162000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_128:0:673:4433 YLE X3M:162000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_128:0:685:4481 Uusi Kiss:154000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_128:0:671:4449 Iskelmä:154000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_128:0:681:4465 dvbstreamer-2.1.0/test/epgdb000077500000000000000000000566161217721213100160310ustar00rootroot00000000000000#!/usr/bin/python from socket import * import threading import time import traceback import xml.sax import xml.sax.handler from xml.sax.saxutils import XMLGenerator import sqlite3 import os import os.path import sys import logging class ControlConnection: """ Class implementing a connection to a DVBStreamer daemon. """ def __init__(self, host, adapter, username='dvbstreamer', password='control'): """ Create a connection object to communicate with a DVBStreamer daemon. """ self.host = host self.adapter = adapter self.opened = False self.version = None self.welcome_message = None self.my_ip = None self.username = username self.password = password def open(self): """ Open the connection to the DVBStreamer daemon. """ if self.opened: return self.socket = socket(AF_INET,SOCK_STREAM) self.socket.connect((self.host, self.adapter + 54197)) self.my_ip = self.socket.getsockname()[0] self.socket_file = self.socket.makefile('r+') self.opened = True (error_code, error_message, lines) = self.read_response() if error_code != 0: self.socket.close() self.opened = False else: self.welcome_message = error_message return self.opened def close(self): """ Close the connection to the DVBStreamer daemon. """ if self.opened: self.send_command('logout') self.socket_file.close() self.socket.close() self.opened = False def send_command(self, command): """ Send a command to the connection DVBStreamer daemon. """ if not self.opened: raise RuntimeError, 'not connected' self.socket_file.write(command + '\n') self.socket_file.flush() def read_response(self): """ Read a response from the DVBStreamer deamon after a command has been sent. Returns a tuple of error code, error message and response lines. """ more_lines = True lines = [] error_code = -1 error_message = '' while more_lines: line = self.socket_file.readline() if line.startswith('DVBStreamer/'): more_lines = False sections = line.split('/') self.version = sections[1] error_sections = sections[2].split(' ', 1) error_code = int(error_sections[0]) if len(error_sections) > 1: error_message = error_sections[1].strip() else: error_message = '' elif line == '': more_lines = False else: lines.append(line.strip('\n\r')) return (error_code, error_message, lines) def execute_command(self, command): """ Send command and wait for response Returns a tuple of error code, error message and response lines. """ self.send_command(command) return self.read_response() def authenticate(self): """ Send the authenticate command using the username and password specified when the connection was created. """ ec, em, lines = self.execute_command('auth %s %s' % (self.username, self.password)) if ec != 0: raise RuntimeError('Failed to authenticate') def get_services(self, mux=''): """ Get the list of services available on all or a specific multiplex. """ self.send_command('lsservices -id %s' % mux) (errcode, errmsg, lines) = self.read_response() if errcode != 0: return None services = [] for line in lines: services.append(line.split(' : ')) return services def get_service_info(self, service): """ Retrieve information about the specified service. """ self.send_command('serviceinfo "%s"' % service) (errcode, errmsg, lines) = self.read_response() if errcode != 0: return None dict = {} for line in lines: name, value = line.split(':', 2) dict[name.strip()] = value.strip() return dict def capture_epg_data(self): """ Start capturing EPG data and send it to this connection. """ self.authenticate() self.execute_command('epgcaprestart') self.send_command('epgdata') class EPGProcessor(xml.sax.handler.ContentHandler): def __init__(self, dbase, host, adapter, username, password): self.connection = ControlConnection(host, adapter, username, password) self.__stop = False self.dbase = dbase self.thread = threading.Thread(target=self.__run) self.thread.setName('EPGProcessor-%s-%d'% (host, adapter)) self.thread.start() def stop(self): self.__stop = True try: if self.connection: self.connection.close() except: traceback.print_exc() self.thread.join() def __run(self): while not self.__stop: try: self.connection.open() self.connection.capture_epg_data() xml.sax.parse(self.connection.socket_file, self) except: traceback.print_exc() self.connection.close() if not self.__stop: time.sleep(2.0) def startElement(self, name, attrs): if name == 'event': # Start transaction self.event_ref = (parse_int(attrs.getValue('net')), parse_int(attrs.getValue('ts')), parse_int(attrs.getValue('source')), parse_int(attrs.getValue('event'))) elif name == 'new': new_start = time.strptime(attrs.getValue('start'), '%Y-%m-%d %H:%M:%S') new_end = time.strptime(attrs.getValue('start'), '%Y-%m-%d %H:%M:%S') new_ca = attrs.getValue('ca') == 'yes' self.dbase.new_event(self.event_ref, new_start, new_end, new_ca) elif name == 'detail': self.detail_name = attrs.getValue('name') self.detail_lang = attrs.getValue('lang') self.detail_content = '' elif name == 'rating': rating_system = attrs.getValue('system') rating_value = attrs.getValue('value') self.dbase.update_rating(self.event_ref, rating_system, rating_value) self.current_element = name def endElement(self, name): if name == 'detail': self.dbase.update_detail(self.event_ref, self.detail_name, self.detail_lang, self.detail_content) def characters(self, content): if self.current_element == 'detail': self.detail_content += content def parse_int(str): if str.startswith('0x'): return int(str[2:], 16) if str.startswith('0'): return int(str[1:], 8) return int(str) class EPGDatabase: EVENTS_TABLE = 'Events' EVENTS_COLUMN_SOURCE= 'source' EVENTS_COLUMN_EVENT = 'event' EVENTS_COLUMN_START = 'start' EVENTS_COLUMN_END = 'end' EVENTS_COLUMN_CA = 'ca' EVENTS_COLUMNS = [EVENTS_COLUMN_SOURCE , EVENTS_COLUMN_EVENT, EVENTS_COLUMN_START , EVENTS_COLUMN_END , EVENTS_COLUMN_CA] RATINGS_TABLE = 'Ratings' RATINGS_COLUMN_SOURCE = 'source' RATINGS_COLUMN_EVENT = 'event' RATINGS_COLUMN_SYSTEM = 'system' RATINGS_COLUMN_VALUE = 'value' RATINGS_COLUMNS = [RATINGS_COLUMN_SOURCE, RATINGS_COLUMN_EVENT, RATINGS_COLUMN_SYSTEM, RATINGS_COLUMN_VALUE] DETAILS_TABLE = 'Details' DETAILS_COLUMN_SOURCE = 'source' DETAILS_COLUMN_EVENT = 'event' DETAILS_COLUMN_NAME = 'name' DETAILS_COLUMN_LANG = 'lang' DETAILS_COLUMN_VALUE = 'value' DETAILS_COLUMNS = [DETAILS_COLUMN_SOURCE, DETAILS_COLUMN_EVENT, DETAILS_COLUMN_NAME, DETAILS_COLUMN_LANG, DETAILS_COLUMN_VALUE] def __init__(self, dbpath, updater=False, reaper=False): self.dbpath = dbpath self.create_tables() self.connections = {} self.message_q = [] self.message_event = threading.Event() self.__quit = False if updater: self.updater_thread = threading.Thread(target=self.updater) self.updater_thread.setName('EPGDbase Updater') self.updater_thread.start() else: self.updater_thread = None if reaper: self.reaper_thread = threading.Thread(target=self.reaper) self.reaper_thread.setDaemon(True) self.reaper_thread.setName('EPGDbase Reaper') self.reaper_thread.start() def close(self): if self.updater_thread: self.__quit = True self.post_message(('quit',)) self.updater_thread.join() def create_tables(self): connection = sqlite3.Connection(self.dbpath) cursor = connection.cursor() self.create_table(cursor, EPGDatabase.EVENTS_TABLE, EPGDatabase.EVENTS_COLUMNS, [EPGDatabase.EVENTS_COLUMN_SOURCE, EPGDatabase.EVENTS_COLUMN_EVENT]) self.create_table(cursor, EPGDatabase.RATINGS_TABLE, EPGDatabase.RATINGS_COLUMNS, [EPGDatabase.RATINGS_COLUMN_SOURCE, EPGDatabase.RATINGS_COLUMN_EVENT, EPGDatabase.RATINGS_COLUMN_SYSTEM]) self.create_table(cursor, EPGDatabase.DETAILS_TABLE, EPGDatabase.DETAILS_COLUMNS, [EPGDatabase.DETAILS_COLUMN_SOURCE, EPGDatabase.DETAILS_COLUMN_EVENT, EPGDatabase.DETAILS_COLUMN_NAME, EPGDatabase. DETAILS_COLUMN_LANG]) connection.close() def create_table(self, cursor, table, fields, primary_key): sql = 'CREATE TABLE IF NOT EXISTS ' + table + '(' for field in fields: sql += field + ',' sql += 'PRIMARY KEY(' for field in primary_key: sql += field + ',' sql =sql[:-1] + '));' cursor.execute(sql) def get_connection(self): thread = threading.currentThread() if thread in self.connections: return self.connections[thread] connection = sqlite3.Connection(self.dbpath) self.connections[thread] = connection return connection def close_connection(self): thread = threading.currentThread() if thread in self.connections: self.connections[thread].close() del self.connections[thread] def get_events(self, source): connection = self.get_connection() cursor = connection.cursor() cursor.execute('SELECT %s FROM %s WHERE %s=?;' % (reduce(lambda x,y: x +','+y,EPGDatabase.EVENTS_COLUMNS), EPGDatabase.EVENTS_TABLE, EPGDatabase.EVENTS_COLUMN_SOURCE), (source,)) return cursor.fetchall() def get_details(self, source, event): connection = self.get_connection() cursor = connection.cursor() cursor.execute('SELECT %s,%s,%s FROM %s WHERE %s=? AND %s=?;' % (EPGDatabase.DETAILS_COLUMN_NAME, EPGDatabase.DETAILS_COLUMN_LANG, EPGDatabase.DETAILS_COLUMN_VALUE, EPGDatabase.DETAILS_TABLE, EPGDatabase.DETAILS_COLUMN_SOURCE, EPGDatabase.DETAILS_COLUMN_EVENT), (source, event)) details = {} for name,lang,value in cursor: if name in details: details[name].append((lang, value)) else: details[name] = [(lang, value)] return details def get_ratings(self, source, event): connection = self.get_connection() cursor = connection.cursor() cursor.execute('SELECT %s,%s FROM %s WHERE %s=? AND %s=?;' % (EPGDatabase.RATINGS_COLUMN_SYSTEM, EPGDatabase.RATINGS_COLUMN_VALUE, EPGDatabase.RATINGS_TABLE, EPGDatabase.RATINGS_COLUMN_SOURCE, EPGDatabase.RATINGS_COLUMN_EVENT), (source, event)) return cursor.fetchall() def new_event(self, event_ref, start, end, ca): self.post_message(('new', event_ref, start, end, ca)) def __new_event(self, event_ref, start, end, ca): if 'TZ' in os.environ: tz = os.environ['TZ'] else: tz = None os.environ['TZ']='UTC0' time.tzset() start_secs = int(time.mktime(start)) end_secs = int(time.mktime(end)) if tz is not None: os.environ['TZ'] = tz time.tzset() self.__update(EPGDatabase.EVENTS_TABLE, EPGDatabase.EVENTS_COLUMNS, ('%04x.%04x.%04x' % event_ref[:3], event_ref[3], start_secs, end_secs, ca)) def update_detail(self, event_ref, name, lang, value): self.post_message(('detail', event_ref, name, lang, value)) def __update_detail(self, event_ref, name, lang, value): self.__update(EPGDatabase.DETAILS_TABLE, EPGDatabase.DETAILS_COLUMNS, ('%04x.%04x.%04x' % event_ref[:3], event_ref[3], name, lang, value)) def update_rating(self, event_ref, system, value): self.post_message(('rating', event_ref, system, value)) def __update_rating(self, event_ref, system, value): self.__update(EPGDatabase.RATINGS_TABLE, EPGDatabase.RATINGS_COLUMNS, ('%04x.%04x.%04x' % event_ref[:3], event_ref[3], system, value)) def __update(self, table, columns, values): connection = self.get_connection() cursor = connection.cursor() sql = 'INSERT OR REPLACE INTO %s ( %s) VALUES (%s);' % (table, reduce(lambda x,y: x +','+y, columns), reduce(lambda x,y: x.startswith('?') and x +',?' or '?,?', values)) cursor.execute(sql, values) def post_message(self, msg): self.message_q.append(msg) self.message_event.set() def updater(self): connection = self.get_connection() updates = 0 while not self.__quit: if len(self.message_q) == 0: self.message_event.wait() if len(self.message_q) > 0: msg = self.message_q.pop() if msg[0] == 'commit': connection.commit() updates = 0 elif msg[0] == 'new': updates += 1 self.__new_event(*msg[1:]) elif msg[0] == 'detail': updates += 1 self.__update_detail(*msg[1:]) elif msg[0] == 'rating': updates += 1 self.__update_rating(*msg[1:]) elif msg[0] == 'reap': updates = 0 self.__reap() elif msg[0] == 'quit': connection.commit() if len(self.message_q) == 0: self.message_event.clear() def reaper(self): last_reap = 0.0 while not self.__quit: now = time.time() if (now - last_reap) > 360.0: # Reap old events self.post_message(('reap',)) last_reap = now else: self.post_message(('commit',)) # Sleep for 30 seconds time.sleep(30.0) def __reap(self): connection = self.get_connection() cursor = connection.cursor() past24 = int(time.time() - (24.0 * 360.0)) cursor.execute('DELETE FROM Events WHERE end<=?;',(past24,)) # Remove orphaned details and ratings cursor.execute('DELETE FROM Details WHERE NOT EXISTS ' + '(SELECT * FROM Events WHERE source=Details.source AND event=Details.event);') cursor.execute('DELETE FROM Ratings WHERE NOT EXISTS '+ '(SELECT * FROM Events WHERE source=Ratings.source AND event=Ratings.event);') def usage(): print '%s -c' % sys.argv[0] print 'Connects to one or more DVBStreamer daemons, specified in .epgdb/adapters, to process and store EPG data.' print print '%s -x ' % sys.argv[0] print 'Exports the database as an XMLTV file () by connecting to the DVBStreamer daemons used to capture the data to find available services/channels' print print 'Format of .epgdb/adapters file' print '------------------------------' print 'One DVBStreamer host/adapter specified per line in the following format:' print '[:adapter[:[:]]]' print print 'host - Either an IP address of hostname' print 'adapter - The adapter number used by the DVBStreamer daemon (Default:0)' print 'username - Username used to authenitcate with the DVBStreamer daemon (Default:dvbstreamer)' print 'password - Password used to authenitcate with the DVBStreamer daemon (Default:control)' sys.exit(1) def process_host(host): if host[0] == '[': # IPv6 i = host.find(']') hostname = host[:i + 1] if len(host) > i + 1: rest = host[i + 2:] else: rest = '' else: tmp = host.find(':') if tmp == -1: rest = '' hostname = host else: rest = host[tmp + 1:] hostname = host[:tmp] username = 'dvbstreamer' password = 'control' if rest: parts = rest.split(':') adapter = int(parts[0]) if len(parts) > 1: username = parts[1] if len(parts) > 2: password = parts[2] else: adapter = 0 return (hostname, adapter, username, password) def capture_start(args): dbase = EPGDatabase(os.path.join(app_dir, 'database.db'), True, True) processors = [] for adapter in get_adapters(): processors.append(EPGProcessor(dbase, adapter[0], adapter[1], adapter[2], adapter[3])) while True: try: time.sleep(1.0) except KeyboardInterrupt: break except: traceback.print_exc() break for processor in processors: processor.stop() dbase.close() def get_services_info(services, adapter): connection = ControlConnection(*adapter) try: connection.open() for id,name in connection.get_services(): info = connection.get_service_info(id) net,ts,service = id.split('.') source = eval(info['Source']) services[id] = (name, '%s.%s.%04x' % (net, ts, source)) connection.close() except: traceback.print_exc() def format_time(secs): return time.strftime('%Y%m%d%H%M%s', time.gmtime(secs)) def export_xmltv(args): if len(args) < 1: usage() dbase = EPGDatabase(os.path.join(app_dir, 'database.db')) outfilename = args[0] services = {} for adapter in get_adapters(): get_services_info(services, adapter) outfile = open(outfilename, 'w') generator = XMLGenerator(outfile, 'UTF-8') generator.startDocument() generator.startElement('tv', {}) # Channels for id,(name, source) in services.items(): generator.startElement('channel', {'id':id}) generator.startElement('display-name', {}) generator.characters(name) generator.endElement('display-name') generator.endElement('channel') # Programmes for id,(name, source) in services.items(): for event in dbase.get_events(source): start = format_time(event[2]) stop = format_time(event[3]) generator.startElement('programme', {'start':start, 'stop':stop, 'channel':id}) details = dbase.get_details(source, event[1]) if 'title' in details: for lang,value in details['title']: generator.startElement('title', {'lang':lang}) generator.characters(value) generator.endElement('title') if 'description' in details: for lang,value in details['description']: generator.startElement('desc', {'lang':lang}) generator.characters(value) generator.endElement('desc') if 'content' in details: content = details['content'][0][1] generator.startElement('content', {}) generator.characters(content) generator.endElement('content') if 'series' in details: series = details['series'][0][1] generator.startElement('series', {}) generator.characters(series) generator.endElement('series') ratings = dbase.get_ratings(source, event[1]) for system,value in ratings: generator.startElement('rating', {'system':system}) generator.startElement('value', {}) generator.characters(value) generator.endElement('value') generator.endElement('rating') generator.endElement('programme') generator.endElement('tv') generator.endDocument() outfile.close() def get_adapters(): adapters = [] try: adaptersfile = open(os.path.join(app_dir, 'adapters'), 'r') for line in adaptersfile: line = line.strip() if line: adapters.append(process_host(line)) adaptersfile.close() except: traceback.print_exc() print 'WARNING: Failed to open adapters file, defaulting to localhost:0:dvbstreamer:control' if len(adapters) == 0: adapters = [('localhost', 0, 'dvbstreamer', 'control')] return adapters # Location of the user data for epgdb app_dir = '' def main(): global app_dir app_dir = os.path.expanduser('~/.epgdb') if not os.path.exists(app_dir): os.mkdir(app_dir) if len(sys.argv) < 2: usage() elif sys.argv[1] == '-c': capture_start(sys.argv[2:]) elif sys.argv[1] == '-x': export_xmltv(sys.argv[2:]) else: usage() if __name__ == '__main__': try: main() except SystemExit: raise except: traceback.print_exc() sys.exit(0)dvbstreamer-2.1.0/test/satellite.conf000066400000000000000000000010421217721213100176360ustar00rootroot00000000000000Mediatel:10949:v:0:27500:5001:5011:7401 Tele Lumiere:10949:v:0:27500:5101:5111:7402 Adjara TV:10949:v:0:27500:5401:5411:7405 Suryan Radio:10949:v:0:27500:0:5711:7448 IRN:10949:v:0:27500:0:5811:7449 Sun KTV:10949:v:0:27500:5901:5911:7450 ANB:10949:v:0:27500:6101:6111:7452 Sun TV +442083356780:10949:v:0:27500:6401:6411:7455 Al Mustakillah:10949:v:0:27500:6501:6511:7456 Cartoon Network:10949:v:0:27500:6601:6611:7457 DMC TV:10949:v:0:27500:6801:6811:7459 Prime TV:10949:v:0:27500:7001:7011:7461 Tapesh 2:10949:v:0:27500:7101:7111:7462dvbstreamer-2.1.0/test/terrestrial.conf000066400000000000000000000266001217721213100202170ustar00rootroot00000000000000BBC ONE:489833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:600:601:4163 BBC THREE:489833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:620:621:4351 BBC NEWS 24:489833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:640:641:4415 BBCi:489833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:4479 CBBC Channel:489833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:4671 BBC TWO:489833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:610:611:4227 ITV1:530167000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:520:521:8270 ITV2:530167000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:530:531:8334 ITV3:530167000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:540:541:8304 ITV News:530167000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:550:551:8591 Teletext:530167000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:8568 Teletext Cars:530167000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:8634 Teletext on 4:530167000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:8768 Channel 4:530167000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:560:561:8384 E4:530167000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:570:571:8448 More 4:530167000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:590:591:8442 Quiz Call:530167000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:580:581:8452 five:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:6017:6018:12866 QVC:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:6049:6050:13120 abc1:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:14208 bid tv:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:6273:6274:14272 BBC Radio 1:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:6210:14336 BBC Radio 2:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:6226:14400 BBC Radio 3:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:6242:14464 BBC Radio 4:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:6258:14528 heat:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:6306:14592 MOJO:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:6322:14656 Ttext Holidays:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:6354:14784 TCM:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:6369:6370:14848 UKTV Style:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:6417:6418:14976 DiscoveryRTime:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:15104 Discovery:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:6449:6450:15168 Television X:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:15232 Boomerang:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:15488 UKTV Gold:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:6497:6498:15552 price-drop tv:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:6513:6514:15616 Red Hot:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:15680 Xtraview:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:15744 Teachers' TV:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:15808 Bloomberg:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:15872 UKTV Food:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:15936 Eurosport UK:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:6609:6610:16000 Toonami:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:16064 Cartoon Nwk:545833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:15040 Community:562166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:19968 703:562166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:19584 702:562166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:204:411:19520 701:562166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:203:407:19456 BBC Asian Net.:562166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:435:18240 1Xtra BBC:562166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:434:18176 BBC 7:562166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:433:18112 BBC 6 Music:562166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:432:18048 BBC 5L SportsX:562166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:431:17984 BBC R5 Live:562166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:430:17920 CBeebies:562166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:16960 BBC FOUR:562166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:201:401:16832 BBC PARLMNT:562166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:403:16768 3C:513833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1801:23040 Premier Radio:513833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1701:22976 talkSPORT:513833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1101:22592 E4+1:513833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:501:502:22336 UKTV History:513833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:401:402:22272 Sky Travel:513833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:301:302:22208 Sky Spts News:513833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:201:202:22144 Sky News:513833330:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:101:102:22080 4TVinteractive:570166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:27008 YooPlay Games:570166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:26944 Q:570166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1901:26688 Magic:570166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1801:26624 The Hits Radio:570166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1701:26560 BBC World Sv.:570166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1601:26496 oneword:570166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1501:26432 smooth fm:570166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1401:26368 Kerrang!:570166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1301:26304 Smash Hits!:570166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1201:26240 Kiss:570166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1101:26176 Ideal World:570166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:501:502:25920 f tn:570166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:301:302:25856 UKTV Br'tIdeas:570166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:25792 TMF:570166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:201:202:25728 The HITS:570166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:101:102:25664 Men & Motors:570166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:601:602:27072