From 0cdc9f04874ff5b7f8a43cb50cfea4f1c098c707 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Thu, 1 Jan 1970 00:00:00 +0000 Subject: [PATCH] Initial import from old virt-top repository. --- .hgignore | 46 ++ COPYING | 339 ++++++++ COPYING.LIB | 515 +++++++++++++ ChangeLog | 243 ++++++ MANIFEST | 40 + Make.rules.in | 68 ++ Makefile.in | 150 ++++ README | 251 ++++++ aclocal.m4 | 170 ++++ config.guess | 1500 ++++++++++++++++++++++++++++++++++++ config.h.in | 216 ++++++ config.sub | 1616 +++++++++++++++++++++++++++++++++++++++ configure.ac | 411 ++++++++++ install-sh | 507 ++++++++++++ po/LINGUAS | 2 + po/Makefile.in | 79 ++ po/POTFILES | 22 + po/ja.po | 1017 ++++++++++++++++++++++++ po/pl.po | 1018 ++++++++++++++++++++++++ po/virt-top.pot | 1023 +++++++++++++++++++++++++ virt-ctrl/.depend | 28 + virt-ctrl/Makefile.in | 136 ++++ virt-ctrl/mingw-gcc-wrapper.ml | 70 ++ virt-ctrl/rebuild-icons.sh | 44 ++ virt-ctrl/vc_connection_dlg.ml | 203 +++++ virt-ctrl/vc_connection_dlg.mli | 43 ++ virt-ctrl/vc_connections.ml | 477 ++++++++++++ virt-ctrl/vc_connections.mli | 102 +++ virt-ctrl/vc_dbus.ml | 317 ++++++++ virt-ctrl/vc_dbus.mli | 22 + virt-ctrl/vc_domain_ops.ml | 109 +++ virt-ctrl/vc_domain_ops.mli | 35 + virt-ctrl/vc_helpers.ml | 97 +++ virt-ctrl/vc_helpers.mli | 51 ++ virt-ctrl/vc_icons.ml | 270 +++++++ virt-ctrl/vc_mainwindow.ml | 202 +++++ virt-ctrl/vc_mainwindow.mli | 31 + virt-ctrl/virt_ctrl.ml | 36 + wininstaller.nsis.in | 131 ++++ winlicense.rtf | 871 +++++++++++++++++++++ 40 files changed, 12508 insertions(+) create mode 100644 .hgignore create mode 100644 COPYING create mode 100644 COPYING.LIB create mode 100644 ChangeLog create mode 100644 MANIFEST create mode 100644 Make.rules.in create mode 100644 Makefile.in create mode 100644 README create mode 100644 aclocal.m4 create mode 100755 config.guess create mode 100644 config.h.in create mode 100755 config.sub create mode 100644 configure.ac create mode 100755 install-sh create mode 100644 po/LINGUAS create mode 100644 po/Makefile.in create mode 100644 po/POTFILES create mode 100644 po/ja.po create mode 100644 po/pl.po create mode 100644 po/virt-top.pot create mode 100644 virt-ctrl/.depend create mode 100644 virt-ctrl/Makefile.in create mode 100755 virt-ctrl/mingw-gcc-wrapper.ml create mode 100755 virt-ctrl/rebuild-icons.sh create mode 100644 virt-ctrl/vc_connection_dlg.ml create mode 100644 virt-ctrl/vc_connection_dlg.mli create mode 100644 virt-ctrl/vc_connections.ml create mode 100644 virt-ctrl/vc_connections.mli create mode 100644 virt-ctrl/vc_dbus.ml create mode 100644 virt-ctrl/vc_dbus.mli create mode 100644 virt-ctrl/vc_domain_ops.ml create mode 100644 virt-ctrl/vc_domain_ops.mli create mode 100644 virt-ctrl/vc_helpers.ml create mode 100644 virt-ctrl/vc_helpers.mli create mode 100644 virt-ctrl/vc_icons.ml create mode 100644 virt-ctrl/vc_mainwindow.ml create mode 100644 virt-ctrl/vc_mainwindow.mli create mode 100644 virt-ctrl/virt_ctrl.ml create mode 100644 wininstaller.nsis.in create mode 100644 winlicense.rtf diff --git a/.hgignore b/.hgignore new file mode 100644 index 0000000..f78c6f6 --- /dev/null +++ b/.hgignore @@ -0,0 +1,46 @@ +syntax: glob +META +ocaml-libvirt-*.tar.gz +ocaml-libvirt-*.exe +html +configure +config.log +config.status +config.h +config.cache +Makefile +Make.rules +*/Makefile +autom4te.cache +core +core.* +*.cmi +*.cmo +*.cmx +*.cma +*.cmxa +*.o +*.so +*.a +*.opt +*.dll +*.exe +*~ +libvirt/libvirt_version.ml +examples/list_domains +examples/node_info +mlvirsh/mlvirsh +virt-ctrl/virt-ctrl +virt-top/virt-top +virt-df/virt-df +wininstaller.nsis +*.orig +mlvirsh/mlvirsh_gettext.ml +virt-ctrl/virt_ctrl_gettext.ml +virt-df/virt_df_gettext.ml +virt-top/virt_top_gettext.ml +po/*.mo +po/*.po.bak +virt-df/virt_df_lvm2_lexer.ml +virt-df/virt_df_lvm2_parser.ml +virt-df/virt_df_lvm2_parser.mli \ No newline at end of file diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..e77696a --- /dev/null +++ b/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/COPYING.LIB b/COPYING.LIB new file mode 100644 index 0000000..ba2be48 --- /dev/null +++ b/COPYING.LIB @@ -0,0 +1,515 @@ + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[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. +^L + 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. +^L + 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. +^L + 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. +^L + 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. +^L + 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. +^L + 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. +^L + 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 +^L + 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 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper +mail. + +You should also get your employer (if you work as a programmer) or +your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James +Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..c03dcd2 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,243 @@ +2008-01-20 Richard Jones + + Fix Volume.lookup_by_key and Volume.lookup_by_path + * libvirt/libvirt.mli, libvirt/libvirt.ml: These functions take + a connection object, not a pool, as first parameter. + + Version 0.4.0.2 released. + +2008-01-18 Richard Jones + + Move to autogeneration of many C bindings. + * configure.ac, libvirt/libvirt_c.c, libvirt/generator.pl: Many + C bindings can now be autogenerated using a Perl script. + Also includes preliminary support for the experimental + storage API. + +2008-01-08 Richard Jones + + Get node_info just once for each connection. + * vc_connections.ml: Get node_info just once for each connection, + which is more efficient. + * vc_connections.mli: Tidy up. + + Type Vc_domain_ops.dops_callback_fn for clarity. + * virt-ctrl/vc_domain_ops.mli, virt-ctrl/vc_domain_ops.ml, + virt-ctrl/vc_mainwindow.mli: Give a type name to the domain_ops + callback type, for extra clarity. + + Change comments virt-manager -> virt-ctrl. + * virt-ctrl/*.ml, virt-ctrl/*.mli: Change comments virt-manager -> + virt-ctrl. + + Move programming information to libvirt generated doc. + * README, libvirt/libvirt.mli: Moved programming information to + libvirt generated documentation, greatly expanded examples and + other issues. + * examples/Makefile.in, examples/node_info.ml, examples/.depend: + Added node_info example program. + * .hgignore, Makefile.in: Ignore, clean up node_info binary. + * examples/list_domains.ml: Make a read-only connection. + + Clean up *.exe files. + * Makefile.in: Clean up *.exe files. + + Version 0.4.0.1 released. + * Makefile.in: Provide a 'winupload' target. + + Rename some dialogs in virt-ctrl. + * virt-ctrl/vc_mainwindow.ml: Fix some "virtual machine manager" -> + "virt-ctrl" dialogs in main window. + + Fix bad paths in wininstaller.nsis.in. + * wininstaller.nsis.in: + * .hgignore: Ignore *.orig files. + + Fix native virt-ctrl on Windows. + * virt-ctrl/Makefile.in, virt-ctrl/mingw-gcc-wrapper.ml: Wrapper + around 'gcc' to fix native virt-ctrl builds on Windows/MinGW. + * .hgignore: Ignore *.exe files. + +2008-01-07 Richard Jones + + Updated MANIFEST. + * MANIFEST: Bring the MANIFEST file up to date. + + mlvirtmanager renamed as virt-ctrl. + * .hgignore, Makefile.in, configure.ac: Rename + mlvirtmanager as virt-ctrl to avoid any confusion with + the real virt-manager. + * mlvirtmanager/, virt-ctrl/: Subdirectory moved. + * README: Supporting documentation updated. + + Include mlvirtmanager in the Windows installer. + * wininstaller.nsis.in: Include mlvirtmanager in the Windows + installer. + * Makefile.in: Re-enable native code builds for Windows installer. + * mlvirtmanager/Makefile.in: Pass $(LDFLAGS) when building on + Windows - you need to specify the location of $GTK/lib. + + Bundle Gtk DLLs and support files in the Windows installer. + * configure.ac: Detect library paths instead of hard- + coding them. + * wininstaller.nsis (removed): This file is now autogenerated. + * wininstaller.nsis.in: Bundle Gtk DLLs and support files. + * Makefile.in: More verbose messages from NSIS. + + Include required libraries in the Windows installer. + * wininstaller.nsis: Include *.dll files. + + Windows installer. + * Makefile.in, configure.ac: Add --with-nsis[=path/to/nsis] and + call out to 'makensis.exe'. + * wininstaller.nsis, winlicense.rtf: Configuration and support + files for NSIS-based Windows installer. + * README: Update documentation to reflect. + +2008-01-05 Richard Jones + + mlvirtmanager compiles and runs on Windows (MinGW). + * configure.ac: Directories to search for optional modules were + specified incorrectly - fixed. + * mlvirtmanager/Makefile.in: Changed so can build without + ocamlfind, and checked it can build on Windows. + + mlvirsh can compile without extlib + * mlvirsh/mlvirsh.ml: mlvirsh only needed three functions from + extlib, so copy them in here to avoid the dependency. + * configure.ac: No dependency on extlib for mlvirsh. + * mlvirsh/Makefile.in: Changed so can build without ocamlfind. + * README: Updated documentation. + + Update documentation for Windows. + * README: Update documentation for Windows. + + Build libvirt and examples on Windows (MinGW). + * aclocal.m4: Add AC_CHECK_OCAML_MODULE to check for OCaml + modules directly (without ocamlfind being needed). + * configure.ac: Remove requirement for ocamlfind. + * config.guess, config.sub: Ship these files to guess host, + build and target. + * libvirt/Makefile.in, examples/Makefile.in: Change these + so they don't require ocamlfind, do the right thing on MinGW. + * Make.rules.in: Make.rules is now generated from this file. + File can use ocamlfind or direct ocaml commands as available. + * .hgignore: Ignore some generated files on Windows. + +2008-01-04 Richard Jones + + Make extlib an optional dependency. + * Makefile.in, README, configure.ac, examples/Makefile.in, + libvirt/Makefile.in, mlvirtmanager/Makefile.in: Much code + doesn't really need extlib, so make it optional. + Bail earlier in configure step if we don't have ocamlfind. + +2007-12-20 Richard Jones + + * libvirt/libvirt_c.c: Use enter/leave_blocking_section around + synchronous libvirt API calls, so that multithreaded OCaml + programs can be used. + * configure.ac: Version 0.4.0.0 for release. + * libvirt/libvirt.ml, libvirt/libvirt.mli, libvirt/libvirt_c.c: + Change the ad-hoc "foo not supported" exception into a + specific Libvirt.Not_supported "foo" exception. + * virt-top/virt_top.ml: Change virt-top to understand new + exception type. + +2007-11-20 Richard Jones + + * libvirt/libvirt.mli, libvirt/libvirt.ml: New error numbers + in base libvirt. + * libvirt/libvirt_c.c: Gracefully handle the case where libvirt + throws an error number we have not heard of before (eg. when + dynamic linking with newer libvirt). + * configure.ac: Check exists. + * configure.ac: Version 0.3.3.4. + * virt-top/virt-top.pod: Fixed ocaml libvirt website URI in manpage. + +2007-11-19 Richard Jones + + * virt-top/virt-top.pod: Example connection URIs in virt-top manpage + (bug 390691). + +2007-11-14 Richard Jones + + * libvirt/libvirt.mli: Added filename = string type to clarify + some function signatures which take a filename. Added lots + of function documentation. + * libvirt/libvirt.ml: Added VIR_FROM_OPENVZ. + * configure.ac: Version 0.3.3.3 for release. + +2007-11-14 Richard Jones + + * Makefile.in: New rules for releasing and uploading. + +2007-11-14 Richard Jones + + * libvirt/libvirt.mli, libvirt/libvirt.ml, libvirt/libvirt_c.c: + Added support for virNodeGetFreeMemory and virNodeGetCellsFreeMemory + * mlvirsh/mlvirsh.ml: Added 'freecell' command. + +2007-10-19 Richard Jones + + * virt-top/virt_top_calendar.ml: Added --end-time option. + Extra optional dep on ocaml-calendar. + * virt-top/virt-top.pod: Document how to compress and split + CSV files. Document --end-time option and time formats. + * virt-top/virt_top.ml: Allow sub-second delays when in batch + and script mode. + * virt-top/virt_top_utils.mli, virt-top/virt_top.mli: Reorganise + the code and add some interfaces. + +2007-10-17 Richard Jones + + * virt-top/virt_top.ml: Added --script option. + * virt-top/virt_top.ml: Log domain data to CSV file. + * virt-top/virt_top.ml: Added --no-csv-cpu, --no-csv-block and + --no-csv-net flags. + * virt-top/*.ml: Much code clean-up and restructuring. + * *: Added GNU GPL/LGPL copyright messages to all files. + +2007-09-27 Richard Jones + + * configure.ac: Changed version to 0.3.2.9. + * Makefile.in: Re-enable virt-df. + * virt-df/virt_df*.ml: Mostly finished off the core of virt-df. + Ext2/3 support. No LVM as yet. + * virt-df/README: Added README file. + +2007-09-24 Richard Jones + + * configure.ac: Version 0.3.2.8 for release. + * virt-top/virt-top.ml, virt-top/virt-top.pod: Support for + $HOME/.virt-toprc init file, modelled after top. + * virt-top/virt_top_utils.ml: Split out string utilities + into a separate file. + +2007-09-20 Richard Jones + + * virt-top/virt_top.ml: qemu:/// URIs (and others) don't support + virConnectGetHostname. Catch this exception. + + * Makefile.in: Disable virt-df in this release until I have + time to fix it properly. + * Makefile.in: Fix 'check-manifest' rule. Added 'make release'. + * MANIFEST: Updated MANIFEST. + +2007-09-19 Richard Jones + + * virt-top/virt_top.ml: Ignore transient error from + C.num_of_defined_domains when it cannot contact xend; that + was causing virt-top to exit when xend was restarted. + +2007-09-18 Richard Jones + + * virt-df/virt_df.ml: Handle domains with partition-backed + block devices. + + * virt-top/virt_top.ml: Don't fail on older libvirt which would + give an error if list_domains or list_defined_domains was called + with n = 0. + + * ChangeLog: Start tracking changes. + diff --git a/MANIFEST b/MANIFEST new file mode 100644 index 0000000..9e32a7c --- /dev/null +++ b/MANIFEST @@ -0,0 +1,40 @@ +aclocal.m4 +ChangeLog +config.guess +config.h.in +config.sub +configure.ac +COPYING +COPYING.LIB +.hgignore +install-sh +Makefile.in +Make.rules.in +MANIFEST +po/ja.po +po/LINGUAS +po/Makefile.in +po/pl.po +po/POTFILES +po/virt-top.pot +README +virt-ctrl/.depend +virt-ctrl/Makefile.in +virt-ctrl/mingw-gcc-wrapper.ml +virt-ctrl/rebuild-icons.sh +virt-ctrl/vc_connection_dlg.ml +virt-ctrl/vc_connection_dlg.mli +virt-ctrl/vc_connections.ml +virt-ctrl/vc_connections.mli +virt-ctrl/vc_dbus.ml +virt-ctrl/vc_dbus.mli +virt-ctrl/vc_domain_ops.ml +virt-ctrl/vc_domain_ops.mli +virt-ctrl/vc_helpers.ml +virt-ctrl/vc_helpers.mli +virt-ctrl/vc_icons.ml +virt-ctrl/vc_mainwindow.ml +virt-ctrl/vc_mainwindow.mli +virt-ctrl/virt_ctrl.ml +wininstaller.nsis.in +winlicense.rtf diff --git a/Make.rules.in b/Make.rules.in new file mode 100644 index 0000000..a25d485 --- /dev/null +++ b/Make.rules.in @@ -0,0 +1,68 @@ +# ocaml-libvirt +# Copyright (C) 2007 Red Hat Inc., Richard W.M. Jones +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +# This file is included by Makefiles in subdirectories. + +OCAMLFIND = @OCAMLFIND@ +OCAMLDEP = @OCAMLDEP@ +OCAMLC = @OCAMLC@ +OCAMLOPT = @OCAMLOPT@ + +# Common rules for building OCaml objects. + +ifneq ($(OCAMLFIND),) +.mli.cmi: + $(OCAMLFIND) ocamlc $(OCAMLCFLAGS) $(OCAMLCPACKAGES) -c $< +.ml.cmo: + $(OCAMLFIND) ocamlc $(OCAMLCFLAGS) $(OCAMLCPACKAGES) -c $< +.ml.cmx: + $(OCAMLFIND) ocamlopt $(OCAMLOPTFLAGS) $(OCAMLOPTPACKAGES) -c $< +else +.mli.cmi: + $(OCAMLC) $(OCAMLCFLAGS) $(OCAMLCINCS) -c $< +.ml.cmo: + $(OCAMLC) $(OCAMLCFLAGS) $(OCAMLCINCS) -c $< +.ml.cmx: + $(OCAMLOPT) $(OCAMLOPTFLAGS) $(OCAMLOPTINCS) -c $< +endif + +%.ml %.mli: %.mly + ocamlyacc $< +.mll.ml: + ocamllex $< + +# Dependencies. + +depend: .depend + +ifneq ($(OCAMLFIND),) +.depend: $(wildcard *.mli) $(wildcard *.ml) + rm -f .depend + $(OCAMLFIND) ocamldep $(OCAMLCPACKAGES) $(OCAMLDEPFLAGS) $^ > $@ +else +.depend: $(wildcard *.mli) $(wildcard *.ml) + rm -f .depend + $(OCAMLDEP) $(OCAMLCINCS) $(OCAMLDEPFLAGS) $^ > $@ +endif + +ifeq ($(wildcard .depend),.depend) +include .depend +endif + +.PHONY: depend dist check-manifest dpkg doc + +.SUFFIXES: .cmo .cmi .cmx .ml .mli .mll .mly diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..52776e0 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,150 @@ +# ocaml-libvirt +# Copyright (C) 2007 Red Hat Inc., Richard W.M. Jones +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +PACKAGE = @PACKAGE_NAME@ +VERSION = @PACKAGE_VERSION@ + +INSTALL = @INSTALL@ + +MAKENSIS = @MAKENSIS@ + +OCAMLDOC = @OCAMLDOC@ +OCAMLDOCFLAGS := -html -sort + +SUBDIRS = @subdirs@ + +all opt depend install: + for d in $(SUBDIRS); do \ + $(MAKE) -C $$d $@; \ + if [ $$? -ne 0 ]; then exit 1; fi; \ + done + +clean: + for d in . $(SUBDIRS); do \ + (cd $$d; rm -f *.cmi *.cmo *.cmx *.cma *.cmxa *.o *.a *.so *.opt *~ *.dll *.exe core); \ + done + rm -f examples/list_domains + rm -f examples/node_info + rm -f mlvirsh/mlvirsh + rm -f virt-ctrl/virt-ctrl + rm -f virt-top/virt-top + rm -f virt-df/virt-df + +distclean: clean + rm -f config.h config.log config.status configure + rm -rf autom4te.cache + rm -f META + rm -f libvirt/libvirt_version.ml + rm -f Makefile + rm -f libvirt/Makefile + rm -f examples/Makefile + rm -f mlvirsh/Makefile + rm -f virt-ctrl/Makefile + rm -f virt-top/Makefile + rm -f virt-df/Makefile + +# Developer documentation (in html/ subdirectory). + +ifneq ($(OCAMLDOC),) +doc: + rm -rf html + mkdir html + -cd libvirt; \ + $(OCAMLDOC) $(OCAMLDOCFLAGS) -d ../html \ + libvirt.{ml,mli} libvirt_version.{ml,mli} +endif + +# Windows installer (requires NSIS). + +WININSTALLER := $(PACKAGE)-$(VERSION).exe + +ifneq ($(MAKENSIS),) +wininstaller: $(WININSTALLER) + +$(WININSTALLER): wininstaller.nsis all opt + "$(MAKENSIS)" \ + //DPACKAGE=$(PACKAGE) //DVERSION=$(VERSION) \ + //DOUTFILE=$@ $< + ls -l $@ +endif + +# Update configure and rerun. + +configure: force + autoreconf + CFLAGS=-g \ + ./configure \ + --enable-debug=yes --with-libvirt=/home/rjones/local + +# Distribution. + +dist: + $(MAKE) check-manifest + rm -rf $(PACKAGE)-$(VERSION) + mkdir $(PACKAGE)-$(VERSION) + tar -cf - -T MANIFEST | tar -C $(PACKAGE)-$(VERSION) -xf - + $(INSTALL) -m 0755 configure $(PACKAGE)-$(VERSION)/ + tar zcf $(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)-$(VERSION) + rm -rf $(PACKAGE)-$(VERSION) + ls -l $(PACKAGE)-$(VERSION).tar.gz + +check-manifest: + hg manifest | sort > .check-manifest; \ + sort MANIFEST > .orig-manifest; \ + diff -u .orig-manifest .check-manifest; rv=$$?; \ + rm -f .orig-manifest .check-manifest; \ + exit $$rv + +# Do a release (update the website). + +release: configure + $(MAKE) release_stage_2 + +release_stage_2: clean all opt doc dist + $(MAKE) release_stage_3 + +WEBSITE = ../redhat/websites + +release_stage_3: + rm -f $(WEBSITE)/ocaml-libvirt/html/*.{html,css} + cp html/*.{html,css} $(WEBSITE)/ocaml-libvirt/html/ + cp README $(WEBSITE)/ocaml-libvirt/README.txt + cp ChangeLog $(WEBSITE)/ocaml-libvirt/ChangeLog.txt +# cp virt-top/virt-top.txt $(WEBSITE)/virt-top/ +# cp ChangeLog $(WEBSITE)/virt-top/ChangeLog.txt + +# Upload to main website. + +upload: + cd $(WEBSITE)/ocaml-libvirt && \ + scp ChangeLog.txt index.html README.txt Screenshot*.png \ + libvirt.org:/data/www/libvirt.org/ocaml && \ + scp css/*.css \ + libvirt.org:/data/www/libvirt.org/ocaml/css/ && \ + scp html/*.html html/*.css \ + libvirt.org:/data/www/libvirt.org/ocaml/html/ + scp $(PACKAGE)-$(VERSION).tar.gz libvirt.org:/data/ftp/libvirt/ocaml/ + +# Upload Windows binary installer to main website. + +winupload: + scp $(WININSTALLER) libvirt.org:/data/ftp/libvirt/ocaml/ + +force: + +.PHONY: all opt depend install clean distclean configure dist check-manifest \ + release release_stage_2 release_stage_3 force \ No newline at end of file diff --git a/README b/README new file mode 100644 index 0000000..7fb9726 --- /dev/null +++ b/README @@ -0,0 +1,251 @@ +ocaml-libvirt +---------------------------------------------------------------------- + +Copyright (C) 2007-2008 Richard W.M. Jones, Red Hat Inc. +http://libvirt.org/ocaml/ +http://libvirt.org/ + +This is a complete set of OCaml bindings around libvirt, exposing all +known functionality to OCaml programs. + + +Requirements +---------------------------------------------------------------------- + +PLEASE NOTE: The list of requirements looks long but you DO NOT NEED +all of these packages, so pay careful attention to what is required +('R') and what is optional ('O'). + +ALSO NOTE: Binaries are available for many platforms. You only need +the packages below if you want to build from source. + + W h a t y o u w a n t t o b u i l d + + |Bindings, |Docs, |virt-top |virt-ctrl |virt-df |Windows + |examples, |manpages | | | |version + |mlvirsh | | | | | + --------------+----------+---------+---------+----------+----------+------ + GNU make | R | R | R | R | R | R + | | | | | | + gcc | R | | R | R | R | R + | | | | | | + libvirt | R | | R | R | R | R + | >= 0.2.1 | | | | | + | | | | | | + ocaml | R | | R | R | R | R + | >= 3.08 | | | | >= 3.10 | + | | | | | | + findlib | HR | R | HR | HR | HR | Note [1] + | | | | | | + ocaml-gettext | O | O | O | O | O | Note [2] + | | | | | | + MinGW + MSYS | | | | | | R + --------------+----------+---------+---------+----------+----------+------ + ocamldoc | | R | | | | O + | | | | | | + perldoc | | O | | | | + --------------+----------+---------+---------+----------+----------+------ + ocaml-curses | | | R | | | + | | | | | | + Extlib | | | R | | R | + | | | | | | + xml-light | | | O | | R | + | | | | | | + ocaml-calendar| | | O | | | + | | | | | | + ocaml CSV | | | O | | | + | | | | | | + bitmatch | | | | | R | + --------------+----------+---------+---------+----------+----------+------ + GTK2 | | | | R | | O + | | | | | | + lablgtk2 | | | | R | | O + | | | | >= 2.10.0| | + ocaml-dbus | | | | O | | + | | | | >= 0.06 | | + gnome-icon-theme | | | O | | + --------------+----------+---------+---------+----------+----------+------ + NSIS | | | | | | O + --------------+----------+---------+---------+----------+----------+------ + + R = required + HR = highly recommended (use if possible) + O = optional (just improves functionality, but not required) + n/a = not available + +Note [1]: Findlib was recently ported to Windows and in future we may +require it because it will let us remove a lot of hacks from the +Makefiles. + +Note [2]: It's not clear if ocaml-gettext works on Windows. + +Where to get the packages: + + libvirt >= 0.2.1 from http://libvirt.org/ (get the latest version available) + or packaged in Debian, Ubuntu and Fedora + + ocaml >= 3.08 from http://caml.inria.fr/ + or packaged in Debian, Ubuntu and Fedora + + findlib from http://www.ocaml-programming.de/packages/ + or packaged in Debian, Ubuntu and Fedora as 'ocaml-findlib' + + ocaml-gettext from http://www.le-gall.net/sylvain+violaine/ocaml-gettext.html + + patch for OCaml 3.10: + http://www.annexia.org/tmp/ocaml-gettext-0.2.0-20080321.patch + (This should appear in ocaml-gettext 0.3.0 shortly). + + MinGW + MSYS from http://www.mingw.org/ (only needed for Windows) + + ocamldoc part of OCaml itself + or part of the ocaml package in Debian, Ubuntu + or packaged in Fedora as 'ocaml-ocamldoc' + + perldoc part of Perl + or packaged in Debian, Ubuntu and Fedora + + ocaml-curses from http://www.nongnu.org/ocaml-tmk/ + or packaged in Debian, Ubuntu as 'libcurses-ocaml-dev' + or packaged in Fedora as 'ocaml-curses-devel' + + Extlib from http://ocaml-lib.sourceforge.net/ + or packaged in Debian, Unbuntu as 'libextlib-ocaml-dev' + or packaged in Fedora as 'ocaml-extlib-devel' + + xml-light from http://tech.motion-twin.com/doc/xml-light/ + or packaged in Debian, Ubuntu as 'libxml-light-ocaml-dev' + or packaged in Fedora as 'ocaml-xml-light-devel' + + ocaml CSV from http://merjis.com/developers/csv + or packaged in Debian, Ubuntu as 'libcsv-ocaml-dev' + or packaged in Fedora as 'ocaml-csv-devel' + + ocaml-calendar from http://www.lri.fr/~signoles/prog.en.html + or packaged in Debian, Ubuntu as 'libcalendar-ocaml-dev' + or packaged in Fedora as 'ocaml-calendar-devel' + + bitmatch from http://et.redhat.com/~rjones/bitmatch/ + + GTK2 from http://gtk.org/ + or packaged in Debian, Ubuntu and Fedora + + lablgtk2 >= 2.10.0 + from http://wwwfun.kurims.kyoto-u.ac.jp/soft/lsl/lablgtk.html + or packaged in Debian, Ubuntu as 'liblablgtk2-ocaml-dev' + or packaged in Fedora 9 as 'ocaml-lablgtk-devel' + + gnome-icon-theme part of GNOME + + ocaml-dbus >= 0.06 + from http://tab.snarc.org/projects/ocaml_dbus/ + or packaged in Fedora 9 as 'ocaml-dbus-devel' + (not yet available for Debian or Ubuntu AFAIK) + + NSIS from http://nsis.sf.net + + +Building +---------------------------------------------------------------------- + + ./configure # Checks that you have all the required bits. + + make all # Builds the bytecode version of libs/programs. + make opt # Builds the native code version of libs/programs. + + make install # Install in OCaml directory, and the binaries + # in $prefix/bin. + + make doc # Build HTML documentation in html/ subdirectory. + +Then have a look at the programs 'mlvirsh.opt', 'virt-top.opt' +and 'virt-ctrl.opt'. + +Note: If you want to run the programs without first installing, you +may need to set your $LD_LIBRARY_PATH environment variable so it +contains the build directory. eg: + + LD_LIBRARY_PATH=libvirt/ mlvirsh/mlvirsh.opt + + +Windows +---------------------------------------------------------------------- + +I have built libvirt (the bindings), examples, mlvirsh and virt-ctrl +on Windows using the MinGW port of OCaml. It's quite likely that it +will also work under VC++, but I have not tested this. + +You should make sure that your $PATH (environment variable) contains +the names of the directories containing all required DLLs, in +particular you will require: + + libvirt-*.dll (from libvirt) + libgnutls-*.dll (from GnuTLS) + libgcrypt-*.dll + libgpg-error-*.dll + libtasn1-*.dll + libxdr.dll (from libxdr) + libxml2-*.dll (from libxml2) + and, a multitude of DLLs from GTK if you want to run virt-ctrl + +You can use a tool such as Dependency Walker to find/check the +locations of dependent libraries. + +To build the Windows installer, you will need NSIS. Then do: + + ./configure --with-nsis=/c/Progra~1/NSIS + make all opt + make wininstaller + +This should build a Windows binary installer called +ocaml-libvirt-$VERSION.exe which includes the bindings, all required +DLLs and all programs that can be built under Windows. + + +mlvirsh +---------------------------------------------------------------------- + +'mlvirsh' is an almost complete reimplementation of virsh, which is +mostly command compatible (there are a very few commands missing, and +some commands have a slightly different syntax, but broadly speaking +they are equivalent programs except that one is written in C and the +other in OCaml). + +At the time of writing: + + wc -c wc -l + + virsh 126,056 4,641 + mlvirsh 19,427 598 + + % size 15% 13% + + +virt-ctrl +---------------------------------------------------------------------- + +'virt-ctrl' (originally called 'mlvirtmanager') is a reimplementation +of virt-manager in OCaml. It is not feature-complete by any means, +but does allow you to show the running domains and start and stop +defined domains. The main functionality _missing_ is the ability to +define new virtual machines, change the resources allocated to +domains, or show the machine console. + + +Programming +---------------------------------------------------------------------- + +For documentation on these bindings, read libvirt.mli and/or 'make +doc' and browse the HTML documentation in the html/ subdirectory. + +For documentation on libvirt itself, see http://libvirt.org/html/ + + +Subdirectories +---------------------------------------------------------------------- + +libvirt/ The OCaml bindings. +examples/ Some example programs using the bindings. +mlvirsh/ 'mlvirsh' command line tool. +virt-ctrl/ 'virt-ctrl' graphical tool. +virt-top/ 'virt-top' tool. +virt-df/ 'virt-df' tool. diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..38ad15f --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,170 @@ +dnl autoconf macros for OCaml +dnl by Olivier Andrieu +dnl modified by Richard W.M. Jones +dnl from a configure.in by Jean-Christophe Filliâtre, +dnl from a first script by Georges Mariano +dnl +dnl defines AC_PROG_OCAML that will check the OCaml compiler +dnl and set the following variables : +dnl OCAMLC "ocamlc" if present in the path, or a failure +dnl or "ocamlc.opt" if present with same version number as ocamlc +dnl OCAMLOPT "ocamlopt" (or "ocamlopt.opt" if present), or "no" +dnl OCAMLBEST either "byte" if no native compiler was found, +dnl or "opt" otherwise +dnl OCAMLDEP "ocamldep" +dnl OCAMLLIB the path to the ocaml standard library +dnl OCAMLVERSION the ocaml version number +AC_DEFUN(AC_PROG_OCAML, +[dnl +# checking for ocamlc +AC_CHECK_PROG(OCAMLC,ocamlc,ocamlc,AC_MSG_ERROR(Cannot find ocamlc.)) +OCAMLVERSION=`$OCAMLC -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' ` +AC_MSG_RESULT(OCaml version is $OCAMLVERSION) +OCAMLLIB=`$OCAMLC -where 2>/dev/null || $OCAMLC -v|tail -1|cut -d ' ' -f 4` +AC_MSG_RESULT(OCaml library path is $OCAMLLIB) +# checking for ocamlopt +AC_CHECK_PROG(OCAMLOPT,ocamlopt,ocamlopt) +OCAMLBEST=byte +if test -z "$OCAMLOPT"; 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.) + unset OCAMLOPT + else + OCAMLBEST=opt + fi +fi +# checking for ocamlc.opt +AC_CHECK_PROG(OCAMLCDOTOPT,ocamlc.opt,ocamlc.opt) +if test -z "$OCAMLCDOTOPT"; 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" ; then + AC_CHECK_PROG(OCAMLOPTDOTOPT,ocamlopt.opt,ocamlopt.opt) + if test "$OCAMLOPTDOTOPT"; then + TMPVER=`$OCAMLOPTDOTOPT -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' ` + if test "$TMPVER" != "$OCAMLVERSION" ; then + AC_MSG_RESULT(version differs from ocamlc; ocamlopt.opt discarded.) + else + OCAMLOPT=$OCAMLOPTDOTOPT + fi + fi +fi +# checking for ocamldep +AC_CHECK_PROG(OCAMLDEP,ocamldep,ocamldep,AC_MSG_ERROR(Cannot find ocamldep.)) + +#checking for ocamlmktop +AC_CHECK_PROG(OCAMLMKTOP,ocamlmktop,ocamlmktop, AC_MSG_WARN(Cannot find ocamlmktop.)) +#checking for ocamlmklib +AC_CHECK_PROG(OCAMLMKLIB,ocamlmklib,ocamlmklib, AC_MSG_WARN(Cannot find ocamlmklib.)) +# checking for ocamldoc +AC_CHECK_PROG(OCAMLDOC,ocamldoc,ocamldoc, AC_MSG_WARN(Cannot find ocamldoc.)) + + +AC_SUBST(OCAMLC) +AC_SUBST(OCAMLOPT) +AC_SUBST(OCAMLDEP) +AC_SUBST(OCAMLBEST) +AC_SUBST(OCAMLVERSION) +AC_SUBST(OCAMLLIB) +AC_SUBST(OCAMLMKLIB) +AC_SUBST(OCAMLDOC) +]) + + +dnl macro AC_PROG_OCAML_TOOLS will check OCamllex and OCamlyacc : +dnl OCAMLLEX "ocamllex" or "ocamllex.opt" if present +dnl OCAMLYACC "ocamlyac" +AC_DEFUN(AC_PROG_OCAML_TOOLS, +[dnl +# checking for ocamllex and ocamlyacc +AC_CHECK_PROG(OCAMLLEX,ocamllex,ocamllex) +if test "$OCAMLLEX"; then + AC_CHECK_PROG(OCAMLLEXDOTOPT,ocamllex.opt,ocamllex.opt) + if test "$OCAMLLEXDOTOPT"; then + OCAMLLEX=$OCAMLLEXDOTOPT + fi +else + AC_MSG_ERROR(Cannot find ocamllex.) +fi +AC_CHECK_PROG(OCAMLYACC,ocamlyacc,ocamlyacc,AC_MSG_ERROR(Cannot find ocamlyacc.)) +AC_SUBST(OCAMLLEX) +AC_SUBST(OCAMLYACC) +]) + + +dnl AC_PROG_CAMLP4 checks for Camlp4 +AC_DEFUN(AC_PROG_CAMLP4, +[dnl +AC_REQUIRE([AC_PROG_OCAML]) +# checking for camlp4 +AC_CHECK_PROG(CAMLP4,camlp4,camlp4) +if test "$CAMLP4"; then + TMPVERSION=`$CAMLP4 -v 2>&1| sed -n -e 's|.*version *\(.*\)$|\1|p'` + if test "$TMPVERSION" != "$OCAMLVERSION" ; then + AC_MSG_RESULT(versions differs from ocamlc) + fi +fi +]) + + +dnl macro AC_PROG_FINDLIB will check for the presence of +dnl ocamlfind +AC_DEFUN(AC_PROG_FINDLIB, +[dnl +# checking for ocamlfind +AC_CHECK_PROG(OCAMLFIND,ocamlfind,ocamlfind, + AC_MSG_WARN([ocamlfind not found])) +AC_SUBST(OCAMLFIND) +]) + + +dnl AC_CHECK_OCAML_PKG checks wether a findlib package is present +dnl defines pkg_name to "yes" +AC_DEFUN(AC_CHECK_OCAML_PKG, +[dnl +AC_REQUIRE([AC_PROG_FINDLIB]) +AC_MSG_CHECKING(findlib package $1) +if $OCAMLFIND query $1 >/dev/null 2>/dev/null; then +AC_MSG_RESULT(found) +eval "pkg_`echo $1 | tr - _`=yes" +else +AC_MSG_RESULT(not found) +eval "pkg_`echo $1 | tr - _`=no" +fi +]) + + +dnl AC_CHECK_OCAML_MODULE looks for a module in a given path +dnl 1st arg -> name (just for printing messages) +dnl 2nd arg -> env var name (set to include path, or "no" if not found) +dnl 3rd arg -> module to check +dnl 4th arg -> default include dirs to check +AC_DEFUN([AC_CHECK_OCAML_MODULE], +[dnl +AC_MSG_CHECKING(for module $1) +cat > conftest.ml <&5 2>&5 ; then + found=yes + break + fi +done +if test "$found" ; then + AC_MSG_RESULT($$2) +else + AC_MSG_RESULT(not found) + $2=no +fi +AC_SUBST($2)]) diff --git a/config.guess b/config.guess new file mode 100755 index 0000000..396482d --- /dev/null +++ b/config.guess @@ -0,0 +1,1500 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, +# Inc. + +timestamp='2006-07-02' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + 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:SunOS:5.*:*) + echo i386-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:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + x86:Interix*:[3456]*) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T:Interix*:[3456]*) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + 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 ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${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-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; 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.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-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; } ;; + 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.0*:*) + 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 ;; + 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 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config.h.in b/config.h.in new file mode 100644 index 0000000..ab90ff8 --- /dev/null +++ b/config.h.in @@ -0,0 +1,216 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `ncurses' library (-lncurses). */ +#undef HAVE_LIBNCURSES + +/* Define to 1 if you have the `virt' library (-lvirt). */ +#undef HAVE_LIBVIRT + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the `virConnectGetHostname' function. */ +#undef HAVE_VIRCONNECTGETHOSTNAME + +/* Define to 1 if you have the `virConnectGetURI' function. */ +#undef HAVE_VIRCONNECTGETURI + +/* Define to 1 if you have the `virConnectListDefinedStoragePools' function. + */ +#undef HAVE_VIRCONNECTLISTDEFINEDSTORAGEPOOLS + +/* Define to 1 if you have the `virConnectListStoragePools' function. */ +#undef HAVE_VIRCONNECTLISTSTORAGEPOOLS + +/* Define to 1 if you have the `virConnectNumOfDefinedStoragePools' function. + */ +#undef HAVE_VIRCONNECTNUMOFDEFINEDSTORAGEPOOLS + +/* Define to 1 if you have the `virConnectNumOfStoragePools' function. */ +#undef HAVE_VIRCONNECTNUMOFSTORAGEPOOLS + +/* Define to 1 if you have the `virDomainBlockStats' function. */ +#undef HAVE_VIRDOMAINBLOCKSTATS + +/* Define to 1 if you have the `virDomainGetSchedulerParameters' function. */ +#undef HAVE_VIRDOMAINGETSCHEDULERPARAMETERS + +/* Define to 1 if you have the `virDomainGetSchedulerType' function. */ +#undef HAVE_VIRDOMAINGETSCHEDULERTYPE + +/* Define to 1 if you have the `virDomainInterfaceStats' function. */ +#undef HAVE_VIRDOMAININTERFACESTATS + +/* Define to 1 if you have the `virDomainMigrate' function. */ +#undef HAVE_VIRDOMAINMIGRATE + +/* Define to 1 if you have the `virDomainSetSchedulerParameters' function. */ +#undef HAVE_VIRDOMAINSETSCHEDULERPARAMETERS + +/* Define to 1 if the system has the type `virJobPtr'. */ +#undef HAVE_VIRJOBPTR + +/* Define to 1 if you have the `virNodeGetCellsFreeMemory' function. */ +#undef HAVE_VIRNODEGETCELLSFREEMEMORY + +/* Define to 1 if you have the `virNodeGetFreeMemory' function. */ +#undef HAVE_VIRNODEGETFREEMEMORY + +/* Define to 1 if you have the `virStoragePoolBuild' function. */ +#undef HAVE_VIRSTORAGEPOOLBUILD + +/* Define to 1 if you have the `virStoragePoolCreate' function. */ +#undef HAVE_VIRSTORAGEPOOLCREATE + +/* Define to 1 if you have the `virStoragePoolCreateXML' function. */ +#undef HAVE_VIRSTORAGEPOOLCREATEXML + +/* Define to 1 if you have the `virStoragePoolDefineXML' function. */ +#undef HAVE_VIRSTORAGEPOOLDEFINEXML + +/* Define to 1 if you have the `virStoragePoolDelete' function. */ +#undef HAVE_VIRSTORAGEPOOLDELETE + +/* Define to 1 if you have the `virStoragePoolDestroy' function. */ +#undef HAVE_VIRSTORAGEPOOLDESTROY + +/* Define to 1 if you have the `virStoragePoolFree' function. */ +#undef HAVE_VIRSTORAGEPOOLFREE + +/* Define to 1 if you have the `virStoragePoolGetAutostart' function. */ +#undef HAVE_VIRSTORAGEPOOLGETAUTOSTART + +/* Define to 1 if you have the `virStoragePoolGetConnect' function. */ +#undef HAVE_VIRSTORAGEPOOLGETCONNECT + +/* Define to 1 if you have the `virStoragePoolGetInfo' function. */ +#undef HAVE_VIRSTORAGEPOOLGETINFO + +/* Define to 1 if you have the `virStoragePoolGetName' function. */ +#undef HAVE_VIRSTORAGEPOOLGETNAME + +/* Define to 1 if you have the `virStoragePoolGetUUID' function. */ +#undef HAVE_VIRSTORAGEPOOLGETUUID + +/* Define to 1 if you have the `virStoragePoolGetUUIDString' function. */ +#undef HAVE_VIRSTORAGEPOOLGETUUIDSTRING + +/* Define to 1 if you have the `virStoragePoolGetXMLDesc' function. */ +#undef HAVE_VIRSTORAGEPOOLGETXMLDESC + +/* Define to 1 if you have the `virStoragePoolListVolumes' function. */ +#undef HAVE_VIRSTORAGEPOOLLISTVOLUMES + +/* Define to 1 if you have the `virStoragePoolLookupByName' function. */ +#undef HAVE_VIRSTORAGEPOOLLOOKUPBYNAME + +/* Define to 1 if you have the `virStoragePoolLookupByUUID' function. */ +#undef HAVE_VIRSTORAGEPOOLLOOKUPBYUUID + +/* Define to 1 if you have the `virStoragePoolLookupByUUIDString' function. */ +#undef HAVE_VIRSTORAGEPOOLLOOKUPBYUUIDSTRING + +/* Define to 1 if you have the `virStoragePoolLookupByVolume' function. */ +#undef HAVE_VIRSTORAGEPOOLLOOKUPBYVOLUME + +/* Define to 1 if you have the `virStoragePoolNumOfVolumes' function. */ +#undef HAVE_VIRSTORAGEPOOLNUMOFVOLUMES + +/* Define to 1 if the system has the type `virStoragePoolPtr'. */ +#undef HAVE_VIRSTORAGEPOOLPTR + +/* Define to 1 if you have the `virStoragePoolRefresh' function. */ +#undef HAVE_VIRSTORAGEPOOLREFRESH + +/* Define to 1 if you have the `virStoragePoolSetAutostart' function. */ +#undef HAVE_VIRSTORAGEPOOLSETAUTOSTART + +/* Define to 1 if you have the `virStoragePoolUndefine' function. */ +#undef HAVE_VIRSTORAGEPOOLUNDEFINE + +/* Define to 1 if you have the `virStorageVolCreateXML' function. */ +#undef HAVE_VIRSTORAGEVOLCREATEXML + +/* Define to 1 if you have the `virStorageVolDelete' function. */ +#undef HAVE_VIRSTORAGEVOLDELETE + +/* Define to 1 if you have the `virStorageVolFree' function. */ +#undef HAVE_VIRSTORAGEVOLFREE + +/* Define to 1 if you have the `virStorageVolGetInfo' function. */ +#undef HAVE_VIRSTORAGEVOLGETINFO + +/* Define to 1 if you have the `virStorageVolGetKey' function. */ +#undef HAVE_VIRSTORAGEVOLGETKEY + +/* Define to 1 if you have the `virStorageVolGetName' function. */ +#undef HAVE_VIRSTORAGEVOLGETNAME + +/* Define to 1 if you have the `virStorageVolGetPath' function. */ +#undef HAVE_VIRSTORAGEVOLGETPATH + +/* Define to 1 if you have the `virStorageVolGetXMLDesc' function. */ +#undef HAVE_VIRSTORAGEVOLGETXMLDESC + +/* Define to 1 if you have the `virStorageVolLookupByKey' function. */ +#undef HAVE_VIRSTORAGEVOLLOOKUPBYKEY + +/* Define to 1 if you have the `virStorageVolLookupByName' function. */ +#undef HAVE_VIRSTORAGEVOLLOOKUPBYNAME + +/* Define to 1 if you have the `virStorageVolLookupByPath' function. */ +#undef HAVE_VIRSTORAGEVOLLOOKUPBYPATH + +/* Define to 1 if the system has the type `virStorageVolPtr'. */ +#undef HAVE_VIRSTORAGEVOLPTR + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if the C compiler supports function prototypes. */ +#undef PROTOTYPES + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define like PROTOTYPES; this can be used by system headers. */ +#undef __PROTOTYPES diff --git a/config.sub b/config.sub new file mode 100755 index 0000000..fab0aa3 --- /dev/null +++ b/config.sub @@ -0,0 +1,1616 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, +# Inc. + +timestamp='2006-09-20' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | score \ + | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + 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 + ;; + cr16c) + basic_machine=cr16c-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 + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..09d5505 --- /dev/null +++ b/configure.ac @@ -0,0 +1,411 @@ +# ocaml-libvirt +# Copyright (C) 2007-2008 Red Hat Inc., Richard W.M. Jones +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +dnl Process this file with autoconf to produce a configure script. + +AC_INIT(ocaml-libvirt,0.4.1.1) + +dnl Check for basic C environment. +AC_PROG_CC +AC_PROG_INSTALL +AC_PROG_CPP + +AC_C_PROTOTYPES +test "x$U" != "x" && AC_MSG_ERROR(Compiler not ANSI compliant) + +AC_PROG_CC_C_O + +dnl Select some C flags based on the host type. +AC_CANONICAL_HOST + +DEBUG="-g" +WARNINGS="-Wall -Werror" +CFLAGS_FPIC="-fPIC" +WIN32=no +case "$host" in + *-*-mingw*) + WARNINGS="$WARNINGS -Wno-unused" + CFLAGS_FPIC="" + WIN32=yes +esac +AC_SUBST(DEBUG) +AC_SUBST(WARNINGS) +AC_SUBST(CFLAGS_FPIC) +AC_SUBST(WIN32) + +dnl Check for libvirt development environment. +AC_ARG_WITH(libvirt, + AC_HELP_STRING([--with-libvirt=PATH],[Set path to installed libvirt]), + [if test "x$withval" != "x"; then + CFLAGS="$CFLAGS -I$withval/include" + LDFLAGS="$LDFLAGS -L$withval/lib" + fi + ]) +AC_CHECK_LIB(virt,virConnectOpen, + [], + AC_MSG_ERROR([You must install libvirt library])) +AC_CHECK_HEADER([libvirt/libvirt.h], + [], + AC_MSG_ERROR([You must install libvirt development package])) + +dnl We also use +AC_CHECK_HEADER([libvirt/virterror.h], + [], + AC_MSG_ERROR([You must install libvirt development package])) + +dnl Check for libvirt >= 0.2.1 (our minimum supported version). +dnl See: http://libvirt.org/hvsupport.html +AC_CHECK_FUNC(virConnectGetCapabilities, + [], + AC_MSG_ERROR([You must have libvirt >= 0.2.1])) + +dnl Check for optional libvirt functions added since 0.2.1. +dnl See: http://libvirt.org/hvsupport.html +AC_CHECK_FUNCS([virConnectGetHostname \ + virConnectGetURI \ + virDomainBlockStats \ + virDomainGetSchedulerParameters \ + virDomainGetSchedulerType \ + virDomainInterfaceStats \ + virDomainMigrate \ + virDomainSetSchedulerParameters \ + virNodeGetFreeMemory \ + virNodeGetCellsFreeMemory \ + virStoragePoolGetConnect \ + virConnectNumOfStoragePools \ + virConnectListStoragePools \ + virConnectNumOfDefinedStoragePools \ + virConnectListDefinedStoragePools \ + virStoragePoolLookupByName \ + virStoragePoolLookupByUUID \ + virStoragePoolLookupByUUIDString \ + virStoragePoolLookupByVolume \ + virStoragePoolCreateXML \ + virStoragePoolDefineXML \ + virStoragePoolBuild \ + virStoragePoolUndefine \ + virStoragePoolCreate \ + virStoragePoolDestroy \ + virStoragePoolDelete \ + virStoragePoolFree \ + virStoragePoolRefresh \ + virStoragePoolGetName \ + virStoragePoolGetUUID \ + virStoragePoolGetUUIDString \ + virStoragePoolGetInfo \ + virStoragePoolGetXMLDesc \ + virStoragePoolGetAutostart \ + virStoragePoolSetAutostart \ + virStoragePoolNumOfVolumes \ + virStoragePoolListVolumes \ + virStorageVolLookupByName \ + virStorageVolLookupByKey \ + virStorageVolLookupByPath \ + virStorageVolGetName \ + virStorageVolGetKey \ + virStorageVolCreateXML \ + virStorageVolDelete \ + virStorageVolFree \ + virStorageVolGetInfo \ + virStorageVolGetXMLDesc \ + virStorageVolGetPath \ +]) + +# This jobs API was never published and is due to get overhauled +# in the near future: +# virJobGetInfo +# virJobGetDomain +# virJobGetNetwork +# virJobCancel +# virJobFree +# virDomainCreateLinuxJob +# virDomainSaveJob +# virDomainRestoreJob +# virDomainCoreDumpJob +# virDomainCreateJob +# virNetworkCreateXMLJob +# virNetworkCreateJob + +dnl Check for optional types added since 0.2.1. +AC_CHECK_TYPES([virJobPtr, virStoragePoolPtr, virStorageVolPtr],,, + [#include ]) + +dnl Check for optional ncurses. +AC_CHECK_LIB(ncurses,initscr) + +dnl Check for optional GNOME icons (from gnome-icon-theme package). +AC_ARG_WITH(icons, + AC_HELP_STRING([--with-icons=PATH], + [Set path to installed icons @<:@default=/usr/share/icons@:>@]), + [],[with_icons=/usr/share/icons]) +icons="" +if test "x$with_icons" != "xno"; then + for size in 16 24 32 48; do + for f in devices/computer.png; do + fname="${with_icons}/gnome/${size}x${size}/${f}" + AC_MSG_CHECKING([checking for icon $fname]) + if test -f "$fname"; then + AC_MSG_RESULT([yes]) + icons="$size $f $fname $icons" + else + AC_MSG_RESULT([no]) + fi + done + done +fi +AC_SUBST(with_icons) +AC_SUBST(icons) + +dnl Check for basic OCaml environment & findlib. +dnl Note that findlib is not necessary, but things will work better +dnl if it is present. +AC_PROG_OCAML +AC_PROG_FINDLIB + +if test "x$OCAMLFIND" != "x"; then + dnl Use ocamlfind to find the required packages ... + + dnl Check for required OCaml packages. + AC_CHECK_OCAML_PKG(unix) + if test "x$pkg_unix" != "xyes"; then + AC_MSG_ERROR([Cannot find required OCaml package 'unix']) + fi + + dnl Check for optional OCaml packages. + AC_CHECK_OCAML_PKG(extlib) + AC_CHECK_OCAML_PKG(lablgtk2) + AC_CHECK_OCAML_PKG(curses) + AC_CHECK_OCAML_PKG(gettext) + AC_CHECK_OCAML_PKG(xml-light) + AC_CHECK_OCAML_PKG(csv) + AC_CHECK_OCAML_PKG(dbus) + AC_CHECK_OCAML_PKG(gettext) + AC_CHECK_OCAML_PKG(bitmatch) + + dnl Need to check which version of calendar is installed. + AC_CHECK_OCAML_MODULE(calendar,pkg_calendar2,CalendarLib.Date,[+calendar]) + if test "x$pkg_calendar2" = "xno"; then + AC_CHECK_OCAML_PKG(calendar) + fi + + AC_SUBST(pkg_unix) + AC_SUBST(pkg_extlib) + AC_SUBST(pkg_lablgtk2) + AC_SUBST(pkg_curses) + AC_SUBST(pkg_gettext) + AC_SUBST(pkg_xml_light) + AC_SUBST(pkg_csv) + AC_SUBST(pkg_dbus) + AC_SUBST(pkg_gettext) + AC_SUBST(pkg_calendar) + AC_SUBST(pkg_calendar2) +else + dnl Use a basic module test if there is no findlib ... + + dnl Check for required OCaml modules. + AC_CHECK_OCAML_MODULE(unix,pkg_unix,Unix,[.]) + if test "x$pkg_unix" = "xno"; then + AC_MSG_ERROR([Cannot find required OCaml package 'unix']) + fi + + dnl Check for optional OCaml modules. + AC_CHECK_OCAML_MODULE(extlib,pkg_extlib,ExtString,[+extlib]) + AC_CHECK_OCAML_MODULE(lablgtk2,pkg_lablgtk2,GMain,[+lablgtk2]) + AC_CHECK_OCAML_MODULE(curses,pkg_curses,Curses,[+curses]) + AC_CHECK_OCAML_MODULE(gettext,pkg_gettext,Gettext,[+gettext]) dnl XXX + AC_CHECK_OCAML_MODULE(xml-light,pkg_xml_light,Xml,[+xml-light]) + AC_CHECK_OCAML_MODULE(csv,pkg_csv,Csv,[+csv]) + AC_CHECK_OCAML_MODULE(dbus,pkg_dbus,DBus,[+dbus]) + AC_CHECK_OCAML_MODULE(gettext,pkg_gettext,Gettext,[+gettext]) + AC_CHECK_OCAML_MODULE(bitmatch,pkg_bitmatch,Bitmatch,[+bitmatch]) + dnl XXX Version check - see above. + AC_CHECK_OCAML_MODULE(calendar,pkg_calendar,Calendar,[+calendar]) +fi + +dnl Which subpackages (== subdirs) will we build? +subdirs="libvirt examples mlvirsh" +if test "x$pkg_lablgtk2" != "xno"; then + subdirs="$subdirs virt-ctrl" +fi +if test "x$pkg_extlib" != "xno" -a "x$pkg_curses" != "xno"; then + subdirs="$subdirs virt-top" +fi +if test "x$pkg_extlib" != "xno" \ + -a "x$pkg_xml_light" != "xno" \ + -a "x$pkg_bitmatch" != "xno"; then + subdirs="$subdirs virt-df" +fi +AC_SUBST(subdirs) + +dnl Check for optional perldoc (for building manual pages). +AC_CHECK_PROG(HAVE_PERLDOC,perldoc,perldoc) + +dnl Check for optional gdk-pixbuf-mlsource (for icons). +AC_CHECK_PROG(HAVE_GDK_PIXBUF_MLSOURCE,gdk-pixbuf-mlsource,gdk-pixbuf-mlsource) + +dnl Check for recommended ocaml-gettext tool. +AC_CHECK_PROG(OCAML_GETTEXT,ocaml-gettext,ocaml-gettext) + +dnl Check for optional NSIS (for building a Windows installer). +AC_ARG_WITH([nsis], + [AS_HELP_STRING([--with-nsis], + [use NSIS to build a Windows installer])], + [], + [with_nsis=no]) + +MAKENSIS= +LIBVIRT_DLL_PATH= +LIBXDR_DLL_PATH= +LIBXML2_DLL_PATH= +GNUTLS_DLL_PATH= +GTK_PATH= +GTK_DLL_PATH= + +[ +msys_to_win_dir () { + eval pushd "\$$1" > /dev/null + eval $1=`pwd -W` + popd > /dev/null +} +] + +if test "x$with_nsis" != "xno"; then + AC_PATH_PROG(MAKENSIS,makensis,[],[$with_nsis:$PATH]) + if test "x$MAKENSIS" = "x"; then + AC_MSG_FAILURE([--with-nsis was given, but could not find MAKENSIS.EXE]) + fi + + # MAKENSIS is set so we will build a rule for making a Windows + # installer. To support this, generate wininstaller.nsis. + saved_IFS=$IFS + IFS=$PATH_SEPARATOR + for d in $PATH; do + IFS=$saved_IFS + echo Checking $d for DLLs ... >&5 + if test -f "$d/libvirt-0.dll"; then + LIBVIRT_DLL_PATH="$d" + fi + if test -f "$d/libxdr.dll"; then + LIBXDR_DLL_PATH="$d" + fi + if test -f "$d/libxml2-2.dll"; then + LIBXML2_DLL_PATH="$d" + fi + if test -f "$d/libgpg-error-0.dll"; then + GNUTLS_DLL_PATH="$d" + fi + if test -f "$d/libgtk-win32-2.0-0.dll"; then + GTK_DLL_PATH="$d" + GTK_PATH="$d/.." + fi + done + IFS=$saved_IFS + + if test "x$LIBVIRT_DLL_PATH" = "x"; then + AC_MSG_FAILURE([cannot find libvirt-0.dll in PATH]) + fi + if test "x$LIBXDR_DLL_PATH" = "x"; then + AC_MSG_FAILURE([cannot find libxdr.dll in PATH]) + fi + if test "x$LIBXML2_DLL_PATH" = "x"; then + AC_MSG_FAILURE([cannot find libxml2-2.dll in PATH]) + fi + if test "x$GNUTLS_DLL_PATH" = "x"; then + AC_MSG_FAILURE([cannot find GnuTLS DLLs in PATH]) + fi + if test "x$GTK_DLL_PATH" = "x"; then + AC_MSG_WARN([cannot find GTK DLLs in PATH]) + fi + + # Change the paths to Windows paths. + msys_to_win_dir LIBVIRT_DLL_PATH + msys_to_win_dir LIBXDR_DLL_PATH + msys_to_win_dir LIBXML2_DLL_PATH + msys_to_win_dir GNUTLS_DLL_PATH + if test "x$GTK_DLL_PATH" != "x"; then + msys_to_win_dir GTK_DLL_PATH + msys_to_win_dir GTK_PATH + fi +fi +AC_SUBST(MAKENSIS) +AC_SUBST(LIBVIRT_DLL_PATH) +AC_SUBST(LIBXDR_DLL_PATH) +AC_SUBST(LIBXML2_DLL_PATH) +AC_SUBST(GNUTLS_DLL_PATH) +AC_SUBST(GTK_DLL_PATH) +AC_SUBST(GTK_PATH) + +dnl Write gettext modules for the programs. +dnl http://www.le-gall.net/sylvain+violaine/documentation/ocaml-gettext/html/reference-manual/ch03s04.html +for d in mlvirsh virt-ctrl virt-df virt-top; do + f=`echo $d | tr - _`_gettext.ml + AC_MSG_NOTICE([creating $d/$f]) + rm -f $d/$f + echo "(* This file is generated automatically by ./configure. *)" > $d/$f + if test "x$pkg_gettext" != "xno"; then + # Gettext module is available, so use it. + cat <>$d/$f +module Gettext = Gettext.Program ( + struct + let textdomain = "$d" + let codeset = None + let dir = None + let dependencies = [[]] + end +) (GettextStub.Native) +EOT + else + # No gettext module is available, so fake the translation functions. + cat <>$d/$f +module Gettext = struct + external s_ : string -> string = "%identity" + external f_ : ('a -> 'b, 'c, 'd) format -> ('a -> 'b, 'c, 'd) format + = "%identity" + let sn_ : string -> string -> int -> string + = fun s p n -> if n = 1 then s else p + let fn_ : ('a -> 'b, 'c, 'd) format -> ('a -> 'b, 'c, 'd) format -> int + -> ('a -> 'b, 'c, 'd) format + = fun s p n -> if n = 1 then s else p +end +EOT + fi +done + +dnl Summary. +echo "------------------------------------------------------------" +echo "Thanks for downloading" $PACKAGE_STRING +echo " subpackages to build : $subdirs" +echo "------------------------------------------------------------" + +dnl Produce output files. +AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_FILES([META + libvirt/libvirt_version.ml + Makefile + Make.rules + po/Makefile + libvirt/Makefile + examples/Makefile + mlvirsh/Makefile + virt-ctrl/Makefile + virt-top/Makefile + virt-df/Makefile + ]) +if test "x$MAKENSIS" != "x"; then + AC_CONFIG_FILES([wininstaller.nsis]) +fi +AC_OUTPUT diff --git a/install-sh b/install-sh new file mode 100755 index 0000000..4fbbae7 --- /dev/null +++ b/install-sh @@ -0,0 +1,507 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2006-10-14.15 + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +posix_glob= +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chmodcmd=$chmodprog +chowncmd= +chgrpcmd= +stripcmd= +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src= +dst= +dir_arg= +dstarg= +no_target_directory= + +usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: +-c (ignored) +-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. +--help display this help and exit. +--version display version info and exit. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + shift + shift + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -s) stripcmd=$stripprog + shift + continue;; + + -t) dstarg=$2 + shift + shift + continue;; + + -T) no_target_directory=true + shift + continue;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac +done + +if test $# -ne 0 && test -z "$dir_arg$dstarg"; 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 "$dstarg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dstarg" + shift # fnord + fi + shift # arg + dstarg=$arg + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src ;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dstarg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dstarg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst ;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dstarg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix=/ ;; + -*) prefix=./ ;; + *) prefix= ;; + esac + + case $posix_glob in + '') + if (set -f) 2>/dev/null; then + posix_glob=true + else + posix_glob=false + fi ;; + esac + + oIFS=$IFS + IFS=/ + $posix_glob && set -f + set fnord $dstdir + shift + $posix_glob && set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ + && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ + && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ + && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # Now 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. + { + if test -f "$dst"; then + $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 + } + else + : + fi + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + } || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/po/LINGUAS b/po/LINGUAS new file mode 100644 index 0000000..ffff11a --- /dev/null +++ b/po/LINGUAS @@ -0,0 +1,2 @@ +ja +pl diff --git a/po/Makefile.in b/po/Makefile.in new file mode 100644 index 0000000..9398e2f --- /dev/null +++ b/po/Makefile.in @@ -0,0 +1,79 @@ +# Makefile for po subdirectory. +# @configure_input@ +# +# Copyright (C) 2007-2008 Red Hat Inc. +# Written by Richard W.M. Jones +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +OCAML_GETTEXT_PACKAGE = virt-top +LINGUAS = $(shell cat LINGUAS) +SOURCES = POTFILES + +OCAML_GETTEXT = @OCAML_GETTEXT@ +OCAML_GETTEXT_EXTRACT_OPTIONS = +OCAML_GETTEXT_COMPILE_OPTIONS = +OCAML_GETTEXT_INSTALL_OPTIONS = +OCAML_GETTEXT_MERGE_OPTIONS = + +PODIR = @prefix@/share/locale + +POFILES = $(addsuffix .po,$(LINGUAS)) +MOFILES = $(addsuffix .mo,$(LINGUAS)) +POTFILE = $(OCAML_GETTEXT_PACKAGE).pot + +all: $(MOFILES) $(POTFILE) + +install: install-po + +uninstall: uninstall-po + +clean:: clean-po + +%.mo: %.po + $(OCAML_GETTEXT) --action compile $(OCAML_GETTEXT_COMPILE_OPTIONS) \ + --compile-output $@ $^ + +%.pot: $(SOURCES) $(shell cat $(SOURCES)) + $(OCAML_GETTEXT) --action extract $(OCAML_GETTEXT_EXTRACT_OPTIONS) \ + --extract-pot $@ $< + +# Also includes a fix for incorrectly escaped multi-byte sequences. +%.po: $(POTFILE) + $(OCAML_GETTEXT) --action merge $(OCAML_GETTEXT_MERGE_OPTIONS) \ + --merge-pot $(POTFILE) $@ + mv $@ $@.orig + perl -wpe 's/\\(\d{3})/pack "C*", $$1/ge' < $@.orig > $@ + +$(BUILDPO): + mkdir -p $(BUILDPO) + +.PRECIOUS: $(POTFILE) + +install-po: $(MOFILES) + $(OCAML_GETTEXT) --action install $(OCAML_GETTEXT_INSTALL_OPTIONS) \ + --install-textdomain $(OCAML_GETTEXT_PACKAGE) \ + --install-destdir $(PODIR) $(MOFILES) + +uninstall-po: + $(OCAML_GETTEXT) --action uninstall $(OCAML_GETTEXT_INSTALL_OPTIONS) \ + --uninstall-textdomain $(OCAML_GETTEXT_PACKAGE) \ + --uninstall-orgdir $(PODIR) $(MOFILES) + +clean-po: + -$(OCAML_GETTEXT) --action uninstall $(OCAML_GETTEXT_INSTALL_OPTIONS) \ + --uninstall-textdomain $(OCAML_GETTEXT_PACKAGE) \ + --uninstall-orgdir $(BUILDPO) $(MOFILES) + -$(RM) $(MOFILES) diff --git a/po/POTFILES b/po/POTFILES new file mode 100644 index 0000000..938a847 --- /dev/null +++ b/po/POTFILES @@ -0,0 +1,22 @@ +../mlvirsh/mlvirsh.ml +../virt-ctrl/mingw-gcc-wrapper.ml +../virt-ctrl/vc_connection_dlg.ml +../virt-ctrl/vc_connections.ml +../virt-ctrl/vc_dbus.ml +../virt-ctrl/vc_domain_ops.ml +../virt-ctrl/vc_helpers.ml +../virt-ctrl/vc_icons.ml +../virt-ctrl/vc_mainwindow.ml +../virt-ctrl/virt_ctrl.ml +../virt-df/virt_df_ext2.ml +../virt-df/virt_df_linux_swap.ml +../virt-df/virt_df_lvm2.ml +../virt-df/virt_df_main.ml +../virt-df/virt_df.ml +../virt-top/virt_top_calendar1.ml +../virt-top/virt_top_calendar2.ml +../virt-top/virt_top_csv.ml +../virt-top/virt_top_main.ml +../virt-top/virt_top.ml +../virt-top/virt_top_utils.ml +../virt-top/virt_top_xml.ml diff --git a/po/ja.po b/po/ja.po new file mode 100644 index 0000000..ebef7a4 --- /dev/null +++ b/po/ja.po @@ -0,0 +1,1017 @@ +msgid "" +msgstr "" +"Project-Id-Version: virt-p2v--devel\n" +"Report-Msgid-Bugs-To: rjones@redhat.com\n" +"POT-Creation-Date: 2008-03-22 15:53+0000\n" +"PO-Revision-Date: 2008-03-28 17:00+0000\n" +"Last-Translator: Naoko - \n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../virt-top/virt_top.ml:1490 +msgid "# .virt-toprc virt-top configuration file\\n" +msgstr "" + +#: ../virt-top/virt_top.ml:1508 +msgid "# Enable CSV output to the named file\\n" +msgstr "" + +#: ../virt-top/virt_top.ml:1511 +msgid "# To protect this file from being overwritten, uncomment next line\\n" +msgstr "" + +#: ../virt-top/virt_top.ml:1505 +msgid "# To send debug and error messages to a file, uncomment next line\\n" +msgstr "" + +#: ../virt-top/virt_top.ml:1491 +msgid "# generated on %s by %s\\n" +msgstr "" + +#: ../virt-top/virt_top.ml:63 +msgid "%CPU" +msgstr "" + +#: ../virt-top/virt_top.ml:64 +msgid "%MEM" +msgstr "" + +#: ../virt-top/virt_top.ml:1144 +msgid "%d domains, %d active, %d running, %d sleeping, %d paused, %d inactive D:%d O:%d X:%d" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:716 +msgid "%s: command not found" +msgstr "" + +#: ../virt-top/virt_top.ml:105 +msgid "%s: display should be %s" +msgstr "" + +#: ../virt-top/virt_top.ml:82 +msgid "%s: sort order should be: %s" +msgstr "" + +#: ../virt-top/virt_top.ml:202 ../virt-df/virt_df.ml:362 +msgid "%s: unknown parameter" +msgstr "" + +#: ../virt-top/virt_top.ml:233 +msgid "%s:%d: configuration item ``%s'' ignored\\n%!" +msgstr "" + +#: ../virt-df/virt_df.ml:514 +msgid "(device omitted)" +msgstr "" + +#: ../virt-top/virt_top.ml:145 +msgid "-d: cannot set a negative delay" +msgstr "" + +#: ../virt-df/virt_df.ml:498 +msgid "1K-blocks" +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:97 +msgid "About ..." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:399 +msgid "Attach device to domain." +msgstr "" + +#: ../virt-df/virt_df.ml:498 ../virt-df/virt_df.ml:499 +msgid "Available" +msgstr "" + +#: ../virt-top/virt_top.ml:167 +msgid "Batch mode" +msgstr "" + +#: ../virt-top/virt_top.ml:70 +msgid "Block read reqs" +msgstr "" + +#: ../virt-top/virt_top.ml:71 +msgid "Block write reqs" +msgstr "" + +#: ../virt-ctrl/vc_connections.ml:408 +msgid "CPU" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:365 +msgid "CPU affinity" +msgstr "" + +#: ../virt-top/virt_top.ml:1151 +msgid "CPU: %2.1f%% Mem: %Ld MB (%Ld MB by guests)" +msgstr "" + +#: ../virt-ctrl/vc_connection_dlg.ml:182 +msgid "Cancel" +msgstr "" + +#: ../virt-top/virt_top.ml:1319 +msgid "Change delay from %.1f to: " +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:409 +msgid "Close an existing hypervisor connection." +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:118 +msgid "Connect ..." +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:160 +msgid "Connect to ..." +msgstr "" + +#: ../virt-top/virt_top.ml:169 ../virt-top/virt_top.ml:171 ../virt-df/virt_df.ml:346 ../virt-df/virt_df.ml:348 +msgid "Connect to URI (default: Xen)" +msgstr "" + +#: ../virt-top/virt_top.ml:1558 +msgid "Connect: %s; Hostname: %s" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:476 +msgid "Core dump a domain to a file for analysis." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:422 +msgid "Create a domain from an XML file." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:534 +msgid "Create a network from an XML file." +msgstr "" + +#: ../virt-top/virt_top.ml:1596 +msgid "DISPLAY MODES" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:426 +msgid "Define (but don't start) a domain from an XML file." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:538 +msgid "Define (but don't start) a network from an XML file." +msgstr "" + +#: ../virt-top/virt_top.ml:1326 +msgid "Delay must be > 0" +msgstr "" + +#: ../virt-top/virt_top.ml:181 +msgid "Delay time interval (seconds)" +msgstr "" + +#: ../virt-top/virt_top.ml:1552 +msgid "Delay: %.1f secs; Batch: %s; Secure: %s; Sort: %s" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:433 +msgid "Destroy a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:541 +msgid "Destroy a network." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:430 +msgid "Detach device from domain." +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:123 +msgid "Details" +msgstr "" + +#: ../virt-top/virt_top.ml:175 +msgid "Disable CPU stats in CSV" +msgstr "" + +#: ../virt-top/virt_top.ml:177 +msgid "Disable block device stats in CSV" +msgstr "" + +#: ../virt-top/virt_top.ml:179 +msgid "Disable net stats in CSV" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:493 +msgid "Display free memory for machine, NUMA cell or range of cells" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:437 +msgid "Display the block device statistics for a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:444 +msgid "Display the network interface statistics for a domain." +msgstr "" + +#: ../virt-df/virt_df.ml:358 +msgid "Display version and exit" +msgstr "" + +#: ../virt-top/virt_top.ml:191 +msgid "Do not read init file" +msgstr "" + +#: ../virt-top/virt_top.ml:66 +msgid "Domain ID" +msgstr "" + +#: ../virt-top/virt_top.ml:67 +msgid "Domain name" +msgstr "" + +#: ../virt-top/virt_top.ml:1610 +msgid "Domains display" +msgstr "" + +#: ../virt-top/virt_top.ml:1528 ../virt-top/virt_top_main.ml:47 ../virt-ctrl/vc_mainwindow.ml:61 +msgid "Error" +msgstr "エラー" + +#: ../virt-top/virt_top.ml:185 +msgid "Exit at given time" +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:79 +msgid "File" +msgstr "ファイル" + +#: ../virt-df/virt_df.ml:502 +msgid "Filesystem" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:606 +msgid "Get the current scheduler parameters for a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:623 +msgid "Get the scheduler type." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:635 +msgid "Gracefully shutdown a domain." +msgstr "" + +#: ../virt-top/virt_top.ml:1580 ../virt-ctrl/vc_mainwindow.ml:80 ../virt-ctrl/vc_mainwindow.ml:96 +msgid "Help" +msgstr "" + +#: ../virt-top/virt_top.ml:187 +msgid "Historical CPU delay" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:35 +msgid "Hypervisor connection URI" +msgstr "" + +#: ../virt-ctrl/vc_connections.ml:405 +msgid "ID" +msgstr "" + +#: ../virt-df/virt_df.ml:500 +msgid "IFree" +msgstr "" + +#: ../virt-df/virt_df.ml:500 +msgid "IUse" +msgstr "" + +#: ../virt-df/virt_df.ml:500 +msgid "Inodes" +msgstr "" + +#: ../virt-df/virt_df_lvm2.ml:33 +msgid "LVM2 not supported yet" +msgstr "" + +#: ../virt-df/virt_df_ext2.ml:82 +msgid "Linux ext2/3" +msgstr "" + +#: ../virt-df/virt_df_linux_swap.ml:33 +msgid "Linux swap" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:557 +msgid "List the active networks." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:565 +msgid "List the defined but inactive networks." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:516 +msgid "List the defined but not running domains." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:508 +msgid "List the running domains." +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:158 +msgid "Local QEMU/KVM" +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:157 +msgid "Local Xen" +msgstr "" + +#: ../virt-ctrl/vc_connection_dlg.ml:93 +msgid "Local network" +msgstr "" + +#: ../virt-top/virt_top.ml:173 +msgid "Log statistics to CSV file" +msgstr "" + +#: ../virt-top/virt_top.ml:1563 +msgid "MAIN KEYS" +msgstr "" + +#: ../virt-ctrl/vc_connections.ml:409 +msgid "Memory" +msgstr "" + +#: ../virt-top/virt_top.ml:1617 +msgid "More help in virt-top(1) man page. Press any key to return." +msgstr "" + +#: ../virt-top/virt_top.ml:258 ../virt-df/virt_df.ml:382 +msgid "NB: If you want to monitor a local Xen hypervisor, you usually need to be root" +msgstr "" + +#: ../virt-ctrl/vc_connections.ml:406 +msgid "Name" +msgstr "" + +#: ../virt-top/virt_top.ml:68 +msgid "Net RX bytes" +msgstr "" + +#: ../virt-top/virt_top.ml:69 +msgid "Net TX bytes" +msgstr "" + +#: ../virt-top/virt_top.ml:1332 +msgid "Not a valid number" +msgstr "" + +#: ../virt-top/virt_top.ml:193 +msgid "Number of iterations to run" +msgstr "" + +#: ../virt-ctrl/vc_connection_dlg.ml:137 ../virt-ctrl/vc_connection_dlg.ml:170 +msgid "Open" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:418 +msgid "Open a new hypervisor connection." +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:86 +msgid "Open connection ..." +msgstr "" + +#: ../virt-ctrl/vc_connection_dlg.ml:40 +msgid "Open connection to hypervisor" +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:130 +msgid "Pause" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:666 ../mlvirsh/mlvirsh.ml:670 +msgid "Pin domain VCPU to a list of physical CPUs." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:706 +msgid "Print list of commands or full description of one command." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:584 +msgid "Print node information." +msgstr "" + +#: ../virt-df/virt_df.ml:350 ../virt-df/virt_df.ml:352 +msgid "Print sizes in human-readable format" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:440 +msgid "Print the ID of a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:464 +msgid "Print the OS type of a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:472 +msgid "Print the UUID of a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:581 +msgid "Print the UUID of a network." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:480 +msgid "Print the XML description of a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:545 +msgid "Print the XML description of a network." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:530 +msgid "Print the bridge name of a network." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:653 +msgid "Print the canonical URI." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:448 +msgid "Print the domain info." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:468 +msgid "Print the domain state." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:646 +msgid "Print the driver name" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:677 +msgid "Print the driver version" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:500 +msgid "Print the hostname." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:522 +msgid "Print the max VCPUs available." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:456 +msgid "Print the max VCPUs of a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:452 +msgid "Print the max memory (in kilobytes) of a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:460 +msgid "Print the name of a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:569 +msgid "Print the name of a network." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:497 +msgid "Print whether a domain autostarts at boot." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:549 +msgid "Print whether a network autostarts at boot." +msgstr "" + +#: ../virt-ctrl/vc_connection_dlg.ml:83 +msgid "QEMU or KVM" +msgstr "" + +#: ../virt-top/virt_top.ml:1578 ../virt-ctrl/vc_mainwindow.ml:89 +msgid "Quit" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:519 +msgid "Quit the interactive terminal." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:36 +msgid "Read-only connection" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:587 +msgid "Reboot a domain." +msgstr "" + +#: ../virt-ctrl/vc_connection_dlg.ml:134 +msgid "Refresh" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:592 +msgid "Restore a domain from the named file." +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:133 +msgid "Resume" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:595 +msgid "Resume a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:406 +msgid "Returns capabilities of hypervisor/driver." +msgstr "" + +#: ../virt-top/virt_top.ml:199 +msgid "Run from a script (no user interface)" +msgstr "" + +#: ../virt-top/virt_top.ml:1584 +msgid "SORTING" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:599 +msgid "Save a domain to a file." +msgstr "" + +#: ../virt-top/virt_top.ml:197 +msgid "Secure (\\\"kiosk\\\") mode" +msgstr "" + +#: ../virt-top/virt_top.ml:1593 +msgid "Select sort field" +msgstr "" + +#: ../virt-top/virt_top.ml:183 +msgid "Send debug messages to file" +msgstr "" + +#: ../virt-top/virt_top.ml:189 +msgid "Set name of init file" +msgstr "" + +#: ../virt-top/virt_top.ml:195 +msgid "Set sort order (%s)" +msgstr "" + +#: ../virt-top/virt_top.ml:1340 +msgid "Set sort order for main display" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:631 +msgid "Set the maximum memory used by the domain (in kilobytes)." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:627 +msgid "Set the memory used by the domain (in kilobytes)." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:674 +msgid "Set the number of virtual CPUs assigned to a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:618 +msgid "Set the scheduler parameters for a domain." +msgstr "" + +#: ../virt-top/virt_top.ml:1579 +msgid "Set update interval" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:403 +msgid "Set whether a domain autostarts at boot." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:526 +msgid "Set whether a network autostarts at boot." +msgstr "" + +#: ../virt-df/virt_df.ml:342 ../virt-df/virt_df.ml:344 +msgid "Show all domains (default: only active domains)" +msgstr "" + +#: ../virt-df/virt_df.ml:354 ../virt-df/virt_df.ml:356 +msgid "Show inodes instead of blocks" +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:137 +msgid "Shutdown" +msgstr "" + +#: ../virt-df/virt_df.ml:499 +msgid "Size" +msgstr "" + +#: ../virt-top/virt_top.ml:1589 +msgid "Sort by %CPU" +msgstr "" + +#: ../virt-top/virt_top.ml:1590 +msgid "Sort by %MEM" +msgstr "" + +#: ../virt-top/virt_top.ml:1592 +msgid "Sort by ID" +msgstr "" + +#: ../virt-top/virt_top.ml:1591 +msgid "Sort by TIME" +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:127 +msgid "Start" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:639 +msgid "Start a previously defined inactive domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:573 +msgid "Start a previously defined inactive network." +msgstr "" + +#: ../virt-top/virt_top.ml:165 +msgid "Start by displaying block devices" +msgstr "" + +#: ../virt-top/virt_top.ml:163 +msgid "Start by displaying network interfaces" +msgstr "" + +#: ../virt-top/virt_top.ml:161 +msgid "Start by displaying pCPUs (default: tasks)" +msgstr "" + +#: ../virt-ctrl/vc_connections.ml:407 +msgid "Status" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:643 +msgid "Suspend a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:40 +msgid "Synopsis:\n %s [options] [command]\n\nList of all commands:\n %s help\n\nFull description of a single command:\n %s help command\n\nOptions:" +msgstr "" + +#: ../virt-top/virt_top.ml:65 +msgid "TIME (CPU time)" +msgstr "" + +#: ../virt-ctrl/vc_connection_dlg.ml:62 +msgid "This machine" +msgstr "" + +#: ../virt-top/virt_top.ml:1613 +msgid "Toggle block devices" +msgstr "" + +#: ../virt-top/virt_top.ml:1612 +msgid "Toggle network interfaces" +msgstr "" + +#: ../virt-top/virt_top.ml:1611 +msgid "Toggle physical CPUs" +msgstr "" + +#: ../virt-df/virt_df.ml:502 +msgid "Type" +msgstr "" + +#: ../virt-top/virt_top.ml:1341 +msgid "Type key or use up and down cursor keys." +msgstr "" + +#: ../virt-ctrl/vc_connection_dlg.ml:160 +msgid "URI connection" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:650 +msgid "Undefine an inactive domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:577 +msgid "Undefine an inactive network." +msgstr "" + +#: ../virt-top/virt_top.ml:1622 +msgid "Unknown command - try 'h' for help" +msgstr "" + +#: ../virt-top/virt_top.ml:1577 +msgid "Update display" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:690 +msgid "Use '%s help command' for help on a command." +msgstr "" + +#: ../virt-df/virt_df.ml:498 ../virt-df/virt_df.ml:499 +msgid "Used" +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:23 +msgid "Virtual Control" +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:53 +msgid "Virtualisation error" +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:39 +msgid "Virtualization control tool (virt-ctrl) by\nRichard W.M. Jones (rjones@redhat.com).\n\nCopyright %s 2007-2008 Red Hat Inc.\n\nLibvirt version: %s\n\nGtk toolkit version: %s" +msgstr "" + +#: ../virt-top/virt_top.ml:1523 +msgid "Wrote settings to %s" +msgstr "" + +#: ../virt-ctrl/vc_connection_dlg.ml:76 +msgid "Xen hypervisor" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:364 +msgid "\\tCPU time: %Ld ns\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:362 +msgid "\\tcurrent state: %s\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:361 +msgid "\\ton physical CPU: %d\\n" +msgstr "" + +#: ../virt-ctrl/vc_helpers.ml:54 ../mlvirsh/mlvirsh.ml:289 ../mlvirsh/mlvirsh.ml:298 +msgid "blocked" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:330 +msgid "cores: %d\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:342 +msgid "cpu_time: %Ld ns\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:326 +msgid "cpus: %d\\n" +msgstr "" + +#: ../virt-ctrl/vc_helpers.ml:58 ../mlvirsh/mlvirsh.ml:293 +msgid "crashed" +msgstr "" + +#: ../virt-df/virt_df.ml:236 +msgid "detection of unpartitioned devices not yet supported" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:242 +msgid "domain %s: not found. Additional info: %s" +msgstr "" + +#: ../virt-df/virt_df_ext2.ml:39 +msgid "error reading ext2/ext3 magic" +msgstr "" + +#: ../virt-df/virt_df.ml:182 +msgid "error reading extended partition" +msgstr "" + +#: ../virt-df/virt_df.ml:149 +msgid "error reading partition table" +msgstr "" + +#: ../virt-ctrl/vc_dbus.ml:239 +msgid "error set after getting System bus" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:379 +msgid "errors: %Ld\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:258 +msgid "expected field value pairs, but got an odd number of arguments" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:610 +msgid "expecting domain followed by field value pairs" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:220 +msgid "flag should be '%s'" +msgstr "" + +#: ../virt-top/virt_top_xml.ml:46 ../virt-df/virt_df.ml:419 +msgid "get_xml_desc didn't return " +msgstr "" + +#: ../virt-df/virt_df.ml:427 +msgid "get_xml_desc returned no node in XML" +msgstr "" + +#: ../virt-df/virt_df.ml:430 +msgid "get_xml_desc returned strange node" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:700 +msgid "help: %s: command not found" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:160 ../mlvirsh/mlvirsh.ml:164 ../mlvirsh/mlvirsh.ml:168 ../mlvirsh/mlvirsh.ml:172 ../mlvirsh/mlvirsh.ml:177 ../mlvirsh/mlvirsh.ml:182 ../mlvirsh/mlvirsh.ml:188 +msgid "incorrect number of arguments for function" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:339 +msgid "max_mem: %Ld K\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:325 ../mlvirsh/mlvirsh.ml:340 +msgid "memory: %Ld K\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:327 +msgid "mhz: %d\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:727 +msgid "mlvirsh" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:725 +msgid "mlvirsh(no connection)" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:726 +msgid "mlvirsh(ro)" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:324 +msgid "model: %s\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:253 +msgid "network %s: not found. Additional info: %s" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:328 +msgid "nodes: %d\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:197 ../mlvirsh/mlvirsh.ml:202 +msgid "not connected to the hypervisor" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:341 +msgid "nr_virt_cpu: %d\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:296 +msgid "offline" +msgstr "" + +#: ../virt-df/virt_df_ext2.ml:42 +msgid "partition marked EXT2/3 but no valid filesystem" +msgstr "" + +#: ../virt-ctrl/vc_helpers.ml:55 ../mlvirsh/mlvirsh.ml:290 +msgid "paused" +msgstr "" + +#: ../virt-df/virt_df.ml:188 +msgid "probe_extended_partition: internal error" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:376 +msgid "read bytes: %Ld\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:375 +msgid "read requests: %Ld\\n" +msgstr "" + +#: ../virt-ctrl/vc_helpers.ml:53 ../mlvirsh/mlvirsh.ml:288 ../mlvirsh/mlvirsh.ml:297 +msgid "running" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:384 +msgid "rx bytes: %Ld\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:387 +msgid "rx dropped: %Ld\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:386 +msgid "rx errs: %Ld\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:385 +msgid "rx packets: %Ld\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:226 +msgid "setting should be '%s' or '%s'" +msgstr "" + +#: ../virt-ctrl/vc_helpers.ml:56 ../mlvirsh/mlvirsh.ml:291 +msgid "shutdown" +msgstr "" + +#: ../virt-ctrl/vc_helpers.ml:57 ../mlvirsh/mlvirsh.ml:292 +msgid "shutoff" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:329 +msgid "sockets: %d\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:338 +msgid "state: %s\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:331 +msgid "threads: %d\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:198 +msgid "tried to do read-write operation on read-only hypervisor connection" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:388 +msgid "tx bytes: %Ld\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:391 +msgid "tx dropped: %Ld\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:390 +msgid "tx errs: %Ld\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:389 +msgid "tx packets: %Ld\\n" +msgstr "" + +#: ../virt-ctrl/vc_helpers.ml:52 ../mlvirsh/mlvirsh.ml:287 +msgid "unknown" +msgstr "" + +#: ../virt-df/virt_df.ml:246 +msgid "unsupported partition type %02x" +msgstr "" + +#: ../virt-df/virt_df.ml:363 +msgid "virt-df : like 'df', shows disk space used in guests\n\nSUMMARY\n virt-df [-options]\n\nOPTIONS" +msgstr "" + +#: ../virt-top/virt_top.ml:1543 +msgid "virt-top %s (libvirt %d.%d.%d) by Red Hat" +msgstr "" + +#: ../virt-top/virt_top.ml:203 +msgid "virt-top : a 'top'-like utility for virtualization\n\nSUMMARY\n virt-top [-options]\n\nOPTIONS" +msgstr "" + +#: ../virt-top/virt_top.ml:40 +msgid "virt-top was compiled without support for CSV files" +msgstr "" + +#: ../virt-top/virt_top.ml:51 +msgid "virt-top was compiled without support for dates and times" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:360 +msgid "virtual CPU: %d\\n" +msgstr "" + +#: ../virt-ctrl/vc_dbus.ml:219 +msgid "warning: ignored unknown message %s from %s\\n%!" +msgstr "" + +#: ../virt-ctrl/vc_dbus.ml:124 +msgid "warning: unexpected message contents of Found signal" +msgstr "" + +#: ../virt-ctrl/vc_dbus.ml:188 +msgid "warning: unexpected message contents of ItemNew signal" +msgstr "" + +#: ../virt-ctrl/vc_dbus.ml:140 +msgid "warning: unexpected message contents of ItemRemove signal" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:378 +msgid "write bytes: %Ld\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:377 +msgid "write requests: %Ld\\n" +msgstr "" + diff --git a/po/pl.po b/po/pl.po new file mode 100644 index 0000000..a1474af --- /dev/null +++ b/po/pl.po @@ -0,0 +1,1018 @@ +# translation of pl.po to Polish +# Piotr Drąg , 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: pl\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-03-28 17:30+0000\n" +"PO-Revision-Date: 2008-04-12 21:09+0200\n" +"Last-Translator: Piotr Drąg \n" +"Language-Team: Polish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../virt-top/virt_top.ml:1490 +msgid "# .virt-toprc virt-top configuration file\\n" +msgstr "# plik konfiguracji virt-top .virt-toprc\\n" + +#: ../virt-top/virt_top.ml:1508 +msgid "# Enable CSV output to the named file\\n" +msgstr "# Włącz wyjście CSV do pliku named\\n" + +#: ../virt-top/virt_top.ml:1511 +msgid "# To protect this file from being overwritten, uncomment next line\\n" +msgstr "# Aby ochronić ten plik przed zastąpieniem, usuń komentarz z następnego wiersza\\n" + +#: ../virt-top/virt_top.ml:1505 +msgid "# To send debug and error messages to a file, uncomment next line\\n" +msgstr "# Aby wysłać komunikaty debugowania i błędów do pliku, usuń komentarz z następnego wiersza\\n" + +#: ../virt-top/virt_top.ml:1491 +msgid "# generated on %s by %s\\n" +msgstr "# utworzone %s przez %s\\n" + +#: ../virt-top/virt_top.ml:63 +msgid "%CPU" +msgstr "%CPU" + +#: ../virt-top/virt_top.ml:64 +msgid "%MEM" +msgstr "%MEM" + +#: ../virt-top/virt_top.ml:1144 +msgid "%d domains, %d active, %d running, %d sleeping, %d paused, %d inactive D:%d O:%d X:%d" +msgstr "%d domeny, %d aktywne, %d uruchomionych, %d uśpionych, %d wstrzymanych, %d nieaktywnych D:%d O:%d X:%d" + +#: ../mlvirsh/mlvirsh.ml:716 +msgid "%s: command not found" +msgstr "%s: nie znaleziono polecenia" + +#: ../virt-top/virt_top.ml:105 +msgid "%s: display should be %s" +msgstr "%s: ekran powinien być %s" + +#: ../virt-top/virt_top.ml:82 +msgid "%s: sort order should be: %s" +msgstr "%s: porządek sortowania powinien być: %s" + +#: ../virt-df/virt_df.ml:362 ../virt-top/virt_top.ml:202 +msgid "%s: unknown parameter" +msgstr "%s: nieznany parametr" + +#: ../virt-top/virt_top.ml:233 +msgid "%s:%d: configuration item ``%s'' ignored\\n%!" +msgstr "%s:%d: zignorowano element konfiguracji ``%s''\\n%!" + +#: ../virt-df/virt_df.ml:514 +msgid "(device omitted)" +msgstr "(pominięto urządzenie)" + +#: ../virt-top/virt_top.ml:145 +msgid "-d: cannot set a negative delay" +msgstr "-d: nie można ustawić negatywnego opóźnienia" + +#: ../virt-df/virt_df.ml:498 +msgid "1K-blocks" +msgstr "Bloki 1K" + +#: ../virt-ctrl/vc_mainwindow.ml:97 +msgid "About ..." +msgstr "Informacje o..." + +#: ../mlvirsh/mlvirsh.ml:399 +msgid "Attach device to domain." +msgstr "Podłącz urządzenie do domeny." + +#: ../virt-df/virt_df.ml:499 ../virt-df/virt_df.ml:498 +msgid "Available" +msgstr "Dostępne" + +#: ../virt-top/virt_top.ml:167 +msgid "Batch mode" +msgstr "Tryb wsadowy" + +#: ../virt-top/virt_top.ml:70 +msgid "Block read reqs" +msgstr "Wymagania odczytania blokowego" + +#: ../virt-top/virt_top.ml:71 +msgid "Block write reqs" +msgstr "Wymagania zapisania blokowego" + +#: ../virt-ctrl/vc_connections.ml:408 +msgid "CPU" +msgstr "Procesor" + +#: ../mlvirsh/mlvirsh.ml:365 +msgid "CPU affinity" +msgstr "Dopasowanie procesora" + +#: ../virt-top/virt_top.ml:1151 +msgid "CPU: %2.1f%% Mem: %Ld MB (%Ld MB by guests)" +msgstr "Procesor: %2.1f%% Pamięć: %Ld MB (%Ld MB przez gości)" + +#: ../virt-ctrl/vc_connection_dlg.ml:182 +msgid "Cancel" +msgstr "Anuluj" + +#: ../virt-top/virt_top.ml:1319 +msgid "Change delay from %.1f to: " +msgstr "Zmień opóźnienie z %.1f na: " + +#: ../mlvirsh/mlvirsh.ml:409 +msgid "Close an existing hypervisor connection." +msgstr "Zamknij istniejące połączenie nadzorcy." + +#: ../virt-ctrl/vc_mainwindow.ml:118 +msgid "Connect ..." +msgstr "Połącz się..." + +#: ../virt-ctrl/vc_mainwindow.ml:160 +msgid "Connect to ..." +msgstr "Połącz się z..." + +#: ../virt-df/virt_df.ml:348 ../virt-df/virt_df.ml:346 ../virt-top/virt_top.ml:171 ../virt-top/virt_top.ml:169 +msgid "Connect to URI (default: Xen)" +msgstr "Połącz się z URI (domyślnie: Xen)" + +#: ../virt-top/virt_top.ml:1558 +msgid "Connect: %s; Hostname: %s" +msgstr "Połącz się: %s; nazwa hosta: %s" + +#: ../mlvirsh/mlvirsh.ml:476 +msgid "Core dump a domain to a file for analysis." +msgstr "Zrzut core domeny do pliku do analizy." + +#: ../mlvirsh/mlvirsh.ml:422 +msgid "Create a domain from an XML file." +msgstr "Utwórz domenę z pliku XML." + +#: ../mlvirsh/mlvirsh.ml:534 +msgid "Create a network from an XML file." +msgstr "Utwórz sieć z pliku XML." + +#: ../virt-top/virt_top.ml:1596 +msgid "DISPLAY MODES" +msgstr "TRYBY WYŚWIETLANIA" + +#: ../mlvirsh/mlvirsh.ml:426 +msgid "Define (but don't start) a domain from an XML file." +msgstr "Określ (ale nie uruchamiaj) domenę z pliku XML." + +#: ../mlvirsh/mlvirsh.ml:538 +msgid "Define (but don't start) a network from an XML file." +msgstr "Określ (ale nie uruchamiaj) sieć z pliku XML." + +#: ../virt-top/virt_top.ml:1326 +msgid "Delay must be > 0" +msgstr "Opóźnienie musi być > 0" + +#: ../virt-top/virt_top.ml:181 +msgid "Delay time interval (seconds)" +msgstr "Czas między opóźnieniami (sekundy)" + +#: ../virt-top/virt_top.ml:1552 +msgid "Delay: %.1f secs; Batch: %s; Secure: %s; Sort: %s" +msgstr "Opóźnienie: %.1f sekundy; wsadowo: %s; bezpieczeństwo: %s; sortowanie: %s" + +#: ../mlvirsh/mlvirsh.ml:433 +msgid "Destroy a domain." +msgstr "Zniszcz domenę." + +#: ../mlvirsh/mlvirsh.ml:541 +msgid "Destroy a network." +msgstr "Zniszcz sieć." + +#: ../mlvirsh/mlvirsh.ml:430 +msgid "Detach device from domain." +msgstr "Odłącz urządzenie z domeny." + +#: ../virt-ctrl/vc_mainwindow.ml:123 +msgid "Details" +msgstr "Szczegóły" + +#: ../virt-top/virt_top.ml:175 +msgid "Disable CPU stats in CSV" +msgstr "Wyłącz statystyki procesora w CSV" + +#: ../virt-top/virt_top.ml:177 +msgid "Disable block device stats in CSV" +msgstr "Wyłącz statystyki urządzenia blokowego w CSV" + +#: ../virt-top/virt_top.ml:179 +msgid "Disable net stats in CSV" +msgstr "Wyłącz statystyki sieci w CSV" + +#: ../mlvirsh/mlvirsh.ml:493 +msgid "Display free memory for machine, NUMA cell or range of cells" +msgstr "Wyświetl wolną pamięć dla komputera, komórkę NUMA lub zakres komórek" + +#: ../mlvirsh/mlvirsh.ml:437 +msgid "Display the block device statistics for a domain." +msgstr "Wyświetl statystyki urządzenia blokowego dla domeny." + +#: ../mlvirsh/mlvirsh.ml:444 +msgid "Display the network interface statistics for a domain." +msgstr "Wyświetl statystyki interfejsu sieciowego dla domeny." + +#: ../virt-df/virt_df.ml:358 +msgid "Display version and exit" +msgstr "Wyświetl wersję i zakończ" + +#: ../virt-top/virt_top.ml:191 +msgid "Do not read init file" +msgstr "Nie odczytuj pliku init" + +#: ../virt-top/virt_top.ml:66 +msgid "Domain ID" +msgstr "Identyfikator domeny" + +#: ../virt-top/virt_top.ml:67 +msgid "Domain name" +msgstr "Nazwa domeny" + +#: ../virt-top/virt_top.ml:1610 +msgid "Domains display" +msgstr "Ekran domen" + +#: ../virt-ctrl/vc_mainwindow.ml:61 ../virt-top/virt_top_main.ml:47 ../virt-top/virt_top.ml:1528 +msgid "Error" +msgstr "Błąd" + +#: ../virt-top/virt_top.ml:185 +msgid "Exit at given time" +msgstr "Zakończ o podanym czasie" + +#: ../virt-ctrl/vc_mainwindow.ml:79 +msgid "File" +msgstr "Plik" + +#: ../virt-df/virt_df.ml:502 +msgid "Filesystem" +msgstr "System plików" + +#: ../mlvirsh/mlvirsh.ml:606 +msgid "Get the current scheduler parameters for a domain." +msgstr "Uzyskaj obecne parametry planisty dla domeny." + +#: ../mlvirsh/mlvirsh.ml:623 +msgid "Get the scheduler type." +msgstr "Uzyskaj typ planisty." + +#: ../mlvirsh/mlvirsh.ml:635 +msgid "Gracefully shutdown a domain." +msgstr "Wyłącz domenę." + +#: ../virt-ctrl/vc_mainwindow.ml:96 ../virt-ctrl/vc_mainwindow.ml:80 ../virt-top/virt_top.ml:1580 +msgid "Help" +msgstr "Pomoc" + +#: ../virt-top/virt_top.ml:187 +msgid "Historical CPU delay" +msgstr "Historyczne opóźnienie procsora" + +#: ../mlvirsh/mlvirsh.ml:35 +msgid "Hypervisor connection URI" +msgstr "URI połączenia nadzorcy" + +#: ../virt-ctrl/vc_connections.ml:405 +msgid "ID" +msgstr "Identyfikator" + +#: ../virt-df/virt_df.ml:500 +msgid "IFree" +msgstr "IWolne" + +#: ../virt-df/virt_df.ml:500 +msgid "IUse" +msgstr "IUżyte" + +#: ../virt-df/virt_df.ml:500 +msgid "Inodes" +msgstr "Iwęzły" + +#: ../virt-df/virt_df_lvm2.ml:33 +msgid "LVM2 not supported yet" +msgstr "LVM2 nie jest jeszcze obsługiwane" + +#: ../virt-df/virt_df_ext2.ml:82 +msgid "Linux ext2/3" +msgstr "Linuksowe ext2/3" + +#: ../virt-df/virt_df_linux_swap.ml:33 +msgid "Linux swap" +msgstr "Linuksowa przestrzeń wymiany" + +#: ../mlvirsh/mlvirsh.ml:557 +msgid "List the active networks." +msgstr "Wyświetl listę aktywnych sieci." + +#: ../mlvirsh/mlvirsh.ml:565 +msgid "List the defined but inactive networks." +msgstr "Wyświetl listę określonych, ale nieaktywnych sieci." + +#: ../mlvirsh/mlvirsh.ml:516 +msgid "List the defined but not running domains." +msgstr "Wyświetl listę określonych, ale nie uruchomionych domen." + +#: ../mlvirsh/mlvirsh.ml:508 +msgid "List the running domains." +msgstr "Wyświetl listę uruchomionych domen." + +#: ../virt-ctrl/vc_mainwindow.ml:158 +msgid "Local QEMU/KVM" +msgstr "Lokalny QEMU/KVM" + +#: ../virt-ctrl/vc_mainwindow.ml:157 +msgid "Local Xen" +msgstr "Lokalny Xen" + +#: ../virt-ctrl/vc_connection_dlg.ml:93 +msgid "Local network" +msgstr "Lokalna sieć" + +#: ../virt-top/virt_top.ml:173 +msgid "Log statistics to CSV file" +msgstr "Zapisz statystyki do pliku CSV" + +#: ../virt-top/virt_top.ml:1563 +msgid "MAIN KEYS" +msgstr "GŁÓWNE KLUCZE" + +#: ../virt-ctrl/vc_connections.ml:409 +msgid "Memory" +msgstr "Pamięć" + +#: ../virt-top/virt_top.ml:1617 +msgid "More help in virt-top(1) man page. Press any key to return." +msgstr "Więcej pomocy na stronie podręcznika virt-top(1). Naciśnij dowolny klawisz, aby kontynuować." + +#: ../virt-df/virt_df.ml:382 ../virt-top/virt_top.ml:258 +msgid "NB: If you want to monitor a local Xen hypervisor, you usually need to be root" +msgstr "NB: jeśli chcesz monitorować lokalnego nadzorcę Xena, zwykle musisz być rootem" + +#: ../virt-ctrl/vc_connections.ml:406 +msgid "Name" +msgstr "Nazwa" + +#: ../virt-top/virt_top.ml:68 +msgid "Net RX bytes" +msgstr "Sieciowe bajty RX" + +#: ../virt-top/virt_top.ml:69 +msgid "Net TX bytes" +msgstr "Sieciowe bajty TX" + +#: ../virt-top/virt_top.ml:1332 +msgid "Not a valid number" +msgstr "Nie jest prawidłowym numerem" + +#: ../virt-top/virt_top.ml:193 +msgid "Number of iterations to run" +msgstr "Liczba iteracji do uruchomienia" + +#: ../virt-ctrl/vc_connection_dlg.ml:170 ../virt-ctrl/vc_connection_dlg.ml:137 +msgid "Open" +msgstr "Otwórz" + +#: ../mlvirsh/mlvirsh.ml:418 +msgid "Open a new hypervisor connection." +msgstr "Otwórz nowe połączenie nadzorcy." + +#: ../virt-ctrl/vc_mainwindow.ml:86 +msgid "Open connection ..." +msgstr "Otwórz połączenie..." + +#: ../virt-ctrl/vc_connection_dlg.ml:40 +msgid "Open connection to hypervisor" +msgstr "Otwórz połączenie do nadzorcy" + +#: ../virt-ctrl/vc_mainwindow.ml:130 +msgid "Pause" +msgstr "Wstrzymaj" + +#: ../mlvirsh/mlvirsh.ml:670 ../mlvirsh/mlvirsh.ml:666 +msgid "Pin domain VCPU to a list of physical CPUs." +msgstr "Przypnij wirtualny procesor do listy fizycznych procesorów." + +#: ../mlvirsh/mlvirsh.ml:706 +msgid "Print list of commands or full description of one command." +msgstr "Wyświetl listę poleceń lub pełny opis jednego polecenia." + +#: ../mlvirsh/mlvirsh.ml:584 +msgid "Print node information." +msgstr "Wyświetl informacje o węźle." + +#: ../virt-df/virt_df.ml:352 ../virt-df/virt_df.ml:350 +msgid "Print sizes in human-readable format" +msgstr "Wyświetl rozmiary w formacie czytelnym dla człowieka" + +#: ../mlvirsh/mlvirsh.ml:440 +msgid "Print the ID of a domain." +msgstr "Wyświetl identyfikator domeny." + +#: ../mlvirsh/mlvirsh.ml:464 +msgid "Print the OS type of a domain." +msgstr "Wyświetl typ systemu operacyjnego domeny." + +#: ../mlvirsh/mlvirsh.ml:472 +msgid "Print the UUID of a domain." +msgstr "Wyświetl UUID domeny." + +#: ../mlvirsh/mlvirsh.ml:581 +msgid "Print the UUID of a network." +msgstr "Wyświetl UUID sieci." + +#: ../mlvirsh/mlvirsh.ml:480 +msgid "Print the XML description of a domain." +msgstr "Wyświetl opis XML domeny." + +#: ../mlvirsh/mlvirsh.ml:545 +msgid "Print the XML description of a network." +msgstr "Wyświetl opis XML sieci." + +#: ../mlvirsh/mlvirsh.ml:530 +msgid "Print the bridge name of a network." +msgstr "Wyświetl nazwę mostka sieci." + +#: ../mlvirsh/mlvirsh.ml:653 +msgid "Print the canonical URI." +msgstr "Wyświetl kanoniczne URI." + +#: ../mlvirsh/mlvirsh.ml:448 +msgid "Print the domain info." +msgstr "Wyświetl informacje o domenie." + +#: ../mlvirsh/mlvirsh.ml:468 +msgid "Print the domain state." +msgstr "Wyświetl stan domeny." + +#: ../mlvirsh/mlvirsh.ml:646 +msgid "Print the driver name" +msgstr "Wyświetl nazwę sterownika" + +#: ../mlvirsh/mlvirsh.ml:677 +msgid "Print the driver version" +msgstr "Wyświetl wersję sterownika" + +#: ../mlvirsh/mlvirsh.ml:500 +msgid "Print the hostname." +msgstr "Wyświetl nazwę hosta." + +#: ../mlvirsh/mlvirsh.ml:522 +msgid "Print the max VCPUs available." +msgstr "Wyświetl maksymalną ilość dostępnych wirtualnych procesorów." + +#: ../mlvirsh/mlvirsh.ml:456 +msgid "Print the max VCPUs of a domain." +msgstr "Wyświetl maksymalną ilość wirtualnych procesorów domeny." + +#: ../mlvirsh/mlvirsh.ml:452 +msgid "Print the max memory (in kilobytes) of a domain." +msgstr "Wyświetl maksymalną pamięć (w kilobitach) domeny." + +#: ../mlvirsh/mlvirsh.ml:460 +msgid "Print the name of a domain." +msgstr "Wyświetl nazwę domeny." + +#: ../mlvirsh/mlvirsh.ml:569 +msgid "Print the name of a network." +msgstr "Wyświetl nazwę sieci." + +#: ../mlvirsh/mlvirsh.ml:497 +msgid "Print whether a domain autostarts at boot." +msgstr "Wyświetl, czy domena powinna być automatycznie uruchamiania po starcie." + +#: ../mlvirsh/mlvirsh.ml:549 +msgid "Print whether a network autostarts at boot." +msgstr "Wyświetl, czy sieć powinna być automatycznie uruchamiania po starcie." + +#: ../virt-ctrl/vc_connection_dlg.ml:83 +msgid "QEMU or KVM" +msgstr "QEMU lub KVM" + +#: ../virt-ctrl/vc_mainwindow.ml:89 ../virt-top/virt_top.ml:1578 +msgid "Quit" +msgstr "Zakończ" + +#: ../mlvirsh/mlvirsh.ml:519 +msgid "Quit the interactive terminal." +msgstr "Zakończ interaktywny terminal." + +#: ../mlvirsh/mlvirsh.ml:36 +msgid "Read-only connection" +msgstr "Połączenie tylko do odczytu" + +#: ../mlvirsh/mlvirsh.ml:587 +msgid "Reboot a domain." +msgstr "Ponownie uruchom domenę." + +#: ../virt-ctrl/vc_connection_dlg.ml:134 +msgid "Refresh" +msgstr "Odśwież" + +#: ../mlvirsh/mlvirsh.ml:592 +msgid "Restore a domain from the named file." +msgstr "Przywróć domenę z pliku named." + +#: ../virt-ctrl/vc_mainwindow.ml:133 +msgid "Resume" +msgstr "Wznów" + +#: ../mlvirsh/mlvirsh.ml:595 +msgid "Resume a domain." +msgstr "Wznów domenę." + +#: ../mlvirsh/mlvirsh.ml:406 +msgid "Returns capabilities of hypervisor/driver." +msgstr "Zwraca możliwości nadzorcy/sterownika." + +#: ../virt-top/virt_top.ml:199 +msgid "Run from a script (no user interface)" +msgstr "Uruchom ze skryptu (brak interfejsu użytkownika)" + +#: ../virt-top/virt_top.ml:1584 +msgid "SORTING" +msgstr "SORTOWANIE" + +#: ../mlvirsh/mlvirsh.ml:599 +msgid "Save a domain to a file." +msgstr "Zapisz domenę do pliku." + +#: ../virt-top/virt_top.ml:197 +msgid "Secure (\\\"kiosk\\\") mode" +msgstr "Tryb bezpieczny (\\\"kiosk\\\")" + +#: ../virt-top/virt_top.ml:1593 +msgid "Select sort field" +msgstr "Wybierz pole sortowania" + +#: ../virt-top/virt_top.ml:183 +msgid "Send debug messages to file" +msgstr "Wyślij komunikaty debugowania do pliku" + +#: ../virt-top/virt_top.ml:189 +msgid "Set name of init file" +msgstr "Ustaw nazwę pliku init" + +#: ../virt-top/virt_top.ml:195 +msgid "Set sort order (%s)" +msgstr "Ustaw porządek sortowania (%s)" + +#: ../virt-top/virt_top.ml:1340 +msgid "Set sort order for main display" +msgstr "Ustaw porządek sortowania dla głównego ekranu" + +#: ../mlvirsh/mlvirsh.ml:631 +msgid "Set the maximum memory used by the domain (in kilobytes)." +msgstr "Ustaw maksymalną pamięć używaną przez domenę (w kilobajtach)." + +#: ../mlvirsh/mlvirsh.ml:627 +msgid "Set the memory used by the domain (in kilobytes)." +msgstr "Ustaw pamięć używaną przez domenę (w kilobajtach)." + +#: ../mlvirsh/mlvirsh.ml:674 +msgid "Set the number of virtual CPUs assigned to a domain." +msgstr "Ustaw liczbę wirtualnych procesorów powiązanych z domeną." + +#: ../mlvirsh/mlvirsh.ml:618 +msgid "Set the scheduler parameters for a domain." +msgstr "Ustaw parametry planisty domeny." + +#: ../virt-top/virt_top.ml:1579 +msgid "Set update interval" +msgstr "Ustaw czas między aktualizacjami" + +#: ../mlvirsh/mlvirsh.ml:403 +msgid "Set whether a domain autostarts at boot." +msgstr "Ustaw, czy automatycznie uruchamiać domenę po starcie." + +#: ../mlvirsh/mlvirsh.ml:526 +msgid "Set whether a network autostarts at boot." +msgstr "Ustaw, czy automatycznie uruchamiać sieć po starcie." + +#: ../virt-df/virt_df.ml:344 ../virt-df/virt_df.ml:342 +msgid "Show all domains (default: only active domains)" +msgstr "Wyświetl wszystkie domeny (domyślnie: tylko aktywne domeny)" + +#: ../virt-df/virt_df.ml:356 ../virt-df/virt_df.ml:354 +msgid "Show inodes instead of blocks" +msgstr "Wyświetl i-węzły zamiast bloków" + +#: ../virt-ctrl/vc_mainwindow.ml:137 +msgid "Shutdown" +msgstr "Wyłącz" + +#: ../virt-df/virt_df.ml:499 +msgid "Size" +msgstr "Rozmiar" + +#: ../virt-top/virt_top.ml:1589 +msgid "Sort by %CPU" +msgstr "Uporządkuj według %CPU" + +#: ../virt-top/virt_top.ml:1590 +msgid "Sort by %MEM" +msgstr "Uporządkuj według %MEM" + +#: ../virt-top/virt_top.ml:1592 +msgid "Sort by ID" +msgstr "Uporządkuj według identyfikatorów" + +#: ../virt-top/virt_top.ml:1591 +msgid "Sort by TIME" +msgstr "Uporządkuj według TIME" + +#: ../virt-ctrl/vc_mainwindow.ml:127 +msgid "Start" +msgstr "Uruchom" + +#: ../mlvirsh/mlvirsh.ml:639 +msgid "Start a previously defined inactive domain." +msgstr "Uruchom poprzednio określoną nieaktywną domenę." + +#: ../mlvirsh/mlvirsh.ml:573 +msgid "Start a previously defined inactive network." +msgstr "Uruchom poprzednio określoną nieaktywną sieć." + +#: ../virt-top/virt_top.ml:165 +msgid "Start by displaying block devices" +msgstr "Uruchom przez wyświetlenie urządzeń blokowych" + +#: ../virt-top/virt_top.ml:163 +msgid "Start by displaying network interfaces" +msgstr "Uruchom przez wyświetlenie interfejsów sieciowych" + +#: ../virt-top/virt_top.ml:161 +msgid "Start by displaying pCPUs (default: tasks)" +msgstr "Uruchom przez wyświetlanie fizycznych procesorów (domyślnie: zadania)" + +#: ../virt-ctrl/vc_connections.ml:407 +msgid "Status" +msgstr "Stan" + +#: ../mlvirsh/mlvirsh.ml:643 +msgid "Suspend a domain." +msgstr "Uśpij domenę." + +#: ../mlvirsh/mlvirsh.ml:40 +msgid "Synopsis:\n %s [options] [command]\n\nList of all commands:\n %s help\n\nFull description of a single command:\n %s help command\n\nOptions:" +msgstr "Podsumowanie:\n %s [opcje] [polecenie]\n\nWyświetl listę wszystkich poleceń:\n %s help\n\nPełny opis jednego polecenia:\n %s help polecenie\n\nOpcje:" + +#: ../virt-top/virt_top.ml:65 +msgid "TIME (CPU time)" +msgstr "TIME (czas procesora)" + +#: ../virt-ctrl/vc_connection_dlg.ml:62 +msgid "This machine" +msgstr "Ten komputer" + +#: ../virt-top/virt_top.ml:1613 +msgid "Toggle block devices" +msgstr "Przełącz urządzenia blokowe" + +#: ../virt-top/virt_top.ml:1612 +msgid "Toggle network interfaces" +msgstr "Przełącz interfejsy sieciowe" + +#: ../virt-top/virt_top.ml:1611 +msgid "Toggle physical CPUs" +msgstr "Przełącz fizyczne procesory" + +#: ../virt-df/virt_df.ml:502 +msgid "Type" +msgstr "Podaj" + +#: ../virt-top/virt_top.ml:1341 +msgid "Type key or use up and down cursor keys." +msgstr "Podaj klucz lub użyj klawiszy kursora w górę i w dół." + +#: ../virt-ctrl/vc_connection_dlg.ml:160 +msgid "URI connection" +msgstr "Połączenie URI" + +#: ../mlvirsh/mlvirsh.ml:650 +msgid "Undefine an inactive domain." +msgstr "Usuń określenie nieaktywnej domeny." + +#: ../mlvirsh/mlvirsh.ml:577 +msgid "Undefine an inactive network." +msgstr "Usuń określenie nieaktywnej sieci." + +#: ../virt-top/virt_top.ml:1622 +msgid "Unknown command - try 'h' for help" +msgstr "Nieznane polecenie - wypróbuj \"h\", aby uzyskać pomoc" + +#: ../virt-top/virt_top.ml:1577 +msgid "Update display" +msgstr "Zaktualizuj ekran" + +#: ../mlvirsh/mlvirsh.ml:690 +msgid "Use '%s help command' for help on a command." +msgstr "Użyj \"%s help polecenie\", aby uzyskać pomoc o poleceniu." + +#: ../virt-df/virt_df.ml:499 ../virt-df/virt_df.ml:498 +msgid "Used" +msgstr "Użyte" + +#: ../virt-ctrl/vc_mainwindow.ml:23 +msgid "Virtual Control" +msgstr "Kontrola wirtualna" + +#: ../virt-ctrl/vc_mainwindow.ml:53 +msgid "Virtualisation error" +msgstr "Błąd wirtualizacji" + +#: ../virt-ctrl/vc_mainwindow.ml:39 +msgid "Virtualization control tool (virt-ctrl) by\nRichard W.M. Jones (rjones@redhat.com).\n\nCopyright %s 2007-2008 Red Hat Inc.\n\nLibvirt version: %s\n\nGtk toolkit version: %s" +msgstr "Narzędzie kontroli wirtualizacji (virt-ctrl) by\nRichard W.M. Jones (rjones@redhat.com).\n\nCopyright %s 2007-2008 Red Hat Inc.\n\nWersja libvirt: %s\n\nWersja zestawu narzędzi GTK: %s" + +#: ../virt-top/virt_top.ml:1523 +msgid "Wrote settings to %s" +msgstr "Zapisano ustawienia do %s" + +#: ../virt-ctrl/vc_connection_dlg.ml:76 +msgid "Xen hypervisor" +msgstr "Nadzorca Xen" + +#: ../mlvirsh/mlvirsh.ml:364 +msgid "\\tCPU time: %Ld ns\\n" +msgstr "\\tCzas procesora: %Ld ns\\n" + +#: ../mlvirsh/mlvirsh.ml:362 +msgid "\\tcurrent state: %s\\n" +msgstr "\\tobecny stan: %s\\n" + +#: ../mlvirsh/mlvirsh.ml:361 +msgid "\\ton physical CPU: %d\\n" +msgstr "\\tna fizycznym procesorze: %d\\n" + +#: ../mlvirsh/mlvirsh.ml:298 ../mlvirsh/mlvirsh.ml:289 ../virt-ctrl/vc_helpers.ml:54 +msgid "blocked" +msgstr "zablokowano" + +#: ../mlvirsh/mlvirsh.ml:330 +msgid "cores: %d\\n" +msgstr "rdzenie: %d\\n" + +#: ../mlvirsh/mlvirsh.ml:342 +msgid "cpu_time: %Ld ns\\n" +msgstr "cpu_time: %Ld ns\\n" + +#: ../mlvirsh/mlvirsh.ml:326 +msgid "cpus: %d\\n" +msgstr "procesory: %d\\n" + +#: ../mlvirsh/mlvirsh.ml:293 ../virt-ctrl/vc_helpers.ml:58 +msgid "crashed" +msgstr "zawiesił się" + +#: ../virt-df/virt_df.ml:236 +msgid "detection of unpartitioned devices not yet supported" +msgstr "wykrywanie niespartycjonowanych urządzeń nie jest jeszcze obsługiwane" + +#: ../mlvirsh/mlvirsh.ml:242 +msgid "domain %s: not found. Additional info: %s" +msgstr "domena %s: nie znaleziono. Dodatkowe informacje: %s" + +#: ../virt-df/virt_df_ext2.ml:39 +msgid "error reading ext2/ext3 magic" +msgstr "błąd podczas odczytywanie magii ext2/ext3" + +#: ../virt-df/virt_df.ml:182 +msgid "error reading extended partition" +msgstr "błąd podczas odczytywania partycji rozszerzonej" + +#: ../virt-df/virt_df.ml:149 +msgid "error reading partition table" +msgstr "błąd podczas odczytywania tablicy partycji" + +#: ../virt-ctrl/vc_dbus.ml:239 +msgid "error set after getting System bus" +msgstr "błąd podczas ustawiania po otrzymaniu magistrali systemowej" + +#: ../mlvirsh/mlvirsh.ml:379 +msgid "errors: %Ld\\n" +msgstr "błędy: %Ld\\n" + +#: ../mlvirsh/mlvirsh.ml:258 +msgid "expected field value pairs, but got an odd number of arguments" +msgstr "oczekiwano pary wartości pól, ale otrzymano nieparzystą liczbę argumentów" + +#: ../mlvirsh/mlvirsh.ml:610 +msgid "expecting domain followed by field value pairs" +msgstr "oczekiwano domenę poprzedzoną parami wartości pól" + +#: ../mlvirsh/mlvirsh.ml:220 +msgid "flag should be '%s'" +msgstr "flaga powinna być \"%s\"" + +#: ../virt-df/virt_df.ml:419 ../virt-top/virt_top_xml.ml:46 +msgid "get_xml_desc didn't return " +msgstr "get_xml_desc nie zwróciło " + +#: ../virt-df/virt_df.ml:427 +msgid "get_xml_desc returned no node in XML" +msgstr "get_xml_desc nie zwróciło węzła w XML-u" + +#: ../virt-df/virt_df.ml:430 +msgid "get_xml_desc returned strange node" +msgstr "get_xml_desc zwróciło dziwny węzeł " + +#: ../mlvirsh/mlvirsh.ml:700 +msgid "help: %s: command not found" +msgstr "help: %s: nie znaleziono polecenia" + +#: ../mlvirsh/mlvirsh.ml:188 ../mlvirsh/mlvirsh.ml:182 ../mlvirsh/mlvirsh.ml:177 ../mlvirsh/mlvirsh.ml:172 ../mlvirsh/mlvirsh.ml:168 ../mlvirsh/mlvirsh.ml:164 ../mlvirsh/mlvirsh.ml:160 +msgid "incorrect number of arguments for function" +msgstr "niepoprawna liczba argumentów dla funkcji" + +#: ../mlvirsh/mlvirsh.ml:339 +msgid "max_mem: %Ld K\\n" +msgstr "max_mem: %Ld K\\n" + +#: ../mlvirsh/mlvirsh.ml:340 ../mlvirsh/mlvirsh.ml:325 +msgid "memory: %Ld K\\n" +msgstr "pamięć: %Ld K\\n" + +#: ../mlvirsh/mlvirsh.ml:327 +msgid "mhz: %d\\n" +msgstr "MHz: %d\\n" + +#: ../mlvirsh/mlvirsh.ml:727 +msgid "mlvirsh" +msgstr "mlvirsh" + +#: ../mlvirsh/mlvirsh.ml:725 +msgid "mlvirsh(no connection)" +msgstr "mlvirsh (brak połączenia)" + +#: ../mlvirsh/mlvirsh.ml:726 +msgid "mlvirsh(ro)" +msgstr "mlvirsh (tylko do odczytu)" + +#: ../mlvirsh/mlvirsh.ml:324 +msgid "model: %s\\n" +msgstr "model: %s\\n" + +#: ../mlvirsh/mlvirsh.ml:253 +msgid "network %s: not found. Additional info: %s" +msgstr "sieć %s: nie znaleziono. Dodatkowe informacje: %s" + +#: ../mlvirsh/mlvirsh.ml:328 +msgid "nodes: %d\\n" +msgstr "węzły: %d\\n" + +#: ../mlvirsh/mlvirsh.ml:202 ../mlvirsh/mlvirsh.ml:197 +msgid "not connected to the hypervisor" +msgstr "nie połączono z nadzorcą" + +#: ../mlvirsh/mlvirsh.ml:341 +msgid "nr_virt_cpu: %d\\n" +msgstr "nr_virt_cpu: %d\\n" + +#: ../mlvirsh/mlvirsh.ml:296 +msgid "offline" +msgstr "offline" + +#: ../virt-df/virt_df_ext2.ml:42 +msgid "partition marked EXT2/3 but no valid filesystem" +msgstr "partycja jest oznaczona jako ext2/3, ale nie jest prawidłowym system plików" + +#: ../mlvirsh/mlvirsh.ml:290 ../virt-ctrl/vc_helpers.ml:55 +msgid "paused" +msgstr "wstrzymano" + +#: ../virt-df/virt_df.ml:188 +msgid "probe_extended_partition: internal error" +msgstr "probe_extended_partition: wewnętrzny błąd" + +#: ../mlvirsh/mlvirsh.ml:376 +msgid "read bytes: %Ld\\n" +msgstr "odczytaj bajty: %Ld\\n" + +#: ../mlvirsh/mlvirsh.ml:375 +msgid "read requests: %Ld\\n" +msgstr "odczytaj żądania: %Ld\\n" + +#: ../mlvirsh/mlvirsh.ml:297 ../mlvirsh/mlvirsh.ml:288 ../virt-ctrl/vc_helpers.ml:53 +msgid "running" +msgstr "uruchomione" + +#: ../mlvirsh/mlvirsh.ml:384 +msgid "rx bytes: %Ld\\n" +msgstr "bajty RX: %Ld\\n" + +#: ../mlvirsh/mlvirsh.ml:387 +msgid "rx dropped: %Ld\\n" +msgstr "opuszczono RX: %Ld\\n" + +#: ../mlvirsh/mlvirsh.ml:386 +msgid "rx errs: %Ld\\n" +msgstr "błędy RX: %Ld\\n" + +#: ../mlvirsh/mlvirsh.ml:385 +msgid "rx packets: %Ld\\n" +msgstr "pakiety RX: %Ld\\n" + +#: ../mlvirsh/mlvirsh.ml:226 +msgid "setting should be '%s' or '%s'" +msgstr "ustawienie powinno być \"%s\" lub \"%s\"" + +#: ../mlvirsh/mlvirsh.ml:291 ../virt-ctrl/vc_helpers.ml:56 +msgid "shutdown" +msgstr "wyłącz" + +#: ../mlvirsh/mlvirsh.ml:292 ../virt-ctrl/vc_helpers.ml:57 +msgid "shutoff" +msgstr "wyłącz" + +#: ../mlvirsh/mlvirsh.ml:329 +msgid "sockets: %d\\n" +msgstr "gniazda: %d\\n" + +#: ../mlvirsh/mlvirsh.ml:338 +msgid "state: %s\\n" +msgstr "stan: %s\\n" + +#: ../mlvirsh/mlvirsh.ml:331 +msgid "threads: %d\\n" +msgstr "wątki: %d\\n" + +#: ../mlvirsh/mlvirsh.ml:198 +msgid "tried to do read-write operation on read-only hypervisor connection" +msgstr "spróbowano wykonać operację odczytu/zapisu na połączeniu nadzorcy tylko do odczytu" + +#: ../mlvirsh/mlvirsh.ml:388 +msgid "tx bytes: %Ld\\n" +msgstr "bajty TX: %Ld\\n" + +#: ../mlvirsh/mlvirsh.ml:391 +msgid "tx dropped: %Ld\\n" +msgstr "opuszczono TX: %Ld\\n" + +#: ../mlvirsh/mlvirsh.ml:390 +msgid "tx errs: %Ld\\n" +msgstr "błędy TX: %Ld\\n" + +#: ../mlvirsh/mlvirsh.ml:389 +msgid "tx packets: %Ld\\n" +msgstr "pakiety TX: %Ld\\n" + +#: ../mlvirsh/mlvirsh.ml:287 ../virt-ctrl/vc_helpers.ml:52 +msgid "unknown" +msgstr "nieznane" + +#: ../virt-df/virt_df.ml:246 +msgid "unsupported partition type %02x" +msgstr "nieobsługiwany typ partycji %02x" + +#: ../virt-df/virt_df.ml:363 +msgid "virt-df : like 'df', shows disk space used in guests\n\nSUMMARY\n virt-df [-options]\n\nOPTIONS" +msgstr "virt-df: podobne do \"df\", pokazuje użytą przestrzeń na dysku w gościach\n\nPODSUMOWANIE\n virt-df [-opcje]\n\nOPCJE" + +#: ../virt-top/virt_top.ml:1543 +msgid "virt-top %s (libvirt %d.%d.%d) by Red Hat" +msgstr "virt-top %s (libvirt %d.%d.%d) od Red Hata" + +#: ../virt-top/virt_top.ml:203 +msgid "virt-top : a 'top'-like utility for virtualization\n\nSUMMARY\n virt-top [-options]\n\nOPTIONS" +msgstr "virt-top: narzędzie podobne do \"top\" dla wirtualizacji\n\nPODSUMOWANIE\n virt-top [-opcje]\n\nOPCJE" + +#: ../virt-top/virt_top.ml:40 +msgid "virt-top was compiled without support for CSV files" +msgstr "virt-top został skompilowany bez obsługi plików CSV" + +#: ../virt-top/virt_top.ml:51 +msgid "virt-top was compiled without support for dates and times" +msgstr "virt-top został skompilowany bez obsługi dat i czasu" + +#: ../mlvirsh/mlvirsh.ml:360 +msgid "virtual CPU: %d\\n" +msgstr "wirtualny procesor: %d\\n" + +#: ../virt-ctrl/vc_dbus.ml:219 +msgid "warning: ignored unknown message %s from %s\\n%!" +msgstr "ostrzeżenie: zignorowano nieznany komunikat %s z %s\\n%!" + +#: ../virt-ctrl/vc_dbus.ml:124 +msgid "warning: unexpected message contents of Found signal" +msgstr "ostrzeżenie: nieoczekiwana zawartość komunikatu sygnału \"Found\"" + +#: ../virt-ctrl/vc_dbus.ml:188 +msgid "warning: unexpected message contents of ItemNew signal" +msgstr "ostrzeżenie: nieoczekiwana zawartość komunikatu sygnału \"ItemNew\"" + +#: ../virt-ctrl/vc_dbus.ml:140 +msgid "warning: unexpected message contents of ItemRemove signal" +msgstr "ostrzeżenie: nieoczekiwana zawartość komunikatu sygnału \"ItemRemove\"" + +#: ../mlvirsh/mlvirsh.ml:378 +msgid "write bytes: %Ld\\n" +msgstr "bajty zapisu: %Ld\\n" + +#: ../mlvirsh/mlvirsh.ml:377 +msgid "write requests: %Ld\\n" +msgstr "żądania zapisu: %Ld\\n" diff --git a/po/virt-top.pot b/po/virt-top.pot new file mode 100644 index 0000000..68806b4 --- /dev/null +++ b/po/virt-top.pot @@ -0,0 +1,1023 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-03-28 17:30+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" + +#: ../virt-top/virt_top.ml:1490 +msgid "# .virt-toprc virt-top configuration file\\n" +msgstr "" + +#: ../virt-top/virt_top.ml:1508 +msgid "# Enable CSV output to the named file\\n" +msgstr "" + +#: ../virt-top/virt_top.ml:1511 +msgid "# To protect this file from being overwritten, uncomment next line\\n" +msgstr "" + +#: ../virt-top/virt_top.ml:1505 +msgid "# To send debug and error messages to a file, uncomment next line\\n" +msgstr "" + +#: ../virt-top/virt_top.ml:1491 +msgid "# generated on %s by %s\\n" +msgstr "" + +#: ../virt-top/virt_top.ml:63 +msgid "%CPU" +msgstr "" + +#: ../virt-top/virt_top.ml:64 +msgid "%MEM" +msgstr "" + +#: ../virt-top/virt_top.ml:1144 +msgid "%d domains, %d active, %d running, %d sleeping, %d paused, %d inactive D:%d O:%d X:%d" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:716 +msgid "%s: command not found" +msgstr "" + +#: ../virt-top/virt_top.ml:105 +msgid "%s: display should be %s" +msgstr "" + +#: ../virt-top/virt_top.ml:82 +msgid "%s: sort order should be: %s" +msgstr "" + +#: ../virt-df/virt_df.ml:362 ../virt-top/virt_top.ml:202 +msgid "%s: unknown parameter" +msgstr "" + +#: ../virt-top/virt_top.ml:233 +msgid "%s:%d: configuration item ``%s'' ignored\\n%!" +msgstr "" + +#: ../virt-df/virt_df.ml:514 +msgid "(device omitted)" +msgstr "" + +#: ../virt-top/virt_top.ml:145 +msgid "-d: cannot set a negative delay" +msgstr "" + +#: ../virt-df/virt_df.ml:498 +msgid "1K-blocks" +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:97 +msgid "About ..." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:399 +msgid "Attach device to domain." +msgstr "" + +#: ../virt-df/virt_df.ml:499 ../virt-df/virt_df.ml:498 +msgid "Available" +msgstr "" + +#: ../virt-top/virt_top.ml:167 +msgid "Batch mode" +msgstr "" + +#: ../virt-top/virt_top.ml:70 +msgid "Block read reqs" +msgstr "" + +#: ../virt-top/virt_top.ml:71 +msgid "Block write reqs" +msgstr "" + +#: ../virt-ctrl/vc_connections.ml:408 +msgid "CPU" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:365 +msgid "CPU affinity" +msgstr "" + +#: ../virt-top/virt_top.ml:1151 +msgid "CPU: %2.1f%% Mem: %Ld MB (%Ld MB by guests)" +msgstr "" + +#: ../virt-ctrl/vc_connection_dlg.ml:182 +msgid "Cancel" +msgstr "" + +#: ../virt-top/virt_top.ml:1319 +msgid "Change delay from %.1f to: " +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:409 +msgid "Close an existing hypervisor connection." +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:118 +msgid "Connect ..." +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:160 +msgid "Connect to ..." +msgstr "" + +#: ../virt-df/virt_df.ml:348 ../virt-df/virt_df.ml:346 ../virt-top/virt_top.ml:171 ../virt-top/virt_top.ml:169 +msgid "Connect to URI (default: Xen)" +msgstr "" + +#: ../virt-top/virt_top.ml:1558 +msgid "Connect: %s; Hostname: %s" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:476 +msgid "Core dump a domain to a file for analysis." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:422 +msgid "Create a domain from an XML file." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:534 +msgid "Create a network from an XML file." +msgstr "" + +#: ../virt-top/virt_top.ml:1596 +msgid "DISPLAY MODES" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:426 +msgid "Define (but don't start) a domain from an XML file." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:538 +msgid "Define (but don't start) a network from an XML file." +msgstr "" + +#: ../virt-top/virt_top.ml:1326 +msgid "Delay must be > 0" +msgstr "" + +#: ../virt-top/virt_top.ml:181 +msgid "Delay time interval (seconds)" +msgstr "" + +#: ../virt-top/virt_top.ml:1552 +msgid "Delay: %.1f secs; Batch: %s; Secure: %s; Sort: %s" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:433 +msgid "Destroy a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:541 +msgid "Destroy a network." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:430 +msgid "Detach device from domain." +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:123 +msgid "Details" +msgstr "" + +#: ../virt-top/virt_top.ml:175 +msgid "Disable CPU stats in CSV" +msgstr "" + +#: ../virt-top/virt_top.ml:177 +msgid "Disable block device stats in CSV" +msgstr "" + +#: ../virt-top/virt_top.ml:179 +msgid "Disable net stats in CSV" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:493 +msgid "Display free memory for machine, NUMA cell or range of cells" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:437 +msgid "Display the block device statistics for a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:444 +msgid "Display the network interface statistics for a domain." +msgstr "" + +#: ../virt-df/virt_df.ml:358 +msgid "Display version and exit" +msgstr "" + +#: ../virt-top/virt_top.ml:191 +msgid "Do not read init file" +msgstr "" + +#: ../virt-top/virt_top.ml:66 +msgid "Domain ID" +msgstr "" + +#: ../virt-top/virt_top.ml:67 +msgid "Domain name" +msgstr "" + +#: ../virt-top/virt_top.ml:1610 +msgid "Domains display" +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:61 ../virt-top/virt_top_main.ml:47 ../virt-top/virt_top.ml:1528 +msgid "Error" +msgstr "" + +#: ../virt-top/virt_top.ml:185 +msgid "Exit at given time" +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:79 +msgid "File" +msgstr "" + +#: ../virt-df/virt_df.ml:502 +msgid "Filesystem" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:606 +msgid "Get the current scheduler parameters for a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:623 +msgid "Get the scheduler type." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:635 +msgid "Gracefully shutdown a domain." +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:96 ../virt-ctrl/vc_mainwindow.ml:80 ../virt-top/virt_top.ml:1580 +msgid "Help" +msgstr "" + +#: ../virt-top/virt_top.ml:187 +msgid "Historical CPU delay" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:35 +msgid "Hypervisor connection URI" +msgstr "" + +#: ../virt-ctrl/vc_connections.ml:405 +msgid "ID" +msgstr "" + +#: ../virt-df/virt_df.ml:500 +msgid "IFree" +msgstr "" + +#: ../virt-df/virt_df.ml:500 +msgid "IUse" +msgstr "" + +#: ../virt-df/virt_df.ml:500 +msgid "Inodes" +msgstr "" + +#: ../virt-df/virt_df_lvm2.ml:33 +msgid "LVM2 not supported yet" +msgstr "" + +#: ../virt-df/virt_df_ext2.ml:82 +msgid "Linux ext2/3" +msgstr "" + +#: ../virt-df/virt_df_linux_swap.ml:33 +msgid "Linux swap" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:557 +msgid "List the active networks." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:565 +msgid "List the defined but inactive networks." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:516 +msgid "List the defined but not running domains." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:508 +msgid "List the running domains." +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:158 +msgid "Local QEMU/KVM" +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:157 +msgid "Local Xen" +msgstr "" + +#: ../virt-ctrl/vc_connection_dlg.ml:93 +msgid "Local network" +msgstr "" + +#: ../virt-top/virt_top.ml:173 +msgid "Log statistics to CSV file" +msgstr "" + +#: ../virt-top/virt_top.ml:1563 +msgid "MAIN KEYS" +msgstr "" + +#: ../virt-ctrl/vc_connections.ml:409 +msgid "Memory" +msgstr "" + +#: ../virt-top/virt_top.ml:1617 +msgid "More help in virt-top(1) man page. Press any key to return." +msgstr "" + +#: ../virt-df/virt_df.ml:382 ../virt-top/virt_top.ml:258 +msgid "NB: If you want to monitor a local Xen hypervisor, you usually need to be root" +msgstr "" + +#: ../virt-ctrl/vc_connections.ml:406 +msgid "Name" +msgstr "" + +#: ../virt-top/virt_top.ml:68 +msgid "Net RX bytes" +msgstr "" + +#: ../virt-top/virt_top.ml:69 +msgid "Net TX bytes" +msgstr "" + +#: ../virt-top/virt_top.ml:1332 +msgid "Not a valid number" +msgstr "" + +#: ../virt-top/virt_top.ml:193 +msgid "Number of iterations to run" +msgstr "" + +#: ../virt-ctrl/vc_connection_dlg.ml:170 ../virt-ctrl/vc_connection_dlg.ml:137 +msgid "Open" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:418 +msgid "Open a new hypervisor connection." +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:86 +msgid "Open connection ..." +msgstr "" + +#: ../virt-ctrl/vc_connection_dlg.ml:40 +msgid "Open connection to hypervisor" +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:130 +msgid "Pause" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:670 ../mlvirsh/mlvirsh.ml:666 +msgid "Pin domain VCPU to a list of physical CPUs." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:706 +msgid "Print list of commands or full description of one command." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:584 +msgid "Print node information." +msgstr "" + +#: ../virt-df/virt_df.ml:352 ../virt-df/virt_df.ml:350 +msgid "Print sizes in human-readable format" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:440 +msgid "Print the ID of a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:464 +msgid "Print the OS type of a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:472 +msgid "Print the UUID of a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:581 +msgid "Print the UUID of a network." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:480 +msgid "Print the XML description of a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:545 +msgid "Print the XML description of a network." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:530 +msgid "Print the bridge name of a network." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:653 +msgid "Print the canonical URI." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:448 +msgid "Print the domain info." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:468 +msgid "Print the domain state." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:646 +msgid "Print the driver name" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:677 +msgid "Print the driver version" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:500 +msgid "Print the hostname." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:522 +msgid "Print the max VCPUs available." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:456 +msgid "Print the max VCPUs of a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:452 +msgid "Print the max memory (in kilobytes) of a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:460 +msgid "Print the name of a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:569 +msgid "Print the name of a network." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:497 +msgid "Print whether a domain autostarts at boot." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:549 +msgid "Print whether a network autostarts at boot." +msgstr "" + +#: ../virt-ctrl/vc_connection_dlg.ml:83 +msgid "QEMU or KVM" +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:89 ../virt-top/virt_top.ml:1578 +msgid "Quit" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:519 +msgid "Quit the interactive terminal." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:36 +msgid "Read-only connection" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:587 +msgid "Reboot a domain." +msgstr "" + +#: ../virt-ctrl/vc_connection_dlg.ml:134 +msgid "Refresh" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:592 +msgid "Restore a domain from the named file." +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:133 +msgid "Resume" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:595 +msgid "Resume a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:406 +msgid "Returns capabilities of hypervisor/driver." +msgstr "" + +#: ../virt-top/virt_top.ml:199 +msgid "Run from a script (no user interface)" +msgstr "" + +#: ../virt-top/virt_top.ml:1584 +msgid "SORTING" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:599 +msgid "Save a domain to a file." +msgstr "" + +#: ../virt-top/virt_top.ml:197 +msgid "Secure (\\\"kiosk\\\") mode" +msgstr "" + +#: ../virt-top/virt_top.ml:1593 +msgid "Select sort field" +msgstr "" + +#: ../virt-top/virt_top.ml:183 +msgid "Send debug messages to file" +msgstr "" + +#: ../virt-top/virt_top.ml:189 +msgid "Set name of init file" +msgstr "" + +#: ../virt-top/virt_top.ml:195 +msgid "Set sort order (%s)" +msgstr "" + +#: ../virt-top/virt_top.ml:1340 +msgid "Set sort order for main display" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:631 +msgid "Set the maximum memory used by the domain (in kilobytes)." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:627 +msgid "Set the memory used by the domain (in kilobytes)." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:674 +msgid "Set the number of virtual CPUs assigned to a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:618 +msgid "Set the scheduler parameters for a domain." +msgstr "" + +#: ../virt-top/virt_top.ml:1579 +msgid "Set update interval" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:403 +msgid "Set whether a domain autostarts at boot." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:526 +msgid "Set whether a network autostarts at boot." +msgstr "" + +#: ../virt-df/virt_df.ml:344 ../virt-df/virt_df.ml:342 +msgid "Show all domains (default: only active domains)" +msgstr "" + +#: ../virt-df/virt_df.ml:356 ../virt-df/virt_df.ml:354 +msgid "Show inodes instead of blocks" +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:137 +msgid "Shutdown" +msgstr "" + +#: ../virt-df/virt_df.ml:499 +msgid "Size" +msgstr "" + +#: ../virt-top/virt_top.ml:1589 +msgid "Sort by %CPU" +msgstr "" + +#: ../virt-top/virt_top.ml:1590 +msgid "Sort by %MEM" +msgstr "" + +#: ../virt-top/virt_top.ml:1592 +msgid "Sort by ID" +msgstr "" + +#: ../virt-top/virt_top.ml:1591 +msgid "Sort by TIME" +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:127 +msgid "Start" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:639 +msgid "Start a previously defined inactive domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:573 +msgid "Start a previously defined inactive network." +msgstr "" + +#: ../virt-top/virt_top.ml:165 +msgid "Start by displaying block devices" +msgstr "" + +#: ../virt-top/virt_top.ml:163 +msgid "Start by displaying network interfaces" +msgstr "" + +#: ../virt-top/virt_top.ml:161 +msgid "Start by displaying pCPUs (default: tasks)" +msgstr "" + +#: ../virt-ctrl/vc_connections.ml:407 +msgid "Status" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:643 +msgid "Suspend a domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:40 +msgid "Synopsis:\n %s [options] [command]\n\nList of all commands:\n %s help\n\nFull description of a single command:\n %s help command\n\nOptions:" +msgstr "" + +#: ../virt-top/virt_top.ml:65 +msgid "TIME (CPU time)" +msgstr "" + +#: ../virt-ctrl/vc_connection_dlg.ml:62 +msgid "This machine" +msgstr "" + +#: ../virt-top/virt_top.ml:1613 +msgid "Toggle block devices" +msgstr "" + +#: ../virt-top/virt_top.ml:1612 +msgid "Toggle network interfaces" +msgstr "" + +#: ../virt-top/virt_top.ml:1611 +msgid "Toggle physical CPUs" +msgstr "" + +#: ../virt-df/virt_df.ml:502 +msgid "Type" +msgstr "" + +#: ../virt-top/virt_top.ml:1341 +msgid "Type key or use up and down cursor keys." +msgstr "" + +#: ../virt-ctrl/vc_connection_dlg.ml:160 +msgid "URI connection" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:650 +msgid "Undefine an inactive domain." +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:577 +msgid "Undefine an inactive network." +msgstr "" + +#: ../virt-top/virt_top.ml:1622 +msgid "Unknown command - try 'h' for help" +msgstr "" + +#: ../virt-top/virt_top.ml:1577 +msgid "Update display" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:690 +msgid "Use '%s help command' for help on a command." +msgstr "" + +#: ../virt-df/virt_df.ml:499 ../virt-df/virt_df.ml:498 +msgid "Used" +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:23 +msgid "Virtual Control" +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:53 +msgid "Virtualisation error" +msgstr "" + +#: ../virt-ctrl/vc_mainwindow.ml:39 +msgid "Virtualization control tool (virt-ctrl) by\nRichard W.M. Jones (rjones@redhat.com).\n\nCopyright %s 2007-2008 Red Hat Inc.\n\nLibvirt version: %s\n\nGtk toolkit version: %s" +msgstr "" + +#: ../virt-top/virt_top.ml:1523 +msgid "Wrote settings to %s" +msgstr "" + +#: ../virt-ctrl/vc_connection_dlg.ml:76 +msgid "Xen hypervisor" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:364 +msgid "\\tCPU time: %Ld ns\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:362 +msgid "\\tcurrent state: %s\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:361 +msgid "\\ton physical CPU: %d\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:298 ../mlvirsh/mlvirsh.ml:289 ../virt-ctrl/vc_helpers.ml:54 +msgid "blocked" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:330 +msgid "cores: %d\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:342 +msgid "cpu_time: %Ld ns\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:326 +msgid "cpus: %d\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:293 ../virt-ctrl/vc_helpers.ml:58 +msgid "crashed" +msgstr "" + +#: ../virt-df/virt_df.ml:236 +msgid "detection of unpartitioned devices not yet supported" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:242 +msgid "domain %s: not found. Additional info: %s" +msgstr "" + +#: ../virt-df/virt_df_ext2.ml:39 +msgid "error reading ext2/ext3 magic" +msgstr "" + +#: ../virt-df/virt_df.ml:182 +msgid "error reading extended partition" +msgstr "" + +#: ../virt-df/virt_df.ml:149 +msgid "error reading partition table" +msgstr "" + +#: ../virt-ctrl/vc_dbus.ml:239 +msgid "error set after getting System bus" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:379 +msgid "errors: %Ld\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:258 +msgid "expected field value pairs, but got an odd number of arguments" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:610 +msgid "expecting domain followed by field value pairs" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:220 +msgid "flag should be '%s'" +msgstr "" + +#: ../virt-df/virt_df.ml:419 ../virt-top/virt_top_xml.ml:46 +msgid "get_xml_desc didn't return " +msgstr "" + +#: ../virt-df/virt_df.ml:427 +msgid "get_xml_desc returned no node in XML" +msgstr "" + +#: ../virt-df/virt_df.ml:430 +msgid "get_xml_desc returned strange node" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:700 +msgid "help: %s: command not found" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:188 ../mlvirsh/mlvirsh.ml:182 ../mlvirsh/mlvirsh.ml:177 ../mlvirsh/mlvirsh.ml:172 ../mlvirsh/mlvirsh.ml:168 ../mlvirsh/mlvirsh.ml:164 ../mlvirsh/mlvirsh.ml:160 +msgid "incorrect number of arguments for function" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:339 +msgid "max_mem: %Ld K\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:340 ../mlvirsh/mlvirsh.ml:325 +msgid "memory: %Ld K\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:327 +msgid "mhz: %d\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:727 +msgid "mlvirsh" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:725 +msgid "mlvirsh(no connection)" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:726 +msgid "mlvirsh(ro)" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:324 +msgid "model: %s\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:253 +msgid "network %s: not found. Additional info: %s" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:328 +msgid "nodes: %d\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:202 ../mlvirsh/mlvirsh.ml:197 +msgid "not connected to the hypervisor" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:341 +msgid "nr_virt_cpu: %d\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:296 +msgid "offline" +msgstr "" + +#: ../virt-df/virt_df_ext2.ml:42 +msgid "partition marked EXT2/3 but no valid filesystem" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:290 ../virt-ctrl/vc_helpers.ml:55 +msgid "paused" +msgstr "" + +#: ../virt-df/virt_df.ml:188 +msgid "probe_extended_partition: internal error" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:376 +msgid "read bytes: %Ld\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:375 +msgid "read requests: %Ld\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:297 ../mlvirsh/mlvirsh.ml:288 ../virt-ctrl/vc_helpers.ml:53 +msgid "running" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:384 +msgid "rx bytes: %Ld\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:387 +msgid "rx dropped: %Ld\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:386 +msgid "rx errs: %Ld\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:385 +msgid "rx packets: %Ld\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:226 +msgid "setting should be '%s' or '%s'" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:291 ../virt-ctrl/vc_helpers.ml:56 +msgid "shutdown" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:292 ../virt-ctrl/vc_helpers.ml:57 +msgid "shutoff" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:329 +msgid "sockets: %d\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:338 +msgid "state: %s\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:331 +msgid "threads: %d\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:198 +msgid "tried to do read-write operation on read-only hypervisor connection" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:388 +msgid "tx bytes: %Ld\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:391 +msgid "tx dropped: %Ld\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:390 +msgid "tx errs: %Ld\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:389 +msgid "tx packets: %Ld\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:287 ../virt-ctrl/vc_helpers.ml:52 +msgid "unknown" +msgstr "" + +#: ../virt-df/virt_df.ml:246 +msgid "unsupported partition type %02x" +msgstr "" + +#: ../virt-df/virt_df.ml:363 +msgid "virt-df : like 'df', shows disk space used in guests\n\nSUMMARY\n virt-df [-options]\n\nOPTIONS" +msgstr "" + +#: ../virt-top/virt_top.ml:1543 +msgid "virt-top %s (libvirt %d.%d.%d) by Red Hat" +msgstr "" + +#: ../virt-top/virt_top.ml:203 +msgid "virt-top : a 'top'-like utility for virtualization\n\nSUMMARY\n virt-top [-options]\n\nOPTIONS" +msgstr "" + +#: ../virt-top/virt_top.ml:40 +msgid "virt-top was compiled without support for CSV files" +msgstr "" + +#: ../virt-top/virt_top.ml:51 +msgid "virt-top was compiled without support for dates and times" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:360 +msgid "virtual CPU: %d\\n" +msgstr "" + +#: ../virt-ctrl/vc_dbus.ml:219 +msgid "warning: ignored unknown message %s from %s\\n%!" +msgstr "" + +#: ../virt-ctrl/vc_dbus.ml:124 +msgid "warning: unexpected message contents of Found signal" +msgstr "" + +#: ../virt-ctrl/vc_dbus.ml:188 +msgid "warning: unexpected message contents of ItemNew signal" +msgstr "" + +#: ../virt-ctrl/vc_dbus.ml:140 +msgid "warning: unexpected message contents of ItemRemove signal" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:378 +msgid "write bytes: %Ld\\n" +msgstr "" + +#: ../mlvirsh/mlvirsh.ml:377 +msgid "write requests: %Ld\\n" +msgstr "" + diff --git a/virt-ctrl/.depend b/virt-ctrl/.depend new file mode 100644 index 0000000..84ba14c --- /dev/null +++ b/virt-ctrl/.depend @@ -0,0 +1,28 @@ +vc_connections.cmi: ../libvirt/libvirt.cmi +vc_domain_ops.cmi: vc_connections.cmi +vc_helpers.cmi: ../libvirt/libvirt.cmi +vc_mainwindow.cmi: vc_domain_ops.cmi +vc_connection_dlg.cmo: virt_ctrl_gettext.cmo vc_connections.cmi \ + vc_connection_dlg.cmi +vc_connection_dlg.cmx: virt_ctrl_gettext.cmx vc_connections.cmx \ + vc_connection_dlg.cmi +vc_connections.cmo: virt_ctrl_gettext.cmo vc_helpers.cmi \ + ../libvirt/libvirt.cmi vc_connections.cmi +vc_connections.cmx: virt_ctrl_gettext.cmx vc_helpers.cmx \ + ../libvirt/libvirt.cmx vc_connections.cmi +vc_dbus.cmo: virt_ctrl_gettext.cmo vc_connection_dlg.cmi vc_dbus.cmi +vc_dbus.cmx: virt_ctrl_gettext.cmx vc_connection_dlg.cmx vc_dbus.cmi +vc_domain_ops.cmo: virt_ctrl_gettext.cmo vc_connections.cmi \ + ../libvirt/libvirt.cmi vc_domain_ops.cmi +vc_domain_ops.cmx: virt_ctrl_gettext.cmx vc_connections.cmx \ + ../libvirt/libvirt.cmx vc_domain_ops.cmi +vc_helpers.cmo: virt_ctrl_gettext.cmo ../libvirt/libvirt.cmi vc_helpers.cmi +vc_helpers.cmx: virt_ctrl_gettext.cmx ../libvirt/libvirt.cmx vc_helpers.cmi +vc_icons.cmo: vc_connection_dlg.cmi +vc_icons.cmx: vc_connection_dlg.cmx +vc_mainwindow.cmo: virt_ctrl_gettext.cmo vc_connections.cmi \ + vc_connection_dlg.cmi ../libvirt/libvirt.cmi vc_mainwindow.cmi +vc_mainwindow.cmx: virt_ctrl_gettext.cmx vc_connections.cmx \ + vc_connection_dlg.cmx ../libvirt/libvirt.cmx vc_mainwindow.cmi +virt_ctrl.cmo: virt_ctrl_gettext.cmo vc_mainwindow.cmi vc_domain_ops.cmi +virt_ctrl.cmx: virt_ctrl_gettext.cmx vc_mainwindow.cmx vc_domain_ops.cmx diff --git a/virt-ctrl/Makefile.in b/virt-ctrl/Makefile.in new file mode 100644 index 0000000..7e7c5c4 --- /dev/null +++ b/virt-ctrl/Makefile.in @@ -0,0 +1,136 @@ +# virt-ctrl (originally called mlvirtmanager) +# Copyright (C) 2007 Red Hat Inc., Richard W.M. Jones +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +INSTALL := @INSTALL@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +bindir = @bindir@ + +with_icons = @with_icons@ +icons = @icons@ + +HAVE_GDK_PIXBUF_MLSOURCE = @HAVE_GDK_PIXBUF_MLSOURCE@ + +pkg_dbus = @pkg_dbus@ +pkg_gettext = @pkg_gettext@ + +OCAMLFIND = @OCAMLFIND@ + +OBJS := \ + virt_ctrl_gettext.cmo \ + vc_helpers.cmo \ + vc_connections.cmo \ + vc_domain_ops.cmo \ + vc_connection_dlg.cmo \ + vc_mainwindow.cmo + +ifneq ($(OCAMLFIND),) +# Good, we have ocamlfind. +OCAMLCPACKAGES := -I ../libvirt -package unix,lablgtk2 +ifeq ($(pkg_dbus),yes) +OCAMLCPACKAGES += -package dbus +OBJS += vc_dbus.cmo +endif +ifeq ($(pkg_gettext),yes) +OCAMLCPACKAGES += -package gettext-stub +endif +OCAMLCFLAGS := -g +OCAMLCLIBS := -linkpkg +OCAMLOPTPACKAGES := $(OCAMLCPACKAGES) +OCAMLOPTFLAGS := +OCAMLOPTLIBS := $(OCAMLCLIBS) +else +# Bad boy, please install ocamlfind. +OCAMLCINCS := -I ../libvirt -I @pkg_lablgtk2@ +OCAMLCFLAGS := -g +OCAMLCLIBS := unix.cma lablgtk.cma +OCAMLOPTINCS := $(OCAMLCINCS) +OCAMLOPTFLAGS := +OCAMLOPTLIBS := unix.cmxa lablgtk.cmxa +endif + +ifneq ($(with_icons),no) +OBJS += vc_icons.cmo +endif + +export LIBRARY_PATH=../libvirt +export LD_LIBRARY_PATH=../libvirt + +BYTE_TARGETS := virt-ctrl +OPT_TARGETS := virt-ctrl.opt + +OBJS += virt_ctrl.cmo + +XOBJS := $(OBJS:.cmo=.cmx) + +all: $(BYTE_TARGETS) + +opt: $(OPT_TARGETS) + +ifneq ($(OCAMLFIND),) +virt-ctrl: $(OBJS) + $(OCAMLFIND) ocamlc $(OCAMLCPACKAGES) $(OCAMLCFLAGS) $(OCAMLCLIBS) \ + ../libvirt/mllibvirt.cma gtkInit.cmo -o $@ $^ + +virt-ctrl.opt: $(XOBJS) + $(OCAMLFIND) ocamlopt \ + $(OCAMLOPTPACKAGES) $(OCAMLOPTFLAGS) $(OCAMLOPTLIBS) \ + ../libvirt/mllibvirt.cmxa gtkInit.cmx -o $@ $^ +else +virt-ctrl: $(OBJS) + $(OCAMLC) $(OCAMLCINCS) $(OCAMLCFLAGS) $(OCAMLCLIBS) \ + ../libvirt/mllibvirt.cma gtkInit.cmo -o $@ $^ + +host_os = @host_os@ + +ifneq ($(host_os),mingw32) +virt-ctrl.opt: $(XOBJS) + $(OCAMLOPT) $(OCAMLOPTINCS) $(OCAMLOPTFLAGS) $(OCAMLOPTLIBS) \ + $(patsubst %,-cclib %,$(LDFLAGS)) \ + ../libvirt/mllibvirt.cmxa gtkInit.cmx -o $@ $^ +else +# On MinGW, use a hacked 'gcc' wrapper which understands the @... +# syntax for extending the command line. +gcc.exe: mingw-gcc-wrapper.ml + $(OCAMLC) unix.cma $< -o $@ + +virt-ctrl.opt: $(XOBJS) gcc.exe + PATH=.:$$PATH \ + $(OCAMLOPT) $(OCAMLOPTINCS) $(OCAMLOPTFLAGS) $(OCAMLOPTLIBS) \ + $(patsubst %,-cclib %,$(LDFLAGS)) \ + ../libvirt/mllibvirt.cmxa gtkInit.cmx -o $@ $(XOBJS) +endif +endif + +# Rebuild the icons if newer ones available. +ifneq ($(with_icons),no) +ifneq ($(icons),) +ifeq ($(HAVE_GDK_PIXBUF_MLSOURCE),gdk-pixbuf-mlsource) +vc_icons.ml: rebuild-icons.sh + ./rebuild-icons.sh $(icons) > $@ +endif +endif +endif + +install: + if [ -x virt-ctrl.opt ]; then \ + mkdir -p $(DESTDIR)$(bindir); \ + $(INSTALL) -m 0755 virt-ctrl.opt $(DESTDIR)$(bindir)/virt-ctrl; \ + fi + +include ../Make.rules diff --git a/virt-ctrl/mingw-gcc-wrapper.ml b/virt-ctrl/mingw-gcc-wrapper.ml new file mode 100755 index 0000000..21cdb8f --- /dev/null +++ b/virt-ctrl/mingw-gcc-wrapper.ml @@ -0,0 +1,70 @@ +(* Wrapper around 'gcc'. On MinGW, this wrapper understands the '@...' + * syntax for extending the command line. + *) + +open Printf +open Unix + +let (//) = Filename.concat + +(* Substitute any @... arguments with the file content. *) +let rec input_all_lines chan = + try + let line = input_line chan in + line :: input_all_lines chan + with + End_of_file -> [] + +let argv = Array.map ( + fun arg -> + if arg.[0] = '@' then ( + let chan = open_in (String.sub arg 1 (String.length arg - 1)) in + let lines = input_all_lines chan in + close_in chan; + lines + ) else + [arg] +) Sys.argv + +let argv = Array.to_list argv +let argv = List.flatten argv + +(* Find the real gcc.exe on $PATH, but ignore any '.' elements in the path. + * Note that on Windows, $PATH is split with ';' characters. + *) +let rec split_find str sep f = + try + let i = String.index str sep in + let n = String.length str in + let str, str' = String.sub str 0 i, String.sub str (i+1) (n-i-1) in + match f str with + | None -> split_find str' sep f (* not found, keep searching *) + | Some found -> found + with + Not_found -> + match f str with + | None -> raise Not_found (* not found at all *) + | Some found -> found + +let exists filename = + try access filename [F_OK]; true with Unix_error _ -> false + +let gcc = + split_find (Sys.getenv "PATH") ';' + (function + | "." -> None (* ignore current directory in path *) + | path -> + let gcc = path // "gcc.exe" in + if exists gcc then Some gcc else None) + +(* Finally execute the real gcc with the full argument list. + * Can't use execv here because then the parent process (ocamlopt) thinks + * that this process has finished and deletes all the temp files. Stupid + * Windoze! + *) +let _ = + let argv = List.map Filename.quote (List.tl argv) in + let cmd = String.concat " " (gcc :: argv) in + eprintf "mingw-gcc-wrapper: %s\n%!" cmd; + let r = Sys.command cmd in + exit r diff --git a/virt-ctrl/rebuild-icons.sh b/virt-ctrl/rebuild-icons.sh new file mode 100755 index 0000000..399e182 --- /dev/null +++ b/virt-ctrl/rebuild-icons.sh @@ -0,0 +1,44 @@ +#!/bin/sh - +# Copyright (C) 2008 Red Hat Inc., Richard W.M. Jones +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +# Generate vc_icons.ml + +echo <<'EOF' +(* The file vc_icons.ml is automatically generated from rebuild-icons.sh + * Any changes you make will be lost. + *) + +EOF +echo + +# Open any modules which may use icons. +echo "open Vc_connection_dlg" +echo + +while [ $# -gt 0 ]; do + size="$1" + name="$2" + filename="$3" + shift 3 + + gdk-pixbuf-mlsource "$filename" + echo ";;" + + name=`echo -n $name | tr -cs '[0-9a-zA-Z]' '_'` + + echo "icon_${size}x${size}_$name := Some (pixbuf ()) ;;" +done \ No newline at end of file diff --git a/virt-ctrl/vc_connection_dlg.ml b/virt-ctrl/vc_connection_dlg.ml new file mode 100644 index 0000000..f072a1d --- /dev/null +++ b/virt-ctrl/vc_connection_dlg.ml @@ -0,0 +1,203 @@ +(* virt-ctrl: A graphical management tool. + (C) Copyright 2007 Richard W.M. Jones, Red Hat Inc. + http://libvirt.org/ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*) + +open Virt_ctrl_gettext.Gettext + +type name = string +type uri = string +type service = name * uri + +let local_xen_uri = "xen:///" +let local_qemu_uri = "qemu:///system" + +(* Code in Vc_dbus overrides this, if that capability was compiled in. *) +let find_libvirtd_with_zeroconf = ref (fun () -> []) + +(* Code in Vc_icons may override these with icons. *) +let icon_16x16_devices_computer_png = ref None +let icon_24x24_devices_computer_png = ref None +let icon_32x32_devices_computer_png = ref None +let icon_48x48_devices_computer_png = ref None + +(* Open connection dialog. *) +let open_connection parent () = + let title = s_ "Open connection to hypervisor" in + let position = `CENTER_ON_PARENT in + + let dlg = GWindow.dialog ~title ~position ~parent + ~modal:true ~width:450 () in + + (* We will enter the Gtk main loop recursively. Wire up close and + * other buttons to quit the recursive main loop. + *) + ignore (dlg#connect#destroy ~callback:GMain.quit); + ignore (dlg#event#connect#delete + ~callback:(fun _ -> GMain.quit (); false)); + + let uri = ref None in + + (* Pack the buttons into the dialog. *) + let vbox = dlg#vbox in + vbox#set_spacing 5; + + (* Local connections. *) + let () = + let frame = + GBin.frame ~label:(s_ "This machine") ~packing:vbox#pack () in + let hbox = GPack.hbox ~packing:frame#add () in + hbox#set_spacing 20; + ignore ( + let packing = hbox#pack in + match !icon_24x24_devices_computer_png with + | None -> GMisc.image ~stock:`DIRECTORY ~packing () + | Some pixbuf -> GMisc.image ~pixbuf ~packing () + ); + + let vbox = GPack.vbox ~packing:hbox#pack () in + vbox#set_spacing 5; + + let xen_button = + GButton.button ~label:(s_ "Xen hypervisor") + ~packing:vbox#pack () in + ignore (xen_button#connect#clicked + ~callback:(fun () -> + uri := Some local_xen_uri; + dlg#destroy ())); + let qemu_button = + GButton.button ~label:(s_ "QEMU or KVM") + ~packing:vbox#pack () in + ignore (qemu_button#connect#clicked + ~callback:(fun () -> + uri := Some local_qemu_uri; + dlg#destroy ())) in + + (* Network connections. *) + let () = + let frame = + GBin.frame ~label:(s_ "Local network") + ~packing:(vbox#pack ~expand:true) () in + let hbox = GPack.hbox ~packing:frame#add () in + hbox#set_spacing 20; + ignore (GMisc.image ~stock:`NETWORK ~packing:hbox#pack ()); + + let vbox = GPack.vbox ~packing:(hbox#pack ~expand:true) () in + vbox#set_spacing 5; + + let cols = new GTree.column_list in + (*let col_icon = cols#add Gobject.Data.string in*) + let col_name = cols#add Gobject.Data.string in + let model = GTree.list_store cols in + + let icons = GTree.icon_view + ~selection_mode:`SINGLE ~model + ~height:200 + ~packing:(vbox#pack ~expand:true ~fill:true) () in + icons#set_border_width 4; + + (*icons#set_pixbuf_column col_icon;*) + icons#set_text_column col_name; + + let refresh () = + model#clear (); + let services = !find_libvirtd_with_zeroconf () in + + (*let pixbuf = !icon_16x16_devices_computer_png in*) + List.iter ( + fun (name, _) -> + let row = model#append () in + model#set ~row ~column:col_name name; + (*match pixbuf with + | None -> () + | Some pixbuf -> model#set ~row ~column:col_icon pixbuf*) + ) services + in + refresh (); + + let hbox = GPack.hbox ~packing:vbox#pack () in + let refresh_button = + GButton.button ~label:(s_ "Refresh") + ~stock:`REFRESH ~packing:hbox#pack () in + let open_button = + GButton.button ~label:(s_ "Open") ~packing:hbox#pack () in + + ignore (refresh_button#connect#clicked ~callback:refresh); + + (* Function callback when someone selects and hits Open. *) + let callback () = + match icons#get_selected_items with + | [] -> () (* nothing selected *) + | path :: _ -> + let row = model#get_iter path in + let name = model#get ~row ~column:col_name in + let services = !find_libvirtd_with_zeroconf () in + try + uri := Some (List.assoc name services); + dlg#destroy () + with + Not_found -> () in + + ignore (open_button#connect#clicked ~callback) in + + (* Custom connections. *) + let () = + let frame = + GBin.frame ~label:(s_ "URI connection") ~packing:vbox#pack () in + let hbox = GPack.hbox ~packing:frame#add () in + hbox#set_spacing 20; + ignore (GMisc.image ~stock:`CONNECT ~packing:hbox#pack ()); + + let hbox = GPack.hbox ~packing:(hbox#pack ~expand:true) () in + let entry = + GEdit.entry ~text:"xen://localhost/" + ~packing:(hbox#pack ~expand:true ~fill:true) () in + let button = + GButton.button ~label:(s_ "Open") ~packing:hbox#pack () in + + ignore (button#connect#clicked + ~callback:(fun () -> + uri := Some entry#text; + dlg#destroy ())); + + () in + + + (* Just a cancel button in the action area. *) + let cancel_button = + GButton.button ~label:(s_ "Cancel") + ~packing:dlg#action_area#pack () in + ignore (cancel_button#connect#clicked + ~callback:(fun () -> + uri := None; + dlg#destroy ())); + + dlg#show (); + + (* Enter Gtk main loop recursively. *) + GMain.main (); + + match !uri with + | None -> () + | Some uri -> Vc_connections.open_connection uri + +(* Callback from the Connect button drop-down menu. *) +let open_local_xen () = + Vc_connections.open_connection local_xen_uri + +let open_local_qemu () = + Vc_connections.open_connection local_qemu_uri diff --git a/virt-ctrl/vc_connection_dlg.mli b/virt-ctrl/vc_connection_dlg.mli new file mode 100644 index 0000000..0102713 --- /dev/null +++ b/virt-ctrl/vc_connection_dlg.mli @@ -0,0 +1,43 @@ +(* virt-ctrl: A graphical management tool. + (C) Copyright 2007 Richard W.M. Jones, Red Hat Inc. + http://libvirt.org/ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + Make the main window. +*) + +(** The connection dialog. *) +val open_connection : GWindow.window -> unit -> unit + +(** Quick connect to local Xen. *) +val open_local_xen : unit -> unit + +(** Quick connect to local QEMU or KVM. *) +val open_local_qemu : unit -> unit + +type name = string +type uri = string +type service = name * uri + +(** Hook to find libvirtd network services with zeroconf using some + external method, eg. D-Bus or Avahi. *) +val find_libvirtd_with_zeroconf : (unit -> service list) ref + +(** Hooks for icons. *) +val icon_16x16_devices_computer_png : GdkPixbuf.pixbuf option ref +val icon_24x24_devices_computer_png : GdkPixbuf.pixbuf option ref +val icon_32x32_devices_computer_png : GdkPixbuf.pixbuf option ref +val icon_48x48_devices_computer_png : GdkPixbuf.pixbuf option ref diff --git a/virt-ctrl/vc_connections.ml b/virt-ctrl/vc_connections.ml new file mode 100644 index 0000000..8f5fba0 --- /dev/null +++ b/virt-ctrl/vc_connections.ml @@ -0,0 +1,477 @@ +(* virt-ctrl: A graphical management tool. + (C) Copyright 2007 Richard W.M. Jones, Red Hat Inc. + http://libvirt.org/ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*) + +open Printf +open Virt_ctrl_gettext.Gettext + +module C = Libvirt.Connect +module D = Libvirt.Domain +module N = Libvirt.Network + +open Vc_helpers + +(* List of currently open connections. Actually it's a list of + * (id, Libvirt.Connect.t) so that we can easily identify + * connections by their unique ID. + *) +let get_conns, add_conn, del_conn = + let conns = ref [] in + let id = ref 0 in + let get_conns () = !conns in + let add_conn conn = + incr id; let id = !id in + conns := (id, conn) :: !conns; + id + in + let del_conn id = + conns := List.filter (fun (id', _) -> id <> id') !conns + in + get_conns, add_conn, del_conn + +(* Store the node_info and hostname for each connection, fetched + * once just after we connect since these don't normally change. + * Hash of connid -> (C.node_info, hostname option, uri) + *) +let static_conn_info = Hashtbl.create 13 + +let open_connection uri = + (* If this fails, let the exception escape and be printed + * in the global exception handler. + *) + let conn = C.connect ~name:uri () in + + let node_info = C.get_node_info conn in + let hostname = + try Some (C.get_hostname conn) + with + | Libvirt.Not_supported "virConnectGetHostname" + | Libvirt.Virterror _ -> None in + + (* Add it to our list of connections. *) + let conn_id = add_conn conn in + Hashtbl.add static_conn_info conn_id (node_info, hostname, uri) + +(* Stores the state and history for each domain. + * Hash of (connid, domid) -> mutable domhistory structure. + * We never delete entries in this hash table, which may be a problem + * for very very long-lived instances of virt-ctrl. + *) +type domhistory = { + (* for %CPU calculation: *) + mutable last_cpu_time : int64; (* last virDomainInfo->cpuTime *) + mutable last_time : float; (* exact time we measured the above *) + + (* historical data for graphs etc: *) + mutable hist : dhentry array; (* historical data *) + mutable hist_posn : int; (* position within array *) +} +and dhentry = { + hist_cpu : int; (* historical %CPU entry *) + hist_mem : int64; (* historical memory entry (KB) *) +} + +let domhistory = Hashtbl.create 13 + +let empty_dhentry = { + hist_cpu = 0; hist_mem = 0L; +} +let new_domhistory () = { + last_cpu_time = 0L; last_time = 0.; + hist = Array.make 0 empty_dhentry; hist_posn = 0; +} + +(* These set limits on the amount of history we collect. *) +let hist_max = 86400 (* max history stored, seconds *) +let hist_rot = 3600 (* rotation of array when we hit max *) + +(* The current state. This is used so that we can see changes that + * have happened and add or remove parts of the model. (Previously + * we used to recreate the whole model each time, but the problem + * with that is we "forget" things like the selection). + *) +type state = connection list +and connection = int (* connection ID *) * (active list * inactive list) +and active = int (* domain's ID *) +and inactive = string (* domain's name *) + +(* The types of the display columns in the main window. The interesting + * one of the final (int) field which stores the ID of the row, either + * connid or domid. + *) +type columns = string GTree.column * string GTree.column * string GTree.column * string GTree.column * string GTree.column * int GTree.column + +let debug_repopulate = false + +(* Populate the tree with the current list of connections, domains. + * This function is called once per second. + *) +let repopulate (tree : GTree.view) (model : GTree.tree_store) + (col_name_id, col_domname, col_status, col_cpu, col_mem, col_id) + state = + (* Which connections have been added or removed? *) + let conns = get_conns () in + let added, _, removed = + let old_conn_ids = List.map fst state + and new_conn_ids = List.map fst conns in + differences old_conn_ids new_conn_ids in + + (* Remove the subtrees for any connections which have gone. *) + if debug_repopulate then List.iter (eprintf "-connection %d\n%!") removed; + + List.iter ( + fun conn_id -> + filter_top_level_rows model + (fun row -> conn_id <> model#get ~row ~column:col_id) + ) removed; + + (* Add placeholder subtree for any new connections. *) + if debug_repopulate then List.iter (eprintf "+connection %d\n%!") added; + + List.iter ( + fun conn_id -> + let row = model#append () in + (* Get the connection name, usually the hostname. *) + let name = + match Hashtbl.find static_conn_info conn_id with + | (_, Some hostname, _) -> hostname + | (_, None, _) -> sprintf "Conn #%d" conn_id in + model#set ~row ~column:col_name_id name; + model#set ~row ~column:col_id conn_id; + (* Expand the new row. *) + (* XXX This doesn't work, why? - Because we haven't create subrows yet.*) + tree#expand_row (model#get_path row) + ) added; + + let new_state = + List.map ( + fun (conn_id, conn) -> + (* Get the old list of active and inactive domains. If this + * connection is newly created, start with empty lists. + *) + let old_active, old_inactive = + try List.assoc conn_id state + with Not_found -> [], [] in + + (* Get the top level row in the model corresponding to this + * connection. + *) + let parent = + try find_top_level_row model + (fun row -> conn_id = model#get ~row ~column:col_id) + with Not_found -> assert false (* Should never happen. *) in + + try + (* Number of CPUs available. *) + let node_info, _, _ = Hashtbl.find static_conn_info conn_id in + let nr_cpus = C.maxcpus_of_node_info node_info in + + (* For this connection, get a current list of active domains (IDs) *) + let active = + let n = C.num_of_domains conn in + let doms = C.list_domains conn n in + Array.to_list doms in + + (* Which active domains have been added or removed? *) + let added, _, removed = differences old_active active in + + (* Remove any active domains which have disappeared. *) + if debug_repopulate then + List.iter (eprintf "-active %d\n%!") removed; + + List.iter ( + fun domid -> + filter_rows model + (fun row -> domid <> model#get ~row ~column:col_id) + (model#iter_children (Some parent)) + ) removed; + + (* Add any active domains which have appeared. *) + if debug_repopulate then + List.iter (eprintf "+active %d\n%!") added; + + List.iter ( + fun domid -> + let domname = + try + let dom = D.lookup_by_id conn domid in + D.get_name dom + with _ -> "" in (* Ignore any transient error. *) + + let row = model#append ~parent () in + model#set ~row ~column:col_name_id (string_of_int domid); + model#set ~row ~column:col_domname domname; + model#set ~row ~column:col_id domid + ) added; + + (* Get a current list of inactive domains (names). *) + let inactive = + let n = C.num_of_defined_domains conn in + let doms = C.list_defined_domains conn n in + Array.to_list doms in + + (* Which inactive domains have been added or removed? *) + let added, _, removed = differences old_inactive inactive in + + (* Remove any inactive domains which have disappeared. *) + if debug_repopulate then + List.iter (eprintf "-inactive %s\n%!") removed; + + List.iter ( + fun domname -> + filter_rows model + (fun row -> + model#get ~row ~column:col_id <> -1 || + model#get ~row ~column:col_domname <> domname) + (model#iter_children (Some parent)) + ) removed; + + (* Add any inactive domains which have appeared. *) + if debug_repopulate then + List.iter (eprintf "+inactive %s\n%!") added; + + List.iter ( + fun domname -> + let row = model#append ~parent () in + model#set ~row ~column:col_name_id ""; + model#set ~row ~column:col_domname domname; + model#set ~row ~column:col_status "inactive"; + model#set ~row ~column:col_id (-1) + ) added; + + (* Now iterate over all active domains and update their state, + * CPU and memory. + *) + iter_rows model ( + fun row -> + let domid = model#get ~row ~column:col_id in + if domid >= 0 then ( (* active *) + try + let dom = D.lookup_by_id conn domid in + let info = D.get_info dom in + let status = string_of_domain_state info.D.state in + model#set ~row ~column:col_status status; + let memory = sprintf "%Ld K" info.D.memory in + model#set ~row ~column:col_mem memory; + + (* Get domhistory. For a new domain it won't exist, so + * create an empty one. + *) + let dh = + let key = conn_id, domid in + try Hashtbl.find domhistory key + with Not_found -> + let dh = new_domhistory () in + Hashtbl.add domhistory key dh; + dh in + + (* Measure current time and domain cpuTime as close + * together as possible. + *) + let time_now = Unix.gettimeofday () in + let cpu_now = info.D.cpu_time in + + let time_prev = dh.last_time in + let cpu_prev = + if dh.last_cpu_time > cpu_now then 0L (* Rebooted? *) + else dh.last_cpu_time in + + dh.last_time <- time_now; + dh.last_cpu_time <- cpu_now; + + let cpu_percent = + if time_prev > 0. then ( + let cpu_now = Int64.to_float cpu_now in + let cpu_prev = Int64.to_float cpu_prev in + let cpu_used = cpu_now -. cpu_prev in + let cpu_available = 1_000_000_000. *. float nr_cpus in + let time_passed = time_now -. time_prev in + + let cpu_percent = + 100. *. (cpu_used /. cpu_available) /. time_passed in + + let cpu_percent = + if cpu_percent < 0. then 0. + else if cpu_percent > 100. then 100. + else cpu_percent in + + let cpu_percent_str = sprintf "%.1f %%" cpu_percent in + model#set ~row ~column:col_cpu cpu_percent_str; + int_of_float cpu_percent + ) else -1 in + + (* Store history. *) + let datum = { hist_cpu = cpu_percent; + hist_mem = info.D.memory } in + + if dh.hist_posn >= hist_max then ( + (* rotate the array *) + Array.blit dh.hist hist_rot dh.hist 0 (hist_max-hist_rot); + dh.hist_posn <- dh.hist_posn - hist_rot; + dh.hist.(dh.hist_posn) <- datum; + ) else ( + let len = Array.length dh.hist in + if dh.hist_posn < len then + (* normal update *) + dh.hist.(dh.hist_posn) <- datum + else ( + (* extend the array *) + let len' = min (max (2*len) 1) hist_max in + let arr' = Array.make len' datum in + Array.blit dh.hist 0 arr' 0 len; + dh.hist <- arr'; + ) + ); + dh.hist_posn <- dh.hist_posn+1 + + with + Libvirt.Virterror _ -> () (* Ignore any transient error *) + ) + ) (model#iter_children (Some parent)); + + (* Return new state. *) + conn_id, (active, inactive) + with + (* Libvirt errors here are not really fatal. They can happen + * if the state changes at the moment we read it. If it does + * happen, just return the old state, and next time we come + * around to this connection it'll be fixed. + *) + | Libvirt.Virterror err -> + prerr_endline (Libvirt.Virterror.to_string err); + conn_id, (old_active, old_inactive) + | Failure msg -> + prerr_endline msg; + conn_id, (old_active, old_inactive) + ) conns in + + (* Return the updated state. *) + new_state + +(* Make the treeview which displays the connections and domains. *) +let make_treeview ?packing () = + let cols = new GTree.column_list in + let col_name_id = cols#add Gobject.Data.string in + let col_domname = cols#add Gobject.Data.string in + let col_status = cols#add Gobject.Data.string in + let col_cpu = cols#add Gobject.Data.string in + let col_mem = cols#add Gobject.Data.string in + (* Hidden column containing the connection ID or domain ID. For + * inactive domains, this contains -1 and col_domname is the name. *) + let col_id = cols#add Gobject.Data.int in + let model = GTree.tree_store cols in + + (* Column sorting functions. *) + let make_sort_func_on column = + fun (model : GTree.model) row1 row2 -> + let col1 = model#get ~row:row1 ~column in + let col2 = model#get ~row:row2 ~column in + compare col1 col2 + in + (*model#set_default_sort_func (make_sort_func_on col_domname);*) + model#set_sort_func 0 (make_sort_func_on col_name_id); + model#set_sort_func 1 (make_sort_func_on col_domname); + model#set_sort_column_id 1 `ASCENDING; + + (* Make the GtkTreeView and attach column renderers to it. *) + let tree = GTree.view ~model ~reorderable:false ?packing () in + + let append_visible_column title column sort = + let renderer = GTree.cell_renderer_text [], ["text", column] in + let view_col = GTree.view_column ~title ~renderer () in + ignore (tree#append_column view_col); + match sort with + | None -> () + | Some (sort_indicator, sort_order, sort_column_id) -> + view_col#set_sort_indicator sort_indicator; + view_col#set_sort_order sort_order; + view_col#set_sort_column_id sort_column_id + in + append_visible_column (s_ "ID") col_name_id (Some (false, `ASCENDING, 0)); + append_visible_column (s_ "Name") col_domname (Some (true, `ASCENDING, 1)); + append_visible_column (s_ "Status") col_status None; + append_visible_column (s_ "CPU") col_cpu None; + append_visible_column (s_ "Memory") col_mem None; + + let columns = + col_name_id, col_domname, col_status, col_cpu, col_mem, col_id in + let state = repopulate tree model columns [] in + + (tree, model, columns, state) + +(* Get historical data size. *) +let get_hist_size connid domid = + try + let dh = Hashtbl.find domhistory (connid, domid) in + dh.hist_posn + with + Not_found -> 0 + +(* Get historical data entries. *) +let _get_hist ?(latest=0) ?earliest ?(granularity=1) + extract fold zero connid domid = + try + let dh = Hashtbl.find domhistory (connid, domid) in + let earliest = + match earliest with + | None -> dh.hist_posn + | Some e -> min e dh.hist_posn in + + let src = dh.hist in + let src_start = dh.hist_posn - earliest in assert (src_start >= 0); + let src_end = dh.hist_posn - latest in assert (src_end <= dh.hist_posn); + + (* Create a sufficiently large array to store the result. *) + let len = (earliest-latest) / granularity in + let r = Array.make len zero in + + if granularity = 1 then ( + for j = 0 to len-1 do + r.(j) <- extract src.(src_start+j) + done + ) else ( + let i = ref src_start in + for j = 0 to len-1 do + let sub = Array.sub src !i (min (!i+granularity) src_end - !i) in + let sub = Array.map extract sub in + r.(j) <- fold sub; + i := !i + granularity + done + ); + r + with + Not_found -> [| |] + +let get_hist_cpu ?latest ?earliest ?granularity connid domid = + let zero = 0 in + let extract { hist_cpu = c } = c in + let fold a = + let len = Array.length a in + if len > 0 then Array.fold_left (+) zero a / len else -1 in + _get_hist ?latest ?earliest ?granularity extract fold zero connid domid + +let get_hist_mem ?latest ?earliest ?granularity connid domid = + let zero = 0L in + let extract { hist_mem = m } = m in + let fold a = + let len = Array.length a in + if len > 0 then + Int64.div (Array.fold_left (Int64.add) zero a) (Int64.of_int len) + else + -1L in + _get_hist ?latest ?earliest ?granularity extract fold zero connid domid diff --git a/virt-ctrl/vc_connections.mli b/virt-ctrl/vc_connections.mli new file mode 100644 index 0000000..261f853 --- /dev/null +++ b/virt-ctrl/vc_connections.mli @@ -0,0 +1,102 @@ +(* virt-ctrl: A graphical management tool. + (C) Copyright 2007 Richard W.M. Jones, Red Hat Inc. + http://libvirt.org/ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + Handle connections and the complicated GtkTreeView which + displays the connections / domains. +*) + +(** Get the list of current connections. *) +val get_conns : unit -> (int * Libvirt.rw Libvirt.Connect.t) list + +(** The current/previous state last time repopulate was called. The + repopulate function uses this state to determine what has changed + (eg. domains added, removed) since last time. +*) +type state + +type columns = string GTree.column * string GTree.column * string GTree.column * string GTree.column * string GTree.column * int GTree.column + +(** This function should be called once per second in order to + redraw the GtkTreeView. + + Takes the previous state as a parameter and returns the new state. +*) +val repopulate : GTree.view -> GTree.tree_store -> columns -> state -> state + +(** Create the GtkTreeView. Returns the widget itself, the model, + the list of columns, and the initial state. +*) +val make_treeview : + ?packing:(GObj.widget -> unit) -> unit -> + GTree.view * GTree.tree_store * columns * state + +(** Open a new connection to the hypervisor URI given. *) +val open_connection : string -> unit + +(** Return the amount of historical data that we hold about a + domain (in seconds). + + The parameters are connection ID (see {!get_conns}) and domain ID. + + This can return from [0] to [86400] (or 1 day of data). +*) +val get_hist_size : int -> int -> int + +(** Return a slice of historical %CPU data about a domain. + + The required parameters are connection ID (see {!get_conns}) + and domain ID. + + The optional [latest] parameter is the latest data we should + return. It defaults to [0] meaning to return everything up to now. + + The optional [earliest] parameter is the earliest data we should + return. This is a positive number representing number of seconds + back in time. It defaults to returning all data. + + The optional [granularity] parameter is the granularity of data + that we should return, in seconds. This defaults to [1], meaning + to return all data (once per second), but you might for example + set this to [60] to return data for each minute. + + This returns an array of data. The first element of the array is + the oldest data. The last element of the array is the most recent + data. The array returned might be shorter than you expect (if + data is missing or for some other reason) so always check the + length. + + Entries in the array are clamped to [0..100], except that if an + entry is [-1] it means "no data". + + This returns a zero-length array if we don't know about the domain. +*) +val get_hist_cpu : ?latest:int -> ?earliest:int -> ?granularity:int -> + int -> int -> + int array + +(** Return a slice of historical memory data about a domain. + + Parameters as above. + + Entries in the array are 64 bit integers corresponding to the + amount of memory in KB allocated to the domain (not necessarily + the amount being used, which we don't know about). +*) +val get_hist_mem : ?latest:int -> ?earliest:int -> ?granularity:int -> + int -> int -> + int64 array diff --git a/virt-ctrl/vc_dbus.ml b/virt-ctrl/vc_dbus.ml new file mode 100644 index 0000000..82b66dd --- /dev/null +++ b/virt-ctrl/vc_dbus.ml @@ -0,0 +1,317 @@ +(* virt-ctrl: A graphical management tool. + (C) Copyright 2007 Richard W.M. Jones, Red Hat Inc. + http://libvirt.org/ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + This file contains any code which needs optional package OCaml-DBUS. +*) + +(* There is *zero* documentation for this. I examined a lot of code + * to do this, and the following page was also very helpful: + * http://www.amk.ca/diary/2007/04/rough_notes_python_and_dbus.html + * See also the DBus API reference: + * http://dbus.freedesktop.org/doc/dbus/api/html/index.html + * See also Dan Berrange's Perl bindings: + * http://search.cpan.org/src/DANBERR/Net-DBus-0.33.5/lib/Net/ + * + * This code is a complicated state machine because that's what + * D-Bus requires. Enable debugging below to trace messages. + * + * It's also very unelegant and leaks memory. + * + * The code connects to D-Bus only the first time that the + * connection dialog is opened, and thereafter it attaches itself + * to the Gtk main loop, waiting for events. It's probably not + * safe if the avahi or dbus daemon restarts. + *) + +open Printf +open Virt_ctrl_gettext.Gettext +open DBus + +let debug = true + +let service = "_libvirt._tcp" + +let rec print_msg msg = + (match Message.get_type msg with + | Message.Invalid -> + eprintf "Invalid"; + | Message.Method_call -> + eprintf "Method_call"; + | Message.Method_return -> + eprintf "Method_return"; + | Message.Error -> + eprintf "Error"; + | Message.Signal -> + eprintf "Signal"); + + let print_opt f name = + match f msg with + | None -> () + | Some value -> eprintf "\n\t%s=%S" name value + in + print_opt Message.get_member "member"; + print_opt Message.get_path "path"; + print_opt Message.get_interface "interface"; + print_opt Message.get_sender "sender"; + + let fields = Message.get msg in + eprintf "\n\t["; + print_fields fields; + eprintf "]\n%!"; + +and print_fields fields = + eprintf "%s" (String.concat ", " (List.map string_of_ty fields)) + +(* Perform a synchronous call to an object method. *) +let call_method ~bus ~err ~name ~path ~interface ~methd args = + (* Create the method_call message. *) + let msg = Message.new_method_call name path interface methd in + Message.append msg args; + (* Send the message, get reply. *) + let r = Connection.send_with_reply_and_block bus msg (-1) err in + Message.get r + +(* Services we've found. + * This is a map from name -> URI. + * XXX We just assume Xen at the moment. + * XXX The same machine can appear on multiple interfaces, so this + * isn't right. + *) +let services : (string, string) Hashtbl.t = Hashtbl.create 13 + +(* Process a Found message, indicating that we've found and fully + * resolved a new service. + *) +let add_service bus err msg = + (* match fields in the Found message from ServiceResolver. *) + match Message.get msg with + | Int32 _ :: (* interface *) + Int32 (*protocol*)_ :: (* 0 = IPv4, 1=IPv6 *) + String name :: (* "Virtualization Host foo" *) + String _ :: (* "_libvirt._tcp" *) + String _ :: (* domain name *) + String hostname :: (* this is the hostname as a string *) + Int32 _ :: (* ? aprotocol *) + String address :: (* IP address as a string *) + UInt16 (*port*)_ :: _ -> (* port is set to 0 by libvirtd *) + + let hostname = if hostname <> "" then hostname else address in + (*let protocol = if protocol = 1_l then IPv6 else IPv4 in*) + + (* XXX *) + let uri = "xen://" ^ hostname ^ "/" in + + if debug then eprintf "adding %s %s\n%!" name uri; + + Hashtbl.replace services name uri + + | _ -> + prerr_endline (s_ "warning: unexpected message contents of Found signal") + +(* Process an ItemRemove message, indicating that a service has + * gone away. + *) +let remove_service bus err msg = + (* match fields in the ItemRemove message from ServiceBrowser. *) + match Message.get msg with + | Int32 _ :: (* interface *) + Int32 _ :: (* protocol *) + String name :: _ -> (* name *) + if debug then eprintf "removing %s\n%!" name; + Hashtbl.remove services name + + | _ -> + prerr_endline + (s_ "warning: unexpected message contents of ItemRemove signal") + +(* A service has appeared on the network. Resolve its IP address, etc. *) +let start_resolve_service bus err sb_path msg = + (* match fields in the ItemNew message from ServiceBrowser. *) + match Message.get msg with + | ((Int32 _) as interface) :: + ((Int32 _) as protocol) :: + ((String _) as name) :: + ((String _) as service) :: + ((String _) as domain) :: _ -> + (* Create a new ServiceResolver object which is used to resolve + * the actual locations of network services found by the ServiceBrowser. + *) + let sr = + call_method ~bus ~err + ~name:"org.freedesktop.Avahi" + ~path:"/" + ~interface:"org.freedesktop.Avahi.Server" + ~methd:"ServiceResolverNew" + [ + interface; + protocol; + name; + service; + domain; + Int32 (-1_l); (* AVAHI_PROTO_UNSPEC *) + UInt32 0_l; (* flags *) + ] in + let sr_path = + match sr with + | [ ObjectPath path ] -> path + | _ -> assert false in + + if debug then eprintf "ServiceResolver path = %S\n%!" sr_path; + + (* Add a match rule so we see these all signals of interest. *) + Bus.add_match bus + (String.concat "," [ + "type='signal'"; + "sender='org.freedesktop.Avahi.ServiceResolver'"; + "path='" ^ sr_path ^ "'"; + ]) err; + + () + + | _ -> + prerr_endline + (s_ "warning: unexpected message contents of ItemNew signal") + +(* This is called when we get a message/signal. Could be from the + * (global) ServiceBrowser or any of the ServiceResolver objects. + *) +let got_message bus err sb_path msg = + if debug then print_msg msg; + + let typ = Message.get_type msg in + let member = match Message.get_member msg with None -> "" | Some m -> m in + let interface = + match Message.get_interface msg with None -> "" | Some m -> m in + + if typ = Message.Signal then ( + match interface, member with + | "org.freedesktop.Avahi.ServiceBrowser", "CacheExhausted" -> () + | "org.freedesktop.Avahi.ServiceBrowser", "AllForNow" -> () + | "org.freedesktop.Avahi.ServiceBrowser", "ItemNew" -> + (* New service has appeared, start to resolve it. *) + start_resolve_service bus err sb_path msg + | "org.freedesktop.Avahi.ServiceResolver", "Found" -> + (* Resolver has finished resolving the name of a previously + * appearing service. + *) + add_service bus err msg + | "org.freedesktop.Avahi.ServiceBrowser", "ItemRemove" -> + (* Service has disappeared. *) + remove_service bus err msg + | "org.freedesktop.DBus", _ -> () + | interface, member -> + let () = + eprintf (f_ "warning: ignored unknown message %s from %s\n%!") + member interface in + () + ); + true + +(* Store the connection ((bus, err, io_id) tuple). However don't bother + * connecting to D-Bus at all until the user opens the connection + * dialog for the first time. + *) +let connection = ref None + +(* Create global error and system bus object, and create the service browser. *) +let connect () = + match !connection with + | Some (bus, err, _) -> (bus, err, false) + | None -> + let err = Error.init () in + let bus = Bus.get Bus.System err in + if Error.is_set err then + failwith (s_ "error set after getting System bus"); + + (* Create a new ServiceBrowser object which emits a signal whenever + * a new network service of the type specified is found on the network. + *) + let sb = + call_method ~bus ~err + ~name:"org.freedesktop.Avahi" + ~path:"/" + ~interface:"org.freedesktop.Avahi.Server" + ~methd:"ServiceBrowserNew" + [ + Int32 (-1_l); (* interface, -1=AVAHI_IF_UNSPEC *) + Int32 (-1_l); (* AVAHI_PROTO_UNSPEC *) + String service; (* service type *) + String ""; (* XXX call GetDomainName() *) + UInt32 0_l; (* flags *) + ] in + let sb_path = + match sb with + | [ ObjectPath path ] -> path + | _ -> assert false in + + if debug then eprintf "ServiceBrowser path = %S\n%!" sb_path; + + (* Register a callback to accept the signals. *) + (* XXX This leaks memory because it is never freed. *) + Connection.add_filter bus ( + fun bus msg -> got_message bus err sb_path msg + ); + + (* Add a match rule so we see these all signals of interest. *) + Bus.add_match bus + (String.concat "," [ + "type='signal'"; + "sender='org.freedesktop.Avahi.ServiceBrowser'"; + "path='" ^ sb_path ^ "'"; + ]) err; + + (* This is called from the Gtk main loop whenever there is new + * data to read on the D-Bus socket. + *) + let callback _ = + if debug then eprintf "dbus callback\n%!"; + if Connection.read_write_dispatch bus 0 then true + else ( (* Disconnected. *) + connection := None; + false + ) + in + + (* Get the file descriptor and attach to the Gtk main loop. *) + let fd = Connection.get_fd bus in + let channel = GMain.Io.channel_of_descr fd in + let io_id = GMain.Io.add_watch ~cond:[`IN] ~callback channel in + + connection := Some (bus, err, io_id); + (bus, err, true) + +(* This function is called by the connection dialog and is expected + * to return a list of services we know about now. + *) +let find_services () = + let bus, err, just_connected = connect () in + + (* If we've just connected, wait briefly for the list to stablise. *) + if just_connected then ( + let start_time = Unix.gettimeofday () in + while Unix.gettimeofday () -. start_time < 0.5 do + ignore (Connection.read_write_dispatch bus 500) + done + ); + + (* Return the services we know about. *) + Hashtbl.fold (fun k v vs -> (k, v) :: vs) services [] + +;; + +Vc_connection_dlg.find_libvirtd_with_zeroconf := find_services diff --git a/virt-ctrl/vc_dbus.mli b/virt-ctrl/vc_dbus.mli new file mode 100644 index 0000000..884093e --- /dev/null +++ b/virt-ctrl/vc_dbus.mli @@ -0,0 +1,22 @@ +(* virt-ctrl: A graphical management tool. + (C) Copyright 2007 Richard W.M. Jones, Red Hat Inc. + http://libvirt.org/ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + This file contains any code which needs optional package OCaml-DBUS. +*) + +(* No public API. If loaded this module hooks into Vc_connection_dlg. *) diff --git a/virt-ctrl/vc_domain_ops.ml b/virt-ctrl/vc_domain_ops.ml new file mode 100644 index 0000000..deace05 --- /dev/null +++ b/virt-ctrl/vc_domain_ops.ml @@ -0,0 +1,109 @@ +(* virt-ctrl: A graphical management tool. + (C) Copyright 2007 Richard W.M. Jones, Red Hat Inc. + http://libvirt.org/ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + Domain operations buttons. +*) + +open Printf +open Virt_ctrl_gettext.Gettext + +module C = Libvirt.Connect +module D = Libvirt.Domain +module N = Libvirt.Network + +(* Get the selected domain (if there is one) or return None. *) +let get_domain (tree : GTree.view) (model : GTree.tree_store) + (columns : Vc_connections.columns) = + let path, _ = tree#get_cursor () in + match path with + | None -> None (* No row at all selected. *) + | Some path -> + let row = model#get_iter path in + (* Visit parent to get the connid. + * If this returns None, then it's a top-level row which is + * selected (ie. a connection), so just ignore. + *) + match model#iter_parent row with + | None -> None + | Some parent -> + try + let (_, col_domname, _, _, _, col_id) = columns in + let connid = model#get ~row:parent ~column:col_id in + let conn = + List.assoc connid (Vc_connections.get_conns ()) in + let domid = model#get ~row ~column:col_id in + if domid = -1 then ( (* Inactive domain. *) + let domname = model#get ~row ~column:col_domname in + let dom = D.lookup_by_name conn domname in + let info = D.get_info dom in + Some (dom, info, connid, -1) + ) else ( (* Active domU. *) + let dom = D.lookup_by_id conn domid in + let info = D.get_info dom in + Some (dom, info, connid, domid) + ) + with + (* Domain or connection disappeared under us. *) + | Not_found -> None + | Failure msg -> + prerr_endline msg; + None + | Libvirt.Virterror err -> + prerr_endline (Libvirt.Virterror.to_string err); + None + +type dops_callback_fn = + GTree.view -> GTree.tree_store -> Vc_connections.columns -> unit -> unit + +let start_domain tree model columns () = + match get_domain tree model columns with + | None -> () + | Some (dom, _, _, domid) -> + if domid = -1 then + D.create dom + +let pause_domain tree model columns () = + match get_domain tree model columns with + | None -> () + | Some (dom, info, _, domid) -> + if domid >= 0 && info.D.state <> D.InfoPaused then + D.suspend dom + +let resume_domain tree model columns () = + match get_domain tree model columns with + | None -> () + | Some (dom, info, _, domid) -> + if domid >= 0 && info.D.state = D.InfoPaused then + D.resume dom + +let shutdown_domain tree model columns () = + match get_domain tree model columns with + | None -> () + | Some (dom, info, _, domid) -> + if domid >= 0 && info.D.state <> D.InfoShutdown then + D.shutdown dom + +let open_domain_details tree model columns () = + match get_domain tree model columns with + | None -> () + | Some (dom, info, connid, domid) -> + if domid >= 0 then ( + + + + ) diff --git a/virt-ctrl/vc_domain_ops.mli b/virt-ctrl/vc_domain_ops.mli new file mode 100644 index 0000000..38a2015 --- /dev/null +++ b/virt-ctrl/vc_domain_ops.mli @@ -0,0 +1,35 @@ +(* virt-ctrl: A graphical management tool. + (C) Copyright 2007 Richard W.M. Jones, Red Hat Inc. + http://libvirt.org/ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + Domain operations buttons. +*) + +type dops_callback_fn = + GTree.view -> GTree.tree_store -> Vc_connections.columns -> unit -> unit + (** Domain ops callback function type. + + The parameters are: tree (view), model, columns. + The extra unit parameter is there to make it easier to + turn into a callback. + *) + +val start_domain : dops_callback_fn +val pause_domain : dops_callback_fn +val resume_domain : dops_callback_fn +val shutdown_domain : dops_callback_fn +val open_domain_details : dops_callback_fn diff --git a/virt-ctrl/vc_helpers.ml b/virt-ctrl/vc_helpers.ml new file mode 100644 index 0000000..74e70cb --- /dev/null +++ b/virt-ctrl/vc_helpers.ml @@ -0,0 +1,97 @@ +(* virt-ctrl: A graphical management tool. + (C) Copyright 2007 Richard W.M. Jones, Red Hat Inc. + http://libvirt.org/ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*) + +open Virt_ctrl_gettext.Gettext + +module C = Libvirt.Connect +module D = Libvirt.Domain +module N = Libvirt.Network + +(* Given two lists, xs and ys, return a list of items which have been + * added to ys, items which are the same, and items which have been + * removed from ys. + * Returns a triplet (list of added, list of same, list of removed). + *) +let differences xs ys = + let rec d = function + | [], [] -> (* Base case. *) + ([], [], []) + | [], ys -> (* All ys have been added. *) + (ys, [], []) + | xs, [] -> (* All xs have been removed. *) + ([], [], xs) + | (x :: xs), (y :: ys) when x = y -> (* Not added or removed. *) + let added, unchanged, removed = d (xs, ys) in + added, x :: unchanged, removed + | (x :: xs), ((y :: _) as ys) when x < y -> (* x removed. *) + let added, unchanged, removed = d (xs, ys) in + added, unchanged, x :: removed + | ((x :: _) as xs), (y :: ys) (* when x > y *) -> (* y added. *) + let added, unchanged, removed = d (xs, ys) in + y :: added, unchanged, removed + in + d (List.sort compare xs, List.sort compare ys) + +let string_of_domain_state = function + | D.InfoNoState -> s_ "unknown" + | D.InfoRunning -> s_ "running" + | D.InfoBlocked -> s_ "blocked" + | D.InfoPaused -> s_ "paused" + | D.InfoShutdown -> s_ "shutdown" + | D.InfoShutoff -> s_ "shutoff" + | D.InfoCrashed -> s_ "crashed" + +(* Filter top level rows (only) in a tree_store. If function f returns + * true then the row remains, but if it returns false then the row is + * removed. + *) +let rec filter_top_level_rows (model : GTree.tree_store) f = + match model#get_iter_first with + | None -> () + | Some iter -> filter_rows model f iter + +(* Filter rows in a tree_store at a particular level. *) +and filter_rows model f row = + let keep = f row in + let iter_still_valid = + if not keep then model#remove row else model#iter_next row in + if iter_still_valid then filter_rows model f row + +(* Find the first top level row matching predicate f and return it. *) +let rec find_top_level_row (model : GTree.tree_store) f = + match model#get_iter_first with + | None -> raise Not_found (* no rows *) + | Some row -> find_row model f row + +(* Find the first row matching predicate f at a particular level. *) +and find_row model f row = + if f row then row + else if model#iter_next row then find_row model f row + else raise Not_found + +(* Iterate over top level rows (only) in a tree_store. *) +let rec iter_top_level_rows (model : GTree.tree_store) f = + match model#get_iter_first with + | None -> () + | Some iter -> iter_rows model f iter + +(* Iterate over rows in a tree_store at a particular level. *) +and iter_rows model f row = + f row; + if model#iter_next row then iter_rows model f row diff --git a/virt-ctrl/vc_helpers.mli b/virt-ctrl/vc_helpers.mli new file mode 100644 index 0000000..b533024 --- /dev/null +++ b/virt-ctrl/vc_helpers.mli @@ -0,0 +1,51 @@ +(* virt-ctrl: A graphical management tool. + (C) Copyright 2007 Richard W.M. Jones, Red Hat Inc. + http://libvirt.org/ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + Helper functions. +*) + +(** Given two lists, xs and ys, return a list of items which have been + added to ys, items which are the same, and items which have been + removed from ys. + Returns a triplet (list of added, list of same, list of removed). +*) +val differences : 'a list -> 'a list -> 'a list * 'a list * 'a list + +(** Convert libvirt domain state to a string. *) +val string_of_domain_state : Libvirt.Domain.state -> string + +(** Filter top level rows (only) in a GtkTreeStore. If function f returns + true then the row remains, but if it returns false then the row is + removed. +*) +val filter_top_level_rows : GTree.tree_store -> (Gtk.tree_iter -> bool) -> unit + +(** Filter rows in a tree_store at a particular level. *) +val filter_rows : GTree.tree_store -> (Gtk.tree_iter -> bool) -> Gtk.tree_iter -> unit + +(** Find the first top level row matching predicate and return it. *) +val find_top_level_row : GTree.tree_store -> (Gtk.tree_iter -> bool) -> Gtk.tree_iter + +(** Find the first row matching predicate f at a particular level. *) +val find_row : GTree.tree_store -> (Gtk.tree_iter -> bool) -> Gtk.tree_iter -> Gtk.tree_iter + +(** Iterate over top level rows (only) in a GtkTreeStore. *) +val iter_top_level_rows : GTree.tree_store -> (Gtk.tree_iter -> unit) -> unit + +(** Iterate over rows in a tree_store at a particular level. *) +val iter_rows : GTree.tree_store -> (Gtk.tree_iter -> unit) -> Gtk.tree_iter -> unit diff --git a/virt-ctrl/vc_icons.ml b/virt-ctrl/vc_icons.ml new file mode 100644 index 0000000..911e487 --- /dev/null +++ b/virt-ctrl/vc_icons.ml @@ -0,0 +1,270 @@ + + +open Vc_connection_dlg + + +let pixbuf_data = "\ +\132\149\166\190\000\000\010\192\000\000\000\001\000\000\000\003\000\000\000\003\ +\018\071\100\107\080\105\120\098\117\102\047\050\046\048\047\000\000\000\010\172\ +\071\100\107\080\000\000\010\172\002\001\000\002\000\000\000\128\000\000\000\032\ +\000\000\000\032\161\255\255\255\000\003\136\138\133\023\140\142\137\150\138\140\ +\135\247\152\136\138\133\255\003\138\140\135\246\140\142\137\156\136\138\133\030\ +\130\255\255\255\000\003\141\143\138\165\190\191\188\251\249\249\249\255\152\255\ +\255\255\255\009\248\248\247\255\194\196\192\253\141\143\138\165\255\255\255\000\ +\136\138\133\010\139\141\136\246\250\250\249\255\128\152\186\255\033\075\135\255\ +\150\032\074\135\255\010\033\075\135\255\113\140\178\255\244\245\246\255\139\141\ +\136\246\136\138\133\009\136\138\133\024\141\143\138\246\255\255\255\255\033\075\ +\135\255\160\182\205\255\130\173\191\212\255\134\173\192\212\255\131\174\193\213\ +\255\134\175\193\213\255\134\176\194\213\255\003\041\081\139\255\255\255\255\255\ +\141\143\138\246\130\136\138\133\024\004\141\143\138\246\255\255\255\255\032\074\ +\135\255\154\177\202\255\151\164\185\208\255\003\040\080\139\255\255\255\255\255\ +\141\143\138\246\130\136\138\133\024\004\141\143\138\246\255\255\255\255\032\074\ +\135\255\144\169\197\255\151\153\176\202\255\003\040\080\139\255\255\255\255\255\ +\141\143\138\246\130\136\138\133\024\004\141\143\138\246\255\255\255\255\032\074\ +\135\255\134\162\192\255\151\142\168\196\255\003\040\080\139\255\255\255\255\255\ +\141\143\138\246\130\136\138\133\024\004\141\143\138\246\255\255\255\255\032\074\ +\135\255\123\154\186\255\134\131\159\190\255\002\132\160\190\255\133\161\191\255\ +\130\133\161\192\255\003\134\162\192\255\134\162\193\255\134\162\192\255\131\133\ +\161\192\255\001\132\160\190\255\132\131\159\190\255\005\121\152\185\255\103\138\ +\176\255\040\080\139\255\255\255\255\255\141\143\138\246\130\136\138\133\024\004\ +\141\143\138\246\255\255\255\255\032\074\135\255\113\145\181\255\131\119\150\184\ +\255\007\121\152\185\255\122\153\187\255\123\154\188\255\125\155\189\255\125\156\ +\189\255\126\157\190\255\127\157\191\255\132\127\158\191\255\007\126\157\190\255\ +\125\156\189\255\123\155\188\255\105\140\178\255\088\127\169\255\072\114\160\255\ +\055\101\150\255\130\050\097\148\255\003\040\080\139\255\255\255\255\255\141\143\ +\138\246\130\136\138\133\024\030\141\143\138\246\255\255\255\255\032\074\135\255\ +\103\138\176\255\108\142\178\255\110\144\180\255\112\145\182\255\114\147\183\255\ +\115\149\185\255\117\150\186\255\118\151\187\255\119\152\188\255\120\153\189\255\ +\120\154\190\255\121\154\190\255\121\155\190\255\121\154\190\255\120\154\190\255\ +\115\149\186\255\091\131\174\255\068\113\163\255\062\109\159\255\060\107\157\255\ +\058\105\155\255\056\102\153\255\053\100\151\255\050\097\148\255\040\080\139\255\ +\255\255\255\255\141\143\138\246\130\136\138\133\024\030\141\143\138\246\255\255\ +\255\255\032\074\135\255\094\131\171\255\100\136\175\255\102\138\178\255\105\141\ +\179\255\107\142\181\255\108\145\183\255\111\146\185\255\112\148\186\255\113\149\ +\188\255\115\150\188\255\115\151\189\255\115\152\189\255\116\152\190\255\106\145\ +\185\255\088\130\176\255\073\119\169\255\071\118\168\255\070\116\166\255\068\114\ +\164\255\066\112\162\255\063\110\160\255\060\107\158\255\058\104\155\255\055\102\ +\152\255\040\080\139\255\255\255\255\255\141\143\138\246\130\136\138\133\024\030\ +\141\143\138\246\255\255\255\255\032\074\135\255\087\126\169\255\092\131\173\255\ +\096\133\175\255\098\136\178\255\101\138\180\255\102\141\182\255\105\143\184\255\ +\106\144\185\255\108\146\187\255\110\147\189\255\109\147\189\255\099\140\184\255\ +\086\131\179\255\081\127\177\255\080\126\176\255\079\125\175\255\077\124\173\255\ +\076\122\171\255\073\120\169\255\071\117\167\255\068\114\165\255\065\112\162\255\ +\062\109\159\255\059\106\156\255\040\081\139\255\255\255\255\255\141\143\138\246\ +\130\136\138\133\024\030\141\143\138\246\255\255\255\255\032\074\135\255\080\121\ +\166\255\085\126\170\255\088\129\173\255\091\132\175\255\094\134\178\255\096\137\ +\181\255\099\139\183\255\102\142\185\255\099\141\185\255\093\137\183\255\086\132\ +\182\255\087\133\182\255\088\134\183\255\087\133\183\255\087\132\182\255\085\131\ +\180\255\083\129\179\255\081\127\176\255\078\124\174\255\075\122\171\255\072\119\ +\169\255\069\116\166\255\066\112\163\255\062\109\159\255\040\081\139\255\255\255\ +\255\255\141\143\138\246\130\136\138\133\024\030\141\143\138\246\255\255\255\255\ +\032\074\135\255\073\117\164\255\077\121\168\255\081\124\171\255\084\128\174\255\ +\086\129\176\255\087\131\178\255\087\131\180\255\088\132\182\255\088\134\183\255\ +\091\136\185\255\093\138\187\255\094\139\188\255\094\140\189\255\094\140\188\255\ +\093\138\187\255\091\137\186\255\089\134\183\255\086\132\181\255\083\129\178\255\ +\080\126\175\255\076\122\172\255\073\119\169\255\069\115\166\255\065\112\162\255\ +\040\081\140\255\255\255\255\255\141\143\138\246\130\136\138\133\024\030\141\143\ +\138\246\255\255\255\255\032\074\135\255\063\110\160\255\067\114\164\255\071\117\ +\167\255\075\121\171\255\079\125\174\255\082\128\178\255\086\132\181\255\090\135\ +\184\255\093\139\187\255\096\141\190\255\098\144\193\255\100\146\194\255\101\146\ +\195\255\100\146\194\255\099\144\193\255\096\142\191\255\093\139\188\255\090\136\ +\185\255\086\132\182\255\083\129\178\255\079\125\175\255\075\121\171\255\071\118\ +\168\255\068\114\164\255\040\081\140\255\255\255\255\255\141\143\138\246\130\136\ +\138\133\024\030\141\143\138\246\255\255\255\255\032\074\135\255\065\111\161\255\ +\069\115\165\255\073\119\169\255\077\123\172\255\080\127\176\255\084\130\180\255\ +\088\134\183\255\092\138\187\255\096\142\190\255\100\145\194\255\103\149\197\255\ +\106\151\200\255\107\153\201\255\106\152\200\255\104\149\197\255\100\146\194\255\ +\096\142\191\255\093\138\187\255\089\135\184\255\085\131\180\255\081\127\176\255\ +\077\123\173\255\073\119\169\255\069\115\165\255\041\081\140\255\255\255\255\255\ +\141\143\138\246\130\136\138\133\024\030\141\143\138\246\255\255\255\255\032\074\ +\135\255\065\111\162\255\069\115\165\255\073\119\169\255\077\123\173\255\081\127\ +\177\255\085\131\180\255\089\135\184\255\093\139\188\255\097\143\191\255\101\147\ +\195\255\105\151\199\255\109\154\203\255\113\158\206\255\110\155\203\255\106\151\ +\199\255\102\147\196\255\098\143\192\255\094\139\188\255\090\135\184\255\086\131\ +\181\255\081\127\177\255\077\124\173\255\073\120\170\255\069\116\166\255\041\081\ +\140\255\255\255\255\255\141\143\138\246\130\136\138\133\024\006\141\143\138\246\ +\255\255\255\255\032\074\135\255\047\087\143\255\048\088\144\255\048\088\145\255\ +\130\049\089\145\255\130\050\090\146\255\130\051\091\147\255\001\052\091\148\255\ +\130\052\092\148\255\001\053\092\148\255\130\052\092\148\255\001\052\091\148\255\ +\130\051\091\147\255\130\050\090\146\255\130\049\089\145\255\005\048\088\145\255\ +\048\088\144\255\032\075\135\255\255\255\255\255\141\143\138\246\130\136\138\133\ +\024\005\141\143\138\246\255\255\255\255\198\206\214\255\197\205\214\255\196\204\ +\214\255\132\196\204\213\255\131\196\204\212\255\131\195\203\211\255\130\194\202\ +\211\255\132\194\202\210\255\134\193\201\210\255\007\192\200\209\255\254\254\254\ +\255\141\143\138\246\136\138\133\024\136\138\133\009\138\140\135\247\244\244\244\ +\255\151\254\254\254\255\131\255\255\255\255\006\247\247\246\255\138\140\135\248\ +\136\138\133\008\255\255\255\000\141\143\138\132\138\140\135\245\154\136\138\133\ +\255\002\138\140\135\245\141\143\138\149\135\255\255\255\000\025\000\000\000\001\ +\000\000\000\005\110\110\110\037\127\129\125\120\121\123\119\247\193\193\191\255\ +\203\203\201\255\205\205\204\255\207\207\206\255\210\210\208\255\213\213\211\255\ +\216\216\214\255\218\218\217\255\221\221\219\255\197\198\196\255\134\139\137\248\ +\121\146\173\203\110\153\198\187\112\156\204\189\113\156\204\192\113\158\205\195\ +\115\158\207\198\115\159\207\236\114\158\207\206\111\162\204\030\132\255\255\255\ +\000\008\000\000\000\002\000\000\000\007\000\000\000\011\000\000\000\015\124\126\ +\122\117\139\142\137\248\166\167\165\248\197\197\195\255\136\212\212\211\255\130\ +\211\211\211\255\011\185\185\185\255\156\157\154\246\138\140\134\244\082\082\078\ +\068\093\131\171\109\103\143\187\146\101\142\183\124\093\128\168\082\106\147\192\ +\147\112\156\204\205\000\000\000\002\130\255\255\255\000\008\000\000\000\003\000\ +\000\000\008\000\000\000\013\000\000\000\018\000\000\000\023\138\141\136\217\200\ +\200\197\255\251\251\251\255\140\254\254\254\255\010\241\241\241\255\174\176\172\ +\252\122\129\130\164\112\156\205\244\092\129\169\152\100\139\181\170\107\151\195\ +\206\112\157\203\235\106\147\192\187\000\000\000\011\130\255\255\255\000\006\000\ +\000\000\001\000\000\000\007\000\000\000\012\000\000\000\017\000\000\000\022\135\ +\137\132\208\132\137\139\134\248\138\137\139\134\249\130\137\139\134\248\008\123\ +\126\122\156\112\156\203\245\052\075\094\054\000\000\000\020\000\000\000\019\000\ +\000\000\020\000\000\000\015\000\000\000\002\130\255\255\255\000\003\136\138\133\ +\056\154\156\152\242\185\187\182\255\136\186\189\182\255\010\187\190\183\255\186\ +\189\182\255\187\190\184\255\186\189\182\255\188\191\184\255\186\188\182\255\184\ +\186\181\255\186\189\182\255\187\190\183\255\186\189\182\255\130\186\188\183\255\ +\006\186\189\182\255\187\190\183\255\185\188\181\255\182\183\179\255\140\142\137\ +\238\136\138\133\053\130\255\255\255\000\030\136\138\133\010\148\150\145\234\225\ +\226\224\255\199\201\196\255\211\215\207\255\217\220\213\255\211\215\207\255\219\ +\222\215\255\211\215\207\255\220\223\217\255\211\215\207\255\221\224\218\255\211\ +\215\207\255\222\225\219\255\211\215\207\255\223\226\221\255\211\215\207\255\208\ +\211\206\255\207\209\202\255\203\205\200\255\186\189\182\255\204\206\201\255\190\ +\194\187\255\206\208\202\255\214\216\211\255\211\215\207\255\220\222\217\255\188\ +\191\184\255\227\227\224\255\141\143\138\216\130\255\255\255\000\067\138\140\135\ +\151\212\212\210\251\190\193\186\255\207\210\202\255\224\226\221\255\211\215\207\ +\255\226\228\223\255\211\215\207\255\228\231\226\255\211\215\207\255\230\232\228\ +\255\211\215\207\255\232\234\230\255\211\215\207\255\234\236\232\255\211\215\207\ +\255\235\237\233\255\189\193\186\255\218\219\214\255\191\195\188\255\220\222\218\ +\255\187\190\183\255\228\230\226\255\211\213\207\255\194\197\190\255\232\234\230\ +\255\211\215\207\255\227\228\225\255\218\220\216\255\165\167\163\246\136\138\133\ +\076\136\138\133\050\151\153\148\247\238\238\237\255\187\190\183\255\210\212\207\ +\255\186\189\182\255\214\216\212\255\186\189\182\255\219\220\216\255\186\189\182\ +\255\223\224\221\255\186\189\182\255\227\229\226\255\186\189\182\255\232\233\230\ +\255\186\189\182\255\236\237\235\255\186\189\182\255\241\241\240\255\215\216\212\ +\255\227\229\226\255\186\189\182\255\232\233\230\255\185\188\181\255\221\222\218\ +\255\228\229\226\255\186\189\182\255\232\233\230\255\186\189\182\255\204\206\201\ +\255\236\237\235\255\141\143\138\216\136\138\133\092\170\172\167\245\252\252\251\ +\255\254\254\254\255\142\253\253\253\255\002\254\254\254\255\255\255\255\255\132\ +\253\253\253\255\002\255\255\255\255\254\254\254\255\131\253\253\253\255\006\255\ +\255\255\255\236\236\234\255\139\141\136\243\136\138\133\015\141\143\138\202\136\ +\138\133\253\131\136\138\133\255\131\136\138\133\254\132\136\138\133\253\133\137\ +\139\134\252\131\137\139\134\251\134\138\140\135\250\001\138\140\135\249\130\139\ +\141\136\249\002\141\143\138\230\137\139\134\083" + +let pixbuf () : GdkPixbuf.pixbuf = Marshal.from_string pixbuf_data 0 +;; +icon_32x32_devices_computer_png := Some (pixbuf ()) ;; + +let pixbuf_data = "\ +\132\149\166\190\000\000\005\123\000\000\000\001\000\000\000\003\000\000\000\003\ +\018\071\100\107\080\105\120\098\117\102\047\050\046\048\047\000\000\000\005\103\ +\071\100\107\080\000\000\005\103\002\001\000\002\000\000\000\096\000\000\000\024\ +\000\000\000\024\154\000\000\000\000\002\131\131\134\116\128\128\131\253\144\128\ +\128\131\255\002\128\128\131\253\131\131\134\116\132\000\000\000\000\002\128\128\ +\131\253\250\250\250\255\144\255\255\255\255\002\250\250\250\255\128\128\131\253\ +\132\000\000\000\000\003\128\128\131\255\252\252\253\255\048\087\143\255\142\032\ +\074\135\255\003\050\088\144\255\255\255\255\255\128\128\131\255\132\000\000\000\ +\000\009\128\128\131\255\248\249\251\255\034\075\135\255\090\129\181\255\093\132\ +\182\255\097\135\184\255\101\138\186\255\105\141\187\255\109\144\189\255\136\113\ +\147\191\255\003\032\074\135\255\255\255\255\255\128\128\131\255\132\000\000\000\ +\000\020\128\128\131\255\248\249\251\255\034\075\135\255\086\126\179\255\089\129\ +\180\255\094\133\183\255\100\137\185\255\105\142\188\255\108\145\190\255\113\148\ +\192\255\117\151\194\255\118\151\194\255\117\151\194\255\116\150\193\255\116\149\ +\192\255\114\148\192\255\113\147\191\255\032\074\135\255\255\255\255\255\128\128\ +\131\255\132\000\000\000\000\011\128\128\131\255\248\249\251\255\034\075\135\255\ +\084\125\178\255\090\131\182\255\096\135\185\255\102\140\188\255\106\144\191\255\ +\111\147\193\255\115\151\194\255\119\153\196\255\130\123\156\198\255\007\122\155\ +\197\255\120\154\196\255\119\153\195\255\117\151\194\255\032\074\135\255\255\255\ +\255\255\128\128\131\255\132\000\000\000\000\020\128\128\131\255\248\249\251\255\ +\034\076\135\255\086\128\181\255\092\133\184\255\098\138\188\255\104\143\190\255\ +\108\147\193\255\113\150\195\255\118\153\197\255\121\156\199\255\125\159\200\255\ +\117\153\197\255\102\142\190\255\091\134\185\255\081\125\180\255\069\116\174\255\ +\032\074\135\255\255\255\255\255\128\128\131\255\132\000\000\000\000\020\128\128\ +\131\255\248\249\251\255\034\076\136\255\086\129\183\255\094\136\186\255\100\141\ +\190\255\105\145\192\255\110\150\195\255\115\153\198\255\119\156\200\255\114\153\ +\197\255\094\138\190\255\081\128\184\255\079\127\183\255\077\124\181\255\074\122\ +\179\255\071\119\177\255\032\074\135\255\255\255\255\255\128\128\131\255\132\000\ +\000\000\000\020\128\128\131\255\248\249\251\255\034\076\136\255\087\131\184\255\ +\094\137\188\255\101\142\191\255\107\147\195\255\113\152\198\255\111\151\197\255\ +\098\143\193\255\091\137\191\255\090\137\190\255\089\135\189\255\086\133\188\255\ +\083\130\186\255\080\127\183\255\076\124\181\255\032\074\135\255\255\255\255\255\ +\128\128\131\255\132\000\000\000\000\020\128\128\131\255\248\249\251\255\034\076\ +\136\255\086\130\184\255\091\136\188\255\095\139\191\255\098\142\192\255\097\142\ +\193\255\096\142\194\255\098\144\195\255\098\144\196\255\098\144\195\255\095\142\ +\194\255\092\139\192\255\089\135\189\255\085\131\186\255\080\127\183\255\032\074\ +\135\255\255\255\255\255\128\128\131\255\132\000\000\000\000\020\128\128\131\255\ +\248\249\251\255\034\076\136\255\078\126\182\255\083\130\185\255\088\135\189\255\ +\093\139\192\255\097\143\195\255\101\147\198\255\105\150\200\255\106\152\201\255\ +\105\150\200\255\101\147\198\255\097\143\195\255\092\139\192\255\088\134\189\255\ +\083\130\185\255\032\074\135\255\255\255\255\255\128\128\131\255\132\000\000\000\ +\000\003\128\128\131\255\252\252\253\255\048\088\143\255\142\032\074\135\255\003\ +\050\089\145\255\255\255\255\255\128\128\131\255\132\000\000\000\000\002\128\128\ +\131\255\255\255\255\255\144\228\228\225\255\002\255\255\255\255\128\128\131\255\ +\132\000\000\000\000\002\128\128\131\253\250\250\250\255\144\255\255\255\255\002\ +\250\250\250\255\128\128\131\253\132\000\000\000\000\002\131\131\134\116\128\128\ +\131\253\144\128\128\131\255\002\128\128\131\253\131\131\134\116\138\000\000\000\ +\000\008\134\136\131\255\141\144\138\255\147\150\144\255\153\156\150\255\159\162\ +\156\255\165\168\162\255\171\174\167\255\134\136\131\255\137\000\000\000\000\022\ +\131\132\132\003\137\138\137\223\139\140\139\241\179\181\175\254\181\184\177\255\ +\184\187\180\255\181\184\177\255\184\187\180\255\181\184\177\255\184\187\180\255\ +\181\184\177\255\184\187\180\255\181\184\177\255\184\187\180\255\181\184\177\255\ +\184\187\180\255\181\184\177\255\184\187\180\255\179\181\175\254\139\140\139\241\ +\136\137\137\224\131\132\132\004\130\000\000\000\000\022\126\127\127\054\152\153\ +\153\236\221\222\219\255\186\189\181\255\187\190\183\255\191\197\186\255\198\201\ +\194\255\191\197\186\255\211\213\208\255\191\197\186\255\221\223\218\255\191\197\ +\186\255\220\223\218\255\191\197\186\255\211\213\208\255\191\197\186\255\198\200\ +\194\255\191\197\186\255\186\189\181\255\221\222\219\255\153\154\153\237\126\127\ +\127\058\130\000\000\000\000\003\124\125\126\122\183\183\183\251\219\220\217\255\ +\130\181\184\177\255\003\188\191\185\255\181\184\177\255\202\204\198\255\135\181\ +\184\177\255\007\202\204\198\255\181\184\177\255\188\191\184\255\181\184\177\255\ +\219\220\217\255\184\185\184\252\124\125\126\129\130\000\000\000\000\002\126\126\ +\127\200\248\248\248\255\146\255\255\255\255\002\248\248\248\255\125\125\127\208\ +\130\000\000\000\000\004\119\119\121\203\117\117\120\240\118\118\120\240\117\117\ +\120\240\130\117\117\120\241\001\117\117\119\242\130\116\116\119\242\132\116\116\ +\119\243\131\116\116\118\243\006\116\116\118\244\116\116\118\243\115\115\118\244\ +\116\116\118\244\115\115\118\244\118\118\120\210\131\000\000\000\000\020\000\000\ +\000\002\000\000\000\009\000\000\000\017\000\000\000\022\000\000\000\028\000\000\ +\000\034\000\000\000\040\000\000\000\047\000\000\000\053\000\000\000\059\000\000\ +\000\060\000\000\000\056\000\000\000\051\000\000\000\045\000\000\000\038\000\000\ +\000\032\000\000\000\026\000\000\000\021\000\000\000\012\000\000\000\003\154\000\ +\000\000\000" + +let pixbuf () : GdkPixbuf.pixbuf = Marshal.from_string pixbuf_data 0 +;; +icon_24x24_devices_computer_png := Some (pixbuf ()) ;; + +let pixbuf_data = "\ +\132\149\166\190\000\000\002\203\000\000\000\001\000\000\000\003\000\000\000\003\ +\018\071\100\107\080\105\120\098\117\102\047\050\046\048\047\000\000\000\002\183\ +\071\100\107\080\000\000\002\183\002\001\000\002\000\000\000\064\000\000\000\016\ +\000\000\000\016\003\000\000\000\000\129\129\132\172\128\128\131\253\138\128\128\ +\131\255\002\128\128\131\253\129\129\132\172\130\000\000\000\000\002\128\128\131\ +\253\242\242\242\255\138\255\255\255\255\002\242\242\242\255\128\128\131\253\130\ +\000\000\000\000\002\128\128\131\255\255\255\255\255\138\032\074\135\255\002\255\ +\255\255\255\128\128\131\255\130\000\000\000\000\004\128\128\131\255\255\255\255\ +\255\032\074\135\255\112\146\191\255\130\113\147\191\255\003\113\148\191\255\113\ +\148\192\255\113\148\191\255\130\113\147\191\255\003\032\074\135\255\255\255\255\ +\255\128\128\131\255\130\000\000\000\000\014\128\128\131\255\255\255\255\255\032\ +\074\135\255\106\143\189\255\111\147\191\255\115\151\194\255\119\154\196\255\122\ +\155\197\255\121\155\197\255\117\152\195\255\106\143\189\255\032\074\135\255\255\ +\255\255\255\128\128\131\255\130\000\000\000\000\014\128\128\131\255\255\255\255\ +\255\032\074\135\255\105\142\189\255\111\148\193\255\116\153\197\255\120\155\198\ +\255\106\145\193\255\084\129\183\255\073\121\179\255\069\117\176\255\032\074\135\ +\255\255\255\255\255\128\128\131\255\130\000\000\000\000\014\128\128\131\255\255\ +\255\255\255\032\074\135\255\101\141\190\255\103\144\192\255\103\145\193\255\091\ +\137\189\255\089\135\189\255\087\134\188\255\084\131\186\255\078\126\182\255\032\ +\074\135\255\255\255\255\255\128\128\131\255\130\000\000\000\000\014\128\128\131\ +\255\255\255\255\255\032\074\135\255\078\125\182\255\086\132\187\255\092\139\192\ +\255\098\144\196\255\100\146\197\255\098\144\196\255\092\139\192\255\086\132\187\ +\255\032\074\135\255\255\255\255\255\128\128\131\255\130\000\000\000\000\002\128\ +\128\131\255\255\255\255\255\138\032\074\135\255\002\255\255\255\255\128\128\131\ +\255\130\000\000\000\000\002\128\128\131\253\241\241\241\255\138\255\255\255\255\ +\002\241\241\241\255\128\128\131\253\130\000\000\000\000\002\129\129\132\172\128\ +\128\131\253\138\128\128\131\255\002\128\128\131\253\129\129\132\172\134\000\000\ +\000\000\002\134\136\131\255\201\206\196\255\130\165\174\157\255\002\201\206\196\ +\255\134\136\131\255\133\000\000\000\000\034\136\138\133\004\136\138\133\116\169\ +\172\166\255\205\208\201\255\186\189\182\255\205\208\201\255\186\189\182\255\205\ +\208\201\255\186\189\182\255\205\208\201\255\186\189\182\255\205\208\201\255\186\ +\189\182\255\155\158\152\255\136\138\133\119\136\138\133\009\136\138\133\105\136\ +\138\133\255\196\198\192\255\186\189\182\255\204\207\200\255\186\189\182\255\192\ +\195\189\255\186\189\182\255\190\193\186\255\186\189\182\255\193\196\189\255\186\ +\189\182\255\206\209\202\255\196\198\192\255\136\138\133\255\136\138\133\115\136\ +\138\133\255\213\213\211\255\140\255\255\255\255\003\213\213\211\255\136\138\133\ +\255\142\143\139\214\142\136\138\133\255\001\142\143\139\214" + +let pixbuf () : GdkPixbuf.pixbuf = Marshal.from_string pixbuf_data 0 +;; +icon_16x16_devices_computer_png := Some (pixbuf ()) ;; diff --git a/virt-ctrl/vc_mainwindow.ml b/virt-ctrl/vc_mainwindow.ml new file mode 100644 index 0000000..c34a803 --- /dev/null +++ b/virt-ctrl/vc_mainwindow.ml @@ -0,0 +1,202 @@ +(* virt-ctrl: A graphical management tool. + (C) Copyright 2007 Richard W.M. Jones, Red Hat Inc. + http://libvirt.org/ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*) + +open Printf +open Virt_ctrl_gettext.Gettext + +let title = s_ "Virtual Control" + +let utf8_copyright = "\194\169" + +let help_about () = + let gtk_version = + let gtk_major, gtk_minor, gtk_micro = GMain.Main.version in + sprintf "%d.%d.%d" gtk_major gtk_minor gtk_micro in + let virt_version = string_of_int (fst (Libvirt.get_version ())) in + let title = "About " ^ title in + let icon = GMisc.image () in + icon#set_stock `DIALOG_INFO; + icon#set_icon_size `DIALOG; + GToolbox.message_box + ~title + ~icon + (sprintf (f_ "Virtualization control tool (virt-ctrl) by +Richard W.M. Jones (rjones@redhat.com). + +Copyright %s 2007-2008 Red Hat Inc. + +Libvirt version: %s + +Gtk toolkit version: %s") utf8_copyright virt_version gtk_version) + +(* Catch any exception and throw up a dialog. *) +let () = + (* A nicer exception printing function. *) + let string_of_exn = function + | Libvirt.Virterror err -> + s_ "Virtualisation error" ^ ": " ^ (Libvirt.Virterror.to_string err) + | Failure msg -> msg + | exn -> Printexc.to_string exn + in + GtkSignal.user_handler := + fun exn -> + let label = string_of_exn exn in + prerr_endline label; + let title = s_ "Error" in + let icon = GMisc.image () in + icon#set_stock `DIALOG_ERROR; + icon#set_icon_size `DIALOG; + GToolbox.message_box ~title ~icon label + +let make + ~start_domain ~pause_domain ~resume_domain ~shutdown_domain + ~open_domain_details = + (* Create the main window. *) + let window = GWindow.window ~width:800 ~height:600 ~title () in + let vbox = GPack.vbox ~packing:window#add () in + + (* Menu bar. *) + let quit_item = + let menubar = GMenu.menu_bar ~packing:vbox#pack () in + let factory = new GMenu.factory menubar in + let accel_group = factory#accel_group in + let file_menu = factory#add_submenu (s_ "File") in + let help_menu = factory#add_submenu (s_ "Help") in + + window#add_accel_group accel_group; + + (* File menu. *) + let factory = new GMenu.factory file_menu ~accel_group in + let open_item = factory#add_item (s_ "Open connection ...") + ~key:GdkKeysyms._O in + ignore (factory#add_separator ()); + let quit_item = factory#add_item (s_ "Quit") ~key:GdkKeysyms._Q in + + ignore (open_item#connect#activate + ~callback:(Vc_connection_dlg.open_connection window)); + + (* Help menu. *) + let factory = new GMenu.factory help_menu ~accel_group in + let help_item = factory#add_item (s_ "Help") in + let help_about_item = factory#add_item (s_ "About ...") in + + ignore (help_about_item#connect#activate ~callback:help_about); + + quit_item in + + (* The toolbar. *) + let toolbar = GButton.toolbar ~packing:vbox#pack () in + + (* The treeview. *) + let (tree, model, columns, initial_state) = + Vc_connections.make_treeview + ~packing:(vbox#pack ~expand:true ~fill:true) () in + + (* Add buttons to the toolbar (requires the treeview to + * have been made above). + *) + let () = + let connect_button_menu = GMenu.menu () in + let connect_button = + GButton.menu_tool_button + ~label:(s_ "Connect ...") ~stock:`CONNECT + ~menu:connect_button_menu + ~packing:toolbar#insert () in + ignore (GButton.separator_tool_item ~packing:toolbar#insert ()); + let open_button = + GButton.tool_button ~label:(s_ "Details") ~stock:`OPEN + ~packing:toolbar#insert () in + ignore (GButton.separator_tool_item ~packing:toolbar#insert ()); + let start_button = + GButton.tool_button ~label:(s_ "Start") ~stock:`ADD + ~packing:toolbar#insert () in + let pause_button = + GButton.tool_button ~label:(s_ "Pause") ~stock:`MEDIA_PAUSE + ~packing:toolbar#insert () in + let resume_button = + GButton.tool_button ~label:(s_ "Resume") ~stock:`MEDIA_PLAY + ~packing:toolbar#insert () in + ignore (GButton.separator_tool_item ~packing:toolbar#insert ()); + let shutdown_button = + GButton.tool_button ~label:(s_ "Shutdown") ~stock:`STOP + ~packing:toolbar#insert () in + + (* Set callbacks for the toolbar buttons. *) + ignore (connect_button#connect#clicked + ~callback:(Vc_connection_dlg.open_connection window)); + ignore (open_button#connect#clicked + ~callback:(open_domain_details tree model columns)); + ignore (start_button#connect#clicked + ~callback:(start_domain tree model columns)); + ignore (pause_button#connect#clicked + ~callback:(pause_domain tree model columns)); + ignore (resume_button#connect#clicked + ~callback:(resume_domain tree model columns)); + ignore (shutdown_button#connect#clicked + ~callback:(shutdown_domain tree model columns)); + + (* Set a menu on the connect menu-button. *) + let () = + let factory = new GMenu.factory connect_button_menu (*~accel_group*) in + let local_xen = factory#add_item (s_ "Local Xen") in + let local_qemu = factory#add_item (s_ "Local QEMU/KVM") in + ignore (factory#add_separator ()); + let open_dialog = factory#add_item (s_ "Connect to ...") in + ignore (local_xen#connect#activate + ~callback:Vc_connection_dlg.open_local_xen); + ignore (local_qemu#connect#activate + ~callback:Vc_connection_dlg.open_local_qemu); + ignore (open_dialog#connect#activate + ~callback:(Vc_connection_dlg.open_connection window)) in + () in + + (* Make a timeout function which is called once per second. *) + let state = ref initial_state in + let callback () = + (* Gc.compact is generally not safe in lablgtk programs, but + * is explicitly allowed in timeouts (see lablgtk README). + * This ensures memory is compacted regularly, but is also an + * excellent way to catch memory bugs in the ocaml libvirt bindings. + *) + Gc.compact (); + + (* Ugh: Bug in lablgtk causes a segfault if a timeout raises an + * exception. Catch and print exceptions instead. + *) + (try state := Vc_connections.repopulate tree model columns !state + with exn -> prerr_endline (Printexc.to_string exn)); + + true + in + let timeout_id = GMain.Timeout.add ~ms:1000 ~callback in + + (* Quit. *) + let quit _ = + GMain.Timeout.remove timeout_id; + GMain.quit (); + false + in + + ignore (window#connect#destroy ~callback:GMain.quit); + ignore (window#event#connect#delete ~callback:quit); + ignore (quit_item#connect#activate + ~callback:(fun () -> ignore (quit ()); ())); + + (* Display the window. *) + window#show () diff --git a/virt-ctrl/vc_mainwindow.mli b/virt-ctrl/vc_mainwindow.mli new file mode 100644 index 0000000..39439e9 --- /dev/null +++ b/virt-ctrl/vc_mainwindow.mli @@ -0,0 +1,31 @@ +(* virt-ctrl: A graphical management tool. + (C) Copyright 2007 Richard W.M. Jones, Red Hat Inc. + http://libvirt.org/ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + Make the main window. +*) + +(** This function creates the main window. You have to pass in + callback functions to wire everything up. +*) +val make : + start_domain:Vc_domain_ops.dops_callback_fn -> + pause_domain:Vc_domain_ops.dops_callback_fn -> + resume_domain:Vc_domain_ops.dops_callback_fn -> + shutdown_domain:Vc_domain_ops.dops_callback_fn -> + open_domain_details:Vc_domain_ops.dops_callback_fn -> + unit diff --git a/virt-ctrl/virt_ctrl.ml b/virt-ctrl/virt_ctrl.ml new file mode 100644 index 0000000..9e5053e --- /dev/null +++ b/virt-ctrl/virt_ctrl.ml @@ -0,0 +1,36 @@ +(* virt-ctrl: A graphical management tool. + (C) Copyright 2007 Richard W.M. Jones, Red Hat Inc. + http://libvirt.org/ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*) + +open Printf +open Virt_ctrl_gettext.Gettext + +let () = + (* Build the main window and wire up the buttons to the callback functions *) + Vc_mainwindow.make + ~start_domain:Vc_domain_ops.start_domain + ~pause_domain:Vc_domain_ops.pause_domain + ~resume_domain:Vc_domain_ops.resume_domain + ~shutdown_domain:Vc_domain_ops.shutdown_domain + ~open_domain_details:Vc_domain_ops.open_domain_details; + + (* Enter the Gtk main loop. *) + GMain.main (); + + (* Useful to catch memory bugs in the ocaml libvirt bindings. *) + Gc.compact () diff --git a/wininstaller.nsis.in b/wininstaller.nsis.in new file mode 100644 index 0000000..b5971a5 --- /dev/null +++ b/wininstaller.nsis.in @@ -0,0 +1,131 @@ +#!Nsis Installer Command Script +# @configure_input@ +# Copyright (C) 2008 Red Hat Inc., Richard W.M. Jones +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +# To build the installer: +# +# ./configure --with-nsis=/c/Progra~1/NSIS +# make all opt +# make wininstaller + +# Installer name. +Name "OCaml Libvirt ${VERSION}" + +# This is where we will write the installer to, set by Makefile. +OutFile "${OUTFILE}" + +# Target directory, or use value from the registry. +InstallDir "c:\${PACKAGE}" +InstallDirRegKey HKLM SOFTWARE\OCAML-LIBVIRT "Install_Dir" + +# Hide details. +ShowInstDetails hide +ShowUninstDetails hide + +# BZip2-compressed files are smaller but use more memory at runtime. +SetCompressor bzip2 + +# Include an XP manifest. +XPStyle on + +# Pages in the installer wizard. +Page license +Page components +Page directory +Page instfiles + +# Title, data for license page. +LicenseText "Continue" +LicenseData "winlicense.rtf" + +# Title for components page. +ComponentText "This will install OCaml libvirt bindings, dependent libraries and programs on your computer. Select which optional components you want installed." + +# Title for the install directory page. +DirText "Please select the installation folder." + +# Installer sections. +Section "Libvirt and its libraries (required)" + # Make this required. + SectionIn RO + + SetOutPath $INSTDIR + File "@LIBVIRT_DLL_PATH@\libvirt-0.dll" + File "@LIBXDR_DLL_PATH@\libxdr.dll" + File "@LIBXML2_DLL_PATH@\libxml2-2.dll" + File "@GNUTLS_DLL_PATH@\libgcrypt-??.dll" + File "@GNUTLS_DLL_PATH@\libgnutls-??.dll" + File "@GNUTLS_DLL_PATH@\libgpg-error-?.dll" + File "@GNUTLS_DLL_PATH@\libtasn1-?.dll" + File "@GTK_DLL_PATH@\*.dll" + + SetOutPath $INSTDIR\lib + File /r "@GTK_PATH@\lib\gtk-2.0" + File /r "@GTK_PATH@\lib\pango" + + SetOutPath $INSTDIR + File /r "@GTK_PATH@\etc" + + SetOutPath $INSTDIR +SectionEnd + +Section "Programs (recommended)" + SetOutPath $INSTDIR + File "/oname=mlvirsh.exe" "mlvirsh\mlvirsh.opt" + File "/oname=virt-ctrl.exe" "virt-ctrl\virt-ctrl.opt" +SectionEnd + +Section "OCaml Libvirt bindings (for developers only)" + # XXX Need to find out where Objective CAML is installed. +SectionEnd + +Section "Start Menu Shortcuts" + CreateDirectory "$SMPROGRAMS\${PACKAGE}" + CreateShortCut "$SMPROGRAMS\${PACKAGE}\Uninstall.lnk" "$INSTDIR\Uninstall ${PACKAGE}.exe" "" "$INSTDIR\Uninstall ${PACKAGE}.exe" 0 + CreateShortCut "$SMPROGRAMS\${PACKAGE}\Virt Shell.lnk" "$INSTDIR\mlvirsh.exe" "" "$INSTDIR\mlvirsh.exe" 0 + CreateShortCut "$SMPROGRAMS\${PACKAGE}\Virt Control.lnk" "$INSTDIR\virt-ctrl.exe" "" "$INSTDIR\virt-ctrl.exe" 0 +SectionEnd + +Section "Desktop Icons" + CreateShortCut "$DESKTOP\Virt Shell.lnk" "$INSTDIR\mlvirsh.exe" "" "$INSTDIR\mlvirsh.exe" 0 + CreateShortCut "$DESKTOP\Virt Control.lnk" "$INSTDIR\virt-ctrl.exe" "" "$INSTDIR\virt-ctrl.exe" 0 +SectionEnd + +Section "Uninstall" + # Desktop icons + Delete /rebootok "$DESKTOP\Virt Shell.lnk" + Delete /rebootok "$DESKTOP\Virt Control.lnk" + + # Menu shortcuts + Delete /rebootok "$SMPROGRAMS\${PACKAGE}\Virt Shell.lnk" + Delete /rebootok "$SMPROGRAMS\${PACKAGE}\Virt Control.lnk" + Delete /rebootok "$SMPROGRAMS\${PACKAGE}\Uninstall.lnk" + RMDir "$SMPROGRAMS\${PACKAGE}" + + # Files in installation directory. + RMDir /r "$INSTDIR\etc" + RMDir /r "$INSTDIR\lib" + Delete /rebootok "$INSTDIR\*.exe" + Delete /rebootok "$INSTDIR\*.dll" + + RMDir "$INSTDIR" +SectionEnd + +# Write an uninstaller into the installation directory. +Section -post + WriteUninstaller "$INSTDIR\Uninstall ${PACKAGE}.exe" +SectionEnd diff --git a/winlicense.rtf b/winlicense.rtf new file mode 100644 index 0000000..42a4a80 --- /dev/null +++ b/winlicense.rtf @@ -0,0 +1,871 @@ +{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}{\f1\fnil\fcharset0 Courier New;}} +{\*\generator Msftedit 5.41.21.2507;}\viewkind4\uc1\pard\f0\fs20 OCaml libvirt bindings and programs\par +Copyright \'a9 2007-2008 Red Hat Inc.\par +http://libvirt.org\par +\par +Programs and libraries in this installer are licensed variously under the GNU General Public License (GPL) and GNU Lesser General Public License (LGPL) version 2 and above. These licenses are reproduced below. Source for all parts is available from the website at http://libvirt.org.\par +\par +\par +\par +\par +\f1\tab\tab GNU GENERAL PUBLIC LICENSE\par +\tab\tab Version 2, June 1991\par +\par + Copyright (C) 1989, 1991 Free Software Foundation, Inc.\par + 675 Mass Ave, Cambridge, MA 02139, USA\par + Everyone is permitted to copy and distribute verbatim copies\par + of this license document, but changing it is not allowed.\par +\par +\tab\tab\tab Preamble\par +\par + The licenses for most software are designed to take away your\par +freedom to share and change it. By contrast, the GNU General Public\par +License is intended to guarantee your freedom to share and change free\par +software--to make sure the software is free for all its users. This\par +General Public License applies to most of the Free Software\par +Foundation's software and to any other program whose authors commit to\par +using it. (Some other Free Software Foundation software is covered by\par +the GNU Library General Public License instead.) You can apply it to\par +your programs, too.\par +\par + When we speak of free software, we are referring to freedom, not\par +price. Our General Public Licenses are designed to make sure that you\par +have the freedom to distribute copies of free software (and charge for\par +this service if you wish), that you receive source code or can get it\par +if you want it, that you can change the software or use pieces of it\par +in new free programs; and that you know you can do these things.\par +\par + To protect your rights, we need to make restrictions that forbid\par +anyone to deny you these rights or to ask you to surrender the rights.\par +These restrictions translate to certain responsibilities for you if you\par +distribute copies of the software, or if you modify it.\par +\par + For example, if you distribute copies of such a program, whether\par +gratis or for a fee, you must give the recipients all the rights that\par +you have. You must make sure that they, too, receive or can get the\par +source code. And you must show them these terms so they know their\par +rights.\par +\par + We protect your rights with two steps: (1) copyright the software, and\par +(2) offer you this license which gives you legal permission to copy,\par +distribute and/or modify the software.\par +\par + Also, for each author's protection and ours, we want to make certain\par +that everyone understands that there is no warranty for this free\par +software. If the software is modified by someone else and passed on, we\par +want its recipients to know that what they have is not the original, so\par +that any problems introduced by others will not reflect on the original\par +authors' reputations.\par +\par + Finally, any free program is threatened constantly by software\par +patents. We wish to avoid the danger that redistributors of a free\par +program will individually obtain patent licenses, in effect making the\par +program proprietary. To prevent this, we have made it clear that any\par +patent must be licensed for everyone's free use or not licensed at all.\par +\par + The precise terms and conditions for copying, distribution and\par +modification follow.\par +\page\par +\tab\tab GNU GENERAL PUBLIC LICENSE\par + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\par +\par + 0. This License applies to any program or other work which contains\par +a notice placed by the copyright holder saying it may be distributed\par +under the terms of this General Public License. The "Program", below,\par +refers to any such program or work, and a "work based on the Program"\par +means either the Program or any derivative work under copyright law:\par +that is to say, a work containing the Program or a portion of it,\par +either verbatim or with modifications and/or translated into another\par +language. (Hereinafter, translation is included without limitation in\par +the term "modification".) Each licensee is addressed as "you".\par +\par +Activities other than copying, distribution and modification are not\par +covered by this License; they are outside its scope. The act of\par +running the Program is not restricted, and the output from the Program\par +is covered only if its contents constitute a work based on the\par +Program (independent of having been made by running the Program).\par +Whether that is true depends on what the Program does.\par +\par + 1. You may copy and distribute verbatim copies of the Program's\par +source code as you receive it, in any medium, provided that you\par +conspicuously and appropriately publish on each copy an appropriate\par +copyright notice and disclaimer of warranty; keep intact all the\par +notices that refer to this License and to the absence of any warranty;\par +and give any other recipients of the Program a copy of this License\par +along with the Program.\par +\par +You may charge a fee for the physical act of transferring a copy, and\par +you may at your option offer warranty protection in exchange for a fee.\par +\par + 2. You may modify your copy or copies of the Program or any portion\par +of it, thus forming a work based on the Program, and copy and\par +distribute such modifications or work under the terms of Section 1\par +above, provided that you also meet all of these conditions:\par +\par + a) You must cause the modified files to carry prominent notices\par + stating that you changed the files and the date of any change.\par +\par + b) You must cause any work that you distribute or publish, that in\par + whole or in part contains or is derived from the Program or any\par + part thereof, to be licensed as a whole at no charge to all third\par + parties under the terms of this License.\par +\par + c) If the modified program normally reads commands interactively\par + when run, you must cause it, when started running for such\par + interactive use in the most ordinary way, to print or display an\par + announcement including an appropriate copyright notice and a\par + notice that there is no warranty (or else, saying that you provide\par + a warranty) and that users may redistribute the program under\par + these conditions, and telling the user how to view a copy of this\par + License. (Exception: if the Program itself is interactive but\par + does not normally print such an announcement, your work based on\par + the Program is not required to print an announcement.)\par +\page\par +These requirements apply to the modified work as a whole. If\par +identifiable sections of that work are not derived from the Program,\par +and can be reasonably considered independent and separate works in\par +themselves, then this License, and its terms, do not apply to those\par +sections when you distribute them as separate works. But when you\par +distribute the same sections as part of a whole which is a work based\par +on the Program, the distribution of the whole must be on the terms of\par +this License, whose permissions for other licensees extend to the\par +entire whole, and thus to each and every part regardless of who wrote it.\par +\par +Thus, it is not the intent of this section to claim rights or contest\par +your rights to work written entirely by you; rather, the intent is to\par +exercise the right to control the distribution of derivative or\par +collective works based on the Program.\par +\par +In addition, mere aggregation of another work not based on the Program\par +with the Program (or with a work based on the Program) on a volume of\par +a storage or distribution medium does not bring the other work under\par +the scope of this License.\par +\par + 3. You may copy and distribute the Program (or a work based on it,\par +under Section 2) in object code or executable form under the terms of\par +Sections 1 and 2 above provided that you also do one of the following:\par +\par + a) Accompany it with the complete corresponding machine-readable\par + source code, which must be distributed under the terms of Sections\par + 1 and 2 above on a medium customarily used for software interchange; or,\par +\par + b) Accompany it with a written offer, valid for at least three\par + years, to give any third party, for a charge no more than your\par + cost of physically performing source distribution, a complete\par + machine-readable copy of the corresponding source code, to be\par + distributed under the terms of Sections 1 and 2 above on a medium\par + customarily used for software interchange; or,\par +\par + c) Accompany it with the information you received as to the offer\par + to distribute corresponding source code. (This alternative is\par + allowed only for noncommercial distribution and only if you\par + received the program in object code or executable form with such\par + an offer, in accord with Subsection b above.)\par +\par +The source code for a work means the preferred form of the work for\par +making modifications to it. For an executable work, complete source\par +code means all the source code for all modules it contains, plus any\par +associated interface definition files, plus the scripts used to\par +control compilation and installation of the executable. However, as a\par +special exception, the source code distributed need not include\par +anything that is normally distributed (in either source or binary\par +form) with the major components (compiler, kernel, and so on) of the\par +operating system on which the executable runs, unless that component\par +itself accompanies the executable.\par +\par +If distribution of executable or object code is made by offering\par +access to copy from a designated place, then offering equivalent\par +access to copy the source code from the same place counts as\par +distribution of the source code, even though third parties are not\par +compelled to copy the source along with the object code.\par +\page\par + 4. You may not copy, modify, sublicense, or distribute the Program\par +except as expressly provided under this License. Any attempt\par +otherwise to copy, modify, sublicense or distribute the Program is\par +void, and will automatically terminate your rights under this License.\par +However, parties who have received copies, or rights, from you under\par +this License will not have their licenses terminated so long as such\par +parties remain in full compliance.\par +\par + 5. You are not required to accept this License, since you have not\par +signed it. However, nothing else grants you permission to modify or\par +distribute the Program or its derivative works. These actions are\par +prohibited by law if you do not accept this License. Therefore, by\par +modifying or distributing the Program (or any work based on the\par +Program), you indicate your acceptance of this License to do so, and\par +all its terms and conditions for copying, distributing or modifying\par +the Program or works based on it.\par +\par + 6. Each time you redistribute the Program (or any work based on the\par +Program), the recipient automatically receives a license from the\par +original licensor to copy, distribute or modify the Program subject to\par +these terms and conditions. You may not impose any further\par +restrictions on the recipients' exercise of the rights granted herein.\par +You are not responsible for enforcing compliance by third parties to\par +this License.\par +\par + 7. If, as a consequence of a court judgment or allegation of patent\par +infringement or for any other reason (not limited to patent issues),\par +conditions are imposed on you (whether by court order, agreement or\par +otherwise) that contradict the conditions of this License, they do not\par +excuse you from the conditions of this License. If you cannot\par +distribute so as to satisfy simultaneously your obligations under this\par +License and any other pertinent obligations, then as a consequence you\par +may not distribute the Program at all. For example, if a patent\par +license would not permit royalty-free redistribution of the Program by\par +all those who receive copies directly or indirectly through you, then\par +the only way you could satisfy both it and this License would be to\par +refrain entirely from distribution of the Program.\par +\par +If any portion of this section is held invalid or unenforceable under\par +any particular circumstance, the balance of the section is intended to\par +apply and the section as a whole is intended to apply in other\par +circumstances.\par +\par +It is not the purpose of this section to induce you to infringe any\par +patents or other property right claims or to contest validity of any\par +such claims; this section has the sole purpose of protecting the\par +integrity of the free software distribution system, which is\par +implemented by public license practices. Many people have made\par +generous contributions to the wide range of software distributed\par +through that system in reliance on consistent application of that\par +system; it is up to the author/donor to decide if he or she is willing\par +to distribute software through any other system and a licensee cannot\par +impose that choice.\par +\par +This section is intended to make thoroughly clear what is believed to\par +be a consequence of the rest of this License.\par +\page\par + 8. If the distribution and/or use of the Program is restricted in\par +certain countries either by patents or by copyrighted interfaces, the\par +original copyright holder who places the Program under this License\par +may add an explicit geographical distribution limitation excluding\par +those countries, so that distribution is permitted only in or among\par +countries not thus excluded. In such case, this License incorporates\par +the limitation as if written in the body of this License.\par +\par + 9. The Free Software Foundation may publish revised and/or new versions\par +of the General Public License from time to time. Such new versions will\par +be similar in spirit to the present version, but may differ in detail to\par +address new problems or concerns.\par +\par +Each version is given a distinguishing version number. If the Program\par +specifies a version number of this License which applies to it and "any\par +later version", you have the option of following the terms and conditions\par +either of that version or of any later version published by the Free\par +Software Foundation. If the Program does not specify a version number of\par +this License, you may choose any version ever published by the Free Software\par +Foundation.\par +\par + 10. If you wish to incorporate parts of the Program into other free\par +programs whose distribution conditions are different, write to the author\par +to ask for permission. For software which is copyrighted by the Free\par +Software Foundation, write to the Free Software Foundation; we sometimes\par +make exceptions for this. Our decision will be guided by the two goals\par +of preserving the free status of all derivatives of our free software and\par +of promoting the sharing and reuse of software generally.\par +\par +\tab\tab\tab NO WARRANTY\par +\par + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\par +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN\par +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\par +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\par +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\par +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS\par +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE\par +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\par +REPAIR OR CORRECTION.\par +\par + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\par +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\par +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\par +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\par +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\par +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\par +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\par +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\par +POSSIBILITY OF SUCH DAMAGES.\par +\par +\tab\tab END OF TERMS AND CONDITIONS\par +\page\par +\tab How to Apply These Terms to Your New Programs\par +\par + If you develop a new program, and you want it to be of the greatest\par +possible use to the public, the best way to achieve this is to make it\par +free software which everyone can redistribute and change under these terms.\par +\par + To do so, attach the following notices to the program. It is safest\par +to attach them to the start of each source file to most effectively\par +convey the exclusion of warranty; and each file should have at least\par +the "copyright" line and a pointer to where the full notice is found.\par +\par + \par + Copyright (C) 19yy \par +\par + This program is free software; you can redistribute it and/or modify\par + it under the terms of the GNU General Public License as published by\par + the Free Software Foundation; either version 2 of the License, or\par + (at your option) any later version.\par +\par + This program is distributed in the hope that it will be useful,\par + but WITHOUT ANY WARRANTY; without even the implied warranty of\par + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\par + GNU General Public License for more details.\par +\par + You should have received a copy of the GNU General Public License\par + along with this program; if not, write to the Free Software\par + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\par +\par +Also add information on how to contact you by electronic and paper mail.\par +\par +If the program is interactive, make it output a short notice like this\par +when it starts in an interactive mode:\par +\par + Gnomovision version 69, Copyright (C) 19yy name of author\par + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\par + This is free software, and you are welcome to redistribute it\par + under certain conditions; type `show c' for details.\par +\par +The hypothetical commands `show w' and `show c' should show the appropriate\par +parts of the General Public License. Of course, the commands you use may\par +be called something other than `show w' and `show c'; they could even be\par +mouse-clicks or menu items--whatever suits your program.\par +\par +You should also get your employer (if you work as a programmer) or your\par +school, if any, to sign a "copyright disclaimer" for the program, if\par +necessary. Here is a sample; alter the names:\par +\par + Yoyodyne, Inc., hereby disclaims all copyright interest in the program\par + `Gnomovision' (which makes passes at compilers) written by James Hacker.\par +\par + , 1 April 1989\par + Ty Coon, President of Vice\par +\par +This General Public License does not permit incorporating your program into\par +proprietary programs. If your program is a subroutine library, you may\par +consider it more useful to permit linking proprietary applications with the\par +library. If this is what you want to do, use the GNU Library General\par +Public License instead of this License.\par +\par +\f0\par +\par +\f1\par + GNU LESSER GENERAL PUBLIC LICENSE\par + Version 2.1, February 1999\par +\par + Copyright (C) 1991, 1999 Free Software Foundation, Inc.\par + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\par + Everyone is permitted to copy and distribute verbatim copies\par + of this license document, but changing it is not allowed.\par +\par +[This is the first released version of the Lesser GPL. It also counts\par + as the successor of the GNU Library Public License, version 2, hence\par + the version number 2.1.]\par +\par + Preamble\par +\par + The licenses for most software are designed to take away your\par +freedom to share and change it. By contrast, the GNU General Public\par +Licenses are intended to guarantee your freedom to share and change\par +free software--to make sure the software is free for all its users.\par +\par + This license, the Lesser General Public License, applies to some\par +specially designated software packages--typically libraries--of the\par +Free Software Foundation and other authors who decide to use it. You\par +can use it too, but we suggest you first think carefully about whether\par +this license or the ordinary General Public License is the better\par +strategy to use in any particular case, based on the explanations\par +below.\par +\par + When we speak of free software, we are referring to freedom of use,\par +not price. Our General Public Licenses are designed to make sure that\par +you have the freedom to distribute copies of free software (and charge\par +for this service if you wish); that you receive source code or can get\par +it if you want it; that you can change the software and use pieces of\par +it in new free programs; and that you are informed that you can do\par +these things.\par +\par + To protect your rights, we need to make restrictions that forbid\par +distributors to deny you these rights or to ask you to surrender these\par +rights. These restrictions translate to certain responsibilities for\par +you if you distribute copies of the library or if you modify it.\par +\par + For example, if you distribute copies of the library, whether gratis\par +or for a fee, you must give the recipients all the rights that we gave\par +you. You must make sure that they, too, receive or can get the source\par +code. If you link other code with the library, you must provide\par +complete object files to the recipients, so that they can relink them\par +with the library after making changes to the library and recompiling\par +it. And you must show them these terms so they know their rights.\par +\par + We protect your rights with a two-step method: (1) we copyright the\par +library, and (2) we offer you this license, which gives you legal\par +permission to copy, distribute and/or modify the library.\par +\par + To protect each distributor, we want to make it very clear that\par +there is no warranty for the free library. Also, if the library is\par +modified by someone else and passed on, the recipients should know\par +that what they have is not the original version, so that the original\par +author's reputation will not be affected by problems that might be\par +introduced by others.\par +^L\par + Finally, software patents pose a constant threat to the existence of\par +any free program. We wish to make sure that a company cannot\par +effectively restrict the users of a free program by obtaining a\par +restrictive license from a patent holder. Therefore, we insist that\par +any patent license obtained for a version of the library must be\par +consistent with the full freedom of use specified in this license.\par +\par + Most GNU software, including some libraries, is covered by the\par +ordinary GNU General Public License. This license, the GNU Lesser\par +General Public License, applies to certain designated libraries, and\par +is quite different from the ordinary General Public License. We use\par +this license for certain libraries in order to permit linking those\par +libraries into non-free programs.\par +\par + When a program is linked with a library, whether statically or using\par +a shared library, the combination of the two is legally speaking a\par +combined work, a derivative of the original library. The ordinary\par +General Public License therefore permits such linking only if the\par +entire combination fits its criteria of freedom. The Lesser General\par +Public License permits more lax criteria for linking other code with\par +the library.\par +\par + We call this license the "Lesser" General Public License because it\par +does Less to protect the user's freedom than the ordinary General\par +Public License. It also provides other free software developers Less\par +of an advantage over competing non-free programs. These disadvantages\par +are the reason we use the ordinary General Public License for many\par +libraries. However, the Lesser license provides advantages in certain\par +special circumstances.\par +\par + For example, on rare occasions, there may be a special need to\par +encourage the widest possible use of a certain library, so that it\par +becomes\par +a de-facto standard. To achieve this, non-free programs must be\par +allowed to use the library. A more frequent case is that a free\par +library does the same job as widely used non-free libraries. In this\par +case, there is little to gain by limiting the free library to free\par +software only, so we use the Lesser General Public License.\par +\par + In other cases, permission to use a particular library in non-free\par +programs enables a greater number of people to use a large body of\par +free software. For example, permission to use the GNU C Library in\par +non-free programs enables many more people to use the whole GNU\par +operating system, as well as its variant, the GNU/Linux operating\par +system.\par +\par + Although the Lesser General Public License is Less protective of the\par +users' freedom, it does ensure that the user of a program that is\par +linked with the Library has the freedom and the wherewithal to run\par +that program using a modified version of the Library.\par +\par + The precise terms and conditions for copying, distribution and\par +modification follow. Pay close attention to the difference between a\par +"work based on the library" and a "work that uses the library". The\par +former contains code derived from the library, whereas the latter must\par +be combined with the library in order to run.\par +^L\par + GNU LESSER GENERAL PUBLIC LICENSE\par + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\par +\par + 0. This License Agreement applies to any software library or other\par +program which contains a notice placed by the copyright holder or\par +other authorized party saying it may be distributed under the terms of\par +this Lesser General Public License (also called "this License").\par +Each licensee is addressed as "you".\par +\par + A "library" means a collection of software functions and/or data\par +prepared so as to be conveniently linked with application programs\par +(which use some of those functions and data) to form executables.\par +\par + The "Library", below, refers to any such software library or work\par +which has been distributed under these terms. A "work based on the\par +Library" means either the Library or any derivative work under\par +copyright law: that is to say, a work containing the Library or a\par +portion of it, either verbatim or with modifications and/or translated\par +straightforwardly into another language. (Hereinafter, translation is\par +included without limitation in the term "modification".)\par +\par + "Source code" for a work means the preferred form of the work for\par +making modifications to it. For a library, complete source code means\par +all the source code for all modules it contains, plus any associated\par +interface definition files, plus the scripts used to control\par +compilation\par +and installation of the library.\par +\par + Activities other than copying, distribution and modification are not\par +covered by this License; they are outside its scope. The act of\par +running a program using the Library is not restricted, and output from\par +such a program is covered only if its contents constitute a work based\par +on the Library (independent of the use of the Library in a tool for\par +writing it). Whether that is true depends on what the Library does\par +and what the program that uses the Library does.\par +\par + 1. You may copy and distribute verbatim copies of the Library's\par +complete source code as you receive it, in any medium, provided that\par +you conspicuously and appropriately publish on each copy an\par +appropriate copyright notice and disclaimer of warranty; keep intact\par +all the notices that refer to this License and to the absence of any\par +warranty; and distribute a copy of this License along with the\par +Library.\par +\par + You may charge a fee for the physical act of transferring a copy,\par +and you may at your option offer warranty protection in exchange for a\par +fee.\par +\page\par + 2. You may modify your copy or copies of the Library or any portion\par +of it, thus forming a work based on the Library, and copy and\par +distribute such modifications or work under the terms of Section 1\par +above, provided that you also meet all of these conditions:\par +\par + a) The modified work must itself be a software library.\par +\par + b) You must cause the files modified to carry prominent notices\par + stating that you changed the files and the date of any change.\par +\par + c) You must cause the whole of the work to be licensed at no\par + charge to all third parties under the terms of this License.\par +\par + d) If a facility in the modified Library refers to a function or a\par + table of data to be supplied by an application program that uses\par + the facility, other than as an argument passed when the facility\par + is invoked, then you must make a good faith effort to ensure that,\par + in the event an application does not supply such function or\par + table, the facility still operates, and performs whatever part of\par + its purpose remains meaningful.\par +\par + (For example, a function in a library to compute square roots has\par + a purpose that is entirely well-defined independent of the\par + application. Therefore, Subsection 2d requires that any\par + application-supplied function or table used by this function must\par + be optional: if the application does not supply it, the square\par + root function must still compute square roots.)\par +\par +These requirements apply to the modified work as a whole. If\par +identifiable sections of that work are not derived from the Library,\par +and can be reasonably considered independent and separate works in\par +themselves, then this License, and its terms, do not apply to those\par +sections when you distribute them as separate works. But when you\par +distribute the same sections as part of a whole which is a work based\par +on the Library, the distribution of the whole must be on the terms of\par +this License, whose permissions for other licensees extend to the\par +entire whole, and thus to each and every part regardless of who wrote\par +it.\par +\par +Thus, it is not the intent of this section to claim rights or contest\par +your rights to work written entirely by you; rather, the intent is to\par +exercise the right to control the distribution of derivative or\par +collective works based on the Library.\par +\par +In addition, mere aggregation of another work not based on the Library\par +with the Library (or with a work based on the Library) on a volume of\par +a storage or distribution medium does not bring the other work under\par +the scope of this License.\par +\par + 3. You may opt to apply the terms of the ordinary GNU General Public\par +License instead of this License to a given copy of the Library. To do\par +this, you must alter all the notices that refer to this License, so\par +that they refer to the ordinary GNU General Public License, version 2,\par +instead of to this License. (If a newer version than version 2 of the\par +ordinary GNU General Public License has appeared, then you can specify\par +that version instead if you wish.) Do not make any other change in\par +these notices.\par +^L\par + Once this change is made in a given copy, it is irreversible for\par +that copy, so the ordinary GNU General Public License applies to all\par +subsequent copies and derivative works made from that copy.\par +\par + This option is useful when you wish to copy part of the code of\par +the Library into a program that is not a library.\par +\par + 4. You may copy and distribute the Library (or a portion or\par +derivative of it, under Section 2) in object code or executable form\par +under the terms of Sections 1 and 2 above provided that you accompany\par +it with the complete corresponding machine-readable source code, which\par +must be distributed under the terms of Sections 1 and 2 above on a\par +medium customarily used for software interchange.\par +\par + If distribution of object code is made by offering access to copy\par +from a designated place, then offering equivalent access to copy the\par +source code from the same place satisfies the requirement to\par +distribute the source code, even though third parties are not\par +compelled to copy the source along with the object code.\par +\par + 5. A program that contains no derivative of any portion of the\par +Library, but is designed to work with the Library by being compiled or\par +linked with it, is called a "work that uses the Library". Such a\par +work, in isolation, is not a derivative work of the Library, and\par +therefore falls outside the scope of this License.\par +\par + However, linking a "work that uses the Library" with the Library\par +creates an executable that is a derivative of the Library (because it\par +contains portions of the Library), rather than a "work that uses the\par +library". The executable is therefore covered by this License.\par +Section 6 states terms for distribution of such executables.\par +\par + When a "work that uses the Library" uses material from a header file\par +that is part of the Library, the object code for the work may be a\par +derivative work of the Library even though the source code is not.\par +Whether this is true is especially significant if the work can be\par +linked without the Library, or if the work is itself a library. The\par +threshold for this to be true is not precisely defined by law.\par +\par + If such an object file uses only numerical parameters, data\par +structure layouts and accessors, and small macros and small inline\par +functions (ten lines or less in length), then the use of the object\par +file is unrestricted, regardless of whether it is legally a derivative\par +work. (Executables containing this object code plus portions of the\par +Library will still fall under Section 6.)\par +\par + Otherwise, if the work is a derivative of the Library, you may\par +distribute the object code for the work under the terms of Section 6.\par +Any executables containing that work also fall under Section 6,\par +whether or not they are linked directly with the Library itself.\par +^L\par + 6. As an exception to the Sections above, you may also combine or\par +link a "work that uses the Library" with the Library to produce a\par +work containing portions of the Library, and distribute that work\par +under terms of your choice, provided that the terms permit\par +modification of the work for the customer's own use and reverse\par +engineering for debugging such modifications.\par +\par + You must give prominent notice with each copy of the work that the\par +Library is used in it and that the Library and its use are covered by\par +this License. You must supply a copy of this License. If the work\par +during execution displays copyright notices, you must include the\par +copyright notice for the Library among them, as well as a reference\par +directing the user to the copy of this License. Also, you must do one\par +of these things:\par +\par + a) Accompany the work with the complete corresponding\par + machine-readable source code for the Library including whatever\par + changes were used in the work (which must be distributed under\par + Sections 1 and 2 above); and, if the work is an executable linked\par + with the Library, with the complete machine-readable "work that\par + uses the Library", as object code and/or source code, so that the\par + user can modify the Library and then relink to produce a modified\par + executable containing the modified Library. (It is understood\par + that the user who changes the contents of definitions files in the\par + Library will not necessarily be able to recompile the application\par + to use the modified definitions.)\par +\par + b) Use a suitable shared library mechanism for linking with the\par + Library. A suitable mechanism is one that (1) uses at run time a\par + copy of the library already present on the user's computer system,\par + rather than copying library functions into the executable, and (2)\par + will operate properly with a modified version of the library, if\par + the user installs one, as long as the modified version is\par + interface-compatible with the version that the work was made with.\par +\par + c) Accompany the work with a written offer, valid for at\par + least three years, to give the same user the materials\par + specified in Subsection 6a, above, for a charge no more\par + than the cost of performing this distribution.\par +\par + d) If distribution of the work is made by offering access to copy\par + from a designated place, offer equivalent access to copy the above\par + specified materials from the same place.\par +\par + e) Verify that the user has already received a copy of these\par + materials or that you have already sent this user a copy.\par +\par + For an executable, the required form of the "work that uses the\par +Library" must include any data and utility programs needed for\par +reproducing the executable from it. However, as a special exception,\par +the materials to be distributed need not include anything that is\par +normally distributed (in either source or binary form) with the major\par +components (compiler, kernel, and so on) of the operating system on\par +which the executable runs, unless that component itself accompanies\par +the executable.\par +\par + It may happen that this requirement contradicts the license\par +restrictions of other proprietary libraries that do not normally\par +accompany the operating system. Such a contradiction means you cannot\par +use both them and the Library together in an executable that you\par +distribute.\par +^L\par + 7. You may place library facilities that are a work based on the\par +Library side-by-side in a single library together with other library\par +facilities not covered by this License, and distribute such a combined\par +library, provided that the separate distribution of the work based on\par +the Library and of the other library facilities is otherwise\par +permitted, and provided that you do these two things:\par +\par + a) Accompany the combined library with a copy of the same work\par + based on the Library, uncombined with any other library\par + facilities. This must be distributed under the terms of the\par + Sections above.\par +\par + b) Give prominent notice with the combined library of the fact\par + that part of it is a work based on the Library, and explaining\par + where to find the accompanying uncombined form of the same work.\par +\par + 8. You may not copy, modify, sublicense, link with, or distribute\par +the Library except as expressly provided under this License. Any\par +attempt otherwise to copy, modify, sublicense, link with, or\par +distribute the Library is void, and will automatically terminate your\par +rights under this License. However, parties who have received copies,\par +or rights, from you under this License will not have their licenses\par +terminated so long as such parties remain in full compliance.\par +\par + 9. You are not required to accept this License, since you have not\par +signed it. However, nothing else grants you permission to modify or\par +distribute the Library or its derivative works. These actions are\par +prohibited by law if you do not accept this License. Therefore, by\par +modifying or distributing the Library (or any work based on the\par +Library), you indicate your acceptance of this License to do so, and\par +all its terms and conditions for copying, distributing or modifying\par +the Library or works based on it.\par +\par + 10. Each time you redistribute the Library (or any work based on the\par +Library), the recipient automatically receives a license from the\par +original licensor to copy, distribute, link with or modify the Library\par +subject to these terms and conditions. You may not impose any further\par +restrictions on the recipients' exercise of the rights granted herein.\par +You are not responsible for enforcing compliance by third parties with\par +this License.\par +^L\par + 11. If, as a consequence of a court judgment or allegation of patent\par +infringement or for any other reason (not limited to patent issues),\par +conditions are imposed on you (whether by court order, agreement or\par +otherwise) that contradict the conditions of this License, they do not\par +excuse you from the conditions of this License. If you cannot\par +distribute so as to satisfy simultaneously your obligations under this\par +License and any other pertinent obligations, then as a consequence you\par +may not distribute the Library at all. For example, if a patent\par +license would not permit royalty-free redistribution of the Library by\par +all those who receive copies directly or indirectly through you, then\par +the only way you could satisfy both it and this License would be to\par +refrain entirely from distribution of the Library.\par +\par +If any portion of this section is held invalid or unenforceable under\par +any particular circumstance, the balance of the section is intended to\par +apply, and the section as a whole is intended to apply in other\par +circumstances.\par +\par +It is not the purpose of this section to induce you to infringe any\par +patents or other property right claims or to contest validity of any\par +such claims; this section has the sole purpose of protecting the\par +integrity of the free software distribution system which is\par +implemented by public license practices. Many people have made\par +generous contributions to the wide range of software distributed\par +through that system in reliance on consistent application of that\par +system; it is up to the author/donor to decide if he or she is willing\par +to distribute software through any other system and a licensee cannot\par +impose that choice.\par +\par +This section is intended to make thoroughly clear what is believed to\par +be a consequence of the rest of this License.\par +\par + 12. If the distribution and/or use of the Library is restricted in\par +certain countries either by patents or by copyrighted interfaces, the\par +original copyright holder who places the Library under this License\par +may add an explicit geographical distribution limitation excluding those\par +countries, so that distribution is permitted only in or among\par +countries not thus excluded. In such case, this License incorporates\par +the limitation as if written in the body of this License.\par +\par + 13. The Free Software Foundation may publish revised and/or new\par +versions of the Lesser General Public License from time to time.\par +Such new versions will be similar in spirit to the present version,\par +but may differ in detail to address new problems or concerns.\par +\par +Each version is given a distinguishing version number. If the Library\par +specifies a version number of this License which applies to it and\par +"any later version", you have the option of following the terms and\par +conditions either of that version or of any later version published by\par +the Free Software Foundation. If the Library does not specify a\par +license version number, you may choose any version ever published by\par +the Free Software Foundation.\par +^L\par + 14. If you wish to incorporate parts of the Library into other free\par +programs whose distribution conditions are incompatible with these,\par +write to the author to ask for permission. For software which is\par +copyrighted by the Free Software Foundation, write to the Free\par +Software Foundation; we sometimes make exceptions for this. Our\par +decision will be guided by the two goals of preserving the free status\par +of all derivatives of our free software and of promoting the sharing\par +and reuse of software generally.\par +\par + NO WARRANTY\par +\par + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\par +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\par +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\par +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY\par +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\par +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\par +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\par +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\par +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\par +\par + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\par +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\par +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\par +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\par +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\par +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\par +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\par +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\par +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\par +DAMAGES.\par +\par + END OF TERMS AND CONDITIONS\par +^L\par + How to Apply These Terms to Your New Libraries\par +\par + If you develop a new library, and you want it to be of the greatest\par +possible use to the public, we recommend making it free software that\par +everyone can redistribute and change. You can do so by permitting\par +redistribution under these terms (or, alternatively, under the terms\par +of the ordinary General Public License).\par +\par + To apply these terms, attach the following notices to the library.\par +It is safest to attach them to the start of each source file to most\par +effectively convey the exclusion of warranty; and each file should\par +have at least the "copyright" line and a pointer to where the full\par +notice is found.\par +\par +\par + \par + Copyright (C) \par +\par + This library is free software; you can redistribute it and/or\par + modify it under the terms of the GNU Lesser General Public\par + License as published by the Free Software Foundation; either\par + version 2 of the License, or (at your option) any later version.\par +\par + This library is distributed in the hope that it will be useful,\par + but WITHOUT ANY WARRANTY; without even the implied warranty of\par + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\par + Lesser General Public License for more details.\par +\par + You should have received a copy of the GNU Lesser General Public\par + License along with this library; if not, write to the Free Software\par + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\par +\par +Also add information on how to contact you by electronic and paper\par +mail.\par +\par +You should also get your employer (if you work as a programmer) or\par +your\par +school, if any, to sign a "copyright disclaimer" for the library, if\par +necessary. Here is a sample; alter the names:\par +\par + Yoyodyne, Inc., hereby disclaims all copyright interest in the\par + library `Frob' (a library for tweaking knobs) written by James\par +Random Hacker.\par +\par + , 1 April 1990\par + Ty Coon, President of Vice\par +\par +That's all there is to it!\par +\par +\par +\par +\f0\par +} + \ No newline at end of file -- 1.8.3.1