ocaml-ffmpeg-0.4.1/0000755000175000017500000000000013543206341013746 5ustar smimramsmimramocaml-ffmpeg-0.4.1/COPYING0000644000175000017500000006347613543206341015021 0ustar smimramsmimram GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! ocaml-ffmpeg-0.4.1/m4/0000755000175000017500000000000013543206341014266 5ustar smimramsmimramocaml-ffmpeg-0.4.1/m4/ocaml.m40000644000175000017500000002022413543206341015623 0ustar smimramsmimramdnl autoconf macros for OCaml dnl dnl Copyright © 2009 Richard W.M. Jones dnl Copyright © 2009 Stefano Zacchiroli dnl Copyright © 2000-2005 Olivier Andrieu dnl Copyright © 2000-2005 Jean-Christophe Filliâtre dnl Copyright © 2000-2005 Georges Mariano dnl dnl For documentation, please read the ocaml.m4 man page. AC_DEFUN([AC_PROG_OCAML], [dnl # checking for ocamlc AC_CHECK_TOOL([OCAMLC],[ocamlc],[no]) if test "$OCAMLC" = "no"; then AC_MSG_ERROR(Cannot find ocamlc.) fi AC_SUBST([OCAMLC]) OCAMLVERSION=`$OCAMLC -v | sed -n -e 's|.*version* *\(.*\)$|\1|p'` AC_MSG_RESULT([OCaml version is $OCAMLVERSION]) # Check if version is >= 3.12.0 AC_MSG_CHECKING([if ocaml compiler supports first-class modules]) AS_VERSION_COMPARE([$OCAMLVERSION],[3.12.0],[],[OCAML_HAS_FIRST_CLASS_MODULES="yes"],[OCAML_HAS_FIRST_CLASS_MODULES="yes"]) if test -n "${OCAML_HAS_FIRST_CLASS_MODULES}"; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi AC_SUBST(OCAML_HAS_FIRST_CLASS_MODULES) # If OCAMLLIB is set, use it if test "$OCAMLLIB" = ""; then OCAMLLIB=`$OCAMLC -where 2>/dev/null || $OCAMLC -v|tail -1|cut -d ' ' -f 4` else AC_MSG_RESULT([OCAMLLIB previously set; preserving it.]) fi AC_MSG_RESULT([OCaml library path is $OCAMLLIB]) AC_SUBST([OCAMLVERSION]) AC_SUBST([OCAMLLIB]) # checking for ocamlopt AC_CHECK_TOOL_STRICT([OCAMLOPT],[ocamlopt],[no]) OCAMLBEST=byte OCAML_DYNLINK=byte-dyn if test "$OCAMLOPT" = "no"; then AC_MSG_WARN([Cannot find ocamlopt; bytecode compilation only.]) else TMPVERSION=`$OCAMLOPT -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' ` if test "$TMPVERSION" != "$OCAMLVERSION" ; then AC_MSG_RESULT([versions differs from ocamlc; ocamlopt discarded.]) OCAMLOPT=no else OCAMLBEST="byte opt" OCAML_DYNLINK="byte-dyn opt-dyn" fi fi AC_SUBST([OCAMLBEST]) AC_SUBST([OCAML_DYNLINK]) # checking for ocamlc.opt AC_CHECK_TOOL_STRICT([OCAMLCDOTOPT],[ocamlc.opt],[no]) if test "$OCAMLCDOTOPT" != "no"; then TMPVERSION=`$OCAMLCDOTOPT -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' ` if test "$TMPVERSION" != "$OCAMLVERSION" ; then AC_MSG_RESULT([versions differs from ocamlc; ocamlc.opt discarded.]) else OCAMLC=$OCAMLCDOTOPT fi fi # checking for ocamlopt.opt if test "$OCAMLOPT" != "no" ; then AC_CHECK_TOOL_STRICT([OCAMLOPTDOTOPT],[ocamlopt.opt],[no]) if test "$OCAMLOPTDOTOPT" != "no"; then TMPVERSION=`$OCAMLOPTDOTOPT -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' ` if test "$TMPVERSION" != "$OCAMLVERSION" ; then AC_MSG_RESULT([version differs from ocamlc; ocamlopt.opt discarded.]) else OCAMLOPT=$OCAMLOPTDOTOPT fi fi fi AC_SUBST([OCAMLOPT]) # checking for ocaml toplevel AC_CHECK_TOOL_STRICT([OCAML],[ocaml],[no]) AC_SUBST([OCAML]) # checking for ocamldep AC_CHECK_TOOL_STRICT([OCAMLDEP],[ocamldep],[no]) if test "$OCAMLDEP" = "no"; then AC_MSG_ERROR(Cannot find ocamlmklib.) else AC_CHECK_TOOL_STRICT([OCAMLDEPOPT],[ocamldep.opt],[no]) if test "$OCAMLDEPOPT" != "no"; then OCAMLDEP=$OCAMLDEPOPT fi fi AC_SUBST([OCAMLDEP]) # checking for ocamlmktop AC_CHECK_TOOL_STRICT([OCAMLMKTOP],[ocamlmktop],[no]) AC_SUBST([OCAMLMKTOP]) # checking for ocamlmklib AC_CHECK_TOOL_STRICT([OCAMLMKLIB],[ocamlmklib],[no]) if test "$OCAMLMKLIB" = "no"; then AC_MSG_ERROR(Cannot find ocamlmklib.) fi AC_SUBST([OCAMLMKLIB]) # checking for ocamldoc AC_CHECK_TOOL([OCAMLDOC],[ocamldoc],[no]) if test "$OCAMLDOC" != "no"; then AC_CHECK_TOOL([OCAMLDOCOPT],[ocamldoc.opt],[no]) if test "$OCAMLDOCOPT" != "no"; then OCAMLDOC=$OCAMLDOCOPT fi fi AC_SUBST([OCAMLDOC]) # checking for ocamlbuild AC_CHECK_TOOL([OCAMLBUILD],[ocamlbuild],[no]) AC_SUBST([OCAMLBUILD]) ]) AC_DEFUN([AC_PROG_OCAMLLEX], [dnl # checking for ocamllex AC_CHECK_TOOL([OCAMLLEX],[ocamllex],[no]) if test "$OCAMLLEX" != "no"; then AC_CHECK_TOOL([OCAMLLEXDOTOPT],[ocamllex.opt],[no]) if test "$OCAMLLEXDOTOPT" != "no"; then OCAMLLEX=$OCAMLLEXDOTOPT fi fi AC_SUBST([OCAMLLEX]) ]) AC_DEFUN([AC_PROG_OCAMLYACC], [dnl AC_CHECK_TOOL([OCAMLYACC],[ocamlyacc],[no]) AC_SUBST([OCAMLYACC]) ]) AC_DEFUN([AC_PROG_CAMLP4], [dnl AC_REQUIRE([AC_PROG_OCAML])dnl AC_ARG_ENABLE([camlp4], AC_HELP_STRING([--disable-camlp4], [disable camlp4 auto-detection.])) # checking for camlp4 if test "x$enable_camlp4" != "xno"; then AC_CHECK_TOOL_STRICT([CAMLP4],[camlp4],[no]) if test "$CAMLP4" != "no"; then TMPVERSION=`$CAMLP4 -v 2>&1| sed -n -e 's|.*version *\(.*\)$|\1|p' | tr -d '\r'` if test "$TMPVERSION" != "$OCAMLVERSION" ; then AC_MSG_RESULT([versions differs from ocamlc]) CAMLP4=no fi fi AC_SUBST([CAMLP4]) # checking for companion tools AC_CHECK_TOOL_STRICT([CAMLP4BOOT],[camlp4boot],[no]) AC_CHECK_TOOL_STRICT([CAMLP4O],[camlp4o],[no]) AC_CHECK_TOOL_STRICT([CAMLP4OF],[camlp4of],[no]) AC_CHECK_TOOL_STRICT([CAMLP4OOF],[camlp4oof],[no]) AC_CHECK_TOOL_STRICT([CAMLP4ORF],[camlp4orf],[no]) AC_CHECK_TOOL_STRICT([CAMLP4PROF],[camlp4prof],[no]) AC_CHECK_TOOL_STRICT([CAMLP4R],[camlp4r],[no]) AC_CHECK_TOOL_STRICT([CAMLP4RF],[camlp4rf],[no]) else CAMLP4=no CAMLP4BOOT=no CAMLP4O=no CAMLP4OF=no CAMLP4OOF=no CAMLP4ORF=no CAMLP4PROF=no CAMLP4R=no CAMLP4RF=no fi AC_SUBST([CAMLP4BOOT]) AC_SUBST([CAMLP4O]) AC_SUBST([CAMLP4OF]) AC_SUBST([CAMLP4OOF]) AC_SUBST([CAMLP4ORF]) AC_SUBST([CAMLP4PROF]) AC_SUBST([CAMLP4R]) AC_SUBST([CAMLP4RF]) ]) AC_DEFUN([AC_PROG_CAMLIDL], [dnl AC_CHECK_TOOL(CAMLIDL,camlidl,no) AC_SUBST(CAMLIDL) ]) AC_DEFUN([AC_PROG_FINDLIB], [dnl AC_REQUIRE([AC_PROG_OCAML])dnl # checking for ocamlfind AC_CHECK_TOOL([OCAMLFIND],[ocamlfind],[no]) AC_SUBST([OCAMLFIND]) ]) AC_DEFUN([AC_CHECK_OCAML_STDLIB], [dnl AC_REQUIRE([AC_PROG_FINDLIB])dnl AC_MSG_CHECKING([for ocaml standard library path]) OCAML_STDLIB=`$OCAMLFIND printconf stdlib` AC_SUBST(OCAML_STDLIB) AC_MSG_RESULT([$OCAML_STDLIB]) ]) dnl Thanks to Jim Meyering for working this next bit out for us. dnl XXX We should define AS_TR_SH if it's not defined already dnl (eg. for old autoconf). AC_DEFUN([AC_CHECK_OCAML_PKG], [dnl AC_REQUIRE([AC_PROG_FINDLIB])dnl AC_ARG_WITH([$1-dir],AC_HELP_STRING([--with-$1-dir=path], [use "path" as the location of ocaml-$1 (autodetected by default)])) AC_MSG_CHECKING([for OCaml library $1]) unset found unset pkg found=no if test -z "$with_$1_dir"; then for pkg in $1 $2 ; do if $OCAMLFIND query $pkg >/dev/null 2>/dev/null; then AC_MSG_RESULT([found]) AS_TR_SH([OCAML_PKG_$1])=$pkg AS_TR_SH([OCAML_DIR_$1])=`$OCAMLFIND query $1` found=yes break fi done else echo $with_$1_dir | grep ^/ > /dev/null 2>&1 || with_$1_dir=$PWD/$with_$1_dir AS_TR_SH([OCAML_PKG_$1])=no OCAML_DIR_$1="$with_$1_dir" found=yes fi if test "$found" = "no" ; then AC_MSG_RESULT([not found]) AS_TR_SH([OCAML_HAS_$1])=no AS_TR_SH([OCAML_PKG_$1])=no else AS_TR_SH([OCAML_HAS_$1])=yes fi AC_SUBST(AS_TR_SH([OCAML_PKG_$1])) ]) AC_DEFUN([AC_CHECK_OCAML_MODULE], [dnl AC_MSG_CHECKING([for OCaml module $2]) cat > conftest.ml <&5 2>&5 ; then found=yes break fi done if test "$found" ; then AC_MSG_RESULT([$$1]) else AC_MSG_RESULT([not found]) $1=no fi AC_SUBST([$1]) ]) dnl XXX Cross-compiling AC_DEFUN([AC_CHECK_OCAML_WORD_SIZE], [dnl AC_REQUIRE([AC_PROG_OCAML])dnl AC_MSG_CHECKING([for OCaml compiler word size]) cat > conftest.ml < conftest.ml <]) CFLAGS=${old_CFLAGS} AC_ARG_ENABLE([debugging], AC_HELP_STRING( [--disable-debugging], [disable debugging information (backtrace printing in particular)])) if test "$enable_debugging" \!= "no" ; then OCAMLFLAGS="$OCAMLFLAGS -g" fi AC_ARG_WITH([ocaml-warnings], AC_HELP_STRING( [--with-ocaml-warnings=WARNINGS], [Enable specific list of ocaml compiler warnings.])) if test -n "${with_ocaml_warnings}" ; then OCAMLFLAGS="$OCAMLFLAGS -w +${with_ocaml_warnings}" else OCAMLFLAGS="$OCAMLFLAGS -w +A-4@5-7@8-9@11@12@20-35-44-45-50" fi AC_ARG_ENABLE([profiling], AC_HELP_STRING( [--enable-profiling], [compile to generate profiling infomation])) if test "x$enable_profiling" = "xyes" ; then OCAMLNCFLAGS="$OCAMLNCFLAGS -p" fi AC_SUBST(OCAMLNCFLAGS) AC_ARG_ENABLE([nativecode], AC_HELP_STRING( [--disable-nativecode], [compile in bytecode])) AC_ARG_ENABLE([custom], AC_HELP_STRING( [--disable-custom], [disable custom mode for bytecode compilation (use if you know what you are doing)])) CAMLLIBPATH=$OCAMLLIB AC_SUBST(CAMLLIBPATH) AC_SUBST(CAMLIDL) AC_SUBST(OCAMLFLAGS) ]) ocaml-ffmpeg-0.4.1/m4/cpp_check_class.m40000644000175000017500000000114713543206341017637 0ustar smimramsmimramdnl $1: linker lib name dnl $2: included file dnl $3: tested class dnl $4: emitted variable AC_DEFUN([AC_CPP_CHECK_CLASS], [AC_LANG_PUSH([C++]) SAVED_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -l$1" AC_MSG_CHECKING([for class $3 in $1 library]) AC_LINK_IFELSE( [AC_LANG_PROGRAM([#include <$2>], [$3 *x = NULL])], [TEST_LIBS="$TEST_LIBS -l$1"] [RESULT=1], [RESULT=]) if test -z $RESULT; then AC_MSG_RESULT([not found]) else AC_DEFINE([$4], [1], [Defined if class $3 has been found in $1 library]) AC_MSG_RESULT([ok]) fi $4=$RESULT AC_SUBST([$4]) LDFLAGS=$SAVED_LDFLAGS AC_LANG_POP([C++])]) ocaml-ffmpeg-0.4.1/m4/pkg_config.m40000644000175000017500000000573113543206341016644 0ustar smimramsmimramdnl Taken an modified from: dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- dnl dnl Copyright © 2004 Scott James Remnant . dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that program. dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_ERROR([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG AC_ARG_VAR([PKG_CONFIG_OPTIONS], [Additional options passed when invoking pkg-config]) dnl PKG_CONFIG_CHECK_MODULE([name],[min-version]) dnl min-version is optional AC_DEFUN([PKG_CONFIG_CHECK_MODULE], [if test -n "$2"; then PKGCONFIG_CHECK_VERSION=" >= $2" else PKGCONFIG_CHECK_VERSION="" fi AC_MSG_CHECKING([whether pkg-config knows about $1${PKGCONFIG_CHECK_VERSION}]) if ! $PKG_CONFIG $PKG_CONFIG_OPTIONS --exists $1; then AC_MSG_ERROR([$1.pc not found.. Do you need to set PKG_CONFIG_PATH?]) else if test -n "$2"; then if ! $PKG_CONFIG $PKG_CONFIG_OPTIONS --atleast-version=$2 $1; then $1_VERSION="`$PKG_CONFIG $PKG_CONFIG_OPTIONS --modversion $1`" AC_MSG_ERROR([requires version >= $2, found ${$1_VERSION}]) else AC_MSG_RESULT([ok]) fi else AC_MSG_RESULT([ok]) fi fi CFLAGS="$CFLAGS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --cflags $1`" CPPFLAGS="$CPPFLAGS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --cflags $1`" LIBS="$LIBS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-l $1`" LDFLAGS="$LDFLAGS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-other $1`" LIBDIRS="$LIBDIRS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-L $1`" ]) ocaml-ffmpeg-0.4.1/m4/base_checks.m40000644000175000017500000001237613543206341016773 0ustar smimramsmimramAC_DEFUN([AC_BASE_CHECKS], [AC_REQUIRE([AC_PROG_CC]) dnl check for base compilers AC_CANONICAL_HOST() dnl Detect the target toolchain AC_MSG_CHECKING([target toolchain]) case "${host_os}" in linux*) TARGET_TOOLCHAIN="linux" ;; mingw*) TARGET_TOOLCHAIN="mingw" ;; cygwin*) TARGET_TOOLCHAIN="cygwin" ;; darwin*) TARGET_TOOLCHAIN="darwin" ;; *) TARGET_TOOLCHAIN="other" ;; esac AC_MSG_RESULT([$TARGET_TOOLCHAIN]) AC_SUBST(TARGET_TOOLCHAIN) # AC_CANONICAL_HOST needs those files AUTOCONF_INSTALL_FILES="config.guess config.sub install-sh m4/*.m4" AC_SUBST(AUTOCONF_INSTALL_FILES) AC_PROG_CC() AC_PROG_INSTALL() AC_CHECK_TOOL([AR],[ar],no) AC_SUBST(AR) AC_CHECK_OCAML_COMPILERS() dnl add some flags AC_DETECT_PIC_FLAGS() CXXFLAGS="$CXXFLAGS $PIC_FLAGS" CPPFLAGS="$CPPFLAGS $PIC_FLAGS" # Add prefix to compilation variables # if passed if test "x$prefix" != "xNONE"; then CFLAGS="$CFLAGS -I$prefix/include" LDFLAGS="$LDFLAGS -L$prefix/lib" CPPFLAGS="$CPPFLAGS -I$prefix/include" CXXFLAGS="$CXXFLAGS -I$prefix/include" fi ]) dnl Check for basic stuff dnl The following was stolen from mesa.. dnl A few convenience macros for Mesa, mostly to keep all the platform dnl specifics out of configure.ac. dnl AC_DETECT_PIC_FLAGS() dnl dnl Find out whether to build PIC code using the option --enable-pic and dnl the configure enable_static/enable_shared settings. If PIC is needed, dnl figure out the necessary flags for the platform and compiler. dnl dnl The platform checks have been shamelessly taken from libtool and dnl stripped down to just what's needed for Mesa. See _LT_COMPILER_PIC in dnl /usr/share/aclocal/libtool.m4 or dnl http://git.savannah.gnu.org/gitweb/?p=libtool.git;a=blob;f=libltdl/m4/libtool.m4;hb=HEAD dnl AC_DEFUN([AC_DETECT_PIC_FLAGS], [AC_ARG_VAR([PIC_FLAGS], [compiler flags for PIC code]) AC_ARG_ENABLE([pic], [AS_HELP_STRING([--disable-pic], [compile PIC objects @<:@default=enabled for shared builds on supported platforms@:>@])], [enable_pic="$enableval" test "x$enable_pic" = x && enable_pic=auto], [enable_pic=auto]) dnl disable PIC by default for static builds if test "$enable_pic" = auto && test "$enable_static" = yes; then enable_pic=no fi dnl if PIC hasn't been explicitly disabled, try to figure out the flags if test "$enable_pic" != no; then AC_MSG_CHECKING([for $CC option to produce PIC]) dnl allow the user's flags to override if test "x$PIC_FLAGS" = "x"; then dnl see if we're using GCC if test "x$GCC" = "xyes"; then case "$host_os" in aix*|beos*|cygwin*|irix5*|irix6*|osf3*|osf4*|osf5*) dnl PIC is the default for these OSes. ;; mingw*|os2*|pw32*) dnl This hack is so that the source file can tell whether dnl it is being built for inclusion in a dll (and should dnl export symbols for example). PIC_FLAGS="-DDLL_EXPORT" ;; darwin*|rhapsody*) dnl PIC is the default on this platform dnl Common symbols not allowed in MH_DYLIB files PIC_FLAGS="-fno-common" ;; hpux*) dnl PIC is the default for IA64 HP-UX and 64-bit HP-UX, dnl but not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) ;; *) PIC_FLAGS="-fPIC" ;; esac ;; *) dnl Everyone else on GCC uses -fPIC PIC_FLAGS="-fPIC" ;; esac else dnl !GCC case "$host_os" in hpux9*|hpux10*|hpux11*) dnl PIC is the default for IA64 HP-UX and 64-bit HP-UX, dnl but not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) dnl +Z the default ;; *) PIC_FLAGS="+Z" ;; esac ;; linux*|k*bsd*-gnu) case `basename "$CC"` in icc*|ecc*|ifort*) PIC_FLAGS="-KPIC" ;; pgcc*|pgf77*|pgf90*|pgf95*) dnl Portland Group compilers (*not* the Pentium gcc dnl compiler, which looks to be a dead project) PIC_FLAGS="-fpic" ;; ccc*) dnl All Alpha code is PIC. ;; xl*) dnl IBM XL C 8.0/Fortran 10.1 on PPC PIC_FLAGS="-qpic" ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*|*Sun\ F*) dnl Sun C 5.9 or Sun Fortran PIC_FLAGS="-KPIC" ;; esac esac ;; solaris*) PIC_FLAGS="-KPIC" ;; sunos4*) PIC_FLAGS="-PIC" ;; esac fi fi AC_MSG_RESULT([$PIC_FLAGS]) fi AC_SUBST([PIC_FLAGS]) ])dnl PIC_FLAGS ocaml-ffmpeg-0.4.1/m4/strict_check_tool.m40000644000175000017500000000031013543206341020224 0ustar smimramsmimramAC_DEFUN([AC_CHECK_TOOL_STRICT], [AC_CHECK_PROG([$1], [${ac_tool_prefix}$2], [${ac_tool_prefix}$2], [$3], [$4])]) AC_DEFUN([AC_PATH_TOOL_STRICT], [AC_PATH_PROG([$1], [${ac_tool_prefix}$2], [$3])]) ocaml-ffmpeg-0.4.1/m4/detect_binding.m40000644000175000017500000001127413543206341017477 0ustar smimramsmimramdnl =========================================================================== dnl Helper macro to detect an optional binding m4_defun([AC_OCAML_COMPARE_VERSION], [if test -z "$2" ; then VERSION_OK=yes else AS_VERSION_COMPARE([$1],[$2], [VERSION_OK=], [VERSION_OK=yes], [VERSION_OK=yes]) fi]) m4_defun([AC_OCAML_CHECK_DEPS], [dnl m4_define([deps],[m4_translit([$1],['a-z'],['A-Z'])]) DEPS_CHECK=yes for i in deps(); do eval "dep_check=\$W_$i" if test -z "${dep_check}"; then DEPS_CHECK= break fi done]) m4_defun([AC_MSG_RESULT_NOT], [ifelse([$1],[],[AC_MSG_RESULT($2)],[AC_MSG_ERROR($2)])]) AC_DEFUN([AC_CHECK_OCAML_BINDING],[dnl m4_define([BINDING],[m4_translit([$1],['a-z.-'],['A-Z__'])]) m4_define([binding],[m4_translit([$1],['A-Z.-'],['a-z__'])]) dnl $1 = PKG_NAME dnl $2 = PKG_VERSION dnl $3 = PKG_DEPS dnl $4 = PKG_MANDATORY dnl $5 = PKG_USED (for instance sdl.mixer au lieu of sdl. Should only be used for bindings not provided by us..) dnl $6 = PKG_CMA (used for duppy.syntax and flac.ogg when locally compiled..) if test -n "$5"; then BINDING_PKGS="$5" else BINDING_PKGS="$1" fi AC_ARG_WITH([binding()-dir], AC_HELP_STRING( [--with-binding()-dir=path], [look for ocaml-binding() library in "path" (autodetected by default)])) dnl Version stuff m4_define([VERSION_CHECK],[ifelse([$2],[],[],[ >= $2])]) AC_MSG_CHECKING([for ocaml $1 module[]VERSION_CHECK()]) OCAML_CHECK="${OCAMLFIND} query $1" dnl This (horrible) macro does the following: dnl Detect optional binding dnl If provided by ocamlfind, dnl fills liquidsoap_ocamlcflags with "-package deps" for dnl each dependency dnl If provided by us, fills dnl liquidsoap_ocamlcflags with "-I /path/to/ocaml-foo/src" dnl and liquidsoap_ocamllfflags with "foo.cmxa" AC_OCAML_CHECK_DEPS([$3]) if test -z $DEPS_CHECK; then AC_MSG_RESULT([[]binding() needs $3]) else if test -z "${with_[]binding()_dir}" ; then if ! ${OCAML_CHECK} > /dev/null 2>&1 ; then AC_MSG_RESULT_NOT([$4],[Not found.]) else BINDING()_version="`${OCAMLFIND} query -format "%v" $1 2>/dev/null`" AC_OCAML_COMPARE_VERSION([${[]BINDING()_version}],[$2]) if test -z "${VERSION_OK}"; then AC_MSG_RESULT_NOT([$4],[requires version >= $2 found ${[]BINDING()_version}.]) else BINDING()_PACKAGES="`${OCAMLFIND} query -separator " " -format "-package %p" $BINDING_PKGS 2>/dev/null`" liquidsoap_ocamlcflags="${liquidsoap_ocamlcflags} ${[]BINDING()_PACKAGES}" W_[]BINDING()=yes LIBS_VERSIONS="${LIBS_VERSIONS} $1=$[]BINDING()_version" AC_MSG_RESULT(ok) fi fi else BINDING()_STOP_CHECK= BINDING()_version=changequote({,})"[unknown version]"changequote([,]) BINDING()_requires= if test -r ${with_[]binding()_dir}/META >/dev/null 2>&1; then # Grab version BINDING()_version=`cat "${with_[]binding()_dir}/META" | grep version | cut -d'=' -f 2 | tr -d ' ' | tr -d '"' | head -n 1` AC_OCAML_COMPARE_VERSION([${[]BINDING()_version}],[$2]) if test -z "${VERSION_OK}"; then AC_MSG_RESULT_NOT([$4],[requires version >= $2 found ${[]BINDING()_version}.]) BINDING()_STOP_CHECK=yes fi BINDING()_requires=`cat "${with_[]binding()_dir}/META" | grep 'requires' | cut -d '=' -f 2 | tr -d '"'` BINDING()_path="${with_[]binding()_dir}" else BINDING()_path=`${OCAMLFIND} -query $1 2>/dev/null` if ! test -z "$2"; then AC_MSG_RESULT_NOT([$4],[cannot find version from META file.]) BINDING()_STOP_CHECK=yes fi fi if test -z "${BINDING()_STOP_CHECK}"; then BINDING()_PACKAGES="`${OCAMLFIND} query -separator " " -format "-package %p" $BINGING_PKGS 2>/dev/null`" echo ${with_[]binding()_dir} | grep ^/ > /dev/null 2>&1 \ || with_[]binding()_dir=${PWD}/${with_[]binding()_dir} liquidsoap_ocamlcflags="${liquidsoap_ocamlcflags} -I ${with_[]binding()_dir} ${[]BINDING()_PACKAGES}" # We need to recurse here because # some package may not be registered using ocamlfind if test -n "$6"; then BINDING()_CMA=$6.${cma} else BINDING()_CMA=$1.${cma} fi for i in ${[]BINDING()_requires}; do BINDING()_PACKAGES="${[]BINDING()_PACKAGES} `${OCAMLFIND} query -separator " " -format "-package %p" $i 2>/dev/null`" done liquidsoap_ocamllflags="${liquidsoap_ocamllflags} ${[]BINDING()_PACKAGES} ${[]BINDING()_CMA}" W_[]BINDING()=yes LIBS_VERSIONS="${LIBS_VERSIONS} $1=$[]BINDING()_version" AC_MSG_RESULT(ok) fi fi fi AC_SUBST(W_[]BINDING()) if test -z "${W_[]BINDING()}" ; then w_[]BINDING()="no (requires $1)" else w_[]BINDING()=yes fi]) ocaml-ffmpeg-0.4.1/config.guess0000755000175000017500000012637313543206341016302 0ustar smimramsmimram#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2018 Free Software Foundation, Inc. timestamp='2018-02-24' # 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 3 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, 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 Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -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 1992-2018 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 case "$UNAME_SYSTEM" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval "$set_cc_for_build" cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" # If ldd exists, use it to detect musl libc. if command -v ldd >/dev/null && \ ldd --version 2>&1 | grep -q ^musl then LIBC=musl fi ;; esac # 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 tuples: *-*-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=`(uname -p 2>/dev/null || \ "/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 ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine="${arch}${endian}"-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) and ABI. case "$UNAME_MACHINE_ARCH" in earm*) os=netbsdelf ;; 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 # Determine ABI tags. case "$UNAME_MACHINE_ARCH" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; 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/[-_].*//' | cut -d. -f1,2` ;; 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}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" exit ;; *:MidnightBSD:*:*) echo "$UNAME_MACHINE"-unknown-midnightbsd"$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 ;; *:Sortix:*:*) echo "$UNAME_MACHINE"-unknown-sortix exit ;; *:Redox:*:*) echo "$UNAME_MACHINE"-unknown-redox exit ;; mips:OSF1:*.*) echo mips-dec-osf1 exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix"$UNAME_RELEASE" exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux"$UNAME_RELEASE" exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval "$set_cc_for_build" SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos"$UNAME_RELEASE" exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos"$UNAME_RELEASE" ;; sun4) echo sparc-sun-sunos"$UNAME_RELEASE" ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos"$UNAME_RELEASE" exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint"$UNAME_RELEASE" exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint"$UNAME_RELEASE" exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint"$UNAME_RELEASE" exit ;; m68k:machten:*:*) echo m68k-apple-machten"$UNAME_RELEASE" exit ;; powerpc:machten:*:*) echo powerpc-apple-machten"$UNAME_RELEASE" exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix"$UNAME_RELEASE" exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix"$UNAME_RELEASE" exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix"$UNAME_RELEASE" exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos"$UNAME_RELEASE" exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] then if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ [ "$TARGET_BINARY_INTERFACE"x = x ] then echo m88k-dg-dgux"$UNAME_RELEASE" else echo m88k-dg-dguxbcs"$UNAME_RELEASE" fi else echo i586-dg-dgux"$UNAME_RELEASE" fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` 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:4.4BSD:*) 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:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case "$UNAME_PROCESSOR" in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; i*:CYGWIN*:*) echo "$UNAME_MACHINE"-pc-cygwin exit ;; *:MINGW64*:*) echo "$UNAME_MACHINE"-pc-mingw64 exit ;; *:MINGW*:*) echo "$UNAME_MACHINE"-pc-mingw32 exit ;; *:MSYS*:*) echo "$UNAME_MACHINE"-pc-msys 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 ;; i*:UWIN*:*) echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-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-$LIBC`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 "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" exit ;; i*86:Minix:*:*) echo "$UNAME_MACHINE"-pc-minix exit ;; aarch64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" 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=gnulibc1 ; fi echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$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-"$LIBC" else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi else echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf fi fi exit ;; avr32*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; cris:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; crisv32:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; e2k:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; frv:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; hexagon:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:Linux:*:*) echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; ia64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; k1om:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m32r*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m68*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" 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-$LIBC"; exit; } ;; mips64el:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-"$LIBC" exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; padre:Linux:*:*) echo sparc-unknown-linux-"$LIBC" exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-"$LIBC" 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-"$LIBC" ;; PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; *) echo hppa-unknown-linux-"$LIBC" ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-"$LIBC" exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-"$LIBC" exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-"$LIBC" exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-"$LIBC" exit ;; riscv32:Linux:*:* | riscv64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" exit ;; sh64*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sh*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; tile*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; vax:Linux:*:*) echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) if objdump -f /bin/sh | grep -q elf32-x86-64; then echo "$UNAME_MACHINE"-pc-linux-"$LIBC"x32 else echo "$UNAME_MACHINE"-pc-linux-"$LIBC" fi exit ;; xtensa*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" 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.*:*) 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 configure 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 ;; x86_64:Haiku:*:*) echo x86_64-unknown-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 ;; SX-ACE:SUPER-UX:*:*) echo sxace-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 eval "$set_cc_for_build" if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then 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 case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-*:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk"$UNAME_RELEASE" exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk"$UNAME_RELEASE" exit ;; NSR-*:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk"$UNAME_RELEASE" exit ;; NSV-*:NONSTOP_KERNEL:*:*) echo nsv-tandem-nsk"$UNAME_RELEASE" exit ;; NSX-*:NONSTOP_KERNEL:*:*) echo nsx-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 ;; x86_64:VMkernel:*:*) echo "$UNAME_MACHINE"-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; esac echo "$0: unable to guess system type" >&2 case "$UNAME_MACHINE:$UNAME_SYSTEM" in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&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-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ocaml-ffmpeg-0.4.1/Makefile.in0000644000175000017500000000160113543206341016011 0ustar smimramsmimramPROGNAME := ocaml-ffmpeg DISTFILES := @AUTOCONF_INSTALL_FILES@ CHANGES COPYING Makefile.in README.md \ bootstrap configure configure.ac \ src/*.ml src/*.mli src/*.c src/*.h src/Makefile.in src/META.in \ src/OCamlMakefile \ examples/Makefile examples/*/*.ml examples/*/Makefile examples/*/OCamlMakefile \ test/*.ml test/Makefile test/OCamlMakefile VERSION = @VERSION@ all clean install uninstall: $(MAKE) -C src $@ distclean: clean $(MAKE) -C examples clean $(MAKE) -C test clean doc: $(MAKE) -C src htdoc mkdir -p doc rm -rf doc/html mv src/doc/ffmpeg/html doc rm -rf src/doc dist: rm -rf $(PROGNAME)-$(VERSION) mkdir $(PROGNAME)-$(VERSION) cp -R -L --parents $(DISTFILES) $(PROGNAME)-$(VERSION) tar zcvf ../$(PROGNAME)-$(VERSION).tar.gz $(PROGNAME)-$(VERSION) rm -rf $(PROGNAME)-$(VERSION) test: distclean all $(MAKE) -C examples $@ $(MAKE) -C test $@ .PHONY: dist doc ocaml-ffmpeg-0.4.1/src/0000755000175000017500000000000013543206341014535 5ustar smimramsmimramocaml-ffmpeg-0.4.1/src/avdevice.mli0000644000175000017500000000712113543206341017027 0ustar smimramsmimram(** Tits module contains input and output devices for grabbing from and rendering to many common multimedia input/output software frameworks. *) open Avutil (** Return the audio input devices formats. *) val get_audio_input_formats : unit -> (input, audio)format list (** Return the default audio input device format. *) val get_default_audio_input_format : unit -> (input, audio)format (** Return the video input devices formats. *) val get_video_input_formats : unit -> (input, video)format list (** Return the default video input device format. *) val get_default_video_input_format : unit -> (input, video)format (** Return the audio output devices formats. *) val get_audio_output_formats : unit -> (output, audio)format list (** Return the default audio output device format. *) val get_default_audio_output_format : unit -> (output, audio)format (** Return the video output devices formats. *) val get_video_output_formats : unit -> (output, video)format list (** Return the default video output device format. *) val get_default_video_output_format : unit -> (output, video)format val open_audio_input : string -> input container (** Open the audio input device from its name. @raise Error if the device is not found. *) val open_default_audio_input : unit -> input container (** Open the default audio input device from its name. @raise Error if the device is not found. *) val open_video_input : string -> input container (** Open the video input device from its name. @raise Error if the device is not found. *) val open_default_video_input : unit -> input container (** Open the default video input device from its name. @raise Error if the device is not found. *) val open_audio_output : ?opts:opts -> string -> output container (** Open the audio output device from its name. @raise Error if the device is not found. *) val open_default_audio_output : ?opts:opts -> unit -> output container (** Open the default audio output device from its name. @raise Error if the device is not found. *) val open_video_output : ?opts:opts -> string -> output container (** Open the video output device from its name. @raise Error if the device is not found. *) val open_default_video_output : ?opts:opts -> unit -> output container (** Open the default video output device from its name. @raise Error if the device is not found. *) (** Application to device communication *) module App_to_dev : sig (** Application to device control messages *) type message = | None | Window_size of int * int * int * int | Window_repaint of int * int * int * int | Pause | Play | Toggle_pause | Set_volume of float | Mute | Unmute | Toggle_mute | Get_volume | Get_mute val control_messages : message list -> _ container -> unit (** [Avdevice.App_to_dev.control_messages msg_list device] send the [msg_list] list of control message to the [device]. @raise Error if the application to device control message failed. *) end (** Device to application communication *) module Dev_to_app : sig (** Device to application control messages *) type message = | None | Create_window_buffer of (int * int * int * int) option | Prepare_window_buffer | Display_window_buffer | Destroy_window_buffer | Buffer_overflow | Buffer_underflow | Buffer_readable of Int64.t option | Buffer_writable of Int64.t option | Mute_state_changed of bool | Volume_level_changed of float val set_control_message_callback : (message -> unit) -> _ container -> unit (** [Avdevice.Dev_to_app.set_control_message_callback callback device] set the [callback] for [device] message reception. *) end ocaml-ffmpeg-0.4.1/src/swresample.mli0000644000175000017500000002167013543206341017430 0ustar smimramsmimram(** This module perform audio resampling, rematrixing and sample format conversion operations. *) open Avutil open Swresample_options (**/**) type vector_kind = Str | P_Str | Fa | P_Fa | Ba | P_Ba | Frm (**/**) (** Audio data modules for Swresample module input and output parameterization. *) module type AudioData = sig type t val vk : vector_kind val sf : Avutil.Sample_format.t end type options = [dither_type | engine | filter_type] type ('i, 'o) ctx (** Functor building an implementation of the swresample structure with parameterized input an output audio data types *) module Make (I : AudioData) (O : AudioData) : sig type t = (I.t, O.t) ctx val create : ?options:options list -> Channel_layout.t -> ?in_sample_format:Sample_format.t -> int -> Channel_layout.t -> ?out_sample_format:Sample_format.t -> int -> t (** [Swresample.create in_cl ~in_sample_format:in_sf in_sr out_cl ~out_sample_format:out_sf out_sr] create a Swresample.t with [in_cl] channel layout, [in_sf] sample format and [in_sr] sample rate as input format and [out_cl] channel layout, [out_sf] sample format and [out_sr] sample rate as output format. If a sample format parameter is not provided, the sample format defined by the associated AudioData module is used. @raise Error "Swresample input/output sample format undefined" if a sample format parameter is not provided and the associated AudioData module does not define a sample format as is the case for Bytes and Frame. *) val from_codec : ?options:options list -> audio Avcodec.params -> Channel_layout.t -> ?out_sample_format:Sample_format.t -> int -> t (** [Swresample.from_codec in_ac out_cl ~out_sample_format:out_sf out_sr] do the same as {!Swresample.create} with the [in_ac] audio codec properties as input format. *) val to_codec : ?options:options list -> Channel_layout.t -> ?in_sample_format:Sample_format.t -> int -> audio Avcodec.params -> t (** [Swresample.to_codec in_cl ~in_sample_format:in_sf in_sr out_ac] do the same as {!Swresample.create} with the [out_ac] audio codec properties as output format. *) val from_codec_to_codec : ?options:options list -> audio Avcodec.params -> audio Avcodec.params -> t (** [Swresample.from_codec_to_codec in_ac out_ac] do the same as {!Swresample.create} with the [in_ac] audio codec properties as input format and the [out_ac] audio codec properties as output format. *) val reuse_output : t -> bool -> unit (** [Swresample.reuse_output ro] enables or disables the reuse of {!Swresample.convert} output according to the value of [ro]. Reusing the output reduces the number of memory allocations. In this cas, the data returned by {!Swresample.convert} is invalidated by a new call to this function. *) val convert : t -> I.t -> O.t (** [Swresample.convert rsp iad] resample and convert the [iad] input audio data to the output audio data according to the [rsp] resampler context format. @raise Error if the conversion failed. *) end (** Byte string with undefined sample format for interleaved channels. The sample format must be passed to the create function. *) module Bytes : sig type t = bytes val vk : vector_kind val sf : Sample_format.t end (** Unsigned 8 bit sample format byte string for interleaved channels. *) module U8Bytes : sig type t = bytes val vk : vector_kind val sf : Sample_format.t end (** Signed 16 bit sample format byte string for interleaved channels. *) module S16Bytes : sig type t = bytes val vk : vector_kind val sf : Sample_format.t end (** Signed 32 bit sample format byte string for interleaved channels. *) module S32Bytes : sig type t = bytes val vk : vector_kind val sf : Sample_format.t end (** Float 32 bit sample format byte string for interleaved channels. *) module FltBytes : sig type t = bytes val vk : vector_kind val sf : Sample_format.t end (** Float 64 bit sample format byte string for interleaved channels. *) module DblBytes : sig type t = bytes val vk : vector_kind val sf : Sample_format.t end (** Unsigned 8 bit sample format byte string for planar channels. *) module U8PlanarBytes : sig type t = bytes array val vk : vector_kind val sf : Sample_format.t end (** Signed 16 bit sample format byte string for planar channels. *) module S16PlanarBytes : sig type t = bytes array val vk : vector_kind val sf : Sample_format.t end (** Signed 32 bit sample format byte string for planar channels. *) module S32PlanarBytes : sig type t = bytes array val vk : vector_kind val sf : Sample_format.t end (** Float 32 bit sample format byte string for planar channels. *) module FltPlanarBytes : sig type t = bytes array val vk : vector_kind val sf : Sample_format.t end (** Float 64 bit sample format byte string for planar channels. *) module DblPlanarBytes : sig type t = bytes array val vk : vector_kind val sf : Sample_format.t end (** Float 64 bit sample format array for interleaved channels. *) module FloatArray : sig type t = float array val vk : vector_kind val sf : Sample_format.t end (** Float 64 bit sample format array for planar channels. *) module PlanarFloatArray : sig type t = float array array val vk : vector_kind val sf : Sample_format.t end type u8ba = (int, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t type s16ba = (int, Bigarray.int16_signed_elt, Bigarray.c_layout) Bigarray.Array1.t type s32ba = (int32, Bigarray.int32_elt, Bigarray.c_layout) Bigarray.Array1.t type f32ba = (float, Bigarray.float32_elt, Bigarray.c_layout) Bigarray.Array1.t type f64ba = (float, Bigarray.float64_elt, Bigarray.c_layout) Bigarray.Array1.t (** Unsigned 8 bit sample format bigarray for interleaved channels. *) module U8BigArray : sig type t = u8ba val vk : vector_kind val sf : Sample_format.t end (** Signed 16 bit sample format bigarray for interleaved channels. *) module S16BigArray : sig type t = s16ba val vk : vector_kind val sf : Sample_format.t end (** Signed 32 bit sample format bigarray for interleaved channels. *) module S32BigArray : sig type t = s32ba val vk : vector_kind val sf : Sample_format.t end (** Float 32 bit sample format bigarray for interleaved channels. *) module FltBigArray : sig type t = f32ba val vk : vector_kind val sf : Sample_format.t end (** Float 64 bit sample format bigarray for interleaved channels. *) module DblBigArray : sig type t = f64ba val vk : vector_kind val sf : Sample_format.t end (** Unsigned 8 bit sample format bigarray for planar channels. *) module U8PlanarBigArray : sig type t = u8ba array val vk : vector_kind val sf : Sample_format.t end (** Signed 16 bit sample format bigarray for planar channels. *) module S16PlanarBigArray : sig type t = s16ba array val vk : vector_kind val sf : Sample_format.t end (** Signed 32 bit sample format bigarray for planar channels. *) module S32PlanarBigArray : sig type t = s32ba array val vk : vector_kind val sf : Sample_format.t end (** Float 32 bit sample format bigarray for planar channels. *) module FltPlanarBigArray : sig type t = f32ba array val vk : vector_kind val sf : Sample_format.t end (** Float 64 bit sample format bigarray for planar channels. *) module DblPlanarBigArray : sig type t = f64ba array val vk : vector_kind val sf : Sample_format.t end (** Audio frame with undefined sample format. The sample format must be passed to the create function. *) module Frame : sig type t = audio frame val vk : vector_kind val sf : Sample_format.t end (** Unsigned 8 bit sample format audio frame for interleaved channels. *) module U8Frame : sig type t = audio frame val vk : vector_kind val sf : Sample_format.t end (** Signed 16 bit sample format audio frame for interleaved channels. *) module S16Frame : sig type t = audio frame val vk : vector_kind val sf : Sample_format.t end (** Signed 32 bit sample format audio frame for interleaved channels. *) module S32Frame : sig type t = audio frame val vk : vector_kind val sf : Sample_format.t end (** Float 32 bit sample format audio frame for interleaved channels. *) module FltFrame : sig type t = audio frame val vk : vector_kind val sf : Sample_format.t end (** Float 64 bit sample format audio frame for interleaved channels. *) module DblFrame : sig type t = audio frame val vk : vector_kind val sf : Sample_format.t end (** Unsigned 8 bit sample format audio frame for planar channels. *) module U8PlanarFrame : sig type t = audio frame val vk : vector_kind val sf : Sample_format.t end (** Signed 16 bit sample format audio frame for planar channels. *) module S16PlanarFrame : sig type t = audio frame val vk : vector_kind val sf : Sample_format.t end (** Signed 32 bit sample format audio frame for planar channels. *) module S32PlanarFrame : sig type t = audio frame val vk : vector_kind val sf : Sample_format.t end (** Float 32 bit sample format audio frame for planar channels. *) module FltPlanarFrame : sig type t = audio frame val vk : vector_kind val sf : Sample_format.t end (** Float 64 bit sample format audio frame for planar channels. *) module DblPlanarFrame : sig type t = audio frame val vk : vector_kind val sf : Sample_format.t end ocaml-ffmpeg-0.4.1/src/swresample.ml0000644000175000017500000001353213543206341017255 0ustar smimramsmimramopen Avutil open Swresample_options module SF = Avutil.Sample_format module CL = Avutil.Channel_layout type u8ba = (int, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t type s16ba = (int, Bigarray.int16_signed_elt, Bigarray.c_layout) Bigarray.Array1.t type s32ba = (int32, Bigarray.int32_elt, Bigarray.c_layout) Bigarray.Array1.t type f32ba = (float, Bigarray.float32_elt, Bigarray.c_layout) Bigarray.Array1.t type f64ba = (float, Bigarray.float64_elt, Bigarray.c_layout) Bigarray.Array1.t type vector_kind = Str | P_Str | Fa | P_Fa | Ba | P_Ba | Frm module type AudioData = sig type t val vk : vector_kind val sf : SF.t end module Bytes = struct type t = bytes let vk = Str let sf = `None end module U8Bytes = struct type t = bytes let vk = Str let sf = `U8 end module S16Bytes = struct type t = bytes let vk = Str let sf = `S16 end module S32Bytes = struct type t = bytes let vk = Str let sf = `S32 end module FltBytes = struct type t = bytes let vk = Str let sf = `Flt end module DblBytes = struct type t = bytes let vk = Str let sf = `Dbl end module U8PlanarBytes = struct type t = bytes array let vk = P_Str let sf = `U8p end module S16PlanarBytes = struct type t = bytes array let vk = P_Str let sf = `S16p end module S32PlanarBytes = struct type t = bytes array let vk = P_Str let sf = `S32p end module FltPlanarBytes = struct type t = bytes array let vk = P_Str let sf = `Fltp end module DblPlanarBytes = struct type t = bytes array let vk = P_Str let sf = `Dblp end module FloatArray = struct type t = float array let vk = Fa let sf = `Dbl end module PlanarFloatArray = struct type t = float array array let vk = P_Fa let sf = `Dblp end module U8BigArray = struct type t = u8ba let vk = Ba let sf = `U8 end module S16BigArray = struct type t = s16ba let vk = Ba let sf = `S16 end module S32BigArray = struct type t = s32ba let vk = Ba let sf = `S32 end module FltBigArray = struct type t = f32ba let vk = Ba let sf = `Flt end module DblBigArray = struct type t = f64ba let vk = Ba let sf = `Dbl end module U8PlanarBigArray = struct type t = u8ba array let vk = P_Ba let sf = `U8p end module S16PlanarBigArray = struct type t = s16ba array let vk = P_Ba let sf = `S16p end module S32PlanarBigArray = struct type t = s32ba array let vk = P_Ba let sf = `S32p end module FltPlanarBigArray = struct type t = f32ba array let vk = P_Ba let sf = `Fltp end module DblPlanarBigArray = struct type t = f64ba array let vk = P_Ba let sf = `Dblp end module Frame = struct type t = audio frame let vk = Frm let sf = `None end module U8Frame = struct type t = audio frame let vk = Frm let sf = `U8 end module S16Frame = struct type t = audio frame let vk = Frm let sf = `S16 end module S32Frame = struct type t = audio frame let vk = Frm let sf = `S32 end module FltFrame = struct type t = audio frame let vk = Frm let sf = `Flt end module DblFrame = struct type t = audio frame let vk = Frm let sf = `Dbl end module U8PlanarFrame = struct type t = audio frame let vk = Frm let sf = `U8p end module S16PlanarFrame = struct type t = audio frame let vk = Frm let sf = `S16p end module S32PlanarFrame = struct type t = audio frame let vk = Frm let sf = `S32p end module FltPlanarFrame = struct type t = audio frame let vk = Frm let sf = `Fltp end module DblPlanarFrame = struct type t = audio frame let vk = Frm let sf = `Dblp end type options = [dither_type | engine | filter_type] type ('i, 'o) ctx external finalize_ctx : _ ctx -> unit = "ocaml_swresample_finalize_swresample" let () = Callback.register "ocaml_swresample_finalize_swresample" finalize_ctx module Make (I : AudioData) (O : AudioData) = struct type t = (I.t, O.t) ctx external create : vector_kind -> CL.t -> SF.t -> int -> vector_kind -> CL.t -> SF.t -> int -> options array -> t = "ocaml_swresample_create_byte" "ocaml_swresample_create" let create ?options in_channel_layout ?in_sample_format in_sample_rate out_channel_layout ?out_sample_format out_sample_rate = let opts = match options with Some os -> Array.of_list os | None -> [||] in let in_sample_format = match in_sample_format with | _ when I.sf <> `None -> I.sf | Some sf -> sf | _ -> raise (Error (`Failure "Swresample input sample format undefined")) in let out_sample_format = match out_sample_format with | _ when O.sf <> `None -> O.sf | Some sf -> sf | _ -> raise (Error (`Failure "Swresample output sample format undefined")) in create I.vk in_channel_layout in_sample_format in_sample_rate O.vk out_channel_layout out_sample_format out_sample_rate opts let from_codec ?options in_codec out_channel_layout ?out_sample_format out_sample_rate = create ?options (Avcodec.Audio.get_channel_layout in_codec) ~in_sample_format:(Avcodec.Audio.get_sample_format in_codec) (Avcodec.Audio.get_sample_rate in_codec) out_channel_layout ?out_sample_format:out_sample_format out_sample_rate let to_codec ?options in_channel_layout ?in_sample_format in_sample_rate out_codec = create ?options in_channel_layout ?in_sample_format:in_sample_format in_sample_rate (Avcodec.Audio.get_channel_layout out_codec) ~out_sample_format:(Avcodec.Audio.get_sample_format out_codec) (Avcodec.Audio.get_sample_rate out_codec) let from_codec_to_codec ?options in_codec out_codec = create ?options (Avcodec.Audio.get_channel_layout in_codec) ~in_sample_format:(Avcodec.Audio.get_sample_format in_codec) (Avcodec.Audio.get_sample_rate in_codec) (Avcodec.Audio.get_channel_layout out_codec) ~out_sample_format:(Avcodec.Audio.get_sample_format out_codec) (Avcodec.Audio.get_sample_rate out_codec) external reuse_output : t -> bool -> unit = "ocaml_swresample_reuse_output" external convert : t -> I.t -> O.t = "ocaml_swresample_convert" end ocaml-ffmpeg-0.4.1/src/avutil.mli0000644000175000017500000001344113543206341016547 0ustar smimramsmimram(** Common code shared across all FFmpeg libraries. *) (* {1 Options } *) type opt_val = [ | `String of string | `Int of int | `Float of float ] type opts = (string, opt_val) Hashtbl.t (** {1 Line} *) type input type output (** {1 Container} *) type 'a container (** {1 Media} *) type audio type video type subtitle (** {1 Format} *) type ('line, 'media) format (** {1 Frame} *) type 'media frame (** {1 Exception} *) (** Internal errors. *) type error = [ | `Bsf_not_found | `Decoder_not_found | `Demuxer_not_found | `Encoder_not_found | `Eof | `Exit | `Filter_not_found | `Invalid_data | `Muxer_not_found | `Option_not_found | `Patch_welcome | `Protocol_not_found | `Stream_not_found | `Bug | `Eagain | `Unknown | `Experimental (* `Failure is for errors from the binding code itself. *) | `Failure of string ] exception Error of error val string_of_error : error -> string type data = (int, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t val create_data : int -> data type rational = {num : int; den : int} (** {9 Timestamp} *) (** Formats for time. *) module Time_format : sig (** Time formats. *) type t = [ | `Second | `Millisecond | `Microsecond | `Nanosecond ] end (** Return the time base of FFmpeg. *) val time_base : unit -> rational (** {5 Logging utilities} *) module Log : sig type level = [ | `Quiet | `Panic | `Fatal | `Error | `Warning | `Info | `Verbose | `Debug ] val set_level : level -> unit val set_callback : (string -> unit) -> unit val clear_callback : unit -> unit end (** {5 Audio utilities} *) (** Formats for channels layouts. *) module Channel_layout : sig (** Channel layout formats. *) type t = Channel_layout.t (** Return a channel layout id that matches name. @raises [Not_found] otherwise. name can be one or several of the following notations, separated by '+' or '|': - the name of an usual channel layout (mono, stereo, 4.0, quad, 5.0, 5.0(side), 5.1, 5.1(side), 7.1, 7.1(wide), downmix); - the name of a single channel (FL, FR, FC, LFE, BL, BR, FLC, FRC, BC, SL, SR, TC, TFL, TFC, TFR, TBL, TBC, TBR, DL, DR); - a number of channels, in decimal, optionally followed by 'c', yielding the default channel layout for that number of channels; - a channel layout mask, in hexadecimal starting with "0x" (see the AV_CH_* macros). *) val find : string -> t (* Return a description of the channel layout. *) val get_description : ?channels:int -> t -> string (** Return the number of channels in the channel layout. *) val get_nb_channels : t -> int (** Return default channel layout for a given number of channels. @raises [Not_found] if not found. *) val get_default : int -> t (** Return the internal ID for a channel layout. This number should be passed as the "channel_layout" [opts] in [Av.new_audio_stream] .*) val get_id : t -> int end (** Formats for audio samples. *) module Sample_format : sig (** Audio sample formats. *) type t = Sample_format.t (** Return the name of the sample format. *) val get_name : t -> string (** Find a sample format by its name. @aises [Not_found] when none exist. *) val find : string -> t (** Return the internal ID of the sample format. *) val get_id : t -> int (** Find a sample format from its ID. Raises [Not_found] when none exist. *) val find_id : int -> t end (** {5 Video utilities} *) (** Formats for pixels. *) module Pixel_format : sig (** Pixels formats. *) type t = Pixel_format.t (** Return the number of bits of the pixel format. *) val bits : (*?padding:bool ->*) t -> int (** Return the number of planes of the pixel format. *) val planes : t -> int (** [Pixel_format.to_string f] Return a string representation of the pixel format [f]. *) val to_string : t -> string (** [Pixel_format.of_string s] Convert the string [s] into a [Pixel_format.t]. @raise Error if [s] is not a valid format. *) val of_string : string -> t end module Audio : sig val frame_get_sample_format : audio frame -> Sample_format.t (** [Avutil.Audio.frame_get_sample_format frame] returns the sample format of the current frame. *) end module Video : sig type planes = (data * int) array val create_frame : int -> int -> Pixel_format.t -> video frame (** [Avutil.Video.create_frame w h pf] create a video frame with [w] width, [h] height and [pf] pixel format. @raise Error if the allocation failed. *) val frame_get_linesize : video frame -> int -> int (** [Avutil.Video.frame_get_linesize vf n] return the line size of the [n] plane of the [vf] video frame. @raise Error if [n] is out of boundaries. *) val frame_visit : make_writable:bool -> (planes -> unit) -> video frame -> video frame (** [Avutil.Video.frame_visit ~make_writable:wrt f vf] call the [f] function with planes wrapping the [vf] video frame data. The make_writable:[wrt] parameter must be set to true if the [f] function writes in the planes. Access to the frame through the planes is safe as long as it occurs in the [f] function and the frame is not sent to an encoder. The same frame is returned for convenience. @raise Error if the make frame writable operation failed. *) end (** {5 Subtitle utilities} *) module Subtitle : sig val time_base : unit -> rational (** Return the time base for subtitles. *) val create_frame : float -> float -> string list -> subtitle frame (** [Avutil.Subtitle.create_frame start end lines] create a subtitle frame from [lines] which is displayed at [start] time and hidden at [end] time in seconds. @raise Error if the allocation failed. *) val frame_to_lines : subtitle frame -> (float * float * string list) (** Convert subtitle frame to lines. The two float are the start and the end dislpay time in seconds. *) end ocaml-ffmpeg-0.4.1/src/av_stubs.c0000644000175000017500000015053313543206341016536 0ustar smimramsmimram#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "avutil_stubs.h" #include "avcodec_stubs.h" #include "av_stubs.h" #define Val_none Val_int(0) #define Some_val(v) Field(v,0) /**** Init ****/ value ocaml_av_init(value unit) { caml_release_runtime_system(); #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(58, 9, 100) av_register_all(); #endif avformat_network_init(); caml_acquire_runtime_system(); return Val_unit; } /**** Context ****/ typedef struct { int index; AVCodecContext *codec_context; // input int got_frame; // output struct SwsContext *sws_ctx; struct SwrContext *swr_ctx; AVFrame *sw_frame; AVAudioFifo *audio_fifo; AVFrame *enc_frame; int64_t pts; } stream_t; typedef struct av_t { AVFormatContext *format_context; stream_t ** streams; value control_message_callback; int is_input; // input int end_of_file; int selected_streams; int frames_pending; stream_t * best_audio_stream; stream_t * best_video_stream; stream_t * best_subtitle_stream; // output int header_written; int release_out; int custom_io; } av_t; #define Av_val(v) (*(av_t**)Data_custom_val(v)) /***** Stream handler *****/ #define StreamAv_val(v) Av_val(Field(v, 0)) #define StreamIndex_val(v) Int_val(Field(v, 1)) /**** Media Type ****/ static const enum AVMediaType MEDIA_TYPES[] = { AVMEDIA_TYPE_AUDIO, AVMEDIA_TYPE_VIDEO, AVMEDIA_TYPE_SUBTITLE }; #define MEDIA_TYPES_LEN (sizeof(MEDIA_TYPES) / sizeof(enum AVMediaType)) enum AVMediaType MediaType_val(value v) { return MEDIA_TYPES[Int_val(v)]; } static void free_stream(stream_t * stream) { if (!stream) return; if (stream->codec_context) avcodec_free_context(&stream->codec_context); if (stream->swr_ctx) { swr_free(&stream->swr_ctx); } if (stream->sws_ctx) { sws_freeContext(stream->sws_ctx); } if (stream->sw_frame) { av_frame_free(&stream->sw_frame); } if (stream->audio_fifo) { av_audio_fifo_free(stream->audio_fifo); } if (stream->enc_frame) { av_frame_free(&stream->enc_frame); } free(stream); } static void close_av(av_t * av) { if( ! av) return; if(av->format_context) { if(av->streams) { unsigned int i; for(i = 0; i < av->format_context->nb_streams; i++) { if(av->streams[i]) free_stream(av->streams[i]); } free(av->streams); av->streams = NULL; } if(av->format_context->iformat) { avformat_close_input(&av->format_context); } else if(av->format_context->oformat) { // Close the output file if needed. if(!av->custom_io && !(av->format_context->oformat->flags & AVFMT_NOFILE)) avio_closep(&av->format_context->pb); avformat_free_context(av->format_context); av->format_context = NULL; } av->best_audio_stream = NULL; av->best_video_stream = NULL; av->best_subtitle_stream = NULL; } } static void free_av(av_t * av) { if (!av) return; close_av(av); if(av->control_message_callback) { caml_acquire_runtime_system(); caml_remove_generational_global_root(&av->control_message_callback); caml_release_runtime_system(); } free(av); } CAMLprim value ocaml_av_finalize_av(value v) { CAMLparam1(v); caml_register_generational_global_root(&v); caml_release_runtime_system(); free_av(Av_val(v)); caml_acquire_runtime_system(); caml_remove_generational_global_root(&v); CAMLreturn(Val_unit); } static struct custom_operations av_ops = { "ocaml_av_context", custom_finalize_default, custom_compare_default, custom_hash_default, custom_serialize_default, custom_deserialize_default }; AVFormatContext * ocaml_av_get_format_context(value *p_av) { return Av_val(*p_av)->format_context; } CAMLprim value ocaml_av_get_streams(value _av, value _media_type) { CAMLparam2(_av, _media_type); CAMLlocal2(list, cons); av_t * av = Av_val(_av); enum AVMediaType type = MediaType_val(_media_type); unsigned int i; List_init(list); for(i = 0; i < av->format_context->nb_streams; i++) { if(av->format_context->streams[i]->codecpar->codec_type == type) List_add(list, cons, Val_int(i)); } CAMLreturn(list); } CAMLprim value ocaml_av_get_stream_codec_parameters(value _stream) { CAMLparam1(_stream); CAMLlocal1(ans); av_t * av = StreamAv_val(_stream); int index = StreamIndex_val(_stream); value_of_codec_parameters_copy(av->format_context->streams[index]->codecpar, &ans); CAMLreturn(ans); } CAMLprim value ocaml_av_get_stream_time_base(value _stream) { CAMLparam1(_stream); CAMLlocal1(ans); av_t * av = StreamAv_val(_stream); int index = StreamIndex_val(_stream); value_of_rational(&av->format_context->streams[index]->time_base, &ans); CAMLreturn(ans); } CAMLprim value ocaml_av_set_stream_time_base(value _stream, value _time_base) { CAMLparam2(_stream, _time_base); av_t * av = StreamAv_val(_stream); int index = StreamIndex_val(_stream); av->format_context->streams[index]->time_base = rational_of_value(_time_base); CAMLreturn(Val_unit); } value * ocaml_av_get_control_message_callback(struct AVFormatContext *ctx) { return &((av_t *)ctx->opaque)->control_message_callback; } void ocaml_av_set_control_message_callback(value *p_av, av_format_control_message c_callback, value *p_ocaml_callback) { av_t * av = Av_val(*p_av); if( ! av->control_message_callback) { av->control_message_callback = *p_ocaml_callback; caml_register_generational_global_root(&av->control_message_callback); } else { caml_modify_generational_global_root(&av->control_message_callback, *p_ocaml_callback); } av->format_context->opaque = (void*)av; av->format_context->control_message_cb = c_callback; } /***** Input *****/ /***** AVIO *****/ typedef struct avio_t { AVFormatContext *format_context; unsigned char *buffer; int buffer_size; AVIOContext *avio_context; value read_cb; value write_cb; value seek_cb; } avio_t; #define Avio_val(v) (*(avio_t**)Data_custom_val(v)) static struct custom_operations avio_ops = { "ocaml_avio_ops", custom_finalize_default, custom_compare_default, custom_hash_default, custom_serialize_default, custom_deserialize_default }; static int ocaml_avio_read_callback(void *private, uint8_t *buf, int buf_size) { value buffer, res; avio_t *avio = (avio_t *)private; caml_acquire_runtime_system(); buffer = caml_alloc_string(buf_size); caml_register_generational_global_root(&buffer); res = caml_callback3_exn(avio->read_cb,buffer,Val_int(0),Val_int(buf_size)); if(Is_exception_result(res)) { res = Extract_exception(res); caml_remove_generational_global_root(&buffer); caml_raise(res); } memcpy(buf,String_val(buffer),Int_val(res)); caml_remove_generational_global_root(&buffer); caml_release_runtime_system(); return Int_val(res); } static int ocaml_avio_write_callback(void *private, uint8_t *buf, int buf_size) { value buffer, res; avio_t *avio = (avio_t *)private; caml_acquire_runtime_system(); buffer = caml_alloc_string(buf_size); caml_register_generational_global_root(&buffer); memcpy(String_val(buffer), buf, buf_size); res = caml_callback3_exn(avio->write_cb,buffer,Val_int(0),Val_int(buf_size)); if(Is_exception_result(res)) { res = Extract_exception(res); caml_remove_generational_global_root(&buffer); caml_raise(res); } caml_remove_generational_global_root(&buffer); caml_release_runtime_system(); return Int_val(res); } static int64_t ocaml_avio_seek_callback(void *private, int64_t offset, int whence) { value res; avio_t *avio = (avio_t *)private; int _whence; int64_t n; switch (whence) { case SEEK_SET: _whence = 0; break; case SEEK_CUR: _whence = 1; break; case SEEK_END: _whence = 2; break; default: return -1; } caml_acquire_runtime_system(); res = caml_callback2(avio->seek_cb,Val_int(offset), Val_int(_whence)); n = Int_val(res); caml_release_runtime_system(); return n; } CAMLprim value ocaml_av_create_io(value bufsize, value _read_cb, value _write_cb, value _seek_cb) { CAMLparam3(_read_cb, _write_cb, _seek_cb); CAMLlocal1(ret); int(*read_cb)(void *opaque, uint8_t *buf, int buf_size) = NULL; int(*write_cb)(void *opaque, uint8_t *buf, int buf_size) = NULL; int64_t(*seek_cb)(void *opaque, int64_t offset, int whence) = NULL; int write_flag = 0; avio_t *avio = (avio_t *)calloc(1, sizeof(avio_t)); if (!avio) caml_raise_out_of_memory(); avio->read_cb = (value)NULL; avio->write_cb = (value)NULL; avio->seek_cb = (value)NULL; caml_release_runtime_system(); avio->format_context = avformat_alloc_context(); if (!avio->format_context) { free(avio); caml_acquire_runtime_system(); caml_raise_out_of_memory(); } avio->buffer_size = Int_val(bufsize); avio->buffer = av_malloc(avio->buffer_size); if (!avio->buffer) { av_freep(avio->format_context); caml_acquire_runtime_system(); free(avio); caml_raise_out_of_memory(); } caml_acquire_runtime_system(); if (_read_cb != Val_none) { avio->read_cb = Some_val(_read_cb); caml_register_generational_global_root(&avio->read_cb); read_cb = ocaml_avio_read_callback; } if (_write_cb != Val_none) { avio->write_cb = Some_val(_write_cb); caml_register_generational_global_root(&avio->write_cb); write_cb = ocaml_avio_write_callback; write_flag = 1; } if (_seek_cb != Val_none) { avio->seek_cb = Some_val(_seek_cb); caml_register_generational_global_root(&avio->seek_cb); seek_cb = ocaml_avio_seek_callback; } caml_release_runtime_system(); avio->avio_context = avio_alloc_context( avio->buffer, avio->buffer_size, write_flag, (void *)avio, read_cb, write_cb, seek_cb); caml_acquire_runtime_system(); if (!avio->avio_context) { caml_release_runtime_system(); av_freep(avio->buffer); av_freep(avio->format_context); caml_acquire_runtime_system(); free(avio); caml_raise_out_of_memory(); } avio->format_context->pb = avio->avio_context; ret = caml_alloc_custom(&avio_ops, sizeof(avio_t*), 0, 1); Avio_val(ret) = avio; CAMLreturn(ret); } CAMLprim value caml_av_input_io_finalise(value _avio) { CAMLparam1(_avio); // format_context and the buffer are freed as part of av_close. avio_t *avio = Avio_val(_avio); caml_register_generational_global_root(&_avio); caml_release_runtime_system(); av_freep(avio->avio_context); caml_acquire_runtime_system(); if (avio->read_cb) caml_remove_generational_global_root(&avio->read_cb); if (avio->write_cb) caml_remove_generational_global_root(&avio->write_cb); if (avio->seek_cb) caml_remove_generational_global_root(&avio->seek_cb); free(avio); caml_remove_generational_global_root(&_avio); CAMLreturn(Val_unit); } /***** AVInputFormat *****/ static struct custom_operations inputFormat_ops = { "ocaml_av_inputformat", custom_finalize_default, custom_compare_default, custom_hash_default, custom_serialize_default, custom_deserialize_default }; void value_of_inputFormat(AVInputFormat *inputFormat, value * p_value) { if( ! inputFormat) Fail("Empty input format"); *p_value = caml_alloc_custom(&inputFormat_ops, sizeof(AVInputFormat*), 0, 1); InputFormat_val((*p_value)) = inputFormat; } CAMLprim value ocaml_av_input_format_get_name(value _format) { CAMLparam1(_format); const char * n = InputFormat_val(_format)->name; CAMLreturn(caml_copy_string(n ? n : "")); } CAMLprim value ocaml_av_input_format_get_long_name(value _format) { CAMLparam1(_format); const char * n = InputFormat_val(_format)->long_name; CAMLreturn(caml_copy_string(n ? n : "")); } static av_t * open_input(char *url, AVInputFormat *format, AVFormatContext *format_context) { int err; av_t *av = (av_t*)calloc(1, sizeof(av_t)); if ( ! av) { if (url) free(url); caml_raise_out_of_memory(); } av->is_input = 1; av->release_out = 1; av->frames_pending = 0; av->format_context = format_context; av->streams = NULL; caml_release_runtime_system(); err = avformat_open_input(&av->format_context, url, format, NULL); caml_acquire_runtime_system(); if (err < 0) { free(av); if (url) free(url); ocaml_avutil_raise_error(err); } // retrieve stream information caml_release_runtime_system(); err = avformat_find_stream_info(av->format_context, NULL); caml_acquire_runtime_system(); if (err < 0) { free(av); if (url) free(url); ocaml_avutil_raise_error(err); } free(url); return av; } CAMLprim value ocaml_av_open_input(value _url) { CAMLparam1(_url); CAMLlocal1(ans); char * url = strndup(String_val(_url), caml_string_length(_url)); // open input url av_t *av = open_input(url, NULL, NULL); // allocate format context ans = caml_alloc_custom(&av_ops, sizeof(av_t*), 0, 1); Av_val(ans) = av; Finalize("ocaml_av_finalize_av",ans); CAMLreturn(ans); } CAMLprim value ocaml_av_open_input_format(value _format) { CAMLparam1(_format); CAMLlocal1(ans); AVInputFormat *format = InputFormat_val(_format); // open input format av_t *av = open_input(NULL, format, NULL); // allocate format context ans = caml_alloc_custom(&av_ops, sizeof(av_t*), 0, 1); Av_val(ans) = av; Finalize("ocaml_av_finalize_av",ans); CAMLreturn(ans); } CAMLprim value ocaml_av_open_input_stream(value _avio) { CAMLparam1(_avio); CAMLlocal1(ans); avio_t *avio = Avio_val(_avio); // open input format av_t *av = open_input(NULL, NULL, avio->format_context); // allocate format context ans = caml_alloc_custom(&av_ops, sizeof(av_t*), 0, 1); Av_val(ans) = av; CAMLreturn(ans); } CAMLprim value ocaml_av_get_metadata(value _av, value _stream_index) { CAMLparam1(_av); CAMLlocal3(pair, cons, list); av_t * av = Av_val(_av); int index = Int_val(_stream_index); AVDictionary * metadata = av->format_context->metadata; AVDictionaryEntry *tag = NULL; if(index >= 0) { metadata = av->format_context->streams[index]->metadata; } List_init(list); caml_release_runtime_system(); while((tag = av_dict_get(metadata, "", tag, AV_DICT_IGNORE_SUFFIX))) { caml_acquire_runtime_system(); pair = caml_alloc_tuple(2); Store_field(pair, 0, caml_copy_string(tag->key)); Store_field(pair, 1, caml_copy_string(tag->value)); List_add(list, cons, pair); caml_release_runtime_system(); } caml_acquire_runtime_system(); CAMLreturn(list); } CAMLprim value ocaml_av_get_duration(value _av, value _stream_index, value _time_format) { CAMLparam2(_av, _time_format); CAMLlocal1(ans); av_t * av = Av_val(_av); int index = Int_val(_stream_index); if( ! av->format_context) Fail("Failed to get closed input duration"); int64_t duration = av->format_context->duration; int64_t num = 1; int64_t den = AV_TIME_BASE; if(index >= 0) { duration = av->format_context->streams[index]->duration; num = (int64_t)av->format_context->streams[index]->time_base.num; den = (int64_t)av->format_context->streams[index]->time_base.den; } int64_t second_fractions = second_fractions_of_time_format(_time_format); ans = caml_copy_int64((duration * second_fractions * num) / den); CAMLreturn(ans); } CAMLprim value ocaml_av_reuse_output(value _av, value _reuse_output) { CAMLparam2(_av, _reuse_output); Av_val(_av)->release_out = ! Bool_val(_reuse_output); CAMLreturn(Val_unit); } static inline stream_t** allocate_input_context(av_t *av) { if( ! av->format_context) Fail("Failed to read closed input"); // Allocate streams context array av->streams = (stream_t**)calloc(av->format_context->nb_streams, sizeof(stream_t*)); if( ! av->streams) caml_raise_out_of_memory(); return av->streams; } static inline stream_t *allocate_stream_context(av_t *av, int index, AVCodec *codec) { enum AVMediaType type = codec->type; if (type != AVMEDIA_TYPE_AUDIO && type != AVMEDIA_TYPE_VIDEO && type != AVMEDIA_TYPE_SUBTITLE) Fail("Failed to allocate stream %d of media type %s", index, av_get_media_type_string(type)); stream_t * stream = (stream_t*)calloc(1, sizeof(stream_t)); if (!stream) caml_raise_out_of_memory(); stream->index = index; av->streams[index] = stream; caml_release_runtime_system(); stream->codec_context = avcodec_alloc_context3(codec); if (!stream->codec_context) { caml_acquire_runtime_system(); caml_raise_out_of_memory(); } caml_acquire_runtime_system(); return stream; } static inline stream_t *open_stream_index(av_t *av, int index) { int err; if(!av->format_context) Fail("Failed to open stream %d of closed input", index); if(index < 0 || index >= av->format_context->nb_streams) Fail("Failed to open stream %d : index out of bounds", index); if(!av->streams && !allocate_input_context(av)) caml_raise_out_of_memory(); // find decoder for the stream AVCodecParameters *dec_param = av->format_context->streams[index]->codecpar; caml_release_runtime_system(); AVCodec *dec = avcodec_find_decoder(dec_param->codec_id); caml_acquire_runtime_system(); if( ! dec) ocaml_avutil_raise_error(AVERROR_DECODER_NOT_FOUND); stream_t *stream = allocate_stream_context(av, index, dec); if ( ! stream) caml_raise_out_of_memory(); // initialize the stream parameters with demuxer information caml_release_runtime_system(); err = avcodec_parameters_to_context(stream->codec_context, dec_param); if (err < 0) { caml_acquire_runtime_system(); ocaml_avutil_raise_error(err); } // Open the decoder err = avcodec_open2(stream->codec_context, dec, NULL); caml_acquire_runtime_system(); if(err < 0) ocaml_avutil_raise_error(err); return stream; } #define Check_stream(av, index) { \ if( ! (av)->streams || ! (av)->streams[(index)]) \ open_stream_index((av), (index)); \ } CAMLprim value ocaml_av_find_best_stream(value _av, value _media_type) { CAMLparam2(_av, _media_type); av_t * av = Av_val(_av); enum AVMediaType type = MediaType_val(_media_type); caml_release_runtime_system(); int index = av_find_best_stream(av->format_context, type, -1, -1, NULL, 0); caml_acquire_runtime_system(); if(index < 0) ocaml_avutil_raise_error(AVERROR_STREAM_NOT_FOUND); CAMLreturn(Val_int(index)); } CAMLprim value ocaml_av_select_stream(value _stream) { CAMLparam1(_stream); av_t * av = StreamAv_val(_stream); int index = StreamIndex_val(_stream); Check_stream(av, index); av->selected_streams = 1; CAMLreturn(Val_unit); } static inline int decode_packet(av_t * av, stream_t * stream, AVPacket * packet, AVFrame * frame) { AVCodecContext * dec = stream->codec_context; int ret = 0; caml_release_runtime_system(); if(dec->codec_type == AVMEDIA_TYPE_AUDIO || dec->codec_type == AVMEDIA_TYPE_VIDEO) { // Assumption: each time this function is called with `frames_pending == 0`, // a fresh packet is also provided and no packet otherwise. if (!av->frames_pending) { ret = avcodec_send_packet(dec, packet); if (ret < 0) { caml_acquire_runtime_system(); return ret; } av_packet_unref(packet); av->frames_pending = 1; } // decode frame ret = avcodec_receive_frame(dec, frame); if (ret == AVERROR(EAGAIN)) av->frames_pending = 0; } else if(dec->codec_type == AVMEDIA_TYPE_SUBTITLE) { ret = avcodec_decode_subtitle2(dec, (AVSubtitle *)frame, &stream->got_frame, packet); if (ret >=0) av_packet_unref(packet); } av_packet_unref(packet); caml_acquire_runtime_system(); stream->got_frame = 1; return ret; } static inline void read_packet(av_t * av, AVPacket * packet, int stream_index, stream_t ** selected_streams) { int ret; caml_release_runtime_system(); for(;;) { // read frames from the file ret = av_read_frame(av->format_context, packet); if(ret == AVERROR_EOF) { packet->data = NULL; packet->size = 0; av->end_of_file = 1; caml_acquire_runtime_system(); return; } if(ret < 0) { caml_acquire_runtime_system(); ocaml_avutil_raise_error(ret); } if(packet->stream_index == stream_index || (stream_index < 0 && ( ! selected_streams || selected_streams[packet->stream_index]))) break; av_packet_unref(packet); } caml_acquire_runtime_system(); } CAMLprim value ocaml_av_read_stream_packet(value _stream) { CAMLparam1(_stream); av_t * av = StreamAv_val(_stream); int index = StreamIndex_val(_stream); Check_stream(av, index); caml_release_runtime_system(); AVPacket *packet = av_packet_alloc(); caml_acquire_runtime_system(); if(!packet) caml_raise_out_of_memory(); read_packet(av, packet, index, NULL); if(av->end_of_file) { caml_release_runtime_system(); av_packet_free(&packet); caml_acquire_runtime_system(); ocaml_avutil_raise_error(AVERROR_EOF); } CAMLreturn(value_of_ffmpeg_packet(packet)); } CAMLprim value ocaml_av_read_stream_frame(value _stream) { CAMLparam1(_stream); CAMLlocal1(frame_value); av_t * av = StreamAv_val(_stream); int index = StreamIndex_val(_stream); int ret; AVFrame *frame; Check_stream(av, index); stream_t * stream = av->streams[index]; AVPacket packet; av_init_packet(&packet); packet.data = NULL; packet.size = 0; // Allocate and assign a OCaml value right away to account // for potential exceptions raised afterward. if (stream->codec_context->codec_type == AVMEDIA_TYPE_SUBTITLE) { frame = (AVFrame *)calloc(1, sizeof(AVSubtitle)); if (!frame) caml_raise_out_of_memory(); frame_value = value_of_subtitle((AVSubtitle*)frame); } else { caml_release_runtime_system(); frame = av_frame_alloc(); caml_acquire_runtime_system(); if (!frame) caml_raise_out_of_memory(); frame_value = value_of_frame(frame); } do { if(!av->frames_pending) read_packet(av, &packet, index, NULL); ret = decode_packet(av, stream, &packet, frame); } while (ret == AVERROR(EAGAIN)); // Leave it to the GC to cleanup the frame above. if (ret < 0 && ret != AVERROR(EAGAIN)) ocaml_avutil_raise_error(ret); CAMLreturn(frame_value); } CAMLprim value ocaml_av_read_input_packet(value _av) { CAMLparam1(_av); CAMLlocal2(ans, stream_packet); av_t * av = Av_val(_av); stream_t ** selected_streams = av->selected_streams ? av->streams : NULL; if(! av->streams && ! allocate_input_context(av)) caml_raise_out_of_memory(); caml_release_runtime_system(); AVPacket *packet = av_packet_alloc(); caml_acquire_runtime_system(); if(!packet) caml_raise_out_of_memory(); read_packet(av, packet, -1, selected_streams); if(av->end_of_file) { caml_release_runtime_system(); av_packet_free(&packet); caml_acquire_runtime_system(); ocaml_avutil_raise_error(AVERROR_EOF); } int index = packet->stream_index; Check_stream(av, index); stream_packet = caml_alloc_tuple(2); Field(stream_packet, 0) = Val_int(index); Field(stream_packet, 1) = value_of_ffmpeg_packet(packet); ans = caml_alloc_tuple(2); switch(av->streams[index]->codec_context->codec_type) { case AVMEDIA_TYPE_AUDIO : Field(ans, 0) = PVV_Audio; break; case AVMEDIA_TYPE_VIDEO: Field(ans, 0) = PVV_Video; break; default: Field(ans, 0) = PVV_Subtitle; break; } Field(ans, 1) = stream_packet; CAMLreturn(ans); } CAMLprim value ocaml_av_read_input_frame(value _av) { CAMLparam1(_av); CAMLlocal3(ans, stream_frame, frame_value); av_t * av = Av_val(_av); AVFrame * frame; int ret, frame_kind; if(! av->streams && ! allocate_input_context(av)) caml_raise_out_of_memory(); AVPacket packet; av_init_packet(&packet); packet.data = NULL; packet.size = 0; stream_t ** streams = av->streams; stream_t ** selected_streams = av->selected_streams ? av->streams : NULL; unsigned int nb_streams = av->format_context->nb_streams; stream_t * stream = NULL; do { if(!av->end_of_file) { if(!av->frames_pending) { read_packet(av, &packet, -1, selected_streams); if(av->end_of_file) continue; } if((stream = streams[packet.stream_index]) == NULL) stream = open_stream_index(av, packet.stream_index); } else { // If the end of file is reached, iteration on the streams to find one to flush unsigned int i = 0; for(; i < nb_streams; i++) { if((stream = streams[i]) && stream->got_frame) break; } if(i == nb_streams) ocaml_avutil_raise_error(AVERROR_EOF); } // Assign OCaml values right away to account for potential exceptions // raised below. if (stream->codec_context->codec_type == AVMEDIA_TYPE_SUBTITLE) { frame = (AVFrame *)calloc(1, sizeof(AVSubtitle)); if( ! frame) caml_raise_out_of_memory(); frame_kind = PVV_Subtitle; frame_value = value_of_subtitle((AVSubtitle*)frame); } else { caml_release_runtime_system(); frame = av_frame_alloc(); caml_acquire_runtime_system(); if( ! frame) caml_raise_out_of_memory(); if (stream->codec_context->codec_type == AVMEDIA_TYPE_AUDIO) frame_kind = PVV_Audio; else frame_kind = PVV_Video; frame_value = value_of_frame(frame); } ret = decode_packet(av, stream, &packet, frame); } while (ret == AVERROR(EAGAIN)); if (ret < 0 && ret != AVERROR(EAGAIN)) ocaml_avutil_raise_error(ret); stream_frame = caml_alloc_tuple(2); Field(stream_frame, 0) = Val_int(stream->index); Field(stream_frame, 1) = frame_value; ans = caml_alloc_tuple(2); Field(ans, 0) = frame_kind; Field(ans, 1) = stream_frame; CAMLreturn(ans); } static const int seek_flags[] = {AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE, AVSEEK_FLAG_ANY, AVSEEK_FLAG_FRAME}; static int seek_flags_val(value v) { return seek_flags[Int_val(v)]; } CAMLprim value ocaml_av_seek_frame(value _stream, value _time_format, value _timestamp, value _flags) { CAMLparam4(_stream, _time_format, _timestamp, _flags); av_t * av = StreamAv_val(_stream); int index = StreamIndex_val(_stream); int64_t timestamp = Int64_val(_timestamp); if( ! av->format_context) Fail("Failed to seek closed input"); int64_t num = AV_TIME_BASE; int64_t den = 1; if(index >= 0) { num = (int64_t)av->format_context->streams[index]->time_base.den; den = (int64_t)av->format_context->streams[index]->time_base.num; } int64_t second_fractions = second_fractions_of_time_format(_time_format); timestamp = (timestamp * num) / (den * second_fractions); int flags = 0; int i; for(i = 0; i < Wosize_val(_flags); i++) flags |= seek_flags_val(Field(_flags, i)); caml_release_runtime_system(); int ret = av_seek_frame(av->format_context, index, timestamp, flags); caml_acquire_runtime_system(); if(ret < 0) ocaml_avutil_raise_error(ret); CAMLreturn(Val_unit); } /***** Output *****/ /***** AVOutputFormat *****/ static struct custom_operations outputFormat_ops = { "ocaml_av_outputformat", custom_finalize_default, custom_compare_default, custom_hash_default, custom_serialize_default, custom_deserialize_default }; value value_of_outputFormat(AVOutputFormat *outputFormat) { value v; if( ! outputFormat) Fail("Empty output format"); v = caml_alloc_custom(&outputFormat_ops, sizeof(AVOutputFormat*), 0, 1); OutputFormat_val(v) = outputFormat; return v; } CAMLprim value ocaml_av_output_format_guess(value _short_name, value _filename, value _mime) { CAMLparam3(_short_name, _filename, _mime); CAMLlocal1(ans); char *short_name = NULL; char *filename = NULL; char *mime = NULL; AVOutputFormat *guessed; if (caml_string_length(_short_name) > 0) { short_name = strndup(String_val(_short_name), caml_string_length(_short_name)); if (!short_name) caml_raise_out_of_memory(); }; if (caml_string_length(_filename) > 0) { filename = strndup(String_val(_filename), caml_string_length(_filename)); if (!filename) { if (short_name) free(short_name); caml_raise_out_of_memory(); } } if (caml_string_length(_mime) > 0) { mime = strndup(String_val(_mime), caml_string_length(_mime)); if (!mime) { if (short_name) free(short_name); if (filename) free(filename); caml_raise_out_of_memory(); } } caml_release_runtime_system(); guessed = av_guess_format(short_name, filename, mime); caml_acquire_runtime_system(); if (short_name) free(short_name); if (filename) free(filename); if (mime) free(mime); if (!guessed) CAMLreturn(Val_none); ans = caml_alloc_small(1, 0); Field(ans, 0) = value_of_outputFormat(guessed); CAMLreturn(ans); } CAMLprim value ocaml_av_output_format_get_name(value _format) { CAMLparam1(_format); const char * n = OutputFormat_val(_format)->name; CAMLreturn(caml_copy_string(n ? n : "")); } CAMLprim value ocaml_av_output_format_get_long_name(value _format) { CAMLparam1(_format); const char * n = OutputFormat_val(_format)->long_name; CAMLreturn(caml_copy_string(n ? n : "")); } CAMLprim value ocaml_av_output_format_get_audio_codec_id(value _output_format) { CAMLparam1(_output_format); CAMLreturn(Val_AudioCodecID(OutputFormat_val(_output_format)->audio_codec)); } CAMLprim value ocaml_av_output_format_get_video_codec_id(value _output_format) { CAMLparam1(_output_format); CAMLreturn(Val_VideoCodecID(OutputFormat_val(_output_format)->video_codec)); } CAMLprim value ocaml_av_output_format_get_subtitle_codec_id(value _output_format) { CAMLparam1(_output_format); CAMLreturn(Val_SubtitleCodecID(OutputFormat_val(_output_format)->subtitle_codec)); } static inline av_t *open_output(AVOutputFormat *format, char *file_name, AVIOContext *avio_context, value _opts, value *unused) { av_t *av = (av_t*)calloc(1, sizeof(av_t)); if ( ! av) { if (file_name) free(file_name); caml_raise_out_of_memory(); } caml_release_runtime_system(); avformat_alloc_output_context2(&av->format_context, format, NULL, file_name); if (!av->format_context) { free_av(av); if (file_name) free(file_name); caml_acquire_runtime_system(); caml_raise_out_of_memory(); } AVDictionary *options = NULL; char *key, *val; int len = Wosize_val(_opts); int i; caml_acquire_runtime_system(); for (i = 0; i < len; i++) { // Dictionaries copy key/values by default! key = String_val(Field(Field(_opts, i), 0)); val = String_val(Field(Field(_opts, i), 1)); av_dict_set(&options, key, val, 0); } caml_release_runtime_system(); int ret = av_opt_set_dict(av->format_context, &options); if (ret < 0) { av_dict_free(&options); caml_acquire_runtime_system(); ocaml_avutil_raise_error(ret); } if (av->format_context->priv_data) ret = av_opt_set_dict(av->format_context->priv_data, &options); // Return unused keys int count = av_dict_count(options); *unused = caml_alloc_tuple(count); AVDictionaryEntry *entry = NULL; for (i = 0; i < count; i++) { entry = av_dict_get(options, "", entry, AV_DICT_IGNORE_SUFFIX); Store_field(*unused, i, caml_copy_string(entry->key)); } av_dict_free(&options); caml_acquire_runtime_system(); if (ret < 0) ocaml_avutil_raise_error(ret); caml_release_runtime_system(); // open the output file, if needed if (avio_context) { if (av->format_context->oformat->flags & AVFMT_NOFILE) { free_av(av); if (file_name) free(file_name); caml_acquire_runtime_system(); Fail("Cannot set custom I/O on this format!"); } av->format_context->pb = avio_context; av->custom_io = 1; } else { if(!(av->format_context->oformat->flags & AVFMT_NOFILE)) { int err = avio_open(&av->format_context->pb, file_name, AVIO_FLAG_WRITE); if (err < 0) { free_av(av); if (file_name) free(file_name); caml_acquire_runtime_system(); ocaml_avutil_raise_error(err); } av->custom_io = 0; } } if (file_name) free(file_name); caml_acquire_runtime_system(); return av; } CAMLprim value ocaml_av_open_output(value _filename, value _opts) { CAMLparam2(_filename, _opts); CAMLlocal3(ans, ret, unused); char * filename = strndup(String_val(_filename), caml_string_length(_filename)); // open output file av_t *av = open_output(NULL, filename, NULL, _opts, &unused); // allocate format context ans = caml_alloc_custom(&av_ops, sizeof(av_t*), 0, 1); Av_val(ans) = av; ret = caml_alloc_tuple(2); Field(ret, 0) = ans; Field(ret, 1) = unused; CAMLreturn(ret); } CAMLprim value ocaml_av_open_output_format(value _format, value _opts) { CAMLparam2(_format, _opts); CAMLlocal3(ans, ret, unused); AVOutputFormat *format = OutputFormat_val(_format); // open output format av_t *av = open_output(format, NULL, NULL, _opts, &unused); // allocate format context ans = caml_alloc_custom(&av_ops, sizeof(av_t*), 0, 1); Av_val(ans) = av; ret = caml_alloc_tuple(2); Field(ret, 0) = ans; Field(ret, 1) = unused; CAMLreturn(ret); } CAMLprim value ocaml_av_open_output_stream(value _format, value _avio, value _opts) { CAMLparam3(_format, _avio, _opts); CAMLlocal3(ans, ret, unused); AVOutputFormat *format = OutputFormat_val(_format); avio_t *avio = Avio_val(_avio); // open output format av_t *av = open_output(format, NULL, avio->avio_context, _opts, &unused); // allocate format context ans = caml_alloc_custom(&av_ops, sizeof(av_t*), 0, 1); Av_val(ans) = av; ret = caml_alloc_tuple(2); Field(ret, 0) = ans; Field(ret, 1) = unused; CAMLreturn(ret); } CAMLprim value ocaml_av_set_metadata(value _av, value _stream_index, value _tags) { CAMLparam2(_av, _tags); CAMLlocal1(pair); av_t * av = Av_val(_av); int index = Int_val(_stream_index); AVDictionary * metadata = NULL; if( ! av->format_context) Fail("Failed to set metadata to closed output"); if(av->header_written) Fail("Failed to set metadata : header already written"); int i, ret, len = Wosize_val(_tags); for(i = 0; i < len; i++) { pair = Field(_tags, i); ret = av_dict_set(&metadata, String_val(Field(pair, 0)), String_val(Field(pair, 1)), 0); if (ret < 0) ocaml_avutil_raise_error(ret); } if(index < 0) { av->format_context->metadata = metadata; } else { av->format_context->streams[index]->metadata = metadata; } CAMLreturn(Val_unit); } static inline stream_t *new_stream(av_t *av, AVCodec *codec) { if(!av->format_context) Fail("Failed to add stream to closed output"); if(av->header_written) Fail("Failed to create new stream : header already written"); // Allocate streams array size_t streams_size = sizeof(stream_t*) * (av->format_context->nb_streams + 1); stream_t**streams = (stream_t**)realloc(av->streams, streams_size); if (!streams) caml_raise_out_of_memory(); streams[av->format_context->nb_streams] = NULL; av->streams = streams; stream_t *stream = allocate_stream_context(av, av->format_context->nb_streams, codec); AVStream * avstream = avformat_new_stream(av->format_context, codec); if (!avstream) caml_raise_out_of_memory(); avstream->id = av->format_context->nb_streams - 1; return stream; } static inline void init_stream_encoder(av_t *av, stream_t *stream, value _opts, value *unused) { AVCodecContext *enc_ctx = stream->codec_context; AVDictionary *options = NULL; char *key, *val; int len = Wosize_val(_opts); int i; // Some formats want stream headers to be separate. if (av->format_context->oformat->flags & AVFMT_GLOBALHEADER) enc_ctx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; for (i = 0; i < len; i++) { // Dictionaries copy key/values by default! key = String_val(Field(Field(_opts, i), 0)); val = String_val(Field(Field(_opts, i), 1)); av_dict_set(&options, key, val, 0); } caml_release_runtime_system(); int ret = avcodec_open2(enc_ctx, enc_ctx->codec, &options); // Return unused keys int count = av_dict_count(options); caml_acquire_runtime_system(); *unused = caml_alloc_tuple(count); AVDictionaryEntry *entry = NULL; for (i = 0; i < count; i++) { entry = av_dict_get(options, "", entry, AV_DICT_IGNORE_SUFFIX); Store_field(*unused,i,caml_copy_string(entry->key)); } caml_release_runtime_system(); av_dict_free(&options); if (ret < 0) { caml_acquire_runtime_system(); ocaml_avutil_raise_error(ret); } AVStream *avstream = av->format_context->streams[stream->index]; avstream->time_base = enc_ctx->time_base; ret = avcodec_parameters_from_context(avstream->codecpar, enc_ctx); caml_acquire_runtime_system(); if (ret < 0) ocaml_avutil_raise_error(ret); } static inline stream_t *new_audio_stream(av_t *av, enum AVSampleFormat sample_fmt, AVCodec *codec, value _opts, value *unused) { stream_t *stream = new_stream(av, codec); AVCodecContext *enc_ctx = stream->codec_context; enc_ctx->sample_fmt = sample_fmt; init_stream_encoder(av, stream, _opts, unused); if (enc_ctx->frame_size > 0 || !(enc_ctx->codec->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE)) { caml_release_runtime_system(); // Allocate the buffer frame and audio fifo if the codec doesn't support variable frame size stream->enc_frame = av_frame_alloc(); if (!stream->enc_frame) { caml_acquire_runtime_system(); caml_raise_out_of_memory(); } stream->enc_frame->nb_samples = enc_ctx->frame_size; stream->enc_frame->channel_layout = enc_ctx->channel_layout; stream->enc_frame->format = enc_ctx->sample_fmt; stream->enc_frame->sample_rate = enc_ctx->sample_rate; int ret = av_frame_get_buffer(stream->enc_frame, 0); if (ret < 0) { caml_acquire_runtime_system(); ocaml_avutil_raise_error(ret); } // Create the FIFO buffer based on the specified output sample format. stream->audio_fifo = av_audio_fifo_alloc(enc_ctx->sample_fmt, enc_ctx->channels, 1); caml_acquire_runtime_system(); if(!stream->audio_fifo) caml_raise_out_of_memory(); } return stream; } CAMLprim value ocaml_av_new_audio_stream(value _av, value _sample_fmt, value _codec, value _opts) { CAMLparam2(_av, _opts); CAMLlocal2(ans, unused); AVCodec *codec = (AVCodec *)_codec; stream_t * stream = new_audio_stream(Av_val(_av),Int_val(_sample_fmt), codec,_opts,&unused); ans = caml_alloc_tuple(2); Field(ans, 0) = Val_int(stream->index); Field(ans, 1) = unused; CAMLreturn(ans); } static inline stream_t *new_video_stream(av_t *av, AVCodec *codec, value _opts, value *unused) { stream_t *stream = new_stream(av, codec); if (!stream) return NULL; init_stream_encoder(av, stream, _opts, unused); return stream; } CAMLprim value ocaml_av_new_video_stream(value _av, value _codec, value _opts) { CAMLparam2(_av, _opts); CAMLlocal2(ans, unused); AVCodec *codec = (AVCodec *)_codec; stream_t * stream = new_video_stream(Av_val(_av),codec,_opts,&unused); ans = caml_alloc_tuple(2); Field(ans, 0) = Val_int(stream->index); Field(ans, 1) = unused; CAMLreturn(ans); } static inline stream_t *new_subtitle_stream(av_t *av, AVCodec *codec, value _opts, value *unused) { stream_t * stream = new_stream(av, codec); if (!stream) return NULL; int ret = subtitle_header_default(stream->codec_context); if (ret < 0) ocaml_avutil_raise_error(ret); init_stream_encoder(av, stream, _opts, unused); return stream; } CAMLprim value ocaml_av_new_subtitle_stream(value _av, value _codec, value _opts) { CAMLparam2(_av, _opts); CAMLlocal2(ans, unused); AVCodec *codec = (AVCodec *)_codec; stream_t * stream = new_subtitle_stream(Av_val(_av),codec,_opts,&unused); ans = caml_alloc_tuple(2); Field(ans, 0) = Val_int(stream->index); Field(ans, 1) = unused; CAMLreturn(ans); } CAMLprim value ocaml_av_write_stream_packet(value _stream, value _packet) { CAMLparam2(_stream, _packet); av_t * av = StreamAv_val(_stream); int ret = 0, stream_index = StreamIndex_val(_stream); AVPacket *packet = Packet_val(_packet); if( ! av->streams) Fail("Failed to write in closed output"); caml_release_runtime_system(); if( ! av->header_written) { // write output file header ret = avformat_write_header(av->format_context, NULL); av->header_written = 1; } if(ret >= 0) { AVCodecContext * enc_ctx = av->streams[stream_index]->codec_context; AVStream * avstream = av->format_context->streams[stream_index]; packet->stream_index = stream_index; packet->pos = -1; // The stream time base can be modified by avformat_write_header so the rescale is needed av_packet_rescale_ts(packet, enc_ctx->time_base, avstream->time_base); ret = av_interleaved_write_frame(av->format_context, packet); } caml_acquire_runtime_system(); if(ret < 0) ocaml_avutil_raise_error(ret); CAMLreturn(Val_unit); } static inline void write_frame(av_t * av, int stream_index, AVCodecContext * enc_ctx, AVFrame * frame) { AVStream * avstream = av->format_context->streams[stream_index]; int ret; caml_release_runtime_system(); if (!av->header_written) { // write output file header ret = avformat_write_header(av->format_context, NULL); if(ret < 0) { caml_acquire_runtime_system(); ocaml_avutil_raise_error(ret); } av->header_written = 1; } AVPacket packet; av_init_packet(&packet); packet.data = NULL; packet.size = 0; // send the frame for encoding ret = avcodec_send_frame(enc_ctx, frame); if (!frame && ret == AVERROR_EOF) { caml_acquire_runtime_system(); return; } if (frame && ret == AVERROR_EOF) { caml_acquire_runtime_system(); ocaml_avutil_raise_error(ret); } if (ret < 0 && ret != AVERROR_EOF) { caml_acquire_runtime_system(); ocaml_avutil_raise_error(ret); } // read all the available output packets (in general there may be any number of them while (ret >= 0) { ret = avcodec_receive_packet(enc_ctx, &packet); if (ret < 0) break; packet.stream_index = stream_index; packet.pos = -1; av_packet_rescale_ts(&packet, enc_ctx->time_base, avstream->time_base); ret = av_interleaved_write_frame(av->format_context, &packet); av_packet_unref(&packet); } caml_acquire_runtime_system(); if (!frame && ret == AVERROR_EOF) return; if (ret < 0 && ret != AVERROR(EAGAIN)) ocaml_avutil_raise_error(ret); } static inline AVFrame *resample_audio_frame(stream_t * stream, AVFrame * frame) { AVCodecContext *enc_ctx = stream->codec_context; caml_release_runtime_system(); if( ! stream->swr_ctx) { // create resampler context struct SwrContext *swr_ctx = swr_alloc(); if (!swr_ctx) { caml_acquire_runtime_system(); caml_raise_out_of_memory(); } stream->swr_ctx = swr_ctx; // set options av_opt_set_channel_layout(swr_ctx, "in_channel_layout", frame->channel_layout, 0); av_opt_set_int(swr_ctx, "in_sample_rate", frame->sample_rate, 0); av_opt_set_sample_fmt(swr_ctx, "in_sample_fmt", (enum AVSampleFormat)frame->format, 0); av_opt_set_channel_layout(swr_ctx, "out_channel_layout", enc_ctx->channel_layout, 0); av_opt_set_int(swr_ctx, "out_sample_rate", enc_ctx->sample_rate, 0); av_opt_set_sample_fmt(swr_ctx, "out_sample_fmt", enc_ctx->sample_fmt, 0); // initialize the resampling context int ret = swr_init(swr_ctx); if (ret < 0) { caml_acquire_runtime_system(); ocaml_avutil_raise_error(ret); } } int out_nb_samples = swr_get_out_samples(stream->swr_ctx, frame->nb_samples); if(! stream->sw_frame || out_nb_samples > stream->sw_frame->nb_samples) { if(stream->sw_frame) { av_frame_free(&stream->sw_frame); } // Allocate the resampler frame stream->sw_frame = av_frame_alloc(); if(!stream->sw_frame) { caml_acquire_runtime_system(); caml_raise_out_of_memory(); } stream->sw_frame->nb_samples = out_nb_samples; stream->sw_frame->channel_layout = enc_ctx->channel_layout; stream->sw_frame->format = enc_ctx->sample_fmt; stream->sw_frame->sample_rate = enc_ctx->sample_rate; int ret = av_frame_get_buffer(stream->sw_frame, 0); if (ret < 0) { caml_acquire_runtime_system(); ocaml_avutil_raise_error(ret); } } int ret = av_frame_make_writable(stream->sw_frame); if (ret < 0) { caml_acquire_runtime_system(); ocaml_avutil_raise_error(ret); } // convert to destination format ret = swr_convert(stream->swr_ctx, stream->sw_frame->extended_data, out_nb_samples, (const uint8_t **)frame->extended_data, frame->nb_samples); caml_acquire_runtime_system(); if(ret < 0) ocaml_avutil_raise_error(ret); return stream->sw_frame; } static inline void write_audio_frame(av_t * av, int stream_index, AVFrame * frame) { int err, fifo_size, frame_size; if(av->format_context->nb_streams < stream_index) Fail("Stream index not found!"); stream_t * stream = av->streams[stream_index]; if (!stream->codec_context) Fail("Could not find stream index"); AVCodecContext * enc_ctx = stream->codec_context; if (frame && (frame->sample_rate != enc_ctx->sample_rate || frame->channel_layout != enc_ctx->channel_layout || ((enum AVSampleFormat)frame->format) != enc_ctx->sample_fmt)) { frame = resample_audio_frame(stream, frame); } if (stream->audio_fifo == NULL) { if (frame) { frame->pts = stream->pts; stream->pts += frame->nb_samples; } write_frame(av, stream_index, enc_ctx, frame); } else { AVAudioFifo *fifo = stream->audio_fifo; AVFrame * output_frame = stream->enc_frame; caml_release_runtime_system(); if(frame != NULL) { // Store the new samples in the FIFO buffer. err = av_audio_fifo_write(fifo, (void **)(const uint8_t**)frame->extended_data, frame->nb_samples); if (err < 0) { caml_acquire_runtime_system(); ocaml_avutil_raise_error(err); } } fifo_size = av_audio_fifo_size(fifo); frame_size = enc_ctx->frame_size; for(; fifo_size >= frame_size || frame == NULL; fifo_size = av_audio_fifo_size(fifo)) { if(fifo_size > 0) { err = av_frame_make_writable(output_frame); if (err < 0) { caml_acquire_runtime_system(); ocaml_avutil_raise_error(err); } int read_size = av_audio_fifo_read(fifo, (void **)output_frame->data, frame_size); if (frame && read_size < frame_size) { caml_acquire_runtime_system(); Fail("Invalid input: read_size < frame_size"); } output_frame->nb_samples = frame_size; output_frame->pts = stream->pts; stream->pts += frame_size; } else { output_frame = NULL; } caml_acquire_runtime_system(); write_frame(av, stream_index, enc_ctx, output_frame); caml_release_runtime_system(); if (fifo_size == 0) break; } } caml_acquire_runtime_system(); } static void scale_video_frame(stream_t * stream, AVFrame * frame) { AVCodecContext * enc_ctx = stream->codec_context; if( ! stream->sws_ctx) { // create scale context stream->sws_ctx = sws_getContext(frame->width, frame->height, (enum AVPixelFormat)frame->format, enc_ctx->width, enc_ctx->height, enc_ctx->pix_fmt, SWS_BICUBIC, NULL, NULL, NULL); if ( ! stream->sws_ctx) caml_raise_out_of_memory(); // Allocate the scale frame stream->sw_frame = av_frame_alloc(); if( ! stream->sw_frame) caml_raise_out_of_memory(); stream->sw_frame->width = enc_ctx->width; stream->sw_frame->height = enc_ctx->height; stream->sw_frame->format = enc_ctx->pix_fmt; caml_release_runtime_system(); int ret = av_frame_get_buffer(stream->sw_frame, 32); caml_acquire_runtime_system(); if (ret < 0) ocaml_avutil_raise_error(ret); } caml_release_runtime_system(); int ret = av_frame_make_writable(stream->sw_frame); caml_acquire_runtime_system(); if (ret < 0) ocaml_avutil_raise_error(ret); // convert to destination format caml_release_runtime_system(); sws_scale(stream->sws_ctx, (const uint8_t * const *)frame->data, frame->linesize, 0, frame->height, stream->sw_frame->data, stream->sw_frame->linesize); caml_acquire_runtime_system(); } static inline void write_video_frame(av_t * av, int stream_index, AVFrame * frame) { if(av->format_context->nb_streams < stream_index) Fail("Stream index not found!"); if( ! av->streams) Fail("Failed to write in closed output"); stream_t * stream = av->streams[stream_index]; if( ! stream->codec_context) Fail("Failed to write video frame with no encoder"); AVCodecContext * enc_ctx = stream->codec_context; if(frame && (frame->width != enc_ctx->width || frame->height != enc_ctx->height || ((enum AVPixelFormat)frame->format) != enc_ctx->pix_fmt)) { scale_video_frame(stream, frame); } if(frame) { frame->pts = stream->pts++; } write_frame(av, stream_index, enc_ctx, frame); } static inline void write_subtitle_frame(av_t * av, int stream_index, AVSubtitle * subtitle) { stream_t * stream = av->streams[stream_index]; if(av->format_context->nb_streams < stream_index) Fail("Stream index not found!"); AVStream * avstream = av->format_context->streams[stream->index]; AVCodecContext * enc_ctx = stream->codec_context; if( ! stream->codec_context) Fail("Failed to write subtitle frame with no encoder"); int err; int size = 512; AVPacket packet; av_init_packet(&packet); packet.data = NULL; packet.size = 0; caml_release_runtime_system(); err = av_new_packet(&packet, size); if (err < 0) { caml_acquire_runtime_system(); ocaml_avutil_raise_error(err); } err = avcodec_encode_subtitle(stream->codec_context, packet.data, packet.size, subtitle); if (err < 0) { av_packet_unref(&packet); caml_acquire_runtime_system(); ocaml_avutil_raise_error(err); } packet.pts = subtitle->pts; packet.duration = subtitle->end_display_time - subtitle->pts; packet.dts = subtitle->pts; av_packet_rescale_ts(&packet, enc_ctx->time_base, avstream->time_base); packet.stream_index = stream_index; packet.pos = -1; err = av_interleaved_write_frame(av->format_context, &packet); av_packet_unref(&packet); caml_acquire_runtime_system(); if(err < 0) ocaml_avutil_raise_error(err); } CAMLprim value ocaml_av_write_stream_frame(value _stream, value _frame) { CAMLparam2(_stream, _frame); av_t * av = StreamAv_val(_stream); int index = StreamIndex_val(_stream); if(!av->streams) Fail("Invalid input: no streams provided"); enum AVMediaType type = av->streams[index]->codec_context->codec_type; if(type == AVMEDIA_TYPE_AUDIO) { write_audio_frame(av, index, Frame_val(_frame)); } else if(type == AVMEDIA_TYPE_VIDEO) { write_video_frame(av, index, Frame_val(_frame)); } else if(type == AVMEDIA_TYPE_SUBTITLE) { write_subtitle_frame(av, index, Subtitle_val(_frame)); } CAMLreturn(Val_unit); } CAMLprim value ocaml_av_write_audio_frame(value _av, value _frame) { CAMLparam2(_av, _frame); av_t * av = Av_val(_av); AVFrame * frame = Frame_val(_frame); write_audio_frame(av, 0, frame); CAMLreturn(Val_unit); } CAMLprim value ocaml_av_write_video_frame(value _av, value _frame) { CAMLparam2(_av, _frame); av_t * av = Av_val(_av); AVFrame * frame = Frame_val(_frame); write_video_frame(av, 0, frame); CAMLreturn(Val_unit); } CAMLprim value ocaml_av_close(value _av) { CAMLparam1(_av); av_t * av = Av_val(_av); if( ! av->is_input && av->streams) { // flush encoders of the output file unsigned int i; for(i = 0; i < av->format_context->nb_streams; i++) { AVCodecContext * enc_ctx = av->streams[i]->codec_context; if( ! enc_ctx) continue; if(enc_ctx->codec_type == AVMEDIA_TYPE_AUDIO) { write_audio_frame(av, i, NULL); } else if(enc_ctx->codec_type == AVMEDIA_TYPE_VIDEO) { write_video_frame(av, i, NULL); } } // write the trailer caml_release_runtime_system(); av_write_trailer(av->format_context); caml_acquire_runtime_system(); } caml_register_generational_global_root(&_av); caml_release_runtime_system(); close_av(av); caml_acquire_runtime_system(); caml_remove_generational_global_root(&_av); CAMLreturn(Val_unit); } ocaml-ffmpeg-0.4.1/src/Makefile.in0000644000175000017500000000372513543206341016611 0ustar smimramsmimram# Copyright (C) 2005-2006 Savonet team # pulseaudio bindings for OCaml. # # by Samuel Mimram and Romain Beauxis # $Id: Makefile.in 2383 2006-04-09 16:21:04Z smimram $ OCAMLMAKEFILE = OCamlMakefile OCAMLFIND = @OCAMLFIND@ OCAMLFIND_LDCONF = @OCAMLFIND_LDCONF@ OCAMLC = @OCAMLC@ -thread SYSTEM_OCAMLC = @SYSTEM_OCAMLC@ OCAMLOPT = @OCAMLOPT@ -thread OCAMLBEST = @OCAMLBEST@ OCAMLMKTOP = @OCAMLMKTOP@ OCAMLMKLIB = @OCAMLMKLIB@ OCAMLCP = @OCAMLCP@ OCAMLDEP = @OCAMLDEP@ OCAMLLEX = @OCAMLLEX@ OCAMLYACC = @OCAMLYACC@ OCAMLDOC = @OCAMLDOC@ AR = @AR@ LATEX = @LATEX@ DVIPS = @DVIPS@ PS2PDF = @PS2PDF@ OCAMLLIBPATH = @CAMLLIBPATH@ GEN_CODE_INCLUDE = @GEN_CODE_INCLUDE@ SOURCES = pixel_format.mli pixel_format.ml channel_layout.mli channel_layout.ml sample_format.mli sample_format.ml avutil_stubs.h avutil_stubs.c avutil.mli avutil.ml swscale_stubs.c swscale.mli swscale.ml ifeq "@HAS_AV@" "yes" ifeq "@HAS_SWRESAMPLE@" "yes" SOURCES += avcodec_stubs.h avcodec_stubs.c codec_id.mli codec_id.ml avcodec.mli avcodec.ml SOURCES += av_stubs.c av.mli av.ml SOURCES += swresample_options.mli swresample_options.ml swresample_stubs.c swresample.mli swresample.ml ifeq "@HAS_AVDEVICE@" "yes" SOURCES += avdevice_stubs.c avdevice.mli avdevice.ml endif endif endif RESULT = ffmpeg LIB_PACK_NAME = FFmpeg OCAMLDOCFLAGS = -stars -hide Avutil LIBINSTALL_FILES = $(wildcard *.mli *.cmi *.cma *.cmxa *.cmx *.a *.so) ACLIBS = @LIBS@ LDFLAGS = @LDFLAGS@ CLIBS = $(ACLIBS:-l%=%) LIBDIRS = $(@LIBDIRS@:-L%=%) CC = @CC@ CFLAGS = @CFLAGS@ -Wall -DCAML_NAME_SPACE CPPFLAGS = @CPPFLAGS@ INCDIRS = @INC@ NO_CUSTOM = yes OCAMLFLAGS = @OCAMLFLAGS@ PRE_TARGETS = gen-code ANNOT_FLAG = -annot -bin-annot all: $(OCAMLBEST) byte: byte-code-library opt: native-code-library gen-code: $(SYSTEM_OCAMLC) -c gen_code_stubs.c $(SYSTEM_OCAMLC) -custom str.cma gen_code_stubs.o gen_code.ml -o gen_code ./gen_code -I$(GEN_CODE_INCLUDE) install: libinstall uninstall: libuninstall update: uninstall install -include $(OCAMLMAKEFILE) ocaml-ffmpeg-0.4.1/src/swscale.mli0000644000175000017500000000616113543206341016705 0ustar smimramsmimram(** This module perform image scaling and color space/pixel format conversion operations. *) open Avutil val version : unit -> int val configuration : unit -> string val license : unit -> string type pixel_format = Avutil.Pixel_format.t type flag = Fast_bilinear | Bilinear | Bicubic | Print_info type t val create : flag list -> int -> int -> pixel_format -> int -> int -> pixel_format -> t (** [Swscale.create flags in_w in_h in_pf out_w out_h out_pf] create a Swscale.t scale context with the [flags] flag list defining the conversion type, the [in_w] width, [in_h] height and [in_pf] pixel format for input format and [out_w] width, [out_h] height and [out_pf] pixel format for output format. *) type planes = (data * int) array val scale : t -> planes -> int -> int -> planes -> int -> unit (** [Swscale.scale ctx in_planes y h out_planes off] scale the [h] rows of [in_planes] strarting from the row [y] to the [off] row of the [out_planes] output. *) (**/**) type vector_kind = Ba | Frm | Str (**/**) (** Video data modules for Swscale module input and output parameterization. *) module type VideoData = sig type t val vk : vector_kind end type ('i, 'o) ctx (** Functor building an implementation of the swscale structure with parameterized input an output video data types *) module Make (I : VideoData) (O : VideoData) : sig type t = (I.t, O.t) ctx val create : flag list -> int -> int -> pixel_format -> int -> int -> pixel_format -> t (** [Swscale.create flags in_w in_h in_pf out_w out_h out_pf] do the same as {!Swscale.create}. *) (* val from_codec : flag list -> video Avcodec.t -> int -> int -> pixel_format -> t (** [Swscale.from_codec flags in_vc out_w out_h out_pf] do the same as {!Swresample.create} with the [in_vc] video codec properties as input format. *) val to_codec : flag list -> int -> int -> pixel_format -> video Avcodec.t -> t (** [Swscale.to_codec flags in_w in_h in_pf out_vc] do the same as {!Swresample.create} with the [out_vc] video codec properties as output format. *) val from_codec_to_codec : flag list -> video Avcodec.t -> video Avcodec.t -> t (** [Swscale.from_codec_to_codec flags in_vc out_vc] do the same as {!Swresample.create} with the [in_vc] video codec properties as input format and the [out_vc] video codec properties as output format. *) *) val reuse_output : t -> bool -> unit (** [Swscale.reuse_output ro] enables or disables the reuse of {!Swscale.convert} output according to the value of [ro]. Reusing the output reduces the number of memory allocations. In this cas, the data returned by {!Swscale.convert} is invalidated by a new call to this function. *) val convert : t -> I.t -> O.t (** [Swscale.convert ctx ivd] scale and convert the [ivd] input video data to the output video data according to the [ctx] scaler context format. @raise Error if the conversion failed. *) end (** Unsigned 8 bit bigarray. *) module BigArray : sig type t = planes val vk : vector_kind end (** Video frame. *) module Frame : sig type t = video frame val vk : vector_kind end (** Bytes array. *) module Bytes : sig type t = (string * int) array val vk : vector_kind end ocaml-ffmpeg-0.4.1/src/swresample_options.ml0000644000175000017500000000040413543206341021022 0ustar smimramsmimramtype dither_type = [ | `Dither_rectangular | `Dither_triangular | `Dither_triangular_highpass ] type engine = [ | `Engine_swr | `Engine_soxr ] type filter_type = [ | `Filter_type_cubic | `Filter_type_blackman_nuttall | `Filter_type_kaiser ] ocaml-ffmpeg-0.4.1/src/avutil_stubs.c0000644000175000017500000004421713543206341017435 0ustar smimramsmimram#include #include #include #include #include #include #include #include #include #include #include #include #include #include "avutil_stubs.h" #include "pixel_format_stubs.h" #include "channel_layout_stubs.h" #include "sample_format_stubs.h" char ocaml_av_exn_msg[ERROR_MSG_SIZE + 1]; void ocaml_avutil_raise_error(int err) { int _err = 0; switch (err) { case AVERROR_BSF_NOT_FOUND: _err = PVV_Bsf_not_found; break; case AVERROR_DECODER_NOT_FOUND: _err = PVV_Decoder_not_found; break; case AVERROR_DEMUXER_NOT_FOUND: _err = PVV_Demuxer_not_found; break; case AVERROR_ENCODER_NOT_FOUND: _err = PVV_Encoder_not_found; break; case AVERROR_EOF: _err = PVV_Eof; break; case AVERROR_EXIT: _err = PVV_Exit; break; case AVERROR_FILTER_NOT_FOUND: _err = PVV_Filter_not_found; break; case AVERROR_INVALIDDATA: _err = PVV_Invalid_data; break; case AVERROR_MUXER_NOT_FOUND: _err = PVV_Muxer_not_found; break; case AVERROR_OPTION_NOT_FOUND: _err = PVV_Option_not_found; break; case AVERROR_PATCHWELCOME: _err = PVV_Patch_welcome; break; case AVERROR_PROTOCOL_NOT_FOUND: _err = PVV_Protocol_not_found; break; case AVERROR_STREAM_NOT_FOUND: _err = PVV_Stream_not_found; break; case AVERROR_BUG: _err = PVV_Bug; break; case AVERROR(EAGAIN): _err = PVV_Eagain; break; case AVERROR_UNKNOWN: _err = PVV_Unknown; break; case AVERROR_EXPERIMENTAL: _err = PVV_Experimental; break; default: Fail("%s", av_err2str(err)); } caml_raise_with_arg(*caml_named_value(EXN_ERROR), _err); } CAMLprim value ocaml_avutil_string_of_error(value error) { CAMLparam0(); int err; switch (error) { case PVV_Bsf_not_found: err = AVERROR_BSF_NOT_FOUND; break; case PVV_Decoder_not_found: err = AVERROR_DECODER_NOT_FOUND; break; case PVV_Demuxer_not_found: err = AVERROR_DEMUXER_NOT_FOUND; break; case PVV_Encoder_not_found: err = AVERROR_ENCODER_NOT_FOUND; break; case PVV_Eof: err = AVERROR_EOF; break; case PVV_Exit: err = AVERROR_EXIT; break; case PVV_Filter_not_found: err = AVERROR_FILTER_NOT_FOUND; break; case PVV_Invalid_data: err = AVERROR_INVALIDDATA; break; case PVV_Muxer_not_found: err = AVERROR_MUXER_NOT_FOUND; break; case PVV_Option_not_found: err = AVERROR_OPTION_NOT_FOUND; break; case PVV_Patch_welcome: err = AVERROR_PATCHWELCOME; break; case PVV_Protocol_not_found: err = AVERROR_PROTOCOL_NOT_FOUND; break; case PVV_Stream_not_found: err = AVERROR_STREAM_NOT_FOUND; break; case PVV_Bug: err = AVERROR_BUG; break; case PVV_Eagain: err = AVERROR(EAGAIN); break; case PVV_Unknown: err = AVERROR_UNKNOWN; break; case PVV_Experimental: err = AVERROR_EXPERIMENTAL; break; default: // Failure error is a 2-uple with string as second entry. CAMLreturn(Field(error,1)); } CAMLreturn(caml_copy_string(av_err2str(err))); } /***** Global initialisation *****/ #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(58, 9, 100) static int lock_manager(void **mtx, enum AVLockOp op) { switch(op) { case AV_LOCK_CREATE: *mtx = malloc(sizeof(pthread_mutex_t)); if(!*mtx) return 1; return !!pthread_mutex_init(*mtx, NULL); case AV_LOCK_OBTAIN: return !!pthread_mutex_lock(*mtx); case AV_LOCK_RELEASE: return !!pthread_mutex_unlock(*mtx); case AV_LOCK_DESTROY: pthread_mutex_destroy(*mtx); free(*mtx); return 0; } return 1; } CAMLprim value ocaml_avutil_register_lock_manager(value unit) { CAMLparam0(); static int registering_done = 0; static pthread_mutex_t registering_mutex = PTHREAD_MUTEX_INITIALIZER; if( ! registering_done) { pthread_mutex_lock(®istering_mutex); if( ! registering_done) { caml_release_runtime_system(); int ret = av_lockmgr_register(lock_manager); caml_acquire_runtime_system(); if(ret >= 0) { registering_done = 1; } pthread_mutex_unlock(®istering_mutex); } } CAMLreturn(Val_int(registering_done)); } #else value ocaml_avutil_register_lock_manager(value unit) { return Val_true; } #endif static pthread_key_t ocaml_c_thread_key; static pthread_once_t ocaml_c_thread_key_once = PTHREAD_ONCE_INIT; static void ocaml_ffmpeg_on_thread_exit(void *key) { caml_c_thread_unregister(); } static void ocaml_ffmpeg_make_key() { pthread_key_create(&ocaml_c_thread_key, ocaml_ffmpeg_on_thread_exit); } void ocaml_ffmpeg_register_thread() { static int initialized = 1; pthread_once(&ocaml_c_thread_key_once, ocaml_ffmpeg_make_key); if (caml_c_thread_register() && !pthread_getspecific(ocaml_c_thread_key)) pthread_setspecific(ocaml_c_thread_key,(void*)&initialized); } /**** Rational ****/ void value_of_rational(const AVRational * rational, value * pvalue) { *pvalue = caml_alloc_tuple(2); Field(*pvalue, 0) = Val_int(rational->num); Field(*pvalue, 1) = Val_int(rational->den); } /**** Time format ****/ int64_t second_fractions_of_time_format(value time_format) { switch(time_format) { case PVV_Second : return 1; case PVV_Millisecond : return 1000; case PVV_Microsecond : return 1000000; case PVV_Nanosecond : return 1000000000; default : break; } return 1; } /**** Logging ****/ CAMLprim value ocaml_avutil_set_log_level(value level) { CAMLparam0(); av_log_set_level(Int_val(level)); CAMLreturn(Val_unit); } #define LINE_SIZE 1024 static value ocaml_log_callback = (value)NULL; static void av_log_ocaml_callback(void* ptr, int level, const char* fmt, va_list vl) { static int print_prefix = 1; char line[LINE_SIZE]; value buffer; av_log_format_line2(ptr, level, fmt, vl, line, LINE_SIZE, &print_prefix); ocaml_ffmpeg_register_thread(); caml_acquire_runtime_system(); buffer = caml_copy_string(line); caml_register_generational_global_root(&buffer); caml_callback(ocaml_log_callback, buffer); caml_remove_generational_global_root(&buffer); caml_release_runtime_system(); } CAMLprim value ocaml_avutil_set_log_callback(value callback) { CAMLparam1(callback); if (ocaml_log_callback == (value)NULL) { ocaml_log_callback = callback; caml_register_generational_global_root(&ocaml_log_callback); } else { caml_modify_generational_global_root(&ocaml_log_callback,callback); } caml_release_runtime_system(); av_log_set_callback(&av_log_ocaml_callback); caml_acquire_runtime_system(); CAMLreturn(Val_unit); } CAMLprim value ocaml_avutil_clear_log_callback() { CAMLparam0(); if (ocaml_log_callback != (value)NULL) { caml_remove_generational_global_root(&ocaml_log_callback); ocaml_log_callback = (value)NULL; } caml_release_runtime_system(); av_log_set_callback(&av_log_default_callback); caml_acquire_runtime_system(); CAMLreturn(Val_unit); } CAMLprim value ocaml_avutil_time_base() { CAMLparam0(); CAMLlocal1(ans); value_of_rational(&AV_TIME_BASE_Q, &ans); CAMLreturn(ans); } /**** Channel layout ****/ CAMLprim value ocaml_avutil_get_channel_layout_description(value _channel_layout, value channels) { CAMLparam1(_channel_layout); char buf[1024]; uint64_t channel_layout = ChannelLayout_val(_channel_layout); caml_release_runtime_system(); av_get_channel_layout_string(buf, sizeof(buf), Int_val(channels), channel_layout); caml_acquire_runtime_system(); CAMLreturn(caml_copy_string(buf)); } CAMLprim value ocaml_avutil_get_channel_layout_nb_channels(value _channel_layout) { CAMLparam1(_channel_layout); CAMLreturn(Val_int(av_get_channel_layout_nb_channels(ChannelLayout_val(_channel_layout)))); } CAMLprim value ocaml_avutil_get_default_channel_layout(value _nb_channels) { CAMLparam0(); caml_release_runtime_system(); int64_t ret = av_get_default_channel_layout(Int_val(_nb_channels)); caml_acquire_runtime_system(); if (ret == 0) caml_raise_not_found(); CAMLreturn(Val_ChannelLayout(ret)); } CAMLprim value ocaml_avutil_get_channel_layout(value _name) { CAMLparam1(_name); char *name = strndup(String_val(_name), caml_string_length(_name)); if (!name) caml_raise_out_of_memory(); caml_release_runtime_system(); int64_t ret = av_get_channel_layout(name); caml_acquire_runtime_system(); free(name); if (ret == 0) caml_raise_not_found(); CAMLreturn(Val_ChannelLayout(ret)); } CAMLprim value ocaml_avutil_get_channel_layout_id(value _channel_layout) { CAMLparam1(_channel_layout); CAMLreturn(Val_int(ChannelLayout_val(_channel_layout))); } /**** Sample format ****/ static const enum AVSampleFormat SAMPLE_FORMATS[] = { AV_SAMPLE_FMT_NONE, AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_U8P, AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_S32P, AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_DBLP }; #define SAMPLE_FORMATS_LEN (sizeof(SAMPLE_FORMATS) / sizeof(enum AVSampleFormat)) static const enum caml_ba_kind BIGARRAY_KINDS[SAMPLE_FORMATS_LEN] = { CAML_BA_KIND_MASK, CAML_BA_UINT8, CAML_BA_SINT16, CAML_BA_INT32, CAML_BA_FLOAT32, CAML_BA_FLOAT64, CAML_BA_UINT8, CAML_BA_SINT16, CAML_BA_INT32, CAML_BA_FLOAT32, CAML_BA_FLOAT64 }; enum caml_ba_kind bigarray_kind_of_AVSampleFormat(enum AVSampleFormat sf) { int i; for (i = 0; i < SAMPLE_FORMATS_LEN; i++) { if (sf == SAMPLE_FORMATS[i]) return BIGARRAY_KINDS[i]; } return CAML_BA_KIND_MASK; } CAMLprim value ocaml_avutil_find_sample_fmt(value _name) { CAMLparam1(_name); CAMLlocal1(ans); char *name = strndup(String_val(_name), caml_string_length(_name)); if (!name) caml_raise_out_of_memory(); caml_release_runtime_system(); enum AVSampleFormat ret = av_get_sample_fmt(name); caml_acquire_runtime_system(); free(name); if (ret == AV_SAMPLE_FMT_NONE) caml_raise_not_found(); CAMLreturn(Val_SampleFormat(ret)); } CAMLprim value ocaml_avutil_get_sample_fmt_name(value _sample_fmt) { CAMLparam1(_sample_fmt); CAMLlocal1(ans); caml_release_runtime_system(); const char *name = av_get_sample_fmt_name(SampleFormat_val(_sample_fmt)); caml_acquire_runtime_system(); ans = caml_copy_string(name); CAMLreturn(ans); } CAMLprim value ocaml_avutil_get_sample_fmt_id(value _sample_fmt) { CAMLparam1(_sample_fmt); CAMLreturn(Val_int(SampleFormat_val(_sample_fmt))); } CAMLprim value ocaml_avutil_find_sample_fmt_from_id(value _id) { CAMLparam0(); value ret = Val_SampleFormat(Int_val(_id)); if (ret == VALUE_NOT_FOUND) caml_raise_not_found(); CAMLreturn(ret); } /***** AVPixelFormat *****/ CAMLprim value ocaml_avutil_pixelformat_bits_per_pixel(value pixel) { CAMLparam1(pixel); enum AVPixelFormat p = PixelFormat_val(pixel); CAMLreturn(Val_int(av_get_bits_per_pixel(av_pix_fmt_desc_get(p)))); } CAMLprim value ocaml_avutil_pixelformat_planes(value pixel) { CAMLparam1(pixel); enum AVPixelFormat p = PixelFormat_val(pixel); CAMLreturn(Val_int(av_pix_fmt_count_planes(p))); } CAMLprim value ocaml_avutil_pixelformat_to_string(value pixel) { CAMLparam1(pixel); enum AVPixelFormat p = PixelFormat_val(pixel); CAMLreturn(caml_copy_string(av_get_pix_fmt_name(p))); } CAMLprim value ocaml_avutil_pixelformat_of_string(value name) { CAMLparam1(name); caml_release_runtime_system(); enum AVPixelFormat p = av_get_pix_fmt(String_val(name)); caml_acquire_runtime_system(); if (p == AV_PIX_FMT_NONE) Fail( "Invalid format name"); CAMLreturn(Val_PixelFormat(p)); } /***** AVFrame *****/ CAMLprim value ocaml_avutil_finalize_frame(value v) { CAMLparam1(v); caml_register_generational_global_root(&v); #ifdef HAS_FRAME AVFrame *frame = Frame_val(v); caml_release_runtime_system(); av_frame_free(&frame); caml_acquire_runtime_system(); #endif caml_remove_generational_global_root(&v); CAMLreturn(Val_unit); } static struct custom_operations frame_ops = { "ocaml_avframe", custom_finalize_default, custom_compare_default, custom_hash_default, custom_serialize_default, custom_deserialize_default }; value value_of_frame(AVFrame *frame) { value ret; if(!frame) Fail( "Empty frame"); ret = caml_alloc_custom(&frame_ops, sizeof(AVFrame*), 0, 1); Frame_val(ret) = frame; Finalize("ocaml_avutil_finalize_frame",ret); return ret; } CAMLprim value ocaml_avutil_video_create_frame(value _w, value _h, value _format) { CAMLparam1(_format); CAMLlocal1(ans); #ifndef HAS_FRAME caml_failwith("Not implemented."); #else caml_release_runtime_system(); AVFrame *frame = av_frame_alloc(); caml_acquire_runtime_system(); if( ! frame) caml_raise_out_of_memory(); frame->format = PixelFormat_val(_format); frame->width = Int_val(_w); frame->height = Int_val(_h); caml_release_runtime_system(); int ret = av_frame_get_buffer(frame, 32); caml_acquire_runtime_system(); if(ret < 0) { av_frame_free(&frame); ocaml_avutil_raise_error(ret); } ans = value_of_frame(frame); #endif CAMLreturn(ans); } CAMLprim value ocaml_avutil_video_frame_get_sample_format(value _frame) { CAMLparam1(_frame); #ifdef HAS_FRAME AVFrame *frame = Frame_val(_frame); CAMLreturn(Val_SampleFormat((enum AVSampleFormat)frame->format)); #else caml_failwith("Not implemented."); CAMLreturn(Val_unit); #endif } CAMLprim value ocaml_avutil_video_frame_get_linesize(value _frame, value _line) { CAMLparam1(_frame); #ifdef HAS_FRAME AVFrame *frame = Frame_val(_frame); int line = Int_val(_line); if(line < 0 || line >= AV_NUM_DATA_POINTERS || ! frame->data[line]) Fail( "Failed to get linesize from video frame : line (%d) out of boundaries", line); CAMLreturn(Val_int(frame->linesize[line])); #else caml_failwith("Not implemented."); CAMLreturn(Val_unit); #endif } CAMLprim value ocaml_avutil_video_get_frame_bigarray_planes(value _frame, value _make_writable) { CAMLparam1(_frame); CAMLlocal2(ans, plane); #ifndef HAS_FRAME caml_failwith("Not implemented."); #else AVFrame *frame = Frame_val(_frame); int i; if(Bool_val(_make_writable)) { caml_release_runtime_system(); int ret = av_frame_make_writable(frame); caml_acquire_runtime_system(); if (ret < 0) ocaml_avutil_raise_error(ret); } caml_release_runtime_system(); int nb_planes = av_pix_fmt_count_planes((enum AVPixelFormat)frame->format); caml_acquire_runtime_system(); if(nb_planes < 0) ocaml_avutil_raise_error(nb_planes); ans = caml_alloc_tuple(nb_planes); for(i = 0; i < nb_planes; i++) { intnat out_size = frame->linesize[i] * frame->height; plane = caml_alloc_tuple(2); Store_field(plane, 0, caml_ba_alloc(CAML_BA_C_LAYOUT | CAML_BA_UINT8, 1, frame->data[i], &out_size)); Store_field(plane, 1, Val_int(frame->linesize[i])); Store_field(ans, i, plane); } #endif CAMLreturn(ans); } /***** AVSubtitle *****/ CAMLprim value ocaml_avutil_finalize_subtitle(value v) { CAMLparam1(v); caml_register_generational_global_root(&v); struct AVSubtitle *subtitle = Subtitle_val(v); caml_release_runtime_system(); avsubtitle_free(subtitle); caml_acquire_runtime_system(); free(subtitle); caml_remove_generational_global_root(&v); CAMLreturn(Val_unit); } static struct custom_operations subtitle_ops = { "ocaml_avsubtitle", custom_finalize_default, custom_compare_default, custom_hash_default, custom_serialize_default, custom_deserialize_default }; value value_of_subtitle(AVSubtitle *subtitle) { value ret; if( ! subtitle) Fail( "Empty subtitle"); ret = caml_alloc_custom(&subtitle_ops, sizeof(AVSubtitle*), 0, 1); Subtitle_val(ret) = subtitle; Finalize("ocaml_avutil_finalize_subtitle", ret); return ret; } int subtitle_header_default(AVCodecContext *codec_context) { return 0; } CAMLprim value ocaml_avutil_subtitle_create_frame(value _start_time, value _end_time, value _lines) { CAMLparam3(_start_time, _end_time, _lines); CAMLlocal1(ans); int64_t start_time = Int64_val(_start_time); int64_t end_time = Int64_val(_end_time); int nb_lines = Wosize_val(_lines); AVSubtitle * subtitle = (AVSubtitle*)calloc(1, sizeof(AVSubtitle)); if( ! subtitle) caml_raise_out_of_memory(); ans = value_of_subtitle(subtitle); // subtitle->start_display_time = (uint32_t)start_time; subtitle->end_display_time = (uint32_t)end_time; subtitle->pts = start_time; caml_release_runtime_system(); subtitle->rects = (AVSubtitleRect **)av_malloc_array(nb_lines, sizeof(AVSubtitleRect *)); caml_acquire_runtime_system(); if( ! subtitle->rects) caml_raise_out_of_memory(); subtitle->num_rects = nb_lines; int i; for(i = 0; i < nb_lines; i++) { const char * text = String_val(Field(_lines, i)); caml_release_runtime_system(); subtitle->rects[i] = (AVSubtitleRect *)av_mallocz(sizeof(AVSubtitleRect)); caml_acquire_runtime_system(); if( ! subtitle->rects[i]) caml_raise_out_of_memory(); subtitle->rects[i]->type = SUBTITLE_TEXT; subtitle->rects[i]->text = strdup(text); if( ! subtitle->rects[i]->text) caml_raise_out_of_memory(); // subtitle->rects[i]->type = SUBTITLE_ASS; // subtitle->rects[i]->ass = get_dialog(i + 1, 0, NULL, NULL, text); // if( ! subtitle->rects[i]->ass) Fail( "Failed to allocate subtitle frame"); } CAMLreturn(ans); } CAMLprim value ocaml_avutil_subtitle_to_lines(value _subtitle) { CAMLparam1(_subtitle); CAMLlocal2(ans, lines); struct AVSubtitle *subtitle = Subtitle_val(_subtitle); unsigned i, num_rects = subtitle->num_rects; lines = caml_alloc_tuple(num_rects); for(i = 0; i < num_rects; i++) { char * line = subtitle->rects[i]->text ? subtitle->rects[i]->text : subtitle->rects[i]->ass; Store_field(lines, i, caml_copy_string(line)); } ans = caml_alloc_tuple(3); Store_field(ans, 0, caml_copy_int64((int64_t)subtitle->start_display_time)); Store_field(ans, 1, caml_copy_int64((int64_t)subtitle->end_display_time)); Store_field(ans, 2, lines); CAMLreturn(ans); } ocaml-ffmpeg-0.4.1/src/swresample_options_stubs.h0000644000175000017500000000323313543206341022064 0ustar smimramsmimram#define VALUE_NOT_FOUND 0xFFFFFFF static const int64_t SWR_DITHER_TYPE_TAB[][2] = { {(2019771531), SWR_DITHER_RECTANGULAR}, {(618477025), SWR_DITHER_TRIANGULAR}, {(1572988741), SWR_DITHER_TRIANGULAR_HIGHPASS}, }; #define SWR_DITHER_TYPE_TAB_LEN 3 enum SwrDitherType DitherType_val(value v){ int i; for(i=0;i #include #include #include #include #include #include #include #include #include #include "avutil_stubs.h" #include "avcodec_stubs.h" #include "codec_id_stubs.h" value ocaml_avcodec_init(value unit) { #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(58, 9, 100) avcodec_register_all(); #endif return Val_unit; } static inline value value_of_audio_codec_id(enum AVCodecID id) { value ret = Val_AudioCodecID(id); if (ret == VALUE_NOT_FOUND) caml_raise_not_found(); return ret; } static inline value value_of_video_codec_id(enum AVCodecID id) { value ret = Val_VideoCodecID(id); if (ret == VALUE_NOT_FOUND) caml_raise_not_found(); return ret; } static inline value value_of_subtitle_codec_id(enum AVCodecID id) { value ret = Val_SubtitleCodecID(id); if (ret == VALUE_NOT_FOUND) caml_raise_not_found(); return ret; } CAMLprim value ocaml_avcodec_get_input_buffer_padding_size() { CAMLparam0(); CAMLreturn(Val_int(AV_INPUT_BUFFER_PADDING_SIZE)); } CAMLprim value ocaml_avcodec_subtitle_codec_id_to_AVCodecID(value _codec_id) { CAMLparam1(_codec_id); CAMLreturn(Val_int(SubtitleCodecID_val(_codec_id))); } /***** AVCodecContext *****/ static inline AVCodecContext *create_AVCodecContext(AVCodec *codec) { AVCodecContext *codec_context = NULL; if(codec) { caml_release_runtime_system(); codec_context = avcodec_alloc_context3(codec); caml_acquire_runtime_system(); } if( ! codec_context) caml_raise_out_of_memory(); // Open the codec caml_release_runtime_system(); int ret = avcodec_open2(codec_context, codec, NULL); caml_acquire_runtime_system(); if(ret < 0) { caml_release_runtime_system(); avcodec_free_context(&codec_context); caml_acquire_runtime_system(); ocaml_avutil_raise_error(ret); } return codec_context; } /***** AVCodecParameters *****/ CAMLprim value ocaml_avcodec_finalize_codec_parameters(value v) { CAMLparam1(v); caml_register_generational_global_root(&v); struct AVCodecParameters *codec_parameters = CodecParameters_val(v); caml_release_runtime_system(); avcodec_parameters_free(&codec_parameters); caml_acquire_runtime_system(); caml_remove_generational_global_root(&v); CAMLreturn(Val_unit); } static struct custom_operations codec_parameters_ops = { "ocaml_avcodec_parameters", custom_finalize_default, custom_compare_default, custom_hash_default, custom_serialize_default, custom_deserialize_default }; void value_of_codec_parameters_copy(AVCodecParameters *src, value * pvalue) { if (!src) Fail( "Failed to get codec parameters"); caml_release_runtime_system(); AVCodecParameters *dst = avcodec_parameters_alloc(); caml_acquire_runtime_system(); if( ! dst) caml_raise_out_of_memory(); caml_release_runtime_system(); int ret = avcodec_parameters_copy(dst, src); caml_acquire_runtime_system(); if(ret < 0) ocaml_avutil_raise_error(ret); *pvalue = caml_alloc_custom(&codec_parameters_ops, sizeof(AVCodecParameters*), 0, 1); CodecParameters_val(*pvalue) = dst; Finalize("ocaml_avcodec_finalize_codec_parameters", *pvalue); } /***** AVPacket *****/ CAMLprim value ocaml_avcodec_finalize_packet(value v) { CAMLparam1(v); caml_register_generational_global_root(&v); struct AVPacket *packet = Packet_val(v); caml_release_runtime_system(); av_packet_free(&packet); caml_acquire_runtime_system(); caml_remove_generational_global_root(&v); CAMLreturn(Val_unit); } static struct custom_operations packet_ops = { "ocaml_packet", custom_finalize_default, custom_compare_default, custom_hash_default, custom_serialize_default, custom_deserialize_default }; value value_of_ffmpeg_packet(AVPacket *packet) { value ret; if(!packet) Fail( "Empty packet"); ret = caml_alloc_custom(&packet_ops, sizeof(AVPacket*), 0, 1); Packet_val(ret) = packet; Finalize("ocaml_avcodec_finalize_packet", ret); return ret; } CAMLprim value ocaml_avcodec_get_packet_size(value _packet) { CAMLparam1(_packet); CAMLreturn(Val_int(Packet_val(_packet)->size)); } CAMLprim value ocaml_avcodec_get_packet_stream_index(value _packet) { CAMLparam1(_packet); CAMLreturn(Val_int(Packet_val(_packet)->stream_index)); } CAMLprim value ocaml_avcodec_set_packet_stream_index(value _packet, value _index) { CAMLparam1(_packet); Packet_val(_packet)->stream_index = Int_val(_index); CAMLreturn(Val_unit); } CAMLprim value ocaml_avcodec_packet_to_bytes(value _packet) { CAMLparam1(_packet); CAMLlocal1(ans); struct AVPacket *packet = Packet_val(_packet); ans = caml_alloc_string(packet->size); memcpy((uint8_t*)String_val(ans), packet->data, packet->size); CAMLreturn(ans); } /***** AVCodecParserContext *****/ typedef struct { AVCodecParserContext *context; AVCodecContext *codec_context; } parser_t; #define Parser_val(v) (*(parser_t**)Data_custom_val(v)) static void free_parser(parser_t *parser) { if( ! parser) return; caml_release_runtime_system(); if(parser->context) av_parser_close(parser->context); if(parser->codec_context) avcodec_free_context(&parser->codec_context); caml_acquire_runtime_system(); free(parser); } CAMLprim value ocaml_avcodec_finalize_parser(value v) { CAMLparam1(v); caml_register_generational_global_root(&v); free_parser(Parser_val(v)); caml_remove_generational_global_root(&v); CAMLreturn(Val_unit); } static struct custom_operations parser_ops = { "ocaml_avcodec_parser", custom_finalize_default, custom_compare_default, custom_hash_default, custom_serialize_default, custom_deserialize_default }; static inline parser_t *create_parser(AVCodec *codec) { parser_t * parser = (parser_t*)calloc(1, sizeof(parser_t)); if ( ! parser) caml_raise_out_of_memory(); caml_release_runtime_system(); parser->context = av_parser_init(codec->id); caml_acquire_runtime_system(); if ( ! parser->context) { free_parser(parser); caml_raise_out_of_memory(); } parser->codec_context = create_AVCodecContext(codec); if( ! parser->codec_context) { free_parser(parser); caml_raise_out_of_memory(); } return parser; } CAMLprim value ocaml_avcodec_create_parser(value _codec) { CAMLparam0(); CAMLlocal1(ans); AVCodec *codec = (AVCodec *)_codec; parser_t *parser = create_parser(codec); ans = caml_alloc_custom(&parser_ops, sizeof(parser_t*), 0, 1); Parser_val(ans) = parser; Finalize("ocaml_avcodec_finalize_parser", ans); CAMLreturn(ans); } CAMLprim value ocaml_avcodec_parse_packet(value _parser, value _data, value _ofs, value _len) { CAMLparam2(_parser, _data); CAMLlocal3(val_packet, tuple, ans); parser_t *parser = Parser_val(_parser); uint8_t *data = Caml_ba_data_val(_data) + Int_val(_ofs); size_t init_len = Int_val(_len); size_t len = init_len; int ret = 0; caml_release_runtime_system(); AVPacket *packet = av_packet_alloc(); caml_acquire_runtime_system(); if( ! packet) caml_raise_out_of_memory(); caml_release_runtime_system(); do { ret = av_parser_parse2(parser->context, parser->codec_context, &packet->data, &packet->size, data, len, AV_NOPTS_VALUE, AV_NOPTS_VALUE, 0); data += ret; len -= ret; } while(packet->size == 0 && ret > 0); if (ret < 0) { av_packet_free(&packet); caml_acquire_runtime_system(); ocaml_avutil_raise_error(ret); } caml_acquire_runtime_system(); if(packet->size) { val_packet = value_of_ffmpeg_packet(packet); tuple = caml_alloc_tuple(2); Store_field(tuple, 0, val_packet); Store_field(tuple, 1, Val_int(init_len - len)); ans = caml_alloc(1, 0); Store_field(ans, 0, tuple); } else { caml_release_runtime_system(); av_packet_free(&packet); caml_acquire_runtime_system(); ans = Val_int(0); } CAMLreturn(ans); } /***** codec_context_t *****/ typedef struct { AVCodec *codec; AVCodecContext *codec_context; // output int bit_rate; int frame_rate; AVAudioFifo *audio_fifo; AVFrame *enc_frame; int64_t pts; int flushed; } codec_context_t; #define CodecContext_val(v) (*(codec_context_t**)Data_custom_val(v)) static void free_codec_context(codec_context_t *ctx) { if( ! ctx) return; caml_release_runtime_system(); if(ctx->codec_context) avcodec_free_context(&ctx->codec_context); if(ctx->audio_fifo) { av_audio_fifo_free(ctx->audio_fifo); } if(ctx->enc_frame) { av_frame_free(&ctx->enc_frame); } caml_acquire_runtime_system(); free(ctx); } CAMLprim value ocaml_avcodec_finalize_codec_context(value v) { CAMLparam1(v); caml_register_generational_global_root(&v); free_codec_context(CodecContext_val(v)); caml_remove_generational_global_root(&v); CAMLreturn(Val_unit); } static struct custom_operations codec_context_ops = { "ocaml_codec_context", custom_finalize_default, custom_compare_default, custom_hash_default, custom_serialize_default, custom_deserialize_default }; static inline codec_context_t * create_codec_context(AVCodec *codec, int decoder) { codec_context_t * ctx = (codec_context_t*)calloc(1, sizeof(codec_context_t)); if ( ! ctx) caml_raise_out_of_memory(); if(decoder) { ctx->codec = codec; ctx->codec_context = create_AVCodecContext(ctx->codec); if( ! ctx->codec_context) { free_codec_context(ctx); caml_raise_out_of_memory(); } } else { ctx->codec = codec; // in case of encoding, the AVCodecContext will be created with the properties of the first sended frame } return ctx; } CAMLprim value ocaml_avcodec_create_context(value _codec, value _decoder, value _bit_rate, value _frame_rate) { CAMLparam2(_bit_rate, _frame_rate); CAMLlocal1(ans); AVCodec *codec = (AVCodec *)_codec; codec_context_t * ctx = create_codec_context(codec, Int_val(_decoder)); ans = caml_alloc_custom(&codec_context_ops, sizeof(codec_context_t*), 0, 1); CodecContext_val(ans) = ctx; Finalize("ocaml_avcodec_finalize_codec_context", ans); ctx->bit_rate = Is_block(_bit_rate) ? Int_val(Field(_bit_rate, 0)) : 0; ctx->frame_rate = Is_block(_frame_rate) ? Int_val(Field(_frame_rate, 0)) : 0; CAMLreturn(ans); } static inline void open_codec(codec_context_t *ctx, AVFrame *frame) { if( ! frame) Fail( "Failed to open encoder without frame"); AVCodec *codec = ctx->codec; if(codec->type != AVMEDIA_TYPE_AUDIO && codec->type != AVMEDIA_TYPE_VIDEO) Fail( "Failed to open unsupported encoder type"); caml_release_runtime_system(); ctx->codec_context = avcodec_alloc_context3(codec); if( ! ctx->codec_context) { caml_acquire_runtime_system(); caml_raise_out_of_memory(); } if(codec->type == AVMEDIA_TYPE_AUDIO) { ctx->codec_context->channel_layout = frame->channel_layout; ctx->codec_context->channels = frame->channels; ctx->codec_context->sample_fmt = (enum AVSampleFormat)frame->format; ctx->codec_context->sample_rate = frame->sample_rate; ctx->codec_context->time_base = (AVRational){1, frame->sample_rate}; } else { ctx->codec_context->width = frame->width; ctx->codec_context->height = frame->height; ctx->codec_context->pix_fmt = (enum AVPixelFormat)frame->format; ctx->codec_context->framerate = (AVRational){ctx->frame_rate, 1}; ctx->codec_context->time_base = (AVRational){1, ctx->frame_rate}; } ctx->codec_context->bit_rate = ctx->bit_rate; // Open the codec int ret = avcodec_open2(ctx->codec_context, NULL, NULL); if(ret < 0) { caml_acquire_runtime_system(); ocaml_avutil_raise_error(ret); } if (ctx->codec_context->frame_size > 0 || ! (ctx->codec_context->codec->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE)) { // Allocate the buffer frame and audio fifo if the codec doesn't support variable frame size ctx->enc_frame = av_frame_alloc(); if( ! ctx->enc_frame) { caml_acquire_runtime_system(); caml_raise_out_of_memory(); } ctx->enc_frame->nb_samples = ctx->codec_context->frame_size; ctx->enc_frame->channel_layout = ctx->codec_context->channel_layout; ctx->enc_frame->format = ctx->codec_context->sample_fmt; ctx->enc_frame->sample_rate = ctx->codec_context->sample_rate; int ret = av_frame_get_buffer(ctx->enc_frame, 0); if (ret < 0) { caml_acquire_runtime_system(); ocaml_avutil_raise_error(ret); } // Create the FIFO buffer based on the specified output sample format. ctx->audio_fifo = av_audio_fifo_alloc(ctx->codec_context->sample_fmt, ctx->codec_context->channels, 1); if( ! ctx->audio_fifo) { caml_acquire_runtime_system(); caml_raise_out_of_memory(); } } } CAMLprim value ocaml_avcodec_send_packet(value _ctx, value _packet) { CAMLparam2(_ctx, _packet); codec_context_t *ctx = CodecContext_val(_ctx); AVPacket *packet = _packet ? Packet_val(_packet) : NULL; // send the packet with the compressed data to the decoder caml_release_runtime_system(); int ret = avcodec_send_packet(ctx->codec_context, packet); caml_acquire_runtime_system(); if(ret < 0) ocaml_avutil_raise_error(ret); CAMLreturn(Val_unit); } CAMLprim value ocaml_avcodec_receive_frame(value _ctx) { CAMLparam1(_ctx); CAMLlocal2(val_frame, ans); codec_context_t *ctx = CodecContext_val(_ctx); int ret = 0; caml_release_runtime_system(); AVFrame * frame = av_frame_alloc(); if (!frame) { caml_acquire_runtime_system(); caml_raise_out_of_memory(); } ret = avcodec_receive_frame(ctx->codec_context, frame); if (ret < 0 && ret != AVERROR(EAGAIN)) { av_frame_free(&frame); caml_acquire_runtime_system(); ocaml_avutil_raise_error(ret); } caml_acquire_runtime_system(); if (ret == AVERROR(EAGAIN)) { ans = Val_int(0); } else { ans = caml_alloc(1, 0); val_frame = value_of_frame(frame); Store_field(ans, 0, val_frame); } CAMLreturn(ans); } CAMLprim value ocaml_avcodec_flush_decoder(value _ctx) { ocaml_avcodec_send_packet(_ctx, 0); return Val_unit; } static inline void send_audio_fifo_frame(codec_context_t *ctx) { AVFrame * frame = ctx->enc_frame; int frame_size = ctx->codec_context->frame_size; AVAudioFifo *fifo = ctx->audio_fifo; int ret; caml_release_runtime_system(); int fifo_size = av_audio_fifo_size(fifo); caml_acquire_runtime_system(); if(fifo_size < frame_size) { if(ctx->flushed) frame_size = fifo_size; else return; } if(fifo_size > 0) { caml_release_runtime_system(); ret = av_frame_make_writable(frame); caml_acquire_runtime_system(); if (ret < 0) ocaml_avutil_raise_error(ret); caml_release_runtime_system(); int read_size = av_audio_fifo_read(fifo, (void **)frame->data, frame_size); caml_acquire_runtime_system(); if (read_size < frame_size) { return ocaml_avutil_raise_error(AVERROR_EXTERNAL); } frame->nb_samples = frame_size; frame->pts = ctx->pts; ctx->pts += frame_size; } else { frame = NULL; } caml_release_runtime_system(); ret = avcodec_send_frame(ctx->codec_context, frame); caml_acquire_runtime_system(); if (ret < 0) ocaml_avutil_raise_error(ret); } static inline int send_frame(codec_context_t *ctx, AVFrame *frame) { int ret; if(!ctx->codec_context) open_codec(ctx, frame); ctx->flushed = ! frame; if(ctx->codec->type == AVMEDIA_TYPE_VIDEO) { if(frame) { frame->pts = ctx->pts++; } caml_release_runtime_system(); ret = avcodec_send_frame(ctx->codec_context, frame); caml_acquire_runtime_system(); if (ret == AVERROR(EAGAIN)) return ret; if (ret < 0) ocaml_avutil_raise_error(ret); } else if(ctx->audio_fifo == NULL) { if(frame) { frame->pts = ctx->pts; ctx->pts += frame->nb_samples; } caml_release_runtime_system(); ret = avcodec_send_frame(ctx->codec_context, frame); caml_acquire_runtime_system(); if (ret == AVERROR(EAGAIN)) return ret; if (ret < 0) ocaml_avutil_raise_error(ret); } else { if(frame != NULL) { AVAudioFifo *fifo = ctx->audio_fifo; int fifo_size = av_audio_fifo_size(fifo); fifo_size += frame->nb_samples; caml_release_runtime_system(); ret = av_audio_fifo_realloc(fifo, fifo_size); caml_acquire_runtime_system(); if (ret < 0) ocaml_avutil_raise_error(ret); // Store the new samples in the FIFO buffer. caml_release_runtime_system(); ret = av_audio_fifo_write(fifo, (void **)(const uint8_t**)frame->extended_data, frame->nb_samples); caml_acquire_runtime_system(); if (ret == AVERROR(EAGAIN)) return ret; if (ret < frame->nb_samples) Fail("Invalid number of samples written to audio fifo queue"); } send_audio_fifo_frame(ctx); } return 0; } CAMLprim value ocaml_avcodec_send_frame(value _ctx, value _frame) { CAMLparam2(_ctx, _frame); CAMLlocal1(val_packet); codec_context_t *ctx = CodecContext_val(_ctx); AVFrame *frame = _frame ? Frame_val(_frame) : NULL; int ret = send_frame(ctx, frame); if (ret < 0) ocaml_avutil_raise_error(ret); CAMLreturn(Val_unit); } CAMLprim value ocaml_avcodec_receive_packet(value _ctx) { CAMLparam1(_ctx); CAMLlocal2(val_packet, ans); codec_context_t *ctx = CodecContext_val(_ctx); int ret = 0; caml_release_runtime_system(); AVPacket *packet = av_packet_alloc(); caml_acquire_runtime_system(); if (!packet) caml_raise_out_of_memory(); for (; packet && ret >= 0;) { caml_release_runtime_system(); ret = avcodec_receive_packet(ctx->codec_context, packet); caml_acquire_runtime_system(); if(ret == AVERROR(EAGAIN) && ctx->audio_fifo) { send_audio_fifo_frame(ctx); } else break; } if (ret < 0) { caml_release_runtime_system(); av_packet_free(&packet); caml_acquire_runtime_system(); if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) ans = Val_int(0); else ocaml_avutil_raise_error(ret); } else { ans = caml_alloc(1, 0); val_packet = value_of_ffmpeg_packet(packet); Store_field(ans, 0, val_packet); } CAMLreturn(ans); } CAMLprim value ocaml_avcodec_flush_encoder(value _ctx) { ocaml_avcodec_send_frame(_ctx, 0); return Val_unit; } /**** codec ****/ static AVCodec *find_encoder(const char *name, enum AVMediaType type) { caml_release_runtime_system(); AVCodec *codec = avcodec_find_encoder_by_name(name); caml_acquire_runtime_system(); if (!codec || codec->type != type) ocaml_avutil_raise_error(AVERROR_ENCODER_NOT_FOUND); return codec; } static AVCodec *find_decoder(const char *name, enum AVMediaType type) { caml_release_runtime_system(); AVCodec *codec = avcodec_find_decoder_by_name(name); caml_acquire_runtime_system(); if (!codec || codec->type != type) ocaml_avutil_raise_error(AVERROR_DECODER_NOT_FOUND); return codec; } CAMLprim value ocaml_avcodec_parameters_get_bit_rate(value _cp) { CAMLparam1(_cp); CAMLreturn(Val_int(CodecParameters_val(_cp)->bit_rate)); } /**** Audio codec ID ****/ CAMLprim value ocaml_avcodec_get_audio_codec_id(value _codec) { CAMLparam0(); AVCodec *codec = (AVCodec *)_codec; CAMLreturn(value_of_audio_codec_id(codec->id)); } CAMLprim value ocaml_avcodec_get_video_codec_id(value _codec) { CAMLparam0(); AVCodec *codec = (AVCodec *)_codec; CAMLreturn(value_of_video_codec_id(codec->id)); } CAMLprim value ocaml_avcodec_get_subtitle_codec_id(value _codec) { CAMLparam0(); AVCodec *codec = (AVCodec *)_codec; CAMLreturn(value_of_subtitle_codec_id(codec->id)); } CAMLprim value ocaml_avcodec_get_audio_codec_id_name(value _codec_id) { CAMLparam1(_codec_id); CAMLreturn(caml_copy_string(avcodec_get_name((enum AVCodecID)AudioCodecID_val(_codec_id)))); } CAMLprim value ocaml_avcodec_find_audio_encoder(value _name) { CAMLparam1(_name); CAMLreturn((value)find_encoder(String_val(_name), AVMEDIA_TYPE_AUDIO)); } CAMLprim value ocaml_avcodec_find_audio_decoder(value _name) { CAMLparam1(_name); CAMLreturn((value)find_decoder(String_val(_name), AVMEDIA_TYPE_AUDIO)); } CAMLprim value ocaml_avcodec_get_supported_channel_layouts(value _codec) { CAMLparam0(); CAMLlocal2(list, cons); int i; List_init(list); AVCodec *codec = (AVCodec *)_codec; if(codec->channel_layouts) { for(i = 0; codec->channel_layouts[i] != -1; i++) List_add(list, cons, Val_ChannelLayout(codec->channel_layouts[i])); } CAMLreturn(list); } CAMLprim value ocaml_avcodec_get_supported_sample_formats(value _codec) { CAMLparam0(); CAMLlocal2(list, cons); int i; List_init(list); AVCodec *codec = (AVCodec *)_codec; if(codec->sample_fmts) { for(i = 0; codec->sample_fmts[i] != -1; i++) List_add(list, cons, Val_SampleFormat(codec->sample_fmts[i])); } CAMLreturn(list); } CAMLprim value ocaml_avcodec_get_supported_sample_rates(value _codec) { CAMLparam0(); CAMLlocal2(list, cons); int i; List_init(list); AVCodec *codec = (AVCodec *)_codec; if(codec->supported_samplerates) { for(i = 0; codec->supported_samplerates[i] != 0; i++) List_add(list, cons, Val_int(codec->supported_samplerates[i])); } CAMLreturn(list); } /**** Audio codec parameters ****/ CAMLprim value ocaml_avcodec_parameters_get_audio_codec_id(value _cp) { CAMLparam1(_cp); CAMLreturn(value_of_audio_codec_id(CodecParameters_val(_cp)->codec_id)); } CAMLprim value ocaml_avcodec_parameters_get_channel_layout(value _cp) { CAMLparam1(_cp); AVCodecParameters * cp = CodecParameters_val(_cp); if(cp->channel_layout == 0) { cp->channel_layout = av_get_default_channel_layout(cp->channels); } CAMLreturn(Val_ChannelLayout(cp->channel_layout)); } CAMLprim value ocaml_avcodec_parameters_get_nb_channels(value _cp) { CAMLparam1(_cp); CAMLreturn(Val_int(CodecParameters_val(_cp)->channels)); } CAMLprim value ocaml_avcodec_parameters_get_sample_format(value _cp) { CAMLparam1(_cp); CAMLreturn(Val_SampleFormat((enum AVSampleFormat)CodecParameters_val(_cp)->format)); } CAMLprim value ocaml_avcodec_parameters_get_sample_rate(value _cp) { CAMLparam1(_cp); CAMLreturn(Val_int(CodecParameters_val(_cp)->sample_rate)); } CAMLprim value ocaml_avcodec_parameters_audio_copy(value _codec_id, value _channel_layout, value _sample_format, value _sample_rate, value _cp) { CAMLparam4(_codec_id, _channel_layout, _sample_format, _cp); CAMLlocal1(ans); value_of_codec_parameters_copy(CodecParameters_val(_cp), &ans); AVCodecParameters * dst = CodecParameters_val(ans); dst->codec_id = AudioCodecID_val(_codec_id); dst->channel_layout = ChannelLayout_val(_channel_layout); dst->channels = av_get_channel_layout_nb_channels(dst->channel_layout); dst->format = SampleFormat_val(_sample_format); dst->sample_rate = Int_val(_sample_rate); CAMLreturn(ans); } /**** Video codec ID ****/ CAMLprim value ocaml_avcodec_get_video_codec_id_name(value _codec_id) { CAMLparam1(_codec_id); CAMLreturn(caml_copy_string(avcodec_get_name(VideoCodecID_val(_codec_id)))); } CAMLprim value ocaml_avcodec_find_video_decoder(value _name) { CAMLparam1(_name); CAMLreturn((value)find_decoder(String_val(_name), AVMEDIA_TYPE_VIDEO)); } CAMLprim value ocaml_avcodec_find_video_encoder(value _name) { CAMLparam1(_name); CAMLreturn((value)find_encoder(String_val(_name), AVMEDIA_TYPE_VIDEO)); } CAMLprim value ocaml_avcodec_get_supported_frame_rates(value _codec) { CAMLparam0(); CAMLlocal3(list, cons, val); int i; List_init(list); AVCodec *codec = (AVCodec *)_codec; if(codec->supported_framerates) { for(i = 0; codec->supported_framerates[i].num != 0; i++) { value_of_rational(&codec->supported_framerates[i], &val); List_add(list, cons, val); } } CAMLreturn(list); } CAMLprim value ocaml_avcodec_get_supported_pixel_formats(value _codec) { CAMLparam0(); CAMLlocal2(list, cons); int i; List_init(list); AVCodec *codec = (AVCodec *)_codec; if(codec->pix_fmts) { for(i = 0; codec->pix_fmts[i] != -1; i++) List_add(list, cons, Val_PixelFormat(codec->pix_fmts[i])); } CAMLreturn(list); } /**** Video codec parameters ****/ CAMLprim value ocaml_avcodec_parameters_get_video_codec_id(value _cp) { CAMLparam1(_cp); CAMLreturn(value_of_video_codec_id(CodecParameters_val(_cp)->codec_id)); } CAMLprim value ocaml_avcodec_parameters_get_width(value _cp) { CAMLparam1(_cp); CAMLreturn(Val_int(CodecParameters_val(_cp)->width)); } CAMLprim value ocaml_avcodec_parameters_get_height(value _cp) { CAMLparam1(_cp); CAMLreturn(Val_int(CodecParameters_val(_cp)->height)); } CAMLprim value ocaml_avcodec_parameters_get_sample_aspect_ratio(value _cp) { CAMLparam1(_cp); CAMLlocal1(ans); value_of_rational(&CodecParameters_val(_cp)->sample_aspect_ratio, &ans); CAMLreturn(ans); } CAMLprim value ocaml_avcodec_parameters_get_pixel_format(value _cp) { CAMLparam1(_cp); CAMLreturn(Val_PixelFormat((enum AVPixelFormat)CodecParameters_val(_cp)->format)); } CAMLprim value ocaml_avcodec_parameters_video_copy(value _codec_id, value _width, value _height, value _sample_aspect_ratio, value _pixel_format, value _bit_rate, value _cp) { CAMLparam4(_codec_id, _sample_aspect_ratio, _pixel_format, _cp); CAMLlocal1(ans); value_of_codec_parameters_copy(CodecParameters_val(_cp), &ans); AVCodecParameters * dst = CodecParameters_val(ans); dst->codec_id = VideoCodecID_val(_codec_id); dst->width = Int_val(_width); dst->height = Int_val(_height); dst->sample_aspect_ratio.num = Int_val(Field(_sample_aspect_ratio, 0)); dst->sample_aspect_ratio.den = Int_val(Field(_sample_aspect_ratio, 1)); dst->format = PixelFormat_val(_pixel_format); dst->bit_rate = Int_val(_bit_rate); CAMLreturn(ans); } CAMLprim value ocaml_avcodec_parameters_video_copy_byte(value *argv, int argn) { return ocaml_avcodec_parameters_video_copy(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[7]); } /**** Subtitle codec ID ****/ CAMLprim value ocaml_avcodec_get_subtitle_codec_id_name(value _codec_id) { CAMLparam1(_codec_id); CAMLreturn(caml_copy_string(avcodec_get_name(SubtitleCodecID_val(_codec_id)))); } CAMLprim value ocaml_avcodec_find_subtitle_decoder(value _name) { CAMLparam1(_name); CAMLreturn((value)find_decoder(String_val(_name), AVMEDIA_TYPE_SUBTITLE)); } CAMLprim value ocaml_avcodec_find_subtitle_encoder(value _name) { CAMLparam1(_name); CAMLreturn((value)find_encoder(String_val(_name), AVMEDIA_TYPE_SUBTITLE)); } /**** Subtitle codec parameters ****/ CAMLprim value ocaml_avcodec_parameters_get_subtitle_codec_id(value _cp) { CAMLparam1(_cp); CAMLreturn(value_of_subtitle_codec_id(CodecParameters_val(_cp)->codec_id)); } CAMLprim value ocaml_avcodec_parameters_subtitle_copy(value _codec_id, value _cp) { CAMLparam2(_codec_id, _cp); CAMLlocal1(ans); value_of_codec_parameters_copy(CodecParameters_val(_cp), &ans); AVCodecParameters * dst = CodecParameters_val(ans); dst->codec_id = SubtitleCodecID_val(_codec_id); CAMLreturn(ans); } ocaml-ffmpeg-0.4.1/src/av.ml0000644000175000017500000003343113543206341015501 0ustar smimramsmimramopen Avutil external init : unit -> unit = "ocaml_av_init" [@@noalloc] let () = init () (* Format *) module Format = struct external get_input_name : (input, _) format -> string = "ocaml_av_input_format_get_name" external get_input_long_name : (input, _) format -> string = "ocaml_av_input_format_get_long_name" external get_output_name : (output, _) format -> string = "ocaml_av_output_format_get_name" external get_output_long_name : (output, _) format -> string = "ocaml_av_output_format_get_long_name" external get_audio_codec_id : (output, audio) format -> Avcodec.Audio.id = "ocaml_av_output_format_get_audio_codec_id" external get_video_codec_id : (output, video) format -> Avcodec.Video.id = "ocaml_av_output_format_get_video_codec_id" external get_subtitle_codec_id : (output, subtitle) format -> Avcodec.Subtitle.id = "ocaml_av_output_format_get_subtitle_codec_id" external guess_output_format : string -> string -> string -> (output, 'a) format option = "ocaml_av_output_format_guess" let guess_output_format ?(short_name="") ?(filename="") ?(mime="") () = guess_output_format short_name filename mime end external finalize_av : _ container -> unit = "ocaml_av_finalize_av" let () = Callback.register "ocaml_av_finalize_av" finalize_av (* Input *) external open_input : string -> input container = "ocaml_av_open_input" external open_input_format : (input, _)format -> input container = "ocaml_av_open_input_format" type avio type read = bytes -> int -> int -> int type write = bytes -> int -> int -> int type _seek = int -> int -> int type seek = int -> Unix.seek_command -> int let seek_of_int = function | 0 -> Unix.SEEK_SET | 1 -> Unix.SEEK_CUR | 2 -> Unix.SEEK_END | _ -> assert false; external ocaml_av_create_io : int -> read option -> write option -> _seek option -> avio = "ocaml_av_create_io" let _seek_of_seek = function | None -> None | Some fn -> Some (fun a m -> fn a (seek_of_int m)) let ocaml_av_create_read_io len ?seek read = ocaml_av_create_io len (Some read) None (_seek_of_seek seek) external ocaml_av_open_input_stream : avio -> input container = "ocaml_av_open_input_stream" external caml_av_input_io_finalise : avio -> unit = "caml_av_input_io_finalise" let open_input_stream ?seek read = let avio = ocaml_av_create_read_io 4096 ?seek read in let cleanup () = caml_av_input_io_finalise avio in let input = ocaml_av_open_input_stream avio in Gc.finalise_last cleanup input; input external _get_duration : input container -> int -> Time_format.t -> Int64.t = "ocaml_av_get_duration" let get_input_duration ?(format=`Second) i = _get_duration i (-1) format external _get_metadata : input container -> int -> (string * string) list = "ocaml_av_get_metadata" let get_input_metadata i = List.rev(_get_metadata i (-1)) (* Input Stream *) type ('a, 'b) stream = {container : 'a container; index : int} type media_type = MT_audio | MT_video | MT_subtitle let mk_stream container index = {container; index} external get_codec_params : (_, 'm)stream -> 'm Avcodec.params = "ocaml_av_get_stream_codec_parameters" external get_time_base : (_, _)stream -> Avutil.rational = "ocaml_av_get_stream_time_base" external set_time_base : (_, _)stream -> Avutil.rational -> unit = "ocaml_av_set_stream_time_base" external _get_streams : input container -> media_type -> int list = "ocaml_av_get_streams" let get_streams input media_type = _get_streams input media_type |> List.rev_map(fun i -> let s = mk_stream input i in (i, s, get_codec_params s)) let get_audio_streams input = get_streams input MT_audio let get_video_streams input = get_streams input MT_video let get_subtitle_streams input = get_streams input MT_subtitle external _find_best_stream : input container -> media_type -> int = "ocaml_av_find_best_stream" let find_best_stream c t = let i = _find_best_stream c t in let s = mk_stream c i in (i, s, get_codec_params s) let find_best_audio_stream c = find_best_stream c MT_audio let find_best_video_stream c = find_best_stream c MT_video let find_best_subtitle_stream c = find_best_stream c MT_subtitle let get_input s = s.container let get_index s = s.index let get_duration ?(format=`Second) s = _get_duration s.container s.index format let get_metadata s = List.rev(_get_metadata s.container s.index) external select : (input, _)stream -> unit = "ocaml_av_select_stream" external read_packet : (input, 'm)stream -> 'm Avcodec.Packet.t = "ocaml_av_read_stream_packet" let rec iter_packet f stream = try f (read_packet stream); iter_packet f stream with | Error `Eof -> () external read_frame : (input, 'm)stream -> 'm frame = "ocaml_av_read_stream_frame" let rec iter_frame f s = try f (read_frame s); iter_frame f s with | Error `Eof -> () type input_packet_result = [ | `Audio of int * audio Avcodec.Packet.t | `Video of int * video Avcodec.Packet.t | `Subtitle of int * subtitle Avcodec.Packet.t ] (** Reads the selected streams if any or all streams otherwise. *) external read_input_packet : input container -> input_packet_result = "ocaml_av_read_input_packet" (** Reads iteratively the selected streams if any or all streams otherwise. *) let iter_input_packet ?(audio=(fun _ _->())) ?(video=(fun _ _->())) ?(subtitle=(fun _ _->())) src = let rec iter() = match read_input_packet src with | `Audio(index, packet) -> audio index packet; iter() | `Video(index, packet) -> video index packet; iter() | `Subtitle(index, packet) -> subtitle index packet; iter() in try iter() with Error `Eof -> () type input_frame_result = [ | `Audio of int * audio frame | `Video of int * video frame | `Subtitle of int * subtitle frame ] (** Reads the selected streams if any or all streams otherwise. *) external read_input_frame : input container -> input_frame_result = "ocaml_av_read_input_frame" (** Reads iteratively the selected streams if any or all streams otherwise. *) let iter_input_frame ?(audio=(fun _ _->())) ?(video=(fun _ _->())) ?(subtitle=(fun _ _->())) src = let rec iter() = match read_input_frame src with | `Audio(index, frame) -> audio index frame; iter() | `Video(index, frame) -> video index frame; iter() | `Subtitle(index, frame) -> subtitle index frame; iter() in try iter() with Error `Eof -> () type seek_flag = Seek_flag_backward | Seek_flag_byte | Seek_flag_any | Seek_flag_frame external seek : (input, _)stream -> Time_format.t -> Int64.t -> seek_flag array -> unit = "ocaml_av_seek_frame" external reuse_output : input container -> bool -> unit = "ocaml_av_reuse_output" let _opt_val = function | `String s -> s | `Int i -> string_of_int i | `Float f -> string_of_float f let opts_default = function | None -> Hashtbl.create 0 | Some opts -> opts let mk_opts opts = Array.of_list (Hashtbl.fold (fun opt_name opt_val cur -> (opt_name, _opt_val opt_val)::cur) opts []) let filter_opts unused opts = Hashtbl.filter_map_inplace (fun k v -> if (Array.mem k unused) then Some v else None) opts (* Output *) external open_output : string -> (string*string) array -> (output container)*(string array) = "ocaml_av_open_output" let open_output ?opts fname = let opts = opts_default opts in let ret, unused = open_output fname (mk_opts opts) in filter_opts unused opts; ret external ocaml_av_open_output_stream : (output, _) format -> avio -> (string*string) array -> (output container)*(string array) = "ocaml_av_open_output_stream" let open_output_stream ?opts ?seek write format = let opts = opts_default opts in let avio = ocaml_av_create_io 4096 None (Some write) (_seek_of_seek seek) in let cleanup () = caml_av_input_io_finalise avio in let output, unused = ocaml_av_open_output_stream format avio (mk_opts opts) in filter_opts unused opts; Gc.finalise_last cleanup output; output external _set_metadata : output container -> int -> (string * string) array -> unit = "ocaml_av_set_metadata" let set_output_metadata o tags = _set_metadata o (-1) (Array.of_list tags) let set_metadata s tags = _set_metadata s.container s.index (Array.of_list tags) let get_output s = s.container let on_opt v fn = match v with | None -> () | Some v -> fn v let mk_base_opts ?bit_rate ?time_base () = let opts = Hashtbl.create 0 in on_opt bit_rate (fun b -> Hashtbl.add opts "b" (`Int b)); on_opt time_base (fun {num;den} -> Hashtbl.add opts "time_base" (`String (Printf.sprintf "%d/%d" num den))); opts let mk_audio_opts ?channels ?channel_layout ?bit_rate ?sample_rate ?sample_format ?time_base ?params ?stream () = let if_opt v d = match v with | None -> Some d | Some _ -> v in let params = match params, stream with | Some _, _ -> params | None, Some s -> Some (get_codec_params s) | _ -> None in let channels, channel_layout, bit_rate, sample_rate, sample_format = match params with | None -> channels, channel_layout, bit_rate, sample_rate, sample_format | Some p -> if_opt channels (Avcodec.Audio.get_nb_channels p), if_opt channel_layout (Avcodec.Audio.get_channel_layout p), if_opt bit_rate (Avcodec.Audio.get_bit_rate p), if_opt sample_rate (Avcodec.Audio.get_sample_rate p), if_opt sample_format (Avcodec.Audio.get_sample_format p) in let sample_rate = match sample_rate with | Some r -> r | None -> 44100 in let channels = match channels with | Some c -> c | None -> match channel_layout with | Some l -> Avutil.Channel_layout.get_nb_channels l | None -> 2 in let channel_layout = match channel_layout with | Some cl -> cl | None -> try Avutil.Channel_layout.get_default channels with | Not_found -> raise (Error (`Failure (Printf.sprintf "Could not find a suitable channel layout for %d channels" channels))) in let time_base = if_opt time_base {num = 1; den = sample_rate} in let opts = mk_base_opts ?bit_rate ?time_base () in Hashtbl.add opts "ar" (`Int sample_rate); Hashtbl.add opts "ac" (`Int channels); Hashtbl.add opts "channel_layout" (`Int (Channel_layout.get_id channel_layout)); on_opt bit_rate (fun br -> Hashtbl.add opts "b" (`Int br)); on_opt sample_format (fun sf -> Hashtbl.add opts "sample_fmt" (`Int (Avutil.Sample_format.get_id sf))); opts external new_audio_stream : output container -> int -> [`Encoder] Avcodec.Audio.t -> (string*string) array -> int*(string array) = "ocaml_av_new_audio_stream" let new_audio_stream ?opts ~codec container = let opts = match opts with | Some opts -> opts | None -> mk_audio_opts () in let sample_format = try let ret = Hashtbl.find opts "sample_fmt" in Hashtbl.filter_map_inplace (fun k v -> if k = "sample_fmt" then None else Some v) opts; match ret with | `String name -> Avutil.Sample_format.find name | `Int id -> Avutil.Sample_format.find_id id | `Float id -> Avutil.Sample_format.find_id (int_of_float id) with Not_found -> Avcodec.Audio.find_best_sample_format codec `Dbl in let ret, unused = new_audio_stream container (Sample_format.get_id sample_format) codec (mk_opts opts) in filter_opts unused opts; mk_stream container ret let mk_video_opts ?pixel_format ?size ?bit_rate ?frame_rate ?time_base ?params ?stream () = let if_opt v d = match v with | None -> Some d | Some _ -> v in let params = match params, stream with | Some _, _ -> params | None, Some s -> Some (get_codec_params s) | _ -> None in let pixel_format, bit_rate, size = match params with | None -> pixel_format, bit_rate, size | Some p -> if_opt pixel_format (Avcodec.Video.get_pixel_format p), if_opt bit_rate (Avcodec.Video.get_bit_rate p), if_opt size (Avcodec.Video.get_width p, Avcodec.Video.get_height p) in let frame_rate = match frame_rate with | Some r -> r | None -> 25 in let time_base = if_opt time_base {num = 1; den = 25} in let opts = mk_base_opts ?bit_rate ?time_base () in Hashtbl.add opts "r" (`Int frame_rate); on_opt pixel_format (fun pf -> Hashtbl.add opts "pixel_format" (`String (Pixel_format.to_string pf))); on_opt bit_rate (fun br -> Hashtbl.add opts "b" (`Int br)); on_opt size (fun (w,h) -> Hashtbl.add opts "video_size" (`String (Printf.sprintf "%dx%d" w h))); opts external new_video_stream : output container -> [`Encoder] Avcodec.Video.t -> (string*string) array -> int*(string array) = "ocaml_av_new_video_stream" let new_video_stream ?opts ~codec container = let opts = match opts with | Some opts -> opts | None -> mk_audio_opts () in let ret, unused = new_video_stream container codec (mk_opts opts) in filter_opts unused opts; mk_stream container ret let mk_subtitle_opts ?time_base () = mk_base_opts ?time_base () external new_subtitle_stream : output container -> [`Encoder] Avcodec.Subtitle.t -> (string*string) array -> int*(string array) = "ocaml_av_new_subtitle_stream" let new_subtitle_stream ?opts ~codec container = let opts = opts_default opts in let ret, unused = new_subtitle_stream container codec (mk_opts opts) in filter_opts unused opts; mk_stream container ret external write_packet : (output, 'media)stream -> 'media Avcodec.Packet.t -> unit = "ocaml_av_write_stream_packet" external write_frame : (output, 'media)stream -> 'media frame -> unit = "ocaml_av_write_stream_frame" external write_audio_frame : output container -> audio frame -> unit = "ocaml_av_write_audio_frame" external write_video_frame : output container -> video frame -> unit = "ocaml_av_write_video_frame" external close : _ container -> unit = "ocaml_av_close" ocaml-ffmpeg-0.4.1/src/pixel_format_stubs.h0000644000175000017500000001730713543206341020627 0ustar smimramsmimram#define VALUE_NOT_FOUND 0xFFFFFFF static const int64_t AV_PIX_FMT_T_TAB[][2] = { {(1741061553), AV_PIX_FMT_NONE}, {(-1593160079), AV_PIX_FMT_YUV420P}, {(1823801207), AV_PIX_FMT_YUYV422}, {(-160028705), AV_PIX_FMT_RGB24}, {(-1984176161), AV_PIX_FMT_BGR24}, {(-1593159187), AV_PIX_FMT_YUV422P}, {(-1592959379), AV_PIX_FMT_YUV444P}, {(-1593259537), AV_PIX_FMT_YUV410P}, {(-1593259091), AV_PIX_FMT_YUV411P}, {(1513033131), AV_PIX_FMT_GRAY8}, {(-1843470579), AV_PIX_FMT_MONOWHITE}, {(1753740601), AV_PIX_FMT_MONOBLACK}, {(1784026427), AV_PIX_FMT_PAL8}, {(2045275869), AV_PIX_FMT_YUVJ420P}, {(2045276761), AV_PIX_FMT_YUVJ422P}, {(2045476569), AV_PIX_FMT_YUVJ444P}, {(-495716069), AV_PIX_FMT_UYVY422}, {(-926922137), AV_PIX_FMT_UYYVYY411}, {(1474117975), AV_PIX_FMT_BGR8}, {(1474117967), AV_PIX_FMT_BGR4}, {(1370864065), AV_PIX_FMT_BGR4_BYTE}, {(1828976983), AV_PIX_FMT_RGB8}, {(1828976975), AV_PIX_FMT_RGB4}, {(2100560321), AV_PIX_FMT_RGB4_BYTE}, {(1741730451), AV_PIX_FMT_NV12}, {(1741730895), AV_PIX_FMT_NV21}, {(1453028057), AV_PIX_FMT_ARGB}, {(1828977065), AV_PIX_FMT_RGBA}, {(1451436761), AV_PIX_FMT_ABGR}, {(1474118057), AV_PIX_FMT_BGRA}, {(-328795433), AV_PIX_FMT_GRAY16BE}, {(-328790973), AV_PIX_FMT_GRAY16LE}, {(-1592961163), AV_PIX_FMT_YUV440P}, {(2045474785), AV_PIX_FMT_YUVJ440P}, {(481426891), AV_PIX_FMT_YUVA420P}, {(551678825), AV_PIX_FMT_RGB48BE}, {(551683285), AV_PIX_FMT_RGB48LE}, {(-927529259), AV_PIX_FMT_RGB565BE}, {(-927524799), AV_PIX_FMT_RGB565LE}, {(-949708393), AV_PIX_FMT_RGB555BE}, {(-949703933), AV_PIX_FMT_RGB555LE}, {(1842630357), AV_PIX_FMT_BGR565BE}, {(1842634817), AV_PIX_FMT_BGR565LE}, {(1820451223), AV_PIX_FMT_BGR555BE}, {(1820455683), AV_PIX_FMT_BGR555LE}, {(-1244519491), AV_PIX_FMT_VAAPI_MOCO}, {(-1334330055), AV_PIX_FMT_VAAPI_IDCT}, {(-1911421379), AV_PIX_FMT_VAAPI_VLD}, {(-1984224161), AV_PIX_FMT_VAAPI}, {(-100356447), AV_PIX_FMT_VAAPI}, {(-314318931), AV_PIX_FMT_YUV420P16LE}, {(-314323391), AV_PIX_FMT_YUV420P16BE}, {(-2035199703), AV_PIX_FMT_YUV422P16LE}, {(-2035204163), AV_PIX_FMT_YUV422P16BE}, {(-965435991), AV_PIX_FMT_YUV444P16LE}, {(-965440451), AV_PIX_FMT_YUV444P16BE}, {(-1460888379), AV_PIX_FMT_DXVA2_VLD}, {(-1622962111), AV_PIX_FMT_RGB444LE}, {(-1622966571), AV_PIX_FMT_RGB444BE}, {(1147197505), AV_PIX_FMT_BGR444LE}, {(1147193045), AV_PIX_FMT_BGR444BE}, {(8895137), AV_PIX_FMT_YA8}, {(-1034248435), AV_PIX_FMT_Y400A}, {(-1896028199), AV_PIX_FMT_GRAY8A}, {(1527098217), AV_PIX_FMT_BGR48BE}, {(1527102677), AV_PIX_FMT_BGR48LE}, {(-96893943), AV_PIX_FMT_YUV420P9BE}, {(-96889483), AV_PIX_FMT_YUV420P9LE}, {(-314920139), AV_PIX_FMT_YUV420P10BE}, {(-314915679), AV_PIX_FMT_YUV420P10LE}, {(-2035800911), AV_PIX_FMT_YUV422P10BE}, {(-2035796451), AV_PIX_FMT_YUV422P10LE}, {(786143629), AV_PIX_FMT_YUV444P9BE}, {(786148089), AV_PIX_FMT_YUV444P9LE}, {(-966037199), AV_PIX_FMT_YUV444P10BE}, {(-966032739), AV_PIX_FMT_YUV444P10LE}, {(1205065229), AV_PIX_FMT_YUV422P9BE}, {(1205069689), AV_PIX_FMT_YUV422P9LE}, {(1584516467), AV_PIX_FMT_GBRP}, {(943182319), AV_PIX_FMT_GBR24P}, {(1251856967), AV_PIX_FMT_GBRP9BE}, {(1251861427), AV_PIX_FMT_GBRP9LE}, {(-191177929), AV_PIX_FMT_GBRP10BE}, {(-191173469), AV_PIX_FMT_GBRP10LE}, {(-190581181), AV_PIX_FMT_GBRP16BE}, {(-190576721), AV_PIX_FMT_GBRP16LE}, {(481427783), AV_PIX_FMT_YUVA422P}, {(481627591), AV_PIX_FMT_YUVA444P}, {(-389650193), AV_PIX_FMT_YUVA420P9BE}, {(-389645733), AV_PIX_FMT_YUVA420P9LE}, {(912308979), AV_PIX_FMT_YUVA422P9BE}, {(912313439), AV_PIX_FMT_YUVA422P9LE}, {(493387379), AV_PIX_FMT_YUVA444P9BE}, {(493391839), AV_PIX_FMT_YUVA444P9LE}, {(-1175054449), AV_PIX_FMT_YUVA420P10BE}, {(-1175049989), AV_PIX_FMT_YUVA420P10LE}, {(1399032075), AV_PIX_FMT_YUVA422P10BE}, {(1399036535), AV_PIX_FMT_YUVA422P10LE}, {(-1826171509), AV_PIX_FMT_YUVA444P10BE}, {(-1826167049), AV_PIX_FMT_YUVA444P10LE}, {(-1174457701), AV_PIX_FMT_YUVA420P16BE}, {(-1174453241), AV_PIX_FMT_YUVA420P16LE}, {(1399628823), AV_PIX_FMT_YUVA422P16BE}, {(1399633283), AV_PIX_FMT_YUVA422P16LE}, {(-1825574761), AV_PIX_FMT_YUVA444P16BE}, {(-1825570301), AV_PIX_FMT_YUVA444P16LE}, {(-1916201555), AV_PIX_FMT_VDPAU}, {(402131111), AV_PIX_FMT_XYZ12LE}, {(402126651), AV_PIX_FMT_XYZ12BE}, {(1741730459), AV_PIX_FMT_NV16}, {(-2069881793), AV_PIX_FMT_NV20LE}, {(-2069886253), AV_PIX_FMT_NV20BE}, {(1945669291), AV_PIX_FMT_RGBA64BE}, {(1945673751), AV_PIX_FMT_RGBA64LE}, {(420861611), AV_PIX_FMT_BGRA64BE}, {(420866071), AV_PIX_FMT_BGRA64LE}, {(941181687), AV_PIX_FMT_YVYU422}, {(542919585), AV_PIX_FMT_YA16BE}, {(542924045), AV_PIX_FMT_YA16LE}, {(1159847181), AV_PIX_FMT_GBRAP}, {(-1581458723), AV_PIX_FMT_GBRAP16BE}, {(-1581454263), AV_PIX_FMT_GBRAP16LE}, {(8107625), AV_PIX_FMT_QSV}, {(1718677719), AV_PIX_FMT_MMAL}, {(1060501535), AV_PIX_FMT_D3D11VA_VLD}, {(1497683359), AV_PIX_FMT_CUDA}, {(-1505465991), AV_PIX_FMT_0RGB}, {(1828976967), AV_PIX_FMT_RGB0}, {(-1507057287), AV_PIX_FMT_0BGR}, {(1474117959), AV_PIX_FMT_BGR0}, {(-314721223), AV_PIX_FMT_YUV420P12BE}, {(-314716763), AV_PIX_FMT_YUV420P12LE}, {(-314522307), AV_PIX_FMT_YUV420P14BE}, {(-314517847), AV_PIX_FMT_YUV420P14LE}, {(-2035601995), AV_PIX_FMT_YUV422P12BE}, {(-2035597535), AV_PIX_FMT_YUV422P12LE}, {(-2035403079), AV_PIX_FMT_YUV422P14BE}, {(-2035398619), AV_PIX_FMT_YUV422P14LE}, {(-965838283), AV_PIX_FMT_YUV444P12BE}, {(-965833823), AV_PIX_FMT_YUV444P12LE}, {(-965639367), AV_PIX_FMT_YUV444P14BE}, {(-965634907), AV_PIX_FMT_YUV444P14LE}, {(-190979013), AV_PIX_FMT_GBRP12BE}, {(-190974553), AV_PIX_FMT_GBRP12LE}, {(-190780097), AV_PIX_FMT_GBRP14BE}, {(-190775637), AV_PIX_FMT_GBRP14LE}, {(2045176857), AV_PIX_FMT_YUVJ411P}, {(425624673), AV_PIX_FMT_BAYER_BGGR8}, {(-2043610975), AV_PIX_FMT_BAYER_RGGB8}, {(-724251231), AV_PIX_FMT_BAYER_GBRG8}, {(-370976415), AV_PIX_FMT_BAYER_GRBG8}, {(202517325), AV_PIX_FMT_BAYER_BGGR16LE}, {(202512865), AV_PIX_FMT_BAYER_BGGR16BE}, {(-980558067), AV_PIX_FMT_BAYER_RGGB16LE}, {(-980562527), AV_PIX_FMT_BAYER_RGGB16BE}, {(-918738419), AV_PIX_FMT_BAYER_GBRG16LE}, {(-918742879), AV_PIX_FMT_BAYER_GBRG16BE}, {(813725261), AV_PIX_FMT_BAYER_GRBG16LE}, {(813720801), AV_PIX_FMT_BAYER_GRBG16BE}, {(1963548649), AV_PIX_FMT_XVMC}, {(-1819238491), AV_PIX_FMT_YUV440P10LE}, {(-1819242951), AV_PIX_FMT_YUV440P10BE}, {(-1819039575), AV_PIX_FMT_YUV440P12LE}, {(-1819044035), AV_PIX_FMT_YUV440P12BE}, {(346963553), AV_PIX_FMT_AYUV64LE}, {(346959093), AV_PIX_FMT_AYUV64BE}, {(-25612943), AV_PIX_FMT_VIDEOTOOLBOX}, {(-2136872463), AV_PIX_FMT_P010LE}, {(-2136876923), AV_PIX_FMT_P010BE}, {(-1581856555), AV_PIX_FMT_GBRAP12BE}, {(-1581852095), AV_PIX_FMT_GBRAP12LE}, {(-1582055471), AV_PIX_FMT_GBRAP10BE}, {(-1582051011), AV_PIX_FMT_GBRAP10LE}, {(288765605), AV_PIX_FMT_MEDIACODEC}, {(-329193265), AV_PIX_FMT_GRAY12BE}, {(-329188805), AV_PIX_FMT_GRAY12LE}, {(-329392181), AV_PIX_FMT_GRAY10BE}, {(-329387721), AV_PIX_FMT_GRAY10LE}, {(-2136275715), AV_PIX_FMT_P016LE}, {(-2136280175), AV_PIX_FMT_P016BE}, {(-1836924821), AV_PIX_FMT_D3D11}, {(-1907393485), AV_PIX_FMT_GRAY9BE}, {(-1907389025), AV_PIX_FMT_GRAY9LE}, {(520936543), AV_PIX_FMT_GBRPF32BE}, {(520941003), AV_PIX_FMT_GBRPF32LE}, {(-407110011), AV_PIX_FMT_GBRAPF32BE}, {(-407105551), AV_PIX_FMT_GBRAPF32LE}, }; #define AV_PIX_FMT_T_TAB_LEN 187 enum AVPixelFormat PixelFormat_val(value v){ int i; for(i=0;i #include #include #include #include #include #include #include #include "avutil_stubs.h" #include "av_stubs.h" CAMLprim value ocaml_avdevice_init(value unit) { CAMLparam0(); caml_release_runtime_system(); avdevice_register_all(); caml_acquire_runtime_system(); CAMLreturn(Val_unit); } static value get_input_devices(AVInputFormat * (*input_device_next)(AVInputFormat *)) { CAMLparam0(); CAMLlocal2(v, ans); AVInputFormat *fmt = NULL; int len = 0; while((fmt = input_device_next(fmt))) len++; ans = caml_alloc_tuple(len); int i = 0; fmt = NULL; while((fmt = input_device_next(fmt))) { value_of_inputFormat(fmt, &v); Store_field(ans, i, v); i++; } CAMLreturn(ans); } CAMLprim value ocaml_avdevice_get_audio_input_formats(value unit) { CAMLparam0(); CAMLreturn(get_input_devices(av_input_audio_device_next)); } CAMLprim value ocaml_avdevice_get_video_input_formats(value unit) { CAMLparam0(); CAMLreturn(get_input_devices(av_input_video_device_next)); } static inline value get_output_devices(AVOutputFormat * (*output_device_next)(AVOutputFormat *)) { CAMLparam0(); CAMLlocal1(ans); AVOutputFormat *fmt = NULL; int len = 0; while((fmt = output_device_next (fmt))) len++; ans = caml_alloc_tuple(len); int i = 0; fmt = NULL; while((fmt = output_device_next (fmt))) { Store_field(ans, i, value_of_outputFormat(fmt)); i++; } CAMLreturn(ans); } CAMLprim value ocaml_avdevice_get_audio_output_formats(value unit) { CAMLparam0(); CAMLreturn(get_output_devices(av_output_audio_device_next)); } CAMLprim value ocaml_avdevice_get_video_output_formats(value unit) { CAMLparam0(); CAMLreturn(get_output_devices(av_output_video_device_next)); } static const enum AVAppToDevMessageType APP_TO_DEV_MESSAGE_TYPES[] = { AV_APP_TO_DEV_NONE, AV_APP_TO_DEV_PAUSE, AV_APP_TO_DEV_PLAY, AV_APP_TO_DEV_TOGGLE_PAUSE, AV_APP_TO_DEV_MUTE, AV_APP_TO_DEV_UNMUTE, AV_APP_TO_DEV_TOGGLE_MUTE, AV_APP_TO_DEV_GET_VOLUME, AV_APP_TO_DEV_GET_MUTE }; static const enum AVAppToDevMessageType APP_TO_DEV_MESSAGE_WITH_DATA_TYPES[] = { AV_APP_TO_DEV_WINDOW_SIZE, AV_APP_TO_DEV_WINDOW_REPAINT, AV_APP_TO_DEV_SET_VOLUME }; CAMLprim value ocaml_avdevice_app_to_dev_control_message(value _message, value _av) { CAMLparam2(_message, _av); enum AVAppToDevMessageType message_type; void * data = NULL; size_t data_size = 0; double dbl; AVDeviceRect rect; if (Is_block(_message)) { message_type = APP_TO_DEV_MESSAGE_WITH_DATA_TYPES[Tag_val(_message)]; if(message_type == AV_APP_TO_DEV_SET_VOLUME) { dbl = Double_val(Field(_message, 0)); data = &dbl; data_size = sizeof(dbl); } else { rect.x = Int_val(Field(_message, 0)); rect.y = Int_val(Field(_message, 1)); rect.width = Int_val(Field(_message, 2)); rect.height = Int_val(Field(_message, 3)); if(message_type == AV_APP_TO_DEV_WINDOW_SIZE || rect.width > 0) { data = ▭ data_size = sizeof(rect); } } } else { message_type = APP_TO_DEV_MESSAGE_TYPES[Int_val(_message)]; } caml_release_runtime_system(); AVFormatContext * format_context = ocaml_av_get_format_context(&_av); int ret = avdevice_app_to_dev_control_message(format_context, message_type, data, data_size); caml_acquire_runtime_system(); if(ret < 0) ocaml_avutil_raise_error(ret); CAMLreturn(Val_unit); } #define NONE_TAG 0 #define CREATE_WINDOW_BUFFER_TAG 0 #define PREPARE_WINDOW_BUFFER_TAG 1 #define DISPLAY_WINDOW_BUFFER_TAG 2 #define DESTROY_WINDOW_BUFFER_TAG 3 #define BUFFER_OVERFLOW_TAG 4 #define BUFFER_UNDERFLOW_TAG 5 #define BUFFER_READABLE_TAG 1 #define BUFFER_WRITABLE_TAG 2 #define MUTE_STATE_CHANGED_TAG 3 #define VOLUME_LEVEL_CHANGED_TAG 4 static int ocaml_control_message_callback(struct AVFormatContext *ctx, int type, void *data, size_t data_size) { CAMLparam0(); CAMLlocal3(msg, opt, res); enum AVDevToAppMessageType message_type = (enum AVDevToAppMessageType)type; int ret = 0; if(message_type == AV_DEV_TO_APP_NONE) { msg = Val_int(NONE_TAG); } else if(message_type == AV_DEV_TO_APP_CREATE_WINDOW_BUFFER) { if(data) { AVDeviceRect * rect = (AVDeviceRect *)data; opt = caml_alloc_tuple(4); Store_field(opt, 0, Val_int(rect->x)); Store_field(opt, 1, Val_int(rect->y)); Store_field(opt, 2, Val_int(rect->width)); Store_field(opt, 3, Val_int(rect->height)); } else { opt = Val_int(0); } msg = caml_alloc(1, CREATE_WINDOW_BUFFER_TAG); Store_field(msg, 0, opt); } else if(message_type == AV_DEV_TO_APP_PREPARE_WINDOW_BUFFER) { msg = Val_int(PREPARE_WINDOW_BUFFER_TAG); } else if(message_type == AV_DEV_TO_APP_DISPLAY_WINDOW_BUFFER) { msg = Val_int(DISPLAY_WINDOW_BUFFER_TAG); } else if(message_type == AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER) { msg = Val_int(DESTROY_WINDOW_BUFFER_TAG); } else if(message_type == AV_DEV_TO_APP_BUFFER_OVERFLOW) { msg = Val_int(BUFFER_OVERFLOW_TAG); } else if(message_type == AV_DEV_TO_APP_BUFFER_UNDERFLOW) { msg = Val_int(BUFFER_UNDERFLOW_TAG); } else if(message_type == AV_DEV_TO_APP_BUFFER_READABLE || message_type == AV_DEV_TO_APP_BUFFER_WRITABLE) { if(data) { opt = caml_alloc_tuple(1); Store_field(opt, 0,caml_copy_int64(*((int64_t*)data))); } else { opt = Val_int(0); } msg = caml_alloc(1, message_type == AV_DEV_TO_APP_BUFFER_READABLE ? BUFFER_READABLE_TAG : BUFFER_WRITABLE_TAG); Store_field(msg, 0, opt); } else if(message_type == AV_DEV_TO_APP_MUTE_STATE_CHANGED) { msg = caml_alloc(1, MUTE_STATE_CHANGED_TAG); Store_field(msg, 0, (*((int*)data)) ? Val_true : Val_false); } else if(message_type == AV_DEV_TO_APP_VOLUME_LEVEL_CHANGED) { msg = caml_alloc(1, VOLUME_LEVEL_CHANGED_TAG); Store_field(msg, 0, caml_copy_double(*((double*)data))); } res = caml_callback_exn(*ocaml_av_get_control_message_callback(ctx), msg); if(Is_exception_result(res)) { res = Extract_exception(res); ret = AVERROR_UNKNOWN; } CAMLreturn(ret); } static int c_control_message_callback(struct AVFormatContext *ctx, int type, void *data, size_t data_size) { ocaml_ffmpeg_register_thread(); caml_acquire_runtime_system(); int ret = ocaml_control_message_callback(ctx, type, data, data_size); caml_release_runtime_system(); return ret; } CAMLprim value ocaml_avdevice_set_control_message_callback(value _control_message_callback, value _av) { CAMLparam2(_control_message_callback, _av); caml_release_runtime_system(); ocaml_av_set_control_message_callback(&_av, c_control_message_callback, &_control_message_callback); caml_acquire_runtime_system(); CAMLreturn(Val_unit); } ocaml-ffmpeg-0.4.1/src/avcodec.mli0000644000175000017500000002047113543206341016650 0ustar smimramsmimram(** This module contains decoders and encoders for audio, video and subtitle codecs. *) open Avutil type 'a params type 'media decoder type 'media encoder (** Packet. *) module Packet : sig (** Packet type *) type 'a t (** Parser type *) type 'a parser (** Return the size of the packet. *) val get_size : 'a t -> int (** Return the stream index of the packet. *) val get_stream_index : 'a t -> int (** Set the stream index of the packet. *) val set_stream_index : 'a t -> int -> unit (** Return a fresh bytes array containing a copy of packet datas. *) val to_bytes : 'a t -> bytes val parse_data : 'a parser -> ('a t -> unit) -> data -> unit (** [Avcodec.Packet.parse_data parser f data] applies function [f] to the parsed packets frome the [data] array according to the [parser] configuration. @raise Error if the parsing failed. *) val parse_bytes : 'a parser -> ('a t -> unit) -> bytes -> int -> unit (** Same as {!Avcodec.Packet.parse_data} with bytes array. *) end (** Audio codecs. *) module Audio : sig (** Main types for audio codecs. *) type 'a t val find_encoder : string -> [`Encoder] t (** Find an encoder from its name. @raise Error if the codec is not found or is not an audio codec. *) val find_decoder : string -> [`Decoder] t (** Find a decoder from its name. @raise Error if the codec is not found or is not an audio codec. *) (** Return the list of supported channel layouts of the codec. *) val get_supported_channel_layouts : _ t -> Avutil.Channel_layout.t list val find_best_channel_layout : _ t -> Avutil.Channel_layout.t -> Avutil.Channel_layout.t (** [Avcodec.Audio.find_best_channel_layout codec default] return the best channel layout of the [codec] codec or the [default] value if the codec has no channel layout. *) (** Return the list of supported sample formats of the codec. *) val get_supported_sample_formats : _ t -> Avutil.Sample_format.t list val find_best_sample_format : _ t -> Avutil.Sample_format.t -> Avutil.Sample_format.t (** [Avcodec.Audio.find_best_sample_format codec default] return the best sample format of the [codec] codec or the [default] value if the codec has no sample format. *) (** Return the list of supported sample rates of the codec. *) val get_supported_sample_rates : _ t -> int list val find_best_sample_rate : _ t -> int -> int (** [Avcodec.Audio.find_best_sample_rate codec default] return the best sample rate of the [codec] codec or the [default] value if the codec has no sample rate. *) val create_parser : [`Decoder] t -> audio Packet.parser (** [Avcodec.Audio.create_parser codec] create an audio packet parser. @raise Error if the parser creation failed. *) val create_decoder : [`Decoder] t -> audio decoder (** [Avcodec.Audio.create_decoder codec] create an audio decoder. @raise Error if the decoder creation failed. *) val create_encoder : ?bit_rate:int -> [`Encoder] t -> audio encoder (** [Avcodec.Audio.create_encoder ~bit_rate:bit_rate codec] create an audio encoder. @raise Error if the encoder creation failed. *) (** Audio codec ids. Careful: different codecs share the same ID, e.g. aac and libfdk_aac *) type id = Codec_id.audio (** Return the name of the codec ID. *) val string_of_id : id -> string (** Return the ID (class) of a codec. *) val get_id : _ t -> id (** Return the id of the codec params. *) val get_params_id : audio params -> id (** Return the channel layout set for the codec params. *) val get_channel_layout : audio params -> Avutil.Channel_layout.t (** Returns the number of channels set for the codec params. *) val get_nb_channels : audio params -> int (** Returns the sample format set for the codec params. *) val get_sample_format : audio params -> Avutil.Sample_format.t (** Returns the bit rate set for the codec params. *) val get_bit_rate : audio params -> int (** Returns the sample rate set for the codec. *) val get_sample_rate : audio params -> int end (** Video codecs. *) module Video : sig (** Main types for video codecs. *) type 'a t val find_encoder : string -> [`Encoder] t (** Find an encoder from its name. @raise Error if the codec is not found or is not an audio codec. *) val find_decoder : string -> [`Decoder] t (** Find a decoder from its name. @raise Error if the codec is not found or is not an audio codec. *) (** Return the list of supported frame rates of the codec. *) val get_supported_frame_rates : _ t -> Avutil.rational list val find_best_frame_rate : _ t -> Avutil.rational -> Avutil.rational (** [Avcodec.Video.find_best_frame_rate codec default] return the best frame rate of the [codec] codec or the [default] value if the codec has no frame rate. *) (** Return the list of supported pixel formats of the codec. *) val get_supported_pixel_formats : _ t -> Avutil.Pixel_format.t list val find_best_pixel_format : _ t -> Avutil.Pixel_format.t -> Avutil.Pixel_format.t (** [Avcodec.Video.find_best_pixel_format codec default] return the best pixel format of the [codec] codec or the [default] value if the codec has no pixel format. *) val create_parser : [`Decoder] t -> video Packet.parser (** [Avcodec.Video.create_parser codec] create an video packet parser. @raise Error if the parser creation failed. *) val create_decoder : [`Decoder] t -> video decoder (** [Avcodec.Video.create_decoder codec] create a video decoder. @raise Error if the decoder creation failed. *) val create_encoder : ?bit_rate:int -> ?frame_rate:int -> [`Encoder] t -> video encoder (** [Avcodec.Video.create_encoder ~bit_rate:bit_rate codec] create a video encoder. @raise Error if the encoder creation failed. *) (** Video codec ids. Careful: different codecs share the same ID, e.g. aac and libfdk_aac *) type id = Codec_id.video (** Return the name of the codec. *) val string_of_id : id -> string (** Return the ID (class) of a codec. *) val get_id : _ t -> id (** Return the id of the codec params. *) val get_params_id : video params -> id (** Returns the width set for the codec params. *) val get_width : video params -> int (** Returns the height set for the codec params. *) val get_height : video params -> int (** Returns the sample aspect ratio set for the codec params. *) val get_sample_aspect_ratio : video params -> Avutil.rational (** Returns the pixel format set for the codec params. *) val get_pixel_format : video params -> Avutil.Pixel_format.t (** Returns the bit rate set for the codec. *) val get_bit_rate : video params -> int end (** Subtitle codecs. *) module Subtitle : sig (** Main subtitle types. *) type 'a t val find_encoder : string -> [`Encoder] t (** Find an encoder from its name. @raise Error if the codec is not found or is not an audio codec. *) val find_decoder : string -> [`Decoder] t (** Find a decoder from its name. @raise Error if the codec is not found or is not an audio codec. *) (** Subtitle codec ids. Careful: different codecs share the same ID, e.g. aac and libfdk_aac *) type id = Codec_id.subtitle (** Return the name of the codec. *) val string_of_id : id -> string (** Return the ID (class) of a codec. *) val get_id : _ t -> id (** Return the id of the codec params. *) val get_params_id : subtitle params -> id end val decode : 'media decoder -> ('media frame -> unit) -> 'media Packet.t -> unit (** [Avcodec.decode decoder f packet] applies function [f] to the decoded frames frome the [packet] according to the [decoder] configuration. @raise Error if the decoding failed. *) val flush_decoder : 'media decoder -> ('media frame -> unit) -> unit (** [Avcodec.flush_decoder decoder f] applies function [f] to the decoded frames frome the buffered packets in the [decoder]. @raise Error if the decoding failed. *) val encode : 'media encoder -> ('media Packet.t -> unit) -> 'media frame -> unit (** [Avcodec.encode encoder f frame] applies function [f] to the encoded packets from the [frame] according to the [encoder] configuration. @raise Error if the encoding failed. *) val flush_encoder : 'media encoder -> ('media Packet.t -> unit) -> unit (** [Avcodec.flush_encoder encoder] applies function [f] to the encoded packets from the buffered frames in the [encoder]. @raise Error if the encoding failed. *) ocaml-ffmpeg-0.4.1/src/channel_layout.ml0000644000175000017500000000071513543206341020077 0ustar smimramsmimramtype t = [ | `Native | `Mono | `Stereo | `_2point1 | `_2_1 | `Surround | `_3point1 | `_4point0 | `_4point1 | `_2_2 | `Quad | `_5point0 | `_5point1 | `_5point0_back | `_5point1_back | `_6point0 | `_6point0_front | `Hexagonal | `_6point1 | `_6point1_back | `_6point1_front | `_7point0 | `_7point0_front | `_7point1 | `_7point1_wide | `_7point1_wide_back | `Octagonal | `Hexadecagonal | `Stereo_downmix ] ocaml-ffmpeg-0.4.1/src/swresample_stubs.h0000644000175000017500000000025413543206341020311 0ustar smimramsmimram#include #include "avutil_stubs.h" typedef enum _vector_kind {Str, P_Str, Fa, P_Fa, Ba, P_Ba, Frm} vector_kind; typedef struct swr_t swr_t; ocaml-ffmpeg-0.4.1/src/sample_format_stubs.h0000644000175000017500000000170413543206341020761 0ustar smimramsmimram#define VALUE_NOT_FOUND 0xFFFFFFF static const int64_t AV_SAMPLE_FMT_T_TAB[][2] = { {(1741061553), AV_SAMPLE_FMT_NONE}, {(38023), AV_SAMPLE_FMT_U8}, {(8276977), AV_SAMPLE_FMT_S16}, {(8277861), AV_SAMPLE_FMT_S32}, {(7010461), AV_SAMPLE_FMT_FLT}, {(6807069), AV_SAMPLE_FMT_DBL}, {(8479131), AV_SAMPLE_FMT_U8P}, {(1845765873), AV_SAMPLE_FMT_S16P}, {(1845963005), AV_SAMPLE_FMT_S32P}, {(1563332805), AV_SAMPLE_FMT_FLTP}, {(1517976389), AV_SAMPLE_FMT_DBLP}, {(8279203), AV_SAMPLE_FMT_S64}, {(1846262271), AV_SAMPLE_FMT_S64P}, }; #define AV_SAMPLE_FMT_T_TAB_LEN 13 enum AVSampleFormat SampleFormat_val(value v){ int i; for(i=0;i #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "avutil_stubs.h" #include "swresample_stubs.h" #include "swresample_options_stubs.h" /***** Contexts *****/ struct audio_t { uint8_t **data; int nb_samples; int nb_channels; enum AVSampleFormat sample_fmt; int is_planar; int bytes_per_samples; int owns_data; }; struct swr_t { SwrContext *context; struct audio_t in; struct audio_t out; int64_t out_channel_layout; int out_sample_rate; value out_vector; int out_vector_nb_samples; int release_out_vector; int (*get_in_samples)(swr_t *, value *); void (*convert)(swr_t *, int, int); }; #define Swr_val(v) (*(swr_t**)Data_custom_val(v)) static inline void alloc_data(struct audio_t * audio, int nb_samples) { caml_release_runtime_system(); if(audio->data != NULL && audio->data[0] != NULL) { av_freep(&audio->data[0]); audio->nb_samples = 0; } audio->owns_data = 1; int ret = av_samples_alloc(audio->data, NULL, audio->nb_channels, nb_samples, audio->sample_fmt, 0); caml_acquire_runtime_system(); if(ret < 0) ocaml_avutil_raise_error(ret); audio->nb_samples = nb_samples; } static int get_in_samples_frame(swr_t *swr, value *in_vector) { AVFrame *frame = Frame_val(*in_vector); #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(56, 0, 100) caml_release_runtime_system(); int nb_channels = av_frame_get_channels(frame); caml_acquire_runtime_system(); #else int nb_channels = frame->channels; #endif if(nb_channels != swr->in.nb_channels) Fail( "Swresample failed to convert %d channels : %d channels were expected", nb_channels, swr->in.nb_channels); if(frame->format != swr->in.sample_fmt) Fail( "Swresample failed to convert %s sample format : %s sample format were expected", av_get_sample_fmt_name(frame->format), av_get_sample_fmt_name(swr->in.sample_fmt)); swr->in.data = frame->extended_data; return frame->nb_samples; } static int get_in_samples_string(swr_t *swr, value *in_vector) { int str_len = caml_string_length(*in_vector); int nb_samples = str_len / (swr->in.bytes_per_samples * swr->in.nb_channels); if(nb_samples > swr->in.nb_samples) alloc_data(&swr->in, nb_samples); memcpy(swr->in.data[0], (uint8_t*)String_val(*in_vector), str_len); return nb_samples; } static int get_in_samples_planar_string(swr_t *swr, value *in_vector) { CAMLparam0(); CAMLlocal1(str); int str_len = caml_string_length(Field(*in_vector, 0)); int i, nb_samples = str_len / swr->in.bytes_per_samples; if(nb_samples > swr->in.nb_samples) alloc_data(&swr->in, nb_samples); for (i = 0; i < swr->in.nb_channels; i++) { str = Field(*in_vector, i); if(str_len != caml_string_length(str)) Fail( "Swresample failed to convert channel %d's %lu bytes : %d bytes were expected", i, caml_string_length(str), str_len); memcpy(swr->in.data[i], (uint8_t*)String_val(str), str_len); } CAMLreturnT(int, nb_samples); } static int get_in_samples_float_array(swr_t *swr, value *in_vector) { int i, linesize = Wosize_val(*in_vector) / Double_wosize; int nb_samples = linesize / swr->in.nb_channels; if(nb_samples > swr->in.nb_samples) alloc_data(&swr->in, nb_samples); double * pcm = (double*)swr->in.data[0]; for (i = 0; i < linesize; i++) { pcm[i] = Double_field(*in_vector, i); } return nb_samples; } static int get_in_samples_planar_float_array(swr_t *swr, value *in_vector) { CAMLparam0(); CAMLlocal1(fa); int i, j, nb_words = Wosize_val(Field(*in_vector, 0)); int nb_samples = nb_words / Double_wosize; if(nb_samples > swr->in.nb_samples) alloc_data(&swr->in, nb_samples); for (i = 0; i < swr->in.nb_channels; i++) { fa = Field(*in_vector, i); if(nb_words != Wosize_val(fa)) Fail( "Swresample failed to convert channel %d's %lu bytes : %d bytes were expected", i, Wosize_val(fa), nb_words); double * pcm = (double*)swr->in.data[i]; for(j = 0; j < nb_samples; j++) { pcm[j] = Double_field(fa, j); } } CAMLreturnT(int, nb_samples); } static int get_in_samples_ba(swr_t *swr, value *in_vector) { swr->in.data[0] = Caml_ba_data_val(*in_vector); return Caml_ba_array_val(*in_vector)->dim[0] / swr->in.nb_channels; } static int get_in_samples_planar_ba(swr_t *swr, value *in_vector) { CAMLparam0(); CAMLlocal1(ba); int nb_samples = Caml_ba_array_val(Field(*in_vector, 0))->dim[0]; for (int i = 0; i < swr->in.nb_channels; i++) { ba = Field(*in_vector, i); if(nb_samples != Caml_ba_array_val(ba)->dim[0]) Fail( "Swresample failed to convert channel %d's %ld bytes : %d bytes were expected", i, Caml_ba_array_val(ba)->dim[0], nb_samples); swr->in.data[i] = Caml_ba_data_val(ba); } CAMLreturnT(int, nb_samples); } static void alloc_out_frame(swr_t *swr, int nb_samples) { CAMLparam0(); CAMLlocal1(vector); int ret; caml_release_runtime_system(); AVFrame * frame = av_frame_alloc(); if( ! frame) { caml_acquire_runtime_system(); caml_raise_out_of_memory(); } frame->nb_samples = nb_samples; frame->channel_layout = swr->out_channel_layout; frame->format = swr->out.sample_fmt; frame->sample_rate = swr->out_sample_rate; ret = av_frame_get_buffer(frame, 0); if (ret < 0) { av_frame_free(&frame); caml_acquire_runtime_system(); ocaml_avutil_raise_error(ret); } caml_acquire_runtime_system(); vector = value_of_frame(frame); caml_modify_generational_global_root(&swr->out_vector, vector); swr->out.data = frame->extended_data; swr->out.nb_samples = nb_samples; } static inline void convert_to_frame(swr_t *swr, int in_nb_samples, int out_nb_samples) { // Allocate out data if needed if (out_nb_samples > swr->out.nb_samples || swr->release_out_vector) alloc_out_frame(swr, out_nb_samples); caml_release_runtime_system(); int ret = swr_convert(swr->context, swr->out.data, swr->out.nb_samples, (const uint8_t **)swr->in.data, in_nb_samples); caml_acquire_runtime_system(); if(ret < 0) ocaml_avutil_raise_error(ret); Frame_val(swr->out_vector)->nb_samples = ret; } static inline void convert_to_string(swr_t *swr, int in_nb_samples, int out_nb_samples) { // Allocate out data if needed if (out_nb_samples > swr->out.nb_samples) alloc_data(&swr->out, out_nb_samples); caml_release_runtime_system(); int ret = swr_convert(swr->context, swr->out.data, swr->out.nb_samples, (const uint8_t **)swr->in.data, in_nb_samples); caml_acquire_runtime_system(); if(ret < 0) ocaml_avutil_raise_error(ret); size_t len = ret * swr->out.nb_channels * swr->out.bytes_per_samples; if(ret != swr->out_vector_nb_samples || swr->release_out_vector) { caml_modify_generational_global_root(&swr->out_vector, caml_alloc_string(len)); swr->out_vector_nb_samples = ret; } memcpy(String_val(swr->out_vector), swr->out.data[0], len); } static inline void convert_to_planar_string(swr_t *swr, int in_nb_samples, int out_nb_samples) { // Allocate out data if needed if (out_nb_samples > swr->out.nb_samples) alloc_data(&swr->out, out_nb_samples); caml_release_runtime_system(); int ret = swr_convert(swr->context, swr->out.data, swr->out.nb_samples, (const uint8_t **)swr->in.data, in_nb_samples); caml_acquire_runtime_system(); if(ret < 0) ocaml_avutil_raise_error(ret); size_t len = ret * swr->out.bytes_per_samples; int i; if(ret != swr->out_vector_nb_samples || swr->release_out_vector) { for(i = 0; i < swr->out.nb_channels; i++) { Store_field(swr->out_vector, i, caml_alloc_string(len)); } swr->out_vector_nb_samples = ret; } for(i = 0; i < swr->out.nb_channels; i++) { memcpy(String_val(Field(swr->out_vector, i)), swr->out.data[i], len); } } static inline void convert_to_float_array(swr_t *swr, int in_nb_samples, int out_nb_samples) { // Allocate out data if needed if (out_nb_samples > swr->out.nb_samples) alloc_data(&swr->out, out_nb_samples); caml_release_runtime_system(); int ret = swr_convert(swr->context, swr->out.data, swr->out.nb_samples, (const uint8_t **)swr->in.data, in_nb_samples); caml_acquire_runtime_system(); if(ret < 0) ocaml_avutil_raise_error(ret); size_t len = ret * swr->out.nb_channels; int i; if(ret != swr->out_vector_nb_samples || swr->release_out_vector) { caml_modify_generational_global_root(&swr->out_vector, caml_alloc(len * Double_wosize, Double_array_tag)); swr->out_vector_nb_samples = ret; } double * pcm = (double *)swr->out.data[0]; for (i = 0; i < len; i++) { Store_double_field(swr->out_vector, i, pcm[i]); } } static inline void convert_to_planar_float_array(swr_t *swr, int in_nb_samples, int out_nb_samples) { // Allocate out data if needed if (out_nb_samples > swr->out.nb_samples) alloc_data(&swr->out, out_nb_samples); caml_release_runtime_system(); int ret = swr_convert(swr->context, swr->out.data, swr->out.nb_samples, (const uint8_t **)swr->in.data, in_nb_samples); caml_acquire_runtime_system(); if(ret < 0) ocaml_avutil_raise_error(ret); int i, j; double *pcm; if(ret != swr->out_vector_nb_samples || swr->release_out_vector) { for(int i = 0; i < swr->out.nb_channels; i++) { Store_field(swr->out_vector, i, caml_alloc(ret * Double_wosize, Double_array_tag)); } swr->out_vector_nb_samples = ret; } for (i = 0; i < swr->out.nb_channels; i++) { pcm = (double *)swr->out.data[i]; for (j = 0; j < ret; j++) Store_double_field(Field(swr->out_vector, i), j, pcm[j]); } } static void alloc_out_ba(swr_t *swr, int nb_samples) { enum caml_ba_kind ba_kind = bigarray_kind_of_AVSampleFormat(swr->out.sample_fmt); intnat out_size = nb_samples * swr->out.nb_channels; caml_modify_generational_global_root(&swr->out_vector, caml_ba_alloc(CAML_BA_C_LAYOUT | ba_kind, 1, NULL, &out_size)); swr->out.data[0] = Caml_ba_data_val(swr->out_vector); swr->out.nb_samples = nb_samples; } static inline void convert_to_ba(swr_t *swr, int in_nb_samples, int out_nb_samples) { // Allocate out data if needed if (out_nb_samples > swr->out.nb_samples || swr->release_out_vector) { alloc_out_ba(swr, out_nb_samples); } caml_release_runtime_system(); int ret = swr_convert(swr->context, swr->out.data, swr->out.nb_samples, (const uint8_t **)swr->in.data, in_nb_samples); caml_acquire_runtime_system(); if(ret < 0) ocaml_avutil_raise_error(ret); Caml_ba_array_val(swr->out_vector)->dim[0] = ret * swr->out.nb_channels; } static void alloc_out_planar_ba(swr_t *swr, int nb_samples) { enum caml_ba_kind ba_kind = bigarray_kind_of_AVSampleFormat(swr->out.sample_fmt); intnat out_size = nb_samples; int i; for(i = 0; i < swr->out.nb_channels; i++) { Store_field(swr->out_vector, i, caml_ba_alloc(CAML_BA_C_LAYOUT | ba_kind, 1, NULL, &out_size)); swr->out.data[i] = Caml_ba_data_val(Field(swr->out_vector, i)); } swr->out.nb_samples = nb_samples; } static inline void convert_to_planar_ba(swr_t *swr, int in_nb_samples, int out_nb_samples) { // Allocate out data if needed if (out_nb_samples > swr->out.nb_samples || swr->release_out_vector) { alloc_out_planar_ba(swr, out_nb_samples); } caml_release_runtime_system(); int ret = swr_convert(swr->context, swr->out.data, swr->out.nb_samples, (const uint8_t **)swr->in.data, in_nb_samples); caml_acquire_runtime_system(); if(ret < 0) ocaml_avutil_raise_error(ret); int i; for(i = 0; i < swr->out.nb_channels; i++) { Caml_ba_array_val(Field(swr->out_vector, i))->dim[0] = ret; } } CAMLprim value ocaml_swresample_convert(value _swr, value _in_vector) { CAMLparam2(_swr, _in_vector); swr_t *swr = Swr_val(_swr); // consistency check between the input channels and the context ones if(swr->in.is_planar) { int in_nb_channels = Wosize_val(_in_vector); if(in_nb_channels != swr->in.nb_channels) Fail( "Swresample failed to convert %d channels : %d channels were expected", in_nb_channels, swr->in.nb_channels); } // Optionnaly release the output vector if(swr->release_out_vector && swr->out.is_planar) { caml_modify_generational_global_root(&swr->out_vector, caml_alloc(swr->out.nb_channels, 0)); } // acquisition of the input samples and the input number of samples per channel int in_nb_samples = swr->get_in_samples(swr, &_in_vector); if(in_nb_samples < 0) ocaml_avutil_raise_error(in_nb_samples); // Computation of the output number of samples per channel according to the input ones int out_nb_samples = swr_get_out_samples(swr->context, in_nb_samples); // Resample and convert input data to output data swr->convert(swr, in_nb_samples, out_nb_samples); CAMLreturn(swr->out_vector); } void swresample_free(swr_t *swr) { if(swr->context) swr_free(&swr->context); if(swr->in.data && swr->get_in_samples != get_in_samples_frame) { if(swr->in.owns_data) av_freep(&swr->in.data[0]); free(swr->in.data); } if(swr->out.data && swr->convert != convert_to_frame) { if(swr->out.owns_data) av_freep(&swr->out.data[0]); free(swr->out.data); } if(swr->out_vector) { caml_acquire_runtime_system(); caml_remove_generational_global_root(&swr->out_vector); caml_release_runtime_system(); } free(swr); } CAMLprim value ocaml_swresample_finalize_swresample(value v) { CAMLparam1(v); caml_register_generational_global_root(&v); caml_release_runtime_system(); swresample_free(Swr_val(v)); caml_acquire_runtime_system(); caml_remove_generational_global_root(&v); CAMLreturn(Val_unit); } static struct custom_operations swr_ops = { "ocaml_swresample_context", custom_finalize_default, custom_compare_default, custom_hash_default, custom_serialize_default, custom_deserialize_default }; #define NB_OPTIONS_TYPES 3 static inline SwrContext * swresample_set_context(swr_t * swr, int64_t in_channel_layout, enum AVSampleFormat in_sample_fmt, int in_sample_rate, int64_t out_channel_layout, enum AVSampleFormat out_sample_fmt, int out_sample_rate, value options[]) { if( ! swr->context && ! (swr->context = swr_alloc())) caml_raise_out_of_memory(); SwrContext *ctx = swr->context; if(in_channel_layout) { av_opt_set_channel_layout(ctx, "in_channel_layout", in_channel_layout, 0); swr->in.nb_channels = av_get_channel_layout_nb_channels(in_channel_layout); } if(in_sample_fmt != AV_SAMPLE_FMT_NONE) { av_opt_set_sample_fmt(ctx, "in_sample_fmt", in_sample_fmt, 0); swr->in.sample_fmt = in_sample_fmt; } if(in_sample_rate) { av_opt_set_int(ctx, "in_sample_rate", in_sample_rate, 0); } if(out_channel_layout) { av_opt_set_channel_layout(ctx, "out_channel_layout", out_channel_layout, 0); swr->out_channel_layout = out_channel_layout; swr->out.nb_channels = av_get_channel_layout_nb_channels(out_channel_layout); } if(out_sample_fmt != AV_SAMPLE_FMT_NONE) { av_opt_set_sample_fmt(ctx, "out_sample_fmt", out_sample_fmt, 0); swr->out.sample_fmt = out_sample_fmt; } if(out_sample_rate) { av_opt_set_int(ctx, "out_sample_rate", out_sample_rate, 0); swr->out_sample_rate = out_sample_rate; } int i, ret = 0; for (i = 0; options[i]; i++) { int64_t val = DitherType_val(options[i]); if(val != VALUE_NOT_FOUND) { ret = av_opt_set_int(ctx, "dither_method", val, 0); } else { val = Engine_val(options[i]); if(val != VALUE_NOT_FOUND) { ret = av_opt_set_int(ctx, "resampler", val, 0); } else { val = FilterType_val(options[i]); if(val != VALUE_NOT_FOUND) { ret = av_opt_set_int(ctx, "filter_type", val, 0); } } } if(ret != 0) ocaml_avutil_raise_error(ret); } // initialize the resampling context caml_release_runtime_system(); ret = swr_init(ctx); caml_acquire_runtime_system(); if(ret < 0) ocaml_avutil_raise_error(ret); return ctx; } swr_t * swresample_create(vector_kind in_vector_kind, int64_t in_channel_layout, enum AVSampleFormat in_sample_fmt, int in_sample_rate, vector_kind out_vector_kind, int64_t out_channel_layout, enum AVSampleFormat out_sample_fmt, int out_sample_rate, value options[]) { swr_t * swr = (swr_t*)calloc(1, sizeof(swr_t)); if( ! swr) { caml_raise_out_of_memory(); } SwrContext *ctx = swresample_set_context(swr, in_channel_layout, in_sample_fmt, in_sample_rate, out_channel_layout, out_sample_fmt, out_sample_rate, options); if( ! ctx) { swresample_free(swr); caml_raise_out_of_memory(); } if(in_vector_kind != Frm) { swr->in.data = (uint8_t**)calloc(swr->in.nb_channels, sizeof(uint8_t*)); swr->in.is_planar = av_sample_fmt_is_planar(swr->in.sample_fmt); } swr->in.bytes_per_samples = av_get_bytes_per_sample(in_sample_fmt); swr->out_vector = Val_unit; if(out_vector_kind != Frm) { swr->out.data = (uint8_t**)calloc(swr->out.nb_channels, sizeof(uint8_t*)); swr->out.is_planar = av_sample_fmt_is_planar(swr->out.sample_fmt); if(swr->out.is_planar) { swr->out_vector = caml_alloc(swr->out.nb_channels, 0); } } caml_register_generational_global_root(&swr->out_vector); swr->out.bytes_per_samples = av_get_bytes_per_sample(out_sample_fmt); swr->release_out_vector = 1; switch(in_vector_kind) { case Frm : swr->get_in_samples = get_in_samples_frame; break; case Str : swr->get_in_samples = get_in_samples_string; break; case P_Str : swr->get_in_samples = get_in_samples_planar_string; break; case Fa : swr->get_in_samples = get_in_samples_float_array; break; case P_Fa : swr->get_in_samples = get_in_samples_planar_float_array; break; case Ba : swr->get_in_samples = get_in_samples_ba; break; case P_Ba : swr->get_in_samples = get_in_samples_planar_ba; } switch(out_vector_kind) { case Frm : swr->convert = convert_to_frame; break; case Str : swr->convert = convert_to_string; break; case P_Str : swr->convert = convert_to_planar_string; break; case Fa : swr->convert = convert_to_float_array; break; case P_Fa : swr->convert = convert_to_planar_float_array; break; case Ba : swr->convert = convert_to_ba; break; case P_Ba : swr->convert = convert_to_planar_ba; } return swr; } CAMLprim value ocaml_swresample_create(value _in_vector_kind, value _in_channel_layout, value _in_sample_fmt, value _in_sample_rate, value _out_vector_kind, value _out_channel_layout, value _out_sample_fmt, value _out_sample_rate, value _options) { CAMLparam5(_in_channel_layout, _in_sample_fmt, _out_channel_layout, _out_sample_fmt, _options); CAMLlocal1(ans); vector_kind in_vector_kind = Int_val(_in_vector_kind); int64_t in_channel_layout = ChannelLayout_val(_in_channel_layout); enum AVSampleFormat in_sample_fmt = SampleFormat_val(_in_sample_fmt); int in_sample_rate = Int_val(_in_sample_rate); vector_kind out_vector_kind = Int_val(_out_vector_kind); int64_t out_channel_layout = ChannelLayout_val(_out_channel_layout); enum AVSampleFormat out_sample_fmt = SampleFormat_val(_out_sample_fmt); int out_sample_rate = Int_val(_out_sample_rate); value options[NB_OPTIONS_TYPES + 1]; int i; for (i = 0; i < Wosize_val(_options) && i < NB_OPTIONS_TYPES; i++) options[i] = Field(_options, i); options[i] = 0; swr_t * swr = swresample_create(in_vector_kind, in_channel_layout, in_sample_fmt, in_sample_rate, out_vector_kind, out_channel_layout, out_sample_fmt, out_sample_rate, options); ans = caml_alloc_custom(&swr_ops, sizeof(swr_t*), 0, 1); Swr_val(ans) = swr; Finalize("ocaml_swresample_finalize_swresample", ans); CAMLreturn(ans); } CAMLprim value ocaml_swresample_create_byte(value *argv, int argn) { return ocaml_swresample_create(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8]); } CAMLprim value ocaml_swresample_reuse_output(value _swr, value _reuse_output) { CAMLparam2(_swr, _reuse_output); Swr_val(_swr)->release_out_vector = ! Bool_val(_reuse_output); CAMLreturn(Val_unit); } ocaml-ffmpeg-0.4.1/src/av.mli0000644000175000017500000003013713543206341015652 0ustar smimramsmimram(** This module perform demuxing then decoding for reading and coding then muxing for writing multimedia container formats. *) open Avutil (** {5 Format} *) module Format : sig val get_input_name : (input, _) format -> string (** Return the name of the input format *) val get_input_long_name : (input, _)format -> string (** Return the long name of the input format *) val get_output_name : (output, _)format -> string (** Return the name of the output format *) val get_output_long_name : (output, _)format -> string (** Return the long name of the output format *) val guess_output_format : ?short_name:string -> ?filename:string -> ?mime:string -> unit -> (output, 'a) format option (** Guess output format based on the passed arguments. *) val get_audio_codec_id : (output, audio)format -> Avcodec.Audio.id (** Return the audio codec id of the output audio format *) val get_video_codec_id : (output, video)format -> Avcodec.Video.id (** Return the video codec id of the output video format *) val get_subtitle_codec_id : (output, subtitle)format -> Avcodec.Subtitle.id (** Return the subtitle codec id of the output subtitle format *) end (** {5 Input} *) val open_input : string -> input container (** [Av.open_input url] open the input [url] (a file name or http URL). @raise Error if the opening failed. *) val open_input_format : (input, _) format -> input container (** [Av.open_input_format format] open the input [format]. @raise Error if the opening failed. *) type read = bytes -> int -> int -> int type write = bytes -> int -> int -> int type seek = int -> Unix.seek_command -> int val open_input_stream : ?seek:seek -> read -> input container val get_input_duration : ?format:Time_format.t -> input container -> Int64.t (** [Av.get_input_duration ~format:fmt input] return the duration of an [input] in the [fmt] time format (in second by default). *) (** Return the input tag (key, vlue) list. *) val get_input_metadata : input container -> (string * string) list (** Input/output, audio/video/subtitle stream type *) type ('line, 'media) stream val get_audio_streams : input container -> (int * (input, audio)stream * audio Avcodec.params) list (** Return the audio stream list of the input. The result is a list of tuple containing the index of the stream in the container, the stream and the codec of the stream. *) val get_video_streams : input container -> (int * (input, video)stream * video Avcodec.params) list (** Same as {!Av.get_audio_streams} for the video streams. *) val get_subtitle_streams : input container -> (int * (input, subtitle)stream * subtitle Avcodec.params) list (** Same as {!Av.get_audio_streams} for the subtitle streams. *) val find_best_audio_stream : input container -> (int * (input, audio)stream * audio Avcodec.params) (** Return the best audio stream of the input. The result is a tuple containing the index of the stream in the container, the stream and the codec of the stream. @raise Error if no stream could be found. *) val find_best_video_stream : input container -> (int * (input, video)stream * video Avcodec.params) (** Same as {!Av.find_best_audio_stream} for the video streams. *) val find_best_subtitle_stream : input container -> (int * (input, subtitle)stream * subtitle Avcodec.params) (** Same as {!Av.find_best_audio_stream} for the subtitle streams. *) val get_input : (input, _)stream -> input container (** Return the input container of the input stream. *) val get_index : (_, _)stream -> int (** Return the index of the stream. *) val get_codec_params : (_, 'media)stream -> 'media Avcodec.params (** [Av.get_codec stream] return the codec of the [stream]. @raise Error if the codec allocation failed. *) val get_time_base : (_, _)stream -> Avutil.rational (** [Av.get_time_base stream] return the time base of the [stream]. *) val set_time_base : (_, _)stream -> Avutil.rational -> unit (** [Av.set_time_base stream time_base] set the [stream] time base to [time_base]. *) val get_duration : ?format:Time_format.t -> (input, _)stream -> Int64.t (** Same as {!Av.get_input_duration} for the input streams. *) val get_metadata : (input, _)stream -> (string * string) list (** Same as {!Av.get_input_metadata} for the input streams. *) val select : (input, _)stream -> unit (** [Av.select stream] select the input [stream] for reading. @raise Error if the selection failed. *) val read_packet : (input, 'media)stream -> 'media Avcodec.Packet.t (** [Av.read_packet stream] read the input [stream]. Return the next packet of the [stream] or raises [Error `Eof] if the end of the stream is reached. @raise Error if the reading failed. *) val iter_packet : ('media Avcodec.Packet.t -> unit) -> (input, 'media)stream -> unit (** [Av.iter_packet f is] applies function [f] in turn to all the packets of the input stream [is]. @raise Error if the reading failed. *) val read_frame : (input, 'media)stream -> 'media frame (** [Av.read_frame stream] read the input [stream]. Return the next frame of the [stream] or raises [Error `Eof] if the end of the stream is reached. @raise Error if the reading failed. *) val iter_frame : ('media frame -> unit) -> (input, 'media)stream -> unit (** [Av.iter_frame f is] applies function [f] in turn to all the frames of the input stream [is]. @raise Error if the reading failed. *) type input_packet_result = [ | `Audio of int * audio Avcodec.Packet.t | `Video of int * video Avcodec.Packet.t | `Subtitle of int * subtitle Avcodec.Packet.t ] val read_input_packet : input container -> input_packet_result (** Reads the selected streams if any or all streams otherwise. Return the next [Audio] [Video] or [Subtitle] index and packet of the input or [End_of_file] if the end of the input is reached. @raise Error if the reading failed. *) val iter_input_packet : ?audio:(int -> audio Avcodec.Packet.t -> unit) -> ?video:(int -> video Avcodec.Packet.t -> unit) -> ?subtitle:(int -> subtitle Avcodec.Packet.t -> unit) -> input container -> unit (** [Av.iter_input_packet ~audio:af ~video:vf ~subtitle:sf src] reads iteratively the selected streams if any or all streams of the [src] input otherwise. It applies function [af] to the audio packets, [vf] to the video packets and [sf] to the subtitle packets with the index of the related stream as first parameter. @raise Error if the reading failed. *) type input_frame_result = [ | `Audio of int * audio frame | `Video of int * video frame | `Subtitle of int * subtitle frame ] val read_input_frame : input container -> input_frame_result (** Reads the selected streams if any or all streams otherwise. Return the next [Audio] [Video] or [Subtitle] index and frame of the input or raises [Error `Eof] if the end of the input is reached. @raise Error if the reading failed. *) val iter_input_frame : ?audio:(int -> audio frame -> unit) -> ?video:(int -> video frame -> unit) -> ?subtitle:(int -> subtitle frame -> unit) -> input container -> unit (** [Av.iter_input_frame ~audio:af ~video:vf ~subtitle:sf src] reads iteratively the selected streams if any or all streams of the [src] input otherwise. It applies function [af] to the audio frames, [vf] to the video frames and [sf] to the subtitle frames with the index of the related stream as first parameter. @raise Error if the reading failed. *) (** Seek mode. *) type seek_flag = Seek_flag_backward | Seek_flag_byte | Seek_flag_any | Seek_flag_frame val seek : (input, _)stream -> Time_format.t -> Int64.t -> seek_flag array -> unit (** [Av.seek is fmt t flags] seek in the input stream [is] at the position [t] in the [fmt] time format according to the method indicated by the [flags]. @raise Error if the seeking failed. *) val reuse_output : input container -> bool -> unit (** [Av.reuse_output ro] enables or disables the reuse of {!Av.read_packet}, {!Av.iter_packet}, {!Av.read_frame}, {!Av.iter_frame}, {!Av.read_input_packet}, {!Av.iter_input_packet}, {!Av.read_input_frame} and {!Av.iter_input_frame} output according to the value of [ro]. Reusing the output reduces the number of memory allocations. In this cas, the data returned by a reading function is invalidated by a new call to this function. *) (** {5 Output} *) val open_output : ?opts:opts -> string -> output container (** [Av.open_output ?opts filename] open the output file named [filename]. [opts] may contain any option settable on the stream's internal AVFormat. After returning, if [opts] was passed, unused options are left in the hash table. @raise Error if the opening failed. *) val open_output_stream : ?opts:opts -> ?seek:seek -> write -> (output, _) format -> output container (** [Av.open_stream callbacks] open the output container with the given callbacks. [opts] may contain any option settable on Ffmpeg avformat. After returning, if [opts] was passed, unused options are left in the hash table. @raise Error if the opening failed. *) val set_output_metadata : output container -> (string * string) list -> unit (** [Av.set_output_metadata dst tags] set the metadata of the [dst] output with the [tags] tag list. This must be set before starting writing streams. @raise Error if a writing already taken place or if the setting failed. *) val set_metadata : (output, _)stream -> (string * string) list -> unit (** Same as {!Av.set_output_metadata} for the output streams. *) val get_output : (output, _)stream -> output container (** Return the output container of the output stream. *) val mk_audio_opts : ?channels:int -> ?channel_layout:Channel_layout.t -> ?bit_rate:int -> ?sample_rate:int -> ?sample_format:Avutil.Sample_format.t -> ?time_base:Avutil.rational -> ?params:(audio Avcodec.params) -> ?stream:(_, audio) stream -> unit -> opts (** Utility to convert audio params to options. Sets value first from named arguments or from passed codec_params, if it exists, or from passed stream, if it exists. *) val new_audio_stream : ?opts:opts -> codec:[`Encoder] Avcodec.Audio.t -> output container -> (output, audio) stream (** Add a new audio stream to the given container. [opts] may contain any option settable on the stream's internal AVCodec. After returning, if [opts] was passed, unused options are left in the hash table. @raise Error if the opening failed. *) val mk_video_opts : ?pixel_format:Avutil.Pixel_format.t -> ?size:(int*int) -> ?bit_rate:int -> ?frame_rate:int -> ?time_base:Avutil.rational -> ?params:(video Avcodec.params) -> ?stream:(_, video) stream -> unit -> opts (** Utility to convert video params to options. *) val new_video_stream : ?opts:opts -> codec:[`Encoder] Avcodec.Video.t -> output container -> (output, video) stream (** Add a new video stream to the given container. [opts] may contain any option settable on the stream's internal AVCodec. After returning, if [opts] was passed, unused options are left in the hash table. @raise Error if the opening failed. *) val mk_subtitle_opts : ?time_base:Avutil.rational -> unit -> opts (** Utility to convert subtitle params to options. *) val new_subtitle_stream : ?opts:opts -> codec:[`Encoder] Avcodec.Subtitle.t -> output container -> (output, subtitle) stream (** Add a new subtitle stream to the given container. [opts] may contain any option settable on the stream's internal AVCodec. After returning, if [opts] was passed, unused options are left in the hash table. @raise Error if the opening failed. *) val write_packet : (output, 'media)stream -> 'media Avcodec.Packet.t -> unit (** [Av.write_packet os pkt] write the [pkt] packet to the [os] output stream. @raise Error if the writing failed. *) val write_frame : (output, 'media)stream -> 'media frame -> unit (** [Av.write_frame os frm] write the [frm] frame to the [os] output stream. @raise Error if the writing failed. *) val write_audio_frame : output container -> audio frame -> unit (** [Av.write_audio_frame dst frm] write the [frm] audio frame to the [dst] output audio container. @raise Error if the output format is not defined or if the output media type is not compatible with the frame or if the writing failed. *) val write_video_frame : output container -> video frame -> unit (** Same as {!Av.write_audio_frame} for output video container. *) val close : _ container -> unit (** Close an input or output container. *) ocaml-ffmpeg-0.4.1/src/gen_code.ml0000644000175000017500000001366613543206341016646 0ustar smimramsmimram external polymorphic_variant_string_to_c_value : string -> int64 = "polymorphic_variant_string_to_c_value" let print_define_polymorphic_variant_value oc pv = let value = Int64.to_string(polymorphic_variant_string_to_c_value pv) in output_string oc ("#define PVV_" ^ pv ^ " (" ^ value ^ ")\n") let rec find_line ic line_re = try if Str.string_match line_re (input_line ic) 0 then true else find_line ic line_re with End_of_file -> false let get_path filename = ("-I/usr/include"::"-I/usr/include/i386-linux-gnu"::(Sys.argv |> Array.to_list)) |> List.fold_left(fun path param -> if path = None && "-I" = String.sub param 0 2 then ( let p = (String.sub param 2 (String.length param - 2)) ^ filename in if Sys.file_exists p then Some p else ( None ) ) else path ) None let rec id_to_pv_value id values = let id = if id.[0] >= '0' && id.[0] <= '9' then "_" ^ id else id in let id = String.(uppercase(sub id 0 1) ^ lowercase(sub id 1 (length id - 1))) in let value = polymorphic_variant_string_to_c_value id in if List.mem value values then id_to_pv_value(id ^ "_") values else (id, value) let translate_enum_lines ic labels c_oc ml_oc mli_oc = let start_pat, pat, end_pat, enum_prefix, c_type_name, c_fun_radix, ml_type_name = labels in let start_re = Str.regexp start_pat in let re = Str.regexp pat in let end_re = Str.regexp end_pat in let print_c words = output_string c_oc (String.concat "" words ^ "\n") in let print_ml words = let line = String.concat "" words ^ "\n" in output_string ml_oc line; output_string mli_oc line; in let rec loop values = try match input_line ic with | line when end_pat <> "" && Str.string_match end_re line 0 -> values | line when Str.string_match re line 0 -> let id = Str.matched_group 1 line in let pv, value = id_to_pv_value id values in print_c[" {("; Int64.to_string value; "), "; enum_prefix; id; "},"]; print_ml[" | `"; pv]; loop (value::values) | _ -> loop values with End_of_file -> values in if start_pat = "" || find_line ic start_re then ( let tab_name = enum_prefix ^ String.uppercase ml_type_name ^ "_TAB" in let tab_len = tab_name ^ "_LEN" in print_c["static const int64_t "; tab_name; "[][2] = {"]; print_ml["type "; ml_type_name; " = ["]; let values = loop [] in print_c["};\n\n#define "; tab_len; " "; string_of_int(List.length values)]; print_c[c_type_name;" ";c_fun_radix;"_val(value v){\nint i;\nfor(i=0;i<";tab_len;";i++){\nif(v==";tab_name;"[i][0])return ";tab_name;"[i][1];\n}\nreturn VALUE_NOT_FOUND;\n}"]; print_c["value Val_";c_fun_radix;"(";c_type_name;" t){\nint i;\nfor(i=0;i<";tab_len;"; i++){\nif(t==";tab_name;"[i][1])return ";tab_name;"[i][0];\n}\nreturn VALUE_NOT_FOUND;\n}"]; print_ml["]\n"]; ) let translate_enums in_name out_name title enums_labels = match get_path in_name with | None -> Printf.eprintf"WARNING : header file %s not found\n" in_name | Some path -> let ic = open_in path in let c_oc = open_out (out_name^"_stubs.h") in let ml_oc = open_out (out_name^".ml") in let mli_oc = open_out (out_name^".mli") in output_string mli_oc ("(** " ^ title ^ " *)\n\n"); output_string c_oc "#define VALUE_NOT_FOUND 0xFFFFFFF\n\n"; List.iter(fun labels -> translate_enum_lines ic labels c_oc ml_oc mli_oc) enums_labels; close_in ic; close_out c_oc; close_out ml_oc; close_out mli_oc let () = let pvv_oc = open_out "polymorphic_variant_values_stubs.h" in List.iter(print_define_polymorphic_variant_value pvv_oc) ["Audio"; "Video"; "Subtitle"; "Packet"; "Frame"; "Ok"; "Again"; "Second"; "Millisecond"; "Microsecond"; "Nanosecond"; (* Errors *) "Bsf_not_found"; "Decoder_not_found"; "Demuxer_not_found"; "Encoder_not_found"; "Eof"; "Exit"; "Filter_not_found"; "Invalid_data"; "Muxer_not_found"; "Option_not_found"; "Patch_welcome"; "Protocol_not_found"; "Stream_not_found"; "Bug"; "Eagain"; "Unknown"; "Experimental"; "Failure"]; close_out pvv_oc; (* translate_enums parameters : *) (* in_name out_name title (start_pat, pat, end_pat, enum_prefix, c_type_name, c_fun_radix, ml_type_name) *) translate_enums "/libavcodec/avcodec.h" "codec_id" "Audio, video and subtitle codec ids" [ "[ \t]*AV_CODEC_ID_NONE", "[ \t]*AV_CODEC_ID_\\([A-Z0-9_]+\\)", "[ \t]*AV_CODEC_ID_FIRST_AUDIO", "AV_CODEC_ID_", "enum AVCodecID", "VideoCodecID", "video"; "", "[ \t]*AV_CODEC_ID_\\([A-Z0-9_]+\\)", "[ \t]*AV_CODEC_ID_FIRST_SUBTITLE", "AV_CODEC_ID_", "enum AVCodecID", "AudioCodecID", "audio"; "", "[ \t]*AV_CODEC_ID_\\([A-Z0-9_]+\\)", "[ \t]*AV_CODEC_ID_FIRST_UNKNOWN", "AV_CODEC_ID_", "enum AVCodecID", "SubtitleCodecID", "subtitle"]; translate_enums "/libavutil/pixfmt.h" "pixel_format" "Pixels formats" [ "enum AVPixelFormat", "[ \t]*AV_PIX_FMT_\\([A-Z0-9_]+\\)", "[ \t]*AV_PIX_FMT_DRM_PRIME", "AV_PIX_FMT_", "enum AVPixelFormat", "PixelFormat", "t"]; translate_enums "/libavutil/channel_layout.h" "channel_layout" "Channel layout formats" [ "", "#define AV_CH_LAYOUT_\\([A-Z0-9_]+\\)", "", "AV_CH_LAYOUT_", "uint64_t", "ChannelLayout", "t"]; translate_enums "/libavutil/samplefmt.h" "sample_format" "Audio sample formats" [ "enum AVSampleFormat", "[ \t]*AV_SAMPLE_FMT_\\([A-Z0-9_]+\\)", "[ \t]*AV_SAMPLE_FMT_NB", "AV_SAMPLE_FMT_", "enum AVSampleFormat", "SampleFormat", "t"]; translate_enums "/libswresample/swresample.h" "swresample_options" "Dithering algorithms, Resampling Engines and Resampling Filter Types options" [ "[ \t]*SWR_DITHER_NONE", "[ \t]*SWR_\\([A-Z0-9_]+\\)", "[ \t]*SWR_DITHER_NS", "SWR_", "enum SwrDitherType", "DitherType", "dither_type"; "enum SwrEngine", "[ \t]*SWR_\\([A-Z0-9_]+\\)", "[ \t]*SWR_ENGINE_NB", "SWR_", "enum SwrEngine", "Engine", "engine"; "enum SwrFilterType", "[ \t]*SWR_\\([A-Z0-9_]+\\)", "\\};", "SWR_", "enum SwrFilterType", "FilterType", "filter_type"]; ocaml-ffmpeg-0.4.1/src/avutil_stubs.h0000644000175000017500000000454613543206341017443 0ustar smimramsmimram#ifndef _AVUTIL_STUBS_H_ #define _AVUTIL_STUBS_H_ #include #include #include #ifdef HAS_CHANNEL_LAYOUT #include #endif #ifdef HAS_FRAME #include #else #include //typedef void AVFrame; #endif #include #include "polymorphic_variant_values_stubs.h" #define ERROR_MSG_SIZE 256 #define EXN_ERROR "ffmpeg_exn_error" #define Fail(...) { \ snprintf(ocaml_av_exn_msg, ERROR_MSG_SIZE, __VA_ARGS__); \ caml_callback(*caml_named_value("ffmpeg_exn_failure"), caml_copy_string(ocaml_av_exn_msg)); \ } #define Finalize(f,v) \ caml_callback2(*caml_named_value("ffmpeg_gc_finalise"),*caml_named_value(f),v) void ocaml_avutil_raise_error(int err); extern char ocaml_av_exn_msg[]; #define List_init(list) (list) = Val_emptylist #define List_add(list, cons, val) { \ (cons) = caml_alloc(2, 0); \ Store_field((cons), 0, (val)); \ Store_field((cons), 1, (list)); \ (list) = (cons); \ } /***** Global initialisation *****/ void ocaml_ffmpeg_register_thread(); /**** AVRational ****/ #define rational_of_value(v) ((AVRational){Int_val(Field((v), 0)), Int_val(Field((v), 1))}) void value_of_rational(const AVRational * r, value * pv); /**** Time format ****/ int64_t second_fractions_of_time_format(value time_format); /**** Channel layout ****/ uint64_t ChannelLayout_val(value v); value Val_ChannelLayout(uint64_t cl); /**** Sample format ****/ #define Sample_format_val(v) (Int_val(v)) enum AVSampleFormat SampleFormat_val(value v); enum AVSampleFormat AVSampleFormat_of_Sample_format(int i); value Val_SampleFormat(enum AVSampleFormat sf); enum caml_ba_kind bigarray_kind_of_AVSampleFormat(enum AVSampleFormat sf); /**** Pixel format ****/ int PixelFormat_val(value); value Val_PixelFormat(enum AVPixelFormat pf); /***** AVFrame *****/ #define Frame_val(v) (*(struct AVFrame**)Data_custom_val(v)) value value_of_frame(AVFrame *frame); /***** AVSubtitle *****/ #define Subtitle_val(v) (*(struct AVSubtitle**)Data_custom_val(v)) value value_of_subtitle(AVSubtitle *subtitle); int subtitle_header_default(AVCodecContext *avctx); #endif // _AVUTIL_STUBS_H_ ocaml-ffmpeg-0.4.1/src/av_stubs.h0000644000175000017500000000141313543206341016533 0ustar smimramsmimram#ifndef _AV_STUBS_H_ #define _AV_STUBS_H_ #include #include AVFormatContext * ocaml_av_get_format_context(value *p_av); /***** AVInputFormat *****/ #define InputFormat_val(v) (*(struct AVInputFormat**)Data_custom_val(v)) void value_of_inputFormat(AVInputFormat *inputFormat, value * p_value); /***** AVOutputFormat *****/ #define OutputFormat_val(v) (*(struct AVOutputFormat**)Data_custom_val(v)) value value_of_outputFormat(AVOutputFormat *outputFormat); /***** Control message *****/ value * ocaml_av_get_control_message_callback(struct AVFormatContext *ctx); void ocaml_av_set_control_message_callback(value *p_av, av_format_control_message c_callback, value *p_ocaml_callback); #endif // _AV_STUBS_H_ ocaml-ffmpeg-0.4.1/src/swresample_options.mli0000644000175000017500000000053113543206341021174 0ustar smimramsmimram(** Dithering algorithms, Resampling Engines and Resampling Filter Types options *) type dither_type = [ | `Dither_rectangular | `Dither_triangular | `Dither_triangular_highpass ] type engine = [ | `Engine_swr | `Engine_soxr ] type filter_type = [ | `Filter_type_cubic | `Filter_type_blackman_nuttall | `Filter_type_kaiser ] ocaml-ffmpeg-0.4.1/src/avdevice.ml0000644000175000017500000001054613543206341016663 0ustar smimramsmimramopen Avutil external init : unit -> unit = "ocaml_avdevice_init" [@@noalloc] let () = init () let hd = function | [] -> raise Not_found | x::_ -> x external get_audio_input_formats : unit -> (input, audio)format array = "ocaml_avdevice_get_audio_input_formats" let get_audio_input_formats() = Array.to_list ( get_audio_input_formats() ) let get_default_audio_input_format() = hd(get_audio_input_formats()) external get_video_input_formats : unit -> (input, video)format array = "ocaml_avdevice_get_video_input_formats" let get_video_input_formats() = Array.to_list ( get_video_input_formats() ) let get_default_video_input_format() = hd(get_video_input_formats()) external get_audio_output_formats : unit -> (output, audio)format array = "ocaml_avdevice_get_audio_output_formats" let get_audio_output_formats() = Array.to_list ( get_audio_output_formats() ) let get_default_audio_output_format() = hd(get_audio_output_formats()) external get_video_output_formats : unit -> (output, video)format array = "ocaml_avdevice_get_video_output_formats" let get_video_output_formats() = Array.to_list ( get_video_output_formats() ) let get_default_video_output_format() = hd(get_video_output_formats()) let find_input name fmts = try List.find(fun d -> Av.Format.get_input_name d = name) fmts with Not_found -> raise (Error (`Failure("Input device not found : " ^ name))) let find_audio_input name = find_input name (get_audio_input_formats()) let find_video_input name = find_input name (get_video_input_formats()) let find_output name fmts = try List.find(fun d -> Av.Format.get_output_name d = name) fmts with Not_found -> raise (Error (`Failure("Output device not found : " ^ name))) let find_audio_output name = find_output name (get_audio_output_formats()) let find_video_output name = find_output name (get_video_output_formats()) let open_audio_input name = Av.open_input_format(find_audio_input name) let open_default_audio_input() = Av.open_input_format(get_default_audio_input_format()) let open_video_input name = Av.open_input_format(find_video_input name) let open_default_video_input() = Av.open_input_format(get_default_video_input_format()) external open_output_format : (output, _)format -> (string*string) array -> (output container)*(string array) = "ocaml_av_open_output_format" let _opt_val = function | `String s -> s | `Int i -> string_of_int i | `Float f -> string_of_float f let mk_opts = function | None -> [||] | Some opts -> Array.of_list (Hashtbl.fold (fun opt_name opt_val cur -> (opt_name, _opt_val opt_val)::cur) opts []) let filter_opts unused = function | None -> () | Some opts -> Hashtbl.filter_map_inplace (fun k v -> if (Array.mem k unused) then Some v else None) opts let open_audio_output ?opts name = let ret, unused = open_output_format (find_audio_output name) (mk_opts opts) in filter_opts unused opts; ret let open_default_audio_output ?opts () = let ret, unused = open_output_format (get_default_audio_output_format()) (mk_opts opts) in filter_opts unused opts; ret let open_video_output ?opts name = let ret, unused = open_output_format (find_video_output name) (mk_opts opts) in filter_opts unused opts; ret let open_default_video_output ?opts () = let ret, unused = open_output_format (get_default_video_output_format()) (mk_opts opts) in filter_opts unused opts; ret module App_to_dev = struct type message = | None | Window_size of int * int * int * int | Window_repaint of int * int * int * int | Pause | Play | Toggle_pause | Set_volume of float | Mute | Unmute | Toggle_mute | Get_volume | Get_mute external control_message : message -> _ container -> unit = "ocaml_avdevice_app_to_dev_control_message" let control_messages messages av = List.iter(fun msg -> control_message msg av) messages end module Dev_to_app = struct type message = | None | Create_window_buffer of (int * int * int * int) option | Prepare_window_buffer | Display_window_buffer | Destroy_window_buffer | Buffer_overflow | Buffer_underflow | Buffer_readable of Int64.t option | Buffer_writable of Int64.t option | Mute_state_changed of bool | Volume_level_changed of float external set_control_message_callback : (message -> unit) -> _ container -> unit = "ocaml_avdevice_set_control_message_callback" end ocaml-ffmpeg-0.4.1/src/swscale_stubs.c0000644000175000017500000003266013543206341017571 0ustar smimramsmimram#include #include #include #include #include #include #include #include #include #include #include #include #include #include "avutil_stubs.h" #define ALIGNMENT_BYTES 16 CAMLprim value ocaml_swscale_version(value unit) { CAMLparam0(); CAMLreturn(Val_int(swscale_version())); } CAMLprim value ocaml_swscale_configuration(value unit) { CAMLparam0(); CAMLreturn(caml_copy_string(swscale_configuration())); } CAMLprim value ocaml_swscale_license(value unit) { CAMLparam0(); CAMLreturn(caml_copy_string(swscale_license())); } /***** Filters *****/ /* #define Filter_val(v) (*(SwsFilter**)Data_custom_val(v)) static void finalize_filter(value v) { SwsFilter *f = Filter_val(v); sws_freeFilter(f); } static struct custom_operations filter_ops = { "ocaml_swscale_filter", finalize_filter, custom_compare_default, custom_hash_default, custom_serialize_default, custom_deserialize_default }; */ /***** Contexts *****/ static const int FLAGS[] = { SWS_FAST_BILINEAR, SWS_BILINEAR, SWS_BICUBIC, SWS_PRINT_INFO }; static int Flag_val(value v) { return FLAGS[Int_val(v)]; } #define Context_val(v) (*(struct SwsContext**)Data_custom_val(v)) CAMLprim value ocaml_swscale_finalize_context(value v) { CAMLparam1(v); caml_register_generational_global_root(&v); struct SwsContext *c = Context_val(v); caml_release_runtime_system(); sws_freeContext(c); caml_acquire_runtime_system(); caml_remove_generational_global_root(&v); CAMLreturn(Val_unit); } static struct custom_operations context_ops = { "ocaml_swscale_context", custom_finalize_default, custom_compare_default, custom_hash_default, custom_serialize_default, custom_deserialize_default }; CAMLprim value ocaml_swscale_get_context(value flags_, value src_w_, value src_h_, value src_format_, value dst_w_, value dst_h_, value dst_format_) { CAMLparam1(flags_); CAMLlocal1(ans); int src_w = Int_val(src_w_); int src_h = Int_val(src_h_); enum AVPixelFormat src_format = PixelFormat_val(src_format_); int dst_w = Int_val(dst_w_); int dst_h = Int_val(dst_h_); enum AVPixelFormat dst_format = PixelFormat_val(dst_format_); int flags = 0; int i; struct SwsContext *c; for (i = 0; i < Wosize_val(flags_); i++) flags |= Flag_val(Field(flags_,i)); caml_release_runtime_system(); c = sws_getContext(src_w, src_h, src_format, dst_w, dst_h, dst_format, flags, NULL, NULL, NULL); caml_acquire_runtime_system(); if (!c) Fail("Failed to get sws context!"); ans = caml_alloc_custom(&context_ops, sizeof(struct SwsContext*), 0, 1); Context_val(ans) = c; Finalize("ocaml_swscale_finalize_context", ans); CAMLreturn(ans); } CAMLprim value ocaml_swscale_get_context_byte(value *argv, int argn) { return ocaml_swscale_get_context(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]); } CAMLprim value ocaml_swscale_scale(value context_, value src_, value off_, value h_, value dst_, value dst_off) { CAMLparam4(context_, src_, dst_, dst_off); CAMLlocal1(v); struct SwsContext *context = Context_val(context_); int src_planes = Wosize_val(src_); int dst_planes = Wosize_val(dst_); int off = Int_val(off_); int h = Int_val(h_); int i; const uint8_t *src_slice[4]; int src_stride[4]; uint8_t *dst_slice[4]; int dst_stride[4]; memset(src_slice, 0, 4*sizeof(uint8_t*)); memset(dst_slice, 0, 4*sizeof(uint8_t*)); for (i = 0; i < src_planes; i++) { v = Field(src_, i); src_slice[i] = Caml_ba_data_val(Field(v, 0)); src_stride[i] = Int_val(Field(v, 1)); } for (i = 0; i < dst_planes; i++) { v = Field(dst_, i); dst_slice[i] = Caml_ba_data_val(Field(v, 0)) + Int_val(dst_off); dst_stride[i] = Int_val(Field(v, 1)); } caml_release_runtime_system(); sws_scale(context, src_slice, src_stride, off, h, dst_slice, dst_stride); caml_acquire_runtime_system(); CAMLreturn(Val_unit); } CAMLprim value ocaml_swscale_scale_byte(value *argv, int argn) { return ocaml_swscale_scale(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]); } /***** Contexts *****/ typedef enum _vector_kind {Ba, Frm, Str} vector_kind; struct video_t { int width; int height; enum AVPixelFormat pixel_format; int nb_planes; uint8_t *slice_tab[4]; int stride_tab[4]; int sizes_tab[4]; uint8_t **slice; int *stride; int owns_data; }; typedef struct sws_t sws_t; struct sws_t { struct SwsContext *context; int srcSliceY; int srcSliceH; struct video_t in; struct video_t out; value out_vector; int release_out_vector; int (*get_in_pixels)(sws_t *, value *); int (*alloc_out)(sws_t *); int (*copy_out)(sws_t *); }; #define Sws_val(v) (*(sws_t**)Data_custom_val(v)) static int get_in_pixels_frame(sws_t *sws, value *in_vector) { AVFrame *frame = Frame_val(*in_vector); sws->in.slice = frame->data; sws->in.stride = frame->linesize; return 0; } static int get_in_pixels_string(sws_t *sws, value *in_vector) { CAMLparam0(); CAMLlocal2(v, str); int i, nb_planes = Wosize_val(*in_vector) > 4 ? 4 : Wosize_val(*in_vector); for (i = 0; i < nb_planes; i++) { v = Field(*in_vector, i); str = Field(v, 0); sws->in.stride[i] = Int_val(Field(v, 1)); size_t str_len = caml_string_length(str); if(sws->in.sizes_tab[i] < str_len) { sws->in.slice[i] = (uint8_t*)realloc(sws->in.slice[i], str_len); sws->in.sizes_tab[i] = str_len; } memcpy(sws->in.slice[i], (uint8_t*)String_val(str), str_len); } CAMLreturnT(int, nb_planes); } static int get_in_pixels_ba(sws_t *sws, value *in_vector) { CAMLparam0(); CAMLlocal1(v); int i, nb_planes = Wosize_val(*in_vector); for (i = 0; i < nb_planes && i < 4; i++) { v = Field(*in_vector, i); sws->in.slice[i] = Caml_ba_data_val(Field(v, 0)); sws->in.stride[i] = Int_val(Field(v, 1)); } CAMLreturnT(int, nb_planes); } static int alloc_out_frame(sws_t *sws) { int ret; #ifndef HAS_FRAME caml_failwith("Not implemented."); #else do { caml_release_runtime_system(); AVFrame * frame = av_frame_alloc(); caml_acquire_runtime_system(); if (!frame) caml_raise_out_of_memory(); frame->width = sws->out.width; frame->height = sws->out.height; frame->format = sws->out.pixel_format; // allocate the buffers for the frame data caml_release_runtime_system(); ret = av_frame_get_buffer(frame, 32); if (ret < 0) { av_frame_free(&frame); caml_acquire_runtime_system(); ocaml_avutil_raise_error(ret); } caml_acquire_runtime_system(); sws->out.slice = frame->data; sws->out.stride = frame->linesize; caml_modify_generational_global_root(&sws->out_vector, value_of_frame(frame)); } while(0); #endif return ret; } static int alloc_out_string(sws_t *sws) { value v; int i; caml_register_generational_global_root(&v); caml_modify_generational_global_root(&sws->out_vector, caml_alloc_tuple(sws->out.nb_planes)); for(i = 0; i < sws->out.nb_planes; i++) { int len = sws->out.stride[i] * sws->out.height; if(sws->out.sizes_tab[i] < len) { sws->out.slice[i] = (uint8_t*)realloc(sws->out.slice[i], len + 16); sws->out.sizes_tab[i] = len; } v = caml_alloc_tuple(2); Store_field(v, 0, caml_alloc_string(len)); Store_field(v, 1, Val_int(sws->out.stride[i])); Store_field(sws->out_vector, i, v); } caml_remove_generational_global_root(&v); return 0; } static int copy_out_string(sws_t *sws) { CAMLparam0(); CAMLlocal1(str); int i; for(i = 0; i < sws->out.nb_planes; i++) { str = Field(Field(sws->out_vector, i), 0); memcpy((uint8_t*)String_val(str), sws->out.slice[i], sws->out.sizes_tab[i]); } CAMLreturnT(int, 0); } static int alloc_out_ba(sws_t *sws) { value v; int i; caml_register_generational_global_root(&v); caml_modify_generational_global_root(&sws->out_vector, caml_alloc_tuple(sws->out.nb_planes)); for(i = 0; i < sws->out.nb_planes; i++) { // Some filters and swscale can read up to 16 bytes beyond the planes, 16 extra bytes must be allocated. intnat out_size = sws->out.stride[i] * sws->out.height + 16; v = caml_alloc_tuple(2); Store_field(v, 0, caml_ba_alloc(CAML_BA_C_LAYOUT | CAML_BA_UINT8, 1, NULL, &out_size)); Store_field(v, 1, Val_int(sws->out.stride[i])); sws->out.slice[i] = Caml_ba_data_val(Field(v, 0)); Store_field(sws->out_vector, i, v); } caml_remove_generational_global_root(&v); return 0; } CAMLprim value ocaml_swscale_convert(value _sws, value _in_vector) { CAMLparam2(_sws, _in_vector); sws_t *sws = Sws_val(_sws); // acquisition of the input pixels int ret = sws->get_in_pixels(sws, &_in_vector); if(ret < 0) Fail( "Failed to get input pixels"); // Allocate out data if needed if (sws->release_out_vector) { ret = sws->alloc_out(sws); if(ret < 0) ocaml_avutil_raise_error(ret); } // Scale and convert input data to output data caml_release_runtime_system(); ret = sws_scale(sws->context, (const uint8_t * const*)sws->in.slice, sws->in.stride, sws->srcSliceY, sws->srcSliceH, sws->out.slice, sws->out.stride); caml_acquire_runtime_system(); if(ret < 0) ocaml_avutil_raise_error(ret); if(sws->copy_out) { ret = sws->copy_out(sws); if(ret < 0) ocaml_avutil_raise_error(ret); } CAMLreturn(sws->out_vector); } void swscale_free(sws_t *sws) { int i; if(sws->context) sws_freeContext(sws->context); if(sws->in.owns_data) { for(i = 0; sws->in.slice[i]; i++) free(sws->in.slice[i]); } if(sws->out.owns_data) { for(i = 0; sws->out.slice[i]; i++) free(sws->out.slice[i]); } if(sws->out_vector) caml_remove_generational_global_root(&sws->out_vector); free(sws); } CAMLprim value ocaml_swscale_finalize_swscale(value v) { CAMLparam1(v); caml_register_generational_global_root(&v); caml_release_runtime_system(); swscale_free(Sws_val(v)); caml_acquire_runtime_system(); caml_remove_generational_global_root(&v); CAMLreturn(Val_unit); } static struct custom_operations sws_ops = { "ocaml_swscale_context", custom_finalize_default, custom_compare_default, custom_hash_default, custom_serialize_default, custom_deserialize_default }; CAMLprim value ocaml_swscale_create(value flags_, value in_vector_kind_, value in_width_, value in_height_, value in_pixel_format_, value out_vector_kind_, value out_width_, value out_height_, value out_pixel_format_) { CAMLparam1(flags_); CAMLlocal1(ans); vector_kind in_vector_kind = Int_val(in_vector_kind_); vector_kind out_vector_kind = Int_val(out_vector_kind_); int flags = 0, i; sws_t * sws = (sws_t*)calloc(1, sizeof(sws_t)); if( ! sws) Fail( "Failed to create Swscale context"); sws->in.slice = sws->in.slice_tab; sws->in.stride = sws->in.stride_tab; sws->in.width = Int_val(in_width_); sws->in.height = Int_val(in_height_); sws->in.pixel_format = PixelFormat_val(in_pixel_format_); sws->srcSliceH = sws->in.height; sws->out.slice = sws->out.slice_tab; sws->out.stride = sws->out.stride_tab; sws->out.width = Int_val(out_width_); sws->out.height = Int_val(out_height_); sws->out.pixel_format = PixelFormat_val(out_pixel_format_); for (i = 0; i < Wosize_val(flags_); i++) flags |= Flag_val(Field(flags_, i)); caml_release_runtime_system(); sws->context = sws_getContext(sws->in.width, sws->in.height, sws->in.pixel_format, sws->out.width, sws->out.height, sws->out.pixel_format, flags, NULL, NULL, NULL); caml_acquire_runtime_system(); if( ! sws->context) { free(sws); Fail("Failed to create Swscale context"); } sws->release_out_vector = 1; if(in_vector_kind == Frm) { sws->get_in_pixels = get_in_pixels_frame; } else if(in_vector_kind == Str) { sws->get_in_pixels = get_in_pixels_string; sws->in.owns_data = 1; } else { sws->get_in_pixels = get_in_pixels_ba; } sws->out_vector = Val_unit; caml_register_generational_global_root(&sws->out_vector); if(out_vector_kind == Frm) { sws->alloc_out = alloc_out_frame; } else if(out_vector_kind == Str) { sws->alloc_out = alloc_out_string; sws->copy_out = copy_out_string; sws->out.owns_data = 1; } else { sws->alloc_out = alloc_out_ba; } caml_release_runtime_system(); int ret = av_image_fill_linesizes(sws->out.stride, sws->out.pixel_format, sws->out.width); if(ret < 0) { swscale_free(sws); caml_acquire_runtime_system(); Fail( "Failed to create Swscale context"); } for(sws->out.nb_planes = 0; sws->out.stride[sws->out.nb_planes]; sws->out.nb_planes++); ret = sws->alloc_out(sws); if(ret < 0) { swscale_free(sws); caml_acquire_runtime_system(); Fail( "Failed to create Swscale context"); } caml_acquire_runtime_system(); ans = caml_alloc_custom(&sws_ops, sizeof(sws_t*), 0, 1); Sws_val(ans) = sws; Finalize("ocaml_swscale_finalize_swscale", ans); CAMLreturn(ans); } CAMLprim value ocaml_swscale_create_byte(value *argv, int argn) { return ocaml_swscale_create(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8]); } CAMLprim value ocaml_swscale_reuse_output(value _sws, value _reuse_output) { CAMLparam2(_sws, _reuse_output); Sws_val(_sws)->release_out_vector = ! Bool_val(_reuse_output); CAMLreturn(Val_unit); } ocaml-ffmpeg-0.4.1/src/META.in0000644000175000017500000000023113543206341015607 0ustar smimramsmimramname="ffmpeg" version="@VERSION@" description="OCaml bindings for FFmpeg" requires="@requires@" archive(byte)="ffmpeg.cma" archive(native)="ffmpeg.cmxa" ocaml-ffmpeg-0.4.1/src/swscale.ml0000644000175000017500000000533713543206341016540 0ustar smimramsmimramopen Avutil external version : unit -> int = "ocaml_swscale_version" external configuration : unit -> string = "ocaml_swscale_configuration" external license : unit -> string = "ocaml_swscale_configuration" type pixel_format = Avutil.Pixel_format.t type flag = | Fast_bilinear | Bilinear | Bicubic | Print_info type t external finalize : t -> unit = "ocaml_swscale_finalize_context" let () = Callback.register "ocaml_swscale_finalize_context" finalize external create : flag array -> int -> int -> pixel_format -> int -> int -> pixel_format -> t = "ocaml_swscale_get_context_byte" "ocaml_swscale_get_context" let create flags = create (Array.of_list flags) type planes = (data * int) array external scale : t -> planes -> int -> int -> planes -> int -> unit = "ocaml_swscale_scale_byte" "ocaml_swscale_scale" type vector_kind = Ba | Frm | Str module type VideoData = sig type t val vk : vector_kind end module BigArray = struct type t = planes let vk = Ba end module Frame = struct type t = video frame let vk = Frm end module Bytes = struct type t = (string * int) array let vk = Str end type ('i, 'o) ctx external finalize_ctx : _ ctx -> unit = "ocaml_swscale_finalize_swscale" let () = Callback.register "ocaml_swscale_finalize_swscale" finalize_ctx module Make (I : VideoData) (O : VideoData) = struct type t = (I.t, O.t) ctx external create : flag array -> vector_kind -> int -> int -> pixel_format -> vector_kind -> int -> int -> pixel_format -> t = "ocaml_swscale_create_byte" "ocaml_swscale_create" let create flags in_width in_height in_pixel_format out_width out_height out_pixel_format = create (Array.of_list flags) I.vk in_width in_height in_pixel_format O.vk out_width out_height out_pixel_format (* let from_codec flags in_codec out_width out_height out_pixel_format = create flags (Avcodec.Video.get_width in_codec) (Avcodec.Video.get_height in_codec) (Avcodec.Video.get_pixel_format in_codec) out_width out_height out_pixel_format let to_codec flags in_width in_height in_pixel_format out_codec = create flags in_width in_height in_pixel_format (Avcodec.Video.get_width out_codec) (Avcodec.Video.get_height out_codec) (Avcodec.Video.get_pixel_format out_codec) let from_codec_to_codec flags in_codec out_codec = create flags (Avcodec.Video.get_width in_codec) (Avcodec.Video.get_height in_codec) (Avcodec.Video.get_pixel_format in_codec) (Avcodec.Video.get_width out_codec) (Avcodec.Video.get_height out_codec) (Avcodec.Video.get_pixel_format out_codec) *) external reuse_output : t -> bool -> unit = "ocaml_swscale_reuse_output" external convert : t -> I.t -> O.t = "ocaml_swscale_convert" end ocaml-ffmpeg-0.4.1/src/avutil.ml0000644000175000017500000001360613543206341016401 0ustar smimramsmimram (* Options *) type opt_val = [ | `String of string | `Int of int | `Float of float ] type opts = (string, opt_val) Hashtbl.t (* Line *) type input type output (* Container *) type 'a container (* Media *) type audio type video type subtitle external finalize_subtitle : subtitle -> unit = "ocaml_avutil_finalize_subtitle" let () = Callback.register "ocaml_avutil_finalize_subtitle" finalize_subtitle (* Format *) type ('line, 'media) format (* Frame *) type 'media frame external finalize_frame : _ frame -> unit = "ocaml_avutil_finalize_frame" let () = Callback.register "ocaml_avutil_finalize_frame" finalize_frame type error = [ | `Bsf_not_found | `Decoder_not_found | `Demuxer_not_found | `Encoder_not_found | `Eof | `Exit | `Filter_not_found | `Invalid_data | `Muxer_not_found | `Option_not_found | `Patch_welcome | `Protocol_not_found | `Stream_not_found | `Bug | `Eagain | `Unknown | `Experimental | `Failure of string ] external string_of_error : error -> string = "ocaml_avutil_string_of_error" exception Error of error let () = Printexc.register_printer (function | Error err -> Some (Printf.sprintf "FFmpeg.Avutils.Error(%s)" (string_of_error err)) | _ -> None) let () = Callback.register_exception "ffmpeg_exn_error" (Error `Unknown); Callback.register "ffmpeg_exn_failure" (fun s -> raise (Error (`Failure s))); Callback.register "ffmpeg_gc_finalise" Gc.finalise external ocaml_avutil_register_lock_manager : unit -> bool = "ocaml_avutil_register_lock_manager" [@@noalloc] let () = if not (ocaml_avutil_register_lock_manager()) then raise (Error (`Failure "Failed to register lock manager")) type data = (int, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t let create_data len = Bigarray.Array1.create Bigarray.int8_unsigned Bigarray.c_layout len type rational = {num : int; den : int} external time_base : unit -> rational = "ocaml_avutil_time_base" module Time_format = struct type t = [ | `Second | `Millisecond | `Microsecond | `Nanosecond ] end module Log = struct type level = [ | `Quiet | `Panic | `Fatal | `Error | `Warning | `Info | `Verbose | `Debug ] let int_of_level = function | `Quiet -> -8 | `Panic -> 0 | `Fatal -> 8 | `Error -> 16 | `Warning -> 24 | `Info -> 32 | `Verbose -> 40 | `Debug -> 48 external set_level : int -> unit = "ocaml_avutil_set_log_level" let set_level level = set_level (int_of_level level) external set_callback : (string -> unit) -> unit = "ocaml_avutil_set_log_callback" let set_callback fn = let m = Mutex.create () in let fn msg = try fn msg with | exn -> Printf.printf "Error while calling custom log function: %s\n%!" (Printexc.to_string exn) in let fn s = Mutex.lock m; fn s; Mutex.unlock m in set_callback fn external clear_callback : unit -> unit = "ocaml_avutil_clear_log_callback" end module Pixel_format = struct type t = Pixel_format.t external bits : t -> int = "ocaml_avutil_pixelformat_bits_per_pixel" external planes : t -> int = "ocaml_avutil_pixelformat_planes" external to_string : t -> string = "ocaml_avutil_pixelformat_to_string" external of_string : string -> t = "ocaml_avutil_pixelformat_of_string" let bits (*?(padding=true)*) p = let n = bits p in (* TODO: when padding is true we should add the padding *) n end module Channel_layout = struct type t = Channel_layout.t external get_description : t -> int -> string = "ocaml_avutil_get_channel_layout_description" let get_description ?(channels=(-1)) ch = get_description ch channels external find : string -> t = "ocaml_avutil_get_channel_layout" external get_nb_channels : t -> int = "ocaml_avutil_get_channel_layout_nb_channels" external get_default : int -> t = "ocaml_avutil_get_default_channel_layout" external get_id : t -> int = "ocaml_avutil_get_channel_layout_id" end module Sample_format = struct type t = Sample_format.t external get_name : t -> string = "ocaml_avutil_get_sample_fmt_name" external get_id : t -> int = "ocaml_avutil_get_sample_fmt_id" external find : string -> t = "ocaml_avutil_find_sample_fmt" external find_id : int -> t = "ocaml_avutil_find_sample_fmt_from_id" end module Audio = struct external frame_get_sample_format : audio frame -> Sample_format.t = "ocaml_avutil_video_frame_get_sample_format" end module Video = struct type planes = (data * int) array external create_frame : int -> int -> Pixel_format.t -> video frame = "ocaml_avutil_video_create_frame" external frame_get_linesize : video frame -> int -> int = "ocaml_avutil_video_frame_get_linesize" external get_frame_planes : video frame -> bool -> planes = "ocaml_avutil_video_get_frame_bigarray_planes" let frame_visit ~make_writable visit frame = visit(get_frame_planes frame make_writable); frame end module Subtitle = struct let time_base() = {num = 1; den = 100} external create_frame : int64 -> int64 -> string array -> subtitle frame = "ocaml_avutil_subtitle_create_frame" let create_frame start_time end_time lines = let num_time_base = float_of_int((time_base()).num) in let den_time_base = float_of_int((time_base()).den) in create_frame (Int64.of_float(start_time *. den_time_base /. num_time_base)) (Int64.of_float(end_time *. den_time_base /. num_time_base)) (Array.of_list lines) external frame_to_lines : subtitle frame -> (int64 * int64 * string array) = "ocaml_avutil_subtitle_to_lines" let frame_to_lines t = let num_time_base = float_of_int((time_base()).num) in let den_time_base = float_of_int((time_base()).den) in let s, e, lines = frame_to_lines t in Int64.(to_float s *. num_time_base /. den_time_base, to_float e *. num_time_base /. den_time_base, Array.to_list lines) end ocaml-ffmpeg-0.4.1/src/channel_layout.mli0000644000175000017500000000075413543206341020253 0ustar smimramsmimram(** Channel layout formats *) type t = [ | `Native | `Mono | `Stereo | `_2point1 | `_2_1 | `Surround | `_3point1 | `_4point0 | `_4point1 | `_2_2 | `Quad | `_5point0 | `_5point1 | `_5point0_back | `_5point1_back | `_6point0 | `_6point0_front | `Hexagonal | `_6point1 | `_6point1_back | `_6point1_front | `_7point0 | `_7point0_front | `_7point1 | `_7point1_wide | `_7point1_wide_back | `Octagonal | `Hexadecagonal | `Stereo_downmix ] ocaml-ffmpeg-0.4.1/src/codec_id_stubs.h0000644000175000017500000004352113543206341017664 0ustar smimramsmimram#define VALUE_NOT_FOUND 0xFFFFFFF static const int64_t AV_CODEC_ID_VIDEO_TAB[][2] = { {(1963793951), AV_CODEC_ID_MPEG1VIDEO}, {(1103353565), AV_CODEC_ID_MPEG2VIDEO}, {(1601894731), AV_CODEC_ID_H261}, {(1601894735), AV_CODEC_ID_H263}, {(1830446983), AV_CODEC_ID_RV10}, {(1830447429), AV_CODEC_ID_RV20}, {(947993323), AV_CODEC_ID_MJPEG}, {(949113499), AV_CODEC_ID_MJPEGB}, {(297013737), AV_CODEC_ID_LJPEG}, {(1852031297), AV_CODEC_ID_SP5X}, {(-1397391713), AV_CODEC_ID_JPEGLS}, {(1079974879), AV_CODEC_ID_MPEG4}, {(-1099095193), AV_CODEC_ID_RAWVIDEO}, {(422477833), AV_CODEC_ID_MSMPEG4V1}, {(422477835), AV_CODEC_ID_MSMPEG4V2}, {(422477837), AV_CODEC_ID_MSMPEG4V3}, {(1940478307), AV_CODEC_ID_WMV1}, {(1940478309), AV_CODEC_ID_WMV2}, {(740240339), AV_CODEC_ID_H263P}, {(740240325), AV_CODEC_ID_H263I}, {(1563333571), AV_CODEC_ID_FLV1}, {(1852654663), AV_CODEC_ID_SVQ1}, {(1852654667), AV_CODEC_ID_SVQ3}, {(-510105837), AV_CODEC_ID_DVVIDEO}, {(-253524197), AV_CODEC_ID_HUFFYUV}, {(1498088815), AV_CODEC_ID_CYUV}, {(1601894737), AV_CODEC_ID_H264}, {(-1861287339), AV_CODEC_ID_INDEO3}, {(8603443), AV_CODEC_ID_VP3}, {(1971035227), AV_CODEC_ID_THEORA}, {(1453134107), AV_CODEC_ID_ASV1}, {(1453134109), AV_CODEC_ID_ASV2}, {(1562736823), AV_CODEC_ID_FFV1}, {(2112243285), AV_CODEC_ID_4XM}, {(1917302809), AV_CODEC_ID_VCR1}, {(1496790947), AV_CODEC_ID_CLJR}, {(1717784363), AV_CODEC_ID_MDEC}, {(8205289), AV_CODEC_ID_ROQ}, {(1815049561), AV_CODEC_ID_INTERPLAY_VIDEO}, {(1383142107), AV_CODEC_ID_XAN_WC3}, {(1383142109), AV_CODEC_ID_XAN_WC4}, {(1829882891), AV_CODEC_ID_RPZA}, {(-310031877), AV_CODEC_ID_CINEPAK}, {(2123143175), AV_CODEC_ID_WS_VQA}, {(1147807563), AV_CODEC_ID_MSRLE}, {(-1882388807), AV_CODEC_ID_MSVIDEO1}, {(-1790290981), AV_CODEC_ID_IDCIN}, {(-1329620199), AV_CODEC_ID_8BPS}, {(8303827), AV_CODEC_ID_SMC}, {(1563327873), AV_CODEC_ID_FLIC}, {(330366747), AV_CODEC_ID_TRUEMOTION1}, {(1015291997), AV_CODEC_ID_VMDVIDEO}, {(1719285609), AV_CODEC_ID_MSZH}, {(2006910551), AV_CODEC_ID_ZLIB}, {(-521062255), AV_CODEC_ID_QTRLE}, {(1874529279), AV_CODEC_ID_TSCC}, {(1896019801), AV_CODEC_ID_ULTI}, {(-875933269), AV_CODEC_ID_QDRAW}, {(1917902351), AV_CODEC_ID_VIXL}, {(1807694403), AV_CODEC_ID_QPEG}, {(8005907), AV_CODEC_ID_PNG}, {(8006811), AV_CODEC_ID_PPM}, {(8000567), AV_CODEC_ID_PBM}, {(8002797), AV_CODEC_ID_PGM}, {(645278921), AV_CODEC_ID_PGMYUV}, {(8000121), AV_CODEC_ID_PAM}, {(-1152772281), AV_CODEC_ID_FFVHUFF}, {(1830447875), AV_CODEC_ID_RV30}, {(1830448321), AV_CODEC_ID_RV40}, {(8597641), AV_CODEC_ID_VC1}, {(1940478311), AV_CODEC_ID_WMV3}, {(1696698399), AV_CODEC_ID_LOCO}, {(1940577765), AV_CODEC_ID_WNV1}, {(1451342625), AV_CODEC_ID_AASC}, {(-1861287341), AV_CODEC_ID_INDEO2}, {(862049649), AV_CODEC_ID_FRAPS}, {(330366749), AV_CODEC_ID_TRUEMOTION2}, {(6613067), AV_CODEC_ID_BMP}, {(1497484003), AV_CODEC_ID_CSCD}, {(-1683078665), AV_CODEC_ID_MMVIDEO}, {(2007006927), AV_CODEC_ID_ZMBV}, {(6517629), AV_CODEC_ID_AVS}, {(-771171687), AV_CODEC_ID_SMACKVIDEO}, {(7810143), AV_CODEC_ID_NUV}, {(1674328799), AV_CODEC_ID_KMVC}, {(1731533927), AV_CODEC_ID_FLASHSV}, {(1495702263), AV_CODEC_ID_CAVS}, {(385271821), AV_CODEC_ID_JPEG2000}, {(1918295705), AV_CODEC_ID_VMNC}, {(8603447), AV_CODEC_ID_VP5}, {(8603449), AV_CODEC_ID_VP6}, {(1918569109), AV_CODEC_ID_VP6F}, {(1010470719), AV_CODEC_ID_TARGA}, {(20187291), AV_CODEC_ID_DSICINVIDEO}, {(1412959939), AV_CODEC_ID_TIERTEXSEQVIDEO}, {(1873536043), AV_CODEC_ID_TIFF}, {(7108553), AV_CODEC_ID_GIF}, {(6816859), AV_CODEC_ID_DXA}, {(-526342123), AV_CODEC_ID_DNXHD}, {(8401081), AV_CODEC_ID_THP}, {(8301163), AV_CODEC_ID_SGI}, {(6689211), AV_CODEC_ID_C93}, {(8664033), AV_CODEC_ID_BETHSOFTVID}, {(8008617), AV_CODEC_ID_PTX}, {(8408193), AV_CODEC_ID_TXD}, {(1918569099), AV_CODEC_ID_VP6A}, {(6513621), AV_CODEC_ID_AMV}, {(38553), AV_CODEC_ID_VB}, {(8001035), AV_CODEC_ID_PCX}, {(-908217607), AV_CODEC_ID_SUNRAST}, {(-1861287337), AV_CODEC_ID_INDEO4}, {(-1861287335), AV_CODEC_ID_INDEO5}, {(925517591), AV_CODEC_ID_MIMIC}, {(8203825), AV_CODEC_ID_RL2}, {(1406974565), AV_CODEC_ID_ESCAPE124}, {(-637837665), AV_CODEC_ID_DIRAC}, {(6609931), AV_CODEC_ID_BFI}, {(6712537), AV_CODEC_ID_CMV}, {(185768967), AV_CODEC_ID_MOTIONPIXELS}, {(8400647), AV_CODEC_ID_TGV}, {(8400637), AV_CODEC_ID_TGQ}, {(8405081), AV_CODEC_ID_TQI}, {(1453331335), AV_CODEC_ID_AURA}, {(1970340383), AV_CODEC_ID_AURA2}, {(1263521339), AV_CODEC_ID_V210X}, {(8403323), AV_CODEC_ID_TMV}, {(1912400375), AV_CODEC_ID_V210}, {(6813337), AV_CODEC_ID_DPX}, {(7701729), AV_CODEC_ID_MAD}, {(1563930901), AV_CODEC_ID_FRWU}, {(-414991041), AV_CODEC_ID_FLASHSV2}, {(-1738229479), AV_CODEC_ID_CDGRAPHICS}, {(1823683839), AV_CODEC_ID_R210}, {(6514049), AV_CODEC_ID_ANM}, {(1789210671), AV_CODEC_ID_BINKVIDEO}, {(1145236425), AV_CODEC_ID_IFF_ILBM}, {(1673731951), AV_CODEC_ID_KGV1}, {(8901493), AV_CODEC_ID_YOP}, {(8603453), AV_CODEC_ID_VP8}, {(1724946779), AV_CODEC_ID_PICTOR}, {(1452635591), AV_CODEC_ID_ANSI}, {(1024547187), AV_CODEC_ID_A64_MULTI}, {(840755897), AV_CODEC_ID_A64_MULTI5}, {(1823584053), AV_CODEC_ID_R10K}, {(1258501199), AV_CODEC_ID_MXPEG}, {(567109813), AV_CODEC_ID_LAGARITH}, {(-740225305), AV_CODEC_ID_PRORES}, {(33241), AV_CODEC_ID_JV}, {(6808831), AV_CODEC_ID_DFA}, {(-1374874735), AV_CODEC_ID_WMV3IMAGE}, {(1095377199), AV_CODEC_ID_VC1IMAGE}, {(-838550727), AV_CODEC_ID_UTVIDEO}, {(889160783), AV_CODEC_ID_BMV_VIDEO}, {(1917200779), AV_CODEC_ID_VBLE}, {(716638061), AV_CODEC_ID_DXTORY}, {(1912599291), AV_CODEC_ID_V410}, {(8805579), AV_CODEC_ID_XWD}, {(1496001515), AV_CODEC_ID_CDXL}, {(8796231), AV_CODEC_ID_XBM}, {(-728732515), AV_CODEC_ID_ZEROCODEC}, {(1719282377), AV_CODEC_ID_MSS1}, {(1719274349), AV_CODEC_ID_MSA1}, {(1408201383), AV_CODEC_ID_TSCC2}, {(1719381837), AV_CODEC_ID_MTS2}, {(1496791809), AV_CODEC_ID_CLLC}, {(1719282379), AV_CODEC_ID_MSS2}, {(8603455), AV_CODEC_ID_VP9}, {(6511799), AV_CODEC_ID_AIC}, {(1406975003), AV_CODEC_ID_ESCAPE130}, {(7084037), AV_CODEC_ID_G2M}, {(1939673849), AV_CODEC_ID_WEBP}, {(1892535955), AV_CODEC_ID_HNM4_VIDEO}, {(1606995733), AV_CODEC_ID_HEVC}, {(7009089), AV_CODEC_ID_FIC}, {(-76960351), AV_CODEC_ID_ALIAS_PIX}, {(1431446769), AV_CODEC_ID_BRENDER_PIX}, {(-1208126109), AV_CODEC_ID_PAF_VIDEO}, {(6916351), AV_CODEC_ID_EXR}, {(8603451), AV_CODEC_ID_VP7}, {(1850564827), AV_CODEC_ID_SANM}, {(-2025459027), AV_CODEC_ID_SGIRLE}, {(1719573615), AV_CODEC_ID_MVC1}, {(1719573617), AV_CODEC_ID_MVC2}, {(7211615), AV_CODEC_ID_HQX}, {(1873044545), AV_CODEC_ID_TDSC}, {(841495493), AV_CODEC_ID_HQ_HQA}, {(7204463), AV_CODEC_ID_HAP}, {(6807975), AV_CODEC_ID_DDS}, {(6816901), AV_CODEC_ID_DXV}, {(1052327985), AV_CODEC_ID_SCREENPRESSO}, {(1830171011), AV_CODEC_ID_RSCC}, {(1453431145), AV_CODEC_ID_AVS2}, {(1979136821), AV_CODEC_ID_Y41P}, {(1453430823), AV_CODEC_ID_AVRP}, {(-1511954359), AV_CODEC_ID_012V}, {(1453432147), AV_CODEC_ID_AVUI}, {(1453730547), AV_CODEC_ID_AYUV}, {(178487613), AV_CODEC_ID_TARGA_Y216}, {(1912499403), AV_CODEC_ID_V308}, {(1912598861), AV_CODEC_ID_V408}, {(1985632245), AV_CODEC_ID_YUV4}, {(1453430819), AV_CODEC_ID_AVRN}, {(1497188299), AV_CODEC_ID_CPIA}, {(-571375125), AV_CODEC_ID_XFACE}, {(1851858247), AV_CODEC_ID_SNOW}, {(-1877707191), AV_CODEC_ID_SMVJPEG}, {(1452832273), AV_CODEC_ID_APNG}, {(-816956621), AV_CODEC_ID_DAALA}, {(1496193279), AV_CODEC_ID_CFHD}, {(558155169), AV_CODEC_ID_TRUEMOTION2RT}, {(1712688267), AV_CODEC_ID_M101}, {(-1226868645), AV_CODEC_ID_MAGICYUV}, {(-1652344387), AV_CODEC_ID_SHEERVIDEO}, {(8900129), AV_CODEC_ID_YLC}, {(8008131), AV_CODEC_ID_PSD}, {(-2105058823), AV_CODEC_ID_PIXLET}, {(1542100065), AV_CODEC_ID_SPEEDHQ}, {(1563433129), AV_CODEC_ID_FMVC}, {(1850764645), AV_CODEC_ID_SCPR}, {(-552349731), AV_CODEC_ID_CLEARVIDEO}, {(8802475), AV_CODEC_ID_XPM}, {(6517497), AV_CODEC_ID_AV1}, {(645926859), AV_CODEC_ID_BITPACKED}, {(1719275341), AV_CODEC_ID_MSCC}, {(1852252471), AV_CODEC_ID_SRGC}, {(8307849), AV_CODEC_ID_SVG}, {(7106355), AV_CODEC_ID_GDV}, {(1563034437), AV_CODEC_ID_FITS}, {(1629966423), AV_CODEC_ID_IMM4}, {(-1789221097), AV_CODEC_ID_PROSUMER}, {(1719680309), AV_CODEC_ID_MWSC}, {(1939479851), AV_CODEC_ID_WCMV}, {(1828387903), AV_CODEC_ID_RASC}, {(1608980913), AV_CODEC_ID_HYMT}, {(1453025829), AV_CODEC_ID_ARBC}, {(6510927), AV_CODEC_ID_AGM}, {(1697096237), AV_CODEC_ID_LSCR}, {(8603445), AV_CODEC_ID_VP4}, }; #define AV_CODEC_ID_VIDEO_TAB_LEN 238 enum AVCodecID VideoCodecID_val(value v){ int i; for(i=0;i unit = "ocaml_avcodec_init" [@@noalloc] let () = init () external finalize_codec_parameters : 'a params -> unit = "ocaml_avcodec_finalize_codec_parameters" let () = Callback.register "ocaml_avcodec_finalize_codec_parameters" finalize_codec_parameters external get_input_buffer_padding_size : unit -> int = "ocaml_avcodec_get_input_buffer_padding_size" let input_buffer_padding_size = get_input_buffer_padding_size() let empty_data = create_data 0 (** Packet. *) module Packet = struct (** Packet type *) type 'a t external finalize : 'a t -> unit = "ocaml_avcodec_finalize_packet" let () = Callback.register "ocaml_avcodec_finalize_packet" finalize external get_size : 'a t -> int = "ocaml_avcodec_get_packet_size" external get_stream_index : 'a t -> int = "ocaml_avcodec_get_packet_stream_index" external set_stream_index : 'a t -> int -> unit = "ocaml_avcodec_set_packet_stream_index" external to_bytes : 'a t -> bytes = "ocaml_avcodec_packet_to_bytes" type parser_t type 'a parser = {mutable buf:data; mutable remainder:data; parser:parser_t} external finalize_parser : parser_t -> unit = "ocaml_avcodec_finalize_parser" let () = Callback.register "ocaml_avcodec_finalize_parser" finalize_parser (* This is an internal function, which receives any type of AVCodec in the C code. *) external create_parser : 'a -> parser_t = "ocaml_avcodec_create_parser" let create_parser codec = {buf = empty_data; remainder = empty_data; parser = create_parser codec} external parse_packet : parser_t -> data -> int -> int -> ('m t * int)option = "ocaml_avcodec_parse_packet" let rec buf_loop ctx f buf ofs len = match parse_packet ctx.parser buf ofs len with | Some(pkt, l) -> f pkt; buf_loop ctx f buf (ofs + l) (len - l) | None -> ofs let parse_data ctx f data = let remainder_len = Ba.dim ctx.remainder in let data_len = Ba.dim data in let actual_len = remainder_len + data_len in let needed_len = actual_len + input_buffer_padding_size in let buf_len = Ba.dim ctx.buf in let buf = if needed_len > buf_len then create_data needed_len else ctx.buf in if remainder_len > 0 then Ba.blit ctx.remainder (Ba.sub buf 0 remainder_len); Ba.blit data (Ba.sub buf remainder_len data_len); if needed_len <> buf_len then Ba.fill(Ba.sub buf actual_len input_buffer_padding_size) 0; let parsed_len = buf_loop ctx f buf 0 actual_len in ctx.buf <- buf; ctx.remainder <- Ba.sub buf parsed_len (actual_len - parsed_len) let parse_bytes ctx f bytes len = let data = create_data len in for i = 0 to len - 1 do data.{i} <- int_of_char(Bytes.get bytes i) done; parse_data ctx f data end (* These functions receive a AVCodec on the C side. *) external create_decoder : 'a -> bool -> int option -> int option -> _ decoder = "ocaml_avcodec_create_context" external create_encoder : 'a -> bool -> int option -> int option -> _ encoder = "ocaml_avcodec_create_context" (* There isn't much choice here.. *) external finalize_codec_context : 'a -> unit = "ocaml_avcodec_finalize_codec_context" let () = Callback.register "ocaml_avcodec_finalize_codec_context" finalize_codec_context (** Audio codecs. *) module Audio = struct (** Audio codec ids *) type 'a t type id = Codec_id.audio external get_id : _ t -> id = "ocaml_avcodec_get_audio_codec_id" external string_of_id : id -> string = "ocaml_avcodec_get_audio_codec_id_name" external find_encoder : string -> [`Encoder] t = "ocaml_avcodec_find_audio_encoder" external find_decoder : string -> [`Decoder] t = "ocaml_avcodec_find_audio_decoder" external get_supported_channel_layouts : _ t -> Avutil.Channel_layout.t list = "ocaml_avcodec_get_supported_channel_layouts" let get_supported_channel_layouts codec = List.rev(get_supported_channel_layouts codec) let find_best_channel_layout codec default = match get_supported_channel_layouts codec with | h::_ -> h | [] -> default external get_supported_sample_formats : _ t -> Avutil.Sample_format.t list = "ocaml_avcodec_get_supported_sample_formats" let get_supported_sample_formats codec = List.rev (get_supported_sample_formats codec) let find_best_sample_format codec default = match get_supported_sample_formats codec with | h::_ -> h | [] -> default external get_supported_sample_rates : _ t -> int list = "ocaml_avcodec_get_supported_sample_rates" let get_supported_sample_rates codec = List.rev(get_supported_sample_rates codec) let find_best_sample_rate codec default = match get_supported_sample_rates codec with | h::_ -> h | [] -> default external get_params_id : audio params -> id = "ocaml_avcodec_parameters_get_audio_codec_id" external get_channel_layout : audio params -> Avutil.Channel_layout.t = "ocaml_avcodec_parameters_get_channel_layout" external get_nb_channels : audio params -> int = "ocaml_avcodec_parameters_get_nb_channels" external get_sample_format : audio params -> Avutil.Sample_format.t = "ocaml_avcodec_parameters_get_sample_format" external get_bit_rate : audio params -> int = "ocaml_avcodec_parameters_get_bit_rate" external get_sample_rate : audio params -> int = "ocaml_avcodec_parameters_get_sample_rate" let create_parser = Packet.create_parser let create_decoder codec = create_decoder codec true None None let create_encoder ?bit_rate codec = create_encoder codec false bit_rate None end (** Video codecs. *) module Video = struct type 'a t type id = Codec_id.video external get_id : _ t -> id = "ocaml_avcodec_get_video_codec_id" external string_of_id : id -> string = "ocaml_avcodec_get_video_codec_id_name" external find_encoder : string -> [`Encoder] t = "ocaml_avcodec_find_video_encoder" external find_decoder : string -> [`Decoder] t = "ocaml_avcodec_find_video_decoder" external get_supported_frame_rates : _ t-> Avutil.rational list = "ocaml_avcodec_get_supported_frame_rates" let get_supported_frame_rates codec = List.rev (get_supported_frame_rates codec) let find_best_frame_rate codec default = match get_supported_frame_rates codec with | h::_ -> h | [] -> default external get_supported_pixel_formats : _ t -> Avutil.Pixel_format.t list = "ocaml_avcodec_get_supported_pixel_formats" let get_supported_pixel_formats codec = List.rev (get_supported_pixel_formats codec) let find_best_pixel_format codec default = match get_supported_pixel_formats codec with | h::_ -> h | [] -> default external get_params_id : video params -> id = "ocaml_avcodec_parameters_get_video_codec_id" external get_width : video params -> int = "ocaml_avcodec_parameters_get_width" external get_height : video params -> int = "ocaml_avcodec_parameters_get_height" external get_sample_aspect_ratio : video params -> Avutil.rational = "ocaml_avcodec_parameters_get_sample_aspect_ratio" external get_pixel_format : video params -> Avutil.Pixel_format.t = "ocaml_avcodec_parameters_get_pixel_format" external get_bit_rate : video params -> int = "ocaml_avcodec_parameters_get_bit_rate" let create_parser = Packet.create_parser let create_decoder codec = create_decoder codec true None None let create_encoder ?bit_rate ?(frame_rate=25) codec = create_encoder codec false bit_rate (Some frame_rate) end (** Subtitle codecs. *) module Subtitle = struct type 'a t type id = Codec_id.subtitle external get_id : _ t -> id = "ocaml_avcodec_get_subtitle_codec_id" external string_of_id : id -> string = "ocaml_avcodec_get_subtitle_codec_id_name" external find_encoder : string -> [`Encoder] t = "ocaml_avcodec_find_subtitle_encoder" external find_decoder : string -> [`Decoder] t = "ocaml_avcodec_find_subtitle_decoder" external get_params_id : subtitle params -> id = "ocaml_avcodec_parameters_get_subtitle_codec_id" end external _send_packet : 'media decoder -> 'media Packet.t -> unit = "ocaml_avcodec_send_packet" external _receive_frame : 'media decoder -> 'media frame option = "ocaml_avcodec_receive_frame" external _flush_decoder : 'media decoder -> unit = "ocaml_avcodec_flush_decoder" let rec receive_frame decoder f = match _receive_frame decoder with | Some frame -> f frame; receive_frame decoder f | None -> () let decode decoder f packet = _send_packet decoder packet; receive_frame decoder f let flush_decoder decoder f = try _flush_decoder decoder; receive_frame decoder f with Avutil.Error `Eof -> () external _send_frame : 'media encoder -> 'media frame -> unit = "ocaml_avcodec_send_frame" external _receive_packet : 'media encoder -> 'media Packet.t option = "ocaml_avcodec_receive_packet" external _flush_encoder : 'media encoder -> unit = "ocaml_avcodec_flush_encoder" let rec receive_packet encoder f = match _receive_packet encoder with | Some packet -> f packet; receive_packet encoder f | None -> () let encode encoder f frame = _send_frame encoder frame; receive_packet encoder f let flush_encoder encoder f = (* First flush remaining packets. *) receive_packet encoder f; _flush_encoder encoder; receive_packet encoder f ocaml-ffmpeg-0.4.1/src/gen_code_stubs.c0000644000175000017500000000040113543206341017657 0ustar smimramsmimram#include "caml/mlvalues.h" #include "caml/alloc.h" #include "caml/memory.h" CAMLprim value polymorphic_variant_string_to_c_value( value _pv_name ) { CAMLparam1(_pv_name); CAMLreturn(caml_copy_int64((int64_t)caml_hash_variant(String_val(_pv_name)))); } ocaml-ffmpeg-0.4.1/src/sample_format.ml0000644000175000017500000000021013543206341017711 0ustar smimramsmimramtype t = [ | `None | `U8 | `S16 | `S32 | `Flt | `Dbl | `U8p | `S16p | `S32p | `Fltp | `Dblp | `S64 | `S64p ] ocaml-ffmpeg-0.4.1/src/channel_layout_stubs.h0000644000175000017500000000322613543206341021136 0ustar smimramsmimram#define VALUE_NOT_FOUND 0xFFFFFFF static const int64_t AV_CH_LAYOUT_T_TAB[][2] = { {(-1386054801), AV_CH_LAYOUT_NATIVE}, {(1718882439), AV_CH_LAYOUT_MONO}, {(2053588657), AV_CH_LAYOUT_STEREO}, {(-1607517655), AV_CH_LAYOUT_2POINT1}, {(2112033099), AV_CH_LAYOUT_2_1}, {(494846397), AV_CH_LAYOUT_SURROUND}, {(-212195413), AV_CH_LAYOUT_3POINT1}, {(1183126827), AV_CH_LAYOUT_4POINT0}, {(1183126829), AV_CH_LAYOUT_4POINT1}, {(2112033101), AV_CH_LAYOUT_2_2}, {(1808189903), AV_CH_LAYOUT_QUAD}, {(-1716518227), AV_CH_LAYOUT_5POINT0}, {(-1716518225), AV_CH_LAYOUT_5POINT1}, {(-1397835295), AV_CH_LAYOUT_5POINT0_BACK}, {(2036691615), AV_CH_LAYOUT_5POINT1_BACK}, {(-321195985), AV_CH_LAYOUT_6POINT0}, {(-1451948413), AV_CH_LAYOUT_6POINT0_FRONT}, {(-2031818409), AV_CH_LAYOUT_HEXAGONAL}, {(-321195983), AV_CH_LAYOUT_6POINT1}, {(-52146723), AV_CH_LAYOUT_6POINT1_BACK}, {(-56626171), AV_CH_LAYOUT_6POINT1_FRONT}, {(1074126257), AV_CH_LAYOUT_7POINT0}, {(888537477), AV_CH_LAYOUT_7POINT0_FRONT}, {(1074126259), AV_CH_LAYOUT_7POINT1}, {(-1674427149), AV_CH_LAYOUT_7POINT1_WIDE}, {(-575112741), AV_CH_LAYOUT_7POINT1_WIDE_BACK}, {(-559732511), AV_CH_LAYOUT_OCTAGONAL}, {(2138366425), AV_CH_LAYOUT_HEXADECAGONAL}, {(284438183), AV_CH_LAYOUT_STEREO_DOWNMIX}, }; #define AV_CH_LAYOUT_T_TAB_LEN 29 uint64_t ChannelLayout_val(value v){ int i; for(i=0;i #include /***** Codec parameters *****/ #define CodecParameters_val(v) (*(struct AVCodecParameters**)Data_custom_val(v)) void value_of_codec_parameters_copy(AVCodecParameters *src, value * pvalue); /***** Packet *****/ #define Packet_val(v) (*(struct AVPacket**)Data_custom_val(v)) value value_of_ffmpeg_packet(AVPacket *packet); /**** Audio codec ID ****/ enum AVCodecID AudioCodecID_val(value v); value Val_AudioCodecID(enum AVCodecID id); /**** Video codec ID ****/ enum AVCodecID VideoCodecID_val(value v); value Val_VideoCodecID(enum AVCodecID id); /**** Subtitle codec ID ****/ enum AVCodecID SubtitleCodecID_val(value v); value Val_SubtitleCodecID(enum AVCodecID id); #endif // _AVCODEC_STUBS_H_ ocaml-ffmpeg-0.4.1/src/OCamlMakefile0000644000175000017500000010445613543206341017123 0ustar smimramsmimram########################################################################### # OCamlMakefile # Copyright (C) 1999- Markus Mottl # # For updates see: # http://www.ocaml.info/home/ocaml_sources.html # ########################################################################### # Modified by damien for .glade.ml compilation # Set these variables to the names of the sources to be processed and # the result variable. Order matters during linkage! ifndef SOURCES SOURCES := foo.ml endif export SOURCES ifndef RES_CLIB_SUF RES_CLIB_SUF := _stubs endif export RES_CLIB_SUF ifndef RESULT RESULT := foo endif export RESULT := $(strip $(RESULT)) export LIB_PACK_NAME ifndef DOC_FILES DOC_FILES := $(filter %.mli, $(SOURCES)) endif export DOC_FILES FIRST_DOC_FILE := $(firstword $(DOC_FILES)) export BCSUFFIX export NCSUFFIX ifndef TOPSUFFIX TOPSUFFIX := .top endif export TOPSUFFIX # Eventually set include- and library-paths, libraries to link, # additional compilation-, link- and ocamlyacc-flags # Path- and library information needs not be written with "-I" and such... # Define THREADS if you need it, otherwise leave it unset (same for # USE_CAMLP4)! export THREADS export VMTHREADS export ANNOTATE export USE_CAMLP4 export INCDIRS export LIBDIRS export EXTLIBDIRS export RESULTDEPS export OCAML_DEFAULT_DIRS export LIBS export CLIBS export CFRAMEWORKS export OCAMLFLAGS export OCAMLNCFLAGS export OCAMLBCFLAGS export OCAMLLDFLAGS export OCAMLNLDFLAGS export OCAMLBLDFLAGS export OCAMLMKLIB_FLAGS ifndef OCAMLCPFLAGS OCAMLCPFLAGS := a endif export OCAMLCPFLAGS ifndef DOC_DIR DOC_DIR := doc endif export DOC_DIR export PPFLAGS export LFLAGS export YFLAGS export IDLFLAGS export OCAMLDOCFLAGS export OCAMLFIND_INSTFLAGS export DVIPSFLAGS export STATIC # Add a list of optional trash files that should be deleted by "make clean" export TRASH ECHO := echo ifdef REALLY_QUIET export REALLY_QUIET ECHO := true LFLAGS := $(LFLAGS) -q YFLAGS := $(YFLAGS) -q endif #################### variables depending on your OCaml-installation SYSTEM := $(shell ocamlc -config 2>/dev/null | grep system | sed 's/system: //') # This may be # - mingw # - win32 # - cygwin # - some other string means Unix # - empty means ocamlc does not support -config ifeq ($(SYSTEM),mingw) MINGW=1 endif ifeq ($(SYSTEM),win32) MSVC=1 endif ifdef MINGW export MINGW WIN32 := 1 # We are compiling with cygwin tools: CFLAGS_WIN32 := -mno-cygwin # The default value 'cc' makes 'ocamlc -cc "cc"' raises the error 'The # NTVDM CPU has encountered an illegal instruction'. CC := gcc # The OCaml C header files use this flag: CFLAGS += -D__MINGW32__ endif ifdef MSVC export MSVC WIN32 := 1 ifndef STATIC CPPFLAGS_WIN32 := -DCAML_DLL endif CFLAGS_WIN32 += -nologo EXT_OBJ := obj EXT_LIB := lib ifeq ($(CC),gcc) # work around GNU Make default value ifdef THREADS CC := cl -MT else CC := cl endif endif ifeq ($(CXX),g++) # work around GNU Make default value CXX := $(CC) endif CFLAG_O := -Fo endif ifdef WIN32 EXT_CXX := cpp EXE := .exe endif ifndef EXT_OBJ EXT_OBJ := o endif ifndef EXT_LIB EXT_LIB := a endif ifndef EXT_CXX EXT_CXX := cc endif ifndef EXE EXE := # empty endif ifndef CFLAG_O CFLAG_O := -o # do not delete this comment (preserves trailing whitespace)! endif export CC export CXX export CFLAGS export CXXFLAGS export LDFLAGS export CPPFLAGS ifndef RPATH_FLAG ifdef ELF_RPATH_FLAG RPATH_FLAG := $(ELF_RPATH_FLAG) else RPATH_FLAG := -R endif endif export RPATH_FLAG ifndef MSVC ifndef PIC_CFLAGS PIC_CFLAGS := -fPIC endif ifndef PIC_CPPFLAGS PIC_CPPFLAGS := -DPIC endif endif export PIC_CFLAGS export PIC_CPPFLAGS BCRESULT := $(addsuffix $(BCSUFFIX), $(RESULT)) NCRESULT := $(addsuffix $(NCSUFFIX), $(RESULT)) TOPRESULT := $(addsuffix $(TOPSUFFIX), $(RESULT)) ifndef OCAMLFIND OCAMLFIND := ocamlfind endif export OCAMLFIND ifndef OCAML OCAML := ocaml endif export OCAML ifndef OCAMLC OCAMLC := ocamlc endif export OCAMLC ifndef OCAMLOPT OCAMLOPT := ocamlopt endif export OCAMLOPT ifndef OCAMLMKTOP OCAMLMKTOP := ocamlmktop endif export OCAMLMKTOP ifndef OCAMLCP OCAMLCP := ocamlcp endif export OCAMLCP ifndef OCAMLDEP OCAMLDEP := ocamldep endif export OCAMLDEP ifndef OCAMLLEX OCAMLLEX := ocamllex endif export OCAMLLEX ifndef OCAMLYACC OCAMLYACC := ocamlyacc endif export OCAMLYACC ifndef OCAMLMKLIB OCAMLMKLIB := ocamlmklib endif export OCAMLMKLIB ifndef OCAML_GLADECC OCAML_GLADECC := lablgladecc2 endif export OCAML_GLADECC ifndef OCAML_GLADECC_FLAGS OCAML_GLADECC_FLAGS := endif export OCAML_GLADECC_FLAGS ifndef CAMELEON_REPORT CAMELEON_REPORT := report endif export CAMELEON_REPORT ifndef CAMELEON_REPORT_FLAGS CAMELEON_REPORT_FLAGS := endif export CAMELEON_REPORT_FLAGS ifndef CAMELEON_ZOGGY CAMELEON_ZOGGY := camlp4o pa_zog.cma pr_o.cmo endif export CAMELEON_ZOGGY ifndef CAMELEON_ZOGGY_FLAGS CAMELEON_ZOGGY_FLAGS := endif export CAMELEON_ZOGGY_FLAGS ifndef OXRIDL OXRIDL := oxridl endif export OXRIDL ifndef CAMLIDL CAMLIDL := camlidl endif export CAMLIDL ifndef CAMLIDLDLL CAMLIDLDLL := camlidldll endif export CAMLIDLDLL ifndef NOIDLHEADER MAYBE_IDL_HEADER := -header endif export NOIDLHEADER export NO_CUSTOM ifndef CAMLP4 CAMLP4 := camlp4 endif export CAMLP4 ifndef REAL_OCAMLFIND ifdef PACKS ifndef CREATE_LIB ifdef THREADS PACKS += threads endif endif empty := space := $(empty) $(empty) comma := , ifdef PREDS PRE_OCAML_FIND_PREDICATES := $(subst $(space),$(comma),$(PREDS)) PRE_OCAML_FIND_PACKAGES := $(subst $(space),$(comma),$(PACKS)) OCAML_FIND_PREDICATES := -predicates $(PRE_OCAML_FIND_PREDICATES) # OCAML_DEP_PREDICATES := -syntax $(PRE_OCAML_FIND_PREDICATES) OCAML_FIND_PACKAGES := $(OCAML_FIND_PREDICATES) -package $(PRE_OCAML_FIND_PACKAGES) OCAML_DEP_PACKAGES := $(OCAML_DEP_PREDICATES) -package $(PRE_OCAML_FIND_PACKAGES) else OCAML_FIND_PACKAGES := -package $(subst $(space),$(comma),$(PACKS)) OCAML_DEP_PACKAGES := endif OCAML_FIND_LINKPKG := -linkpkg REAL_OCAMLFIND := $(OCAMLFIND) endif endif export OCAML_FIND_PACKAGES export OCAML_DEP_PACKAGES export OCAML_FIND_LINKPKG export REAL_OCAMLFIND ifndef OCAMLDOC OCAMLDOC := ocamldoc endif export OCAMLDOC ifndef LATEX LATEX := latex endif export LATEX ifndef DVIPS DVIPS := dvips endif export DVIPS ifndef PS2PDF PS2PDF := ps2pdf endif export PS2PDF ifndef OCAMLMAKEFILE OCAMLMAKEFILE := OCamlMakefile endif export OCAMLMAKEFILE ifndef OCAMLLIBPATH OCAMLLIBPATH := \ $(shell $(OCAMLC) 2>/dev/null -where || echo /usr/lib/ocaml) endif export OCAMLLIBPATH ifndef OCAML_LIB_INSTALL OCAML_LIB_INSTALL := $(OCAMLLIBPATH)/contrib endif export OCAML_LIB_INSTALL ########################################################################### #################### change following sections only if #################### you know what you are doing! # delete target files when a build command fails .PHONY: .DELETE_ON_ERROR .DELETE_ON_ERROR: # for pedants using "--warn-undefined-variables" export MAYBE_IDL export REAL_RESULT export CAMLIDLFLAGS export THREAD_FLAG export RES_CLIB export MAKEDLL export ANNOT_FLAG export C_OXRIDL export SUBPROJS export CFLAGS_WIN32 export CPPFLAGS_WIN32 INCFLAGS := SHELL := /bin/sh MLDEPDIR := ._d BCDIDIR := ._bcdi NCDIDIR := ._ncdi FILTER_EXTNS := %.mli %.ml %.mll %.mly %.idl %.oxridl %.c %.m %.$(EXT_CXX) %.rep %.zog %.glade FILTERED := $(filter $(FILTER_EXTNS), $(SOURCES)) SOURCE_DIRS := $(filter-out ./, $(sort $(dir $(FILTERED)))) FILTERED_REP := $(filter %.rep, $(FILTERED)) DEP_REP := $(FILTERED_REP:%.rep=$(MLDEPDIR)/%.d) AUTO_REP := $(FILTERED_REP:.rep=.ml) FILTERED_ZOG := $(filter %.zog, $(FILTERED)) DEP_ZOG := $(FILTERED_ZOG:%.zog=$(MLDEPDIR)/%.d) AUTO_ZOG := $(FILTERED_ZOG:.zog=.ml) FILTERED_GLADE := $(filter %.glade, $(FILTERED)) DEP_GLADE := $(FILTERED_GLADE:%.glade=$(MLDEPDIR)/%.d) AUTO_GLADE := $(FILTERED_GLADE:.glade=.ml) FILTERED_ML := $(filter %.ml, $(FILTERED)) DEP_ML := $(FILTERED_ML:%.ml=$(MLDEPDIR)/%.d) FILTERED_MLI := $(filter %.mli, $(FILTERED)) DEP_MLI := $(FILTERED_MLI:.mli=.di) FILTERED_MLL := $(filter %.mll, $(FILTERED)) DEP_MLL := $(FILTERED_MLL:%.mll=$(MLDEPDIR)/%.d) AUTO_MLL := $(FILTERED_MLL:.mll=.ml) FILTERED_MLY := $(filter %.mly, $(FILTERED)) DEP_MLY := $(FILTERED_MLY:%.mly=$(MLDEPDIR)/%.d) $(FILTERED_MLY:.mly=.di) AUTO_MLY := $(FILTERED_MLY:.mly=.mli) $(FILTERED_MLY:.mly=.ml) FILTERED_IDL := $(filter %.idl, $(FILTERED)) DEP_IDL := $(FILTERED_IDL:%.idl=$(MLDEPDIR)/%.d) $(FILTERED_IDL:.idl=.di) C_IDL := $(FILTERED_IDL:%.idl=%_stubs.c) ifndef NOIDLHEADER C_IDL += $(FILTERED_IDL:.idl=.h) endif OBJ_C_IDL := $(FILTERED_IDL:%.idl=%_stubs.$(EXT_OBJ)) AUTO_IDL := $(FILTERED_IDL:.idl=.mli) $(FILTERED_IDL:.idl=.ml) $(C_IDL) FILTERED_OXRIDL := $(filter %.oxridl, $(FILTERED)) DEP_OXRIDL := $(FILTERED_OXRIDL:%.oxridl=$(MLDEPDIR)/%.d) $(FILTERED_OXRIDL:.oxridl=.di) AUTO_OXRIDL := $(FILTERED_OXRIDL:.oxridl=.mli) $(FILTERED_OXRIDL:.oxridl=.ml) $(C_OXRIDL) FILTERED_C_CXX := $(filter %.c %.m %.$(EXT_CXX), $(FILTERED)) OBJ_C_CXX := $(FILTERED_C_CXX:.c=.$(EXT_OBJ)) OBJ_C_CXX := $(OBJ_C_CXX:.m=.$(EXT_OBJ)) OBJ_C_CXX := $(OBJ_C_CXX:.$(EXT_CXX)=.$(EXT_OBJ)) PRE_TARGETS += $(AUTO_MLL) $(AUTO_MLY) $(AUTO_IDL) $(AUTO_OXRIDL) $(AUTO_ZOG) $(AUTO_REP) $(AUTO_GLADE) ALL_DEPS := $(DEP_ML) $(DEP_MLI) $(DEP_MLL) $(DEP_MLY) $(DEP_IDL) $(DEP_OXRIDL) $(DEP_ZOG) $(DEP_REP) $(DEP_GLADE) MLDEPS := $(filter %.d, $(ALL_DEPS)) MLIDEPS := $(filter %.di, $(ALL_DEPS)) BCDEPIS := $(MLIDEPS:%.di=$(BCDIDIR)/%.di) NCDEPIS := $(MLIDEPS:%.di=$(NCDIDIR)/%.di) ALLML := $(filter %.mli %.ml %.mll %.mly %.idl %.oxridl %.rep %.zog %.glade, $(FILTERED)) IMPLO_INTF := $(ALLML:%.mli=%.mli.__) IMPLO_INTF := $(foreach file, $(IMPLO_INTF), \ $(basename $(file)).cmi $(basename $(file)).cmo) IMPLO_INTF := $(filter-out %.mli.cmo, $(IMPLO_INTF)) IMPLO_INTF := $(IMPLO_INTF:%.mli.cmi=%.cmi) IMPLX_INTF := $(IMPLO_INTF:.cmo=.cmx) INTF := $(filter %.cmi, $(IMPLO_INTF)) IMPL_CMO := $(filter %.cmo, $(IMPLO_INTF)) IMPL_CMX := $(IMPL_CMO:.cmo=.cmx) IMPL_ASM := $(IMPL_CMO:.cmo=.asm) IMPL_S := $(IMPL_CMO:.cmo=.s) OBJ_LINK := $(OBJ_C_IDL) $(OBJ_C_CXX) OBJ_FILES := $(IMPL_CMO:.cmo=.$(EXT_OBJ)) $(OBJ_LINK) EXECS := $(addsuffix $(EXE), \ $(sort $(TOPRESULT) $(BCRESULT) $(NCRESULT))) ifdef WIN32 EXECS += $(BCRESULT).dll $(NCRESULT).dll endif CLIB_BASE := $(RESULT)$(RES_CLIB_SUF) ifneq ($(strip $(OBJ_LINK)),) RES_CLIB := lib$(CLIB_BASE).$(EXT_LIB) endif ifdef WIN32 DLLSONAME := dll$(CLIB_BASE).dll else DLLSONAME := dll$(CLIB_BASE).so endif NONEXECS := $(INTF) $(IMPL_CMO) $(IMPL_CMX) $(IMPL_ASM) $(IMPL_S) \ $(OBJ_FILES) $(PRE_TARGETS) $(BCRESULT).cma $(NCRESULT).cmxa \ $(NCRESULT).$(EXT_LIB) $(BCRESULT).cmi $(BCRESULT).cmo \ $(NCRESULT).cmi $(NCRESULT).cmx $(NCRESULT).$(EXT_OBJ) \ $(RES_CLIB) $(IMPL_CMO:.cmo=.annot) \ $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(LIB_PACK_NAME).cmx \ $(LIB_PACK_NAME).$(EXT_OBJ) ifndef STATIC NONEXECS += $(DLLSONAME) endif ifndef LIBINSTALL_FILES LIBINSTALL_FILES := $(RESULT).mli $(RESULT).cmi $(RESULT).cma \ $(RESULT).cmxa $(RESULT).$(EXT_LIB) $(RES_CLIB) ifndef STATIC ifneq ($(strip $(OBJ_LINK)),) LIBINSTALL_FILES += $(DLLSONAME) endif endif endif export LIBINSTALL_FILES ifdef WIN32 # some extra stuff is created while linking DLLs NONEXECS += $(BCRESULT).$(EXT_LIB) $(BCRESULT).exp $(NCRESULT).exp $(CLIB_BASE).exp $(CLIB_BASE).lib endif TARGETS := $(EXECS) $(NONEXECS) # If there are IDL-files ifneq ($(strip $(FILTERED_IDL)),) MAYBE_IDL := -cclib -lcamlidl endif ifdef USE_CAMLP4 CAMLP4PATH := \ $(shell $(CAMLP4) -where 2>/dev/null || echo /usr/lib/camlp4) INCFLAGS := -I $(CAMLP4PATH) CINCFLAGS := -I$(CAMLP4PATH) endif INCFLAGS := $(INCFLAGS) $(INCDIRS:%=-I %) $(SOURCE_DIRS:%=-I %) $(OCAML_DEFAULT_DIRS:%=-I %) CINCFLAGS += $(SOURCE_DIRS:%=-I%) $(INCDIRS:%=-I%) $(OCAML_DEFAULT_DIRS:%=-I%) ifndef MSVC CLIBFLAGS += $(SOURCE_DIRS:%=-L%) $(LIBDIRS:%=-L%) \ $(EXTLIBDIRS:%=-L%) $(OCAML_DEFAULT_DIRS:%=-L%) ifeq ($(ELF_RPATH), yes) CLIBFLAGS += $(EXTLIBDIRS:%=-Wl,$(RPATH_FLAG)%) endif endif ifndef PROFILING INTF_OCAMLC := $(OCAMLC) else ifndef THREADS INTF_OCAMLC := $(OCAMLCP) -p $(OCAMLCPFLAGS) else # OCaml does not support profiling byte code # with threads (yet), therefore we force an error. ifndef REAL_OCAMLC $(error Profiling of multithreaded byte code not yet supported by OCaml) endif INTF_OCAMLC := $(OCAMLC) endif endif ifndef MSVC COMMON_LDFLAGS := $(LDFLAGS:%=-ccopt %) $(SOURCE_DIRS:%=-ccopt -L%) \ $(LIBDIRS:%=-ccopt -L%) $(EXTLIBDIRS:%=-ccopt -L%) \ $(EXTLIBDIRS:%=-ccopt -Wl $(OCAML_DEFAULT_DIRS:%=-ccopt -L%)) ifeq ($(ELF_RPATH),yes) COMMON_LDFLAGS += $(EXTLIBDIRS:%=-ccopt -Wl,$(RPATH_FLAG)%) endif else COMMON_LDFLAGS := -ccopt "/link -NODEFAULTLIB:LIBC $(LDFLAGS:%=%) $(SOURCE_DIRS:%=-LIBPATH:%) \ $(LIBDIRS:%=-LIBPATH:%) $(EXTLIBDIRS:%=-LIBPATH:%) \ $(OCAML_DEFAULT_DIRS:%=-LIBPATH:%) " endif CLIBS_OPTS := $(CLIBS:%=-cclib -l%) $(CFRAMEWORKS:%=-cclib '-framework %') ifdef MSVC ifndef STATIC # MSVC libraries do not have 'lib' prefix CLIBS_OPTS := $(CLIBS:%=-cclib %.lib) endif endif ifneq ($(strip $(OBJ_LINK)),) ifdef CREATE_LIB OBJS_LIBS := -cclib -l$(CLIB_BASE) $(CLIBS_OPTS) $(MAYBE_IDL) else OBJS_LIBS := $(OBJ_LINK) $(CLIBS_OPTS) $(MAYBE_IDL) endif else OBJS_LIBS := $(CLIBS_OPTS) $(MAYBE_IDL) endif ifdef LIB_PACK_NAME FOR_PACK_NAME := $(shell echo $(LIB_PACK_NAME) | awk '{print toupper(substr($$0,1,1))substr($$0,2)}') endif # If we have to make byte-code ifndef REAL_OCAMLC BYTE_OCAML := y # EXTRADEPS is added dependencies we have to insert for all # executable files we generate. Ideally it should be all of the # libraries we use, but it's hard to find the ones that get searched on # the path since I don't know the paths built into the compiler, so # just include the ones with slashes in their names. EXTRADEPS := $(addsuffix .cma,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i)))) ifndef LIB_PACK_NAME SPECIAL_OCAMLFLAGS := $(OCAMLBCFLAGS) else SPECIAL_OCAMLFLAGS := -for-pack $(FOR_PACK_NAME) $(OCAMLBCFLAGS) endif REAL_OCAMLC := $(INTF_OCAMLC) REAL_IMPL := $(IMPL_CMO) REAL_IMPL_INTF := $(IMPLO_INTF) IMPL_SUF := .cmo DEPFLAGS := MAKE_DEPS := $(MLDEPS) $(BCDEPIS) ifdef CREATE_LIB override CFLAGS := $(PIC_CFLAGS) $(CFLAGS) override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS) ifndef STATIC ifneq ($(strip $(OBJ_LINK)),) MAKEDLL := $(DLLSONAME) ALL_LDFLAGS := -dllib $(DLLSONAME) endif endif endif ifndef NO_CUSTOM ifneq "$(strip $(OBJ_LINK) $(THREADS) $(MAYBE_IDL) $(CLIBS) $(CFRAMEWORKS))" "" ALL_LDFLAGS += -custom endif endif ALL_LDFLAGS += $(INCFLAGS) $(OCAMLLDFLAGS) $(OCAMLBLDFLAGS) \ $(COMMON_LDFLAGS) $(LIBS:%=%.cma) CAMLIDLDLLFLAGS := ifdef THREADS ifdef VMTHREADS THREAD_FLAG := -vmthread else THREAD_FLAG := -thread endif ALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS) ifndef CREATE_LIB ifndef REAL_OCAMLFIND ALL_LDFLAGS := unix.cma threads.cma $(ALL_LDFLAGS) endif endif endif # we have to make native-code else EXTRADEPS := $(addsuffix .cmxa,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i)))) ifndef PROFILING SPECIAL_OCAMLFLAGS := $(OCAMLNCFLAGS) PLDFLAGS := else SPECIAL_OCAMLFLAGS := -p $(OCAMLNCFLAGS) PLDFLAGS := -p endif ifndef LIB_PACK_NAME SPECIAL_OCAMLFLAGS := $(OCAMLNCFLAGS) else SPECIAL_OCAMLFLAGS := -for-pack $(FOR_PACK_NAME) $(OCAMLNCFLAGS) endif REAL_IMPL := $(IMPL_CMX) REAL_IMPL_INTF := $(IMPLX_INTF) IMPL_SUF := .cmx override CPPFLAGS := -DNATIVE_CODE $(CPPFLAGS) DEPFLAGS := -native MAKE_DEPS := $(MLDEPS) $(NCDEPIS) ALL_LDFLAGS := $(PLDFLAGS) $(INCFLAGS) $(OCAMLLDFLAGS) \ $(OCAMLNLDFLAGS) $(COMMON_LDFLAGS) CAMLIDLDLLFLAGS := -opt ifndef CREATE_LIB ALL_LDFLAGS += $(LIBS:%=%.cmxa) else override CFLAGS := $(PIC_CFLAGS) $(CFLAGS) override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS) endif ifdef THREADS THREAD_FLAG := -thread ALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS) ifndef CREATE_LIB ifndef REAL_OCAMLFIND ALL_LDFLAGS := unix.cmxa threads.cmxa $(ALL_LDFLAGS) endif endif endif endif export MAKE_DEPS ifdef ANNOTATE ANNOT_FLAG := -dtypes else endif ALL_OCAMLCFLAGS := $(THREAD_FLAG) $(ANNOT_FLAG) $(OCAMLFLAGS) \ $(INCFLAGS) $(SPECIAL_OCAMLFLAGS) ifdef make_deps -include $(MAKE_DEPS) PRE_TARGETS := endif ########################################################################### # USER RULES # Call "OCamlMakefile QUIET=" to get rid of all of the @'s. QUIET=@ # generates byte-code (default) byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes bc: byte-code byte-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(BCRESULT)" make_deps=yes bcnl: byte-code-nolink top: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(TOPRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes # generates native-code native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes nc: native-code native-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes ncnl: native-code-nolink # generates byte-code libraries byte-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" \ CREATE_LIB=yes \ make_deps=yes bcl: byte-code-library # generates native-code libraries native-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).cmxa \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ CREATE_LIB=yes \ make_deps=yes ncl: native-code-library ifdef WIN32 # generates byte-code dll byte-code-dll: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).dll \ REAL_RESULT="$(BCRESULT)" \ make_deps=yes bcd: byte-code-dll # generates native-code dll native-code-dll: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).dll \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes ncd: native-code-dll endif # generates byte-code with debugging information debug-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dc: debug-code debug-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dcnl: debug-code-nolink # generates byte-code with debugging information (native code) debug-native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \ REAL_RESULT="$(NCRESULT)" make_deps=yes \ REAL_OCAMLC="$(OCAMLOPT)" \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dnc: debug-native-code debug-native-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(NCRESULT)" make_deps=yes \ REAL_OCAMLC="$(OCAMLOPT)" \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dncnl: debug-native-code-nolink # generates byte-code libraries with debugging information debug-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ CREATE_LIB=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dcl: debug-code-library # generates byte-code libraries with debugging information (native code) debug-native-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).cmxa \ REAL_RESULT="$(NCRESULT)" make_deps=yes \ REAL_OCAMLC="$(OCAMLOPT)" \ CREATE_LIB=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dncl: debug-native-code-library # generates byte-code for profiling profiling-byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" PROFILING="y" \ make_deps=yes pbc: profiling-byte-code # generates native-code profiling-native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ PROFILING="y" \ make_deps=yes pnc: profiling-native-code # generates byte-code libraries profiling-byte-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" PROFILING="y" \ CREATE_LIB=yes \ make_deps=yes pbcl: profiling-byte-code-library # generates native-code libraries profiling-native-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).cmxa \ REAL_RESULT="$(NCRESULT)" PROFILING="y" \ REAL_OCAMLC="$(OCAMLOPT)" \ CREATE_LIB=yes \ make_deps=yes pncl: profiling-native-code-library # packs byte-code objects pack-byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT).cmo \ REAL_RESULT="$(BCRESULT)" \ PACK_LIB=yes make_deps=yes pabc: pack-byte-code # packs native-code objects pack-native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(NCRESULT).cmx $(NCRESULT).$(EXT_OBJ) \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ PACK_LIB=yes make_deps=yes panc: pack-native-code # generates HTML-documentation htdoc: $(DOC_DIR)/$(RESULT)/html/index.html # generates Latex-documentation ladoc: $(DOC_DIR)/$(RESULT)/latex/doc.tex # generates PostScript-documentation psdoc: $(DOC_DIR)/$(RESULT)/latex/doc.ps # generates PDF-documentation pdfdoc: $(DOC_DIR)/$(RESULT)/latex/doc.pdf # generates all supported forms of documentation doc: htdoc ladoc psdoc pdfdoc ########################################################################### # LOW LEVEL RULES $(REAL_RESULT): $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) \ $(OCAML_FIND_PACKAGES) $(OCAML_FIND_LINKPKG) \ $(OBJS_LIBS) $(ALL_LDFLAGS) -o $@$(EXE) \ $(REAL_IMPL) nolink: $(REAL_IMPL_INTF) $(OBJ_LINK) ifdef WIN32 $(REAL_RESULT).dll: $(REAL_IMPL_INTF) $(OBJ_LINK) $(CAMLIDLDLL) $(CAMLIDLDLLFLAGS) $(OBJ_LINK) $(CLIBS) \ -o $@ $(REAL_IMPL) endif %$(TOPSUFFIX): $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(REAL_OCAMLFIND) $(OCAMLMKTOP) \ $(OCAML_FIND_PACKAGES) $(OCAML_FIND_LINKPKG) \ $(OBJS_LIBS) $(ALL_LDFLAGS) -o $@$(EXE) \ $(REAL_IMPL) .SUFFIXES: .mli .ml .cmi .cmo .cmx .cma .cmxa .$(EXT_OBJ) \ .mly .di .d .$(EXT_LIB) .idl %.oxridl .c .m .$(EXT_CXX) .h .so \ .rep .zog .glade ifndef STATIC ifdef MINGW # From OCaml 3.11.0, ocamlmklib is available on windows OCAMLMLIB_EXISTS = $(shell which $(OCAMLMKLIB)) ifeq ($(strip $(OCAMLMLIB_EXISTS)),) $(DLLSONAME): $(OBJ_LINK) $(CC) $(CFLAGS) $(CFLAGS_WIN32) $(OBJ_LINK) -shared -o $@ \ $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/lib%.a))) \ '$(OCAMLLIBPATH)/ocamlrun.a' \ -Wl,--whole-archive \ -Wl,--export-all-symbols \ -Wl,--allow-multiple-definition \ -Wl,--enable-auto-import else $(DLLSONAME): $(OBJ_LINK) $(OCAMLMKLIB) $(INCFLAGS) $(CLIBFLAGS) \ -o $(CLIB_BASE) $(OBJ_LINK) $(CLIBS:%=-l%) \ $(CFRAMEWORKS:%=-framework %) \ $(OCAMLMKLIB_FLAGS) endif else ifdef MSVC $(DLLSONAME): $(OBJ_LINK) link /NOLOGO /DLL /OUT:$@ $(OBJ_LINK) \ $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/%.lib))) \ '$(OCAMLLIBPATH)/ocamlrun.lib' else $(DLLSONAME): $(OBJ_LINK) $(OCAMLMKLIB) $(INCFLAGS) $(CLIBFLAGS) \ -o $(CLIB_BASE) $(OBJ_LINK) $(CLIBS:%=-l%) $(CFRAMEWORKS:%=-framework %) \ $(OCAMLMKLIB_FLAGS) endif endif endif ifndef LIB_PACK_NAME $(RESULT).cma: $(REAL_IMPL_INTF) $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(OBJS_LIBS) $(ALL_LDFLAGS) -o $@ $(REAL_IMPL) $(RESULT).cmxa $(RESULT).$(EXT_LIB): $(REAL_IMPL_INTF) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(OCAMLOPT) -a $(OBJS_LIBS) $(ALL_LDFLAGS) -o $@ $(REAL_IMPL) else # Packing a bytecode library LIB_PACK_NAME_MLI = $(wildcard $(LIB_PACK_NAME).mli) ifeq ($(LIB_PACK_NAME_MLI),) LIB_PACK_NAME_CMI = $(LIB_PACK_NAME).cmi else # $(LIB_PACK_NAME).mli exists, it likely depends on other compiled interfaces LIB_PACK_NAME_CMI = $(LIB_PACK_NAME).cmi: $(REAL_IMPL_INTF) endif ifdef BYTE_OCAML $(LIB_PACK_NAME_CMI) $(LIB_PACK_NAME).cmo: $(REAL_IMPL_INTF) $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(ANNOT_FLAG) -pack -o $(LIB_PACK_NAME).cmo $(OCAMLLDFLAGS) $(REAL_IMPL) # Packing into a unit which can be transformed into a library # Remember the .ml's must have been compiled with -for-pack $(LIB_PACK_NAME) else $(LIB_PACK_NAME_CMI) $(LIB_PACK_NAME).cmx: $(REAL_IMPL_INTF) $(REAL_OCAMLFIND) $(OCAMLOPT) $(ANNOT_FLAG) -pack -o $(LIB_PACK_NAME).cmx $(OCAMLLDFLAGS) $(REAL_IMPL) endif $(RESULT).cma: $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(OBJS_LIBS) $(ALL_LDFLAGS) -o $@ $(LIB_PACK_NAME).cmo $(RESULT).cmxa $(RESULT).$(EXT_LIB): $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmx $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(OCAMLOPT) -a $(OBJS_LIBS) $(filter-out -custom, $(ALL_LDFLAGS)) -o $@ $(LIB_PACK_NAME).cmx endif $(RES_CLIB): $(OBJ_LINK) ifndef MSVC ifneq ($(strip $(OBJ_LINK)),) $(AR) rcs $@ $(OBJ_LINK) endif else ifneq ($(strip $(OBJ_LINK)),) lib -nologo -debugtype:cv -out:$(RES_CLIB) $(OBJ_LINK) endif endif %.cmi: %.mli $(EXTRADEPS) $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ $(ECHO) $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ else \ $(ECHO) $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp \"$$pp $(PPFLAGS)\" $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp "$$pp $(PPFLAGS)" $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ fi %.cmi: %$(IMPL_SUF); %$(IMPL_SUF) %.$(EXT_OBJ): %.ml $(EXTRADEPS) $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ $(ECHO) $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(ALL_OCAMLCFLAGS) $<; \ $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(ALL_OCAMLCFLAGS) $<; \ else \ $(ECHO) $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp \"$$pp $(PPFLAGS)\" $(ALL_OCAMLCFLAGS) $<; \ $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp "$$pp $(PPFLAGS)" $(ALL_OCAMLCFLAGS) $<; \ fi .PRECIOUS: %.ml %.ml: %.mll $(OCAMLLEX) $(LFLAGS) $< .PRECIOUS: %.ml %.mli %.ml %.mli: %.mly $(OCAMLYACC) $(YFLAGS) $< $(QUIET)pp=`sed -n -e 's/.*(\*pp \([^*]*\) \*).*/\1/p;q' $<`; \ if [ ! -z "$$pp" ]; then \ mv $*.ml $*.ml.temporary; \ echo "(*pp $$pp $(PPFLAGS)*)" > $*.ml; \ cat $*.ml.temporary >> $*.ml; \ rm $*.ml.temporary; \ mv $*.mli $*.mli.temporary; \ echo "(*pp $$pp $(PPFLAGS)*)" > $*.mli; \ cat $*.mli.temporary >> $*.mli; \ rm $*.mli.temporary; \ fi .PRECIOUS: %.ml %.ml: %.rep $(CAMELEON_REPORT) $(CAMELEON_REPORT_FLAGS) -gen $< .PRECIOUS: %.ml %.ml: %.zog $(CAMELEON_ZOGGY) $(CAMELEON_ZOGGY_FLAGS) -impl $< > $@ .PRECIOUS: %.ml %.ml: %.glade $(OCAML_GLADECC) $(OCAML_GLADECC_FLAGS) $< > $@ .PRECIOUS: %.ml %.mli %.ml %.mli: %.oxridl $(OXRIDL) $< .PRECIOUS: %.ml %.mli %_stubs.c %.h %.ml %.mli %_stubs.c %.h: %.idl $(CAMLIDL) $(MAYBE_IDL_HEADER) $(IDLFLAGS) \ $(CAMLIDLFLAGS) $< $(QUIET)if [ $(NOIDLHEADER) ]; then touch $*.h; fi %.$(EXT_OBJ): %.c $(OCAMLC) -c -cc "$(CC)" -ccopt "$(CFLAGS) \ $(CPPFLAGS) $(CPPFLAGS_WIN32) \ $(CFLAGS_WIN32) $(CINCFLAGS) $(CFLAG_O)$@ " $< %.$(EXT_OBJ): %.m $(CC) -c $(CFLAGS) $(CINCFLAGS) $(CPPFLAGS) \ -I'$(OCAMLLIBPATH)' \ $< $(CFLAG_O)$@ %.$(EXT_OBJ): %.$(EXT_CXX) $(CXX) -c $(CXXFLAGS) $(CINCFLAGS) $(CPPFLAGS) \ -I'$(OCAMLLIBPATH)' \ $< $(CFLAG_O)$@ $(MLDEPDIR)/%.d: %.ml $(QUIET)if [ ! -d $(@D) ]; then mkdir -p $(@D); fi $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ $(INCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ $(INCFLAGS) $< > $@; \ else \ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ -pp \"$$pp $(PPFLAGS)\" $(INCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ -pp "$$pp $(PPFLAGS)" $(INCFLAGS) $< > $@; \ fi $(BCDIDIR)/%.di $(NCDIDIR)/%.di: %.mli $(QUIET)if [ ! -d $(@D) ]; then mkdir -p $(@D); fi $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(INCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(INCFLAGS) $< > $@; \ else \ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \ -pp \"$$pp $(PPFLAGS)\" $(INCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \ -pp "$$pp $(PPFLAGS)" $(INCFLAGS) $< > $@; \ fi $(DOC_DIR)/$(RESULT)/html: mkdir -p $@ $(DOC_DIR)/$(RESULT)/html/index.html: $(DOC_DIR)/$(RESULT)/html $(DOC_FILES) rm -rf $= 4.05.0 - FFmpeg >= 3.0* - findlib >= 0.8.1 (*) The Swscale module can however be used with FFmpeg 2.0. Compilation: ============ $ make all This should build both the native and the byte-code version of the extension library. Installation: ============= $ make install This should install the library file (using ocamlfind) in the appropriate place. Documentation: ============= The [API documentation is available here](https://www.liquidsoap.info/ocaml-ffmpeg/docs/api/index.html). Examples: ============= The [audio_decoding](https://github.com/savonet/ocaml-ffmpeg/blob/master/examples/audio_decoding/audio_decoding.ml) example shows how to read frames from an audio file and convert them into bytes. The [audio_device](https://github.com/savonet/ocaml-ffmpeg/blob/master/examples/audio_device/audio_device.ml) example shows how to read 500 audio frames from an input audio device or an URL and write them into an output audio device or a file. The [decode_audio](https://github.com/savonet/ocaml-ffmpeg/blob/master/examples/decode_audio/decode_audio.ml) example shows how to parse packets from a mapped file, decode them and write the resulting frames into a file. The [demuxing_decoding](https://github.com/savonet/ocaml-ffmpeg/blob/master/examples/demuxing_decoding/demuxing_decoding.ml) example shows how to demuxing and decoding audio, video and subtitle frames from a file, converts them into bytes and write them in raw files. The [encode_audio](https://github.com/savonet/ocaml-ffmpeg/blob/master/examples/encode_audio/encode_audio.ml) example shows how to convert a float array into stereo frames and encode them into packets. The [encode_video](https://github.com/savonet/ocaml-ffmpeg/blob/master/examples/encode_video/encode_video.ml) example shows how to create video frames and write them encoded into a file. The [encoding](https://github.com/savonet/ocaml-ffmpeg/blob/master/examples/encoding/encoding.ml) example shows how to create a multimedia file with audio and video streams. The [player](https://github.com/savonet/ocaml-ffmpeg/blob/master/examples/player/player.ml) example shows how to read a multimedia file and write audio and video frames to output devices. The [remuxing](https://github.com/savonet/ocaml-ffmpeg/blob/master/examples/remuxing/remuxing.ml) example shows how to remuxing multimedia file packets without decoding them. The [transcode_aac](https://github.com/savonet/ocaml-ffmpeg/blob/master/examples/transcode_aac/transcode_aac.ml) example shows how to transcode an audio file into an AAC audio file. The [transcoding](https://github.com/savonet/ocaml-ffmpeg/blob/master/examples/transcoding/transcoding.ml) example shows how to transcode audio streams into the AAC codec, video streams into the H264 codec and write them to an output file. Author: ======= This author of this software may be contacted by electronic mail at the following address: savonet-users@lists.sourceforge.net. ocaml-ffmpeg-0.4.1/bootstrap0000755000175000017500000000062213543206341015711 0ustar smimramsmimram#!/bin/sh -e if [ -d m4 ]; then OPTIONS="-I m4" aclocal -I m4 fi autoreconf -f -i $OPTIONS $1 # autoconf maintainers have not yet implemented # a function to install missing files from autoconf # itself, so we need to fake a call to automake here.. automake -a -c -f 2>/dev/null || true if [ -d examples ]; then if [ -f examples/configure.ac ]; then cd examples autoreconf -f -i fi fi ocaml-ffmpeg-0.4.1/config.sub0000755000175000017500000010645013543206341015737 0ustar smimramsmimram#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2018 Free Software Foundation, Inc. timestamp='2018-02-22' # 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 3 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, 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 Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # 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: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # 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 or ALIAS Canonicalize a configuration name. Options: -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 1992-2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | cloudabi*-eabi* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) 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*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'` ;; -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 \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | e2k | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia16 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | 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 \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pru \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | wasm32 \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | 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-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pru-* \ | pyramid-* \ | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | wasm32-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-pc 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 ;; asmjs) basic_machine=asmjs-unknown ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2*) basic_machine=m68k-bull os=-sysv3 ;; e500v[12]) basic_machine=powerpc-unknown os=$os"spe" ;; e500v[12]-*) basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=$os"spe" ;; 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 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; 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 ;; 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 ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-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 ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; nsv-tandem) basic_machine=nsv-tandem ;; nsx-tandem) basic_machine=nsx-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle) 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) 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 | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) 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 ;; sh5el) basic_machine=sh5le-unknown ;; simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-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 ;; x64) basic_machine=x86_64-pc ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; 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 ;; 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 ;; 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 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # es1800 is here to avoid being matched by es* (a different OS) -es1800*) os=-ose ;; # Now 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* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -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* | -glidix* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \ | -midnightbsd*) # 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 | -xray | -os68k* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* \ | -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 ;; -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 ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -pikeos*) # Until real need of OS specific support for # particular features comes up, bare metal # configurations are quite functional. case $basic_machine in arm*) os=-eabi ;; *) os=-elf ;; esac ;; -nacl*) ;; -ios) ;; -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 ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; 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 ;; pru-*) os=-elf ;; *-be) os=-beos ;; *-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 ;; *-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-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ocaml-ffmpeg-0.4.1/install-sh0000755000175000017500000003601013543206341015752 0ustar smimramsmimram#!/bin/sh # install - install a program, script, or datafile scriptversion=2018-03-11.20; # 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. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # 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_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 is_target_a_directory=possibly 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 *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi 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 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac 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 if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 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 problematic for 'test' and other utilities. 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 # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac 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. ;; *) # Note that $RANDOM variable is not portable (e.g. dash); Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p' feature. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/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-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 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 oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && 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=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_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` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && 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 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ocaml-ffmpeg-0.4.1/configure.ac0000644000175000017500000000411613543206341016236 0ustar smimramsmimramAC_INIT([ocaml-ffmpeg],[0.4.1],[savonet-users@lists.sourceforge.net]) VERSION=$PACKAGE_VERSION requires="bigarray threads" AC_MSG_RESULT([configuring $PACKAGE_STRING]) AC_BASE_CHECKS() AC_PATH_PROG(SYSTEM_OCAMLC,"ocamlc") AC_SUBST(SYSTEM_OCAMLC) PKG_PROG_PKG_CONFIG() PKG_CONFIG_CHECK_MODULE([libavutil]) PKG_CONFIG_CHECK_MODULE([libswscale]) PKG_CONFIG_CHECK_MODULE([libavformat]) PKG_CONFIG_CHECK_MODULE([libavcodec]) #PKG_CONFIG_CHECK_MODULE([libswresample]) #PKG_CONFIG_CHECK_MODULE([libavdevice]) # Do we need more? GEN_CODE_INCLUDE=`$PKG_CONFIG --variable=includedir libavcodec` AC_SUBST(GEN_CODE_INCLUDE) AC_CHECK_DECL([avcodec_send_packet],[HAS_AV="yes"],[HAS_AV=""],[#include "libavcodec/avcodec.h"]) AC_SUBST(HAS_AV) AC_CHECK_HEADERS([libswresample/swresample.h],[HAS_SWRESAMPLE="yes"],[HAS_SWRESAMPLE=""]) if test "x$HAS_SWRESAMPLE" = "xyes" ; then LIBS="$LIBS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-l libswresample`" LDFLAGS="$LDFLAGS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-other libswresample`" LIBDIRS="$LIBDIRS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-L libswresample`" fi AC_SUBST(HAS_SWRESAMPLE) AC_CHECK_HEADERS([libavdevice/avdevice.h],[HAS_AVDEVICE="yes"],[HAS_AVDEVICE=""]) if test "x$HAS_AVDEVICE" = "xyes" ; then LIBS="$LIBS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-l libavdevice`" LDFLAGS="$LDFLAGS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-other libavdevice`" LIBDIRS="$LIBDIRS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-L libavdevice`" fi AC_SUBST(HAS_AVDEVICE) AC_CHECK_HEADERS([libavutil/channel_layout.h],[HAS_CHANNEL_LAYOUT="yes"],[HAS_CHANNEL_LAYOUT=""]) if test "x$HAS_CHANNEL_LAYOUT" = "xyes" ; then CFLAGS="$CFLAGS -DHAS_CHANNEL_LAYOUT" fi AC_CHECK_HEADERS([libavutil/frame.h],[HAS_FRAME="yes"],[HAS_FRAME=""]) if test "x$HAS_FRAME" = "xyes" ; then CFLAGS="$CFLAGS -DHAS_FRAME" fi # substitutions to perform AC_SUBST(VERSION) AC_SUBST(INC) AC_SUBST(requires) AC_SUBST(LIBDIRS) # Finally create the Makefile and samples AC_CONFIG_FILES([Makefile],[chmod a-w Makefile]) AC_CONFIG_FILES([src/META]) AC_CONFIG_FILES([src/Makefile]) AC_OUTPUT ocaml-ffmpeg-0.4.1/configure0000755000175000017500000066605213543206341015674 0ustar smimramsmimram#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for ocaml-ffmpeg 0.4.1. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} 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 test -x / || 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 : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: savonet-users@lists.sourceforge.net 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_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_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; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # 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 -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' 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 as_test_x='test -x' as_executable_p=as_fn_executable_p # 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'" as_awk_strverscmp=' # Use only awk features that work with 7th edition Unix awk (1978). # My, what an old awk you have, Mr. Solaris! END { while (length(v1) && length(v2)) { # Set d1 to be the next thing to compare from v1, and likewise for d2. # Normally this is a single character, but if v1 and v2 contain digits, # compare them as integers and fractions as strverscmp does. if (v1 ~ /^[0-9]/ && v2 ~ /^[0-9]/) { # Split v1 and v2 into their leading digit string components d1 and d2, # and advance v1 and v2 past the leading digit strings. for (len1 = 1; substr(v1, len1 + 1) ~ /^[0-9]/; len1++) continue for (len2 = 1; substr(v2, len2 + 1) ~ /^[0-9]/; len2++) continue d1 = substr(v1, 1, len1); v1 = substr(v1, len1 + 1) d2 = substr(v2, 1, len2); v2 = substr(v2, len2 + 1) if (d1 ~ /^0/) { if (d2 ~ /^0/) { # Compare two fractions. while (d1 ~ /^0/ && d2 ~ /^0/) { d1 = substr(d1, 2); len1-- d2 = substr(d2, 2); len2-- } if (len1 != len2 && ! (len1 && len2 && substr(d1, 1, 1) == substr(d2, 1, 1))) { # The two components differ in length, and the common prefix # contains only leading zeros. Consider the longer to be less. d1 = -len1 d2 = -len2 } else { # Otherwise, compare as strings. d1 = "x" d1 d2 = "x" d2 } } else { # A fraction is less than an integer. exit 1 } } else { if (d2 ~ /^0/) { # An integer is greater than a fraction. exit 2 } else { # Compare two integers. d1 += 0 d2 += 0 } } } else { # The normal case, without worrying about digits. d1 = substr(v1, 1, 1); v1 = substr(v1, 2) d2 = substr(v2, 1, 1); v2 = substr(v2, 2) } if (d1 < d2) exit 1 if (d1 > d2) exit 2 } # Beware Solaris /usr/xgp4/bin/awk (at least through Solaris 10), # which mishandles some comparisons of empty strings to integers. if (length(v2)) exit 1 if (length(v1)) exit 2 } ' 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='ocaml-ffmpeg' PACKAGE_TARNAME='ocaml-ffmpeg' PACKAGE_VERSION='0.4.1' PACKAGE_STRING='ocaml-ffmpeg 0.4.1' PACKAGE_BUGREPORT='savonet-users@lists.sourceforge.net' 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='LTLIBOBJS LIBOBJS LIBDIRS requires INC VERSION HAS_AVDEVICE HAS_SWRESAMPLE EGREP GREP CPP HAS_AV GEN_CODE_INCLUDE PKG_CONFIG SYSTEM_OCAMLC PIC_FLAGS OCAMLFLAGS CAMLLIBPATH OCAMLNCFLAGS OCAML_STDLIB OCAMLFIND CAMLP4RF CAMLP4R CAMLP4PROF CAMLP4ORF CAMLP4OOF CAMLP4OF CAMLP4O CAMLP4BOOT CAMLP4 OCAMLYACC OCAMLLEXDOTOPT OCAMLLEX CAMLIDL OCAMLBUILD OCAMLDOCOPT OCAMLDOC OCAMLMKLIB OCAMLMKTOP OCAMLDEPOPT OCAMLDEP OCAML OCAMLOPTDOTOPT OCAMLCDOTOPT OCAML_DYNLINK OCAMLBEST OCAMLOPT OCAMLLIB OCAMLVERSION OCAML_HAS_FIRST_CLASS_MODULES OCAMLC OCAMLFIND_LDCONF AR INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM AUTOCONF_INSTALL_FILES TARGET_TOOLCHAIN host_os host_vendor host_cpu host build_os build_vendor build_cpu build OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC 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 runstatedir 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 PKG_CONFIG_OPTIONS' ac_subst_files='' ac_user_opts=' enable_option_checking enable_ldconf enable_camlp4 enable_debugging with_ocaml_warnings enable_profiling enable_nativecode enable_custom enable_pic ' ac_precious_vars='PKG_CONFIG_OPTIONS build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS PIC_FLAGS PKG_CONFIG 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' runstatedir='${localstatedir}/run' 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 ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -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 runstatedir 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 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 ocaml-ffmpeg 0.4.1 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] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --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/ocaml-ffmpeg] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF 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 ocaml-ffmpeg 0.4.1:";; 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-ldconf don't modify the dynamic loader configuration file (default is enable) --disable-camlp4 disable camlp4 auto-detection. --disable-debugging disable debugging information (backtrace printing in particular) --enable-profiling compile to generate profiling infomation --disable-nativecode compile in bytecode --disable-custom disable custom mode for bytecode compilation (use if you know what you are doing) --disable-pic compile PIC objects [default=enabled for shared builds on supported platforms] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-ocaml-warnings=WARNINGS Enable specific list of ocaml compiler warnings. Some influential environment variables: PKG_CONFIG_OPTIONS Additional options passed when invoking pkg-config 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 PIC_FLAGS compiler flags for PIC code PKG_CONFIG path to pkg-config utility 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 . _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 ocaml-ffmpeg configure 0.4.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES # --------------------------------------------- # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR # accordingly. ac_fn_c_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 $as_echo_n "checking whether $as_decl_name is declared... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_decl # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_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 \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 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;} ( $as_echo "## -------------------------------------------------- ## ## Report this to savonet-users@lists.sourceforge.net ## ## -------------------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else 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; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run 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 ocaml-ffmpeg $as_me 0.4.1, which was generated by GNU Autoconf 2.69. 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 VERSION=$PACKAGE_VERSION requires="bigarray threads" { $as_echo "$as_me:${as_lineno-$LINENO}: result: configuring $PACKAGE_STRING" >&5 $as_echo "configuring $PACKAGE_STRING" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* 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 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. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$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 target toolchain" >&5 $as_echo_n "checking target toolchain... " >&6; } case "${host_os}" in linux*) TARGET_TOOLCHAIN="linux" ;; mingw*) TARGET_TOOLCHAIN="mingw" ;; cygwin*) TARGET_TOOLCHAIN="cygwin" ;; darwin*) TARGET_TOOLCHAIN="darwin" ;; *) TARGET_TOOLCHAIN="other" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TARGET_TOOLCHAIN" >&5 $as_echo "$TARGET_TOOLCHAIN" >&6; } # AC_CANONICAL_HOST needs those files AUTOCONF_INSTALL_FILES="config.guess config.sub install-sh m4/*.m4" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* 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 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 ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$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="no" 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 OCAMLFIND_LDCONF="" # Check whether --enable-ldconf was given. if test "${enable_ldconf+set}" = set; then : enableval=$enable_ldconf; ac_enable_ldconf=$enableval else ac_enable_ldconf=$enableval fi if test "$ac_enable_ldconf" = no ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabling modification of ld.conf" >&5 $as_echo "disabling modification of ld.conf" >&6; } OCAMLFIND_LDCONF=dummy fi # Check for Ocaml compilers # checking for ocamlc if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ocamlc", so it can be a program name with args. set dummy ${ac_tool_prefix}ocamlc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OCAMLC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OCAMLC"; then ac_cv_prog_OCAMLC="$OCAMLC" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OCAMLC="${ac_tool_prefix}ocamlc" $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 OCAMLC=$ac_cv_prog_OCAMLC if test -n "$OCAMLC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLC" >&5 $as_echo "$OCAMLC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OCAMLC"; then ac_ct_OCAMLC=$OCAMLC # Extract the first word of "ocamlc", so it can be a program name with args. set dummy ocamlc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OCAMLC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OCAMLC"; then ac_cv_prog_ac_ct_OCAMLC="$ac_ct_OCAMLC" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OCAMLC="ocamlc" $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_OCAMLC=$ac_cv_prog_ac_ct_OCAMLC if test -n "$ac_ct_OCAMLC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OCAMLC" >&5 $as_echo "$ac_ct_OCAMLC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OCAMLC" = x; then OCAMLC="no" 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 OCAMLC=$ac_ct_OCAMLC fi else OCAMLC="$ac_cv_prog_OCAMLC" fi if test "$OCAMLC" = "no"; then as_fn_error $? "Cannot find ocamlc." "$LINENO" 5 fi OCAMLVERSION=`$OCAMLC -v | sed -n -e 's|.*version* *\(.*\)$|\1|p'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: OCaml version is $OCAMLVERSION" >&5 $as_echo "OCaml version is $OCAMLVERSION" >&6; } # Check if version is >= 3.12.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ocaml compiler supports first-class modules" >&5 $as_echo_n "checking if ocaml compiler supports first-class modules... " >&6; } as_arg_v1=$OCAMLVERSION as_arg_v2=3.12.0 awk "$as_awk_strverscmp" v1="$as_arg_v1" v2="$as_arg_v2" /dev/null case $? in #( 1) : ;; #( 0) : OCAML_HAS_FIRST_CLASS_MODULES="yes" ;; #( 2) : OCAML_HAS_FIRST_CLASS_MODULES="yes" ;; #( *) : ;; esac if test -n "${OCAML_HAS_FIRST_CLASS_MODULES}"; 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; } fi # If OCAMLLIB is set, use it if test "$OCAMLLIB" = ""; then OCAMLLIB=`$OCAMLC -where 2>/dev/null || $OCAMLC -v|tail -1|cut -d ' ' -f 4` else { $as_echo "$as_me:${as_lineno-$LINENO}: result: OCAMLLIB previously set; preserving it." >&5 $as_echo "OCAMLLIB previously set; preserving it." >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: OCaml library path is $OCAMLLIB" >&5 $as_echo "OCaml library path is $OCAMLLIB" >&6; } # checking for ocamlopt # Extract the first word of "${ac_tool_prefix}ocamlopt", so it can be a program name with args. set dummy ${ac_tool_prefix}ocamlopt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OCAMLOPT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OCAMLOPT"; then ac_cv_prog_OCAMLOPT="$OCAMLOPT" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OCAMLOPT="${ac_tool_prefix}ocamlopt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_OCAMLOPT" && ac_cv_prog_OCAMLOPT="no" fi fi OCAMLOPT=$ac_cv_prog_OCAMLOPT if test -n "$OCAMLOPT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLOPT" >&5 $as_echo "$OCAMLOPT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi OCAMLBEST=byte OCAML_DYNLINK=byte-dyn if test "$OCAMLOPT" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find ocamlopt; bytecode compilation only." >&5 $as_echo "$as_me: WARNING: Cannot find ocamlopt; bytecode compilation only." >&2;} else TMPVERSION=`$OCAMLOPT -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' ` if test "$TMPVERSION" != "$OCAMLVERSION" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: versions differs from ocamlc; ocamlopt discarded." >&5 $as_echo "versions differs from ocamlc; ocamlopt discarded." >&6; } OCAMLOPT=no else OCAMLBEST="byte opt" OCAML_DYNLINK="byte-dyn opt-dyn" fi fi # checking for ocamlc.opt # Extract the first word of "${ac_tool_prefix}ocamlc.opt", so it can be a program name with args. set dummy ${ac_tool_prefix}ocamlc.opt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OCAMLCDOTOPT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OCAMLCDOTOPT"; then ac_cv_prog_OCAMLCDOTOPT="$OCAMLCDOTOPT" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OCAMLCDOTOPT="${ac_tool_prefix}ocamlc.opt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_OCAMLCDOTOPT" && ac_cv_prog_OCAMLCDOTOPT="no" fi fi OCAMLCDOTOPT=$ac_cv_prog_OCAMLCDOTOPT if test -n "$OCAMLCDOTOPT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLCDOTOPT" >&5 $as_echo "$OCAMLCDOTOPT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$OCAMLCDOTOPT" != "no"; then TMPVERSION=`$OCAMLCDOTOPT -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' ` if test "$TMPVERSION" != "$OCAMLVERSION" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: versions differs from ocamlc; ocamlc.opt discarded." >&5 $as_echo "versions differs from ocamlc; ocamlc.opt discarded." >&6; } else OCAMLC=$OCAMLCDOTOPT fi fi # checking for ocamlopt.opt if test "$OCAMLOPT" != "no" ; then # Extract the first word of "${ac_tool_prefix}ocamlopt.opt", so it can be a program name with args. set dummy ${ac_tool_prefix}ocamlopt.opt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OCAMLOPTDOTOPT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OCAMLOPTDOTOPT"; then ac_cv_prog_OCAMLOPTDOTOPT="$OCAMLOPTDOTOPT" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OCAMLOPTDOTOPT="${ac_tool_prefix}ocamlopt.opt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_OCAMLOPTDOTOPT" && ac_cv_prog_OCAMLOPTDOTOPT="no" fi fi OCAMLOPTDOTOPT=$ac_cv_prog_OCAMLOPTDOTOPT if test -n "$OCAMLOPTDOTOPT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLOPTDOTOPT" >&5 $as_echo "$OCAMLOPTDOTOPT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$OCAMLOPTDOTOPT" != "no"; then TMPVERSION=`$OCAMLOPTDOTOPT -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' ` if test "$TMPVERSION" != "$OCAMLVERSION" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: version differs from ocamlc; ocamlopt.opt discarded." >&5 $as_echo "version differs from ocamlc; ocamlopt.opt discarded." >&6; } else OCAMLOPT=$OCAMLOPTDOTOPT fi fi fi # checking for ocaml toplevel # Extract the first word of "${ac_tool_prefix}ocaml", so it can be a program name with args. set dummy ${ac_tool_prefix}ocaml; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OCAML+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OCAML"; then ac_cv_prog_OCAML="$OCAML" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OCAML="${ac_tool_prefix}ocaml" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_OCAML" && ac_cv_prog_OCAML="no" fi fi OCAML=$ac_cv_prog_OCAML if test -n "$OCAML"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAML" >&5 $as_echo "$OCAML" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # checking for ocamldep # Extract the first word of "${ac_tool_prefix}ocamldep", so it can be a program name with args. set dummy ${ac_tool_prefix}ocamldep; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OCAMLDEP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OCAMLDEP"; then ac_cv_prog_OCAMLDEP="$OCAMLDEP" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OCAMLDEP="${ac_tool_prefix}ocamldep" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_OCAMLDEP" && ac_cv_prog_OCAMLDEP="no" fi fi OCAMLDEP=$ac_cv_prog_OCAMLDEP if test -n "$OCAMLDEP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLDEP" >&5 $as_echo "$OCAMLDEP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$OCAMLDEP" = "no"; then as_fn_error $? "Cannot find ocamlmklib." "$LINENO" 5 else # Extract the first word of "${ac_tool_prefix}ocamldep.opt", so it can be a program name with args. set dummy ${ac_tool_prefix}ocamldep.opt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OCAMLDEPOPT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OCAMLDEPOPT"; then ac_cv_prog_OCAMLDEPOPT="$OCAMLDEPOPT" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OCAMLDEPOPT="${ac_tool_prefix}ocamldep.opt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_OCAMLDEPOPT" && ac_cv_prog_OCAMLDEPOPT="no" fi fi OCAMLDEPOPT=$ac_cv_prog_OCAMLDEPOPT if test -n "$OCAMLDEPOPT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLDEPOPT" >&5 $as_echo "$OCAMLDEPOPT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$OCAMLDEPOPT" != "no"; then OCAMLDEP=$OCAMLDEPOPT fi fi # checking for ocamlmktop # Extract the first word of "${ac_tool_prefix}ocamlmktop", so it can be a program name with args. set dummy ${ac_tool_prefix}ocamlmktop; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OCAMLMKTOP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OCAMLMKTOP"; then ac_cv_prog_OCAMLMKTOP="$OCAMLMKTOP" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OCAMLMKTOP="${ac_tool_prefix}ocamlmktop" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_OCAMLMKTOP" && ac_cv_prog_OCAMLMKTOP="no" fi fi OCAMLMKTOP=$ac_cv_prog_OCAMLMKTOP if test -n "$OCAMLMKTOP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLMKTOP" >&5 $as_echo "$OCAMLMKTOP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # checking for ocamlmklib # Extract the first word of "${ac_tool_prefix}ocamlmklib", so it can be a program name with args. set dummy ${ac_tool_prefix}ocamlmklib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OCAMLMKLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OCAMLMKLIB"; then ac_cv_prog_OCAMLMKLIB="$OCAMLMKLIB" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OCAMLMKLIB="${ac_tool_prefix}ocamlmklib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_OCAMLMKLIB" && ac_cv_prog_OCAMLMKLIB="no" fi fi OCAMLMKLIB=$ac_cv_prog_OCAMLMKLIB if test -n "$OCAMLMKLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLMKLIB" >&5 $as_echo "$OCAMLMKLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$OCAMLMKLIB" = "no"; then as_fn_error $? "Cannot find ocamlmklib." "$LINENO" 5 fi # checking for ocamldoc if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ocamldoc", so it can be a program name with args. set dummy ${ac_tool_prefix}ocamldoc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OCAMLDOC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OCAMLDOC"; then ac_cv_prog_OCAMLDOC="$OCAMLDOC" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OCAMLDOC="${ac_tool_prefix}ocamldoc" $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 OCAMLDOC=$ac_cv_prog_OCAMLDOC if test -n "$OCAMLDOC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLDOC" >&5 $as_echo "$OCAMLDOC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OCAMLDOC"; then ac_ct_OCAMLDOC=$OCAMLDOC # Extract the first word of "ocamldoc", so it can be a program name with args. set dummy ocamldoc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OCAMLDOC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OCAMLDOC"; then ac_cv_prog_ac_ct_OCAMLDOC="$ac_ct_OCAMLDOC" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OCAMLDOC="ocamldoc" $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_OCAMLDOC=$ac_cv_prog_ac_ct_OCAMLDOC if test -n "$ac_ct_OCAMLDOC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OCAMLDOC" >&5 $as_echo "$ac_ct_OCAMLDOC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OCAMLDOC" = x; then OCAMLDOC="no" 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 OCAMLDOC=$ac_ct_OCAMLDOC fi else OCAMLDOC="$ac_cv_prog_OCAMLDOC" fi if test "$OCAMLDOC" != "no"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ocamldoc.opt", so it can be a program name with args. set dummy ${ac_tool_prefix}ocamldoc.opt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OCAMLDOCOPT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OCAMLDOCOPT"; then ac_cv_prog_OCAMLDOCOPT="$OCAMLDOCOPT" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OCAMLDOCOPT="${ac_tool_prefix}ocamldoc.opt" $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 OCAMLDOCOPT=$ac_cv_prog_OCAMLDOCOPT if test -n "$OCAMLDOCOPT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLDOCOPT" >&5 $as_echo "$OCAMLDOCOPT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OCAMLDOCOPT"; then ac_ct_OCAMLDOCOPT=$OCAMLDOCOPT # Extract the first word of "ocamldoc.opt", so it can be a program name with args. set dummy ocamldoc.opt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OCAMLDOCOPT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OCAMLDOCOPT"; then ac_cv_prog_ac_ct_OCAMLDOCOPT="$ac_ct_OCAMLDOCOPT" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OCAMLDOCOPT="ocamldoc.opt" $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_OCAMLDOCOPT=$ac_cv_prog_ac_ct_OCAMLDOCOPT if test -n "$ac_ct_OCAMLDOCOPT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OCAMLDOCOPT" >&5 $as_echo "$ac_ct_OCAMLDOCOPT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OCAMLDOCOPT" = x; then OCAMLDOCOPT="no" 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 OCAMLDOCOPT=$ac_ct_OCAMLDOCOPT fi else OCAMLDOCOPT="$ac_cv_prog_OCAMLDOCOPT" fi if test "$OCAMLDOCOPT" != "no"; then OCAMLDOC=$OCAMLDOCOPT fi fi # checking for ocamlbuild if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ocamlbuild", so it can be a program name with args. set dummy ${ac_tool_prefix}ocamlbuild; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OCAMLBUILD+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OCAMLBUILD"; then ac_cv_prog_OCAMLBUILD="$OCAMLBUILD" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OCAMLBUILD="${ac_tool_prefix}ocamlbuild" $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 OCAMLBUILD=$ac_cv_prog_OCAMLBUILD if test -n "$OCAMLBUILD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLBUILD" >&5 $as_echo "$OCAMLBUILD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OCAMLBUILD"; then ac_ct_OCAMLBUILD=$OCAMLBUILD # Extract the first word of "ocamlbuild", so it can be a program name with args. set dummy ocamlbuild; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OCAMLBUILD+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OCAMLBUILD"; then ac_cv_prog_ac_ct_OCAMLBUILD="$ac_ct_OCAMLBUILD" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OCAMLBUILD="ocamlbuild" $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_OCAMLBUILD=$ac_cv_prog_ac_ct_OCAMLBUILD if test -n "$ac_ct_OCAMLBUILD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OCAMLBUILD" >&5 $as_echo "$ac_ct_OCAMLBUILD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OCAMLBUILD" = x; then OCAMLBUILD="no" 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 OCAMLBUILD=$ac_ct_OCAMLBUILD fi else OCAMLBUILD="$ac_cv_prog_OCAMLBUILD" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}camlidl", so it can be a program name with args. set dummy ${ac_tool_prefix}camlidl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CAMLIDL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CAMLIDL"; then ac_cv_prog_CAMLIDL="$CAMLIDL" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CAMLIDL="${ac_tool_prefix}camlidl" $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 CAMLIDL=$ac_cv_prog_CAMLIDL if test -n "$CAMLIDL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CAMLIDL" >&5 $as_echo "$CAMLIDL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CAMLIDL"; then ac_ct_CAMLIDL=$CAMLIDL # Extract the first word of "camlidl", so it can be a program name with args. set dummy camlidl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CAMLIDL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CAMLIDL"; then ac_cv_prog_ac_ct_CAMLIDL="$ac_ct_CAMLIDL" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CAMLIDL="camlidl" $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_CAMLIDL=$ac_cv_prog_ac_ct_CAMLIDL if test -n "$ac_ct_CAMLIDL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CAMLIDL" >&5 $as_echo "$ac_ct_CAMLIDL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CAMLIDL" = x; then CAMLIDL="no" 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 CAMLIDL=$ac_ct_CAMLIDL fi else CAMLIDL="$ac_cv_prog_CAMLIDL" fi # checking for ocamllex if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ocamllex", so it can be a program name with args. set dummy ${ac_tool_prefix}ocamllex; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OCAMLLEX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OCAMLLEX"; then ac_cv_prog_OCAMLLEX="$OCAMLLEX" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OCAMLLEX="${ac_tool_prefix}ocamllex" $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 OCAMLLEX=$ac_cv_prog_OCAMLLEX if test -n "$OCAMLLEX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLLEX" >&5 $as_echo "$OCAMLLEX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OCAMLLEX"; then ac_ct_OCAMLLEX=$OCAMLLEX # Extract the first word of "ocamllex", so it can be a program name with args. set dummy ocamllex; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OCAMLLEX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OCAMLLEX"; then ac_cv_prog_ac_ct_OCAMLLEX="$ac_ct_OCAMLLEX" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OCAMLLEX="ocamllex" $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_OCAMLLEX=$ac_cv_prog_ac_ct_OCAMLLEX if test -n "$ac_ct_OCAMLLEX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OCAMLLEX" >&5 $as_echo "$ac_ct_OCAMLLEX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OCAMLLEX" = x; then OCAMLLEX="no" 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 OCAMLLEX=$ac_ct_OCAMLLEX fi else OCAMLLEX="$ac_cv_prog_OCAMLLEX" fi if test "$OCAMLLEX" != "no"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ocamllex.opt", so it can be a program name with args. set dummy ${ac_tool_prefix}ocamllex.opt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OCAMLLEXDOTOPT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OCAMLLEXDOTOPT"; then ac_cv_prog_OCAMLLEXDOTOPT="$OCAMLLEXDOTOPT" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OCAMLLEXDOTOPT="${ac_tool_prefix}ocamllex.opt" $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 OCAMLLEXDOTOPT=$ac_cv_prog_OCAMLLEXDOTOPT if test -n "$OCAMLLEXDOTOPT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLLEXDOTOPT" >&5 $as_echo "$OCAMLLEXDOTOPT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OCAMLLEXDOTOPT"; then ac_ct_OCAMLLEXDOTOPT=$OCAMLLEXDOTOPT # Extract the first word of "ocamllex.opt", so it can be a program name with args. set dummy ocamllex.opt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OCAMLLEXDOTOPT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OCAMLLEXDOTOPT"; then ac_cv_prog_ac_ct_OCAMLLEXDOTOPT="$ac_ct_OCAMLLEXDOTOPT" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OCAMLLEXDOTOPT="ocamllex.opt" $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_OCAMLLEXDOTOPT=$ac_cv_prog_ac_ct_OCAMLLEXDOTOPT if test -n "$ac_ct_OCAMLLEXDOTOPT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OCAMLLEXDOTOPT" >&5 $as_echo "$ac_ct_OCAMLLEXDOTOPT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OCAMLLEXDOTOPT" = x; then OCAMLLEXDOTOPT="no" 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 OCAMLLEXDOTOPT=$ac_ct_OCAMLLEXDOTOPT fi else OCAMLLEXDOTOPT="$ac_cv_prog_OCAMLLEXDOTOPT" fi if test "$OCAMLLEXDOTOPT" != "no"; then OCAMLLEX=$OCAMLLEXDOTOPT fi fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ocamlyacc", so it can be a program name with args. set dummy ${ac_tool_prefix}ocamlyacc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OCAMLYACC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OCAMLYACC"; then ac_cv_prog_OCAMLYACC="$OCAMLYACC" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OCAMLYACC="${ac_tool_prefix}ocamlyacc" $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 OCAMLYACC=$ac_cv_prog_OCAMLYACC if test -n "$OCAMLYACC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLYACC" >&5 $as_echo "$OCAMLYACC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OCAMLYACC"; then ac_ct_OCAMLYACC=$OCAMLYACC # Extract the first word of "ocamlyacc", so it can be a program name with args. set dummy ocamlyacc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OCAMLYACC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OCAMLYACC"; then ac_cv_prog_ac_ct_OCAMLYACC="$ac_ct_OCAMLYACC" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OCAMLYACC="ocamlyacc" $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_OCAMLYACC=$ac_cv_prog_ac_ct_OCAMLYACC if test -n "$ac_ct_OCAMLYACC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OCAMLYACC" >&5 $as_echo "$ac_ct_OCAMLYACC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OCAMLYACC" = x; then OCAMLYACC="no" 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 OCAMLYACC=$ac_ct_OCAMLYACC fi else OCAMLYACC="$ac_cv_prog_OCAMLYACC" fi # Check whether --enable-camlp4 was given. if test "${enable_camlp4+set}" = set; then : enableval=$enable_camlp4; fi # checking for camlp4 if test "x$enable_camlp4" != "xno"; then # Extract the first word of "${ac_tool_prefix}camlp4", so it can be a program name with args. set dummy ${ac_tool_prefix}camlp4; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CAMLP4+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CAMLP4"; then ac_cv_prog_CAMLP4="$CAMLP4" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CAMLP4="${ac_tool_prefix}camlp4" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_CAMLP4" && ac_cv_prog_CAMLP4="no" fi fi CAMLP4=$ac_cv_prog_CAMLP4 if test -n "$CAMLP4"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CAMLP4" >&5 $as_echo "$CAMLP4" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$CAMLP4" != "no"; then TMPVERSION=`$CAMLP4 -v 2>&1| sed -n -e 's|.*version *\(.*\)$|\1|p' | tr -d '\r'` if test "$TMPVERSION" != "$OCAMLVERSION" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: versions differs from ocamlc" >&5 $as_echo "versions differs from ocamlc" >&6; } CAMLP4=no fi fi # checking for companion tools # Extract the first word of "${ac_tool_prefix}camlp4boot", so it can be a program name with args. set dummy ${ac_tool_prefix}camlp4boot; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CAMLP4BOOT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CAMLP4BOOT"; then ac_cv_prog_CAMLP4BOOT="$CAMLP4BOOT" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CAMLP4BOOT="${ac_tool_prefix}camlp4boot" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_CAMLP4BOOT" && ac_cv_prog_CAMLP4BOOT="no" fi fi CAMLP4BOOT=$ac_cv_prog_CAMLP4BOOT if test -n "$CAMLP4BOOT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CAMLP4BOOT" >&5 $as_echo "$CAMLP4BOOT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "${ac_tool_prefix}camlp4o", so it can be a program name with args. set dummy ${ac_tool_prefix}camlp4o; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CAMLP4O+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CAMLP4O"; then ac_cv_prog_CAMLP4O="$CAMLP4O" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CAMLP4O="${ac_tool_prefix}camlp4o" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_CAMLP4O" && ac_cv_prog_CAMLP4O="no" fi fi CAMLP4O=$ac_cv_prog_CAMLP4O if test -n "$CAMLP4O"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CAMLP4O" >&5 $as_echo "$CAMLP4O" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "${ac_tool_prefix}camlp4of", so it can be a program name with args. set dummy ${ac_tool_prefix}camlp4of; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CAMLP4OF+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CAMLP4OF"; then ac_cv_prog_CAMLP4OF="$CAMLP4OF" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CAMLP4OF="${ac_tool_prefix}camlp4of" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_CAMLP4OF" && ac_cv_prog_CAMLP4OF="no" fi fi CAMLP4OF=$ac_cv_prog_CAMLP4OF if test -n "$CAMLP4OF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CAMLP4OF" >&5 $as_echo "$CAMLP4OF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "${ac_tool_prefix}camlp4oof", so it can be a program name with args. set dummy ${ac_tool_prefix}camlp4oof; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CAMLP4OOF+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CAMLP4OOF"; then ac_cv_prog_CAMLP4OOF="$CAMLP4OOF" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CAMLP4OOF="${ac_tool_prefix}camlp4oof" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_CAMLP4OOF" && ac_cv_prog_CAMLP4OOF="no" fi fi CAMLP4OOF=$ac_cv_prog_CAMLP4OOF if test -n "$CAMLP4OOF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CAMLP4OOF" >&5 $as_echo "$CAMLP4OOF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "${ac_tool_prefix}camlp4orf", so it can be a program name with args. set dummy ${ac_tool_prefix}camlp4orf; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CAMLP4ORF+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CAMLP4ORF"; then ac_cv_prog_CAMLP4ORF="$CAMLP4ORF" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CAMLP4ORF="${ac_tool_prefix}camlp4orf" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_CAMLP4ORF" && ac_cv_prog_CAMLP4ORF="no" fi fi CAMLP4ORF=$ac_cv_prog_CAMLP4ORF if test -n "$CAMLP4ORF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CAMLP4ORF" >&5 $as_echo "$CAMLP4ORF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "${ac_tool_prefix}camlp4prof", so it can be a program name with args. set dummy ${ac_tool_prefix}camlp4prof; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CAMLP4PROF+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CAMLP4PROF"; then ac_cv_prog_CAMLP4PROF="$CAMLP4PROF" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CAMLP4PROF="${ac_tool_prefix}camlp4prof" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_CAMLP4PROF" && ac_cv_prog_CAMLP4PROF="no" fi fi CAMLP4PROF=$ac_cv_prog_CAMLP4PROF if test -n "$CAMLP4PROF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CAMLP4PROF" >&5 $as_echo "$CAMLP4PROF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "${ac_tool_prefix}camlp4r", so it can be a program name with args. set dummy ${ac_tool_prefix}camlp4r; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CAMLP4R+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CAMLP4R"; then ac_cv_prog_CAMLP4R="$CAMLP4R" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CAMLP4R="${ac_tool_prefix}camlp4r" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_CAMLP4R" && ac_cv_prog_CAMLP4R="no" fi fi CAMLP4R=$ac_cv_prog_CAMLP4R if test -n "$CAMLP4R"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CAMLP4R" >&5 $as_echo "$CAMLP4R" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "${ac_tool_prefix}camlp4rf", so it can be a program name with args. set dummy ${ac_tool_prefix}camlp4rf; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CAMLP4RF+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CAMLP4RF"; then ac_cv_prog_CAMLP4RF="$CAMLP4RF" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CAMLP4RF="${ac_tool_prefix}camlp4rf" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_CAMLP4RF" && ac_cv_prog_CAMLP4RF="no" fi fi CAMLP4RF=$ac_cv_prog_CAMLP4RF if test -n "$CAMLP4RF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CAMLP4RF" >&5 $as_echo "$CAMLP4RF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else CAMLP4=no CAMLP4BOOT=no CAMLP4O=no CAMLP4OF=no CAMLP4OOF=no CAMLP4ORF=no CAMLP4PROF=no CAMLP4R=no CAMLP4RF=no fi # checking for ocamlfind if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ocamlfind", so it can be a program name with args. set dummy ${ac_tool_prefix}ocamlfind; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OCAMLFIND+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OCAMLFIND"; then ac_cv_prog_OCAMLFIND="$OCAMLFIND" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OCAMLFIND="${ac_tool_prefix}ocamlfind" $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 OCAMLFIND=$ac_cv_prog_OCAMLFIND if test -n "$OCAMLFIND"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLFIND" >&5 $as_echo "$OCAMLFIND" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OCAMLFIND"; then ac_ct_OCAMLFIND=$OCAMLFIND # Extract the first word of "ocamlfind", so it can be a program name with args. set dummy ocamlfind; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OCAMLFIND+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OCAMLFIND"; then ac_cv_prog_ac_ct_OCAMLFIND="$ac_ct_OCAMLFIND" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OCAMLFIND="ocamlfind" $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_OCAMLFIND=$ac_cv_prog_ac_ct_OCAMLFIND if test -n "$ac_ct_OCAMLFIND"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OCAMLFIND" >&5 $as_echo "$ac_ct_OCAMLFIND" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OCAMLFIND" = x; then OCAMLFIND="no" 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 OCAMLFIND=$ac_ct_OCAMLFIND fi else OCAMLFIND="$ac_cv_prog_OCAMLFIND" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ocaml standard library path" >&5 $as_echo_n "checking for ocaml standard library path... " >&6; } OCAML_STDLIB=`$OCAMLFIND printconf stdlib` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAML_STDLIB" >&5 $as_echo "$OCAML_STDLIB" >&6; } # Check if caml/threads.h is present old_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -I${OCAML_STDLIB}" ac_fn_c_check_header_compile "$LINENO" "caml/threads.h" "ac_cv_header_caml_threads_h" "#include " if test "x$ac_cv_header_caml_threads_h" = xyes; then : CAML_THREADS=yes fi CFLAGS=${old_CFLAGS} # Check whether --enable-debugging was given. if test "${enable_debugging+set}" = set; then : enableval=$enable_debugging; fi if test "$enable_debugging" \!= "no" ; then OCAMLFLAGS="$OCAMLFLAGS -g" fi # Check whether --with-ocaml-warnings was given. if test "${with_ocaml_warnings+set}" = set; then : withval=$with_ocaml_warnings; fi if test -n "${with_ocaml_warnings}" ; then OCAMLFLAGS="$OCAMLFLAGS -w +${with_ocaml_warnings}" else OCAMLFLAGS="$OCAMLFLAGS -w +A-4@5-7@8-9@11@12@20-35-44-45-50" fi # Check whether --enable-profiling was given. if test "${enable_profiling+set}" = set; then : enableval=$enable_profiling; fi if test "x$enable_profiling" = "xyes" ; then OCAMLNCFLAGS="$OCAMLNCFLAGS -p" fi # Check whether --enable-nativecode was given. if test "${enable_nativecode+set}" = set; then : enableval=$enable_nativecode; fi # Check whether --enable-custom was given. if test "${enable_custom+set}" = set; then : enableval=$enable_custom; fi CAMLLIBPATH=$OCAMLLIB # Check whether --enable-pic was given. if test "${enable_pic+set}" = set; then : enableval=$enable_pic; enable_pic="$enableval" test "x$enable_pic" = x && enable_pic=auto else enable_pic=auto fi if test "$enable_pic" = auto && test "$enable_static" = yes; then enable_pic=no fi if test "$enable_pic" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to produce PIC" >&5 $as_echo_n "checking for $CC option to produce PIC... " >&6; } if test "x$PIC_FLAGS" = "x"; then if test "x$GCC" = "xyes"; then case "$host_os" in aix*|beos*|cygwin*|irix5*|irix6*|osf3*|osf4*|osf5*) ;; mingw*|os2*|pw32*) PIC_FLAGS="-DDLL_EXPORT" ;; darwin*|rhapsody*) PIC_FLAGS="-fno-common" ;; hpux*) case $host_cpu in hppa*64*|ia64*) ;; *) PIC_FLAGS="-fPIC" ;; esac ;; *) PIC_FLAGS="-fPIC" ;; esac else case "$host_os" in hpux9*|hpux10*|hpux11*) case "$host_cpu" in hppa*64*|ia64*) ;; *) PIC_FLAGS="+Z" ;; esac ;; linux*|k*bsd*-gnu) case `basename "$CC"` in icc*|ecc*|ifort*) PIC_FLAGS="-KPIC" ;; pgcc*|pgf77*|pgf90*|pgf95*) PIC_FLAGS="-fpic" ;; ccc*) ;; xl*) PIC_FLAGS="-qpic" ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*|*Sun\ F*) PIC_FLAGS="-KPIC" ;; esac esac ;; solaris*) PIC_FLAGS="-KPIC" ;; sunos4*) PIC_FLAGS="-PIC" ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PIC_FLAGS" >&5 $as_echo "$PIC_FLAGS" >&6; } fi CXXFLAGS="$CXXFLAGS $PIC_FLAGS" CPPFLAGS="$CPPFLAGS $PIC_FLAGS" # Add prefix to compilation variables # if passed if test "x$prefix" != "xNONE"; then CFLAGS="$CFLAGS -I$prefix/include" LDFLAGS="$LDFLAGS -L$prefix/lib" CPPFLAGS="$CPPFLAGS -I$prefix/include" CXXFLAGS="$CXXFLAGS -I$prefix/include" fi # Extract the first word of ""ocamlc"", so it can be a program name with args. set dummy "ocamlc"; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_SYSTEM_OCAMLC+:} false; then : $as_echo_n "(cached) " >&6 else case $SYSTEM_OCAMLC in [\\/]* | ?:[\\/]*) ac_cv_path_SYSTEM_OCAMLC="$SYSTEM_OCAMLC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_SYSTEM_OCAMLC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi SYSTEM_OCAMLC=$ac_cv_path_SYSTEM_OCAMLC if test -n "$SYSTEM_OCAMLC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SYSTEM_OCAMLC" >&5 $as_echo "$SYSTEM_OCAMLC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else as_fn_error $? "no" "$LINENO" 5 PKG_CONFIG="" fi fi if test -n ""; then PKGCONFIG_CHECK_VERSION=" >= " else PKGCONFIG_CHECK_VERSION="" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pkg-config knows about libavutil${PKGCONFIG_CHECK_VERSION}" >&5 $as_echo_n "checking whether pkg-config knows about libavutil${PKGCONFIG_CHECK_VERSION}... " >&6; } if ! $PKG_CONFIG $PKG_CONFIG_OPTIONS --exists libavutil; then as_fn_error $? "libavutil.pc not found.. Do you need to set PKG_CONFIG_PATH?" "$LINENO" 5 else if test -n ""; then if ! $PKG_CONFIG $PKG_CONFIG_OPTIONS --atleast-version= libavutil; then libavutil_VERSION="`$PKG_CONFIG $PKG_CONFIG_OPTIONS --modversion libavutil`" as_fn_error $? "requires version >= , found ${libavutil_VERSION}" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi fi CFLAGS="$CFLAGS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --cflags libavutil`" CPPFLAGS="$CPPFLAGS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --cflags libavutil`" LIBS="$LIBS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-l libavutil`" LDFLAGS="$LDFLAGS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-other libavutil`" LIBDIRS="$LIBDIRS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-L libavutil`" if test -n ""; then PKGCONFIG_CHECK_VERSION=" >= " else PKGCONFIG_CHECK_VERSION="" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pkg-config knows about libswscale${PKGCONFIG_CHECK_VERSION}" >&5 $as_echo_n "checking whether pkg-config knows about libswscale${PKGCONFIG_CHECK_VERSION}... " >&6; } if ! $PKG_CONFIG $PKG_CONFIG_OPTIONS --exists libswscale; then as_fn_error $? "libswscale.pc not found.. Do you need to set PKG_CONFIG_PATH?" "$LINENO" 5 else if test -n ""; then if ! $PKG_CONFIG $PKG_CONFIG_OPTIONS --atleast-version= libswscale; then libswscale_VERSION="`$PKG_CONFIG $PKG_CONFIG_OPTIONS --modversion libswscale`" as_fn_error $? "requires version >= , found ${libswscale_VERSION}" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi fi CFLAGS="$CFLAGS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --cflags libswscale`" CPPFLAGS="$CPPFLAGS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --cflags libswscale`" LIBS="$LIBS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-l libswscale`" LDFLAGS="$LDFLAGS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-other libswscale`" LIBDIRS="$LIBDIRS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-L libswscale`" if test -n ""; then PKGCONFIG_CHECK_VERSION=" >= " else PKGCONFIG_CHECK_VERSION="" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pkg-config knows about libavformat${PKGCONFIG_CHECK_VERSION}" >&5 $as_echo_n "checking whether pkg-config knows about libavformat${PKGCONFIG_CHECK_VERSION}... " >&6; } if ! $PKG_CONFIG $PKG_CONFIG_OPTIONS --exists libavformat; then as_fn_error $? "libavformat.pc not found.. Do you need to set PKG_CONFIG_PATH?" "$LINENO" 5 else if test -n ""; then if ! $PKG_CONFIG $PKG_CONFIG_OPTIONS --atleast-version= libavformat; then libavformat_VERSION="`$PKG_CONFIG $PKG_CONFIG_OPTIONS --modversion libavformat`" as_fn_error $? "requires version >= , found ${libavformat_VERSION}" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi fi CFLAGS="$CFLAGS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --cflags libavformat`" CPPFLAGS="$CPPFLAGS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --cflags libavformat`" LIBS="$LIBS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-l libavformat`" LDFLAGS="$LDFLAGS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-other libavformat`" LIBDIRS="$LIBDIRS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-L libavformat`" if test -n ""; then PKGCONFIG_CHECK_VERSION=" >= " else PKGCONFIG_CHECK_VERSION="" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pkg-config knows about libavcodec${PKGCONFIG_CHECK_VERSION}" >&5 $as_echo_n "checking whether pkg-config knows about libavcodec${PKGCONFIG_CHECK_VERSION}... " >&6; } if ! $PKG_CONFIG $PKG_CONFIG_OPTIONS --exists libavcodec; then as_fn_error $? "libavcodec.pc not found.. Do you need to set PKG_CONFIG_PATH?" "$LINENO" 5 else if test -n ""; then if ! $PKG_CONFIG $PKG_CONFIG_OPTIONS --atleast-version= libavcodec; then libavcodec_VERSION="`$PKG_CONFIG $PKG_CONFIG_OPTIONS --modversion libavcodec`" as_fn_error $? "requires version >= , found ${libavcodec_VERSION}" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi fi CFLAGS="$CFLAGS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --cflags libavcodec`" CPPFLAGS="$CPPFLAGS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --cflags libavcodec`" LIBS="$LIBS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-l libavcodec`" LDFLAGS="$LDFLAGS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-other libavcodec`" LIBDIRS="$LIBDIRS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-L libavcodec`" #PKG_CONFIG_CHECK_MODULE([libswresample]) #PKG_CONFIG_CHECK_MODULE([libavdevice]) # Do we need more? GEN_CODE_INCLUDE=`$PKG_CONFIG --variable=includedir libavcodec` ac_fn_c_check_decl "$LINENO" "avcodec_send_packet" "ac_cv_have_decl_avcodec_send_packet" "#include \"libavcodec/avcodec.h\" " if test "x$ac_cv_have_decl_avcodec_send_packet" = xyes; then : HAS_AV="yes" else HAS_AV="" 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 how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$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 ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in libswresample/swresample.h do : ac_fn_c_check_header_mongrel "$LINENO" "libswresample/swresample.h" "ac_cv_header_libswresample_swresample_h" "$ac_includes_default" if test "x$ac_cv_header_libswresample_swresample_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBSWRESAMPLE_SWRESAMPLE_H 1 _ACEOF HAS_SWRESAMPLE="yes" else HAS_SWRESAMPLE="" fi done if test "x$HAS_SWRESAMPLE" = "xyes" ; then LIBS="$LIBS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-l libswresample`" LDFLAGS="$LDFLAGS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-other libswresample`" LIBDIRS="$LIBDIRS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-L libswresample`" fi for ac_header in libavdevice/avdevice.h do : ac_fn_c_check_header_mongrel "$LINENO" "libavdevice/avdevice.h" "ac_cv_header_libavdevice_avdevice_h" "$ac_includes_default" if test "x$ac_cv_header_libavdevice_avdevice_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBAVDEVICE_AVDEVICE_H 1 _ACEOF HAS_AVDEVICE="yes" else HAS_AVDEVICE="" fi done if test "x$HAS_AVDEVICE" = "xyes" ; then LIBS="$LIBS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-l libavdevice`" LDFLAGS="$LDFLAGS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-other libavdevice`" LIBDIRS="$LIBDIRS `$PKG_CONFIG $PKG_CONFIG_OPTIONS --libs-only-L libavdevice`" fi for ac_header in libavutil/channel_layout.h do : ac_fn_c_check_header_mongrel "$LINENO" "libavutil/channel_layout.h" "ac_cv_header_libavutil_channel_layout_h" "$ac_includes_default" if test "x$ac_cv_header_libavutil_channel_layout_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBAVUTIL_CHANNEL_LAYOUT_H 1 _ACEOF HAS_CHANNEL_LAYOUT="yes" else HAS_CHANNEL_LAYOUT="" fi done if test "x$HAS_CHANNEL_LAYOUT" = "xyes" ; then CFLAGS="$CFLAGS -DHAS_CHANNEL_LAYOUT" fi for ac_header in libavutil/frame.h do : ac_fn_c_check_header_mongrel "$LINENO" "libavutil/frame.h" "ac_cv_header_libavutil_frame_h" "$ac_includes_default" if test "x$ac_cv_header_libavutil_frame_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBAVUTIL_FRAME_H 1 _ACEOF HAS_FRAME="yes" else HAS_FRAME="" fi done if test "x$HAS_FRAME" = "xyes" ; then CFLAGS="$CFLAGS -DHAS_FRAME" fi # substitutions to perform # Finally create the Makefile and samples ac_config_files="$ac_config_files Makefile" ac_config_files="$ac_config_files src/META" ac_config_files="$ac_config_files src/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 if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.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 : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' 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 # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # 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 ocaml-ffmpeg $as_me 0.4.1, which was generated by GNU Autoconf 2.69. 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 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" _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 Configuration files: $config_files Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ ocaml-ffmpeg config.status 0.4.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 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' 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;; --he | --h | --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 _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 "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/META") CONFIG_FILES="$CONFIG_FILES src/META" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/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 fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _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 $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac case $ac_file$ac_mode in "Makefile":F) chmod a-w Makefile ;; 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 ocaml-ffmpeg-0.4.1/examples/0000755000175000017500000000000013543206341015564 5ustar smimramsmimramocaml-ffmpeg-0.4.1/examples/transcoding/0000755000175000017500000000000013543206341020077 5ustar smimramsmimramocaml-ffmpeg-0.4.1/examples/transcoding/transcoding.ml0000644000175000017500000000256513543206341022754 0ustar smimramsmimramopen FFmpeg let () = Printexc.record_backtrace true let () = if Array.length Sys.argv < 3 then ( Printf.printf"usage: %s input_file output_file\n" Sys.argv.(0); exit 1); Avutil.Log.set_level `Debug; Avutil.Log.set_callback print_string; let src = Av.open_input Sys.argv.(1) in let dst = Av.open_output Sys.argv.(2) in let audio_codec = Avcodec.Audio.find_encoder "aac" in let video_codec = Avcodec.Video.find_encoder "mpeg4" in let oass = Av.get_audio_streams src |> List.map(fun (i, _, params) -> let opts = Av.mk_audio_opts ~params () in (i, Av.new_audio_stream ~codec:audio_codec ~opts dst)) in let ovss = Av.get_video_streams src |> List.map(fun (i, _, params) -> let opts = Av.mk_video_opts ~params () in (i, Av.new_video_stream ~codec:video_codec ~opts dst)) in let osss = Av.get_subtitle_streams src |> List.map(fun (i, _, params) -> let codec = Avcodec.Subtitle.find_encoder (Avcodec.Subtitle.string_of_id (Avcodec.Subtitle.get_params_id params)) in (i, Av.new_subtitle_stream ~codec dst)) in src |> Av.iter_input_frame ~audio:(fun i frm -> Av.write_frame(List.assoc i oass) frm) ~video:(fun i frm -> Av.write_frame(List.assoc i ovss) frm) ~subtitle:(fun i frm -> Av.write_frame(List.assoc i osss) frm); Av.close src; Av.close dst; Gc.full_major (); Gc.full_major () ocaml-ffmpeg-0.4.1/examples/transcoding/Makefile0000644000175000017500000000034513543206341021541 0ustar smimramsmimramSOURCES = transcoding.ml RESULT = transcoding LIBS = bigarray ffmpeg INCDIRS = ../../src THREADS = yes TRASH = *.raw *.flac *.ogg *.mp4 *.mkv all: nc test: all ./transcoding ../encoding/out.mkv out.mp4 include OCamlMakefile ocaml-ffmpeg-0.4.1/examples/transcoding/OCamlMakefile0000644000175000017500000010372713543206341022465 0ustar smimramsmimram########################################################################### # OCamlMakefile # Copyright (C) 1999- Markus Mottl # # For updates see: # http://www.ocaml.info/home/ocaml_sources.html # ########################################################################### # Modified by damien for .glade.ml compilation # Set these variables to the names of the sources to be processed and # the result variable. Order matters during linkage! ifndef SOURCES SOURCES := foo.ml endif export SOURCES ifndef RES_CLIB_SUF RES_CLIB_SUF := _stubs endif export RES_CLIB_SUF ifndef RESULT RESULT := foo endif export RESULT := $(strip $(RESULT)) export LIB_PACK_NAME ifndef DOC_FILES DOC_FILES := $(filter %.mli, $(SOURCES)) endif export DOC_FILES FIRST_DOC_FILE := $(firstword $(DOC_FILES)) export BCSUFFIX export NCSUFFIX ifndef TOPSUFFIX TOPSUFFIX := .top endif export TOPSUFFIX # Eventually set include- and library-paths, libraries to link, # additional compilation-, link- and ocamlyacc-flags # Path- and library information needs not be written with "-I" and such... # Define THREADS if you need it, otherwise leave it unset (same for # USE_CAMLP4)! export THREADS export VMTHREADS export ANNOTATE export USE_CAMLP4 export INCDIRS export LIBDIRS export EXTLIBDIRS export RESULTDEPS export OCAML_DEFAULT_DIRS export LIBS export CLIBS export CFRAMEWORKS export OCAMLFLAGS export OCAMLNCFLAGS export OCAMLBCFLAGS export OCAMLLDFLAGS export OCAMLNLDFLAGS export OCAMLBLDFLAGS export OCAMLMKLIB_FLAGS ifndef OCAMLCPFLAGS OCAMLCPFLAGS := a endif export OCAMLCPFLAGS ifndef DOC_DIR DOC_DIR := doc endif export DOC_DIR export PPFLAGS export LFLAGS export YFLAGS export IDLFLAGS export OCAMLDOCFLAGS export OCAMLFIND_INSTFLAGS export DVIPSFLAGS export STATIC # Add a list of optional trash files that should be deleted by "make clean" export TRASH ECHO := echo ifdef REALLY_QUIET export REALLY_QUIET ECHO := true LFLAGS := $(LFLAGS) -q YFLAGS := $(YFLAGS) -q endif #################### variables depending on your OCaml-installation SYSTEM := $(shell ocamlc -config 2>/dev/null | grep system | sed 's/system: //') # This may be # - mingw # - win32 # - cygwin # - some other string means Unix # - empty means ocamlc does not support -config ifeq ($(SYSTEM),mingw) MINGW=1 endif ifeq ($(SYSTEM),win32) MSVC=1 endif ifdef MINGW export MINGW WIN32 := 1 # We are compiling with cygwin tools: CFLAGS_WIN32 := -mno-cygwin # The default value 'cc' makes 'ocamlc -cc "cc"' raises the error 'The # NTVDM CPU has encountered an illegal instruction'. CC := gcc # The OCaml C header files use this flag: CFLAGS += -D__MINGW32__ endif ifdef MSVC export MSVC WIN32 := 1 ifndef STATIC CPPFLAGS_WIN32 := -DCAML_DLL endif CFLAGS_WIN32 += -nologo EXT_OBJ := obj EXT_LIB := lib ifeq ($(CC),gcc) # work around GNU Make default value ifdef THREADS CC := cl -MT else CC := cl endif endif ifeq ($(CXX),g++) # work around GNU Make default value CXX := $(CC) endif CFLAG_O := -Fo endif ifdef WIN32 EXT_CXX := cpp EXE := .exe endif ifndef EXT_OBJ EXT_OBJ := o endif ifndef EXT_LIB EXT_LIB := a endif ifndef EXT_CXX EXT_CXX := cc endif ifndef EXE EXE := # empty endif ifndef CFLAG_O CFLAG_O := -o # do not delete this comment (preserves trailing whitespace)! endif export CC export CXX export CFLAGS export CXXFLAGS export LDFLAGS export CPPFLAGS ifndef RPATH_FLAG ifdef ELF_RPATH_FLAG RPATH_FLAG := $(ELF_RPATH_FLAG) else RPATH_FLAG := -R endif endif export RPATH_FLAG ifndef MSVC ifndef PIC_CFLAGS PIC_CFLAGS := -fPIC endif ifndef PIC_CPPFLAGS PIC_CPPFLAGS := -DPIC endif endif export PIC_CFLAGS export PIC_CPPFLAGS BCRESULT := $(addsuffix $(BCSUFFIX), $(RESULT)) NCRESULT := $(addsuffix $(NCSUFFIX), $(RESULT)) TOPRESULT := $(addsuffix $(TOPSUFFIX), $(RESULT)) ifndef OCAMLFIND OCAMLFIND := ocamlfind endif export OCAMLFIND ifndef OCAMLC OCAMLC := ocamlc endif export OCAMLC ifndef OCAMLOPT OCAMLOPT := ocamlopt endif export OCAMLOPT ifndef OCAMLMKTOP OCAMLMKTOP := ocamlmktop endif export OCAMLMKTOP ifndef OCAMLCP OCAMLCP := ocamlcp endif export OCAMLCP ifndef OCAMLDEP OCAMLDEP := ocamldep endif export OCAMLDEP ifndef OCAMLLEX OCAMLLEX := ocamllex endif export OCAMLLEX ifndef OCAMLYACC OCAMLYACC := ocamlyacc endif export OCAMLYACC ifndef OCAMLMKLIB OCAMLMKLIB := ocamlmklib endif export OCAMLMKLIB ifndef OCAML_GLADECC OCAML_GLADECC := lablgladecc2 endif export OCAML_GLADECC ifndef OCAML_GLADECC_FLAGS OCAML_GLADECC_FLAGS := endif export OCAML_GLADECC_FLAGS ifndef CAMELEON_REPORT CAMELEON_REPORT := report endif export CAMELEON_REPORT ifndef CAMELEON_REPORT_FLAGS CAMELEON_REPORT_FLAGS := endif export CAMELEON_REPORT_FLAGS ifndef CAMELEON_ZOGGY CAMELEON_ZOGGY := camlp4o pa_zog.cma pr_o.cmo endif export CAMELEON_ZOGGY ifndef CAMELEON_ZOGGY_FLAGS CAMELEON_ZOGGY_FLAGS := endif export CAMELEON_ZOGGY_FLAGS ifndef OXRIDL OXRIDL := oxridl endif export OXRIDL ifndef CAMLIDL CAMLIDL := camlidl endif export CAMLIDL ifndef CAMLIDLDLL CAMLIDLDLL := camlidldll endif export CAMLIDLDLL ifndef NOIDLHEADER MAYBE_IDL_HEADER := -header endif export NOIDLHEADER export NO_CUSTOM ifndef CAMLP4 CAMLP4 := camlp4 endif export CAMLP4 ifndef REAL_OCAMLFIND ifdef PACKS ifndef CREATE_LIB ifdef THREADS PACKS += threads endif endif empty := space := $(empty) $(empty) comma := , ifdef PREDS PRE_OCAML_FIND_PREDICATES := $(subst $(space),$(comma),$(PREDS)) PRE_OCAML_FIND_PACKAGES := $(subst $(space),$(comma),$(PACKS)) OCAML_FIND_PREDICATES := -predicates $(PRE_OCAML_FIND_PREDICATES) # OCAML_DEP_PREDICATES := -syntax $(PRE_OCAML_FIND_PREDICATES) OCAML_FIND_PACKAGES := $(OCAML_FIND_PREDICATES) -package $(PRE_OCAML_FIND_PACKAGES) OCAML_DEP_PACKAGES := $(OCAML_DEP_PREDICATES) -package $(PRE_OCAML_FIND_PACKAGES) else OCAML_FIND_PACKAGES := -package $(subst $(space),$(comma),$(PACKS)) OCAML_DEP_PACKAGES := endif OCAML_FIND_LINKPKG := -linkpkg REAL_OCAMLFIND := $(OCAMLFIND) endif endif export OCAML_FIND_PACKAGES export OCAML_DEP_PACKAGES export OCAML_FIND_LINKPKG export REAL_OCAMLFIND ifndef OCAMLDOC OCAMLDOC := ocamldoc endif export OCAMLDOC ifndef LATEX LATEX := latex endif export LATEX ifndef DVIPS DVIPS := dvips endif export DVIPS ifndef PS2PDF PS2PDF := ps2pdf endif export PS2PDF ifndef OCAMLMAKEFILE OCAMLMAKEFILE := OCamlMakefile endif export OCAMLMAKEFILE ifndef OCAMLLIBPATH OCAMLLIBPATH := \ $(shell $(OCAMLC) 2>/dev/null -where || echo /usr/lib/ocaml) endif export OCAMLLIBPATH ifndef OCAML_LIB_INSTALL OCAML_LIB_INSTALL := $(OCAMLLIBPATH)/contrib endif export OCAML_LIB_INSTALL ########################################################################### #################### change following sections only if #################### you know what you are doing! # delete target files when a build command fails .PHONY: .DELETE_ON_ERROR .DELETE_ON_ERROR: # for pedants using "--warn-undefined-variables" export MAYBE_IDL export REAL_RESULT export CAMLIDLFLAGS export THREAD_FLAG export RES_CLIB export MAKEDLL export ANNOT_FLAG export C_OXRIDL export SUBPROJS export CFLAGS_WIN32 export CPPFLAGS_WIN32 INCFLAGS := SHELL := /bin/sh MLDEPDIR := ._d BCDIDIR := ._bcdi NCDIDIR := ._ncdi FILTER_EXTNS := %.mli %.ml %.mll %.mly %.idl %.oxridl %.c %.m %.$(EXT_CXX) %.rep %.zog %.glade FILTERED := $(filter $(FILTER_EXTNS), $(SOURCES)) SOURCE_DIRS := $(filter-out ./, $(sort $(dir $(FILTERED)))) FILTERED_REP := $(filter %.rep, $(FILTERED)) DEP_REP := $(FILTERED_REP:%.rep=$(MLDEPDIR)/%.d) AUTO_REP := $(FILTERED_REP:.rep=.ml) FILTERED_ZOG := $(filter %.zog, $(FILTERED)) DEP_ZOG := $(FILTERED_ZOG:%.zog=$(MLDEPDIR)/%.d) AUTO_ZOG := $(FILTERED_ZOG:.zog=.ml) FILTERED_GLADE := $(filter %.glade, $(FILTERED)) DEP_GLADE := $(FILTERED_GLADE:%.glade=$(MLDEPDIR)/%.d) AUTO_GLADE := $(FILTERED_GLADE:.glade=.ml) FILTERED_ML := $(filter %.ml, $(FILTERED)) DEP_ML := $(FILTERED_ML:%.ml=$(MLDEPDIR)/%.d) FILTERED_MLI := $(filter %.mli, $(FILTERED)) DEP_MLI := $(FILTERED_MLI:.mli=.di) FILTERED_MLL := $(filter %.mll, $(FILTERED)) DEP_MLL := $(FILTERED_MLL:%.mll=$(MLDEPDIR)/%.d) AUTO_MLL := $(FILTERED_MLL:.mll=.ml) FILTERED_MLY := $(filter %.mly, $(FILTERED)) DEP_MLY := $(FILTERED_MLY:%.mly=$(MLDEPDIR)/%.d) $(FILTERED_MLY:.mly=.di) AUTO_MLY := $(FILTERED_MLY:.mly=.mli) $(FILTERED_MLY:.mly=.ml) FILTERED_IDL := $(filter %.idl, $(FILTERED)) DEP_IDL := $(FILTERED_IDL:%.idl=$(MLDEPDIR)/%.d) $(FILTERED_IDL:.idl=.di) C_IDL := $(FILTERED_IDL:%.idl=%_stubs.c) ifndef NOIDLHEADER C_IDL += $(FILTERED_IDL:.idl=.h) endif OBJ_C_IDL := $(FILTERED_IDL:%.idl=%_stubs.$(EXT_OBJ)) AUTO_IDL := $(FILTERED_IDL:.idl=.mli) $(FILTERED_IDL:.idl=.ml) $(C_IDL) FILTERED_OXRIDL := $(filter %.oxridl, $(FILTERED)) DEP_OXRIDL := $(FILTERED_OXRIDL:%.oxridl=$(MLDEPDIR)/%.d) $(FILTERED_OXRIDL:.oxridl=.di) AUTO_OXRIDL := $(FILTERED_OXRIDL:.oxridl=.mli) $(FILTERED_OXRIDL:.oxridl=.ml) $(C_OXRIDL) FILTERED_C_CXX := $(filter %.c %.m %.$(EXT_CXX), $(FILTERED)) OBJ_C_CXX := $(FILTERED_C_CXX:.c=.$(EXT_OBJ)) OBJ_C_CXX := $(OBJ_C_CXX:.m=.$(EXT_OBJ)) OBJ_C_CXX := $(OBJ_C_CXX:.$(EXT_CXX)=.$(EXT_OBJ)) PRE_TARGETS += $(AUTO_MLL) $(AUTO_MLY) $(AUTO_IDL) $(AUTO_OXRIDL) $(AUTO_ZOG) $(AUTO_REP) $(AUTO_GLADE) ALL_DEPS := $(DEP_ML) $(DEP_MLI) $(DEP_MLL) $(DEP_MLY) $(DEP_IDL) $(DEP_OXRIDL) $(DEP_ZOG) $(DEP_REP) $(DEP_GLADE) MLDEPS := $(filter %.d, $(ALL_DEPS)) MLIDEPS := $(filter %.di, $(ALL_DEPS)) BCDEPIS := $(MLIDEPS:%.di=$(BCDIDIR)/%.di) NCDEPIS := $(MLIDEPS:%.di=$(NCDIDIR)/%.di) ALLML := $(filter %.mli %.ml %.mll %.mly %.idl %.oxridl %.rep %.zog %.glade, $(FILTERED)) IMPLO_INTF := $(ALLML:%.mli=%.mli.__) IMPLO_INTF := $(foreach file, $(IMPLO_INTF), \ $(basename $(file)).cmi $(basename $(file)).cmo) IMPLO_INTF := $(filter-out %.mli.cmo, $(IMPLO_INTF)) IMPLO_INTF := $(IMPLO_INTF:%.mli.cmi=%.cmi) IMPLX_INTF := $(IMPLO_INTF:.cmo=.cmx) INTF := $(filter %.cmi, $(IMPLO_INTF)) IMPL_CMO := $(filter %.cmo, $(IMPLO_INTF)) IMPL_CMX := $(IMPL_CMO:.cmo=.cmx) IMPL_ASM := $(IMPL_CMO:.cmo=.asm) IMPL_S := $(IMPL_CMO:.cmo=.s) OBJ_LINK := $(OBJ_C_IDL) $(OBJ_C_CXX) OBJ_FILES := $(IMPL_CMO:.cmo=.$(EXT_OBJ)) $(OBJ_LINK) EXECS := $(addsuffix $(EXE), \ $(sort $(TOPRESULT) $(BCRESULT) $(NCRESULT))) ifdef WIN32 EXECS += $(BCRESULT).dll $(NCRESULT).dll endif CLIB_BASE := $(RESULT)$(RES_CLIB_SUF) ifneq ($(strip $(OBJ_LINK)),) RES_CLIB := lib$(CLIB_BASE).$(EXT_LIB) endif ifdef WIN32 DLLSONAME := dll$(CLIB_BASE).dll else DLLSONAME := dll$(CLIB_BASE).so endif NONEXECS := $(INTF) $(IMPL_CMO) $(IMPL_CMX) $(IMPL_ASM) $(IMPL_S) \ $(OBJ_FILES) $(PRE_TARGETS) $(BCRESULT).cma $(NCRESULT).cmxa \ $(NCRESULT).$(EXT_LIB) $(BCRESULT).cmi $(BCRESULT).cmo \ $(NCRESULT).cmi $(NCRESULT).cmx $(NCRESULT).$(EXT_OBJ) \ $(RES_CLIB) $(IMPL_CMO:.cmo=.annot) \ $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(LIB_PACK_NAME).cmx \ $(LIB_PACK_NAME).$(EXT_OBJ) ifndef STATIC NONEXECS += $(DLLSONAME) endif ifndef LIBINSTALL_FILES LIBINSTALL_FILES := $(RESULT).mli $(RESULT).cmi $(RESULT).cma \ $(RESULT).cmxa $(RESULT).$(EXT_LIB) $(RES_CLIB) ifndef STATIC ifneq ($(strip $(OBJ_LINK)),) LIBINSTALL_FILES += $(DLLSONAME) endif endif endif export LIBINSTALL_FILES ifdef WIN32 # some extra stuff is created while linking DLLs NONEXECS += $(BCRESULT).$(EXT_LIB) $(BCRESULT).exp $(NCRESULT).exp $(CLIB_BASE).exp $(CLIB_BASE).lib endif TARGETS := $(EXECS) $(NONEXECS) # If there are IDL-files ifneq ($(strip $(FILTERED_IDL)),) MAYBE_IDL := -cclib -lcamlidl endif ifdef USE_CAMLP4 CAMLP4PATH := \ $(shell $(CAMLP4) -where 2>/dev/null || echo /usr/lib/camlp4) INCFLAGS := -I $(CAMLP4PATH) CINCFLAGS := -I$(CAMLP4PATH) endif DINCFLAGS := $(INCFLAGS) $(SOURCE_DIRS:%=-I %) $(OCAML_DEFAULT_DIRS:%=-I %) INCFLAGS := $(DINCFLAGS) $(INCDIRS:%=-I %) CINCFLAGS += $(SOURCE_DIRS:%=-I%) $(INCDIRS:%=-I%) $(OCAML_DEFAULT_DIRS:%=-I%) ifndef MSVC CLIBFLAGS += $(SOURCE_DIRS:%=-L%) $(LIBDIRS:%=-L%) \ $(EXTLIBDIRS:%=-L%) $(OCAML_DEFAULT_DIRS:%=-L%) ifeq ($(ELF_RPATH), yes) CLIBFLAGS += $(EXTLIBDIRS:%=-Wl,$(RPATH_FLAG)%) endif endif ifndef PROFILING INTF_OCAMLC := $(OCAMLC) else ifndef THREADS INTF_OCAMLC := $(OCAMLCP) -p $(OCAMLCPFLAGS) else # OCaml does not support profiling byte code # with threads (yet), therefore we force an error. ifndef REAL_OCAMLC $(error Profiling of multithreaded byte code not yet supported by OCaml) endif INTF_OCAMLC := $(OCAMLC) endif endif ifndef MSVC COMMON_LDFLAGS := $(LDFLAGS:%=-ccopt %) $(SOURCE_DIRS:%=-ccopt -L%) \ $(LIBDIRS:%=-ccopt -L%) $(EXTLIBDIRS:%=-ccopt -L%) \ $(EXTLIBDIRS:%=-ccopt -Wl $(OCAML_DEFAULT_DIRS:%=-ccopt -L%)) ifeq ($(ELF_RPATH),yes) COMMON_LDFLAGS += $(EXTLIBDIRS:%=-ccopt -Wl,$(RPATH_FLAG)%) endif else COMMON_LDFLAGS := -ccopt "/link -NODEFAULTLIB:LIBC $(LDFLAGS:%=%) $(SOURCE_DIRS:%=-LIBPATH:%) \ $(LIBDIRS:%=-LIBPATH:%) $(EXTLIBDIRS:%=-LIBPATH:%) \ $(OCAML_DEFAULT_DIRS:%=-LIBPATH:%) " endif CLIBS_OPTS := $(CLIBS:%=-cclib -l%) $(CFRAMEWORKS:%=-cclib '-framework %') ifdef MSVC ifndef STATIC # MSVC libraries do not have 'lib' prefix CLIBS_OPTS := $(CLIBS:%=-cclib %.lib) endif endif ifneq ($(strip $(OBJ_LINK)),) ifdef CREATE_LIB OBJS_LIBS := -cclib -l$(CLIB_BASE) $(CLIBS_OPTS) $(MAYBE_IDL) else OBJS_LIBS := $(OBJ_LINK) $(CLIBS_OPTS) $(MAYBE_IDL) endif else OBJS_LIBS := $(CLIBS_OPTS) $(MAYBE_IDL) endif ifdef LIB_PACK_NAME FOR_PACK_NAME := $(shell echo $(LIB_PACK_NAME) | awk '{print toupper(substr($$0,1,1))substr($$0,2)}') endif # If we have to make byte-code ifndef REAL_OCAMLC BYTE_OCAML := y # EXTRADEPS is added dependencies we have to insert for all # executable files we generate. Ideally it should be all of the # libraries we use, but it's hard to find the ones that get searched on # the path since I don't know the paths built into the compiler, so # just include the ones with slashes in their names. EXTRADEPS := $(addsuffix .cma,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i)))) ifndef LIB_PACK_NAME SPECIAL_OCAMLFLAGS := $(OCAMLBCFLAGS) else SPECIAL_OCAMLFLAGS := -for-pack $(FOR_PACK_NAME) $(OCAMLBCFLAGS) endif REAL_OCAMLC := $(INTF_OCAMLC) REAL_IMPL := $(IMPL_CMO) REAL_IMPL_INTF := $(IMPLO_INTF) IMPL_SUF := .cmo DEPFLAGS := MAKE_DEPS := $(MLDEPS) $(BCDEPIS) ifdef CREATE_LIB override CFLAGS := $(PIC_CFLAGS) $(CFLAGS) override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS) ifndef STATIC ifneq ($(strip $(OBJ_LINK)),) MAKEDLL := $(DLLSONAME) ALL_LDFLAGS := -dllib $(DLLSONAME) endif endif endif ifndef NO_CUSTOM ifneq "$(strip $(OBJ_LINK) $(THREADS) $(MAYBE_IDL) $(CLIBS) $(CFRAMEWORKS))" "" ALL_LDFLAGS += -custom endif endif ALL_LDFLAGS += $(INCFLAGS) $(OCAMLLDFLAGS) $(OCAMLBLDFLAGS) \ $(COMMON_LDFLAGS) $(LIBS:%=%.cma) CAMLIDLDLLFLAGS := ifdef THREADS ifdef VMTHREADS THREAD_FLAG := -vmthread else THREAD_FLAG := -thread endif ALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS) ifndef CREATE_LIB ifndef REAL_OCAMLFIND ALL_LDFLAGS := unix.cma threads.cma $(ALL_LDFLAGS) endif endif endif # we have to make native-code else EXTRADEPS := $(addsuffix .cmxa,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i)))) ifndef PROFILING SPECIAL_OCAMLFLAGS := $(OCAMLNCFLAGS) PLDFLAGS := else SPECIAL_OCAMLFLAGS := -p $(OCAMLNCFLAGS) PLDFLAGS := -p endif ifndef LIB_PACK_NAME SPECIAL_OCAMLFLAGS := $(OCAMLNCFLAGS) else SPECIAL_OCAMLFLAGS := -for-pack $(FOR_PACK_NAME) $(OCAMLNCFLAGS) endif REAL_IMPL := $(IMPL_CMX) REAL_IMPL_INTF := $(IMPLX_INTF) IMPL_SUF := .cmx override CPPFLAGS := -DNATIVE_CODE $(CPPFLAGS) DEPFLAGS := -native MAKE_DEPS := $(MLDEPS) $(NCDEPIS) ALL_LDFLAGS := $(PLDFLAGS) $(INCFLAGS) $(OCAMLLDFLAGS) \ $(OCAMLNLDFLAGS) $(COMMON_LDFLAGS) CAMLIDLDLLFLAGS := -opt ifndef CREATE_LIB ALL_LDFLAGS += $(LIBS:%=%.cmxa) else override CFLAGS := $(PIC_CFLAGS) $(CFLAGS) override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS) endif ifdef THREADS THREAD_FLAG := -thread ALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS) ifndef CREATE_LIB ifndef REAL_OCAMLFIND ALL_LDFLAGS := unix.cmxa threads.cmxa $(ALL_LDFLAGS) endif endif endif endif export MAKE_DEPS ifdef ANNOTATE ANNOT_FLAG := -dtypes else endif ALL_OCAMLCFLAGS := $(THREAD_FLAG) $(ANNOT_FLAG) $(OCAMLFLAGS) \ $(INCFLAGS) $(SPECIAL_OCAMLFLAGS) ifdef make_deps -include $(MAKE_DEPS) PRE_TARGETS := endif ########################################################################### # USER RULES # Call "OCamlMakefile QUIET=" to get rid of all of the @'s. QUIET=@ # generates byte-code (default) byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes bc: byte-code byte-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(BCRESULT)" make_deps=yes bcnl: byte-code-nolink top: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(TOPRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes # generates native-code native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes nc: native-code native-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes ncnl: native-code-nolink # generates byte-code libraries byte-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" \ CREATE_LIB=yes \ make_deps=yes bcl: byte-code-library # generates native-code libraries native-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).cmxa \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ CREATE_LIB=yes \ make_deps=yes ncl: native-code-library ifdef WIN32 # generates byte-code dll byte-code-dll: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).dll \ REAL_RESULT="$(BCRESULT)" \ make_deps=yes bcd: byte-code-dll # generates native-code dll native-code-dll: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).dll \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes ncd: native-code-dll endif # generates byte-code with debugging information debug-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dc: debug-code debug-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dcnl: debug-code-nolink # generates byte-code with debugging information (native code) debug-native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \ REAL_RESULT="$(NCRESULT)" make_deps=yes \ REAL_OCAMLC="$(OCAMLOPT)" \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dnc: debug-native-code debug-native-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(NCRESULT)" make_deps=yes \ REAL_OCAMLC="$(OCAMLOPT)" \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dncnl: debug-native-code-nolink # generates byte-code libraries with debugging information debug-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ CREATE_LIB=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dcl: debug-code-library # generates byte-code libraries with debugging information (native code) debug-native-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).cma \ REAL_RESULT="$(NCRESULT)" make_deps=yes \ REAL_OCAMLC="$(OCAMLOPT)" \ CREATE_LIB=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dncl: debug-native-code-library # generates byte-code for profiling profiling-byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" PROFILING="y" \ make_deps=yes pbc: profiling-byte-code # generates native-code profiling-native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ PROFILING="y" \ make_deps=yes pnc: profiling-native-code # generates byte-code libraries profiling-byte-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" PROFILING="y" \ CREATE_LIB=yes \ make_deps=yes pbcl: profiling-byte-code-library # generates native-code libraries profiling-native-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).cmxa \ REAL_RESULT="$(NCRESULT)" PROFILING="y" \ REAL_OCAMLC="$(OCAMLOPT)" \ CREATE_LIB=yes \ make_deps=yes pncl: profiling-native-code-library # packs byte-code objects pack-byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT).cmo \ REAL_RESULT="$(BCRESULT)" \ PACK_LIB=yes make_deps=yes pabc: pack-byte-code # packs native-code objects pack-native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(NCRESULT).cmx $(NCRESULT).$(EXT_OBJ) \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ PACK_LIB=yes make_deps=yes panc: pack-native-code # generates HTML-documentation htdoc: $(DOC_DIR)/$(RESULT)/html/index.html # generates Latex-documentation ladoc: $(DOC_DIR)/$(RESULT)/latex/doc.tex # generates PostScript-documentation psdoc: $(DOC_DIR)/$(RESULT)/latex/doc.ps # generates PDF-documentation pdfdoc: $(DOC_DIR)/$(RESULT)/latex/doc.pdf # generates all supported forms of documentation doc: htdoc ladoc psdoc pdfdoc ########################################################################### # LOW LEVEL RULES $(REAL_RESULT): $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) \ $(OCAML_FIND_PACKAGES) $(OCAML_FIND_LINKPKG) \ $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@$(EXE) \ $(REAL_IMPL) nolink: $(REAL_IMPL_INTF) $(OBJ_LINK) ifdef WIN32 $(REAL_RESULT).dll: $(REAL_IMPL_INTF) $(OBJ_LINK) $(CAMLIDLDLL) $(CAMLIDLDLLFLAGS) $(OBJ_LINK) $(CLIBS) \ -o $@ $(REAL_IMPL) endif %$(TOPSUFFIX): $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(REAL_OCAMLFIND) $(OCAMLMKTOP) \ $(OCAML_FIND_PACKAGES) $(OCAML_FIND_LINKPKG) \ $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@$(EXE) \ $(REAL_IMPL) .SUFFIXES: .mli .ml .cmi .cmo .cmx .cma .cmxa .$(EXT_OBJ) \ .mly .di .d .$(EXT_LIB) .idl %.oxridl .c .m .$(EXT_CXX) .h .so \ .rep .zog .glade ifndef STATIC ifdef MINGW # From OCaml 3.11.0, ocamlmklib is available on windows OCAMLMLIB_EXISTS = $(shell which $(OCAMLMKLIB)) ifeq ($(strip $(OCAMLMLIB_EXISTS)),) $(DLLSONAME): $(OBJ_LINK) $(CC) $(CFLAGS) $(CFLAGS_WIN32) $(OBJ_LINK) -shared -o $@ \ $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/lib%.a))) \ '$(OCAMLLIBPATH)/ocamlrun.a' \ -Wl,--whole-archive \ -Wl,--export-all-symbols \ -Wl,--allow-multiple-definition \ -Wl,--enable-auto-import else $(DLLSONAME): $(OBJ_LINK) $(OCAMLMKLIB) $(INCFLAGS) $(CLIBFLAGS) \ -o $(CLIB_BASE) $(OBJ_LINK) $(CLIBS:%=-l%) \ $(CFRAMEWORKS:%=-framework %) \ $(OCAMLMKLIB_FLAGS) endif else ifdef MSVC $(DLLSONAME): $(OBJ_LINK) link /NOLOGO /DLL /OUT:$@ $(OBJ_LINK) \ $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/%.lib))) \ '$(OCAMLLIBPATH)/ocamlrun.lib' else $(DLLSONAME): $(OBJ_LINK) $(OCAMLMKLIB) $(INCFLAGS) $(CLIBFLAGS) \ -o $(CLIB_BASE) $(OBJ_LINK) $(CLIBS:%=-l%) $(CFRAMEWORKS:%=-framework %) \ $(OCAMLMKLIB_FLAGS) endif endif endif ifndef LIB_PACK_NAME $(RESULT).cma: $(REAL_IMPL_INTF) $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@ $(REAL_IMPL) $(RESULT).cmxa $(RESULT).$(EXT_LIB): $(REAL_IMPL_INTF) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(OCAMLOPT) -a $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@ $(REAL_IMPL) else # Packing a bytecode library ifdef BYTE_OCAML $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo: $(REAL_IMPL_INTF) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -pack -o $(LIB_PACK_NAME).cmo $(OCAMLLDFLAGS) $(REAL_IMPL) # Packing into a unit which can be transformed into a library # Remember the .ml's must have been compiled with -for-pack $(LIB_PACK_NAME) else $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmx: $(REAL_IMPL_INTF) $(REAL_OCAMLFIND) $(OCAMLOPT) -pack -o $(LIB_PACK_NAME).cmx $(OCAMLLDFLAGS) $(REAL_IMPL) endif $(RESULT).cma: $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@ $(LIB_PACK_NAME).cmo $(RESULT).cmxa $(RESULT).$(EXT_LIB): $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmx $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(OCAMLOPT) -a $(filter-out -custom, $(ALL_LDFLAGS)) $(OBJS_LIBS) -o $@ $(LIB_PACK_NAME).cmx endif $(RES_CLIB): $(OBJ_LINK) ifndef MSVC ifneq ($(strip $(OBJ_LINK)),) $(AR) rcs $@ $(OBJ_LINK) endif else ifneq ($(strip $(OBJ_LINK)),) lib -nologo -debugtype:cv -out:$(RES_CLIB) $(OBJ_LINK) endif endif .mli.cmi: $(EXTRADEPS) $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ $(ECHO) $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ else \ $(ECHO) $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp \"$$pp $(PPFLAGS)\" $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp "$$pp $(PPFLAGS)" $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ fi .ml.cmi .ml.$(EXT_OBJ) .ml.cmx .ml.cmo: $(EXTRADEPS) $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ $(ECHO) $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(ALL_OCAMLCFLAGS) $<; \ $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(ALL_OCAMLCFLAGS) $<; \ else \ $(ECHO) $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp \"$$pp $(PPFLAGS)\" $(ALL_OCAMLCFLAGS) $<; \ $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp "$$pp $(PPFLAGS)" $(ALL_OCAMLCFLAGS) $<; \ fi .PRECIOUS: %.ml %.ml: %.mll $(OCAMLLEX) $(LFLAGS) $< .PRECIOUS: %.ml %.mli %.ml %.mli: %.mly $(OCAMLYACC) $(YFLAGS) $< $(QUIET)pp=`sed -n -e 's/.*(\*pp \([^*]*\) \*).*/\1/p;q' $<`; \ if [ ! -z "$$pp" ]; then \ mv $*.ml $*.ml.temporary; \ echo "(*pp $$pp $(PPFLAGS)*)" > $*.ml; \ cat $*.ml.temporary >> $*.ml; \ rm $*.ml.temporary; \ mv $*.mli $*.mli.temporary; \ echo "(*pp $$pp $(PPFLAGS)*)" > $*.mli; \ cat $*.mli.temporary >> $*.mli; \ rm $*.mli.temporary; \ fi .PRECIOUS: %.ml %.ml: %.rep $(CAMELEON_REPORT) $(CAMELEON_REPORT_FLAGS) -gen $< .PRECIOUS: %.ml %.ml: %.zog $(CAMELEON_ZOGGY) $(CAMELEON_ZOGGY_FLAGS) -impl $< > $@ .PRECIOUS: %.ml %.ml: %.glade $(OCAML_GLADECC) $(OCAML_GLADECC_FLAGS) $< > $@ .PRECIOUS: %.ml %.mli %.ml %.mli: %.oxridl $(OXRIDL) $< .PRECIOUS: %.ml %.mli %_stubs.c %.h %.ml %.mli %_stubs.c %.h: %.idl $(CAMLIDL) $(MAYBE_IDL_HEADER) $(IDLFLAGS) \ $(CAMLIDLFLAGS) $< $(QUIET)if [ $(NOIDLHEADER) ]; then touch $*.h; fi .c.$(EXT_OBJ): $(OCAMLC) -c -cc "$(CC)" -ccopt "$(CFLAGS) \ $(CPPFLAGS) $(CPPFLAGS_WIN32) \ $(CFLAGS_WIN32) $(CINCFLAGS) $(CFLAG_O)$@ " $< .m.$(EXT_OBJ): $(CC) -c $(CFLAGS) $(CINCFLAGS) $(CPPFLAGS) \ -I'$(OCAMLLIBPATH)' \ $< $(CFLAG_O)$@ .$(EXT_CXX).$(EXT_OBJ): $(CXX) -c $(CXXFLAGS) $(CINCFLAGS) $(CPPFLAGS) \ -I'$(OCAMLLIBPATH)' \ $< $(CFLAG_O)$@ $(MLDEPDIR)/%.d: %.ml $(QUIET)if [ ! -d $(@D) ]; then mkdir -p $(@D); fi $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ $(DINCFLAGS) $< > $@; \ else \ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ -pp \"$$pp $(PPFLAGS)\" $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ -pp "$$pp $(PPFLAGS)" $(DINCFLAGS) $< > $@; \ fi $(BCDIDIR)/%.di $(NCDIDIR)/%.di: %.mli $(QUIET)if [ ! -d $(@D) ]; then mkdir -p $(@D); fi $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(DINCFLAGS) $< > $@; \ else \ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \ -pp \"$$pp $(PPFLAGS)\" $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \ -pp "$$pp $(PPFLAGS)" $(DINCFLAGS) $< > $@; \ fi $(DOC_DIR)/$(RESULT)/html: mkdir -p $@ $(DOC_DIR)/$(RESULT)/html/index.html: $(DOC_DIR)/$(RESULT)/html $(DOC_FILES) rm -rf $