diff options
author | Anas Nashif <anas.nashif@intel.com> | 2012-11-01 13:05:57 -0700 |
---|---|---|
committer | Anas Nashif <anas.nashif@intel.com> | 2012-11-01 13:05:57 -0700 |
commit | 6f7d286265ab480867d9a46b11859ab657e5e779 (patch) | |
tree | d9caa4117bbadfca3befc8568762cd14a1a4e227 | |
download | desktop-file-utils-6f7d286265ab480867d9a46b11859ab657e5e779.tar.gz desktop-file-utils-6f7d286265ab480867d9a46b11859ab657e5e779.tar.bz2 desktop-file-utils-6f7d286265ab480867d9a46b11859ab657e5e779.zip |
Imported Upstream version 0.20upstream/0.20
-rw-r--r-- | AUTHORS | 3 | ||||
-rw-r--r-- | COPYING | 339 | ||||
-rw-r--r-- | ChangeLog | 4285 | ||||
-rw-r--r-- | HACKING | 31 | ||||
-rw-r--r-- | Makefile.am | 35 | ||||
-rw-r--r-- | Makefile.in | 722 | ||||
-rw-r--r-- | NEWS | 259 | ||||
-rw-r--r-- | README | 55 | ||||
-rw-r--r-- | aclocal.m4 | 1216 | ||||
-rw-r--r-- | config.h.in | 25 | ||||
-rwxr-xr-x | configure | 5242 | ||||
-rw-r--r-- | configure.ac | 103 | ||||
-rwxr-xr-x | depcomp | 630 | ||||
-rwxr-xr-x | elisp-comp | 90 | ||||
-rwxr-xr-x | install-sh | 520 | ||||
-rw-r--r-- | man/Makefile.am | 19 | ||||
-rw-r--r-- | man/Makefile.in | 429 | ||||
-rw-r--r-- | man/desktop-file-install.1 | 173 | ||||
-rw-r--r-- | man/desktop-file-validate.1 | 41 | ||||
-rw-r--r-- | man/update-desktop-database.1 | 71 | ||||
-rw-r--r-- | misc/Makefile.am | 9 | ||||
-rw-r--r-- | misc/Makefile.in | 425 | ||||
-rw-r--r-- | misc/desktop-entry-mode.el | 233 | ||||
-rwxr-xr-x | missing | 376 | ||||
-rw-r--r-- | src/Makefile.am | 48 | ||||
-rw-r--r-- | src/Makefile.in | 542 | ||||
-rw-r--r-- | src/install.c | 948 | ||||
-rw-r--r-- | src/keyfileutils.c | 284 | ||||
-rw-r--r-- | src/keyfileutils.h | 53 | ||||
-rw-r--r-- | src/mimeutils.c | 291 | ||||
-rw-r--r-- | src/mimeutils.h | 34 | ||||
-rw-r--r-- | src/update-desktop-database.c | 498 | ||||
-rw-r--r-- | src/validate.c | 2918 | ||||
-rw-r--r-- | src/validate.h | 40 | ||||
-rw-r--r-- | src/validator.c | 82 |
35 files changed, 21069 insertions, 0 deletions
@@ -0,0 +1,3 @@ +Havoc Pennington <hp@redhat.com> +Alex Larsson <alexl@redhat.com> +Vincent Untz <vuntz@gnome.org> @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..78b20f6 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,4285 @@ +# Generated by Makefile. Do not edit. + +commit 191a09f0e1bf2ebd5a4dcbb5b106a91a3b335716 +Author: Vincent Untz <vuntz@gnome.org> +Date: Fri Mar 2 18:57:24 2012 +0100 + + validate: Cleanup previous commit + + One small fix worth mentioning is that we don't consider seeing an Exec + key in an action group as having seen an Exec key in the main group. + +M src/validate.c + +commit 2243948341589021a3d5c94ba538864bef80c180 +Author: Giovanni Campagna <gcampagna@src.gnome.org> +Date: Mon Feb 6 16:21:37 2012 +0100 + + validate: Validate Desktop Actions + + Destkop Actions were recently reintroduced in the specification, with + full specification of semantics and allowed keys. + + Previously the validator would allow and ignore any desktop action + description, now it requires them to be compliant. + +M src/validate.c + +commit b7308e73c990f4e5b762266ed3d37af20b77809a +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Feb 22 14:40:54 2012 +0100 + + build: Update git.mk and ignore generated tarballs + +M Makefile.am +M git.mk + +commit 755001303a7b58bc869034c5ba98b66b394d817e +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Feb 22 14:40:41 2012 +0100 + + build: Generate ChangeLog on make dist + +M Makefile.am + +commit 2792eed31f4be15f135948d131b08920aa225e63 +Author: Vincent Untz <vuntz@gnome.org> +Date: Tue Jan 24 16:14:47 2012 +0100 + + Add MATE and Razor to list of registered environments + + See http://lists.freedesktop.org/archives/xdg/2012-January/012250.html + +M src/validate.c + +commit c5110b3253239f80485d879e7d8a186f3a63e7c4 +Author: Matthias Clasen <mclasen@redhat.com> +Date: Thu Jan 12 11:45:16 2012 +0100 + + validate: Handle list of locale strings in fixup too + + https://bugs.freedesktop.org/show_bug.cgi?id=44098 + +M src/validate.c + +commit e8e510b58c72f314645872f440d1abcffb7bfeb2 +Author: Vincent Untz <vuntz@gnome.org> +Date: Tue Dec 20 16:11:05 2011 +0100 + + release: post-release bump to 0.20 + +M configure.ac + +commit 143095da3e8459d58372fb354bde11f77e4adac6 +Author: Vincent Untz <vuntz@gnome.org> +Date: Tue Dec 20 16:10:10 2011 +0100 + + release: 0.19 + +M NEWS + +commit 7fa48b327e9abb1fe7cc5de04f3301c865cae390 +Author: Vincent Untz <vuntz@gnome.org> +Date: Tue Dec 20 16:09:25 2011 +0100 + + build: Fix distcheck + +M man/Makefile.am + +commit 499748b93a410905e15e12216bf77d0180a15740 +Author: Vincent Untz <vuntz@gnome.org> +Date: Tue Dec 20 09:46:16 2011 +0100 + + build: Create xz tarballs + +M configure.ac + +commit 332835b24602706f71d5f5d912eac4f7a087d8ba +Author: Vincent Untz <vuntz@gnome.org> +Date: Mon Dec 19 15:55:29 2011 +0100 + + validate: Add support for updated Keywords key + + This is not a KDE-specific key anymore, but a list of locale strings. + +M src/validate.c + +commit b4beadb0efba60acfb95fb3036fe9d26b66972cf +Author: Vincent Untz <vuntz@gnome.org> +Date: Thu Dec 15 15:02:33 2011 +0100 + + update-desktop-database: Ignore desktop files with Hidden=true + + Those desktop files should be considered as non-existent, according to + the spec. + + https://bugs.freedesktop.org/show_bug.cgi?id=31099 + +M src/update-desktop-database.c + +commit c1cf441c9797135a9d185fd48441515847b349af +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Dec 14 18:07:58 2011 +0100 + + man: Install a desktop-file-edit man page + + It's actually just a symlink to the desktop-file-install one. + +M man/Makefile.am + +commit 90beafc33742b9ffa9761c98737af1210e70307e +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Dec 14 18:03:58 2011 +0100 + + man: Update manual for desktop-file-install/desktop-file-edit changes + +M man/desktop-file-install.1 +M man/desktop-file-validate.1 + +commit e27d737869d6ad065c12d84b10501f63595be18a +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Dec 14 17:36:59 2011 +0100 + + install: Look at RPM_BUILD_ROOT to know where to install desktop files + + If the default directory to install desktop files is used, then look at + the RPM_BUILD_ROOT environment variable in case a package is being built + to correctly install the .desktop file. + +M src/install.c + +commit 0df0ca25aab182de40ca0ca3803dafb103eb9db5 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Dec 14 17:02:41 2011 +0100 + + install: Add hidden --edit-mode to force edit mode + + This helps the developer test the mode without installing :-) + +M src/install.c + +commit 52293fd32e85c630a4141dde726b13ac506eec60 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Dec 14 17:01:51 2011 +0100 + + keyfileutils: Do not pretend we can save to URI + + This is just wrong, and breaks saving to relative paths in edit mode. + +M src/install.c +M src/keyfileutils.c +M src/keyfileutils.h + +commit 9e11f3864d118a17cf5be5f7979e3510cbe26a95 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Dec 14 16:51:42 2011 +0100 + + install: Add an edit mode + + This mode is used when the program is called as desktop-file-edit. + + In this mode, we just allow inline editing of one .desktop file. + +M src/install.c + +commit ead67d72868bdf06592303583cbecaba2dda4666 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Dec 14 16:51:22 2011 +0100 + + build: Create a desktop-file-edit symlink to desktop-file-install + +M configure.ac +M src/Makefile.am + +commit b0d4472c9af1d6fa008954988873c1be7104cdc2 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Dec 14 15:56:36 2011 +0100 + + install: Use "process" instead of "install" in messages + + This makes the tool feel a bit less install-specific. + +M src/install.c + +commit 78966bb893e619542dfb04cca226169bc4aa6290 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Dec 14 15:52:24 2011 +0100 + + install: Move the install command line options to an option group + + They're usually not needed as the default behavior is fine. + +M src/install.c + +commit e6f385182a1735eea36ca1041ed53696a62c89c6 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Dec 14 15:41:57 2011 +0100 + + keyfileutils: Also copy translations when copying a key + + We of course don't do that if we're dealing with keys that are + localized keys. + +M src/keyfileutils.c + +commit 9afde296e5ef63c1908b93811f9204a01eeb130e +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Dec 14 15:28:19 2011 +0100 + + keyfileutils: Drop unneeded check + +M src/keyfileutils.c + +commit 905bf3b30bdf3206c741454cf69183b58403cd65 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Dec 14 15:23:37 2011 +0100 + + install: Remove localized keys when setting/removing a key + + If we set a key to a new value, then clearly, the translations are + outdated and should be removed. + + If we remove a key, then the intention is to also remove the + translations. + +M src/install.c +M src/keyfileutils.c +M src/keyfileutils.h + +commit 744b422e8acbc60bc0289a0b4ff4f45d07a31e32 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Dec 14 15:13:18 2011 +0100 + + install: Add --set-key/--set-value options to set an arbitrary key + + Also move the reversal of the edit_actions list to a post-parsing hook. + +M src/install.c + +commit 921e85969dc4fe20246b59887b093da838ca3f5a +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Dec 14 14:07:50 2011 +0100 + + install: Move options around + + The new order in --help-edit makes more sense. + +M src/install.c + +commit a64187fc8a82bc8dda824bdf5046e6455377425a +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Dec 14 14:04:13 2011 +0100 + + install: Add options to set Name, GenericName, Comment, Icon keys + +M src/install.c + +commit aa770a3b41d14c0ac27fed18dd7024de9e5b8d77 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Dec 14 12:37:45 2011 +0100 + + install: Add --add-not-show-in/--remove-not-show-in options + +M src/install.c + +commit e09e297506ce5c84b2ad7924ac94391a2437ed61 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Dec 14 12:28:46 2011 +0100 + + install: Also handle --copy-generic-name-to-name & friends ordered + + This is important for this to work correctly: + --remove-key GenericName --copy-generic-name-to-name + +M src/install.c + +commit d1f16cef6f3a9124cb7ea5d42afdde32f56a2a79 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Dec 14 11:42:10 2011 +0100 + + install: Respect order of edit options + + We want to support cases like: + --remove-key Categories --add-category AudioVideo + + Until now, we were not keeping the order of edit options and this + resulted in removing keys before editing lists (which is wrong for the + case above). + + In general, people expect the order of their edit options to be + respected. + +M src/install.c + +commit cd00549a7f5ca0486560cab47eb88498a2128ea8 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Dec 14 11:16:47 2011 +0100 + + install: Split parsing of install & edit options + +M src/install.c + +commit dcda28585a376497b97826d3090bdb498f9858a2 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Dec 14 11:15:42 2011 +0100 + + Fix build by adding forgotten ',' + +M src/mimeutils.c + +commit 858a1244a12e30b6bd5e92fffc05838d3e3d4969 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Oct 19 09:49:36 2011 +0200 + + Mark all zz-application/* MIME types as aliases + + Even popular zz-application/* MIME types (like + zz-application/zz-winassoc-doc) should actually just be used as aliases + to the real valid MIME types. + + This needs some fixes to shared-mime-info so that it knows about the + aliases, but it's the right thing to do. + +M src/mimeutils.c + +commit 987dd40f9633d517a3894d48ef2fd909a96d93f4 +Author: Hans de Goede <hdegoede@redhat.com> +Date: Fri Sep 30 16:27:36 2011 +0200 + + Deal with various zz-application/zz-winassoc-XXX mime types + + zz-application is not a valid media type, but unfortunately there are + quite a few mime types out there in the form of + zz-application/zz-winassoc-XXX + + This patch makes mimeutils deal with these in 2 different ways: + 1) For the "popular" ones (doc and xls) simply accept them + 2) For the others, advice the standard mime type for these files + + https://bugs.freedesktop.org/show_bug.cgi?id=41286 + +M src/mimeutils.c + +commit 7867a669ffb7d6f50f59b4c9e16b062c6883ce26 +Author: Vincent Untz <vuntz@gnome.org> +Date: Tue Jun 14 14:58:56 2011 +0200 + + build: Modernize build system a bit + + Do not use libtool as there's nothing needing it. + Use the tar-ustar option for AM_INIT_AUTOMAKE for better tarballs. + Correctly use ACLOCAL_FLAGS in Makefile.am instead of configure.ac. + Do not use AM_MAINTAINER_MODE as it is not recommended by automake + developers. + Do not use AC_ISC_POSIX nor AC_HEADER_STDC as they shouldn't be needed + on modern systems. + +M Makefile.am +M autogen.sh +M configure.ac + +commit 47322e554cc5388a3e6325f36b7d07a13f124594 +Author: Vincent Untz <vuntz@gnome.org> +Date: Thu Mar 31 21:58:44 2011 +0530 + + Add Unity to list of registered environments + + See http://lists.freedesktop.org/archives/xdg/2011-March/011856.html + +M src/validate.c + +commit 4bd92be521ad76b0bdd81cc18e33fc313fe41ff0 +Author: Vincent Untz <vuntz@gnome.org> +Date: Thu Jan 13 11:05:29 2011 +0100 + + release: post-release bump to 0.19 + +M configure.ac + +commit 4fca4f2f474c6bf7fa0895599265543739499029 +Author: Vincent Untz <vuntz@gnome.org> +Date: Thu Jan 13 11:04:13 2011 +0100 + + release: 0.18 + +M NEWS + +commit b123a26be1caac35860a8d7085566a8fba14e67b +Author: Vincent Untz <vuntz@gnome.org> +Date: Sat Oct 9 11:49:09 2010 +0200 + + build: Update git.mk from pango + +M git.mk + +commit 465abba0ff50b660fd7e90f048daf4af279a790c +Author: Vincent Untz <vuntz@gnome.org> +Date: Tue Oct 5 11:54:06 2010 +0200 + + Accept x-scheme-handler/* mime types + + This will be used by desktops to know which applications can handle a + URI scheme. + +M src/mimeutils.c + +commit cef7a35679278174298e0e82cc2582a26a3e8e28 +Author: Vincent Untz <vuntz@gnome.org> +Date: Mon Sep 20 17:46:09 2010 +0200 + + man: Fix title of update-desktop-database man page + +M man/update-desktop-database.1 + +commit 2224bf1b5e191c9caddb7dd3e7ba72c1e2850734 +Author: Vincent Untz <vuntz@gnome.org> +Date: Mon Sep 20 17:45:58 2010 +0200 + + build: Update all Makefile.am to more recent standards + +M Makefile.am +M src/Makefile.am + +commit 2227d19f65ec398d84ac47c539250c2b6d67f907 +Author: Vincent Untz <vuntz@gnome.org> +Date: Mon Sep 20 17:38:43 2010 +0200 + + misc: Update instructions for commit messages + + We're switching to "tag:" instead of "[tag]". + +M ChangeLog + +commit 7a16049bfbf3f9c63d15a4f62e25d222db121fb2 +Author: Vincent Untz <vuntz@gnome.org> +Date: Fri Sep 10 05:02:20 2010 +0200 + + Sort mime types alphabetically in update-desktop-database cache + + This makes the cache easier to read, in case some people want to take a + look. + +M src/update-desktop-database.c + +commit f3c5a0da2e3d57871c7fdcb716e8e1274357a449 +Author: Vincent Untz <vuntz@gnome.org> +Date: Fri Sep 10 04:46:37 2010 +0200 + + Update README to stop saying there's no doc + +M README + +commit a658aaa1ab966e14e92b9dbd721f3bbd3fa53035 +Author: Vincent Untz <vuntz@gnome.org> +Date: Fri Sep 10 04:37:50 2010 +0200 + + [release] post-release bump to 0.18 + +M configure.ac + +commit a96375ffb1bc7b948417d598b296b1cbf1094907 +Author: Vincent Untz <vuntz@gnome.org> +Date: Fri Sep 10 04:36:14 2010 +0200 + + [release] 0.17 + +M NEWS + +commit a8c9483a393da214dc47b3a2a7c571a3a0b6e3b9 +Author: Vincent Untz <vuntz@gnome.org> +Date: Fri Sep 10 04:24:58 2010 +0200 + + Add man pages + +M Makefile.am +M configure.ac +A man/Makefile.am +A man/desktop-file-install.1 +A man/desktop-file-validate.1 +A man/update-desktop-database.1 + +commit 90938d0623031b682734646040fcbd655b3a9652 +Author: Vincent Untz <vuntz@gnome.org> +Date: Fri Sep 10 04:22:41 2010 +0200 + + Rework help of all tools + + Some text was reworded, and the options were re-ordered. + +M src/install.c +M src/update-desktop-database.c +M src/validator.c + +commit d6e42384c85fe45b8ac058a1606039046213655d +Author: Vincent Untz <vuntz@gnome.org> +Date: Fri Sep 10 04:20:16 2010 +0200 + + Always output values as lists in the cache from update-desktop-database + + When there was only one desktop file for a mime type, we were not adding + the trailing ;. + +M src/update-desktop-database.c + +commit 2291687ae20368c303f2ca30e50f48d100984f3f +Author: Vincent Untz <vuntz@gnome.org> +Date: Fri Sep 10 03:32:02 2010 +0200 + + If -q and -v are passed to update-desktop-database, ignore -v + +M src/update-desktop-database.c + +commit 7e435f066472891981b826c5bb8f4c7b02319b28 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Sep 8 19:30:17 2010 +0200 + + Add HACKING, update README + +A HACKING +M Makefile.am +M README + +commit 674786e1bab7d5a50f9f36786cdae4afa6232986 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Sep 8 17:52:45 2010 +0200 + + Update license files to latest text + + Note that this doesn't change the license. The license text was updated + for the latest FSF address, for example. + +M COPYING + +commit 0770dc126c528aace2b7471eebed61e346986444 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Sep 8 17:51:59 2010 +0200 + + Rename configure.in to configure.ac + +R100 configure.in configure.ac + +commit 16bf494848cb4dd63abd66f556f39aa702f40bd3 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Sep 8 17:50:56 2010 +0200 + + Remove empty INSTALL + +D INSTALL + +commit 1cb81f449ade2635f06a0c15e0c57aceba6b2429 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Sep 8 17:50:27 2010 +0200 + + Update git.mk from pango + +M git.mk + +commit d6b2465f06951dc26e88122281665e8a4cfd938b +Author: Vincent Untz <vuntz@gnome.org> +Date: Fri Mar 19 19:26:32 2010 +0100 + + Fix typo in comment + +M src/mimeutils.c + +commit b145a2c99d21f26809d9e6140bf7e2aa062b6b02 +Author: Vincent Untz <vuntz@gnome.org> +Date: Fri Mar 19 19:21:28 2010 +0100 + + Make icon names with an extension for Icon key a non-fatal error + + We made this a warning to not annoy everybody, but this is really an + error. Since we now have a mechanism to handle non-fatal error, use it + here. + +M src/validate.c + +commit 35cfa21227e77a80d8ccf1759ce23565fac3960e +Author: Vincent Untz <vuntz@gnome.org> +Date: Fri Mar 19 12:09:43 2010 +0100 + + Accept chemical/* mime types as valid types + + While those mime types are not strictly valid since they were never + accepted by the IANA, they are used by real applications. It's also + well-defined (http://www.ch.ic.ac.uk/chemime/), and used by + real-world applications. + + Thanks to Pascal Terjan <pterjan@mandriva.com> for noticing this. + + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=420795 + +M src/mimeutils.c + +commit 47c06813dcf46f6dad4ba06d9e435ae6f1a649bf +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Mar 10 04:11:44 2010 +0100 + + [release] post-release bump to 0.17 + +M configure.in + +commit aa03ad7936b43a1341828acefc63b4bed9ec7e02 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Mar 10 04:11:16 2010 +0100 + + [release] 0.16 + +M NEWS + +commit 347947381fe6ff56c18415223205aa0b52a02230 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Feb 17 05:08:05 2010 +0100 + + Handle some exceptions to be a bit more flexible + + There are known exceptions like misc/ultravox that we should support. + + We should also recommend to use a valid alias instead of an invalid mime + type (for example, flv-application/octet-stream should be replaced with + video/x-flv). + +M src/mimeutils.c + +commit be3aec1ebb3a335bc757bb4588609ca2c2722e7c +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Feb 17 04:46:44 2010 +0100 + + Make the invalid mime type error non-fatal for now + +M src/validate.c + +commit 847c557baf630adaa03ebb8fbb179bc3dbbeb492 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Feb 17 04:34:59 2010 +0100 + + Fix wrong return value in case of error + + FALSE was used instead of MU_INVALID. + +M src/mimeutils.c + +commit 377e919087cf2711f31cee7c06b40401e4a70fde +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Feb 17 04:34:10 2010 +0100 + + Fix warning for X- media types not showing + +M src/mimeutils.c + +commit 520a9e3bb976b6877ee697ae6f6d0cc5a23b1ba5 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Feb 17 04:32:30 2010 +0100 + + Handle some fdo media types correctly + + inode, x-content and x-directory are used already, and should be + considered as special case (even though they haven't be registered with + IANA). + + Note that x-directory is discouraged, though, since inode/directory + replaces it. + +M src/mimeutils.c + +commit 0a2a429ca2943f7b329d9a90f4950588a56f9f15 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Feb 17 04:07:40 2010 +0100 + + Make some of the new errors non-fatal for now + + Making errors introduced in a release fatal will annoy many people. + They're still marked as errors and will be visible (so fixable), but + they won't make the program return 1, so people can still work. + + They should be marked as fatal after the release. + +M src/validate.c + +commit baf763143043b9be48ef8dc8bf7050f418aa0bb2 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Feb 17 03:38:45 2010 +0100 + + Accept empty Categories key as valid + + It's really like not having the Categories key at all, which is valid. + +M src/validate.c + +commit 06c29d6e1246cc63c9c0296c96ea7885f982f868 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Feb 17 03:35:33 2010 +0100 + + Mark the AutostartCondition key as an Application key + +M src/validate.c + +commit ca41044f3d2311ad4300cdfc864a670e7f772626 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Feb 17 03:29:06 2010 +0100 + + Use g_utf8_strchr instead of strchr to be on the safe side + + Since the string can be UTF-8, it's better to make sure we look for a + character in a UTF-8-compatible way. + +M src/validate.c + +commit 2b51e462ce272dd829dc8f7bb4339b47243ee1c5 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Feb 17 03:28:13 2010 +0100 + + Use G_DIR_SEPARATOR instead of '/' + +M src/validate.c + +commit 31585ac26ff458159b01c6bcfcf1405e164d6448 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Feb 17 03:26:12 2010 +0100 + + Handle AutostartCondition key + + While this never really made it into the autostart specification, it's + in use now. And it was well-received when proposed, so it will probably + enter the specification. + + https://bugs.freedesktop.org/show_bug.cgi?id=20627 + +M src/validate.c + +commit 08892f7b705b8c92aaa9b7a2872e0ded3f96f6d6 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Feb 17 02:42:16 2010 +0100 + + Tweak an error string + +M src/update-desktop-database.c + +commit 681d5173684a8a758d913e52cc704e3dab3d562c +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Feb 17 02:40:50 2010 +0100 + + Improve one string for translation + + This also fix https://bugs.freedesktop.org/show_bug.cgi?id=24924 as a + side-effect. + +M src/update-desktop-database.c + +commit 2ef8bc132a15cb02e5bbb424bc79d4c1c4fad0e0 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Feb 17 02:36:48 2010 +0100 + + Mark all output strings as translatable + +M src/update-desktop-database.c + +commit 25b0d59ab575e434f040face089e6ba83ab0b807 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Feb 17 02:34:06 2010 +0100 + + Consistent use of quotes in error messages + +M src/update-desktop-database.c + +commit 843e5f4cd8680f57add251c745d19ba2db38d05e +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Feb 17 02:29:06 2010 +0100 + + Improve error messages + + Loosely based on patch from Erik Hovland <erik@hovland.org> + + https://bugs.freedesktop.org/show_bug.cgi?id=20039 + +M src/update-desktop-database.c + +commit fdb63c3d0416d8d54747f14f66b635ebf241a852 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Feb 17 02:22:38 2010 +0100 + + Update copyrights, and add vim modelines + +M src/install.c +M src/keyfileutils.c +M src/keyfileutils.h +M src/mimeutils.c +M src/mimeutils.h +M src/update-desktop-database.c +M src/validate.c +M src/validate.h +M src/validator.c + +commit 5bc232624ba230b35d9088abdd001f15ff13055e +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Feb 17 02:04:08 2010 +0100 + + Fix indentation and remove trailing spaces + +M src/install.c +M src/mimeutils.c +M src/update-desktop-database.c +M src/validate.c +M src/validator.c + +commit 7240dff57b6e4fd4e1a03167bab402e69356e3c7 +Author: Vincent Untz <vuntz@gnome.org> +Date: Tue Feb 16 01:14:48 2010 +0100 + + Generate bzip2 tarballs + +M configure.in + +commit abaf456abfecd26c18e4241edb40c177161487c1 +Author: Vincent Untz <vuntz@gnome.org> +Date: Tue Feb 16 01:11:21 2010 +0100 + + Do not try to use versioned binaries of automake/aclocal + + We were trying to use binaries versioned 1.7 which is quite old anyway. + Any real build system will have non-versioned binaries. + +M autogen.sh + +commit 91bce492f1cddea3c43cbf9fbbf136d87d8c9acb +Author: Vincent Untz <vuntz@gnome.org> +Date: Tue Feb 16 01:08:00 2010 +0100 + + Add a DOAP file + +A desktop-file-utils.doap + +commit d7b231ad854a4695e2261d87910b148f80c9af33 +Author: Vincent Untz <vuntz@gnome.org> +Date: Tue Feb 16 01:03:43 2010 +0100 + + Remove .cvsignore files + +D .cvsignore +D misc/.cvsignore +D src/.cvsignore + +commit 4dd06da006711e69de7a76f1ea799e446f95dc78 +Author: Vincent Untz <vuntz@gnome.org> +Date: Tue Feb 16 01:02:04 2010 +0100 + + Put commit message guidelines in ChangeLog + +M ChangeLog +C100 ChangeLog ChangeLog.pre-git + +commit 07a6e2688bfaba6872ca1495fffbd7bbe17022d3 +Author: Vincent Untz <vuntz@gnome.org> +Date: Tue Feb 16 01:01:00 2010 +0100 + + Use git.mk from pango to autogenerate .gitignore files + +M Makefile.am +A git.mk +M misc/Makefile.am +M src/Makefile.am + +commit 1ca85988dec761535699d3cb14ba8a551411a4d6 +Author: Vincent Untz <vuntz@gnome.org> +Date: Tue Jul 21 17:23:23 2009 +0000 + + use AM_SILENT_RULES if available for a quiet build + + 2009-07-21 Vincent Untz <vuntz@gnome.org> + + * configure.in: use AM_SILENT_RULES if available for a quiet build + * configure.in: + * Makefile.am: use the m4 directory as macro dir + +M .cvsignore +M ChangeLog +M Makefile.am +M configure.in + +commit 54e7d80e9dc2042ce0331cf65af2fb85c2960962 +Author: Vincent Untz <vuntz@gnome.org> +Date: Sat Jan 10 17:18:40 2009 +0000 + + add "warning" to the error strings that are output when fixing the desktop + + 2009-01-10 Vincent Untz <vuntz@gnome.org> + + * src/validate.c: (desktop_file_fixup): add "warning" to the error + strings that are output when fixing the desktop file so that people can + learn about the errors and directly fix them. + Fix bug #18206. + +M ChangeLog +M src/validate.c + +commit db8e1039fbd4e9e9e23273bb49ea9922dd8d595c +Author: Vincent Untz <vuntz@gnome.org> +Date: Sat Jan 10 12:05:31 2009 +0000 + + add LXDE in the list of registered OnlyShowIn values. + + 2009-01-10 Vincent Untz <vuntz@gnome.org> + + * src/validate.c: add LXDE in the list of registered OnlyShowIn values. + +M ChangeLog +M src/validate.c + +commit b8f66b528a0d6b5c64140304f39b50a01497e846 +Author: Vincent Untz <vuntz@gnome.org> +Date: Wed Dec 10 04:43:31 2008 +0000 + + fix warning in a comment + + 2008-12-10 Vincent Untz <vuntz@gnome.org> + + * src/mimeutils.c: fix warning in a comment + +M ChangeLog +M src/mimeutils.c + +commit 8fa7b28e36a81d74b671339bbbdde11a6ded2c98 +Author: Vincent Untz <vuntz@gnome.org> +Date: Sun Apr 27 23:42:27 2008 +0000 + + Be stricter for the MIME type check. It's actually a bit too strict right + + 2008-04-28 Vincent Untz <vuntz@gnome.org> + + Be stricter for the MIME type check. It's actually a bit too strict + right now, see the TODO at the beginning of mimeutils.c to know how to + improve things a bit. + + * src/Makefile.am: + * src/mimeutils.[ch]: add new files + * src/update-desktop-database.c: (process_desktop_file): use the + improved mu_mime_type_is_valid() function instead of + is_valid_mime_type() + * src/validate.c: (handle_mime_key): use the improved + mu_mime_type_is_valid() function instead of a trivial check + +M ChangeLog +M src/Makefile.am +A src/mimeutils.c +A src/mimeutils.h +M src/update-desktop-database.c +M src/validate.c + +commit 3425eaf5d0e55c4e1c853f6af6e846c7763ba48a +Author: Vincent Untz <vuntz@gnome.org> +Date: Sat Apr 26 17:51:30 2008 +0000 + + check that the Comment does not look like the Name of the GenericName + + 2008-04-26 Vincent Untz <vuntz@gnome.org> + + * src/validate.c: (handle_comment_key): check that the Comment does not + look like the Name of the GenericName + (validate_keys_for_current_group): instead of storing only the + information that a group contain a key, also link to the content of the + key. Also report the error of multiple keys with the same name the + first time we have a key (instead of the second time). + Plug a small leak. + +M ChangeLog +M src/validate.c + +commit 834fdc1f65043704962dcf26b9aa5194338eec91 +Author: Vincent Untz <vuntz@gnome.org> +Date: Sat Apr 26 14:27:02 2008 +0000 + + make a few more structure static, change the way we store data about the + + 2008-04-26 Vincent Untz <vuntz@gnome.org> + + * src/validate.c: make a few more structure static, change the way we + store data about the know catgories so that we have more information + (like dependencies) + (handle_categories_key): updated for the previous change. We now + additionally check that categories required by another one are present. + Fix bug #15672. + * src/validator.c: init warn_kde to FALSE. Fix the "warnings about KDE + specific uses are always shown" bug. + +M ChangeLog +M src/validate.c +M src/validator.c + +commit b2c108e4782a25545aa57c9d8add5c4ab01801cc +Author: Vincent Untz <vuntz@gnome.org> +Date: Sat Apr 26 10:34:22 2008 +0000 + + at least one main category must be included in the Categories. Output an + + 2008-04-26 Vincent Untz <vuntz@gnome.org> + + * src/validate.c: (handle_categories_key): at least one main category + must be included in the Categories. Output an error if it's not the + case. + +M ChangeLog +M src/validate.c + +commit 83e6050a2501379a7709379e9dfdf656738a7148 +Author: Vincent Untz <vuntz@gnome.org> +Date: Thu Mar 6 15:26:13 2008 +0000 + + don't unlink the destination file if it's the same as the source file in + + 2008-03-06 Vincent Untz <vuntz@gnome.org> + + * src/install.c: (process_one_file): don't unlink the destination file + if it's the same as the source file in case of errors. + Fix bug #14851. + +M ChangeLog +M src/install.c + +commit 32ee3cdb6fa4a19fb3c42943fe9d2040560a2232 +Author: Vincent Untz <vuntz@gnome.org> +Date: Mon Feb 11 19:19:14 2008 +0000 + + post-release bump to 0.16 + + 2008-02-11 Vincent Untz <vuntz@gnome.org> + + * configure.in: post-release bump to 0.16 + +M ChangeLog +M configure.in + +commit 173011c1a206d83d8a1e7b4032ba68c49a440b52 +Author: Vincent Untz <vuntz@gnome.org> +Date: Mon Feb 11 19:17:53 2008 +0000 + + version 0.15 + + 2008-02-11 Vincent Untz <vuntz@gnome.org> + + * NEWS: version 0.15 + +M ChangeLog +M NEWS + +commit 19efaabf2b610205b1e93489e3084e3d62bc54b7 +Author: Vincent Untz <vuntz@gnome.org> +Date: Tue Feb 5 12:09:49 2008 +0000 + + Fix crash with really small lines that are invalid, like just "a". Fox bug + + 2008-02-05 Vincent Untz <vuntz@gnome.org> + + Fix crash with really small lines that are invalid, like just "a". + Fox bug #14386. + + * src/validate.c: (validate_line_looks_like_group): only return + something in *group if the group argument is not NULL, and if the line + is actually a group one + (validate_parse_line): ensure we pass NULL initial values to some + functions, and don't leak key and value when processing a key-value + line before the first group + +M ChangeLog +M src/validate.c + +commit b4fa107d134594bd02cce266be09cd68de0a9d3d +Author: Vincent Untz <vuntz@gnome.org> +Date: Sun Jan 20 19:33:17 2008 +0000 + + don't get the MimeType key from the first start group (which might not + + 2008-01-20 Vincent Untz <vuntz@gnome.org> + + * src/update-desktop-database.c: (process_desktop_file): don't get the + MimeType key from the first start group (which might not exist), but + from the Desktop Entry group + Fix GNOME bug #509526. + * src/validate.c: (handle_icon_key): mention that Ray's change is + temporary + +M ChangeLog +M src/update-desktop-database.c +M src/validate.c + +commit c6b970d37acd2882adb538e9d1723ed661d0ca94 +Author: Ray Strode <rstrode@redhat.com> +Date: Fri Dec 14 14:39:31 2007 +0000 + + Consider icon names with extensions a warning and not an error for now. + + 2006-11-07 Ray Strode <rstrode@redhat.com> + + * src/validate.c: Consider icon names with extensions a + warning and not an error for now. + +M ChangeLog +M src/validate.c + +commit b589d7e7d731ecb948c8e91077110c9e09707276 +Author: Vincent Untz <vuntz@gnome.org> +Date: Sat Sep 1 14:50:20 2007 +0000 + + post-release bump to 0.15 + + 2007-09-01 Vincent Untz <vuntz@gnome.org> + + * configure.in: post-release bump to 0.15 + +M ChangeLog +M configure.in + +commit a09004c7102dfda947fb48078e749a81373f147e +Author: Vincent Untz <vuntz@gnome.org> +Date: Sat Sep 1 14:48:59 2007 +0000 + + version 0.14 + + 2007-09-01 Vincent Untz <vuntz@gnome.org> + + * NEWS: version 0.14 + +M ChangeLog +M NEWS + +commit 4c0877d7e6d832754064d6613eed69edbd5626e4 +Author: Vincent Untz <vuntz@gnome.org> +Date: Sat Sep 1 14:40:08 2007 +0000 + + small improvements + + 2007-09-01 Vincent Untz <vuntz@gnome.org> + + * README: small improvements + +M ChangeLog +M README + +commit e08e4ea54ab1c90475f4a52bee98e234e7c79d1a +Author: Vincent Untz <vuntz@gnome.org> +Date: Sat Sep 1 14:29:28 2007 +0000 + + validate the desktop file after modifying its content, but before doing + + 2007-09-01 Vincent Untz <vuntz@gnome.org> + + * src/install.c: (process_one_file): validate the desktop file after + modifying its content, but before doing anything else, so that we + don't unlink the original file if the created one is not valid. + Also, unlink the created file if it's not valid. + +M ChangeLog +M src/install.c + +commit c7d783c84eec8d07049ab01988e4da43559ce80f +Author: Vincent Untz <vuntz@gnome.org> +Date: Sat Sep 1 14:25:55 2007 +0000 + + Don't exit(), but let the main() function do it with a proper error + + 2007-09-01 Vincent Untz <vuntz@gnome.org> + + Don't exit(), but let the main() function do it with a proper error + message. + + * src/install.c: (files_are_the_same): it's useless to exit() here if + we can't stat() the files. Just continue the operations without + removing the original file, that's the best option. + (process_one_file): don't exit(), but set the GError + +M ChangeLog +M src/install.c + +commit 740682d75b9ea0cb2934b26f4730c0171f497cb6 +Author: Vincent Untz <vuntz@gnome.org> +Date: Sat Sep 1 14:10:27 2007 +0000 + + require glib 2.8.0 kill (main): directly use g_mkdir_with_parents() + + 2007-09-01 Vincent Untz <vuntz@gnome.org> + + * configure.in: require glib 2.8.0 + * src/install.c: (mkdir_and_parents): kill + (main): directly use g_mkdir_with_parents() + +M ChangeLog +M configure.in +M src/install.c + +commit 5acb0c711dff9406bffdeb62427b3be004cc14f9 +Author: Vincent Untz <vuntz@gnome.org> +Date: Sat Sep 1 14:07:50 2007 +0000 + + simplify the code with a macro (parse_options_callback): if + + 2007-09-01 Vincent Untz <vuntz@gnome.org> + + * src/install.c: (process_one_file): simplify the code with a macro + (parse_options_callback): if --add-category="GNOME;GTK" is passed as + argument, parse the list of categories instead of assuming the user + only gave one category. + Fix bug #12207. + +M ChangeLog +M src/install.c + +commit 532f7f7e30d54bf87f93ffa66dd503b8bff70e0c +Author: Vincent Untz <vuntz@gnome.org> +Date: Sat Aug 18 08:37:15 2007 +0000 + + handle -m too. Fix bug #12018. Patch by Matthias Clasen + + 2007-08-18 Vincent Untz <vuntz@gnome.org> + + * src/install.c: (parse_options_callback): handle -m too. + Fix bug #12018. + Patch by Matthias Clasen <mclasen@redhat.com> + +M ChangeLog +M src/install.c + +commit cf94986afb2eeb2ff0294e4448980f4030880a9e +Author: Vincent Untz <vuntz@gnome.org> +Date: Sat Aug 18 08:33:34 2007 +0000 + + Handle X-Foo in environments. Based on patch by Stanislav Brabec + + 2007-08-18 Vincent Untz <vuntz@gnome.org> + + Handle X-Foo in environments. + Based on patch by Stanislav Brabec <sbrabec@suse.cz>. + Fix bug #11565. + + * src/validate.c: (handle_show_in_key): handle "X-Foo" and change the + error message to mention X- + (handle_categories_key): change a bit the error message to mention X- + +M ChangeLog +M src/validate.c + +commit 9dec6ec674c88c9a8a6ab4aa9e71e3d9075faf22 +Author: Vincent Untz <vuntz@gnome.org> +Date: Fri Jul 27 16:24:53 2007 +0000 + + new, checks that the value is either an absolute path to a file, or that + + 2007-07-27 Vincent Untz <vuntz@gnome.org> + + * src/validate.c: (handle_icon_key): new, checks that the value is + either an absolute path to a file, or that the value looks like an + icon name without an extension (png, xpm or svg). Rejects relative + pathes too. + +M ChangeLog +M src/validate.c + +commit 5052214fbc3702cbd9aa6911890b8bd155674fbd +Author: Vincent Untz <vuntz@gnome.org> +Date: Sun Jul 8 21:39:57 2007 +0000 + + pass the GError to g_key_file_load_from_file(), so we know when we can't + + 2007-07-08 Vincent Untz <vuntz@gnome.org> + + * src/install.c: (process_one_file): pass the GError to + g_key_file_load_from_file(), so we know when we can't load a file and + print an error about this. Fix bug #11500. + +M ChangeLog +M src/install.c + +commit 0d4df0787ab377628575e5eff01bb16bc46300e3 +Author: Vincent Untz <vuntz@gnome.org> +Date: Sat Jun 30 12:53:33 2007 +0000 + + updated to desktop entry spec 1.0. Patch by Ville Skyttä + + 2007-06-30 Vincent Untz <vuntz@gnome.org> + + * misc/desktop-entry-mode.el: updated to desktop entry spec 1.0. + Patch by Ville Skyttä <ville.skytta@iki.fi> + +M ChangeLog +M misc/desktop-entry-mode.el + +commit 352e54d67ec2c156800a771e1f42e2a48f873776 +Author: Vincent Untz <vuntz@gnome.org> +Date: Mon Jun 4 22:38:06 2007 +0000 + + post-release bump to 0.14 + + 2007-06-05 Vincent Untz <vuntz@gnome.org> + + * configure.in: post-release bump to 0.14 + +M ChangeLog +M configure.in + +commit 4687bbc89ea9a3f01fa47452aaa4c3d825aab5e5 +Author: Vincent Untz <vuntz@gnome.org> +Date: Mon Jun 4 22:36:11 2007 +0000 + + version 0.13 + + 2007-06-05 Vincent Untz <vuntz@gnome.org> + + * NEWS: version 0.13 + +M ChangeLog +M NEWS + +commit c8e0949e5b24de6f343ed302c59be06116f5a14e +Author: Vincent Untz <vuntz@gnome.org> +Date: Mon Jun 4 22:27:48 2007 +0000 + + add myself update URL of the desktop entry spec + + 2007-06-05 Vincent Untz <vuntz@gnome.org> + + * AUTHORS: add myself + * src/validator.c: (main): update URL of the desktop entry spec + +M AUTHORS +M ChangeLog +M src/validator.c + +commit 80a1c932b9e90caaf75857a3dd8ebfcd77fa93a5 +Author: Vincent Untz <vuntz@gnome.org> +Date: Mon Jun 4 17:39:52 2007 +0000 + + check if we have a vendor name before using it (main): fix bug when no + + 2007-06-04 Vincent Untz <vuntz@gnome.org> + + * src/install.c: (process_one_file): check if we have a vendor name + before using it + (main): fix bug when no vendor name or target dir is specified (we'd + use an empty string in this case), don't require vendor name + Fix bug #9988 + +M ChangeLog +M src/install.c + +commit 14f6fe3f1eb4699d5020e2b4ea729419b898abc2 +Author: Vincent Untz <vuntz@gnome.org> +Date: Mon Jun 4 17:24:51 2007 +0000 + + Don't use GKeyFile in the validator, so we really control everything. + + 2007-06-04 Vincent Untz <vuntz@gnome.org> + + Don't use GKeyFile in the validator, so we really control everything. + + * src/validate.c: remove some FIXME/TODO + (validate_string_key): use g_ascii_iscntrl() instead of + !g_ascii_isprint(), small update for the current group + (validate_localestring_key): small update for the current group, don't + use GKeyFile + (validate_boolean_key): small update for the current group + (validate_numeric_key): ditto + (validate_string_regexp_list_key): use g_ascii_iscntrl() instead of + !g_ascii_isprint(), small update for the current group + (handle_type_key): small update for the current group + (handle_version_key): ditto + (handle_show_in_key): ditto + (handle_exec_key): ditto + (handle_path_key): ditto + (handle_mime_key): ditto + (handle_categories_key): small update for the current group, don't + use GKeyFile + (handle_actions_key): ditto + (handle_dev_key): ditto + (handle_mountpoint_key): ditto + (handle_encoding_key): ditto + (validate_desktop_key): ditto, the value is an argument now + (validate_keys_for_current_group): renamed from + validate_keys_for_group(), small update for the current group, don't + use GKeyFile and build a hashtable of all the keys in the current + group, also don't validate the key for Desktop Entry groups if the + name of the key couldn't be validated since this means we'll get + another error + (validate_group_name): use g_ascii_iscntrl() instead of + !g_ascii_isprint() + (validate_groups_and_keys): killed + (validate_required_keys): don't use GKeyFile + (validate_line_is_comment): new + (validate_line_looks_like_group): new + (validate_line_looks_like_entry): new + (validate_parse_line): new + (validate_parse_data): new (inspired from gkeyfile.c) + (validate_flush_parse_buffer): new (inspired from gkeyfile.c) + (validate_parse_from_fd): new (inspired from gkeyfile.c) + (validate_load_and_parse): new (inspired from gkeyfile.c) + (groups_hashtable_free): new + (desktop_file_validate): updated + (desktop_file_fixup): small update to avoid confusion + * src/validator.c: (main): fix leak + +M ChangeLog +M src/validate.c +M src/validator.c + +commit 4aab76b0fb470a1fcda17a6458ce210d44548478 +Author: Vincent Untz <vuntz@gnome.org> +Date: Thu Mar 15 22:14:06 2007 +0000 + + remove mention of desktop-menu-tool kill, was useless and deprecated + + 2007-03-15 Vincent Untz <vuntz@gnome.org> + + * README: remove mention of desktop-menu-tool + * acconfig.h: kill, was useless and deprecated + + * src/eggintl.h: kill, was useless since quite some time + + * autogen.sh: + * configure.in: updated because of src/desktop_file.h removal + + * src/Makefile.am: updated for file removals/additions + * src/desktop_file.[ch]: removed. We don't use this anymore (it was + based on GnomeDesktopItem which nobody maintains and is too complex + for what we need) + * keyfileutils.[ch]: new, contains some useful functions based on + GKeyFile + * src/install.c: updated for changes (GnomeDesktopFile -> GKeyFile) + (process_one_file): ditto + also, improves a bit the --help output + * src/validate.[ch]: pretty much a rewrite. This is based on GKeyFile + for now, but it'll be moved to a small parser soon, so we are not + limited because of the GKeyFile parser. The validator verifies more + things, warns about usage of deprecated stuff, and contains some other + nice improvements. It probably contains some bugs, though. + * src/validator.c: updated (well, rewritten, since it's only the + main() function). We also now have some command line arguments: + --warn-kde to warn about usage of KDE reserved stuff + --no-warn-deprecated to not warn about usage of deprecated stuff + +M ChangeLog +M README +D acconfig.h +M autogen.sh +M configure.in +M src/Makefile.am +D src/desktop_file.c +D src/desktop_file.h +D src/eggintl.h +M src/install.c +A src/keyfileutils.c +A src/keyfileutils.h +M src/validate.c +M src/validate.h +M src/validator.c + +commit 818536c358d110f695c68566a23d393a19d71904 +Author: Ray Strode <rstrode@redhat.com> +Date: Wed Nov 8 20:02:58 2006 +0000 + + post-release bump to 0.13. + + 2006-11-08 Ray Strode <rstrode@redhat.com> + + * configure.in: post-release bump to 0.13. + +M ChangeLog +M configure.in + +commit 521e2e104b12fa993083b97ebb26602a00030af9 +Author: Ray Strode <rstrode@redhat.com> +Date: Wed Nov 8 19:43:42 2006 +0000 + + update news file + + 2006-11-08 Ray Strode <rstrode@redhat.com> + + * NEWS: update news file + +M ChangeLog +M NEWS + +commit 5424a4d0ea07609d863c29db01f59aab16352272 +Author: Ray Strode <rstrode@redhat.com> +Date: Tue Nov 7 17:23:10 2006 +0000 + + If a desktop file contains "Applications" instead of "Application" make + + 2006-11-07 Ray Strode <rstrode@redhat.com> + + * src/validate.c: If a desktop file contains + "Applications" instead of "Application" make the warning + reflect that. + +M ChangeLog +M src/validate.c + +commit 46a49431585b61d3190cd19e7b16c6ff1179485b +Author: Ray Strode <rstrode@redhat.com> +Date: Tue Nov 7 17:21:13 2006 +0000 + + Print a warning instead of an error if categories aren't defined by the + + 2006-11-07 Ray Strode <rstrode@redhat.com> + + * src/validate.c: Print a warning instead of an error + if categories aren't defined by the spec. Give special + handling to the "Application" category since it's not + defined by the spec, but is in wide use, and can be + translated to one of the "main categories". (gnome bug + 343799 comment 8) + +M ChangeLog +M src/validate.c + +commit 56dc8a2254fbaa8c7688594f59f841e444263208 +Author: Ray Strode <rstrode@redhat.com> +Date: Tue Nov 7 16:40:47 2006 +0000 + + Validate keywords as localestrings instead of strings (red hat bug + + 2006-11-07 Ray Strode <rstrode@redhat.com> + + * src/validate.c: Validate keywords as localestrings + instead of strings (red hat bug 172423). Patch from + Ville Skyttä <ville.skytta@iki.fi> + +M ChangeLog +M src/validate.c + +commit 0d12a284aa29366c367ae9f7baea154b0350b177 +Author: Ray Strode <rstrode@redhat.com> +Date: Tue Nov 7 16:18:07 2006 +0000 + + update categories to match the latest version of the desktop menu + + 2006-11-07 Ray Strode <rstrode@redhat.com> + + * src/validate.c: update categories + to match the latest version of the desktop menu + specification, and reorder to make it easier to resync + in the future. Patch from + Ville Skyttä <ville.skytta@iki.fi> (red hat bug 212705) + +M ChangeLog +M src/validate.c + +commit a594d4d44a10cec75bbc298303490e1bb51827b8 +Author: Ray Strode <rstrode@redhat.com> +Date: Tue Nov 7 16:13:38 2006 +0000 + + apply fixes from Ville Skyttä <ville.skytta@iki.fi> to match the latest + + 2006-11-07 Ray Strode <rstrode@redhat.com> + + * misc/desktop-entry-mode.el: apply fixes + from Ville Skyttä <ville.skytta@iki.fi> to match the + latest version of the spec + +M ChangeLog +M misc/desktop-entry-mode.el + +commit d983e48807739779c09eb1bf2a336d891176839c +Author: Ray Strode <rstrode@redhat.com> +Date: Mon Nov 6 16:51:28 2006 +0000 + + fix a couple of mem leaks. Patch from Pascal Terjan (gnoem bug 345686) + + 2006-11-06 Ray Strode <rstrode@redhat.com> + + * src/desktop_file.c: + fix a couple of mem leaks. Patch from Pascal Terjan + (gnoem bug 345686) + +M ChangeLog +M src/desktop_file.c + +commit 0f0075ce04abe3a56c87e0eeb8384e994de06c7d +Author: Ray Strode <rstrode@redhat.com> +Date: Mon Nov 6 16:49:15 2006 +0000 + + move g_free inside if branch to prevent a double free in the else case. + + 2006-11-06 Ray Strode <rstrode@redhat.com> + + * src/desktop_file.c: + move g_free inside if branch to prevent a double free in + the else case. Patch from Pascal Terjan (gnome bug + 345309) + +M ChangeLog +M src/desktop_file.c + +commit 5c9975bd94829b98b403139be12fc976803c9fb3 +Author: Ray Strode <rstrode@redhat.com> +Date: Mon Nov 6 16:44:48 2006 +0000 + + fix category typos: TeminalEmulator -> TerminalEmulator ScreenSaver -> + + 2006-11-06 Ray Strode <rstrode@redhat.com> + + * src/validate.c: fix category typos: + TeminalEmulator -> TerminalEmulator + ScreenSaver -> Screensaver + spotted by Vincent Fretin (in gnome bug + 342799) + +M ChangeLog +M src/validate.c + +commit 65c2b4aa37ea0b17b834cbad32103e61c7a0e43f +Author: Ray Strode <rstrode@redhat.com> +Date: Mon Nov 6 16:42:54 2006 +0000 + + add patch from Vincent Untz to not validate categories that start with X- + + 2006-11-06 Ray Strode <rstrode@redhat.com> + + * src/validate.c: add patch from Vincent Untz to + not validate categories that start with X- + (gnome bug 343799) + +M ChangeLog +M src/validate.c + +commit 2b2c0821053619399b11fd8edbaf3d85ad531289 +Author: Ray Strode <rstrode@redhat.com> +Date: Wed Jul 26 03:57:46 2006 +0000 + + remove from cvs + + 2006-07-25 Ray Strode <rstrode@redhat.com> + + * src/egg*: remove from cvs + +M ChangeLog +D src/eggdesktopentries.c +D src/eggdesktopentries.h +D src/eggdirfuncs.c +D src/eggdirfuncs.h + +commit 6332730f526dd007e233cdc15a982ac9d1532b12 +Author: Ray Strode <rstrode@redhat.com> +Date: Tue Apr 18 22:36:23 2006 +0000 + + post-release bump to 0.12. + + 2006-04-18 Ray Strode <rstrode@redhat.com> + + * configure.in: post-release bump to 0.12. + +M ChangeLog +M configure.in + +commit 035b15e8e1f0e4f8ee42fa5f6b86f7b96cdf9e2c +Author: Ray Strode <rstrode@redhat.com> +Date: Tue Apr 18 22:19:38 2006 +0000 + + ==================== 0.11 ==================== + +M ChangeLog +M NEWS + +commit a41d9e0323054501356beccde6321268372eb237 +Author: Ray Strode <rstrode@redhat.com> +Date: Tue Apr 18 22:08:10 2006 +0000 + + Validate that desktop file categories match those specified in the spec. + + 2006-04-18 Ray Strode <rstrode@redhat.com> + + Validate that desktop file categories match those + specified in the spec. Patch from Emmet Hikory + <emmet.hikory@gmail.com> and + Vincent Untz <vuntz@gnome.org> (bug 3337786) + + * src/validate.c (validate_categories): new + function to ensure that categories are known. + + 2006-04-18 Vincent Untz <vuntz@gnome.org> + + Use GKeyFile instead and kill egg-* usage (bug 319987). + + * src/Makefile.am: remove egg-* + * src/update-desktop-database.c: (process_desktop_file): use GKeyFile + (get_default_search_path): use g_get_system_data_dirs() + + 2006-04-18 Vincent Untz <vuntz@gnome.org> + + Port to GOption (bug 338575) + + * configure.in: remove the check for popt, depend on glib >= 2.6.0 + * src/install.c: (parse_options_callback): rewritten + (main): port to GOption + * src/update-desktop-database.c: (sync_database): remove warning + (main): port to GOption + +M ChangeLog +M configure.in +M src/Makefile.am +M src/install.c +M src/update-desktop-database.c +M src/validate.c + +commit e0d6b8a0dd16fed932d287990b44261c5fe087eb +Author: Ray Strode <rstrode@redhat.com> +Date: Wed Aug 31 20:14:28 2005 +0000 + + resync from libegg to fix grammar error spotted by Moritz Barsnick + + 2005-08-31 Ray Strode <rstrode@redhat.com> + + * src/eggdesktopentries.[ch]: + resync from libegg to fix grammar error spotted by + Moritz Barsnick <moritz@barsnick.net>. (this code + should really be changed to use gkeyfile) + +M ChangeLog +M src/eggdesktopentries.c + +commit b3ccf461e7a547f9404e58be5a9bcdfcd405de0c +Author: Ray Strode <rstrode@redhat.com> +Date: Mon Jan 10 00:43:48 2005 +0000 + + NULL terminate default search path. Spotted by Mike Hearn <mike@navi.cx> + + 2005-01-09 Ray Strode <rstrode@redhat.com> + + * src/update-desktop-database.c: + NULL terminate default search path. Spotted by + Mike Hearn <mike@navi.cx> + +M ChangeLog +M src/update-desktop-database.c + +commit 14f79f1ee66203e4b67080f7e1436cb751c5b22a +Author: Mark McLoughlin <mark@skynet.ie> +Date: Tue Nov 23 14:01:59 2004 +0000 + + Patch from Ville Skyttä <ville.skytta@iki.fi> + + 2004-11-23 Mark McLoughlin <mark@skynet.ie> + + Patch from Ville Skyttä <ville.skytta@iki.fi> + + * src/desktop_file.c: fix the lang -> encoding mapping + to what the Desktop Entry Specification specifies. + +M .cvsignore +M ChangeLog +M src/desktop_file.c + +commit 43b3a2940c5c8d2a6141610b640a977e254f06c8 +Author: Mark McLoughlin <mark@skynet.ie> +Date: Thu Nov 11 15:17:42 2004 +0000 + + post-release bump to 0.11. + + 2004-11-11 Mark McLoughlin <mark@skynet.ie> + + * configure.in: post-release bump to 0.11. + +M ChangeLog +M configure.in + +commit 779a20fdeedc000b49e84a7fa4da4f654509427a +Author: Mark McLoughlin <mark@skynet.ie> +Date: Thu Nov 11 15:16:28 2004 +0000 + + Version 0.10. + + 2004-11-11 Mark McLoughlin <mark@skynet.ie> + + * configure.in: Version 0.10. + +M ChangeLog +M NEWS + +commit 86c5304b82f5027dc242cfd19072800bfba8300d +Author: Mark McLoughlin <mark@skynet.ie> +Date: Thu Nov 11 15:09:12 2004 +0000 + + update + +M src/.cvsignore + +commit a6177c3e65189ecc5cd22c8d6e1f0a2c183b6b6b +Author: Mark McLoughlin <mark@skynet.ie> +Date: Thu Nov 11 15:08:41 2004 +0000 + + fix uninitialized variable. + + 2004-11-11 Mark McLoughlin <mark@skynet.ie> + + * src/desktop_file.c: (gnome_desktop_file_remove_string_from_list): + fix uninitialized variable. + + * configure.in: modernize a bit, don't check for gnome-vfs, + remove --enable-tests etc. + + * src/Makefile.am: remove a bunch of stuff. + + * src/canonicalize.[ch], + src/dfu-test.[ch], + src/gen-compat-tree.c, + src/gen_table.py, + src/menu-entries.[ch], + src/menu-layout.[ch], + src/menu-method.c, + src/menu-modules.conf, + src/menu-monitor.[ch], + src/menu-overrides.[ch], + src/menu-parser.[ch], + src/menu-process.[ch], + src/menu-tree-cache.[ch], + src/menu-util.[ch], + src/menu.h, + src/vfolder-parser.[ch], + src/vfolder-query.[ch]: remove all this menu stuff. Its now + in GNOME itself. + + * test/*: remove empty dir; + + * Makefile.am: don't build tests dir. + +M ChangeLog +M Makefile.am +M configure.in +M src/Makefile.am +D src/canonicalize.c +D src/canonicalize.h +M src/desktop_file.c +D src/dfu-test.c +D src/dfu-test.h +D src/gen-compat-tree.c +D src/gen_table.py +D src/menu-entries.c +D src/menu-entries.h +D src/menu-layout.c +D src/menu-layout.h +D src/menu-method.c +D src/menu-modules.conf +D src/menu-monitor.c +D src/menu-monitor.h +D src/menu-overrides.c +D src/menu-overrides.h +D src/menu-parser.c +D src/menu-parser.h +D src/menu-process.c +D src/menu-process.h +D src/menu-tree-cache.c +D src/menu-tree-cache.h +D src/menu-util.c +D src/menu-util.h +D src/menu.h +D src/vfolder-parser.c +D src/vfolder-parser.h +D src/vfolder-query.c +D src/vfolder-query.h +D test/.cvsignore +D test/Makefile.am + +commit 5a3d85fd005d8c0e5b4be07e66eee904bf29a31a +Author: Ray Strode <rstrode@redhat.com> +Date: Mon Oct 18 16:02:46 2004 +0000 + + Error out if trying to add key-value pair to comment group (Patch from + + 2004-10-18 Ray Strode <rstrode@redhat.com> + + * src/eggdesktopentries.c: + (egg_desktop_entries_parse_entry): + Error out if trying to add key-value pair to comment + group (Patch from Miloslav Trmac <mitr@redhat.com>) + +M ChangeLog +M src/eggdesktopentries.c + +commit 1906d103c6894063d1c716b15db9cbfafe292e98 +Author: Mark McLoughlin <mark@skynet.ie> +Date: Tue Sep 28 11:42:15 2004 +0000 + + post-release bump to 0.10. + + 2004-09-28 Mark McLoughlin <mark@skynet.ie> + + * configure.in: post-release bump to 0.10. + +M ChangeLog +M configure.in + +commit 5cc73be19b4ac76b26b8107f0cabdff8af3914e0 +Author: Mark McLoughlin <mark@skynet.ie> +Date: Tue Sep 28 11:37:17 2004 +0000 + + Version 0.9. + + 2004-09-28 Mark McLoughlin <mark@skynet.ie> + + * configure.in: Version 0.9. + +M ChangeLog +M NEWS + +commit de080d604ddacd47c63fc05083db909197c4a0b8 +Author: Ray Strode <rstrode@redhat.com> +Date: Tue Sep 28 03:43:14 2004 +0000 + + Don't put the if clause where the else clause should go and vice versa + + 2004-09-27 Ray Strode <rstrode@redhat.com> + + * src/eggdesktopentries + (egg_desktop_entries_get_locale_encoding): + Don't put the if clause where the else clause should + go and vice versa (Spotted by Nicholas Miell, + http://bugzilla.gnome.org/show_bug.cgi?id=153759) + +M ChangeLog +M src/eggdesktopentries.c + +commit 3bb75ce0253afb5f6bf95f786f8207ed09381a8e +Author: Ray Strode <rstrode@redhat.com> +Date: Mon Sep 27 15:43:25 2004 +0000 + + Bounds check before doing array assignment + + 2004-09-29 Ray Strode <rstrode@redhat.com> + + * src/desktop_file.c: + (gnome_desktop_file_remove_string_from_list): + Bounds check before doing array assignment + + * src/eggdesktopentries + (egg_desktop_entries_get_locale_country): + Don't put the if clause where the else clause should + go and vice versa (Spotted by Nicholas Miell, + http://bugzilla.gnome.org/show_bug.cgi?id=153759) + +M ChangeLog +M src/desktop_file.c +M src/eggdesktopentries.c + +commit d9f9ac33c979755c887a1b3c8b63b4926c641ce1 +Author: Ray Strode <rstrode@redhat.com> +Date: Thu Sep 23 19:21:34 2004 +0000 + + Fix --remove-show-in option + + 2004-09-23 Ray Strode <rstrode@redhat.com> + + * src/desktop_file.c: + (gnome_desktop_file_remove_string_from_list): + Fix --remove-show-in option + +M ChangeLog +M src/desktop_file.c + +commit a9ba8ec24628ca86e6e138e4ca1b371f0ced7710 +Author: Dan Williams <dcbw@redhat.com> +Date: Mon Sep 13 15:26:51 2004 +0000 + + Don't try to dispose of 'entries' if it's NULL, since then + + 2004-09-13 Dan Williams <dcbw@redhat.com> + + * src/eggdesktopentreis.c: + (egg_desktop_entries_new_from_file): Don't try to + dispose of 'entries' if it's NULL, since then + egg_desktop_entries_free() prints out failure + messages. + +M ChangeLog +M src/eggdesktopentries.c + +commit fda9ed5ca911030991e03b7cf7fc761056c1d154 +Author: Ray Strode <rstrode@redhat.com> +Date: Wed Sep 8 15:43:14 2004 +0000 + + New macros for printing at various verbosity levels (is_valid_mime_type): + + 2004-09-08 Ray Strode <rstrode@redhat.com> + + * src/update-desktop-database.c: + (udd_print), (udd_verbose_print): + New macros for printing at various verbosity levels + (is_valid_mime_type): give better error messages + (process_desktop_files): print unparsable desktop + files by default without verbose mode. Inform user + of desktop files that lack mime type keys in verbose + mode. + (open_temp_cache_file): change file mode of temp + file to reflect user's umask. + (print_desktop_dirs), + (main): use new udd_verbose_print macro + +M ChangeLog +M src/update-desktop-database.c + +commit 4e7026a15d22bd5af7184b2bf737ceb57c85f7a5 +Author: Ray Strode <rstrode@redhat.com> +Date: Fri Sep 3 16:13:34 2004 +0000 + + sync with libegg + + 2004-09-03 Ray Strode <rstrode@redhat.com> + + * src/egg*.[ch]: sync with libegg + +M ChangeLog +M src/eggdesktopentries.c +M src/update-desktop-database.c + +commit 44faedeccad07671e2f21e756a744966aadc1fbe +Author: Mark McLoughlin <mark@skynet.ie> +Date: Fri Sep 3 14:35:31 2004 +0000 + + forgotten news for 0.8 + +M NEWS + +commit 6f6ec0efffeba7cca274e8f1400cdafa11c6a638 +Author: Mark McLoughlin <mark@skynet.ie> +Date: Fri Sep 3 14:27:46 2004 +0000 + + post-release bump to 0.9. + + 2004-09-03 Mark McLoughlin <mark@skynet.ie> + + * configure.in: post-release bump to 0.9. + +M ChangeLog +M configure.in + +commit ab6d4f29f7aae1d2e537bfb01afe2842f7b0b702 +Author: Mark McLoughlin <mark@skynet.ie> +Date: Fri Sep 3 14:26:38 2004 +0000 + + Version 0.8. + + 2004-09-03 Mark McLoughlin <mark@skynet.ie> + + * configure.in: Version 0.8. + +M ChangeLog + +commit 3fd76a0061e1dca888d045a63424a71edaa3dfb0 +Author: Mark McLoughlin <mark@skynet.ie> +Date: Thu Sep 2 22:22:16 2004 +0000 + + Fixes empty subdirs not getting removed. + + 2004-09-02 Mark McLoughlin <mark@skynet.ie> + + Fixes empty subdirs not getting removed. + + * src/menu-process.c: (process_only_unallocated): check whether + the subdir has no entries, not this dir. + +M ChangeLog +M src/menu-process.c + +commit 04926109349b90b66863cc522d27aab126049e17 +Author: Mark McLoughlin <mark@skynet.ie> +Date: Thu Sep 2 22:07:18 2004 +0000 + + always invalidate the cache, even if a file has just changed - we need to + + 2004-09-02 Mark McLoughlin <mark@skynet.ie> + + * src/menu-entries.c: + (handle_cached_dir_changed): always invalidate the cache, + even if a file has just changed - we need to re-read the + categories and such. + (cached_dir_get_full_path): append a "/" between path + elements - trying to read /usrshareapplications isn't + going to work, is it? + +M ChangeLog +M src/menu-entries.c + +commit 99c42dd7f32176a07deac8b0885a724d75d9c203 +Author: Mark McLoughlin <mark@skynet.ie> +Date: Thu Sep 2 20:51:55 2004 +0000 + + Don't crash if the tree has already been freed. + + 2004-09-02 Mark McLoughlin <mark@skynet.ie> + + * src/menu-process.c: (handle_menu_node_menu_changed): + Don't crash if the tree has already been freed. + +M ChangeLog +M src/menu-process.c + +commit f6b82d1ae48432e4f80496d6a0aa64c1f3598cde +Author: Ray Strode <rstrode@redhat.com> +Date: Thu Sep 2 15:12:05 2004 +0000 + + sync with libegg + + 2004-09-02 Ray Strode <rstrode@redhat.com> + + * src/egg*.[ch]: sync with libegg + +M ChangeLog +M src/eggdesktopentries.c +M src/eggdesktopentries.h +M src/eggdirfuncs.c +M src/eggdirfuncs.h +M src/update-desktop-database.c + +commit 2b41b33c7c9866d18d89adfbfa4494569a8cd4b0 +Author: Mark McLoughlin <mark@skynet.ie> +Date: Sun Aug 29 13:53:19 2004 +0000 + + Patch from Dan Williams <dcbw@redhat.com> + + 2004-08-29 Mark McLoughlin <mark@skynet.ie> + + Patch from Dan Williams <dcbw@redhat.com> + + * src/menu-method.c: add a reasonable set of schemes. + +M ChangeLog +M src/menu-method.c + +commit b9671cfbb70f3f9c28089faebb1b8a69bd2d3f8d +Author: Mark McLoughlin <mark@skynet.ie> +Date: Sun Aug 29 13:43:39 2004 +0000 + + add an only_show_in arg. (desktop_entry_tree_cache_unref: free + + 2004-08-29 Mark McLoughlin <mark@skynet.ie> + + * src/menu-tree-cache.[ch]: + (desktop_entry_tree_cache_new): add an only_show_in arg. + (desktop_entry_tree_cache_unref: free only_show_in. + (reload_entry): pass in only_show_in when loading the + tree. + + * src/menu-method.c: (menu_method_new): set only-show-in + to GNOME. + + * src/gen-compat-tree.c: (process_one_file): don't + set an only-show-in name. Might want a command line + argument for this at some point. + +M ChangeLog +M src/gen-compat-tree.c +M src/menu-method.c +M src/menu-tree-cache.c +M src/menu-tree-cache.h + +commit 6b76fd581e24d0845fe8a1707a80260bff4d48de +Author: Mark McLoughlin <mark@skynet.ie> +Date: Sun Aug 29 13:32:13 2004 +0000 + + Another patch from Dan with some minor changes. + + 2004-08-29 Mark McLoughlin <mark@skynet.ie> + + Another patch from Dan with some minor changes. + + * src/menu-process.[ch]: + (desktop_entry_tree_get_mtime): accessor for mtime. + (build_tree): set the mtime to the time which we + build the tree. + + * src/menu-method.c: + (fill_in_generic_dir_info), + (fill_in_generic_file_info): set mtime/ctime. + +M ChangeLog +M src/menu-method.c +M src/menu-process.c +M src/menu-process.h + +commit aae23b7a07bb99ab295572899b93c678c516281f +Author: Mark McLoughlin <mark@skynet.ie> +Date: Sun Aug 29 13:07:38 2004 +0000 + + Patch to make the menu method notice changes in the entry directories and + + 2004-08-29 Mark McLoughlin <mark@skynet.ie> + + Patch to make the menu method notice changes in the entry + directories and re-load the menus. Re-worked version of + a patch from Dan Williams <dcbw@redhat.com> + + * src/Makefile.am: build menu-monitor.[ch] + + * src/menu-entries.[ch]: + (entry_directory_add_monitor), + (entry_directory_remove_monitor), + (entry_directory_list_add_monitors), + (entry_directory_list_remove_monitors): add API to support + monitoring the contents of entry directories. + + * src/menu-layout.[ch]: + (menu_node_menu_add_monitor), + (menu_node_menu_remove_monitor): add API to support monitoring + menu nodes. + + * src/menu-process.[ch]: + (desktop_entry_tree_add_monitor), + (desktop_entry_tree_remove_monitor): add API to support monitoring + the entry tree. Right now, only changes in the entry directories are + noticed and not the menu files themselves. + + * src/menu-tree-cache.c: use the entry tree monitoring API and + rebuild if it changes. + + * src/menu-monitor.[ch]: add silly monitor abstraction. + + * src/menu-method.c: implement the monitor abstraction with gnome-vfs + monitors. + +M ChangeLog +M src/Makefile.am +M src/menu-entries.c +M src/menu-entries.h +M src/menu-layout.c +M src/menu-layout.h +M src/menu-method.c +A src/menu-monitor.c +A src/menu-monitor.h +M src/menu-process.c +M src/menu-process.h +M src/menu-tree-cache.c +M src/menu-tree-cache.h + +commit 5ca04aeb574652e77e2d1cc7446cd0217bd0e6f3 +Author: Mark McLoughlin <mark@skynet.ie> +Date: Sun Aug 29 12:48:09 2004 +0000 + + remove FIXME to disable removing empty submenus. menu-spec says the + + 2004-08-29 Mark McLoughlin <mark@skynet.ie> + + * src/menu-process.c: (process_only_unallocated): remove + FIXME to disable removing empty submenus. menu-spec says + the default value for the "show_empty" attribute in + DefaultLayout is "false" so ... + +M ChangeLog +M src/menu-process.c + +commit f36c875da8a83e629fbf389d1056ef421adf934f +Author: Mark McLoughlin <mark@skynet.ie> +Date: Sun Aug 29 12:29:59 2004 +0000 + + Based on a patch from Dan Williams <dcbw@redhat.com> + + 2004-08-29 Mark McLoughlin <mark@skynet.ie> + + Based on a patch from Dan Williams <dcbw@redhat.com> + + * src/menu-entries.[ch]: + (entry_get_nodisplay): add accessor for nodisplay flag + (entry_new_desktop_from_file): return NULL if NoDisplay=TRUE + (entry_new_directory_from_file): set the nodisplay flag if + NoDisplay=TRUE. + + * src/menu-process.c: (tree_node_from_menu_node): if the + last .directory has NoDisplay=true treat it as if the + <Menu> had a <Deleted> + +M ChangeLog +M src/.cvsignore +M src/menu-entries.c +M src/menu-entries.h +M src/menu-process.c + +commit 732183a20f0c4814da404cfec3b87b31071fd899 +Author: Mark McLoughlin <mark@skynet.ie> +Date: Sun Aug 29 11:10:37 2004 +0000 + + don't include desktop_file.h + + 2004-08-29 Mark McLoughlin <mark@skynet.ie> + + * src/menu-process.h: don't include desktop_file.h + + * src/menu-util.h: don't include menu-layout.h + +M ChangeLog +M src/menu-process.h +M src/menu-util.h + +commit 2fcb4b84c1f87d39a2b748e1216e60a9b2ff635a +Author: Mark McLoughlin <mark@skynet.ie> +Date: Wed Aug 25 22:26:56 2004 +0000 + + don't leak the entry sets. Patch from Kjartan Maraas in rh bug #130673 + + 2004-08-25 Mark McLoughlin <mark@skynet.ie> + + * src/menu-process.c: (resolve_legacy_dir), + (tree_node_from_menu_node): don't leak the entry + sets. Patch from Kjartan Maraas in rh bug #130673 + + * src/menu-method.c: (menu_method_get_info): + free the resolved path. Another leak from rh bug #130673 + +M ChangeLog +M src/menu-method.c +M src/menu-process.c + +commit 0903e4a3f1f39b908c2240a698431bd0df617272 +Author: Ray Strode <rstrode@redhat.com> +Date: Thu Jul 22 17:01:05 2004 +0000 + + sync with libegg + + 2004-07-22 Ray Strode <rstrode@redhat.com> + + * src/egg*.[ch]: sync with libegg + + * src/update-desktop-database.c: fix calls to work + with changed api + +M ChangeLog +M src/eggdesktopentries.c +M src/eggdesktopentries.h +M src/eggdirfuncs.c +M src/update-desktop-database.c + +commit 7fc55f50ebc307ad19fb9fb315231304f10b6093 +Author: Mark McLoughlin <mark@skynet.ie> +Date: Thu Jul 22 07:00:29 2004 +0000 + + post-release bump to 0.8. + + 2004-07-22 Mark McLoughlin <mark@skynet.ie> + + * configure.in: post-release bump to 0.8. + +M ChangeLog +M configure.in + +commit eb0fb5ceb5be7c4e3b3539519e1e1d12f7929a21 +Author: Mark McLoughlin <mark@skynet.ie> +Date: Thu Jul 22 06:59:02 2004 +0000 + + Version 0.7. + + 2004-07-22 Mark McLoughlin <mark@skynet.ie> + + * configure.in: Version 0.7. + +M ChangeLog +M NEWS +M configure.in + +commit a74ca8bbc26da1ba024e7f6feeacbe9e5eada61f +Author: Jonathan Blandford <jrb@gnome.org> +Date: Thu Jul 22 02:48:25 2004 +0000 + + Make pass distcheck. + + Wed Jul 21 22:48:33 2004 Jonathan Blandford <jrb@gnome.org> + + * src/Makefile.am: + * misc/Makefile.am: Make pass distcheck. + +M ChangeLog +M misc/Makefile.am +M src/Makefile.am + +commit f11686f02711fdb88b0ee977fcf31140ae74b0ff +Author: Ray Strode <rstrode@redhat.com> +Date: Wed Jul 21 16:10:37 2004 +0000 + + add new --add-mime-type and --remove-mime-type options to make it easy to + + 2004-07-21 Ray Strode <rstrode@redhat.com> + + * src/install.c: (main) + (process_one_file): + (parse_options_callback): + add new --add-mime-type and --remove-mime-type options + to make it easy to dynamically add and remove mime + types from a desktop file. + +M ChangeLog +M src/install.c + +commit 4879cb46c884908ee61b502f89737c4a9812f2c7 +Author: Ray Strode <rstrode@redhat.com> +Date: Wed Jul 21 15:30:38 2004 +0000 + + add new --rebuild-mime-info-cache option (str_has_prefix): this function + + 2004-07-21 Ray Strode <rstrode@redhat.com> + + * src/install.c: (main) + (rebuild_cache), + (process_one_file): + add new --rebuild-mime-info-cache option + (str_has_prefix): this function is now in glib, + so remove it here and use it from there. + +M ChangeLog +M src/install.c + +commit 88729a7224944c31ac82081b73bab45cdbd26682 +Author: Ray Strode <rstrode@redhat.com> +Date: Wed Jul 21 04:09:11 2004 +0000 + + Return 1 on failure, even in quiet mode. + + 2004-07-21 Ray Strode <rstrode@redhat.com> + + * src/update-desktop-database.c: Return 1 on failure, + even in quiet mode. + +M ChangeLog +M src/update-desktop-database.c + +commit 01ea154d0a7a1543042bf5138490012eb3cd40ff +Author: Ray Strode <rstrode@redhat.com> +Date: Thu Jul 15 21:59:49 2004 +0000 + + add update-desktop-database + + 2004-07-15 Ray Strode <rstrode@redhat.com> + + * src/Makefile.am: add update-desktop-database + + * src/eggdesktopentries.[ch] + src/eggdirfuncs.[ch] + src/eggintl.h: new desktop file parser + + * src/gen-compat-tree.c + src/install.c: #include <locale.h> + + * src/update-desktop-database.c: creates + cache of mime type / desktop-file-id + associations. + +M ChangeLog +M src/Makefile.am +A src/eggdesktopentries.c +A src/eggdesktopentries.h +A src/eggdirfuncs.c +A src/eggdirfuncs.h +A src/eggintl.h +M src/gen-compat-tree.c +M src/install.c +A src/update-desktop-database.c + +commit 4d0df47a06fcda8f27f4f9b64d575fedc434b8e2 +Author: Mark McLoughlin <mark@skynet.ie> +Date: Thu Apr 22 13:56:06 2004 +0000 + + hush + +M misc/.cvsignore + +commit 404051fd0f15c5249996aa3d903d88f5cb364ada +Author: Mark McLoughlin <mark@skynet.ie> +Date: Mon Apr 19 06:18:28 2004 +0000 + + install the elisp. + + 2004-04-19 Mark McLoughlin <mark@skynet.ie> + + * configure.in, + misc/Makefile.am: install the elisp. + +M ChangeLog +M configure.in +M misc/Makefile.am + +commit d819beb1eaa1ea56c8b4e4b356fce939dbb059ae +Author: Mark McLoughlin <mark@skynet.ie> +Date: Mon Apr 19 06:04:36 2004 +0000 + + Patch from Ville Skyttä <ville.skytta@iki.fi> + + 2004-04-19 Mark McLoughlin <mark@skynet.ie> + + Patch from Ville Skyttä <ville.skytta@iki.fi> + + * misc/desktop-entry-mode.el: make it work a bit better + with GNU emacs. + +M ChangeLog +M misc/.cvsignore +M misc/desktop-entry-mode.el + +commit 2c3507439353c540bf6c97ef44b9d450cab4dfe2 +Author: Mark McLoughlin <mark@skynet.ie> +Date: Mon Apr 19 06:03:06 2004 +0000 + + add forgotten Makefile + +A misc/Makefile.am + +commit d8acd71129ddeccbed216f53e8e078f291fbda2b +Author: Mark McLoughlin <mark@skynet.ie> +Date: Sun Apr 18 17:57:41 2004 +0000 + + Patch from Ville Skyttä <ville.skytta@iki.fi> with some minor changes. + + 2004-04-18 Mark McLoughlin <mark@skynet.ie> + + Patch from Ville Skyttä <ville.skytta@iki.fi> with some + minor changes. + + * src/validate.c: + (print_fatal), (print_warning): take a filename arg and + say whether its an error or warning. + (validate_only_show_in): actually validate against registered + OnlyShowIn values. + (key_table): upd. for latest spec. + (enum_keys): check for keys that are reserved for KDE. + (required_section): improve validation here. + + * src/validator.c: (main): fixup the error messages. + +M ChangeLog +M src/validate.c +M src/validator.c + +commit b722c62c54b795ac8fcb72d7c2a3701d66a4ed77 +Author: Mark McLoughlin <mark@skynet.ie> +Date: Sun Apr 18 17:29:22 2004 +0000 + + Warning fixes. + + 2004-04-18 Mark McLoughlin <mark@skynet.ie> + + Warning fixes. + + * src/menu-entries.c: + (entry_cache_atom_name), + (entry_cache_clear_unused): mark as unused. + + * src/menu-method.c: + (menu_method_ref), (menu_method_unref): ditto. + + * src/vfolder-parser.c: + (add_context_to_error), (locate_attributes): kill these. + + * src/menu-process.c: + (menu_node_resolve_files_recursive): add a missing break; + (foreach_dir): try to fixup this and give up - something + is very broken here. + +M ChangeLog +M src/menu-entries.c +M src/menu-method.c +M src/menu-process.c +M src/vfolder-parser.c + +commit d17d002c67a517fa894b5606b122aa65522d4337 +Author: Mark McLoughlin <mark@skynet.ie> +Date: Sun Apr 18 16:30:39 2004 +0000 + + add Emacs desktop entry mode from Ville Skyttä <ville.skytta@iki.fi> + + 2004-04-18 Mark McLoughlin <mark@skynet.ie> + + * misc/desktop-entry-mode.el: add Emacs desktop entry + mode from Ville Skyttä <ville.skytta@iki.fi> + +M ChangeLog +M Makefile.am +M configure.in +A misc/.cvsignore +A misc/desktop-entry-mode.el + +commit b32d8b2a1921e4adbfb1e2f3162e8f7cee200133 +Author: Mark McLoughlin <mark@skynet.ie> +Date: Sun Apr 18 16:17:53 2004 +0000 + + shush + +M .cvsignore + +commit 574af0b8681a144a393b8f2869671e51afc1bcdb +Author: Dan Williams <dcbw@redhat.com> +Date: Wed Mar 24 15:14:04 2004 +0000 + + Bump to version 0.6 in preparation for a release. + +M ChangeLog +M configure.in + +commit 036d4c21a8d5b3f16f37ce4e8a8f7ab33d29b729 +Author: Dan Williams <dcbw@redhat.com> +Date: Mon Mar 22 04:46:20 2004 +0000 + + src/gen-compat-tree.c src/menu-entries.c src/menu-entries.h + + 2004-03-21 Dan Williams <dcbw@redhat.com> + + * src/gen-compat-tree.c + src/menu-entries.c + src/menu-entries.h + src/menu-layout.h + src/menu-method.c + src/menu-modules.conf + src/menu-parser.c + src/menu-process.c + src/menu-process.h + src/Makefile.am + + Apply Frederic Crozat's patch to bring d-f-u up + to the freedesktop.org Menu Spec 0.8. Approved + by havoc. + +M ChangeLog +M src/Makefile.am +M src/gen-compat-tree.c +M src/menu-entries.c +M src/menu-entries.h +M src/menu-layout.h +M src/menu-method.c +M src/menu-modules.conf +M src/menu-parser.c +M src/menu-process.c +M src/menu-process.h + +commit f003793aa7a371e500e1d261cca7020d213ed09a +Author: Dan Williams <dcbw@redhat.com> +Date: Sun Mar 21 20:07:54 2004 +0000 + + Don't crash when a .desktop file is a symlink pointing to a nonexistent + + 2004-03-21 Dan Williams <dcbw@redhat.com> + + * src/menu-entries.c: Don't crash when a .desktop + file is a symlink pointing to a nonexistent file. + +M ChangeLog +M src/menu-entries.c + +commit 0bacbc6e3bbbc008b1dd1997b2382538f84670e5 +Author: Mark McLoughlin <mark@skynet.ie> +Date: Mon Mar 1 20:05:26 2004 +0000 + + Version 0.5. + + 2004-03-01 Mark McLoughlin <mark@skynet.ie> + + * configure.in: Version 0.5. + + 2004-03-01 Mark McLoughlin <mark@skynet.ie> + + Patch from Dan Williams to not segfault with .desktop + files with comments at the start. + + * src/validate.c: (enum_sections), (enum_actions): + Don't crap out if the section or action name is + NULL. + +M ChangeLog +M configure.in +M src/validate.c + +commit 9716fcd495f7a5876129f41e5bc860dc22d536a0 +Author: Mark McLoughlin <mark@skynet.ie> +Date: Thu Feb 19 14:40:28 2004 +0000 + + Version 0.4 + + 2004-02-19 Mark McLoughlin <mark@skynet.ie> + + * configure.in: Version 0.4 + +M ChangeLog +M configure.in +M src/Makefile.am + +commit 1cc71ab56de69bdf16bec6ad3c021809758b01ef +Author: Mark McLoughlin <mark@skynet.ie> +Date: Thu Feb 19 14:03:47 2004 +0000 + + Add support for .desktop files which contains Actions. Verify that the + + 2004-02-19 Mark McLoughlin <mark@skynet.ie> + + Add support for .desktop files which contains Actions. Verify + that the Actions key and Desktop Action sections match up + and that each Desktop Action section has an Exec key. + + * src/validate.c: + (enum_sections): record the name of the main section and + allow Desktop Action sections. + (required_section): return the name of the main section. + (required_keys): actually check for these keys in the correct + section. + (enum_actions), (error_orphaned_action), + (required_actions): make sure the Actions key and Desktop Actions + sections match up. + (desktop_file_validate): upd. + +M ChangeLog +M src/validate.c + +commit e5178a6e260fdd4d98d25630f2721cec77eea11f +Author: Mark McLoughlin <mark@skynet.ie> +Date: Thu Feb 19 14:01:42 2004 +0000 + + hush puppies + +A src/.cvsignore +A test/.cvsignore + +commit 212304203a637227dc5f4451c5c24bb5d527f2e6 +Author: Mark McLoughlin <mark@skynet.ie> +Date: Thu Feb 19 14:00:18 2004 +0000 + + shush + +A .cvsignore + +commit 40b5b6cb7f8e8d2678c4de3ea7133988ece58c1f +Author: Havoc Pennington <hp@redhat.com> +Date: Fri Oct 24 00:13:51 2003 +0000 + + don't return an entry's parent, only return a subdir at the exact path + + 2003-10-23 Havoc Pennington <hp@redhat.com> + + * src/menu-process.c (tree_node_find_subdir): don't return an + entry's parent, only return a subdir at the exact path + +M ChangeLog +M src/menu-process.c + +commit cd253d7315b8cfbef387ed40ae6c4270797b5d64 +Author: Havoc Pennington <hp@redhat.com> +Date: Thu Oct 23 23:41:41 2003 +0000 + + implement <Move> operation + + 2003-10-23 Havoc Pennington <hp@redhat.com> + + * src/menu-process.c: implement <Move> operation + + * src/menu-process.c (menu_node_strip_duplicate_children): fix + to keep later rather than earlier <Menu> nodes + (move_children): drop the <Name> node from the source <Menu> + + * src/menu-parser.c (end_element_handler): don't add context to + error messages that already have it + + * src/menu-parser.c (fixup_move_node): new code to canonicalize + and verify move nodes + +M ChangeLog +M src/menu-layout.c +M src/menu-layout.h +M src/menu-parser.c +M src/menu-process.c + +commit 9026bd0d2c5976ef43f490cbb5c187e2de8e48bd +Author: Havoc Pennington <hp@redhat.com> +Date: Thu Oct 23 19:30:32 2003 +0000 + + add support for OnlyUnallocated element, passes 1 more test + + 2003-10-23 Havoc Pennington <hp@redhat.com> + + * src/menu-process.c (process_only_unallocated) + (tree_node_from_menu_node): add support for OnlyUnallocated + element, passes 1 more test + +M ChangeLog +M src/menu-process.c + +commit 4e31d2235f5b96c80fac2e4f5820bfba29142616 +Author: Havoc Pennington <hp@redhat.com> +Date: Thu Oct 23 18:59:24 2003 +0000 + + Localizing the menu paths gets us another 2 passes with the test suite. + + 2003-10-23 Havoc Pennington <hp@redhat.com> + + Localizing the menu paths gets us another 2 passes with the test + suite. + + * src/menu-process.c (localized_path_for_entry): new function + (foreach_print): localize the paths that are outputted with + --test-results as the test suite wants that. + +M ChangeLog +M src/menu-process.c +M src/menu-process.h + +commit b569aaccf68a490a1b9c725c202075745c82171e +Author: Havoc Pennington <hp@redhat.com> +Date: Tue Oct 21 19:00:08 2003 +0000 + + change to alloc the TreeNode in here instead of separately then + + 2003-10-20 Havoc Pennington <hp@redhat.com> + + * src/menu-process.c (tree_node_from_menu_node): change to alloc + the TreeNode in here instead of separately then + fill_tree_node_from_menu_node + (tree_node_from_menu_node): handle <Deleted>/<NotDeleted> + +M ChangeLog +M src/menu-process.c + +commit 91932e984d02f53d74f276fbb8725944e7d397a7 +Author: Havoc Pennington <hp@redhat.com> +Date: Fri Oct 17 03:39:27 2003 +0000 + + include full menu paths + + 2003-10-16 Havoc Pennington <hp@redhat.com> + + * src/menu-process.c (foreach_dir): include full menu paths + + * src/gen-compat-tree.c (process_one_file): search for relative + filenames in the XDG paths + + * src/menu-tree-cache.c (cache_lookup): fix GError pileup + + * src/gen-compat-tree.c: add --verbose option + +M ChangeLog +M src/gen-compat-tree.c +M src/menu-process.c +M src/menu-tree-cache.c + +commit 8ce78fa6a2f9a3130d9830fd5851bc59f692aa50 +Author: Havoc Pennington <hp@redhat.com> +Date: Thu Jul 17 21:54:00 2003 +0000 + + add a bunch of #ifdef READ_ONLY sections for using the backend without + + 2003-07-17 Havoc Pennington <hp@redhat.com> + + * src/menu-method.c: add a bunch of #ifdef READ_ONLY sections for + using the backend without editing + +M ChangeLog +M src/menu-method.c + +commit 098322cac733cdec68af17d7b8525982311641e9 +Author: Havoc Pennington <hp@redhat.com> +Date: Wed Jun 11 22:06:37 2003 +0000 + + diff old vs. new tree and store the list of changes + + 2003-06-11 Havoc Pennington <hp@redhat.com> + + * src/menu-tree-cache.c (reload_entry): diff old vs. new tree and + store the list of changes + + * src/menu-method.c (do_monitor_add, do_monitor_cancel): + monitoring using the tree diff stuff. + + * src/menu-process.c (desktop_entry_tree_diff): finish + implementing this + +M ChangeLog +M src/menu-method.c +M src/menu-process.c +M src/menu-tree-cache.c +M src/menu-tree-cache.h + +commit db41e321537333d3606bf27b3e49e17886e02784 +Author: Havoc Pennington <hp@pobox.com> +Date: Wed Jun 11 05:00:37 2003 +0000 + + add but doesn't work yet, just syncing with work computer + + 2003-06-11 Havoc Pennington <hp@pobox.com> + + * src/menu-process.c (desktop_entry_tree_diff): add but + doesn't work yet, just syncing with work computer + +M ChangeLog +M src/menu-process.c +M src/menu-process.h + +commit 7af5e7979cece5de7970a4f809d1511740d7d67e +Author: Havoc Pennington <hp@redhat.com> +Date: Fri Jun 6 21:12:18 2003 +0000 + + make this return NOT_PERMITTED rather than NOT_SUPPORTED + + 2003-06-06 Havoc Pennington <hp@redhat.com> + + * src/menu-method.c (do_set_file_info): make this return + NOT_PERMITTED rather than NOT_SUPPORTED + (fill_in_generic_dir_info): fill in the uid/gid fields + (fill_in_generic_file_info): ditto + (menu_method_get_info): fill in file_info->name + (do_check_same_fs): implement + +M ChangeLog +M src/menu-method.c + +commit 1b3ef9fbb92a3d8dde18120a9b9d4e1d19f150ae +Author: Havoc Pennington <hp@redhat.com> +Date: Fri Jun 6 19:26:31 2003 +0000 + + mark cache valid again after reloading stuff, makes things a whole lot + + 2003-06-06 Havoc Pennington <hp@redhat.com> + + * src/menu-tree-cache.c (reload_entry): mark cache valid again + after reloading stuff, makes things a whole lot faster. + + * src/menu-method.c: convert some GError to GnomeVFSResult, and + return GNOME_VFS_ERROR_INVALID_URI when passed a non-.desktop + or non-.directory file. + (dir_handle_new): remove extra unref on the DesktopEntryTree + +M ChangeLog +M src/menu-method.c +M src/menu-process.c +M src/menu-tree-cache.c + +commit 8717fa173adacea5519ccb228a0fd0c7689cbb34 +Author: Havoc Pennington <hp@redhat.com> +Date: Fri Jun 6 16:22:55 2003 +0000 + + Last bugfix so we can display redhat-menus pretty OK + + 2003-06-06 Havoc Pennington <hp@redhat.com> + + Last bugfix so we can display redhat-menus pretty OK + + * src/menu-process.c (node_menu_compare_func): make this consider + whether the menu nodes have the same parent, so we don't + consolidate dups that aren't children of the same menu + (menu_node_strip_duplicate_children): use node_menu_compare_func + instead of node_compare_func to see if two menu nodes are dups + + * src/menu-layout.c (menu_node_get_depth): new + +M ChangeLog +M src/menu-entries.c +M src/menu-layout.c +M src/menu-layout.h +M src/menu-process.c + +commit 960d29872085d285eccd284f4e1663b49cd3b791 +Author: Havoc Pennington <hp@redhat.com> +Date: Thu Jun 5 23:21:17 2003 +0000 + + set name of the menu file on root node + + 2003-06-05 Havoc Pennington <hp@redhat.com> + + * src/menu-parser.c (menu_load): set name of the menu file on + root node + + * src/menu-entries.c (cached_dir_lookup): fix logic a bit + + * src/menu-process.c (menu_node_resolve_files_recursive): + implement DefaultAppDirs, DefaultDirectoryDirs, DefaultMergeDirs + + * src/menu-util.c (init_xdg_paths): move here + + * src/menu-process.c (move_children): fix memleak and a crash + when moving children to an empty node + + * src/menu-util.c (g_string_append_random_ascii): fix warnings + + * src/menu-parser.c: add <DefaultMergeDirs/> support + +M ChangeLog +M src/menu-entries.c +M src/menu-layout.c +M src/menu-layout.h +M src/menu-parser.c +M src/menu-process.c +M src/menu-tree-cache.c +M src/menu-util.c +M src/menu-util.h + +commit 886db179daa8fb482fc8989a625143ee8864b242 +Author: Havoc Pennington <hp@redhat.com> +Date: Mon Jun 2 23:09:39 2003 +0000 + + put applications-edits under "menus" (desktop_entry_tree_cache_create): + + 2003-06-02 Havoc Pennington <hp@redhat.com> + + * src/menu-tree-cache.c (try_create_overrides): put + applications-edits under "menus" + (desktop_entry_tree_cache_create): can't create a menu with + same name as a directory; and don't create random mktmp names, + that was just crack + + * src/menu-layout.c + (menu_node_remove_redundancy): fix this function to be able to + remove redundancy despite intervening nodes. + + * src/menu-process.c (desktop_entry_tree_exclude) + (desktop_entry_tree_include): add new nodes in root <Menu>, not to + root of layout tree + (menu_node_find_submenu): fix assertion + (tree_node_find_subdir_or_entry): fix to return the right value + + * src/menu-tree-cache.c (reload_entry): fix unref/free of NULL + fields. + (lookup_canonical_entry): fix bug where we didn't fill + in entry->create_chaining_to correctly + + * src/menu-method.c (menu_method_resolve_uri): fix bug where + we passed wrong args to menu_method_get_tree + +M ChangeLog +M src/menu-layout.c +M src/menu-method.c +M src/menu-process.c +M src/menu-process.h +M src/menu-tree-cache.c + +commit 6790909e981587d6c7306de126101cc6a00fd259 +Author: Havoc Pennington <hp@pobox.com> +Date: Sun Jun 1 05:34:13 2003 +0000 + + implement (desktop_entry_tree_cache_mkdir): implement + + 2003-05-31 Havoc Pennington <hp@pobox.com> + + * src/menu-tree-cache.c (desktop_entry_tree_cache_rmdir): + implement + (desktop_entry_tree_cache_mkdir): implement + + * src/menu-process.c (desktop_entry_tree_mkdir): implement + (desktop_entry_tree_rmdir): implement + + * src/menu-overrides.c: handle overriding a desktop file + with a '/' in the name + + * src/menu-method.c (menu_method_unlink): implement + + * src/menu-process.c (desktop_entry_tree_exclude): implement + + * src/menu-tree-cache.c (desktop_entry_tree_cache_delete): implement + +M ChangeLog +M src/menu-layout.c +M src/menu-layout.h +M src/menu-method.c +M src/menu-overrides.c +M src/menu-overrides.h +M src/menu-process.c +M src/menu-process.h +M src/menu-tree-cache.c +M src/menu-tree-cache.h +M src/menu-util.c +M src/menu-util.h + +commit e650a5c592c0cc61bf6c81b24b82c92748f07927 +Author: Havoc Pennington <hp@pobox.com> +Date: Sat May 31 17:51:57 2003 +0000 + + move some functions that didn't make sense in other files into here + + 2003-05-31 Havoc Pennington <hp@pobox.com> + + * src/menu-util.c: move some functions that didn't make sense + in other files into here + + * src/menu-process.c (menu_node_resolve_files_recursive): fix bug + where we used an uninitialized variable + +M ChangeLog +M src/Makefile.am +M src/canonicalize.c +M src/menu-entries.c +M src/menu-layout.c +M src/menu-layout.h +M src/menu-method.c +M src/menu-overrides.c +M src/menu-overrides.h +M src/menu-parser.c +M src/menu-process.c +A src/menu-util.c +A src/menu-util.h + +commit 2f385d64991be70d6bb50eff260b6f9a48c29fe2 +Author: Havoc Pennington <hp@redhat.com> +Date: Fri May 30 22:06:48 2003 +0000 + + hack (menu_node_ensure_child): hack (desktop_entry_tree_include): hack + + 2003-05-30 Havoc Pennington <hp@redhat.com> + + * src/menu-process.c (menu_node_find_submenu): hack + (menu_node_ensure_child): hack + (desktop_entry_tree_include): hack + + * src/menu-method.c: hack + + * src/menu-tree-cache.c (desktop_entry_tree_cache_create): hack + +M ChangeLog +M src/menu-layout.h +M src/menu-method.c +M src/menu-overrides.c +M src/menu-process.c +M src/menu-process.h +M src/menu-tree-cache.c +M src/menu-tree-cache.h + +commit 18c81bf0e85df9a7ee8d3ea063f758976abf43a9 +Author: Havoc Pennington <hp@redhat.com> +Date: Thu May 29 23:09:19 2003 +0000 + + new + + 2003-05-29 Havoc Pennington <hp@redhat.com> + + * src/menu-method.c (menu_method_resolve_uri_writable): new + + * src/menu-tree-cache.c (desktop_entry_tree_cache_override): new + + * src/menu-entries.c (entry_cache_invalidate): new + + * src/menu-process.c (merge_resolved_copy_of_children): lots of + fixing + + * src/menu-layout.c (menu_node_steal): fix to update + node->parent->children pointer + + * src/gen-compat-tree.c (process_one_file): fix build + +M ChangeLog +M src/menu-entries.c +M src/menu-entries.h +M src/menu-layout.c +M src/menu-layout.h +M src/menu-method.c +M src/menu-overrides.c +M src/menu-parser.c +M src/menu-process.c +M src/menu-process.h +M src/menu-tree-cache.c +M src/menu-tree-cache.h +M src/vfolder-parser.c + +commit 2da219479f1dd0f267607b3d273899f6963e669b +Author: Havoc Pennington <hp@redhat.com> +Date: Thu May 29 18:08:24 2003 +0000 + + fix build + + 2003-05-29 Havoc Pennington <hp@redhat.com> + + * src/gen-compat-tree.c (process_one_file): fix build + +M ChangeLog +M src/gen-compat-tree.c + +commit d6f012c8d4d36cb77f19a1e4a91c17474a2ffcea +Author: Havoc Pennington <hp@redhat.com> +Date: Thu May 29 16:46:27 2003 +0000 + + add allow_missing_basename argument + + 2003-05-28 Havoc Pennington <hp@redhat.com> + + * src/canonicalize.c (g_canonicalize_file_name): add + allow_missing_basename argument + + * src/menu-tree-cache.c (init_xdg_paths): hack to pass in + the create_chaining_to to desktop_entry_tree_load() + + * src/menu-method.c (menu_method_get_tree): adapt to new API + + * src/menu-process.c (desktop_entry_tree_load): take + an argument which is the menu file to chain to + in a newly-created menu file + + * src/menu-layout.c (menu_cache_get_menu_for_file): + same, allow specifying a file to chain to if we + create a new menu file + +M ChangeLog +M src/Makefile.am +M src/canonicalize.c +M src/canonicalize.h +M src/menu-entries.c +M src/menu-layout.c +M src/menu-layout.h +M src/menu-method.c +M src/menu-overrides.c +M src/menu-overrides.h +M src/menu-parser.c +M src/menu-process.c +M src/menu-process.h +M src/menu-tree-cache.c +M src/menu-tree-cache.h + +commit a7bfa852da88ec7be894684b5037c9a80d9df98d +Author: Havoc Pennington <hp@redhat.com> +Date: Wed May 21 21:50:48 2003 +0000 + + Enough bugfixes to be able to view a sample menu in nautilus and launch + + 2003-05-21 Havoc Pennington <hp@redhat.com> + + Enough bugfixes to be able to view a sample menu in nautilus and + launch apps. + + * src/menu-process.c (tree_node_find_subdir_or_entry): fill in the + node when we are loading a .desktop file + + * src/menu-method.c (menu_method_get_info): new function + (do_get_file_info): change so we can stat a directory, + doh + + * src/menu-process.c (tree_node_find_subdir_or_entry): handle '/' + +M ChangeLog +M src/menu-method.c +M src/menu-process.c + +commit 5a4c5b172c9a0ddee78524b8e8ed5639944e1465 +Author: Havoc Pennington <hp@redhat.com> +Date: Wed May 21 20:29:06 2003 +0000 + + implement directory of .desktop file overrides + + 2003-05-21 Havoc Pennington <hp@redhat.com> + + * src/menu-overrides.c: implement directory of .desktop file + overrides + + * src/menu-layout.c (g_file_save_atomically): export + +M ChangeLog +M src/menu-layout.c +M src/menu-layout.h +A src/menu-overrides.c +A src/menu-overrides.h + +commit 35cb1a6884dead580b7a2c0056253896007f1af8 +Author: Havoc Pennington <hp@redhat.com> +Date: Tue May 20 22:47:00 2003 +0000 + + code stuff, gnomevfs-ls/gnomevfs-cat/gnomevfs-info are now up and running. + + 2003-05-20 Havoc Pennington <hp@redhat.com> + + * src/menu-method.c: code stuff, + gnomevfs-ls/gnomevfs-cat/gnomevfs-info are now up and running. + + * src/menu-process.c (tree_node_find_subdir_or_entry): fix + + * src/menu-tree-cache.c (parse_search_path_and_prepend): fix + (init_xdg_paths): fix + + * src/Makefile.am: fix to link the menu-* sources into the VFS + module. + +M ChangeLog +M src/Makefile.am +M src/menu-entries.c +M src/menu-layout.c +M src/menu-method.c +M src/menu-modules.conf +M src/menu-parser.c +M src/menu-process.c +M src/menu-process.h +M src/menu-tree-cache.c + +commit 361071b919aa3031bd6b295c5430bd8d77544c6f +Author: Havoc Pennington <hp@redhat.com> +Date: Thu May 15 22:27:13 2003 +0000 + + hacking + + 2003-05-15 Havoc Pennington <hp@redhat.com> + + * src/menu-method.c: hacking + + * src/menu-process.c (tree_node_find_subdir): fix so we don't + ignore trailing junk on paths + (desktop_entry_tree_resolve_path): new + +M ChangeLog +M src/menu-method.c +M src/menu-process.c +M src/menu-process.h + +commit df4c3bcb31cf668f30cf82a1f869e0cd339e39cb +Author: Havoc Pennington <hp@redhat.com> +Date: Wed May 14 22:56:48 2003 +0000 + + quick implementation without file change monitoring. + + 2003-05-14 Havoc Pennington <hp@redhat.com> + + * src/menu-tree-cache.c: quick implementation without file change + monitoring. + +M ChangeLog +M src/Makefile.am +M src/menu-method.c +M src/menu-process.c +M src/menu-process.h +M src/menu-tree-cache.c +M src/menu-tree-cache.h + +commit 336f02b3fc0a9dae50624a7ccbab27500372933e +Author: Havoc Pennington <hp@redhat.com> +Date: Tue May 13 20:42:54 2003 +0000 + + new file to store cache of DesktopEntryTree + + 2003-05-13 Havoc Pennington <hp@redhat.com> + + * src/menu-tree-cache.c: new file to store cache of + DesktopEntryTree + +M ChangeLog +M src/Makefile.am +M src/menu-method.c +M src/menu-process.c +M src/menu-process.h +A src/menu-tree-cache.c +A src/menu-tree-cache.h + +commit 9d901a7f4feb34d48f40a8705d522fac66ef61e9 +Author: Havoc Pennington <hp@redhat.com> +Date: Mon May 12 22:29:19 2003 +0000 + + fix a bunch of compiler warnings (desktop_file_fixup): add code to fix + + 2003-05-12 Havoc Pennington <hp@redhat.com> + + * src/validate.c: fix a bunch of compiler warnings + (desktop_file_fixup): add code to fix semicolon termination of + string lists if necessary. + + * src/desktop_file.c (gnome_desktop_file_merge_string_into_list): + handle case where existing list is missing ';' at the end; + patch from Adrian Reber + +M ChangeLog +M src/desktop_file.c +M src/menu-method.c +M src/validate.c + +commit 349c98626c6357e6cf25326baf357a856f1b240d +Author: Havoc Pennington <hp@redhat.com> +Date: Mon May 12 20:51:53 2003 +0000 + + automake, aclocal 1.7 + + 2003-05-12 Havoc Pennington <hp@redhat.com> + + * autogen.sh (ACLOCAL): automake, aclocal 1.7 + + * configure.in: check for optional gnome-vfs, not required + of course, just a hack to share some menu code for now. + + * src/menu-method.c, src/Makefile.am: gnome-vfs boilerplate, + doesn't yet do anything. + +M ChangeLog +M autogen.sh +M configure.in +M src/Makefile.am +A src/menu-method.c +A src/menu-modules.conf + +commit 1f34cb995e6ac5befdf56a7ebb6fae3b7b16a151 +Author: Havoc Pennington <hp@pobox.com> +Date: Sat May 10 21:01:26 2003 +0000 + + implement serialization of the "DOM tree" of menu nodes so that we can + + 2003-05-10 Havoc Pennington <hp@pobox.com> + + * src/menu-layout.c (menu_node_append_to_string): implement + serialization of the "DOM tree" of menu nodes so that we can + resave after editing. + (menu_node_append_child): fix this, it was messing up order + of nodes + (menu_cache_sync_for_file): implement doing the standard + write-to-tmp-and-rename hoop-jumping. + +M ChangeLog +M src/menu-layout.c +M src/menu-layout.h +M src/menu-parser.c +M src/menu-process.c + +commit f67acc13aff1f1975b0e420c879f5afb89786a30 +Author: Havoc Pennington <hp@redhat.com> +Date: Fri May 9 23:55:47 2003 +0000 + + use a quark scheme for entry->categories to save time/memory + + 2003-05-09 Havoc Pennington <hp@redhat.com> + + * src/menu-entries.c: use a quark scheme for entry->categories + to save time/memory + + * src/desktop_file.c (parse_key_value): fix a memory leak + +M ChangeLog +M src/desktop_file.c +M src/gen-compat-tree.c +M src/menu-entries.c +M src/menu-entries.h + +commit 72cbb370318d2d484248d0b94cd507cb29730572 +Author: Havoc Pennington <hp@redhat.com> +Date: Fri May 9 22:11:33 2003 +0000 + + refactor this to use MenuCache and EntryCache and as a result make more + + 2003-05-09 Havoc Pennington <hp@redhat.com> + + * src/menu-process.c: refactor this to use MenuCache and + EntryCache and as a result make more sense. + + * src/menu-layout.c: add MenuCache object; don't track + is_file_root; don't try to autodrop cache when a menu + node is unref'd (didn't work anyway). + + * src/menu-entries.c: invent an EntryCache object to get rid of + global variables + +M ChangeLog +M src/gen-compat-tree.c +M src/menu-entries.c +M src/menu-entries.h +M src/menu-layout.c +M src/menu-layout.h +M src/menu-process.c +M src/menu-process.h +M src/menu.h + +commit e434380b935a1984fb4b4f256647fedc0fb1190a +Author: Havoc Pennington <hp@pobox.com> +Date: Fri May 9 04:14:45 2003 +0000 + + make @ a valid byte in locale names, patch from Richi Plana + + 2003-05-09 Havoc Pennington <hp@pobox.com> + + * src/desktop_file.c: make @ a valid byte in locale names, patch + from Richi Plana + +M ChangeLog +M src/desktop_file.c + +commit d5336e6b1da6dc5993b48c7e091b4693d379fcdb +Author: Havoc Pennington <hp@redhat.com> +Date: Thu May 8 22:01:25 2003 +0000 + + sort entries by basename + + 2003-05-08 Havoc Pennington <hp@redhat.com> + + * src/menu-process.c (fill_tree_node_from_menu_node): sort entries + by basename + +M ChangeLog +M src/menu-process.c + +commit cf667e29c1854de40ed4522c62dac70eb54253b5 +Author: Havoc Pennington <hp@redhat.com> +Date: Thu May 8 21:50:52 2003 +0000 + + fix list manipulation screwup that caused obscure memory error + + 2003-05-08 Havoc Pennington <hp@redhat.com> + + * src/menu-entries.c (entry_directory_list_add): fix list + manipulation screwup that caused obscure memory error + (find_value): fix bug that made it not work, and avoid extra + strlen calls + + * src/menu-layout.h: add macros to disable verbose mode + +M ChangeLog +M src/menu-entries.c +M src/menu-layout.h +M src/menu-process.c + +commit f10d0e2fc86e43674f7801562f62744ad7bf7a98 +Author: Havoc Pennington <hp@redhat.com> +Date: Tue May 6 23:36:00 2003 +0000 + + add ability to print in the format of test suite expected results file + + 2003-05-06 Havoc Pennington <hp@redhat.com> + + * src/menu-process.c (foreach_print): add ability to print in the + format of test suite expected results file + +M ChangeLog +M src/gen-compat-tree.c +M src/menu-process.c +M src/menu-process.h + +commit 87fa08c52c1b01ac9a6ae1928e9fd7cce4b71dad +Author: Havoc Pennington <hp@redhat.com> +Date: Mon May 5 20:51:11 2003 +0000 + + allow nodes with NULL dir_entry, the menu spec allows that. (foreach_dir, + + 2003-05-05 Havoc Pennington <hp@redhat.com> + + * src/menu-process.c (tree_node_free_if_broken): allow nodes with + NULL dir_entry, the menu spec allows that. + (foreach_dir, foreach_print): assorted fixes, can now print a + trivial two-item menu. + +M ChangeLog +M src/dfu-test.c +M src/menu-process.c +M src/menu-process.h + +commit 3b6274f2646fd5bd2334c72543e717203738add3 +Author: Havoc Pennington <hp@redhat.com> +Date: Fri May 2 21:55:22 2003 +0000 + + create the node->app_dirs node->dir_dirs objects and account for + + 2003-05-02 Havoc Pennington <hp@redhat.com> + + * src/menu-layout.c (menu_node_menu_ensure_entry_lists): create + the node->app_dirs node->dir_dirs objects and account for + MENU_NODE_ROOT node type + +M ChangeLog +M src/menu-layout.c + +commit 7bb06d10749e9e7cfcdd7e81bcba51e9b30a4185 +Author: Havoc Pennington <hp@redhat.com> +Date: Fri May 2 21:35:09 2003 +0000 + + use basedir stuff stored on root node instead of dealing with it in this + + 2003-05-02 Havoc Pennington <hp@redhat.com> + + * src/menu-process.c: use basedir stuff stored on root node + instead of dealing with it in this file + + * src/menu-parser.c (menu_load): set basedir + + * src/menu-layout.c (menu_node_copy_one): copy fields in MenuNode + "subclasses" + (menu_node_get_basedir): new + (menu_node_get_content_as_path): new + + * configure.in: add more compiler warnings, and --enable-tests + + * src/menu-layout.c (dfu_test_menu_nodes): start setting up unit + test stuff + +M ChangeLog +M configure.in +M src/Makefile.am +M src/desktop_file.c +A src/dfu-test.c +A src/dfu-test.h +M src/menu-entries.c +M src/menu-layout.c +M src/menu-layout.h +M src/menu-parser.c +M src/menu-process.c +M test/Makefile.am +D test/all-tests.sh +D test/run-test.c +D test/test-data-01/desktop-entries/gnome-terminal.desktop +D test/test-data-01/desktop-entries/kde-KMail.desktop +D test/test-data-01/test01.menu +D test/test-data-01/test01.results + +commit f89f7608c1fd54eced4ce406c22c471d4ff86411 +Author: Havoc Pennington <hp@pobox.com> +Date: Fri May 2 02:52:54 2003 +0000 + + implement (desktop_entry_tree_foreach): implement + + 2003-05-01 Havoc Pennington <hp@pobox.com> + + * src/menu-process.c (desktop_entry_tree_print): implement + (desktop_entry_tree_foreach): implement + + * src/menu-entries.c (entry_set_new): fix to init to all bits zero + +M ChangeLog +M src/gen-compat-tree.c +M src/menu-entries.c +M src/menu-process.c +M src/menu-process.h + +commit 8f1b0e36649e3ef93393c6edaba56a11e89c4078 +Author: Havoc Pennington <hp@redhat.com> +Date: Thu May 1 22:07:42 2003 +0000 + + change to only warn about invalid keys, don't die (enum_keys): remove + + 2003-05-01 Havoc Pennington <hp@redhat.com> + + * src/validate.c: change to only warn about invalid keys, don't + die + (enum_keys): remove warning about Icon field with no .png extension + (desktop_file_validate): fix to reset fatal_error_occurred on each + call + + * src/gen-compat-tree.c: hook up the new menu code, so we can + start debugging + + * src/validate.c: allow GenericName, StartupNotify, StartupWMClass + + * src/menu-parser.c: got it compiling, most code should be there, + untested + +M ChangeLog +M README +M src/gen-compat-tree.c +M src/menu-layout.c +M src/menu-layout.h +M src/menu-parser.c +M src/menu-process.c +M src/menu-process.h +M src/validate.c +M src/vfolder-parser.c +M src/vfolder-query.c +M src/vfolder-query.h + +commit 8edbe57d225a317b40ed49e959a375c9edbbff76 +Author: Havoc Pennington <hp@redhat.com> +Date: Thu May 1 19:22:50 2003 +0000 + + got it compiling, most code should be there, untested + + 2003-05-01 Havoc Pennington <hp@redhat.com> + + * src/menu-parser.c: got it compiling, most code should be there, + untested + +M ChangeLog +M configure.in +M src/Makefile.am +M src/menu-layout.c +M src/menu-layout.h +M src/menu-parser.c +M src/menu-parser.h + +commit 73baa8239a6be957e7831f20cda971f9c180733f +Author: Havoc Pennington <hp@redhat.com> +Date: Wed Apr 30 22:51:50 2003 +0000 + + more random hacking, syncing between computers + + 2003-04-30 Havoc Pennington <hp@redhat.com> + + * src/menu-parser.c: more random hacking, syncing between computers + +M ChangeLog +M src/menu-entries.c +M src/menu-layout.c +M src/menu-layout.h +M src/menu-parser.c +M src/menu-parser.h + +commit 87f5833e4f2553d9836f3f41da0911513b116746 +Author: Havoc Pennington <hp@pobox.com> +Date: Wed Apr 30 03:36:42 2003 +0000 + + skeletal noncompiling base file for menu xml parser thing + + 2003-04-30 Havoc Pennington <hp@pobox.com> + + * src/menu-parser.c: skeletal noncompiling base file for menu xml + parser thing + +M ChangeLog +A src/menu-parser.c +A src/menu-parser.h + +commit 11f3ada037c9ca03ec528c5947684145a6901ee1 +Author: Havoc Pennington <hp@redhat.com> +Date: Fri Apr 11 21:15:12 2003 +0000 + + don't stop checking as soon as we see an Encoding field. Fix from Ville + + 2003-04-11 Havoc Pennington <hp@redhat.com> + + * src/validate.c (required_keys): don't stop checking as soon as + we see an Encoding field. Fix from Ville Skytta + <ville.skytta@iki.fi> + +M ChangeLog +M src/validate.c + +commit fd5d068c71f30cfd3baadc326c2bd7167336c620 +Author: Havoc Pennington <hp@pobox.com> +Date: Mon Dec 23 02:12:57 2002 +0000 + + allow specifying expected name of directory nodes, and allow quoting names + + 2002-12-21 Havoc Pennington <hp@pobox.com> + + * test/run-test.c (main): allow specifying expected name of + directory nodes, and allow quoting names and entry filenames so we + can test for handling of whitespace etc. + +M ChangeLog +M src/menu-layout.h +A src/menu.h +M test/Makefile.am +A test/all-tests.sh +M test/run-test.c +A test/test-data-01/desktop-entries/gnome-terminal.desktop +A test/test-data-01/desktop-entries/kde-KMail.desktop +A test/test-data-01/test01.menu +A test/test-data-01/test01.results + +commit 8d70254d7ab5850228634f71bbc2cc4e9f5f9653 +Author: Havoc Pennington <hp@pobox.com> +Date: Mon Dec 16 02:45:35 2002 +0000 + + rename since glib 2.2 now has the symbol + + 2002-12-15 Havoc Pennington <hp@pobox.com> + + * src/vfolder-query.c (my_str_has_suffix): rename since glib 2.2 + now has the symbol + + * src/menu-process.c (tree_node_find_subdir): fix compilation + + * test/run-test.c (main): add a start on a test program, which + takes a file describing the menu file to load and the expected + results of parsing that menu file, and checks whether the right + results are generated. + +M ChangeLog +M Makefile.am +M configure.in +M src/menu-layout.c +M src/menu-process.c +M src/vfolder-query.c +A test/Makefile.am +A test/run-test.c + +commit 21659e07c876bb66fbe16a11b211322424e96e06 +Author: Havoc Pennington <hp@redhat.com> +Date: Thu Nov 21 22:19:52 2002 +0000 + + fix a bug (find_subdir in iter not dir) + + 2002-11-21 Havoc Pennington <hp@redhat.com> + + * src/menu-entries.c (cached_dir_find_entry): fix a bug + (find_subdir in iter not dir) + + * src/menu-process.c (fill_tree_node_from_menu_node): fill in a + name for each TreeNode + +M ChangeLog +M src/menu-entries.c +M src/menu-entries.h +M src/menu-process.c +M src/menu-process.h + +commit 12fcf30e6f1040bfd5d9139d1329e96af053b0d6 +Author: Havoc Pennington <hp@pobox.com> +Date: Mon Nov 18 22:34:06 2002 +0000 + + sync + +M src/menu-entries.c +M src/menu-entries.h +M src/menu-layout.c +M src/menu-layout.h +M src/menu-process.c + +commit 7eb20ca89df580031e2561b9e804b3306cf57fed +Author: Havoc Pennington <hp@pobox.com> +Date: Mon Nov 18 05:11:54 2002 +0000 + + commit some more hacking on new menu format + +M src/Makefile.am +M src/canonicalize.c +M src/menu-entries.c +M src/menu-entries.h +M src/menu-layout.c +M src/menu-layout.h +A src/menu-process.c +A src/menu-process.h + +commit 9ad85a6e66f8f55300e18849caa9d86d093242df +Author: Havoc Pennington <hp@pobox.com> +Date: Sun Nov 17 06:00:02 2002 +0000 + + sync some hacking on new menu spec + +A src/canonicalize.c +A src/canonicalize.h +A src/menu-entries.c +A src/menu-entries.h +A src/menu-layout.c +A src/menu-layout.h + +commit b535a3cfffc97d053203eff003fe1d84c2fb053f +Author: Havoc Pennington <hp@redhat.com> +Date: Wed Aug 7 01:22:56 2002 +0000 + + add another unlink() for .directory files + + 2002-08-06 Havoc Pennington <hp@redhat.com> + + * src/vfolder-query.c (symlink_recurse_nodes): add another + unlink() for .directory files + +M ChangeLog +M src/vfolder-query.c + +commit 7fa8528c3ceff10a166e8403da3f3337d0537010 +Author: Havoc Pennington <hp@redhat.com> +Date: Wed Aug 7 01:03:11 2002 +0000 + + unlink symlink before trying to create it again, to avoid errors and be + + 2002-08-06 Havoc Pennington <hp@redhat.com> + + * src/vfolder-query.c (symlink_recurse_nodes): unlink symlink + before trying to create it again, to avoid errors and be sure + we replace the old link. + +M ChangeLog +M src/vfolder-query.c + +commit cfd78005708d5bebd2f00be5176ec2eb8ffbecdd +Author: Havoc Pennington <hp@redhat.com> +Date: Sun Aug 4 18:16:52 2002 +0000 + + create target directory if it doesn't exist. + + 2002-08-04 Havoc Pennington <hp@redhat.com> + + * src/install.c (main): create target directory if it doesn't + exist. + + * configure.in: 0.3 + +M ChangeLog +A INSTALL +M configure.in +M src/install.c + +commit 0a4715e8a7371b1bdda57c558f158cee34ccf0f6 +Author: Havoc Pennington <hp@redhat.com> +Date: Fri Aug 2 02:02:22 2002 +0000 + + when complaining about a duplicate, say where the other one is. + + 2002-08-01 Havoc Pennington <hp@redhat.com> + + * src/vfolder-query.c (add_or_free_desktop_file): when complaining + about a duplicate, say where the other one is. + (load_tree): only read DATADIR/applications if the menu file + didn't specify any directories. + +M ChangeLog +M src/vfolder-query.c + +commit 7e1c8495091d3f04911619656edb7a8e6f739b8c +Author: Havoc Pennington <hp@redhat.com> +Date: Fri Aug 2 01:55:14 2002 +0000 + + when complaining about a duplicate, say where the other one is. + + 2002-08-01 Havoc Pennington <hp@redhat.com> + + * src/vfolder-query.c (add_or_free_desktop_file): when complaining + about a duplicate, say where the other one is. + +M ChangeLog +M src/vfolder-query.c + +commit 2eeb9f0ab3ba404b83197d489ee327b09be29085 +Author: Havoc Pennington <hp@redhat.com> +Date: Wed Jul 24 03:52:33 2002 +0000 + + actually get rid of desktop files that should not be shown following + + 2002-07-24 Havoc Pennington <hp@redhat.com> + + * src/vfolder-query.c (add_or_free_desktop_file): actually + get rid of desktop files that should not be shown following + OnlyShowIn + +M ChangeLog +M src/vfolder-query.c + +commit 363a9f309a4f648a1b5ce97da16e097a3e12dfda +Author: Havoc Pennington <hp@redhat.com> +Date: Mon Jul 22 14:28:35 2002 +0000 + + add --print-available option + + 2002-07-22 Havoc Pennington <hp@redhat.com> + + * src/gen-compat-tree.c: add --print-available option + + * src/vfolder-query.c: add function to print out all the + desktop files that would be used by a menu file + +M ChangeLog +M src/gen-compat-tree.c +M src/vfolder-query.c +M src/vfolder-query.h + +commit e97999c4970661aaa0e7fa6cca9d4aaa98431d2a +Author: Havoc Pennington <hp@redhat.com> +Date: Tue Jul 9 15:28:33 2002 +0000 + + fix up "KDE Desktop Entry" + + 2002-07-09 Havoc Pennington <hp@redhat.com> + + * src/validate.c (desktop_file_fixup): fix up "KDE Desktop Entry" + + * src/desktop_file.c (gnome_desktop_file_rename_section): new + function + (gnome_desktop_file_has_section): new function + +M ChangeLog +M src/desktop_file.c +M src/desktop_file.h +M src/validate.c + +commit d664c3712d85e76872942577be628b2cfe2e551e +Author: Havoc Pennington <hp@redhat.com> +Date: Tue Jul 9 15:18:05 2002 +0000 + + fix a memmove to use bytes instead of number of lines, fixes a crash + + 2002-07-09 Havoc Pennington <hp@redhat.com> + + * src/desktop_file.c (gnome_desktop_file_unset_internal): fix a + memmove to use bytes instead of number of lines, fixes a crash + +M ChangeLog +M src/desktop_file.c + +commit 39cdf03f94ce8a511259019e9cfc67f7e9511a65 +Author: Havoc Pennington <hp@redhat.com> +Date: Fri Jun 21 22:02:37 2002 +0000 + + validate that KDE/GNOME are spelled all-caps in OnlyShowIn + + 2002-06-21 Havoc Pennington <hp@redhat.com> + + * src/validate.c: validate that KDE/GNOME are spelled all-caps in + OnlyShowIn + + * src/install.c: add a --remove-key option to remove bogus keys + + * src/validate.c (validate_strings): check that string list keys + end in a semicolon + +M ChangeLog +M src/install.c +M src/validate.c + +commit d814b584606950ca5fa31c0ecbf3689ec2ca06be +Author: Havoc Pennington <hp@redhat.com> +Date: Fri Jun 21 20:03:00 2002 +0000 + + implement --copy-name-to-generic-name, --copy-generic-name-to-name + + 2002-06-21 Havoc Pennington <hp@redhat.com> + + * src/install.c (process_one_file): implement + --copy-name-to-generic-name, --copy-generic-name-to-name + + * src/desktop_file.c (gnome_desktop_file_copy_key): new function + (gnome_desktop_file_unset): new + +M ChangeLog +M src/desktop_file.c +M src/desktop_file.h +M src/install.c + +commit a61a592df86e6868b5fe2c4db8ccb884a01d3278 +Author: Havoc Pennington <hp@pobox.com> +Date: Sun Jun 16 04:57:30 2002 +0000 + + fix delete_original flag so it actually gets filled in and works + + 2002-06-16 Havoc Pennington <hp@pobox.com> + + * src/install.c: fix delete_original flag so it actually gets + filled in and works + +M ChangeLog +M src/install.c + +commit fdc95762963d7c0cf41dc053f7f5fe79c7350738 +Author: Havoc Pennington <hp@redhat.com> +Date: Wed Jun 5 17:50:22 2002 +0000 + + 0.2 version + + 2002-06-05 Havoc Pennington <hp@redhat.com> + + * configure.in: 0.2 version + + * src/Makefile.am (desktop_menu_tool_SOURCES): rename + desktop-menu-gen-compat-dir to desktop-menu-tool + +M ChangeLog +M configure.in +M src/Makefile.am +M src/gen-compat-tree.c + +commit 8e875e276160aa3b8f4df878da54dd48d31b892d +Author: Havoc Pennington <hp@pobox.com> +Date: Sun May 26 03:05:08 2002 +0000 + + add OnlyShowIn support. + + 2002-05-25 Havoc Pennington <hp@pobox.com> + + * src/vfolder-query.c (add_or_free_desktop_file): add OnlyShowIn + support. + +M ChangeLog +M src/gen-compat-tree.c +M src/vfolder-query.c +M src/vfolder-query.h + +commit 1b44e0fe285649a0ded80537ef1ac8bed0bbc412 +Author: Havoc Pennington <hp@pobox.com> +Date: Sun May 26 02:52:55 2002 +0000 + + Add the create-a-dir-of-symlinks support. + + 2002-05-25 Havoc Pennington <hp@pobox.com> + + * src/vfolder-query.c (desktop_file_tree_write_symlink_dir): + Add the create-a-dir-of-symlinks support. + + * src/desktop_file.c (gnome_desktop_file_merge_string_into_list): + fix bug when adding the first string in the list. + + * src/vfolder-query.c: handle OnlyUnallocated correctly + +M ChangeLog +M src/desktop_file.c +M src/gen-compat-tree.c +M src/vfolder-query.c +M src/vfolder-query.h + +commit ea3ae9af38c5b91639b230230abcd89dbfb4d399 +Author: Havoc Pennington <hp@pobox.com> +Date: Sat May 25 22:20:27 2002 +0000 + + handle OnlyUnallocated correctly + + 2002-05-25 Havoc Pennington <hp@pobox.com> + + * src/vfolder-query.c: handle OnlyUnallocated correctly + +M ChangeLog +M src/vfolder-query.c + +commit 8747f23472c676050ed20779a372594a415bd88b +Author: Havoc Pennington <hp@pobox.com> +Date: Sat May 25 21:38:50 2002 +0000 + + sync + +M src/desktop_file.c +M src/vfolder-parser.c +M src/vfolder-parser.h +M src/vfolder-query.c + +commit ae2e0112247e2051365fa4b16d8c143760c0c6e9 +Author: Havoc Pennington <hp@pobox.com> +Date: Sat May 25 17:10:17 2002 +0000 + + roughly functional folder parser, now need to do queries + +M ChangeLog +M src/Makefile.am +M src/desktop_file.c +M src/gen-compat-tree.c +M src/install.c +M src/validate.c +M src/validate.h +M src/validator.c +M src/vfolder-parser.c +M src/vfolder-parser.h +M src/vfolder-query.c + +commit fb84475184e0db6d0290a5c37669dfa1b3fe13a3 +Author: Havoc Pennington <hp@pobox.com> +Date: Sat May 25 15:26:46 2002 +0000 + + add missing file + +A src/gen-compat-tree.c + +commit 3bca6ce565162dc8d438d8d90f89057b566609e1 +Author: Havoc Pennington <hp@pobox.com> +Date: Fri May 24 23:26:26 2002 +0000 + + sync + +M src/Makefile.am +M src/desktop_file.c +M src/desktop_file.h +M src/validate.c +M src/vfolder-parser.c +M src/vfolder-parser.h +A src/vfolder-query.c +A src/vfolder-query.h + +commit f18dad8924d65ccf912998563ced1bd8fc2787b9 +Author: Havoc Pennington <hp@pobox.com> +Date: Thu May 23 22:30:13 2002 +0000 + + sync + +M src/vfolder-parser.c + +commit cac685aa505c0d314d4feb4bd1528ad4e498d414 +Author: Havoc Pennington <hp@pobox.com> +Date: Wed May 22 22:05:35 2002 +0000 + + making a backup + +M src/vfolder-parser.c +M src/vfolder-parser.h + +commit e5472f378207808d909441d2819c99bcb56ccf72 +Author: Havoc Pennington <hp@pobox.com> +Date: Tue May 21 21:42:12 2002 +0000 + + sketch out the code via cut-and-paste + +A src/vfolder-parser.c +A src/vfolder-parser.h + +commit 4c1df1e03626592d022c1a5aad7ef4b4b8f175b3 +Author: Havoc Pennington <hp@pobox.com> +Date: Tue May 21 20:16:05 2002 +0000 + + some stuff that should have been commited a while ago + +M README +M src/install.c + +commit 510b2cf30369d4197814eb86cd611b5b2c4a2c71 +Author: Havoc Pennington <hp@pobox.com> +Date: Thu May 9 14:37:47 2002 +0000 + + validate the generated file not the original, and fix certain + problems such as a broken Encoding field automatically. + +M src/desktop_file.c +M src/install.c +M src/validate.c + +commit 21c4ab5ffe06c93a6dbab90d3dc5033457e51ef1 +Author: Havoc Pennington <hp@pobox.com> +Date: Wed May 8 22:45:26 2002 +0000 + + add validation to the desktop file installer + +M src/Makefile.am +M src/desktop_file.h +M src/install.c +M src/validate.c +A src/validate.h +A src/validator.c + +commit d9670add585b1a240241267f7a8d401c42a6147c +Author: Havoc Pennington <hp@pobox.com> +Date: Wed May 8 21:32:22 2002 +0000 + + add/remove category/onlyshowin implemented + +M src/desktop_file.c +M src/desktop_file.h +M src/install.c + +commit 81f02fc96534f4761313ef387fcb9490f568ab56 +Author: Havoc Pennington <hp@pobox.com> +Date: Tue May 7 22:22:31 2002 +0000 + + implement --add-category + +M src/desktop_file.c +M src/desktop_file.h +M src/install.c + +commit 10afee4b6ceb1381cfcaad9ac23f76fc47d15b04 +Author: Havoc Pennington <hp@pobox.com> +Date: Tue May 7 22:10:15 2002 +0000 + + initial desktop_file_set_raw implementation + +M src/desktop_file.c +M src/desktop_file.h + +commit 2404e9496031da3870292198272634e0575a11e6 +Author: Havoc Pennington <hp@pobox.com> +Date: Tue May 7 20:34:50 2002 +0000 + + sync, includes fixes from Alex + +M src/desktop_file.c +M src/desktop_file.h +M src/install.c +M src/validate.c + +commit 384b863f6308a38fbcaa134afd519ec41bacf562 +Author: Havoc Pennington <hp@pobox.com> +Date: Mon May 6 22:58:00 2002 +0000 + + fixes + +M src/install.c + +commit ecdd19e0847789f0572e0b9c1d3901b459d28b9b +Author: Havoc Pennington <hp@pobox.com> +Date: Mon May 6 22:53:06 2002 +0000 + + initial sketching-out of desktop-file-install program + +M configure.in +M src/Makefile.am +M src/desktop_file.c +M src/desktop_file.h +A src/gen_table.py +M src/install.c +M src/validate.c + +commit fe13f72775439d87973d2ab2467a9f52852e44be +Author: Havoc Pennington <hp@pobox.com> +Date: Mon May 6 21:08:30 2002 +0000 + + initial import + +A AUTHORS +A COPYING +A ChangeLog +A Makefile.am +A NEWS +A README +A acconfig.h +A autogen.sh +A configure.in +A src/Makefile.am +A src/desktop_file.c +A src/desktop_file.h +A src/install.c +A src/validate.c @@ -0,0 +1,31 @@ +Hacking on desktop-file-utils +============================= + + + The development occurs in git: + + http://cgit.freedesktop.org/desktop-file-utils/ + + For information on how to access freedesktop.org git please read: + + http://www.freedesktop.org/wiki/Infrastructure/git + + + Please send patches as bug reports in freedesktop.org Bugzilla: + + https://bugs.freedesktop.org/ (product desktop-file-utils) + + Your patch should be in unified diff form (the -u option to GNU + diff). See also: + + http://live.gnome.org/GnomeLove/SubmittingPatches + + + Please try and send a patch against a recent version of this package. + Patches against git master are most preferable. + + + Don't commit any but the most trivial patches without approval. + + + Exceptions to this are: + + - Translators may commit basic i18n related patches to the build + setup. + - Build sheriff are welcome - in accordance with the relevant build + sheriff constraints. diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..d89da19 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,35 @@ +SUBDIRS = src man misc + +ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} + +EXTRA_DIST = HACKING + +MAINTAINERCLEANFILES = \ + $(srcdir)/aclocal.m4 \ + $(srcdir)/config.guess \ + $(srcdir)/config.h.in \ + $(srcdir)/config.sub \ + $(srcdir)/depcomp \ + $(srcdir)/elisp-comp \ + $(srcdir)/install-sh \ + $(srcdir)/ltmain.sh \ + $(srcdir)/missing \ + `find "$(srcdir)" -type f -name Makefile.in -print` \ + $(srcdir)/configure \ + $(srcdir)/m4/*.m4 + +CHANGELOG_GIT_RANGE = +dist-hook: + $(AM_V_GEN)if test -d "$(srcdir)/.git"; then \ + ( echo '# Generated by Makefile. Do not edit.'; echo; \ + GIT_DIR="$(top_srcdir)/.git" ./missing --run \ + git log $(CHANGELOG_GIT_RANGE) --no-color -M -C --name-status ) \ + > ChangeLog.tmp \ + && mv -f ChangeLog.tmp $(distdir)/ChangeLog \ + || ( rm -f ChangeLog.tmp ; echo Failed to generate ChangeLog >&2 ); \ + else \ + echo A git checkout is required to generate ChangeLog >&2; \ + fi + +GITIGNOREFILES = $(PACKAGE)-\*.tar.{gz,bz2,xz} +-include $(top_srcdir)/git.mk diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..5c5fc1c --- /dev/null +++ b/Makefile.in @@ -0,0 +1,722 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = . +DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(top_srcdir)/configure AUTHORS COPYING ChangeLog NEWS depcomp \ + elisp-comp install-sh missing +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +GZIP_ENV = --best +DIST_ARCHIVES = $(distdir).tar.xz +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DESKTOP_FILE_UTILS_CFLAGS = @DESKTOP_FILE_UTILS_CFLAGS@ +DESKTOP_FILE_UTILS_LIBS = @DESKTOP_FILE_UTILS_LIBS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EMACS = @EMACS@ +EMACSLOADPATH = @EMACSLOADPATH@ +EXEEXT = @EXEEXT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +lispdir = @lispdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = src man misc +ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} +EXTRA_DIST = HACKING +MAINTAINERCLEANFILES = \ + $(srcdir)/aclocal.m4 \ + $(srcdir)/config.guess \ + $(srcdir)/config.h.in \ + $(srcdir)/config.sub \ + $(srcdir)/depcomp \ + $(srcdir)/elisp-comp \ + $(srcdir)/install-sh \ + $(srcdir)/ltmain.sh \ + $(srcdir)/missing \ + `find "$(srcdir)" -type f -name Makefile.in -print` \ + $(srcdir)/configure \ + $(srcdir)/m4/*.m4 + +CHANGELOG_GIT_RANGE = +GITIGNOREFILES = $(PACKAGE)-\*.tar.{gz,bz2,xz} +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @$(am__cd) '$(distuninstallcheck_dir)' \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile config.h +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ + ctags-recursive install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ + dist-hook dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ + distcheck distclean distclean-generic distclean-hdr \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + +dist-hook: + $(AM_V_GEN)if test -d "$(srcdir)/.git"; then \ + ( echo '# Generated by Makefile. Do not edit.'; echo; \ + GIT_DIR="$(top_srcdir)/.git" ./missing --run \ + git log $(CHANGELOG_GIT_RANGE) --no-color -M -C --name-status ) \ + > ChangeLog.tmp \ + && mv -f ChangeLog.tmp $(distdir)/ChangeLog \ + || ( rm -f ChangeLog.tmp ; echo Failed to generate ChangeLog >&2 ); \ + else \ + echo A git checkout is required to generate ChangeLog >&2; \ + fi +-include $(top_srcdir)/git.mk + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: @@ -0,0 +1,259 @@ +============ +Version 0.20 +============ + + desktop-file-install + - fix list of locale strings without trailing slash (Matthias Clasen) + + desktop-file-validate + - add MATE and Razor to list of registered environments (Vincent) + - validate Desktop Actions (Giovanni Campagna, Vincent) + +============ +Version 0.19 +============ + + desktop-file-install + - respect order of edit options (Vincent) + - add --add-not-show-in/--remove-not-show-in options (Vincent) + - add options to set Name, GenericName, Comment, Icon keys (Vincent) + - add --set-key/--set-value options to set an arbitrary key (Vincent) + - remove localized keys when setting/removing a key (Vincent) + - copy translations when copying a key (Vincent) + - create a desktop-file-edit symlink to desktop-file-install to simply edit + .desktop files (without having to pass --dir) (Vincent) + - look at RPM_BUILD_ROOT to know where to install desktop files + - minor UI improvements (Vincent) + + desktop-file-validate + - add Unity to list of registered environments (Vincent) + - deal with various zz-application/zz-winassoc-XXX mime types (Vincent) + - mark all zz-application/* MIME types as aliases (Vincent) + - add support for updated Keywords key (Vincent) + + update-desktop-database + - deal with various zz-application/zz-winassoc-XXX mime types (Vincent) + - mark all zz-application/* MIME types as aliases (Vincent) + - ignore desktop files with Hidden=true (Vincent) + + misc + - modernize build system a bit (Vincent) + - update man pages (Vincent) + +============ +Version 0.18 +============ + + desktop-file-validate + - accept x-scheme-handler/* mime types (Vincent) + + update-desktop-database + - sort mime types alphabetically in generated cache (Vincent) + - accept x-scheme-handler/* mime types (Vincent) + + misc + - improve build system (Vincent) + - minor documentation fixes (Vincent) + +============ +Version 0.17 +============ + + desktop-file-validate + - accept chemical/* mime types as valid types (Vincent) + - make icon names with an extension for Icon key a non-fatal error (Vincent) + + update-desktop-database + - accept chemical/* mime types as valid types (Vincent) + - ignore --verbose if --quiet is also passed (Vincent) + - make sure to always output lists in the keyfile we generate (Vincent) + + misc + - improve build system (Vincent) + - update documentation (Vincent) + - add man pages (Vincent) + +============ +Version 0.16 +============ + + desktop-file-install + - do not unlink the destination file if it's the same as the source file in + desktop-file-install (Vincent) + + desktop-file-validate + - check that a main category is included in the Categories (Vincent) + - check that categories required by another one are present (Vincent) + - do not always show warnings about KDE specific uses (Vincent) + - check that the Comment does not look like the Name and the GenericName + (Vincent) + - display error about multiple keys with the same name earlier (Vincent) + - improve MIME type check to make sure that the MIME types are valid + (Vincent) + - add LXDE in the list of registered OnlyShowIn values (Vincent) + - add "warning" to error strings to make them easily greppable (Vincent) + - handle AutostartCondition key, as proposed for the autostart specification + and used in GNOME (Vincent) + - accept empty Categories key as valid (Vincent) + - make new errors non-fatal to give some time to maintainers to fix their + .desktop file after a release of desktop-file-utils (Vincent) + - plug leak (Vincent) + - code cleanups (Vincent) + + update-desktop-database + - improve MIME type check to make sure that the MIME types are valid + (Vincent) + - improve error messages (Erik Hovland, Vincent) + - fix format string vulnerability warning (Vincent) + + misc + - use AM_SILENT_RULES (Vincent) + - improve build system (Vincent) + +============ +Version 0.15 +============ + + o make the extension check for Icon key a warning instead of an error for now + (Ray Strode) + o Fix a crash in update-desktop-database when there's no group (Vincent) + o Fix a crash in the validator happening for very small lines (Vincent) + +============ +Version 0.14 +============ + + o update of the Emacs editing mode for .desktop files (Ville Skyttä) + o make desktop-file-install print an error when trying to install a + non-existing desktop file, or a desktop file that can't be read (Vincent) + o make the validator check the content of the Icon key (Vincent) + o make the validator accept X-Foo as a valid environment (this was added to + the spec) (Stanislav Brabec, Vincent) + o really handle the -m command line argument for desktop-file-install + (Matthias Clasen) + o make desktop-file-install accept as one valid argument multiple + categories/only-show-in/mime-types values. Now --add-category="GNOME;GTK" + works as expected. (Vincent) + o make desktop-file-install validate the created desktop file before removing + the original file, and unlink it if it's not valid (Vincent) + o code cleanups for desktop-file-install (Vincent) + +============ +Version 0.13 +============ + + o rewrite validator, and update it for desktop entry specification 1.0. + The validator should be stricter and report more useful messages. + (Vincent) + o add --warn-kde and --no-warn-deprecated command line options to + desktop-file-validate (Vincent) + o port desktop-file-install to GKeyFile (Vincent) + o don't require --vendor for desktop-file-install (Vincent) + o some general module cleanup (Vincent) + +============ +Version 0.12 +============ + + o improves category validation code to not catch false positives (Vincent Fretin, Ville Skyttä, Ray Strode, Vincent Untz) + o make category validation code non-fatal (Ray) + o fix mem leaks and double frees (Pascal Terjan) + +============ +Version 0.11 +============ + + o Validate desktop file categories (Emmet Hikory, Vincent Untz) + o Use GKeyFile instead of the old egg code in update-desktop-database (Vincent) + o Use GOption instead of popt (Vincent) + o Fix grammar problem in one of the strings (Moritz Barsnick) + o NULL terminate search patch in update-desktop-database (Mike Hearn) + o Fix language to encoding mapping to match spec (Ville Skyttä) + +============ +Version 0.10 +============ + + o Remove all menus code (Mark McLoughlin) + o Don't try and add key/value pairs to comments (Miloslav Trmac) + +=========== +Version 0.9 +=========== + + o Many update-desktop-database improvements (Ray Strode, Dan Williams) + o Fix desktop-file-install --remove-only-show-in (Ray Strode) + +=========== +Version 0.8 +=========== + + o Fix various leaks (Kjartan Maraas) + o Update with latest libegg code (Ray Strode) + + o Menu method work (Mark McLoughlin, Dan Williams) + + Reload the menu when .desktop/.directory files change + + Respect NoDisplay in .desktop/.directory files + + Remove empty submenus + + Report the last modification time of the tree + + Support setting the OnlyShowIn name + + Add a reasonable default set of schemes + +=========== +Version 0.7 +=========== + + o Add update-desktop-database (Ray Strode) + o Emacs editing mode for .desktop files (Ville Skyttä) + o Update to latest spec, improve error messages (Ville Skyttä) + o Warning fixes (Mark McLoughlin) + o distcheck fixes (Jonathan Blandford) + +=========== +Version 0.6 +=========== + + o Bring up to date with version 0.8 of the menu spec + o Don't crash when a .desktop file is a symlink to a non-existant file + +=========== +Version 0.5 +=========== + + o Don't segfault with .desktop files which have a leading comment + +=========== +Version 0.4 +=========== + + o Add support for "Desktop Action" sections + +=========== +Version 0.3 +=========== + + o Create target dir of desktop-file-install if nonexistent; + o improve some error messages + o fix OnlyShowIn? handling + o add --print-available option to dump desktop files being considered by desktop-menu-tool + o rename obsolete [KDE Desktop Entry] section if found + o fix a crash + o verify proper spelling of KDE and GNOME in OnlyShowIn? + o add a --remove-key option; check that string lists end in a semicolon + o add --copy-name-to-generic-name and vice versa + o fix bug in --delete-original that made it not work + +=========== +Version 0.2 +=========== + + o Adds desktop-menu-tool to parse vfolder menus and generate a symlink tree or just print them out. + +=========== +Version 0.1 +=========== + + o Initial release. Contains desktop-file-validate and desktop-file-install. + + + @@ -0,0 +1,55 @@ +desktop-file-utils +================== + +http://www.freedesktop.org/wiki/Software/desktop-file-utils + +desktop-file-utils contains a few command line utilities for working +with desktop entries. + +desktop-file-validate: validates a desktop file and prints warnings/errors + about desktop entry specification violations. + +desktop-file-install: installs a desktop file to the applications directory, + optionally munging it a bit in transit. + +update-desktop-database: updates the database containing a cache of + MIME types handled by desktop files. + +More information about desktop files and the "Desktop Entry +Specification" is available on: + + http://freedesktop.org/wiki/Specifications/desktop-entry-spec + http://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html + +You may download updates to the package from: + + http://www.freedesktop.org/software/desktop-file-utils/releases/ + +To discuss desktop-file-utils, you may use the xdg mailing list: + + http://lists.freedesktop.org/mailman/listinfo/xdg + + +Installation +============ + +See the file 'INSTALL'. If you are not using a released version of +desktop-file-utils (for example, if you checked out the code from git), +you first need to run './autogen.sh'. + + +How to report bugs +================== + +Bugs should be reported to the freedesktop.org bug tracking system: + + https://bugs.freedesktop.org/ (product desktop-file-utils) + +You will need to create an account for yourself. + +Please read the following page on how to prepare a useful bug report: + + https://bugs.freedesktop.org/page.cgi?id=bug-writing.html + +Please read the HACKING file for information on where to send changes or +bugfixes for this package. diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..2a9da06 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,1216 @@ +# generated automatically by aclocal 1.11.1 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, +[m4_warning([this file was generated for autoconf 2.68. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.11.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 9 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 10 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 5 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 16 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, +# 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 10 + +# AM_PATH_LISPDIR +# --------------- +AC_DEFUN([AM_PATH_LISPDIR], +[AC_PREREQ([2.60])dnl + # If set to t, that means we are running in a shell under Emacs. + # If you have an Emacs named "t", then use the full path. + test x"$EMACS" = xt && EMACS= + AC_CHECK_PROGS([EMACS], [emacs xemacs], [no]) + AC_ARG_VAR([EMACS], [the Emacs editor command]) + AC_ARG_VAR([EMACSLOADPATH], [the Emacs library search path]) + AC_ARG_WITH([lispdir], + [ --with-lispdir override the default lisp directory], + [ lispdir="$withval" + AC_MSG_CHECKING([where .elc files should go]) + AC_MSG_RESULT([$lispdir])], + [ + AC_CACHE_CHECK([where .elc files should go], [am_cv_lispdir], [ + if test $EMACS != "no"; then + if test x${lispdir+set} != xset; then + # If $EMACS isn't GNU Emacs or XEmacs, this can blow up pretty badly + # Some emacsen will start up in interactive mode, requiring C-x C-c to exit, + # which is non-obvious for non-emacs users. + # Redirecting /dev/null should help a bit; pity we can't detect "broken" + # emacsen earlier and avoid running this altogether. + AC_RUN_LOG([$EMACS -batch -q -eval '(while load-path (princ (concat (car load-path) "\n")) (setq load-path (cdr load-path)))' </dev/null >conftest.out]) + am_cv_lispdir=`sed -n \ + -e 's,/$,,' \ + -e '/.*\/lib\/x*emacs\/site-lisp$/{s,.*/lib/\(x*emacs/site-lisp\)$,${libdir}/\1,;p;q;}' \ + -e '/.*\/share\/x*emacs\/site-lisp$/{s,.*/share/\(x*emacs/site-lisp\),${datarootdir}/\1,;p;q;}' \ + conftest.out` + rm conftest.out + fi + fi + test -z "$am_cv_lispdir" && am_cv_lispdir='${datadir}/emacs/site-lisp' + ]) + lispdir="$am_cv_lispdir" +]) +AC_SUBST([lispdir]) +])# AM_PATH_LISPDIR + +AU_DEFUN([ud_PATH_LISPDIR], [AM_PATH_LISPDIR]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# (`yes' being less verbose, `no' or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], +[ --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0')]) +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar <conftest.tar]) + grep GrepMe conftest.dir/file >/dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# serial 1 (pkg-config-0.24) +# +# Copyright © 2004 Scott James Remnant <scott@netsplit.com>. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) +AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) +AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +# only at the first occurence in configure.ac, so if the first place +# it's called might be skipped (such as if it is within an "if", you +# have to call PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$$1"; then + pkg_cv_[]$1="$$1" + elif test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], + [pkg_failed=yes]) + else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT])dnl + ]) +elif test $pkg_failed = untried; then + AC_MSG_RESULT([no]) + m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see <http://pkg-config.freedesktop.org/>.])dnl + ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + $3 +fi[]dnl +])# PKG_CHECK_MODULES + diff --git a/config.h.in b/config.h.in new file mode 100644 index 0000000..dd3b02c --- /dev/null +++ b/config.h.in @@ -0,0 +1,25 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Version number of package */ +#undef VERSION diff --git a/configure b/configure new file mode 100755 index 0000000..5e8122c --- /dev/null +++ b/configure @@ -0,0 +1,5242 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.68 for desktop-file-utils 0.20. +# +# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=desktop-file-utils>. +# +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +# Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + # Preserve -v and -x to the replacement shell. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; + esac + exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: https://bugs.freedesktop.org/enter_bug.cgi?product=desktop-file-utils +$0: about your system, including any error possibly output +$0: before this message. Then install a modern shell, or +$0: manually run the script under such a shell if you do +$0: have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 </dev/null +exec 6>&1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='desktop-file-utils' +PACKAGE_TARNAME='desktop-file-utils' +PACKAGE_VERSION='0.20' +PACKAGE_STRING='desktop-file-utils 0.20' +PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=desktop-file-utils' +PACKAGE_URL='' + +ac_unique_file="src/validate.h" +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +lispdir +EMACSLOADPATH +EMACS +DESKTOP_FILE_UTILS_LIBS +DESKTOP_FILE_UTILS_CFLAGS +PKG_CONFIG_LIBDIR +PKG_CONFIG_PATH +PKG_CONFIG +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +LN_S +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +enable_dependency_tracking +with_lispdir +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +PKG_CONFIG +PKG_CONFIG_PATH +PKG_CONFIG_LIBDIR +DESKTOP_FILE_UTILS_CFLAGS +DESKTOP_FILE_UTILS_LIBS +EMACS +EMACSLOADPATH' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used" >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures desktop-file-utils 0.20 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root + [DATAROOTDIR/doc/desktop-file-utils] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of desktop-file-utils 0.20:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0') + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-lispdir override the default lisp directory + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a + nonstandard directory <lib dir> + LIBS libraries to pass to the linker, e.g. -l<library> + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if + you have headers in a nonstandard directory <include dir> + PKG_CONFIG path to pkg-config utility + PKG_CONFIG_PATH + directories to add to pkg-config's search path + PKG_CONFIG_LIBDIR + path overriding pkg-config's built-in search path + DESKTOP_FILE_UTILS_CFLAGS + C compiler flags for DESKTOP_FILE_UTILS, overriding pkg-config + DESKTOP_FILE_UTILS_LIBS + linker flags for DESKTOP_FILE_UTILS, overriding pkg-config + EMACS the Emacs editor command + EMACSLOADPATH + the Emacs library search path + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=desktop-file-utils>. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +desktop-file-utils configure 0.20 +generated by GNU Autoconf 2.68 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by desktop-file-utils $as_me 0.20, which was +generated by GNU Autoconf 2.68. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + +am__api_version='1.11' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='desktop-file-utils' + VERSION='0.20' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 +$as_echo_n "checking how to create a ustar tar archive... " >&6; } +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar plaintar pax cpio none' +_am_tools=${am_cv_prog_tar_ustar-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + { echo "$as_me:$LINENO: $_am_tar --version" >&5 + ($_am_tar --version) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && break + done + am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x ustar -w "$$tardir"' + am__tar_='pax -L -x ustar -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H ustar -L' + am__tar_='find "$tardir" -print | cpio -o -H ustar -L' + am__untar='cpio -i -H ustar -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_ustar}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 + (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + rm -rf conftest.dir + if test -s conftest.tar; then + { echo "$as_me:$LINENO: $am__untar <conftest.tar" >&5 + ($am__untar <conftest.tar) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + grep GrepMe conftest.dir/file >/dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +if ${am_cv_prog_tar_ustar+:} false; then : + $as_echo_n "(cached) " >&6 +else + am_cv_prog_tar_ustar=$_am_tool +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 +$as_echo "$am_cv_prog_tar_ustar" >&6; } + + + + + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=0;; +esac +AM_BACKSLASH='\' + + +ac_config_headers="$ac_config_headers config.h" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdio.h> +#include <sys/types.h> +#include <sys/stat.h> +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + +if test "x$GCC" = "xyes"; then + case " $CFLAGS " in + *[\ \ ]-Wall[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wall" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-Wchar-subscripts[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wchar-subscripts" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-Wmissing-declarations[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wmissing-declarations" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-Wmissing-prototypes[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wmissing-prototypes" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-Wnested-externs[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wnested-externs" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-Wpointer-arith[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wpointer-arith" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-Wcast-align[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wcast-align" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-Wsign-compare[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wsign-compare" ;; + esac + + if test "x$enable_ansi" = "xyes"; then + case " $CFLAGS " in + *[\ \ ]-ansi[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -ansi" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-pedantic[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -pedantic" ;; + esac + fi + if test x$enable_gcov = xyes; then + case " $CFLAGS " in + *[\ \ ]-fprofile-arcs[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -fprofile-arcs" ;; + esac + case " $CFLAGS " in + *[\ \ ]-ftest-coverage[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -ftest-coverage" ;; + esac + + ## remove optimization + CFLAGS=`echo "$CFLAGS" | sed -e 's/-O[0-9]*//g'` + fi + else + if test x$enable_gcov = xyes; then + as_fn_error $? "--enable-gcov can only be used with gcc" "$LINENO" 5 + fi +fi + +# compress spaces in flags +CFLAGS=`echo "$CFLAGS" | sed -e 's/ +/ /g'` +CPPFLAGS=`echo "$CPPFLAGS" | sed -e 's/ +/ /g'` + + + + + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DESKTOP_FILE_UTILS" >&5 +$as_echo_n "checking for DESKTOP_FILE_UTILS... " >&6; } + +if test -n "$DESKTOP_FILE_UTILS_CFLAGS"; then + pkg_cv_DESKTOP_FILE_UTILS_CFLAGS="$DESKTOP_FILE_UTILS_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.8.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.8.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_DESKTOP_FILE_UTILS_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.8.0" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$DESKTOP_FILE_UTILS_LIBS"; then + pkg_cv_DESKTOP_FILE_UTILS_LIBS="$DESKTOP_FILE_UTILS_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.8.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.8.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_DESKTOP_FILE_UTILS_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.8.0" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + DESKTOP_FILE_UTILS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "glib-2.0 >= 2.8.0" 2>&1` + else + DESKTOP_FILE_UTILS_PKG_ERRORS=`$PKG_CONFIG --print-errors "glib-2.0 >= 2.8.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$DESKTOP_FILE_UTILS_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (glib-2.0 >= 2.8.0) were not met: + +$DESKTOP_FILE_UTILS_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables DESKTOP_FILE_UTILS_CFLAGS +and DESKTOP_FILE_UTILS_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables DESKTOP_FILE_UTILS_CFLAGS +and DESKTOP_FILE_UTILS_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see <http://pkg-config.freedesktop.org/>. +See \`config.log' for more details" "$LINENO" 5; } +else + DESKTOP_FILE_UTILS_CFLAGS=$pkg_cv_DESKTOP_FILE_UTILS_CFLAGS + DESKTOP_FILE_UTILS_LIBS=$pkg_cv_DESKTOP_FILE_UTILS_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi + + # If set to t, that means we are running in a shell under Emacs. + # If you have an Emacs named "t", then use the full path. + test x"$EMACS" = xt && EMACS= + for ac_prog in emacs xemacs +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_EMACS+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$EMACS"; then + ac_cv_prog_EMACS="$EMACS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_EMACS="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +EMACS=$ac_cv_prog_EMACS +if test -n "$EMACS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EMACS" >&5 +$as_echo "$EMACS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$EMACS" && break +done +test -n "$EMACS" || EMACS="no" + + + + +# Check whether --with-lispdir was given. +if test "${with_lispdir+set}" = set; then : + withval=$with_lispdir; lispdir="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where .elc files should go" >&5 +$as_echo_n "checking where .elc files should go... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lispdir" >&5 +$as_echo "$lispdir" >&6; } +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where .elc files should go" >&5 +$as_echo_n "checking where .elc files should go... " >&6; } +if ${am_cv_lispdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $EMACS != "no"; then + if test x${lispdir+set} != xset; then + # If $EMACS isn't GNU Emacs or XEmacs, this can blow up pretty badly + # Some emacsen will start up in interactive mode, requiring C-x C-c to exit, + # which is non-obvious for non-emacs users. + # Redirecting /dev/null should help a bit; pity we can't detect "broken" + # emacsen earlier and avoid running this altogether. + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$EMACS -batch -q -eval '(while load-path (princ (concat (car load-path) \"\\n\")) (setq load-path (cdr load-path)))' </dev/null >conftest.out"; } >&5 + ($EMACS -batch -q -eval '(while load-path (princ (concat (car load-path) "\n")) (setq load-path (cdr load-path)))' </dev/null >conftest.out) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + am_cv_lispdir=`sed -n \ + -e 's,/$,,' \ + -e '/.*\/lib\/x*emacs\/site-lisp$/{s,.*/lib/\(x*emacs/site-lisp\)$,${libdir}/\1,;p;q;}' \ + -e '/.*\/share\/x*emacs\/site-lisp$/{s,.*/share/\(x*emacs/site-lisp\),${datarootdir}/\1,;p;q;}' \ + conftest.out` + rm conftest.out + fi + fi + test -z "$am_cv_lispdir" && am_cv_lispdir='${datadir}/emacs/site-lisp' + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_lispdir" >&5 +$as_echo "$am_cv_lispdir" >&6; } + lispdir="$am_cv_lispdir" + +fi + + + + +ac_config_files="$ac_config_files Makefile man/Makefile misc/Makefile src/Makefile" + + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by desktop-file-utils $as_me 0.20, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=desktop-file-utils>." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +desktop-file-utils config.status 0.20 +configured by $0, generated by GNU Autoconf 2.68, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; + "misc/Makefile") CONFIG_FILES="$CONFIG_FILES misc/Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' <conf$$subs.awk | sed ' +/^[^""]/{ + N + s/\n// +} +' >>$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' <confdefs.h | sed ' +s/'"$ac_delim"'/"\\\ +"/g' >>$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..d888cbc --- /dev/null +++ b/configure.ac @@ -0,0 +1,103 @@ +AC_INIT([desktop-file-utils], [0.20], + [https://bugs.freedesktop.org/enter_bug.cgi?product=desktop-file-utils]) +AC_CONFIG_SRCDIR(src/validate.h) + +AM_INIT_AUTOMAKE([1.11 foreign no-dist-gzip dist-xz tar-ustar]) +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) +AC_CONFIG_MACRO_DIR([m4]) +AM_CONFIG_HEADER(config.h) + +AC_PROG_LN_S +AC_PROG_CC + +if test "x$GCC" = "xyes"; then + changequote(,)dnl + case " $CFLAGS " in + *[\ \ ]-Wall[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wall" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-Wchar-subscripts[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wchar-subscripts" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-Wmissing-declarations[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wmissing-declarations" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-Wmissing-prototypes[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wmissing-prototypes" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-Wnested-externs[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wnested-externs" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-Wpointer-arith[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wpointer-arith" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-Wcast-align[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wcast-align" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-Wsign-compare[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wsign-compare" ;; + esac + + if test "x$enable_ansi" = "xyes"; then + case " $CFLAGS " in + *[\ \ ]-ansi[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -ansi" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-pedantic[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -pedantic" ;; + esac + fi + if test x$enable_gcov = xyes; then + case " $CFLAGS " in + *[\ \ ]-fprofile-arcs[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -fprofile-arcs" ;; + esac + case " $CFLAGS " in + *[\ \ ]-ftest-coverage[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -ftest-coverage" ;; + esac + + ## remove optimization + CFLAGS=`echo "$CFLAGS" | sed -e 's/-O[0-9]*//g'` + fi + changequote([,])dnl +else + if test x$enable_gcov = xyes; then + AC_MSG_ERROR([--enable-gcov can only be used with gcc]) + fi +fi + +changequote(,)dnl +# compress spaces in flags +CFLAGS=`echo "$CFLAGS" | sed -e 's/ +/ /g'` +CPPFLAGS=`echo "$CPPFLAGS" | sed -e 's/ +/ /g'` +changequote([,])dnl + +PKG_CHECK_MODULES(DESKTOP_FILE_UTILS, glib-2.0 >= 2.8.0) + +AM_PATH_LISPDIR + +AC_CONFIG_FILES([ +Makefile +man/Makefile +misc/Makefile +src/Makefile +]) + +AC_OUTPUT @@ -0,0 +1,630 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free +# Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to <bug-automake@gnu.org>. +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u="sed s,\\\\\\\\,/,g" + depmode=msvisualcpp +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> "$depfile" + echo >> "$depfile" + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add `dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mechanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/elisp-comp b/elisp-comp new file mode 100755 index 0000000..ce8c82c --- /dev/null +++ b/elisp-comp @@ -0,0 +1,90 @@ +#!/bin/sh +# Copyright (C) 1995, 2000, 2003, 2004, 2005, 2009 Free Software +# Foundation, Inc. + +scriptversion=2009-04-28.21; # UTC + +# Franc,ois Pinard <pinard@iro.umontreal.ca>, 1995. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to <bug-automake@gnu.org> or send patches to +# <automake-patches@gnu.org>. + +case $1 in + '') + echo "$0: No files. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: elisp-comp [--help] [--version] FILES... + +This script byte-compiles all `.el' files listed as FILES using GNU +Emacs, and put the resulting `.elc' files into the current directory, +so disregarding the original directories used in `.el' arguments. + +This script manages in such a way that all Emacs LISP files to +be compiled are made visible between themselves, in the event +they require or load-library one another. + +Report bugs to <bug-automake@gnu.org>. +EOF + exit $? + ;; + -v | --v*) + echo "elisp-comp $scriptversion" + exit $? + ;; +esac + +if test -z "$EMACS" || test "$EMACS" = "t"; then + # Value of "t" means we are running in a shell under Emacs. + # Just assume Emacs is called "emacs". + EMACS=emacs +fi + +tempdir=elc.$$ + +# Cleanup the temporary directory on exit. +trap 'ret=$?; rm -rf "$tempdir" && exit $ret' 0 +trap '(exit $?); exit' 1 2 13 15 + +mkdir $tempdir +cp "$@" $tempdir + +( + cd $tempdir + echo "(setq load-path (cons nil load-path))" > script + $EMACS -batch -q -l script -f batch-byte-compile *.el || exit $? + mv *.elc .. +) || exit $? + +(exit 0); exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/install-sh b/install-sh new file mode 100755 index 0000000..6781b98 --- /dev/null +++ b/install-sh @@ -0,0 +1,520 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2009-04-28.21; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dst_arg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + -*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/man/Makefile.am b/man/Makefile.am new file mode 100644 index 0000000..8303977 --- /dev/null +++ b/man/Makefile.am @@ -0,0 +1,19 @@ +man_MANS = \ + desktop-file-validate.1 \ + desktop-file-install.1 \ + update-desktop-database.1 + +install-exec-hook: + test -d $(DESTDIR)$(mandir)/man1 || mkdir -p $(DESTDIR)$(mandir)/man1 + cd $(DESTDIR)$(mandir)/man1 && \ + rm -f desktop-file-edit.1 && \ + $(LN_S) -f desktop-file-install.1 desktop-file-edit.1 + +uninstall-hook: + test -d $(DESTDIR)$(mandir)/man1 && \ + cd $(DESTDIR)$(mandir)/man1 && \ + rm -f desktop-file-edit.1 + +EXTRA_DIST = $(man_MANS) + +-include $(top_srcdir)/git.mk diff --git a/man/Makefile.in b/man/Makefile.in new file mode 100644 index 0000000..280ee90 --- /dev/null +++ b/man/Makefile.in @@ -0,0 +1,429 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = man +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +man1dir = $(mandir)/man1 +am__installdirs = "$(DESTDIR)$(man1dir)" +NROFF = nroff +MANS = $(man_MANS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DESKTOP_FILE_UTILS_CFLAGS = @DESKTOP_FILE_UTILS_CFLAGS@ +DESKTOP_FILE_UTILS_LIBS = @DESKTOP_FILE_UTILS_LIBS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EMACS = @EMACS@ +EMACSLOADPATH = @EMACSLOADPATH@ +EXEEXT = @EXEEXT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +lispdir = @lispdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +man_MANS = \ + desktop-file-validate.1 \ + desktop-file-install.1 \ + update-desktop-database.1 + +EXTRA_DIST = $(man_MANS) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign man/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-man1: $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list=''; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(MANS) +installdirs: + for dir in "$(DESTDIR)$(man1dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-exec-hook +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man1 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-man + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +uninstall-man: uninstall-man1 + +.MAKE: install-am install-exec-am install-strip uninstall-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-exec-hook \ + install-html install-html-am install-info install-info-am \ + install-man install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-hook uninstall-man uninstall-man1 + + +install-exec-hook: + test -d $(DESTDIR)$(mandir)/man1 || mkdir -p $(DESTDIR)$(mandir)/man1 + cd $(DESTDIR)$(mandir)/man1 && \ + rm -f desktop-file-edit.1 && \ + $(LN_S) -f desktop-file-install.1 desktop-file-edit.1 + +uninstall-hook: + test -d $(DESTDIR)$(mandir)/man1 && \ + cd $(DESTDIR)$(mandir)/man1 && \ + rm -f desktop-file-edit.1 + +-include $(top_srcdir)/git.mk + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/man/desktop-file-install.1 b/man/desktop-file-install.1 new file mode 100644 index 0000000..8bd6a7e --- /dev/null +++ b/man/desktop-file-install.1 @@ -0,0 +1,173 @@ +.\" +.\" desktop-file-install manual page. +.\" (C) 2010 Vincent Untz (vuntz@gnome.org) +.\" +.TH DESKTOP-FILE-INSTALL 1 FREEDESKTOP.ORG +.SH NAME +desktop-file-install, desktop-file-edit \- Installation and edition of desktop files +.SH SYNOPSIS +.B desktop-file-install [\-\-dir=DIR] [\-m MODE|\-\-mode=MODE] +.B [\-\-vendor=VENDOR] [\-\-delete-original] +.B [\-\-rebuild-mime-info-cache] +.B [EDITOPTION]... FILE... +.PP +.B desktop-file-edit [EDITOPTION]... FILE +.SH DESCRIPTION +The \fIdesktop-file-install\fP program is a tool to install, and +optionally edit, desktop files. The \fIdesktop-file-edit\fP program is a +tool to edit a desktop file. They are mostly useful for developers and +packagers. +.PP +Various options are available to edit the desktop files. The edit +options can be specified more than once and will be processed in the +same order as the options passed to the program. +.PP +\fIdesktop-file-install\fP and \fIdesktop-file-edit\fP will always try +to validate the resulting desktop file. A failure to validate might lead +to the abortion of the installation of the desktop files. +.PP +The list of registered categories and desktop environments is defined in +the Menu specification: +\fIhttp://freedesktop.org/wiki/Specifications/menu-spec\fP. +.SH OPTIONS +The following options are supported: +.TP +.I --dir=DIR +Install desktop files to the \fIDIR\fP directory. +.TP +.I -m, --mode=MODE +Set the permissions of the destination files to \fIMODE\fP. +.TP +.I --vendor=VENDOR +Add a vendor prefix to the desktop files. If a file already has this +prefix, nothing happens; else, the file will be named +\fIVENDOR\fP-\fIFILE\fP. For example: if \fIVENDOR\fP is +\fBfreedesktop.org\fP and \fIFILE\fP is \fBspecification.desktop\fP, the +result file will be \fBfreedesktop.org-specification.desktop\fP. +.TP +.I --delete-original +Delete the source desktop files, leaving only the target files. +Effectively "renames" the desktop files. +.TP +.I --rebuild-mime-info-cache +Rebuild the MIME types application database after installing the desktop +files. See \fIupdate-desktop-database(1)\fP for information about this +database. +.PP +.SH EDIT OPTIONS +The following edit options are supported: +.TP +.I --set-key=KEY +Set the KEY key to the value passed to the next \fI--set-value\fP +option. A matching \fI--set-value\fP option is mandatory. +.TP +.I --set-value=VALUE +Set the key specified with the previous \fI--set-key\fP option to VALUE. +A matching \fI--set-key\fP option is mandatory. +.TP +.I --set-name=NAME +Set the name (key \fBName\fP) to NAME. If a name was already set, it +will be overridden. Localizations of the old name will be removed. +.TP +.I --copy-name-to-generic-name +Copy the value of the \fBName\fP key to the \fBGenericName\fP key. Note +that a desktop file requires a \fBName\fP key to be valid, so this +option will always have an effect. +.TP +.I --set-generic-name=GENERIC-NAME +Set the generic name (key \fBGenericName\fP) to GENERIC-NAME. If a +generic name was already set, it will be overridden. Localizations of +the old generic name will be removed. +.TP +.I --copy-generic-name-to-name +Copy the value of the \fBGenericName\fP key to the \fBName\fP key, if +the \fBGenericName\fP key is present. +.TP +.I --set-comment=COMMENT +Set the comment (key \fBComment\fP) to COMMENT. If a comment was already +set, it will be overridden. Localizations of the old comment will be +removed. +.TP +.I --set-icon=ICON +Set the icon (key \fBIcon\fP) to ICON. If an icon was already set, it +will be overridden. Localizations of the old icon will be removed. +.TP +.I --add-category=CATEGORY +Add \fICATEGORY\fP to the list of categories (key \fBCategories\fP). If +\fICATEGORY\fP was already present in the list, this operation is a +no-op. A non-registered category should be prefixed with \fBX-\fP. +.TP +.I --remove-category=CATEGORY +Remove \fICATEGORY\fP from the list of categories (key +\fBCategories\fP). If \fICATEGORY\fP was not present in the list, this +operation is a no-op. +.TP +.I --add-mime-type=MIME-TYPE +Add \fIMIME-TYPE\fP to the list of MIME types (key \fBMimeType\fP). If +\fIMIME-TYPE\fP was already present in the list, this operation is a +no-op. +.TP +.I --remove-mime-type=MIME-TYPE +Remove \fIMIME-TYPE\fP from the list of MIME types (key \fBMimeType\fP). +If \fIMIME-TYPE\fP was not present in the list, this operation is a +no-op. +.TP +.I --add-only-show-in=ENVIRONMENT +Add \fIENVIRONMENT\fP to the list of desktop environments where the +desktop files should be displayed (key \fBOnlyShowIn\fP). If +\fIENVIRONMENT\fP was already present in the list, this operation is a +no-op. A non-registered desktop environment should be prefixed with +\fBX-\fP. Note that an empty \fBOnlyShowIn\fP key in a desktop file +means that the desktop file will be displayed in all environments. +.TP +.I --remove-only-show-in=ENVIRONMENT +Remove \fIENVIRONMENT\fP from the list of desktop environments where the +desktop files should be displayed (key \fBOnlyShowIn\fP). If +\fIENVIRONMENT\fP was not present in the list, this operation is a +no-op. +.TP +.I --add-not-show-in=ENVIRONMENT +Add \fIENVIRONMENT\fP to the list of desktop environments where the +desktop files should not be displayed (key \fBNotShowIn\fP). If +\fIENVIRONMENT\fP was already present in the list, this operation is a +no-op. A non-registered desktop environment should be prefixed with +\fBX-\fP. Note that an empty \fBNotShowIn\fP key in a desktop file +means that the desktop file will be displayed in all environments. +.TP +.I --remove-not-show-in=ENVIRONMENT +Remove \fIENVIRONMENT\fP from the list of desktop environments where the +desktop files should not be displayed (key \fBNotShowIn\fP). If +\fIENVIRONMENT\fP was not present in the list, this operation is a +no-op. +.TP +.I --remove-key=KEY +Remove the \fIKEY\fP key from the desktop files, if present. +.SH ENVIRONMENT +Some environment variables change the behavior of +\fIdesktop-file-install\fP: +.PP +.B DESKTOP_FILE_VENDOR +.IP +This variable can be used as an alternative to the \fI--vendor\fP +option. If the \fI--vendor\fP option is used, this environment variable +will be ignored. +.PP +.B DESKTOP_FILE_INSTALL_DIR +.IP +This variable can be used as an alternative to the \fI--dir\fP +option. If the \fI--dir\fP option is used, this environment variable +will be ignored. +.PP +.B RPM_BUILD_ROOT +.IP +This variable is set when building RPM packages. If the \fI--dir\fP +option and the \fBDESKTOP_FILE_INSTALL_DIR\fP environment variable are +not used, it will automatically be prepended to the default install +directory to install the desktop files appropriately when building +packages. +.SH BUGS +If you find bugs in the \fIdesktop-file-install\fP program, please report +these on https://bugs.freedesktop.org. +.SH SEE ALSO +.BR desktop-file-validate(1) +.BR update-desktop-database(1) diff --git a/man/desktop-file-validate.1 b/man/desktop-file-validate.1 new file mode 100644 index 0000000..9697c27 --- /dev/null +++ b/man/desktop-file-validate.1 @@ -0,0 +1,41 @@ +.\" +.\" desktop-file-validate manual page. +.\" (C) 2010 Vincent Untz (vuntz@gnome.org) +.\" +.TH DESKTOP-FILE-VALIDATE 1 FREEDESKTOP.ORG +.SH NAME +desktop-file-validate \- Validate desktop entry files +.SH SYNOPSIS +.B desktop-file-validate [\-\-no-warn-deprecated] [\-\-warn-kde] FILE... +.SH DESCRIPTION +The \fIdesktop-file-validate\fP program is a tool to validate desktop +entry files according to the Desktop Entry specification 1.0. +.PP +The specification describes a file format to provide information such as +name, icon and description for an application. Such a file can then be +used as an application launcher and to display the application in the +applications menu. +.PP +For information about the Desktop Entry specification, see +\fIhttp://freedesktop.org/wiki/Specifications/desktop-entry-spec\fP. +.PP +The desktop entry files are commonly called \fBdesktop files\fP. +.SH OPTIONS +The following options are supported: +.TP +.I --no-warn-deprecated +Do not warn about usage of deprecated items that were defined in +previous versions of the specification. +.TP +.I --warn-kde +Warn about usage of KDE extensions to the specification. This includes +the use of the \fBKDE Desktop Entry\fP group, of the \fBServiceTypes\fP, +\fBDocPath\fP, \fBKeywords\fP, \fBInitialPreference\fP, \fBDev\fP, +\fBFSType\fP, \fBMountPoint\fP, \fBReadOnly\fP, \fBUnmountIcon\fP keys, +or of the \fBService\fP, \fBServiceType\fP and \fBFSDevice\fP types. +.SH BUGS +If you find bugs in the \fIdesktop-file-validate\fP program, please +report these on https://bugs.freedesktop.org. +.SH SEE ALSO +.BR desktop-file-edit(1) +.BR desktop-file-install(1) diff --git a/man/update-desktop-database.1 b/man/update-desktop-database.1 new file mode 100644 index 0000000..7089fdc --- /dev/null +++ b/man/update-desktop-database.1 @@ -0,0 +1,71 @@ +.\" +.\" update-desktop-database manual page. +.\" (C) 2010 Vincent Untz (vuntz@gnome.org) +.\" +.TH UPDATE-DESKTOP-DATABASE 1 FREEDESKTOP.ORG +.SH NAME +update-desktop-database \- Build cache database of MIME types handled by +desktop files +.SH SYNOPSIS +.B update-desktop-database [\-q|\-\-quiet] [\-v|\-\-verbose] [DIRECTORY...] +.SH DESCRIPTION +The \fIupdate-desktop-database\fP program is a tool to build a cache +database of the MIME types handled by desktop files. +.PP +The cache database contains the list of MIME types that can be handled +by desktop files, as well as, for each MIME type, a list of desktop +files that can handle this MIME type. This cache database ease the work +of applications that need to find an application that can open a +document of a specific MIME type: those applications will not have to +parse all the desktop files existing on the system, and can instead +parse this cache database. +.PP +If no \fIDIRECTORY\fP is specified as argument, the desktop files that +will be processed are the ones installed in +\fB$XDG_DATA_DIRS/applications\fP. +.PP +If both the \fI--quiet\fP and \fI--verbose\fP options are used, then +\fI--verbose\fP will be ignored. +.SH OPTIONS +The following options are supported: +.TP +.I -q, --quiet +Do not display any information about processing and updating progress. +.TP +.I -v, --verbose +Display more information about processing and updating progress. +.SH NOTES +.PP +If an invalid MIME type is met, it will be ignored and the creation of +the cache database will continue. +.PP +The format of the cache database is a simple desktop entry format, with +a \fBMIME Cache\fP group, containing one key per MIME type. The key +name is the MIME type, and the key value is the list of desktop file +that can handle this MIME type. +.PP +The order of the desktop files found for a MIME type is not significant. +Therefore, an external mechanism must be used to determine what is the +preferred desktop file for a MIME type. +.SH EXAMPLE +Here is a simple example of a cache database: +.IP + [MIME Cache] + application/x-shellscript=gedit.desktop; + text/plain=gedit.desktop;gvim.desktop; + video/webm=totem.desktop; +.PP +This cache database is created with three desktop files, each containing +a \fBMimeType\fP key: +.IP + \fBgedit.desktop\fP: MimeType=text/plain;application/x-shellscript; + \fBgvim.desktop\fP: MimeType=text/plain; + \fBtotem.desktop\fP: MimeType=video/webm; +.SH FILES +.PP +.B $XDG_DATA_DIRS/applications/mimeinfo.cache +.IP +This file is the cache database created by \fIupdate-desktop-database\fP. +.SH BUGS +If you find bugs in the \fIupdate-desktop-database\fP program, please +report these on https://bugs.freedesktop.org. diff --git a/misc/Makefile.am b/misc/Makefile.am new file mode 100644 index 0000000..ed0f6e9 --- /dev/null +++ b/misc/Makefile.am @@ -0,0 +1,9 @@ +lisp_LISP = desktop-entry-mode.el + +EXTRA_DIST = \ + desktop-entry-mode.el + +MAINTAINERCLEANFILES = \ + $(srcdir)/elc-stamp + +-include $(top_srcdir)/git.mk diff --git a/misc/Makefile.in b/misc/Makefile.in new file mode 100644 index 0000000..1d11a93 --- /dev/null +++ b/misc/Makefile.in @@ -0,0 +1,425 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = misc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(lispdir)" +lispLISP_INSTALL = $(INSTALL_DATA) +LISP = $(lisp_LISP) +am__ELFILES = desktop-entry-mode.el +am__ELCFILES = $(am__ELFILES:.el=.elc) +ELCFILES = $(LISP:.el=.elc) +elisp_comp = $(top_srcdir)/elisp-comp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DESKTOP_FILE_UTILS_CFLAGS = @DESKTOP_FILE_UTILS_CFLAGS@ +DESKTOP_FILE_UTILS_LIBS = @DESKTOP_FILE_UTILS_LIBS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EMACS = @EMACS@ +EMACSLOADPATH = @EMACSLOADPATH@ +EXEEXT = @EXEEXT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +lispdir = @lispdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +lisp_LISP = desktop-entry-mode.el +EXTRA_DIST = \ + desktop-entry-mode.el + +MAINTAINERCLEANFILES = \ + $(srcdir)/elc-stamp + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign misc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign misc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +elc-stamp: $(LISP) + @echo 'WARNING: Warnings can be ignored. :-)' + @rm -f elc-temp && touch elc-temp + if test "$(EMACS)" != no; then \ + set x; \ + list='$(LISP)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + set x "$$@" "$$d$$p"; shift; \ + done; \ + shift; \ + EMACS="$(EMACS)" $(SHELL) $(elisp_comp) "$$@" || exit 1; \ + else : ; fi + @mv -f elc-temp $@ +$(am__ELCFILES): elc-stamp + @if test "$(EMACS)" != no && test ! -f $@; then \ + trap 'rm -rf elc-lock elc-stamp' 1 2 13 15; \ + if mkdir elc-lock 2>/dev/null; then \ + rm -f elc-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) elc-stamp; \ + rmdir elc-lock; \ + else \ + while test -d elc-lock; do sleep 1; done; \ + test -f elc-stamp; exit $$?; \ + fi; \ + else : ; fi +install-lispLISP: $(lisp_LISP) $(ELCFILES) + @$(NORMAL_INSTALL) + @if test "$(EMACS)" != no && test -n "$(lispdir)"; then \ + $(MKDIR_P) "$(DESTDIR)$(lispdir)"; \ + list='$(lisp_LISP)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + $(am__strip_dir) \ + echo " $(lispLISP_INSTALL) '$$d$$p' '$(DESTDIR)$(lispdir)/$$f'"; \ + $(lispLISP_INSTALL) "$$d$$p" "$(DESTDIR)$(lispdir)/$$f" || exit $$?; \ + if test -f $${p}c; then \ + echo " $(lispLISP_INSTALL) '$${p}c' '$(DESTDIR)$(lispdir)/$${f}c'"; \ + $(lispLISP_INSTALL) "$${p}c" "$(DESTDIR)$(lispdir)/$${f}c" || exit $$?; \ + else : ; fi; \ + done; \ + else : ; fi + +uninstall-lispLISP: + @$(NORMAL_UNINSTALL) + @test "$(EMACS)" != no && test -n "$(lispdir)" || exit 0; \ + list='$(lisp_LISP)'; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + echo " ( cd '$(DESTDIR)$(lispdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(lispdir)" && rm -f $$files || exit $$?; \ + echo " ( cd '$(DESTDIR)$(lispdir)' && rm -f" $$filesc ")"; \ + cd "$(DESTDIR)$(lispdir)" && rm -f $$filesc + +clean-lisp: + -rm -f elc-stamp $(ELCFILES) +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LISP) $(ELCFILES) +installdirs: + for dir in "$(DESTDIR)$(lispdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-lisp mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-lispLISP + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-lispLISP + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-lisp \ + distclean distclean-generic distdir dvi dvi-am html html-am \ + info info-am install install-am install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-lispLISP install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am uninstall uninstall-am uninstall-lispLISP + + +-include $(top_srcdir)/git.mk + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/misc/desktop-entry-mode.el b/misc/desktop-entry-mode.el new file mode 100644 index 0000000..4a44cdd --- /dev/null +++ b/misc/desktop-entry-mode.el @@ -0,0 +1,233 @@ +;;; desktop-entry-mode.el --- freedesktop.org desktop entry editing + +;; Copyright (C) 2003-2004, 2006-2007 Ville Skyttä, <scop at xemacs.org> + +;; Author: Ville Skyttä, <scop at xemacs.org> +;; Keywords: unix, desktop entry + +;; This file is part of XEmacs. + +;; XEmacs is free software; you can redistribute it and/or modify it +;; under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; XEmacs is distributed in the hope that it will be useful, but +;; WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;; General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with XEmacs; see the file COPYING. If not, write to the Free +;; Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +;; MA 02110-1301 USA. + +;;; Commentary: + +;; This mode provides basic functionality, eg. syntax highlighting and +;; validation for freedesktop.org desktop entry files. +;; +;; To install it: +;; +;; In XEmacs: +;; Just install the XEmacs `text-modes' package, this mode is included. +;; See <http://www.xemacs.org/Documentation/packageGuide.html>. +;; +;; In GNU Emacs: +;; Place this file in your load path somewhere (eg. site-lisp), and add +;; the following to your .emacs: +;; +;; (autoload 'desktop-entry-mode "desktop-entry-mode" "Desktop Entry mode" t) +;; (add-to-list 'auto-mode-alist +;; '("\\.desktop\\(\\.in\\)?$" . desktop-entry-mode)) +;; (add-hook 'desktop-entry-mode-hook 'turn-on-font-lock) +;; +;; For more information about desktop entry files, see +;; <http://www.freedesktop.org/Standards/desktop-entry-spec> +;; +;; This version is up to date with version 1.0 of the specification. + +;;; Code: + +(eval-when-compile + (require 'regexp-opt)) + +(defconst desktop-entry-mode-version "1.0 (spec 1.0)" + "Version of `desktop-entry-mode'.") + +(defgroup desktop-entry nil + "Support for editing freedesktop.org desktop entry files." + :group 'languages) + +(defcustom desktop-entry-validate-command "desktop-file-validate" + "*Command for validating desktop entry files." + :type 'string + :group 'desktop-entry) + +(defgroup desktop-entry-faces nil + "Font lock faces for `desktop-entry-mode'." + :prefix "desktop-entry-" + :group 'desktop-entry + :group 'faces) + +(defface desktop-entry-group-header-face + '((((class color) (background light)) (:foreground "mediumblue" :bold t)) + (((class color) (background dark)) (:foreground "lightblue" :bold t)) + (t (:bold t))) + "*Face for highlighting desktop entry group headers." + :group 'desktop-entry-faces) + +(defface desktop-entry-deprecated-keyword-face + '((((class color)) (:background "yellow" :foreground "black" :strikethru t)) + ) + "*Face for highlighting deprecated desktop entry keys." + :group 'desktop-entry-faces) + +(defface desktop-entry-unknown-keyword-face + '((((class color)) (:foreground "red3" :underline t)) + (t (:underline t)) + ) + "*Face for highlighting unknown desktop entry keys." + :group 'desktop-entry-faces) + +(defface desktop-entry-value-face + '((((class color) (background light)) (:foreground "darkgreen")) + (((class color) (background dark)) (:foreground "lightgreen")) + ) + "*Face for highlighting desktop entry values." + :group 'desktop-entry-faces) + +(defface desktop-entry-locale-face + '((((class color) (background light)) (:foreground "dimgray")) + (((class color) (background dark)) (:foreground "lightgray")) + ) + "*Face for highlighting desktop entry locales." + :group 'desktop-entry-faces) + +(defconst desktop-entry-keywords + (eval-when-compile + (concat + "\\(?:" + (regexp-opt + '( + "Type" + "Version" + "Name" + "GenericName" + "NoDisplay" + "Comment" + "Icon" + "Hidden" + "OnlyShowIn" + "NotShowIn" + "TryExec" + "Exec" + "Path" + "Terminal" + "MimeType" + "Categories" + "StartupNotify" + "StartupWMClass" + "URL" + ;; Reserved for use with KDE + "ServiceTypes" + "DocPath" + "KeyWords" + "InitialPreference" + ;; Used by KDE for entries of the FSDevice type + "Dev" + "FSType" + "MountPoint" + "ReadOnly" + "UnmountIcon" + ) 'words) + "\\|X-[A-Za-z0-9-]+\\)")) + "Expression for matching desktop entry keys.") + +(defconst desktop-entry-deprecated-keywords + (eval-when-compile + (concat + "\\(\\<Type\\s-*=\\s-*MimeType\\>\\|" + (regexp-opt + '( + "Patterns" + "DefaultApp" + "Encoding" + "MiniIcon" + "TerminalOptions" + "Protocols" + "Extensions" + "BinaryPattern" + "MapNotify" + "SwallowTitle" + "SwallowExec" + "SortOrder" + "FilePattern" + ) 'words) + "\\)")) + "Expression for matching deprecated desktop entry keys.") + +(defconst desktop-entry-group-header-re + "^\\[\\(X-[^\][]+\\|\\(?:Desktop \\(?:Entry\\|Action [a-zA-Z]+\\)\\)\\)\\]" + "Regular expression for matching desktop entry group headers.") + +(defconst desktop-entry-font-lock-keywords + (list + (cons "^\\s-*#.*$" '(0 'font-lock-comment-face)) + (cons (concat "^" desktop-entry-deprecated-keywords) + '(0 'desktop-entry-deprecated-keyword-face)) + (cons (concat "^" desktop-entry-keywords) '(0 'font-lock-keyword-face)) + (cons "^[A-Za-z0-9-]+" '(0 'desktop-entry-unknown-keyword-face)) + (cons desktop-entry-group-header-re '(1 'desktop-entry-group-header-face)) + (cons "^[A-Za-z0-9-]+?\\s-*=\\s-*\\(.*\\)" + '(1 'desktop-entry-value-face)) + (cons "^[A-Za-z0-9-]+?\\[\\([^\]]+\\)\\]\\s-*=\\s-*\\(.*\\)" + '((1 'desktop-entry-locale-face) + (2 'desktop-entry-value-face))) + ) + "Highlighting rules for `desktop-entry-mode' buffers.") + +(defvar desktop-entry-imenu-generic-expression + `((nil ,desktop-entry-group-header-re 1)) + "Imenu generic expression for `desktop-entry-mode'. +See `imenu-generic-expression'.") + +;;;###autoload +(defun desktop-entry-mode () + "Major mode for editing freedesktop.org desktop entry files. +See <http://www.freedesktop.org/Standards/desktop-entry-spec> for more +information. See `desktop-entry-mode-version' for information about which +version of the specification this mode is up to date with. + +Turning on desktop entry mode calls the value of the variable +`desktop-entry-mode-hook' with no args, if that value is non-nil." + (interactive) + (set (make-local-variable 'imenu-generic-expression) + '((nil "^\\s-*\\(.*\\)\\s-*=" 1))) + (set (make-local-variable 'compile-command) + (concat desktop-entry-validate-command " " buffer-file-name)) + (set (make-local-variable 'compilation-buffer-name-function) + (lambda (x) (concat "*desktop-file-validate " + (file-name-nondirectory buffer-file-name) "*"))) + (set (make-local-variable 'comment-start) "# ") + (set (make-local-variable 'comment-end) "") + (set (make-local-variable 'comment-start-skip) "#+ *") + (setq major-mode 'desktop-entry-mode mode-name "Desktop Entry") + (set (make-local-variable 'imenu-generic-expression) + desktop-entry-imenu-generic-expression) + (unless (featurep 'xemacs) ;; font-lock support for GNU Emacs + (set (make-local-variable 'font-lock-defaults) + '(desktop-entry-font-lock-keywords))) + (run-hooks 'desktop-entry-mode-hook)) + +(defun desktop-entry-validate () + "Validate desktop entry in the current buffer." + (interactive) + (require 'compile) + (compile compile-command)) + +;;;###autoload(add-to-list 'auto-mode-alist '("\\.desktop\\(\\.in\\)?$" . desktop-entry-mode)) + +(provide 'desktop-entry-mode) + +;;; desktop-entry-mode.el ends here @@ -0,0 +1,376 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, +# 2008, 2009 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: +sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' +sed_minuso='s/.* -o \([^ ]*\).*/\1/p' + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case $1 in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + autom4te touch the output file, or create a stub one + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and +\`g' are ignored when checking the name. + +Send bug reports to <bug-automake@gnu.org>." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# normalize program name to check for. +program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). This is about non-GNU programs, so use $1 not +# $program. +case $1 in + lex*|yacc*) + # Not GNU programs, they don't have --version. + ;; + + tar*) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case $program in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case $f in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te*) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison*|yacc*) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if test ! -f y.tab.h; then + echo >y.tab.h + fi + if test ! -f y.tab.c; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex*|flex*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if test ! -f lex.yy.c; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit $? + fi + ;; + + makeinfo*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n ' + /^@setfilename/{ + s/.* \([^ ]*\) *$/\1/ + p + q + }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 + touch $file + ;; + + tar*) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case $firstarg in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case $firstarg in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..3ebf03d --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,48 @@ +bin_PROGRAMS = \ + desktop-file-validate \ + desktop-file-install \ + update-desktop-database + +AM_CPPFLAGS = \ + $(DESKTOP_FILE_UTILS_CFLAGS) \ + -DDATADIR="\"$(datadir)\"" \ + -D_FILE_OFFSET_BITS=64 \ + -D_LARGEFILE64_SOURCE + +desktop_file_validate_SOURCES = \ + keyfileutils.c \ + keyfileutils.h \ + mimeutils.c \ + mimeutils.h \ + validate.c \ + validate.h \ + validator.c + +desktop_file_install_SOURCES = \ + keyfileutils.c \ + keyfileutils.h \ + mimeutils.c \ + mimeutils.h \ + validate.c \ + validate.h \ + install.c + +update_desktop_database_SOURCES = \ + mimeutils.c \ + mimeutils.h \ + update-desktop-database.c + +desktop_file_validate_LDADD = $(DESKTOP_FILE_UTILS_LIBS) +desktop_file_install_LDADD = $(DESKTOP_FILE_UTILS_LIBS) +update_desktop_database_LDADD = $(DESKTOP_FILE_UTILS_LIBS) + +install-exec-hook: desktop-file-install + cd $(DESTDIR)$(bindir) && \ + rm -f desktop-file-edit && \ + $(LN_S) -f desktop-file-install desktop-file-edit + +uninstall-hook: + cd $(DESTDIR)$(bindir) && \ + rm -f desktop-file-edit + +-include $(top_srcdir)/git.mk diff --git a/src/Makefile.in b/src/Makefile.in new file mode 100644 index 0000000..69e129c --- /dev/null +++ b/src/Makefile.in @@ -0,0 +1,542 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +bin_PROGRAMS = desktop-file-validate$(EXEEXT) \ + desktop-file-install$(EXEEXT) update-desktop-database$(EXEEXT) +subdir = src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_desktop_file_install_OBJECTS = keyfileutils.$(OBJEXT) \ + mimeutils.$(OBJEXT) validate.$(OBJEXT) install.$(OBJEXT) +desktop_file_install_OBJECTS = $(am_desktop_file_install_OBJECTS) +am__DEPENDENCIES_1 = +desktop_file_install_DEPENDENCIES = $(am__DEPENDENCIES_1) +am_desktop_file_validate_OBJECTS = keyfileutils.$(OBJEXT) \ + mimeutils.$(OBJEXT) validate.$(OBJEXT) validator.$(OBJEXT) +desktop_file_validate_OBJECTS = $(am_desktop_file_validate_OBJECTS) +desktop_file_validate_DEPENDENCIES = $(am__DEPENDENCIES_1) +am_update_desktop_database_OBJECTS = mimeutils.$(OBJEXT) \ + update-desktop-database.$(OBJEXT) +update_desktop_database_OBJECTS = \ + $(am_update_desktop_database_OBJECTS) +update_desktop_database_DEPENDENCIES = $(am__DEPENDENCIES_1) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(desktop_file_install_SOURCES) \ + $(desktop_file_validate_SOURCES) \ + $(update_desktop_database_SOURCES) +DIST_SOURCES = $(desktop_file_install_SOURCES) \ + $(desktop_file_validate_SOURCES) \ + $(update_desktop_database_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DESKTOP_FILE_UTILS_CFLAGS = @DESKTOP_FILE_UTILS_CFLAGS@ +DESKTOP_FILE_UTILS_LIBS = @DESKTOP_FILE_UTILS_LIBS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EMACS = @EMACS@ +EMACSLOADPATH = @EMACSLOADPATH@ +EXEEXT = @EXEEXT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +lispdir = @lispdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CPPFLAGS = \ + $(DESKTOP_FILE_UTILS_CFLAGS) \ + -DDATADIR="\"$(datadir)\"" \ + -D_FILE_OFFSET_BITS=64 \ + -D_LARGEFILE64_SOURCE + +desktop_file_validate_SOURCES = \ + keyfileutils.c \ + keyfileutils.h \ + mimeutils.c \ + mimeutils.h \ + validate.c \ + validate.h \ + validator.c + +desktop_file_install_SOURCES = \ + keyfileutils.c \ + keyfileutils.h \ + mimeutils.c \ + mimeutils.h \ + validate.c \ + validate.h \ + install.c + +update_desktop_database_SOURCES = \ + mimeutils.c \ + mimeutils.h \ + update-desktop-database.c + +desktop_file_validate_LDADD = $(DESKTOP_FILE_UTILS_LIBS) +desktop_file_install_LDADD = $(DESKTOP_FILE_UTILS_LIBS) +update_desktop_database_LDADD = $(DESKTOP_FILE_UTILS_LIBS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) +desktop-file-install$(EXEEXT): $(desktop_file_install_OBJECTS) $(desktop_file_install_DEPENDENCIES) + @rm -f desktop-file-install$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(desktop_file_install_OBJECTS) $(desktop_file_install_LDADD) $(LIBS) +desktop-file-validate$(EXEEXT): $(desktop_file_validate_OBJECTS) $(desktop_file_validate_DEPENDENCIES) + @rm -f desktop-file-validate$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(desktop_file_validate_OBJECTS) $(desktop_file_validate_LDADD) $(LIBS) +update-desktop-database$(EXEEXT): $(update_desktop_database_OBJECTS) $(update_desktop_database_DEPENDENCIES) + @rm -f update-desktop-database$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(update_desktop_database_OBJECTS) $(update_desktop_database_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/install.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyfileutils.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mimeutils.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/update-desktop-database.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/validate.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/validator.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-exec-hook +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +.MAKE: install-am install-exec-am install-strip uninstall-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic ctags distclean distclean-compile \ + distclean-generic distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-exec-hook install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-binPROGRAMS \ + uninstall-hook + + +install-exec-hook: desktop-file-install + cd $(DESTDIR)$(bindir) && \ + rm -f desktop-file-edit && \ + $(LN_S) -f desktop-file-install desktop-file-edit + +uninstall-hook: + cd $(DESTDIR)$(bindir) && \ + rm -f desktop-file-edit + +-include $(top_srcdir)/git.mk + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/install.c b/src/install.c new file mode 100644 index 0000000..30b651b --- /dev/null +++ b/src/install.c @@ -0,0 +1,948 @@ +/* vim: set ts=2 sw=2 et: */ + +/* + * Copyright (C) 2002, 2004 Red Hat, Inc. + * Copyright (C) 2006-2008 Vincent Untz + * + * Program written by Havoc Pennington <hp@pobox.com> + * Ray Strode <rstrode@redhat.com> + * Vincent Untz <vuntz@gnome.org> + * + * update-desktop-database is free software; you can redistribute 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. + * + * update-desktop-database is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with update-desktop-database; see the file COPYING. If not, + * write to the Free Software Foundation, Inc., 59 Temple Place - Suite + * 330, Boston, MA 02111-1307, USA. + */ + +#include <config.h> + +#include <glib.h> +#include <glib/gstdio.h> +#include <glib/gi18n.h> + +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include <unistd.h> +#include <locale.h> + +#include "keyfileutils.h" +#include "validate.h" + +static gboolean edit_mode = FALSE; +static const char** args = NULL; +static gboolean delete_original = FALSE; +static gboolean rebuild_mime_info_cache = FALSE; +static char *vendor_name = NULL; +static char *target_dir = NULL; +static GSList *edit_actions = NULL; +static mode_t permissions = 0644; + +typedef enum +{ + DFU_SET_KEY_BUILDING, /* temporary type to create an action in multiple steps */ + DFU_SET_KEY, + DFU_REMOVE_KEY, + DFU_ADD_TO_LIST, + DFU_REMOVE_FROM_LIST, + DFU_COPY_KEY +} DfuEditActionType; + +typedef struct +{ + DfuEditActionType type; + char *key; + char *action_value; +} DfuEditAction; + +static DfuEditAction * +dfu_edit_action_new (DfuEditActionType type, + const char *key, + const char *action_value) +{ + DfuEditAction *action; + + action = g_slice_new0 (DfuEditAction); + action->type = type; + action->key = g_strdup (key); + action->action_value = g_strdup (action_value); + + return action; +} + +static void +dfu_edit_action_free (DfuEditAction *action) +{ + g_assert (action != NULL); + + g_free (action->key); + g_free (action->action_value); + + g_slice_free (DfuEditAction, action); +} + +static gboolean +files_are_the_same (const char *first, + const char *second) +{ + /* This check gets confused by hard links. + * but it's too annoying to check if two + * paths are the same (though I'm sure there's a + * "path canonicalizer" I should be using...) + */ + + struct stat first_sb; + struct stat second_sb; + + if (stat (first, &first_sb) < 0) + { + g_printerr (_("Could not stat \"%s\": %s\n"), first, g_strerror (errno)); + return TRUE; + } + + if (stat (second, &second_sb) < 0) + { + g_printerr (_("Could not stat \"%s\": %s\n"), first, g_strerror (errno)); + return TRUE; + } + + return ((first_sb.st_dev == second_sb.st_dev) && + (first_sb.st_ino == second_sb.st_ino) && + /* Broken paranoia in case an OS doesn't use inodes or something */ + (first_sb.st_size == second_sb.st_size) && + (first_sb.st_mtime == second_sb.st_mtime)); +} + +static gboolean +rebuild_cache (const char *dir, + GError **err) +{ + GError *spawn_error; + char *argv[4] = { "update-desktop-database", "-q", (char *) dir, NULL }; + int exit_status; + gboolean retval; + + spawn_error = NULL; + + retval = g_spawn_sync (NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, + NULL, NULL, &exit_status, &spawn_error); + + if (spawn_error != NULL) + { + g_propagate_error (err, spawn_error); + return FALSE; + } + + return exit_status == 0 && retval; +} + +static void +process_one_file (const char *filename, + GError **err) +{ + char *new_filename; + GKeyFile *kf = NULL; + GError *rebuild_error; + GSList *tmp; + + kf = g_key_file_new (); + if (!g_key_file_load_from_file (kf, filename, + G_KEY_FILE_KEEP_COMMENTS| + G_KEY_FILE_KEEP_TRANSLATIONS, + err)) { + g_key_file_free (kf); + return; + } + + if (!desktop_file_fixup (kf, filename)) { + g_key_file_free (kf); + g_set_error (err, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE, + _("Failed to fix the content of the desktop file")); + return; + } + + /* Mark file as having been processed by us, so automated + * tools can check that desktop files went through our + * munging + */ + g_key_file_set_string (kf, GROUP_DESKTOP_ENTRY, + "X-Desktop-File-Install-Version", VERSION); + + tmp = edit_actions; + while (tmp != NULL) + { + DfuEditAction *action = tmp->data; + + switch (action->type) + { + case DFU_SET_KEY: + g_key_file_set_string (kf, GROUP_DESKTOP_ENTRY, + action->key, action->action_value); + dfu_key_file_drop_locale_strings (kf, GROUP_DESKTOP_ENTRY, + action->key); + break; + case DFU_REMOVE_KEY: + g_key_file_remove_key (kf, GROUP_DESKTOP_ENTRY, + action->key, NULL); + dfu_key_file_drop_locale_strings (kf, GROUP_DESKTOP_ENTRY, + action->key); + break; + case DFU_ADD_TO_LIST: + dfu_key_file_merge_list (kf, GROUP_DESKTOP_ENTRY, + action->key, action->action_value); + break; + case DFU_REMOVE_FROM_LIST: + dfu_key_file_remove_list (kf, GROUP_DESKTOP_ENTRY, + action->key, action->action_value); + break; + case DFU_COPY_KEY: + dfu_key_file_copy_key (kf, GROUP_DESKTOP_ENTRY, action->key, + GROUP_DESKTOP_ENTRY, action->action_value); + break; + default: + g_assert_not_reached (); + } + + tmp = tmp->next; + } + + if (edit_mode) + { + new_filename = g_strdup (filename); + } + else + { + char *basename = g_path_get_basename (filename); + + if (vendor_name && !g_str_has_prefix (basename, vendor_name)) + { + char *new_base; + new_base = g_strconcat (vendor_name, "-", basename, NULL); + new_filename = g_build_filename (target_dir, new_base, NULL); + g_free (new_base); + } + else + { + new_filename = g_build_filename (target_dir, basename, NULL); + } + + g_free (basename); + } + + if (!dfu_key_file_to_path (kf, new_filename, err)) { + g_key_file_free (kf); + g_free (new_filename); + return; + } + + g_key_file_free (kf); + + /* Load and validate the file we just wrote */ + if (!desktop_file_validate (new_filename, FALSE, TRUE)) + { + g_set_error (err, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE, + _("Failed to validate the created desktop file")); + + if (!files_are_the_same (filename, new_filename)) + g_unlink (new_filename); + + g_free (new_filename); + return; + } + + if (!edit_mode) + { + if (g_chmod (new_filename, permissions) < 0) + { + g_set_error (err, G_FILE_ERROR, + g_file_error_from_errno (errno), + _("Failed to set permissions %o on \"%s\": %s"), + permissions, new_filename, g_strerror (errno)); + + if (!files_are_the_same (filename, new_filename)) + g_unlink (new_filename); + + g_free (new_filename); + return; + } + + if (delete_original && + !files_are_the_same (filename, new_filename)) + { + if (g_unlink (filename) < 0) + g_printerr (_("Error removing original file \"%s\": %s\n"), + filename, g_strerror (errno)); + } + } + + if (rebuild_mime_info_cache) + { + rebuild_error = NULL; + rebuild_cache (target_dir, &rebuild_error); + + if (rebuild_error != NULL) + g_propagate_error (err, rebuild_error); + } + + g_free (new_filename); +} + +static gboolean parse_install_options_callback (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error); + +static gboolean parse_edit_options_callback (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error); + + +static const GOptionEntry main_options[] = { + { + "rebuild-mime-info-cache", + '\0', + '\0', + G_OPTION_ARG_NONE, + &rebuild_mime_info_cache, + N_("Rebuild the MIME types application database after processing desktop files"), + NULL + }, + { + "edit-mode", + '\0', + G_OPTION_FLAG_HIDDEN, /* just for development purpose */ + G_OPTION_ARG_NONE, + &edit_mode, + N_("Force edit mode"), + NULL + }, + { G_OPTION_REMAINING, + 0, + 0, + G_OPTION_ARG_FILENAME_ARRAY, + &args, + NULL, + N_("[FILE...]") }, + { + NULL + } +}; + +static const GOptionEntry install_options[] = { + { +#define OPTION_DIR "dir" + OPTION_DIR, + '\0', + '\0', + G_OPTION_ARG_CALLBACK, + parse_install_options_callback, + N_("Install desktop files to the DIR directory"), + N_("DIR") + }, + { +#define OPTION_MODE "mode" + OPTION_MODE, + 'm', + '\0', + G_OPTION_ARG_CALLBACK, + parse_install_options_callback, + N_("Set the permissions of the destination files to MODE"), + N_("MODE") + }, + { +#define OPTION_VENDOR "vendor" + OPTION_VENDOR, + '\0', + '\0', + G_OPTION_ARG_CALLBACK, + parse_install_options_callback, + N_("Add a vendor prefix to the desktop files, if not already present"), + N_("VENDOR") + }, + { + "delete-original", + '\0', + '\0', + G_OPTION_ARG_NONE, + &delete_original, + N_("Delete the source desktop files, leaving only the target files (effectively \"renames\" the desktop files)"), + NULL + }, + { + NULL + } +}; + +static const GOptionEntry edit_options[] = { + { +#define OPTION_SET_KEY "set-key" + OPTION_SET_KEY, + '\0', + '\0', + G_OPTION_ARG_CALLBACK, + parse_edit_options_callback, + N_("Set the KEY key to VALUE passed to next --set-value option"), + N_("KEY") + }, + { +#define OPTION_SET_VALUE "set-value" + OPTION_SET_VALUE, + '\0', + '\0', + G_OPTION_ARG_CALLBACK, + parse_edit_options_callback, + N_("Set the KEY key from previous --set-key option to VALUE"), + N_("VALUE") + }, + { +#define OPTION_SET_NAME "set-name" + OPTION_SET_NAME, + '\0', + '\0', + G_OPTION_ARG_CALLBACK, + parse_edit_options_callback, + N_("Set the \"Name\" key to NAME"), + N_("NAME") + }, + { +#define OPTION_COPY_GENERIC_NAME "copy-generic-name-to-name" + OPTION_COPY_GENERIC_NAME, + '\0', + G_OPTION_FLAG_NO_ARG, + G_OPTION_ARG_CALLBACK, + parse_edit_options_callback, + N_("Copy the value of the \"GenericName\" key to the \"Name\" key"), + NULL + }, + { +#define OPTION_SET_GENERIC_NAME "set-generic-name" + OPTION_SET_GENERIC_NAME, + '\0', + '\0', + G_OPTION_ARG_CALLBACK, + parse_edit_options_callback, + N_("Set the \"GenericName\" key to GENERIC-NAME"), + N_("GENERIC-NAME") + }, + { +#define OPTION_COPY_NAME "copy-name-to-generic-name" + OPTION_COPY_NAME, + '\0', + G_OPTION_FLAG_NO_ARG, + G_OPTION_ARG_CALLBACK, + parse_edit_options_callback, + N_("Copy the value of the \"Name\" key to the \"GenericName\" key"), + NULL + }, + { +#define OPTION_SET_COMMENT "set-comment" + OPTION_SET_COMMENT, + '\0', + '\0', + G_OPTION_ARG_CALLBACK, + parse_edit_options_callback, + N_("Set the \"Comment\" key to COMMENT"), + N_("COMMENT") + }, + { +#define OPTION_SET_ICON "set-icon" + OPTION_SET_ICON, + '\0', + '\0', + G_OPTION_ARG_CALLBACK, + parse_edit_options_callback, + N_("Set the \"Icon\" key to ICON"), + N_("ICON") + }, + { +#define OPTION_ADD_CATEGORY "add-category" + OPTION_ADD_CATEGORY, + '\0', + '\0', + G_OPTION_ARG_CALLBACK, + parse_edit_options_callback, + N_("Add CATEGORY to the list of categories"), + N_("CATEGORY") + }, + { +#define OPTION_REMOVE_CATEGORY "remove-category" + OPTION_REMOVE_CATEGORY, + '\0', + '\0', + G_OPTION_ARG_CALLBACK, + parse_edit_options_callback, + N_("Remove CATEGORY from the list of categories"), + N_("CATEGORY") + }, + { +#define OPTION_ADD_MIME_TYPE "add-mime-type" + OPTION_ADD_MIME_TYPE, + '\0', + '\0', + G_OPTION_ARG_CALLBACK, + parse_edit_options_callback, + N_("Add MIME-TYPE to the list of MIME types"), + N_("MIME-TYPE") + }, + { +#define OPTION_REMOVE_MIME_TYPE "remove-mime-type" + OPTION_REMOVE_MIME_TYPE, + '\0', + '\0', + G_OPTION_ARG_CALLBACK, + parse_edit_options_callback, + N_("Remove MIME-TYPE from the list of MIME types"), + N_("MIME-TYPE") + }, + { +#define OPTION_ADD_ONLY_SHOW_IN "add-only-show-in" + OPTION_ADD_ONLY_SHOW_IN, + '\0', + '\0', + G_OPTION_ARG_CALLBACK, + parse_edit_options_callback, + N_("Add ENVIRONMENT to the list of desktop environment where the desktop files should be displayed"), + N_("ENVIRONMENT") + }, + { +#define OPTION_REMOVE_ONLY_SHOW_IN "remove-only-show-in" + OPTION_REMOVE_ONLY_SHOW_IN, + '\0', + '\0', + G_OPTION_ARG_CALLBACK, + parse_edit_options_callback, + N_("Remove ENVIRONMENT from the list of desktop environment where the desktop files should be displayed"), + N_("ENVIRONMENT") + }, + { +#define OPTION_ADD_NOT_SHOW_IN "add-not-show-in" + OPTION_ADD_NOT_SHOW_IN, + '\0', + '\0', + G_OPTION_ARG_CALLBACK, + parse_edit_options_callback, + N_("Add ENVIRONMENT to the list of desktop environment where the desktop files should not be displayed"), + N_("ENVIRONMENT") + }, + { +#define OPTION_REMOVE_NOT_SHOW_IN "remove-not-show-in" + OPTION_REMOVE_NOT_SHOW_IN, + '\0', + '\0', + G_OPTION_ARG_CALLBACK, + parse_edit_options_callback, + N_("Remove ENVIRONMENT from the list of desktop environment where the desktop files should not be displayed"), + N_("ENVIRONMENT") + }, + { +#define OPTION_REMOVE_KEY "remove-key" + OPTION_REMOVE_KEY, + '\0', + '\0', + G_OPTION_ARG_CALLBACK, + parse_edit_options_callback, + N_("Remove the KEY key from the desktop files, if present"), + N_("KEY") + }, + { + NULL + } +}; + +static gboolean +parse_install_options_callback (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) +{ + /* skip "-" or "--" */ + option_name++; + if (*option_name == '-') + option_name++; + + if (strcmp (OPTION_DIR, option_name) == 0) + { + if (target_dir) + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + _("Can only specify --dir once")); + return FALSE; + } + + target_dir = g_strdup (value); + } + + else if (strcmp (OPTION_MODE, option_name) == 0 || + strcmp ("m", option_name) == 0) + { + unsigned long ul; + char *end; + + end = NULL; + ul = strtoul (value, &end, 8); + if (*value && end && *end == '\0') + permissions = ul; + else + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + _("Could not parse mode string \"%s\""), value); + + return FALSE; + } + } + + else if (strcmp (OPTION_VENDOR, option_name) == 0) + { + if (vendor_name) + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + _("Can only specify --vendor once")); + return FALSE; + } + + vendor_name = g_strdup (value); + } + + else + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + _("Unknown option \"%s\""), option_name); + + return FALSE; + } + + return TRUE; +} + +static gboolean +parse_edit_options_callback (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) +{ + /* Note: we prepend actions to the list, so we'll need to reverse it later */ + + DfuEditAction *action; + char **list; + int i; + + /* skip "-" or "--" */ + option_name++; + if (*option_name == '-') + option_name++; + +#define PARSE_OPTION_LIST(type, key) \ + do { \ + list = g_strsplit (value, ";", 0); \ + for (i = 0; list[i]; i++) \ + { \ + if (*list[i] == '\0') \ + continue; \ + \ + action = dfu_edit_action_new (type, key, list[i]); \ + edit_actions = g_slist_prepend (edit_actions, action); \ + } \ + } while (0) + + if (strcmp (OPTION_SET_KEY, option_name) == 0) + { + action = dfu_edit_action_new (DFU_SET_KEY_BUILDING, value, NULL); + edit_actions = g_slist_prepend (edit_actions, action); + } + + else if (strcmp (OPTION_SET_VALUE, option_name) == 0) + { + gboolean handled = FALSE; + + if (edit_actions != NULL) + { + action = edit_actions->data; + if (action->type == DFU_SET_KEY_BUILDING) + { + action->type = DFU_SET_KEY; + action->action_value = g_strdup (value); + + handled = TRUE; + } + } + + if (!handled) + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + _("Option \"--%s\" used without a prior \"--%s\" option"), + OPTION_SET_VALUE, OPTION_SET_KEY); + + return FALSE; + } + } + + else if (strcmp (OPTION_SET_NAME, option_name) == 0) + { + action = dfu_edit_action_new (DFU_SET_KEY, "Name", value); + edit_actions = g_slist_prepend (edit_actions, action); + } + + else if (strcmp (OPTION_COPY_GENERIC_NAME, option_name) == 0) + { + action = dfu_edit_action_new (DFU_COPY_KEY, "GenericName", "Name"); + edit_actions = g_slist_prepend (edit_actions, action); + } + + else if (strcmp (OPTION_SET_GENERIC_NAME, option_name) == 0) + { + action = dfu_edit_action_new (DFU_SET_KEY, "GenericName", value); + edit_actions = g_slist_prepend (edit_actions, action); + } + + else if (strcmp (OPTION_COPY_NAME, option_name) == 0) + { + action = dfu_edit_action_new (DFU_COPY_KEY, "Name", "GenericName"); + edit_actions = g_slist_prepend (edit_actions, action); + } + + else if (strcmp (OPTION_SET_COMMENT, option_name) == 0) + { + action = dfu_edit_action_new (DFU_SET_KEY, "Comment", value); + edit_actions = g_slist_prepend (edit_actions, action); + } + + else if (strcmp (OPTION_SET_ICON, option_name) == 0) + { + action = dfu_edit_action_new (DFU_SET_KEY, "Icon", value); + edit_actions = g_slist_prepend (edit_actions, action); + } + + else if (strcmp (OPTION_ADD_CATEGORY, option_name) == 0) + { + PARSE_OPTION_LIST (DFU_ADD_TO_LIST, "Categories"); + } + + else if (strcmp (OPTION_REMOVE_CATEGORY, option_name) == 0) + { + PARSE_OPTION_LIST (DFU_REMOVE_FROM_LIST, "Categories"); + } + + else if (strcmp (OPTION_ADD_MIME_TYPE, option_name) == 0) + { + PARSE_OPTION_LIST (DFU_ADD_TO_LIST, "MimeType"); + } + + else if (strcmp (OPTION_REMOVE_MIME_TYPE, option_name) == 0) + { + PARSE_OPTION_LIST (DFU_REMOVE_FROM_LIST, "MimeType"); + } + + else if (strcmp (OPTION_ADD_ONLY_SHOW_IN, option_name) == 0) + { + PARSE_OPTION_LIST (DFU_ADD_TO_LIST, "OnlyShowIn"); + } + + else if (strcmp (OPTION_REMOVE_ONLY_SHOW_IN, option_name) == 0) + { + PARSE_OPTION_LIST (DFU_REMOVE_FROM_LIST, "OnlyShowIn"); + } + + else if (strcmp (OPTION_ADD_NOT_SHOW_IN, option_name) == 0) + { + PARSE_OPTION_LIST (DFU_ADD_TO_LIST, "NotShowIn"); + } + + else if (strcmp (OPTION_REMOVE_NOT_SHOW_IN, option_name) == 0) + { + PARSE_OPTION_LIST (DFU_REMOVE_FROM_LIST, "NotShowIn"); + } + + else if (strcmp (OPTION_REMOVE_KEY, option_name) == 0) + { + action = dfu_edit_action_new (DFU_REMOVE_KEY, value, NULL); + edit_actions = g_slist_prepend (edit_actions, action); + } + + else + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + _("Unknown option \"%s\""), option_name); + + return FALSE; + } + + return TRUE; +} + +static gboolean +check_no_building_in_edit_actions (GError **error) +{ + GSList *tmp = edit_actions; + + while (tmp != NULL) + { + /* If we have an action that is BUILDING, then it means that we had a + * --set-key not followed by a --set-value. This can happen when: + * + the very last argument was --set-key + * + --set-key was followed by another editing option + * In both cases, that's bad as what we want is a --set-value following + * each --set-key. + */ + DfuEditAction *action = tmp->data; + + if (action->type == DFU_SET_KEY_BUILDING) + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + _("Option \"--%s\" used without a following \"--%s\" option"), + OPTION_SET_KEY, OPTION_SET_VALUE); + + return FALSE; + } + + tmp = tmp->next; + } + + return TRUE; +} + +static gboolean +post_parse_edit_options_callback (GOptionContext *context, + GOptionGroup *group, + gpointer data, + GError **error) +{ + if (!check_no_building_in_edit_actions (error)) + return FALSE; + + /* Reverse list we created by prepending elements */ + edit_actions = g_slist_reverse (edit_actions); + + return TRUE; +} + +int +main (int argc, char **argv) +{ + GOptionContext *context; + GOptionGroup *group; + GError* err = NULL; + int i; + int args_len; + mode_t dir_permissions; + char *basename; + + setlocale (LC_ALL, ""); + + basename = g_path_get_basename (argv[0]); + if (g_strcmp0 (basename, "desktop-file-edit") == 0) + edit_mode = TRUE; + g_free (basename); + + context = g_option_context_new (""); + g_option_context_set_summary (context, edit_mode ? _("Edit a desktop file.") : _("Install desktop files.")); + g_option_context_add_main_entries (context, main_options, NULL); + + if (!edit_mode) + { + group = g_option_group_new ("install", _("Installation options for desktop file"), _("Show desktop file installation options"), NULL, NULL); + g_option_group_add_entries (group, install_options); + g_option_context_add_group (context, group); + } + + group = g_option_group_new ("edit", _("Edition options for desktop file"), _("Show desktop file edition options"), NULL, NULL); + g_option_group_add_entries (group, edit_options); + g_option_group_set_parse_hooks (group, NULL, post_parse_edit_options_callback); + g_option_context_add_group (context, group); + + err = NULL; + g_option_context_parse (context, &argc, &argv, &err); + + if (err != NULL) { + g_printerr ("%s\n", err->message); + g_printerr (_("Run '%s --help' to see a full list of available command line options.\n"), argv[0]); + g_error_free (err); + return 1; + } + + if (!edit_mode) + { + if (vendor_name == NULL && g_getenv ("DESKTOP_FILE_VENDOR")) + vendor_name = g_strdup (g_getenv ("DESKTOP_FILE_VENDOR")); + + if (target_dir == NULL && g_getenv ("DESKTOP_FILE_INSTALL_DIR")) + target_dir = g_strdup (g_getenv ("DESKTOP_FILE_INSTALL_DIR")); + + if (target_dir == NULL) + { + if (g_getenv ("RPM_BUILD_ROOT")) + target_dir = g_build_filename (g_getenv ("RPM_BUILD_ROOT"), DATADIR, "applications", NULL); + else + target_dir = g_build_filename (DATADIR, "applications", NULL); + } + + /* Create the target directory */ + dir_permissions = permissions; + + /* Add search bit when the target file is readable */ + if (permissions & 0400) + dir_permissions |= 0100; + if (permissions & 0040) + dir_permissions |= 0010; + if (permissions & 0004) + dir_permissions |= 0001; + + g_mkdir_with_parents (target_dir, dir_permissions); + } + + args_len = 0; + for (i = 0; args && args[i]; i++) + args_len++; + + if (edit_mode) + { + if (args_len == 0) + { + g_printerr (_("Must specify a desktop file to process.\n")); + return 1; + } + if (args_len > 1) + { + g_printerr (_("Only one desktop file can be processed at once.\n")); + return 1; + } + } + else + { + if (args_len == 0) + { + g_printerr (_("Must specify one or more desktop files to process.\n")); + return 1; + } + } + + for (i = 0; args && args[i]; i++) + { + err = NULL; + process_one_file (args[i], &err); + if (err != NULL) + { + g_printerr (_("Error on file \"%s\": %s\n"), + args[i], err->message); + g_error_free (err); + + return 1; + } + } + + g_slist_free_full (edit_actions, (GDestroyNotify) dfu_edit_action_free); + + g_option_context_free (context); + + return 0; +} diff --git a/src/keyfileutils.c b/src/keyfileutils.c new file mode 100644 index 0000000..a6891ee --- /dev/null +++ b/src/keyfileutils.c @@ -0,0 +1,284 @@ +/* keyfileutils.c: useful functions for GKeyFile + * vim: set ts=2 sw=2 et: */ + +/* + * Copyright (C) 2007 Vincent Untz <vuntz@gnome.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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + * USA. + */ + +#include <string.h> + +#include "keyfileutils.h" + +gboolean +dfu_key_file_rename_group (GKeyFile *keyfile, + const char *oldgroup, + const char *newgroup) +{ + char **keys; + char *value; + unsigned int i; + + g_return_val_if_fail (keyfile != NULL, FALSE); + + if (!g_key_file_has_group (keyfile, oldgroup)) + return TRUE; + + keys = g_key_file_get_keys (keyfile, oldgroup, NULL, NULL); + for (i = 0; keys[i] != NULL; i++) { + value = g_key_file_get_value (keyfile, oldgroup, keys[i], NULL); + g_key_file_set_value (keyfile, newgroup, keys[i], value); + g_free (value); + + value = g_key_file_get_comment (keyfile, oldgroup, keys[i], NULL); + if (value) { + g_key_file_set_comment (keyfile, newgroup, keys[i], value, NULL); + g_free (value); + } + } + g_strfreev (keys); + + value = g_key_file_get_comment (keyfile, oldgroup, NULL, NULL); + if (value) { + g_key_file_set_comment (keyfile, newgroup, NULL, value, NULL); + g_free (value); + } + + g_key_file_remove_group (keyfile, oldgroup, NULL); + + return TRUE; +} + +void +dfu_key_file_drop_locale_strings (GKeyFile *keyfile, + const char *group, + const char *key) +{ + char **keys; + gsize len; + char *prefix; + gsize i; + + keys = g_key_file_get_keys (keyfile, group, &len, NULL); + prefix = g_strdup_printf ("%s[", key); + + for (i = 0; i < len; i++) + { + if (g_str_has_prefix (keys[i], prefix)) + g_key_file_remove_key (keyfile, group, keys[i], NULL); + } + + g_free (prefix); + g_strfreev (keys); +} + +static gboolean +_dfu_key_file_copy_key_helper (GKeyFile *keyfile, + const char *fromgroup, + const char *fromkey, + const char *togroup, + const char *tokey) +{ + char *value; + + if (!g_key_file_has_group (keyfile, fromgroup)) + return FALSE; + + value = g_key_file_get_value (keyfile, fromgroup, fromkey, NULL); + if (!value) + return FALSE; + + g_key_file_set_value (keyfile, togroup, tokey, value); + + g_free (value); + + return TRUE; +} + +gboolean +dfu_key_file_copy_key (GKeyFile *keyfile, + const char *fromgroup, + const char *fromkey, + const char *togroup, + const char *tokey) +{ + char **fromkeys; + gsize len; + char *fromprefix; + gsize i; + + g_return_val_if_fail (keyfile != NULL, FALSE); + g_return_val_if_fail (fromgroup != NULL, FALSE); + g_return_val_if_fail (fromkey != NULL, FALSE); + g_return_val_if_fail (togroup != NULL, FALSE); + g_return_val_if_fail (tokey != NULL, FALSE); + + if (!_dfu_key_file_copy_key_helper (keyfile, fromgroup, fromkey, + togroup, tokey)) + return FALSE; + + /* Also copy translations if we're not dealing with localized keys already + * (first drop old ones) */ + if (strchr (fromkey, '[') != NULL || strchr (tokey, '[') != NULL) + return TRUE; + + dfu_key_file_drop_locale_strings (keyfile, togroup, tokey); + + fromkeys = g_key_file_get_keys (keyfile, fromgroup, &len, NULL); + fromprefix = g_strdup_printf ("%s[", fromkey); + + for (i = 0; i < len; i++) + { + if (g_str_has_prefix (fromkeys[i], fromprefix)) + { + const char *locale = fromkeys[i] + strlen (fromkey); + char *tolocalekey = g_strdup_printf ("%s%s", tokey, locale); + _dfu_key_file_copy_key_helper (keyfile, fromgroup, fromkeys[i], + togroup, tolocalekey); + g_free (tolocalekey); + } + } + + g_free (fromprefix); + g_strfreev (fromkeys); + + return TRUE; +} + +void +dfu_key_file_merge_list (GKeyFile *keyfile, + const char *group, + const char *key, + const char *to_merge) +{ + char **values; + char *value; + char *str; + int i; + + g_return_if_fail (keyfile != NULL); + + values = g_key_file_get_string_list (keyfile, group, key, NULL, NULL); + + if (values) { + for (i = 0; values[i] != NULL; i++) { + if (!strcmp (values[i], to_merge)) { + g_strfreev (values); + return; + } + } + + g_strfreev (values); + } + + value = g_key_file_get_value (keyfile, group, key, NULL); + + if (value) + str = g_strconcat (value, to_merge, ";", NULL); + else + str = g_strconcat (to_merge, ";", NULL); + + g_key_file_set_value (keyfile, group, key, str); + + g_free (value); + g_free (str); +} + +void +dfu_key_file_remove_list (GKeyFile *keyfile, + const char *group, + const char *key, + const char *to_remove) +{ + char **values; + GString *value; + gboolean found; + int i; + + g_return_if_fail (keyfile != NULL); + + found = FALSE; + + value = g_string_new (""); + values = g_key_file_get_string_list (keyfile, group, key, NULL, NULL); + + if (values) { + for (i = 0; values[i] != NULL; i++) { + if (!strcmp (values[i], to_remove)) + found = TRUE; + else + g_string_append_printf (value, "%s;", values[i]); + } + + g_strfreev (values); + } + + if (!found) { + g_string_free (value, TRUE); + return; + } + + if (!value->str || value->str[0] == '\0') + g_key_file_remove_key (keyfile, group, key, NULL); + else + g_key_file_set_value (keyfile, group, key, value->str); + + g_string_free (value, TRUE); +} + +//FIXME: kill this when bug #309224 is fixed +gboolean +dfu_key_file_to_path (GKeyFile *keyfile, + const char *path, + GError **error) +{ + char *filename; + GError *write_error; + char *data; + gsize length; + gboolean res; + + g_return_val_if_fail (keyfile != NULL, FALSE); + g_return_val_if_fail (path != NULL, FALSE); + + write_error = NULL; + data = g_key_file_to_data (keyfile, &length, &write_error); + if (write_error) { + g_propagate_error (error, write_error); + return FALSE; + } + + filename = g_filename_from_utf8 (path, -1, NULL, NULL, &write_error); + + if (write_error) { + g_propagate_error (error, write_error); + g_free (data); + return FALSE; + } + + res = g_file_set_contents (filename, data, length, &write_error); + g_free (filename); + + if (write_error) { + g_propagate_error (error, write_error); + g_free (data); + return FALSE; + } + + g_free (data); + return res; +} diff --git a/src/keyfileutils.h b/src/keyfileutils.h new file mode 100644 index 0000000..d30e07a --- /dev/null +++ b/src/keyfileutils.h @@ -0,0 +1,53 @@ +/* keyfileutils.h: useful functions for GKeyFile + * vim: set ts=2 sw=2 et: */ + +/* + * Copyright (C) 2007 Vincent Untz <vuntz@gnome.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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + * USA. + */ + +#include <glib.h> + +#define GROUP_DESKTOP_ENTRY "Desktop Entry" + +gboolean dfu_key_file_rename_group (GKeyFile *keyfile, + const char *oldgroup, + const char *newgroup); + +void dfu_key_file_drop_locale_strings (GKeyFile *keyfile, + const char *group, + const char *key); + +gboolean dfu_key_file_copy_key (GKeyFile *keyfile, + const char *fromgroup, + const char *fromkey, + const char *togroup, + const char *tokey); + +void dfu_key_file_merge_list (GKeyFile *keyfile, + const char *group, + const char *key, + const char *to_merge); + +void dfu_key_file_remove_list (GKeyFile *keyfile, + const char *group, + const char *key, + const char *to_remove); + +gboolean dfu_key_file_to_path (GKeyFile *keyfile, + const char *path, + GError **error); diff --git a/src/mimeutils.c b/src/mimeutils.c new file mode 100644 index 0000000..44a83e9 --- /dev/null +++ b/src/mimeutils.c @@ -0,0 +1,291 @@ +/* mimeutils.c: useful functions related to mime types + * vim: set ts=2 sw=2 et: */ + +/* + * Copyright (C) 2004 Red Hat, Inc. + * Copyright (C) 2008 Novell, Inc. + * + * Written by Vincent Untz <vuntz@gnome.org>, based on code from + * update-desktop-base.c which was originally written by + * Ray Strode <rstrode@redhat.com> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + * USA. + */ + +/* Related documentation: + * + Registered media types: http://www.iana.org/assignments/media-types/ + * + RFC about MIME, with the BNF grammar: http://tools.ietf.org/html/rfc2045 + * + RFC about media types: http://tools.ietf.org/html/rfc2046 + * + RFC about the model media type: http://tools.ietf.org/html/rfc2077 + */ + +#include <string.h> + +#include <glib.h> + +#include "mimeutils.h" + +/* Not registered with IANA, but used on a free desktop */ +static const char *known_fdo_media_types[] = { + "inode", "x-content", "x-scheme-handler", + /* The chemical media type was never really proposed to IANA, but is + * well-known and in use by various applications out there. There are + * also some guidelines to not abuse it. + * http://www.ch.ic.ac.uk/chemime/ */ + "chemical" +}; + +static const char *known_old_fdo_media_types[] = { + "x-directory" +}; + +/* Defined in RFC 2045/2046 and RFC 2077 */ +static const char *registered_discrete_media_types[] = { + "application", "audio", "image", "model", "text", "video" +}; + +/* Defined in RFC 2045/2046 */ +static const char *registered_composite_media_types[] = { + "message", "multipart" +}; + +static const char *registered_not_used_media_types[] = { + "example" +}; + +/* A few mime types that are not valid strictly-speaking (or discouraged + * according to the above media type), but that we know should be valid */ +static const char *valid_exceptions_mime_types[] = { + /* mail: a mail saved in a file will have this mime type */ + "message/rfc822", + /* some multimedia mime type; it clearly doesn't respect the mime type rules, + * but it's widely deployed */ + "misc/ultravox" +}; + +static struct { + const char *mime_type; + const char *should_be; +} alias_to_replace_mime_types[] = { + { "flv-application/octet-stream", "video/x-flv" }, + { "zz-application/zz-winassoc-123", "application/vnd.lotus-1-2-3" }, /* alias to be added in shared-mime-info: https://bugs.freedesktop.org/show_bug.cgi?id=41989 */ + { "zz-application/zz-winassoc-cab", "application/vnd.ms-cab-compressed" }, /* alias to be added in shared-mime-info: https://bugs.freedesktop.org/show_bug.cgi?id=41989 */ + { "zz-application/zz-winassoc-cdr", "application/vnd.corel-draw" }, + { "zz-application/zz-winassoc-doc", "application/vnd.ms-word" }, /* alias to be added in shared-mime-info: https://bugs.freedesktop.org/show_bug.cgi?id=41989 */ + { "zz-application/zz-winassoc-hlp", "application/winhlp" }, /* not yet in shared-mime-info: https://bugs.freedesktop.org/show_bug.cgi?id=41708 */ + { "zz-application/zz-winassoc-ini", "text/plain" }, + { "zz-application/zz-winassoc-lwp", "application/vnd.lotus-wordpro" }, /* not yet in shared-mime-info: https://bugs.freedesktop.org/show_bug.cgi?id=36036 */ + { "zz-application/zz-winassoc-lzh", "application/x-lzh-compressed" }, /* not yet in shared-mime-info: https://bugs.freedesktop.org/show_bug.cgi?id=41680 */ + { "zz-application/zz-winassoc-mdb", "application/vnd.ms-access" }, /* alias to be added in shared-mime-info: https://bugs.freedesktop.org/show_bug.cgi?id=41989 */ + { "zz-application/zz-winassoc-uu", "text/x-uuencode" }, /* not yet in shared-mime-info: https://bugs.freedesktop.org/show_bug.cgi?id=41684 */ + { "zz-application/zz-winassoc-xls", "application/vnd.ms-excel" } /* alias to be added in shared-mime-info: https://bugs.freedesktop.org/show_bug.cgi?id=41989 */ +}; + +#define IF_IS_IN(list, type) \ + for (i = 0; i < G_N_ELEMENTS (list); i++) { \ + if (strcmp (type, list[i]) == 0) \ + break; \ + } \ + if (i < G_N_ELEMENTS (list)) + + +/* TODO: it might actually be nice to download at distcheck time all the + * registered subtypes and warn when using a non-registered non-experimental + * subtype. + */ + +/* From the BNF grammar: + * + * token := 1*<any (US-ASCII) CHAR except SPACE, CTLs, + * or tspecials> + * + * tspecials := "(" / ")" / "<" / ">" / "@" / + * "," / ";" / ":" / "\" / <"> + * "/" / "[" / "]" / "?" / "=" + */ +static gboolean +is_valid_mime_type_char (const guchar c) +{ + char invalid_chars[] = "()<>@,;:\\\"/[]?="; + + /* Filter out control chars and space */ + if ((c <= 32) || (c == 127)) + return FALSE; + + if (memchr (invalid_chars, c, sizeof (invalid_chars)) != NULL) + return FALSE; + + return TRUE; +} + +/* From the BNF grammar: + * + * x-token := <The two characters "X-" or "x-" followed, with + * no intervening white space, by any token> + * + * From RFC 2046: + * In general, the use of "X-" top-level types is strongly discouraged. + * Implementors should invent subtypes of the existing types whenever + * possible. In many cases, a subtype of "application" will be more + * appropriate than a new top-level type. + */ +static MimeUtilsValidity +is_valid_media_type (const char *media_type, + char **error) +{ + unsigned int i; + + /* Handle known_fdo_media_types before X- types because it contains one X- + * type */ + IF_IS_IN (known_fdo_media_types, media_type) + return MU_VALID; + + IF_IS_IN (known_old_fdo_media_types, media_type) { + if (error) + *error = g_strdup_printf ("\"%s\" is an old media type that should be " + "replaced with a modern equivalent", media_type); + return MU_DISCOURAGED; + } + + if (g_ascii_strncasecmp (media_type, "X-", 2) == 0) { + for (i = 2; media_type[i]; i++) { + if (!is_valid_mime_type_char (media_type[i])) { + if (error) + *error = g_strdup_printf ("\"%s\" a media type that contains " + "an invalid character", media_type); + return MU_INVALID; + } + } + + if (error) + *error = g_strdup_printf ("the use of \"%s\" as media type is strongly " + "discouraged in favor of a subtype of the " + "\"application\" media type", media_type); + + return MU_DISCOURAGED; + } + + IF_IS_IN (registered_discrete_media_types, media_type) + return MU_VALID; + + IF_IS_IN (registered_composite_media_types, media_type) { + if (error) + *error = g_strdup_printf ("\"%s\" is a media type that probably does " + "not make sense in this context", media_type); + return MU_DISCOURAGED; + } + + IF_IS_IN (registered_not_used_media_types, media_type) { + if (error) + *error = g_strdup_printf ("\"%s\" is a media type that must not " + "be used", media_type); + return MU_INVALID; + } + + if (error) + *error = g_strdup_printf ("\"%s\" is an unregistered media type", + media_type); + + return MU_INVALID; +} + +MimeUtilsValidity +mu_mime_type_is_valid (const char *mime_type, + char **error) +{ + unsigned int i; + char *media_type; + char *subtype; + MimeUtilsValidity media_type_validity; + + if (error) + *error = NULL; + + media_type = g_strdup (mime_type); + subtype = strchr (media_type, '/'); + + if (!subtype) { + if (error) + *error = g_strdup_printf ("\"%s\" does not contain a subtype", + mime_type); + g_free (media_type); + return MU_INVALID; + } + + subtype[0] = '\0'; + subtype++; + + if (subtype[0] == '\0') { + if (error) + *error = g_strdup_printf ("\"%s\" contains an empty subtype", + mime_type); + g_free (media_type); + return MU_INVALID; + } + + for (; subtype[0] != '\0'; subtype++) { + if (!is_valid_mime_type_char (subtype[0])) { + if (error) + *error = g_strdup_printf ("\"%s\" contains an invalid character in " + "the subtype", mime_type); + + g_free (media_type); + return MU_INVALID; + } + } + + media_type_validity = is_valid_media_type (media_type, error); + g_free (media_type); + + /* Let's end with the exceptions. We do this at the end to avoid doing more + * work in most cases. */ + + if (media_type_validity != MU_VALID) { + IF_IS_IN (valid_exceptions_mime_types, mime_type) { + if (error && *error) { + g_free (*error); + *error = NULL; + } + + return MU_VALID; + } + } + + /* If the mime type is already discouraged, then it won't be an improvement + * to say that it's discouraged because it's an alias to something else. So + * we just handle invalid mime types here. */ + if (media_type_validity == MU_INVALID) { + for (i = 0; i < G_N_ELEMENTS (alias_to_replace_mime_types); i++) { + if (strcmp (mime_type, alias_to_replace_mime_types[i].mime_type) == 0) + break; + } + + if (i < G_N_ELEMENTS (alias_to_replace_mime_types)) { + if (error) { + if (*error) + g_free (*error); + + *error = g_strdup_printf ("\"%s\" should be replaced with \"%s\"", + mime_type, + alias_to_replace_mime_types[i].should_be); + } + + return MU_DISCOURAGED; + } + } + + return media_type_validity; +} diff --git a/src/mimeutils.h b/src/mimeutils.h new file mode 100644 index 0000000..a866f6d --- /dev/null +++ b/src/mimeutils.h @@ -0,0 +1,34 @@ +/* mimeutils.h: useful functions related to mime types + * vim: set ts=2 sw=2 et: */ + +/* + * Copyright (C) 2008 Novell, Inc. + * + * Written by Vincent Untz <vuntz@gnome.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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + * USA. + */ + +#include <glib.h> + +typedef enum { + MU_VALID, + MU_DISCOURAGED, + MU_INVALID +} MimeUtilsValidity; + +MimeUtilsValidity mu_mime_type_is_valid (const char *mime_type, + char **error); diff --git a/src/update-desktop-database.c b/src/update-desktop-database.c new file mode 100644 index 0000000..ffc1440 --- /dev/null +++ b/src/update-desktop-database.c @@ -0,0 +1,498 @@ +/* update-desktop-database.c - maintains mimetype<->desktop mapping cache + * vim: set ts=2 sw=2 et: */ + +/* + * Copyright (C) 2004-2006 Red Hat, Inc. + * Copyright (C) 2006, 2008 Vincent Untz + * + * Program written by Ray Strode <rstrode@redhat.com> + * Vincent Untz <vuntz@gnome.org> + * + * update-desktop-database is free software; you can redistribute 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. + * + * update-desktop-database is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with update-desktop-database; see the file COPYING. If not, + * write to the Free Software Foundation, Inc., 59 Temple Place - Suite + * 330, Boston, MA 02111-1307, USA. + */ + +#include <config.h> +#include <errno.h> +#include <fcntl.h> +#include <stdio.h> +#include <string.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> + +#include <glib.h> +#include <glib/gi18n.h> + +#include "keyfileutils.h" +#include "mimeutils.h" + +#define NAME "update-desktop-database" +#define CACHE_FILENAME "mimeinfo.cache" +#define TEMP_CACHE_FILENAME_PREFIX ".mimeinfo.cache.XXXXXX" + +#define udd_print(...) if (!quiet) g_printerr (__VA_ARGS__) +#define udd_verbose_print(...) if (!quiet && verbose) g_printerr (__VA_ARGS__) + +static FILE *open_temp_cache_file (const char *dir, + char **filename, + GError **error); +static void add_mime_type (const char *mime_type, GList *desktop_files, FILE *f); +static void sync_database (const char *dir, GError **error); +static void cache_desktop_file (const char *desktop_file, + const char *mime_type, + GError **error); +static void process_desktop_file (const char *desktop_file, + const char *name, + GError **error); +static void process_desktop_files (const char *desktop_dir, + const char *prefix, + GError **error); +static void update_database (const char *desktop_dir, GError **error); +static const char ** get_default_search_path (void); +static void print_desktop_dirs (const char **dirs); + +static GHashTable *mime_types_map = NULL; +static gboolean verbose = FALSE, quiet = FALSE; + +static void +list_free_deep (gpointer key, GList *l, gpointer data) +{ + g_list_foreach (l, (GFunc)g_free, NULL); + g_list_free (l); +} + +static void +cache_desktop_file (const char *desktop_file, + const char *mime_type, + GError **error) +{ + GList *desktop_files; + + desktop_files = (GList *) g_hash_table_lookup (mime_types_map, mime_type); + + desktop_files = g_list_prepend (desktop_files, g_strdup (desktop_file)); + g_hash_table_insert (mime_types_map, g_strdup (mime_type), desktop_files); +} + + +static void +process_desktop_file (const char *desktop_file, + const char *name, + GError **error) +{ + GError *load_error; + GKeyFile *keyfile; + char **mime_types; + int i; + + keyfile = g_key_file_new (); + + load_error = NULL; + g_key_file_load_from_file (keyfile, desktop_file, + G_KEY_FILE_NONE, &load_error); + + if (load_error != NULL) + { + g_propagate_error (error, load_error); + return; + } + + /* Hidden=true means that the .desktop file should be completely ignored */ + if (g_key_file_get_boolean (keyfile, GROUP_DESKTOP_ENTRY, "Hidden", NULL)) + { + g_key_file_free (keyfile); + return; + } + + mime_types = g_key_file_get_string_list (keyfile, + GROUP_DESKTOP_ENTRY, + "MimeType", NULL, &load_error); + + g_key_file_free (keyfile); + + if (load_error != NULL) + { + g_propagate_error (error, load_error); + return; + } + + for (i = 0; mime_types[i] != NULL; i++) + { + char *mime_type; + MimeUtilsValidity valid; + char *valid_error; + + mime_type = g_strchomp (mime_types[i]); + valid = mu_mime_type_is_valid (mime_types[i], &valid_error); + switch (valid) + { + case MU_VALID: + break; + case MU_DISCOURAGED: + udd_print (_("Warning in file \"%s\": usage of MIME type \"%s\" is " + "discouraged (%s)\n"), + desktop_file, mime_types[i], valid_error); + g_free (valid_error); + break; + case MU_INVALID: + udd_print (_("Error in file \"%s\": \"%s\" is an invalid MIME type " + "(%s)\n"), + desktop_file, mime_types[i], valid_error); + g_free (valid_error); + /* not a break: we continue to the next mime type */ + continue; + default: + g_assert_not_reached (); + } + + cache_desktop_file (name, mime_type, &load_error); + + if (load_error != NULL) + { + g_propagate_error (error, load_error); + g_strfreev (mime_types); + return; + } + } + g_strfreev (mime_types); +} + +static void +process_desktop_files (const char *desktop_dir, + const char *prefix, + GError **error) +{ + GError *process_error; + GDir *dir; + const char *filename; + + process_error = NULL; + dir = g_dir_open (desktop_dir, 0, &process_error); + + if (process_error != NULL) + { + g_propagate_error (error, process_error); + return; + } + + while ((filename = g_dir_read_name (dir)) != NULL) + { + char *full_path, *name; + + full_path = g_build_filename (desktop_dir, filename, NULL); + + if (g_file_test (full_path, G_FILE_TEST_IS_DIR)) + { + char *sub_prefix; + + sub_prefix = g_strdup_printf ("%s%s-", prefix, filename); + + process_desktop_files (full_path, sub_prefix, &process_error); + g_free (sub_prefix); + + if (process_error != NULL) + { + udd_verbose_print (_("Could not process directory \"%s\": %s\n"), + full_path, process_error->message); + g_error_free (process_error); + process_error = NULL; + } + g_free (full_path); + continue; + } + else if (!g_str_has_suffix (filename, ".desktop")) + { + g_free (full_path); + continue; + } + + name = g_strdup_printf ("%s%s", prefix, filename); + process_desktop_file (full_path, name, &process_error); + g_free (name); + + if (process_error != NULL) + { + if (!g_error_matches (process_error, + G_KEY_FILE_ERROR, + G_KEY_FILE_ERROR_KEY_NOT_FOUND)) + { + udd_print (_("Could not parse file \"%s\": %s\n"), full_path, + process_error->message); + } + else + { + udd_verbose_print (_("File \"%s\" lacks MimeType key\n"), + full_path); + } + + g_error_free (process_error); + process_error = NULL; + } + + g_free (full_path); + } + + g_dir_close (dir); +} + +static FILE * +open_temp_cache_file (const char *dir, char **filename, GError **error) +{ + int fd; + char *file; + FILE *fp; + mode_t mask; + + file = g_build_filename (dir, TEMP_CACHE_FILENAME_PREFIX, NULL); + fd = g_mkstemp (file); + + if (fd < 0) + { + g_set_error (error, G_FILE_ERROR, + g_file_error_from_errno (errno), + "%s", g_strerror (errno)); + g_free (file); + return NULL; + } + + mask = umask(0); + (void) umask (mask); + + fchmod (fd, 0666 & ~mask); + + fp = fdopen (fd, "w+"); + if (fp == NULL) + { + g_set_error (error, G_FILE_ERROR, + g_file_error_from_errno (errno), + "%s", g_strerror (errno)); + g_free (file); + close (fd); + return NULL; + } + + if (filename) + *filename = file; + else + g_free (file); + + return fp; +} + +static void +add_mime_type (const char *mime_type, GList *desktop_files, FILE *f) +{ + GString *list; + GList *desktop_file; + + list = g_string_new (mime_type); + g_string_append_c (list, '='); + for (desktop_file = desktop_files; + desktop_file != NULL; + desktop_file = desktop_file->next) + { + g_string_append (list, (const char *) desktop_file->data); + g_string_append_c (list, ';'); + } + g_string_append_c (list, '\n'); + + fputs (list->str, f); + + g_string_free (list, TRUE); +} + +static void +sync_database (const char *dir, GError **error) +{ + GError *sync_error; + char *temp_cache_file, *cache_file; + FILE *tmp_file; + GList *keys, *key; + + temp_cache_file = NULL; + sync_error = NULL; + tmp_file = open_temp_cache_file (dir, &temp_cache_file, &sync_error); + + if (sync_error != NULL) + { + g_propagate_error (error, sync_error); + return; + } + + fputs ("[MIME Cache]\n", tmp_file); + + keys = g_hash_table_get_keys (mime_types_map); + keys = g_list_sort (keys, (GCompareFunc) g_strcmp0); + + for (key = keys; key != NULL; key = key->next) + add_mime_type (key->data, + g_hash_table_lookup (mime_types_map, key->data), + tmp_file); + + g_list_free (keys); + fclose (tmp_file); + + cache_file = g_build_filename (dir, CACHE_FILENAME, NULL); + if (rename (temp_cache_file, cache_file) < 0) + { + g_set_error (error, G_FILE_ERROR, + g_file_error_from_errno (errno), + _("Cache file \"%s\" could not be written: %s"), + cache_file, g_strerror (errno)); + + unlink (temp_cache_file); + } + g_free (temp_cache_file); + g_free (cache_file); +} + +static void +update_database (const char *desktop_dir, + GError **error) +{ + GError *update_error; + + mime_types_map = g_hash_table_new_full (g_str_hash, g_str_equal, + (GDestroyNotify)g_free, + NULL); + + update_error = NULL; + process_desktop_files (desktop_dir, "", &update_error); + + if (update_error != NULL) + g_propagate_error (error, update_error); + else + { + sync_database (desktop_dir, &update_error); + if (update_error != NULL) + g_propagate_error (error, update_error); + } + g_hash_table_foreach (mime_types_map, (GHFunc) list_free_deep, NULL); + g_hash_table_destroy (mime_types_map); +} + +static const char ** +get_default_search_path (void) +{ + static char **args = NULL; + const char * const *data_dirs; + int i; + + if (args != NULL) + return (const char **) args; + + data_dirs = g_get_system_data_dirs (); + + for (i = 0; data_dirs[i] != NULL; i++); + + args = g_new (char *, i + 1); + + for (i = 0; data_dirs[i] != NULL; i++) + args[i] = g_build_filename (data_dirs[i], "applications", NULL); + + args[i] = NULL; + + return (const char **) args; +} + +void +print_desktop_dirs (const char **dirs) +{ + char *directories; + + directories = g_strjoinv (", ", (char **) dirs); + udd_verbose_print(_("Search path is now: [%s]\n"), directories); + g_free (directories); +} + +int +main (int argc, + char **argv) +{ + GError *error; + GOptionContext *context; + const char **desktop_dirs; + int i; + gboolean found_processable_dir; + + const GOptionEntry options[] = + { + { "quiet", 'q', 0, G_OPTION_ARG_NONE, &quiet, + N_("Do not display any information about processing and " + "updating progress"), NULL}, + + { "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose, + N_("Display more information about processing and updating progress"), + NULL}, + + { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &desktop_dirs, + NULL, N_("[DIRECTORY...]") }, + { NULL } + }; + + context = g_option_context_new (""); + g_option_context_set_summary (context, _("Build cache database of MIME types handled by desktop files.")); + g_option_context_add_main_entries (context, options, NULL); + + desktop_dirs = NULL; + error = NULL; + g_option_context_parse (context, &argc, &argv, &error); + + if (error != NULL) { + g_printerr ("%s\n", error->message); + g_printerr (_("Run \"%s --help\" to see a full list of available command line options.\n"), argv[0]); + g_error_free (error); + return 1; + } + + if (desktop_dirs == NULL || desktop_dirs[0] == NULL) + desktop_dirs = get_default_search_path (); + + print_desktop_dirs (desktop_dirs); + + found_processable_dir = FALSE; + for (i = 0; desktop_dirs[i] != NULL; i++) + { + error = NULL; + update_database (desktop_dirs[i], &error); + + if (error != NULL) + { + udd_verbose_print (_("Could not create cache file in \"%s\": %s\n"), + desktop_dirs[i], error->message); + g_error_free (error); + error = NULL; + } + else + found_processable_dir = TRUE; + } + g_option_context_free (context); + + if (!found_processable_dir) + { + char *directories; + + directories = g_strjoinv (", ", (char **) desktop_dirs); + udd_print (_("The databases in [%s] could not be updated.\n"), + directories); + + g_free (directories); + + return 1; + } + + return 0; +} diff --git a/src/validate.c b/src/validate.c new file mode 100644 index 0000000..c6011b0 --- /dev/null +++ b/src/validate.c @@ -0,0 +1,2918 @@ +/* validate.c: validate a desktop entry file + * vim: set ts=2 sw=2 et: */ + +/* + * Copyright (C) 2007-2009 Vincent Untz <vuntz@gnome.org> + * + * A really small portion of this code comes from the old validate.c. + * The old validate.c was Copyright (C) 2002, 2004 Red Hat, Inc. + * It was written by: + * Mark McLoughlin <mark@skynet.ie> + * Havoc Pennington <hp@pobox.com> + * Ray Strode <rstrode@redhat.com> + * + * A portion of this code comes from glib (gkeyfile.c) + * Authors of gkeyfile.c are: + * Ray Strode + * Matthias Clasen + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + * USA. + */ + +#include <errno.h> +#include <fcntl.h> +#include <stdio.h> +#include <string.h> +#include <sys/stat.h> +#include <unistd.h> + +#include <glib.h> +#include <glib/gstdio.h> + +#include "keyfileutils.h" +#include "mimeutils.h" +#include "validate.h" + +/*FIXME: document where we are stricter than the spec + * + only UTF-8 (so no Legacy-Mixed encoding) + */ + +/*TODO: + * + Lecagy-Mixed Encoding (annexe D) + * + The escape sequences \s, \n, \t, \r, and \\ are supported for values of + * type string and localestring, meaning ASCII space, newline, tab, carriage + * return, and backslash, respectively. + */ + +typedef enum { + INVALID_TYPE = 0, + + APPLICATION_TYPE, + LINK_TYPE, + DIRECTORY_TYPE, + + /* Types reserved for KDE */ + /* since 0.9.4 */ + SERVICE_TYPE, + SERVICE_TYPE_TYPE, + /* since 0.9.6 */ + FSDEVICE_TYPE, + + /* Deprecated types */ + /* since 0.9.4 */ + MIMETYPE_TYPE, + + LAST_TYPE +} DesktopType; + +typedef enum { + DESKTOP_STRING_TYPE, + DESKTOP_LOCALESTRING_TYPE, + DESKTOP_BOOLEAN_TYPE, + DESKTOP_NUMERIC_TYPE, + DESKTOP_STRING_LIST_TYPE, + DESKTOP_LOCALESTRING_LIST_TYPE, + /* Deprecated types */ + /* since 0.9.6 */ + DESKTOP_REGEXP_LIST_TYPE +} DesktopKeyType; + +typedef struct _kf_keyvalue kf_keyvalue; + +struct _kf_keyvalue { + char *key; + char *value; +}; + +typedef struct _kf_validator kf_validator; + +struct _kf_validator { + const char *filename; + + GString *parse_buffer; + gboolean utf8_warning; + gboolean cr_error; + + char *current_group; + GHashTable *groups; + GHashTable *current_keys; + + gboolean kde_reserved_warnings; + gboolean no_deprecated_warnings; + + char *main_group; + DesktopType type; + char *type_string; + + gboolean show_in; + GList *application_keys; + GList *link_keys; + GList *fsdevice_keys; + GList *mimetype_keys; + + GHashTable *action_values; + GHashTable *action_groups; + + gboolean fatal_error; +}; + +static gboolean +validate_string_key (kf_validator *kf, + const char *key, + const char *locale, + const char *value); +static gboolean +validate_localestring_key (kf_validator *kf, + const char *key, + const char *locale, + const char *value); +static gboolean +validate_boolean_key (kf_validator *kf, + const char *key, + const char *locale, + const char *value); +static gboolean +validate_numeric_key (kf_validator *kf, + const char *key, + const char *locale, + const char *value); +static gboolean +validate_string_list_key (kf_validator *kf, + const char *key, + const char *locale, + const char *value); +static gboolean +validate_regexp_list_key (kf_validator *kf, + const char *key, + const char *locale, + const char *value); +static gboolean +validate_localestring_list_key (kf_validator *kf, + const char *key, + const char *locale, + const char *value); + +static gboolean +handle_type_key (kf_validator *kf, + const char *locale_key, + const char *value); +static gboolean +handle_version_key (kf_validator *kf, + const char *locale_key, + const char *value); +static gboolean +handle_comment_key (kf_validator *kf, + const char *locale_key, + const char *value); +static gboolean +handle_icon_key (kf_validator *kf, + const char *locale_key, + const char *value); +static gboolean +handle_show_in_key (kf_validator *kf, + const char *locale_key, + const char *value); +static gboolean +handle_desktop_exec_key (kf_validator *kf, + const char *locale_key, + const char *value); +static gboolean +handle_exec_key (kf_validator *kf, + const char *locale_key, + const char *value); +static gboolean +handle_path_key (kf_validator *kf, + const char *locale_key, + const char *value); +static gboolean +handle_mime_key (kf_validator *kf, + const char *locale_key, + const char *value); +static gboolean +handle_categories_key (kf_validator *kf, + const char *locale_key, + const char *value); +static gboolean +handle_actions_key (kf_validator *kf, + const char *locale_key, + const char *value); +static gboolean +handle_dev_key (kf_validator *kf, + const char *locale_key, + const char *value); +static gboolean +handle_mountpoint_key (kf_validator *kf, + const char *locale_key, + const char *value); +static gboolean +handle_encoding_key (kf_validator *kf, + const char *locale_key, + const char *value); +static gboolean +handle_autostart_condition_key (kf_validator *kf, + const char *locale_key, + const char *value); +static gboolean +handle_key_for_application (kf_validator *kf, + const char *locale_key, + const char *value); +static gboolean +handle_key_for_link (kf_validator *kf, + const char *locale_key, + const char *value); +static gboolean +handle_key_for_fsdevice (kf_validator *kf, + const char *locale_key, + const char *value); +static gboolean +handle_key_for_mimetype (kf_validator *kf, + const char *locale_key, + const char *value); + +static struct { + DesktopType type; + char *name; + gboolean kde_reserved; + gboolean deprecated; +} registered_types[] = { + { APPLICATION_TYPE, "Application", FALSE, FALSE }, + { LINK_TYPE, "Link", FALSE, FALSE }, + { DIRECTORY_TYPE, "Directory", FALSE, FALSE }, + { SERVICE_TYPE, "Service", TRUE, FALSE }, + { SERVICE_TYPE_TYPE, "ServiceType", TRUE, FALSE }, + { FSDEVICE_TYPE, "FSDevice", TRUE, FALSE }, + { MIMETYPE_TYPE, "MimeType", FALSE, TRUE } +}; + +static struct { + DesktopKeyType type; + gboolean (* validate) (kf_validator *kf, + const char *key, + const char *locale, + const char *value); +} validate_for_type[] = { + { DESKTOP_STRING_TYPE, validate_string_key }, + { DESKTOP_LOCALESTRING_TYPE, validate_localestring_key }, + { DESKTOP_BOOLEAN_TYPE, validate_boolean_key }, + { DESKTOP_NUMERIC_TYPE, validate_numeric_key }, + { DESKTOP_STRING_LIST_TYPE, validate_string_list_key }, + { DESKTOP_REGEXP_LIST_TYPE, validate_regexp_list_key }, + { DESKTOP_LOCALESTRING_LIST_TYPE, validate_localestring_list_key } +}; + +typedef struct { + DesktopKeyType type; + char *name; + gboolean required; + gboolean deprecated; + gboolean kde_reserved; + gboolean (* handle_and_validate) (kf_validator *kf, + const char *locale_key, + const char *value); +} DesktopKeyDefinition; + +static DesktopKeyDefinition registered_desktop_keys[] = { + { DESKTOP_STRING_TYPE, "Type", TRUE, FALSE, FALSE, handle_type_key }, + /* it is numeric according to the spec, but it's not true in previous + * versions of the spec. handle_version_key() will manage this */ + { DESKTOP_STRING_TYPE, "Version", FALSE, FALSE, FALSE, handle_version_key }, + { DESKTOP_LOCALESTRING_TYPE, "Name", TRUE, FALSE, FALSE, NULL }, + { DESKTOP_LOCALESTRING_TYPE, "GenericName", FALSE, FALSE, FALSE, NULL }, + { DESKTOP_BOOLEAN_TYPE, "NoDisplay", FALSE, FALSE, FALSE, NULL }, + { DESKTOP_LOCALESTRING_TYPE, "Comment", FALSE, FALSE, FALSE, handle_comment_key }, + { DESKTOP_LOCALESTRING_TYPE, "Icon", FALSE, FALSE, FALSE, handle_icon_key }, + { DESKTOP_BOOLEAN_TYPE, "Hidden", FALSE, FALSE, FALSE, NULL }, + { DESKTOP_STRING_LIST_TYPE, "OnlyShowIn", FALSE, FALSE, FALSE, handle_show_in_key }, + { DESKTOP_STRING_LIST_TYPE, "NotShowIn", FALSE, FALSE, FALSE, handle_show_in_key }, + { DESKTOP_STRING_TYPE, "TryExec", FALSE, FALSE, FALSE, handle_key_for_application }, + { DESKTOP_STRING_TYPE, "Exec", FALSE, FALSE, FALSE, handle_desktop_exec_key }, + { DESKTOP_STRING_TYPE, "Path", FALSE, FALSE, FALSE, handle_path_key }, + { DESKTOP_BOOLEAN_TYPE, "Terminal", FALSE, FALSE, FALSE, handle_key_for_application }, + { DESKTOP_STRING_LIST_TYPE, "MimeType", FALSE, FALSE, FALSE, handle_mime_key }, + { DESKTOP_STRING_LIST_TYPE, "Categories", FALSE, FALSE, FALSE, handle_categories_key }, + { DESKTOP_BOOLEAN_TYPE, "StartupNotify", FALSE, FALSE, FALSE, handle_key_for_application }, + { DESKTOP_STRING_TYPE, "StartupWMClass", FALSE, FALSE, FALSE, handle_key_for_application }, + { DESKTOP_STRING_TYPE, "URL", FALSE, FALSE, FALSE, handle_key_for_link }, + /* since 1.1 (used to be a key reserved for KDE since 0.9.4) */ + { DESKTOP_LOCALESTRING_LIST_TYPE, "Keywords", FALSE, FALSE, FALSE, NULL }, + /* since 1.1 (used to be in the spec before 1.0, but was not really + * specified) */ + { DESKTOP_STRING_LIST_TYPE, "Actions", FALSE, FALSE, FALSE, handle_actions_key }, + + /* Keys reserved for KDE */ + + /* since 0.9.4 */ + { DESKTOP_STRING_TYPE, "ServiceTypes", FALSE, FALSE, TRUE, NULL }, + { DESKTOP_STRING_TYPE, "DocPath", FALSE, FALSE, TRUE, NULL }, + { DESKTOP_STRING_TYPE, "InitialPreference", FALSE, FALSE, TRUE, NULL }, + /* since 0.9.6 */ + { DESKTOP_STRING_TYPE, "Dev", FALSE, FALSE, TRUE, handle_dev_key }, + { DESKTOP_STRING_TYPE, "FSType", FALSE, FALSE, TRUE, handle_key_for_fsdevice }, + { DESKTOP_STRING_TYPE, "MountPoint", FALSE, FALSE, TRUE, handle_mountpoint_key }, + { DESKTOP_BOOLEAN_TYPE, "ReadOnly", FALSE, FALSE, TRUE, handle_key_for_fsdevice }, + { DESKTOP_STRING_TYPE, "UnmountIcon", FALSE, FALSE, TRUE, handle_key_for_fsdevice }, + + /* Deprecated keys */ + + /* since 0.9.3 */ + { DESKTOP_STRING_TYPE, "Protocols", FALSE, TRUE, FALSE, NULL }, + { DESKTOP_STRING_TYPE, "Extensions", FALSE, TRUE, FALSE, NULL }, + { DESKTOP_STRING_TYPE, "BinaryPattern", FALSE, TRUE, FALSE, NULL }, + { DESKTOP_STRING_TYPE, "MapNotify", FALSE, TRUE, FALSE, NULL }, + /* since 0.9.4 */ + { DESKTOP_REGEXP_LIST_TYPE, "Patterns", FALSE, TRUE, FALSE, handle_key_for_mimetype }, + { DESKTOP_STRING_TYPE, "DefaultApp", FALSE, TRUE, FALSE, handle_key_for_mimetype }, + { DESKTOP_STRING_TYPE, "MiniIcon", FALSE, TRUE, FALSE, NULL }, + { DESKTOP_STRING_TYPE, "TerminalOptions", FALSE, TRUE, FALSE, NULL }, + /* since 0.9.5 */ + { DESKTOP_STRING_TYPE, "Encoding", FALSE, TRUE, FALSE, handle_encoding_key }, + { DESKTOP_LOCALESTRING_TYPE, "SwallowTitle", FALSE, TRUE, FALSE, NULL }, + { DESKTOP_STRING_TYPE, "SwallowExec", FALSE, TRUE, FALSE, NULL }, + /* since 0.9.6 */ + { DESKTOP_STRING_LIST_TYPE, "SortOrder", FALSE, TRUE, FALSE, NULL }, + { DESKTOP_REGEXP_LIST_TYPE, "FilePattern", FALSE, TRUE, FALSE, NULL }, + + /* Keys from other specifications */ + + /* Autostart spec, currently proposed; adopted by GNOME */ + { DESKTOP_STRING_TYPE, "AutostartCondition", FALSE, FALSE, FALSE, handle_autostart_condition_key } +}; + +static DesktopKeyDefinition registered_action_keys[] = { + { DESKTOP_LOCALESTRING_TYPE, "Name", TRUE, FALSE, FALSE, NULL }, + { DESKTOP_LOCALESTRING_TYPE, "Icon", FALSE, FALSE, FALSE, handle_icon_key }, + { DESKTOP_STRING_LIST_TYPE, "OnlyShowIn", FALSE, FALSE, FALSE, handle_show_in_key }, + { DESKTOP_STRING_LIST_TYPE, "NotShowIn", FALSE, FALSE, FALSE, handle_show_in_key }, + { DESKTOP_STRING_TYPE, "Exec", TRUE, FALSE, FALSE, handle_exec_key } +}; + +static const char *show_in_registered[] = { + "GNOME", "KDE", "LXDE", "MATE", "Razor", "ROX", "Unity", "XFCE", "Old" +}; + +static struct { + const char *name; + gboolean main; + gboolean require_only_show_in; + gboolean deprecated; + const char *requires[4]; +} registered_categories[] = { + { "AudioVideo", TRUE, FALSE, FALSE, { NULL } }, + { "Audio", TRUE, FALSE, FALSE, { "AudioVideo", NULL } }, + { "Video", TRUE, FALSE, FALSE, { "AudioVideo", NULL } }, + { "Development", TRUE, FALSE, FALSE, { NULL } }, + { "Education", TRUE, FALSE, FALSE, { NULL } }, + { "Game", TRUE, FALSE, FALSE, { NULL } }, + { "Graphics", TRUE, FALSE, FALSE, { NULL } }, + { "Network", TRUE, FALSE, FALSE, { NULL } }, + { "Office", TRUE, FALSE, FALSE, { NULL } }, + { "Settings", TRUE, FALSE, FALSE, { NULL } }, + { "System", TRUE, FALSE, FALSE, { NULL } }, + { "Utility", TRUE, FALSE, FALSE, { NULL } }, + { "Audio", FALSE, FALSE, FALSE, { "Development", NULL } }, + { "Video", FALSE, FALSE, FALSE, { "Development", NULL } }, + { "Building", FALSE, FALSE, FALSE, { "Development", NULL } }, + { "Debugger", FALSE, FALSE, FALSE, { "Development", NULL } }, + { "IDE", FALSE, FALSE, FALSE, { "Development", NULL } }, + { "GUIDesigner", FALSE, FALSE, FALSE, { "Development", NULL } }, + { "Profiling", FALSE, FALSE, FALSE, { "Development", NULL } }, + { "RevisionControl", FALSE, FALSE, FALSE, { "Development", NULL } }, + { "Translation", FALSE, FALSE, FALSE, { "Development", NULL } }, + { "Calendar", FALSE, FALSE, FALSE, { "Office", NULL } }, + { "ContactManagement", FALSE, FALSE, FALSE, { "Office", NULL } }, + { "Database", FALSE, FALSE, FALSE, { "Office", "Development", "AudioVideo", NULL } }, + { "Dictionary", FALSE, FALSE, FALSE, { "Office;TextTools", NULL } }, + { "Chart", FALSE, FALSE, FALSE, { "Office", NULL } }, + { "Email", FALSE, FALSE, FALSE, { "Office;Network", NULL } }, + { "Finance", FALSE, FALSE, FALSE, { "Office", NULL } }, + { "FlowChart", FALSE, FALSE, FALSE, { "Office", NULL } }, + { "PDA", FALSE, FALSE, FALSE, { "Office", NULL } }, + { "ProjectManagement", FALSE, FALSE, FALSE, { "Office;Development", NULL } }, + { "Presentation", FALSE, FALSE, FALSE, { "Office", NULL } }, + { "Spreadsheet", FALSE, FALSE, FALSE, { "Office", NULL } }, + { "WordProcessor", FALSE, FALSE, FALSE, { "Office", NULL } }, + { "2DGraphics", FALSE, FALSE, FALSE, { "Graphics", NULL } }, + { "VectorGraphics", FALSE, FALSE, FALSE, { "Graphics;2DGraphics", NULL } }, + { "RasterGraphics", FALSE, FALSE, FALSE, { "Graphics;2DGraphics", NULL } }, + { "3DGraphics", FALSE, FALSE, FALSE, { "Graphics", NULL } }, + { "Scanning", FALSE, FALSE, FALSE, { "Graphics", NULL } }, + { "OCR", FALSE, FALSE, FALSE, { "Graphics;Scanning", NULL } }, + { "Photography", FALSE, FALSE, FALSE, { "Graphics", "Office", NULL } }, + { "Publishing", FALSE, FALSE, FALSE, { "Graphics", "Office", NULL } }, + { "Viewer", FALSE, FALSE, FALSE, { "Graphics", "Office", NULL } }, + { "TextTools", FALSE, FALSE, FALSE, { "Utility", NULL } }, + { "DesktopSettings", FALSE, FALSE, FALSE, { "Settings", NULL } }, + { "HardwareSettings", FALSE, FALSE, FALSE, { "Settings", NULL } }, + { "Printing", FALSE, FALSE, FALSE, { "HardwareSettings;Settings", NULL } }, + { "PackageManager", FALSE, FALSE, FALSE, { "Settings", NULL } }, + { "Dialup", FALSE, FALSE, FALSE, { "Network", NULL } }, + { "InstantMessaging", FALSE, FALSE, FALSE, { "Network", NULL } }, + { "Chat", FALSE, FALSE, FALSE, { "Network", NULL } }, + { "IRCClient", FALSE, FALSE, FALSE, { "Network", NULL } }, + { "FileTransfer", FALSE, FALSE, FALSE, { "Network", NULL } }, + { "HamRadio", FALSE, FALSE, FALSE, { "Network", "Audio", NULL } }, + { "News", FALSE, FALSE, FALSE, { "Network", NULL } }, + { "P2P", FALSE, FALSE, FALSE, { "Network", NULL } }, + { "RemoteAccess", FALSE, FALSE, FALSE, { "Network", NULL } }, + { "Telephony", FALSE, FALSE, FALSE, { "Network", NULL } }, + { "TelephonyTools", FALSE, FALSE, FALSE, { "Utility", NULL } }, + { "VideoConference", FALSE, FALSE, FALSE, { "Network", NULL } }, + { "WebBrowser", FALSE, FALSE, FALSE, { "Network", NULL } }, + { "WebDevelopment", FALSE, FALSE, FALSE, { "Network", "Development", NULL } }, + { "Midi", FALSE, FALSE, FALSE, { "AudioVideo;Audio", NULL } }, + { "Mixer", FALSE, FALSE, FALSE, { "AudioVideo;Audio", NULL } }, + { "Sequencer", FALSE, FALSE, FALSE, { "AudioVideo;Audio", NULL } }, + { "Tuner", FALSE, FALSE, FALSE, { "AudioVideo;Audio", NULL } }, + { "TV", FALSE, FALSE, FALSE, { "AudioVideo;Video", NULL } }, + { "AudioVideoEditing", FALSE, FALSE, FALSE, { "Audio", "Video", "AudioVideo", NULL } }, + { "Player", FALSE, FALSE, FALSE, { "Audio", "Video", "AudioVideo", NULL } }, + { "Recorder", FALSE, FALSE, FALSE, { "Audio", "Video", "AudioVideo", NULL } }, + { "DiscBurning", FALSE, FALSE, FALSE, { "Audio", "Video", "AudioVideo", NULL } }, + { "ActionGame", FALSE, FALSE, FALSE, { "Game", NULL } }, + { "AdventureGame", FALSE, FALSE, FALSE, { "Game", NULL } }, + { "ArcadeGame", FALSE, FALSE, FALSE, { "Game", NULL } }, + { "BoardGame", FALSE, FALSE, FALSE, { "Game", NULL } }, + { "BlocksGame", FALSE, FALSE, FALSE, { "Game", NULL } }, + { "CardGame", FALSE, FALSE, FALSE, { "Game", NULL } }, + { "KidsGame", FALSE, FALSE, FALSE, { "Game", NULL } }, + { "LogicGame", FALSE, FALSE, FALSE, { "Game", NULL } }, + { "RolePlaying", FALSE, FALSE, FALSE, { "Game", NULL } }, + { "Simulation", FALSE, FALSE, FALSE, { "Game", NULL } }, + { "SportsGame", FALSE, FALSE, FALSE, { "Game", NULL } }, + { "StrategyGame", FALSE, FALSE, FALSE, { "Game", NULL } }, + { "Art", FALSE, FALSE, FALSE, { "Education", NULL } }, + { "Construction", FALSE, FALSE, FALSE, { "Education", NULL } }, + { "Music", FALSE, FALSE, FALSE, { "AudioVideo;Education", NULL } }, + { "Languages", FALSE, FALSE, FALSE, { "Education", NULL } }, + { "Science", FALSE, FALSE, FALSE, { "Education", NULL } }, + { "ArtificialIntelligence", FALSE, FALSE, FALSE, { "Education;Science", NULL } }, + { "Astronomy", FALSE, FALSE, FALSE, { "Education;Science", NULL } }, + { "Biology", FALSE, FALSE, FALSE, { "Education;Science", NULL } }, + { "Chemistry", FALSE, FALSE, FALSE, { "Education;Science", NULL } }, + { "ComputerScience", FALSE, FALSE, FALSE, { "Education;Science", NULL } }, + { "DataVisualization", FALSE, FALSE, FALSE, { "Education;Science", NULL } }, + { "Economy", FALSE, FALSE, FALSE, { "Education", NULL } }, + { "Electricity", FALSE, FALSE, FALSE, { "Education;Science", NULL } }, + { "Geography", FALSE, FALSE, FALSE, { "Education", NULL } }, + { "Geology", FALSE, FALSE, FALSE, { "Education;Science", NULL } }, + { "Geoscience", FALSE, FALSE, FALSE, { "Education;Science", NULL } }, + { "History", FALSE, FALSE, FALSE, { "Education", NULL } }, + { "ImageProcessing", FALSE, FALSE, FALSE, { "Education;Science", NULL } }, + { "Literature", FALSE, FALSE, FALSE, { "Education", NULL } }, + { "Math", FALSE, FALSE, FALSE, { "Education;Science", NULL } }, + { "NumericalAnalysis", FALSE, FALSE, FALSE, { "Education;Science;Math", NULL } }, + { "MedicalSoftware", FALSE, FALSE, FALSE, { "Education;Science", NULL } }, + { "Physics", FALSE, FALSE, FALSE, { "Education;Science", NULL } }, + { "Robotics", FALSE, FALSE, FALSE, { "Education;Science", NULL } }, + { "Sports", FALSE, FALSE, FALSE, { "Education", NULL } }, + { "ParallelComputing", FALSE, FALSE, FALSE, { "Education;Science;ComputerScience", NULL } }, + { "Amusement", FALSE, FALSE, FALSE, { NULL } }, + { "Archiving", FALSE, FALSE, FALSE, { "Utility", NULL } }, + { "Compression", FALSE, FALSE, FALSE, { "Utility;Archiving", NULL } }, + { "Electronics", FALSE, FALSE, FALSE, { NULL } }, + { "Emulator", FALSE, FALSE, FALSE, { "System", "Game", NULL } }, + { "Engineering", FALSE, FALSE, FALSE, { NULL } }, + { "FileTools", FALSE, FALSE, FALSE, { "Utility", "System", NULL } }, + { "FileManager", FALSE, FALSE, FALSE, { "System;FileTools", NULL } }, + { "TerminalEmulator", FALSE, FALSE, FALSE, { "System", NULL } }, + { "Filesystem", FALSE, FALSE, FALSE, { "System", NULL } }, + { "Monitor", FALSE, FALSE, FALSE, { "System", NULL } }, + { "Security", FALSE, FALSE, FALSE, { "Settings", "System", NULL } }, + { "Accessibility", FALSE, FALSE, FALSE, { "Settings", "Utility", NULL } }, + { "Calculator", FALSE, FALSE, FALSE, { "Utility", NULL } }, + { "Clock", FALSE, FALSE, FALSE, { "Utility", NULL } }, + { "TextEditor", FALSE, FALSE, FALSE, { "Utility", NULL } }, + { "Documentation", FALSE, FALSE, FALSE, { NULL } }, + { "Core", FALSE, FALSE, FALSE, { NULL } }, + { "KDE", FALSE, FALSE, FALSE, { "Qt", NULL } }, + { "GNOME", FALSE, FALSE, FALSE, { "GTK", NULL } }, + { "GTK", FALSE, FALSE, FALSE, { NULL } }, + { "Qt", FALSE, FALSE, FALSE, { NULL } }, + { "Motif", FALSE, FALSE, FALSE, { NULL } }, + { "Java", FALSE, FALSE, FALSE, { NULL } }, + { "ConsoleOnly", FALSE, FALSE, FALSE, { NULL } }, + { "Screensaver", FALSE, TRUE, FALSE, { NULL } }, + { "TrayIcon", FALSE, TRUE, FALSE, { NULL } }, + { "Applet", FALSE, TRUE, FALSE, { NULL } }, + { "Shell", FALSE, TRUE, FALSE, { NULL } }, + { "Application", FALSE, FALSE, TRUE, { NULL } }, + { "Applications", FALSE, FALSE, TRUE, { NULL } } +}; + +static void +print_fatal (kf_validator *kf, const char *format, ...) +{ + va_list args; + gchar *str; + + g_return_if_fail (kf != NULL && format != NULL); + + kf->fatal_error = TRUE; + + va_start (args, format); + str = g_strdup_vprintf (format, args); + va_end (args); + + g_print ("%s: error: %s", kf->filename, str); + + g_free (str); +} + +static void +print_future_fatal (kf_validator *kf, const char *format, ...) +{ + va_list args; + gchar *str; + + g_return_if_fail (kf != NULL && format != NULL); + + va_start (args, format); + str = g_strdup_vprintf (format, args); + va_end (args); + + g_print ("%s: error: (will be fatal in the future): %s", kf->filename, str); + + g_free (str); +} + +static void +print_warning (kf_validator *kf, const char *format, ...) +{ + va_list args; + gchar *str; + + g_return_if_fail (kf != NULL && format != NULL); + + va_start (args, format); + str = g_strdup_vprintf (format, args); + va_end (args); + + g_print ("%s: warning: %s", kf->filename, str); + + g_free (str); +} + +/* + Key names must contain only the characters A-Za-z0-9-. + * Checked. + */ +static gboolean +key_is_valid (const char *key, + int len) +{ + char c; + int i; + + for (i = 0; i < len; i++) { + c = key[i]; + if (!g_ascii_isalnum (c) && c != '-') + return FALSE; + } + + return TRUE; +} + +/* + Values of type string may contain all ASCII characters except for control + * characters. + * Checked. + */ +static gboolean +validate_string_key (kf_validator *kf, + const char *key, + const char *locale, + const char *value) +{ + int i; + gboolean error; + + error = FALSE; + + for (i = 0; value[i] != '\0'; i++) { + if (g_ascii_iscntrl (value[i])) { + error = TRUE; + break; + } + } + + if (error) { + print_fatal (kf, "value \"%s\" for string key \"%s\" in group \"%s\" " + "contains invalid characters, string values may contain " + "all ASCII characters except for control characters\n", + value, key, kf->current_group); + + return FALSE; + } + + return TRUE; +} + +/* + Values of type localestring are user displayable, and are encoded in + * UTF-8. + * Checked. + * + If a postfixed key occurs, the same key must be also present without the + * postfix. + * Checked. + */ +static gboolean +validate_localestring_key (kf_validator *kf, + const char *key, + const char *locale, + const char *value) +{ + char *locale_key; + + if (locale) + locale_key = g_strdup_printf ("%s[%s]", key, locale); + else + locale_key = g_strdup_printf ("%s", key); + + if (!g_utf8_validate (value, -1, NULL)) { + print_fatal (kf, "value \"%s\" for locale string key \"%s\" in group " + "\"%s\" contains invalid UTF-8 characters, locale string " + "values should be encoded in UTF-8\n", + value, locale_key, kf->current_group); + g_free (locale_key); + + return FALSE; + } + + if (!g_hash_table_lookup (kf->current_keys, key)) { + print_fatal (kf, "key \"%s\" in group \"%s\" is a localized key, but " + "there is no non-localized key \"%s\"\n", + locale_key, kf->current_group, key); + g_free (locale_key); + + return FALSE; + } + + g_free (locale_key); + + return TRUE; +} + +/* + Values of type boolean must either be the string true or false. + * Checked. + * + Historically some booleans have been represented by the numeric entries 0 + * or 1. With this version of the standard they are now to be represented as + * a boolean string. However, if an implementation is reading a pre-1.0 + * desktop entry, it should interpret 0 and 1 as false and true, + * respectively. + * Checked. + */ +static gboolean +validate_boolean_key (kf_validator *kf, + const char *key, + const char *locale, + const char *value) +{ + if (strcmp (value, "true") && strcmp (value, "false") && + strcmp (value, "0") && strcmp (value, "1")) { + print_fatal (kf, "value \"%s\" for boolean key \"%s\" in group \"%s\" " + "contains invalid characters, boolean values must be " + "\"false\" or \"true\"\n", + value, key, kf->current_group); + return FALSE; + } + + if (!kf->no_deprecated_warnings && + (!strcmp (value, "0") || !strcmp (value, "1"))) + print_warning (kf, "boolean key \"%s\" in group \"%s\" has value \"%s\", " + "which is deprecated: boolean values should be " + "\"false\" or \"true\"\n", + key, kf->current_group, value); + + return TRUE; +} + +/* + Values of type numeric must be a valid floating point number as recognized + * by the %f specifier for scanf. + * Checked. + */ +static gboolean +validate_numeric_key (kf_validator *kf, + const char *key, + const char *locale, + const char *value) +{ + float d; + int res; + + res = sscanf (value, "%f", &d); + if (res == 0) { + print_fatal (kf, "value \"%s\" for numeric key \"%s\" in group \"%s\" " + "contains invalid characters, numeric values must be " + "valid floating point numbers\n", + value, key, kf->current_group); + return FALSE; + } + + return TRUE; +} + +/* + Values of type string may contain all ASCII characters except for control + * characters. + * Checked. + * + The multiple values should be separated by a semicolon. Those keys which + * have several values should have a semicolon as the trailing character. + * Checked. + * + FIXME: how should an empty list be handled? + */ +static gboolean +validate_string_regexp_list_key (kf_validator *kf, + const char *key, + const char *locale, + const char *value, + const char *type) +{ + int i; + gboolean error; + + error = FALSE; + + for (i = 0; value[i] != '\0'; i++) { + if (g_ascii_iscntrl (value[i])) { + error = TRUE; + break; + } + } + + if (error) { + print_fatal (kf, "value \"%s\" for %s list key \"%s\" in group \"%s\" " + "contains invalid character '%c', %s list values may " + "contain all ASCII characters except for control " + "characters\n", + value, type, key, kf->current_group, value[i], type); + + return FALSE; + } + + if (i > 0 && value[i - 1] != ';') { + print_fatal (kf, "value \"%s\" for %s list key \"%s\" in group \"%s\" " + "does not have a semicolon (';') as trailing " + "character\n", + value, type, key, kf->current_group); + + return FALSE; + } + + if (i > 1 && value[i - 1] == ';' && value[i - 2] == '\\' && + (i < 3 || value[i - 3] != '\\')) { + print_fatal (kf, "value \"%s\" for %s list key \"%s\" in group \"%s\" " + "has an escaped semicolon (';') as trailing character\n", + value, type, key, kf->current_group); + + return FALSE; + } + + return TRUE; +} + +static gboolean +validate_string_list_key (kf_validator *kf, + const char *key, + const char *locale, + const char *value) +{ + return validate_string_regexp_list_key (kf, key, locale, value, "string"); +} + +static gboolean +validate_regexp_list_key (kf_validator *kf, + const char *key, + const char *locale, + const char *value) +{ + return validate_string_regexp_list_key (kf, key, locale, value, "regexp"); +} + +/* + Values of type localestring are user displayable, and are encoded in + * UTF-8. + * FIXME: partly checked; we checked the whole value is encored in UTF-8, but + * not that each value of the list is. Although this might be equivalent? + * + If a postfixed key occurs, the same key must be also present without the + * postfix. + * Checked. + * + The multiple values should be separated by a semicolon. Those keys which + * have several values should have a semicolon as the trailing character. + * FIXME: partly checked. We use checks that work for sure for ascii + * characters, but that could possibly fail in some weird UTF-8 strings. + * + FIXME: how should an empty list be handled? + */ +static gboolean +validate_localestring_list_key (kf_validator *kf, + const char *key, + const char *locale, + const char *value) +{ + char *locale_key; + int len; + + if (locale) + locale_key = g_strdup_printf ("%s[%s]", key, locale); + else + locale_key = g_strdup_printf ("%s", key); + + + if (!g_utf8_validate (value, -1, NULL)) { + print_fatal (kf, "value \"%s\" for locale string list key \"%s\" in group " + "\"%s\" contains invalid UTF-8 characters, locale string " + "list values should be encoded in UTF-8\n", + value, locale_key, kf->current_group); + g_free (locale_key); + + return FALSE; + } + + len = strlen (value); + + if (len > 0 && value[len - 1] != ';') { + print_fatal (kf, "value \"%s\" for locale string list key \"%s\" in group " + "\"%s\" does not have a semicolon (';') as trailing " + "character\n", + value, locale_key, kf->current_group); + + return FALSE; + } + + if (len > 1 && value[len - 1] == ';' && value[len - 2] == '\\' && + (len < 3 || value[len - 3] != '\\')) { + print_fatal (kf, "value \"%s\" for locale string list key \"%s\" in group " + "\"%s\" has an escaped semicolon (';') as trailing " + "character\n", + value, locale_key, kf->current_group); + + return FALSE; + } + + if (!g_hash_table_lookup (kf->current_keys, key)) { + print_fatal (kf, "key \"%s\" in group \"%s\" is a localized key, but " + "there is no non-localized key \"%s\"\n", + locale_key, kf->current_group, key); + g_free (locale_key); + + return FALSE; + } + + g_free (locale_key); + + return TRUE; +} + +/* + This specification defines 3 types of desktop entries: Application + * (type 1), Link (type 2) and Directory (type 3). To allow the addition of + * new types in the future, implementations should ignore desktop entries + * with an unknown type. + * Checked. + * + KDE specific types: ServiceType, Service and FSDevice + * Checked. + */ +static gboolean +handle_type_key (kf_validator *kf, + const char *locale_key, + const char *value) +{ + unsigned int i; + + for (i = 0; i < G_N_ELEMENTS (registered_types); i++) { + if (!strcmp (value, registered_types[i].name)) + break; + } + + if (i == G_N_ELEMENTS (registered_types)) { + /* force the type, since the key might be present multiple times... */ + kf->type = INVALID_TYPE; + + print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "is not a registered type value (\"Application\", " + "\"Link\" and \"Directory\")\n", + value, locale_key, kf->current_group); + return FALSE; + } + + if (registered_types[i].kde_reserved && kf->kde_reserved_warnings) + print_warning (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "is a reserved value for KDE\n", + value, locale_key, kf->current_group); + + if (registered_types[i].deprecated && !kf->no_deprecated_warnings) + print_warning (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "is deprecated\n", + value, locale_key, kf->current_group); + + kf->type = registered_types[i].type; + kf->type_string = registered_types[i].name; + + return TRUE; +} + +/* + Entries that confirm with this version of the specification should use + * 1.0. + * Checked. + * + Previous versions of the spec: 0.9.x where 3 <= x <= 8 + * Checked. + */ +static gboolean +handle_version_key (kf_validator *kf, + const char *locale_key, + const char *value) +{ + if (!strcmp (value, "1.0")) + return TRUE; + + if (!strncmp (value, "0.9.", strlen ("0.9."))) { + char c; + + c = value[strlen ("0.9.")]; + if ('3' <= c && c <= '8' && value[strlen ("0.9.") + 1] == '\0') + return TRUE; + } + + print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "is not a known version\n", + value, locale_key, kf->current_group); + return FALSE; +} + +/* + Tooltip for the entry, for example "View sites on the Internet", should + * not be redundant with Name or GenericName. + * Checked. + */ +static gboolean +handle_comment_key (kf_validator *kf, + const char *locale_key, + const char *value) +{ + char *locale_compare_key; + kf_keyvalue *keyvalue; + + locale_compare_key = g_strdup_printf ("Name%s", + locale_key + strlen ("Comment")); + keyvalue = g_hash_table_lookup (kf->current_keys, locale_compare_key); + g_free (locale_compare_key); + + if (keyvalue && g_ascii_strcasecmp (value, keyvalue->value) == 0) { + print_warning (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "looks redundant with value \"%s\" of key \"%s\"\n", + value, locale_key, kf->current_group, + keyvalue->value, keyvalue->key); + return FALSE; + } + + locale_compare_key = g_strdup_printf ("GenericName%s", + locale_key + strlen ("Comment")); + keyvalue = g_hash_table_lookup (kf->current_keys, locale_compare_key); + g_free (locale_compare_key); + + if (keyvalue && g_ascii_strcasecmp (value, keyvalue->value) == 0) { + print_warning (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "looks redundant with value \"%s\" of key \"%s\"\n", + value, locale_key, kf->current_group, + keyvalue->value, keyvalue->key); + return FALSE; + } + + return TRUE; +} + +/* + If the name is an absolute path, the given file will be used. + * Checked. + * + If the name is not an absolute path, the algorithm described in the Icon + * Theme Specification will be used to locate the icon. + * Checked. + * FIXME: add clarification to desktop entry spec that the name doesn't + * contain an extension + */ +static gboolean +handle_icon_key (kf_validator *kf, + const char *locale_key, + const char *value) +{ + if (g_path_is_absolute (value)) { + if (g_str_has_suffix (value, "/")) { + print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" is an " + "absolute path to a directory, instead of being an " + "absolute path to an icon or an icon name\n", + value, locale_key, kf->current_group); + return FALSE; + } else + return TRUE; + } + + if (g_utf8_strchr (value, -1, G_DIR_SEPARATOR)) { + print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" looks like " + "a relative path, instead of being an absolute path to " + "an icon or an icon name\n", + value, locale_key, kf->current_group); + return FALSE; + } + + if (g_str_has_suffix (value, ".png") || + g_str_has_suffix (value, ".xpm") || + g_str_has_suffix (value, ".svg")) { + print_future_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" is an icon " + "name with an extension, but there should be no extension " + "as described in the Icon Theme Specification if the " + "value is not an absolute path\n", + value, locale_key, kf->current_group); + return FALSE; + } + + return TRUE; +} + +/* + Only one of these keys, either OnlyShowIn or NotShowIn, may appear in a + * group. + * Checked. + * + (for possible values see the Desktop Menu Specification) + * Checked. + * FIXME: this is not perfect because it could fail if a new value with + * a semicolon is registered. + * + All values extending the format should start with "X-". + * Checked. + * + FIXME: is this okay to have only ";"? (gnome-theme-installer.desktop does) + */ +static gboolean +handle_show_in_key (kf_validator *kf, + const char *locale_key, + const char *value) +{ + gboolean retval; + char **show; + GHashTable *hashtable; + int i; + unsigned int j; + + retval = TRUE; + + if (kf->show_in) { + print_fatal (kf, "only one of \"OnlyShowIn\" and \"NotShowIn\" keys " + "may appear in group \"%s\"\n", + kf->current_group); + retval = FALSE; + } + kf->show_in = TRUE; + + hashtable = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, NULL); + show = g_strsplit (value, ";", 0); + + for (i = 0; show[i]; i++) { + /* since the value ends with a semicolon, we'll have an empty string + * at the end */ + if (*show[i] == '\0' && show[i + 1] == NULL) + break; + + if (g_hash_table_lookup (hashtable, show[i])) { + print_warning (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "contains \"%s\" more than once\n", + value, locale_key, kf->current_group, show[i]); + continue; + } + + g_hash_table_insert (hashtable, show[i], show[i]); + + if (!strncmp (show[i], "X-", 2)) + continue; + + for (j = 0; j < G_N_ELEMENTS (show_in_registered); j++) { + if (!strcmp (show[i], show_in_registered[j])) + break; + } + + if (j == G_N_ELEMENTS (show_in_registered)) { + print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "contains an unregistered value \"%s\"; values " + "extending the format should start with \"X-\"\n", + value, locale_key, kf->current_group, show[i]); + retval = FALSE; + } + } + + g_strfreev (show); + g_hash_table_destroy (hashtable); + + return retval; +} + +/* + A command line consists of an executable program optionally followed by + * one or more arguments. The executable program can either be specified with + * its full path or with the name of the executable only. If no full path is + * provided the executable is looked up in the $PATH used by the desktop + * environment. The name or path of the executable program may not contain + * the equal sign ("="). + * FIXME + * + Arguments are separated by a space. + * FIXME + * + Arguments may be quoted in whole. + * FIXME + * + If an argument contains a reserved character the argument must be quoted. + * Checked. + * + The rules for quoting of arguments is also applicable to the executable + * name or path of the executable program as provided. + * FIXME + * + Quoting must be done by enclosing the argument between double quotes and + * escaping the double quote character, backtick character ("`"), dollar sign + * ("$") and backslash character ("\") by preceding it with an additional + * backslash character. Implementations must undo quoting before expanding + * field codes and before passing the argument to the executable program. + * Reserved characters are space (" "), tab, newline, double quote, single + * quote ("'"), backslash character ("\"), greater-than sign (">"), less-than + * sign ("<"), tilde ("~"), vertical bar ("|"), ampersand ("&"), semicolon + * (";"), dollar sign ("$"), asterisk ("*"), question mark ("?"), hash mark + * ("#"), parenthesis ("(") and (")") and backtick character ("`"). + * Checked. + * + Note that the general escape rule for values of type string states that + * the backslash character can be escaped as ("\\") as well and that this + * escape rule is applied before the quoting rule. As such, to unambiguously + * represent a literal backslash character in a quoted argument in a desktop + * entry file requires the use of four successive backslash characters + * ("\\\\"). Likewise, a literal dollar sign in a quoted argument in a + * desktop entry file is unambiguously represented with ("\\$"). + * Checked. + * + Field codes consist of the percentage character ("%") followed by an alpha + * character. Literal percentage characters must be escaped as %%. + * Checked. + * + Command lines that contain a field code that is not listed in this + * specification are invalid and must not be processed, in particular + * implementations may not introduce support for field codes not listed in + * this specification. Extensions, if any, should be introduced by means of a + * new key. + * Checked. + * + A command line may contain at most one %f, %u, %F or %U field code. + * Checked. + * + The %F and %U field codes may only be used as an argument on their own. + * FIXME + */ +static gboolean +handle_exec_key (kf_validator *kf, + const char *locale_key, + const char *value) +{ + gboolean retval; + gboolean file_uri; + gboolean in_quote; + gboolean escaped; + gboolean flag; + const char *c; + + retval = TRUE; + + file_uri = FALSE; + in_quote = FALSE; + escaped = FALSE; + flag = FALSE; + +#define PRINT_INVALID_IF_FLAG \ + if (flag) { \ + print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" " \ + "contains an invalid field code \"%%%c\"\n", \ + value, locale_key, kf->current_group, *c); \ + retval = FALSE; \ + flag = FALSE; \ + break; \ + } + + c = value; + while (*c) { + switch (*c) { + /* quotes and escaped characters in quotes */ + case '"': + PRINT_INVALID_IF_FLAG; + if (in_quote) { + if (!escaped) + in_quote = FALSE; + } else { + if (!escaped) + in_quote = TRUE; + else { + print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "contains an escaped double quote (\\\\\") " + "outside of a quote, but the double quote is " + "a reserved character\n", + value, locale_key, kf->current_group); + retval = FALSE; + + escaped = FALSE; + } + } + break; + case '`': + case '$': + PRINT_INVALID_IF_FLAG; + if (in_quote) { + if (!escaped) { + print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "contains a non-escaped character '%c' in a " + "quote, but it should be escaped with two " + "backslashes (\"\\\\%c\")\n", + value, locale_key, kf->current_group, *c, *c); + retval = FALSE; + } else + escaped = FALSE; + } else { + print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "contains a reserved character '%c' outside of a " + "quote\n", + value, locale_key, kf->current_group, *c); + retval = FALSE; + } + break; + case '\\': + PRINT_INVALID_IF_FLAG; + c++; + if (*c == '\\' && in_quote) + escaped = !escaped; + break; + + /* reserved characters */ + case ' ': + //FIXME + break; + case '\t': + case '\n': + case '\'': + case '>': + case '<': + case '~': + case '|': + case '&': + case ';': + case '*': + case '?': + case '#': + case '(': + case ')': + PRINT_INVALID_IF_FLAG; + if (!in_quote) { + print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "contains a reserved character '%c' outside of a " + "quote\n", + value, locale_key, kf->current_group, *c); + retval = FALSE; + } + break; + + /* flags */ + case '%': + flag = !flag; + break; + case 'f': + case 'u': + if (flag) { + if (file_uri) { + print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "may contain at most one \"%f\", \"%u\", " + "\"%F\" or \"%U\" field code\n", + value, locale_key, kf->current_group); + retval = FALSE; + } + + file_uri = TRUE; + flag = FALSE; + } + break; + case 'F': + case 'U': + if (flag) { + if (file_uri) { + print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "may contain at most one \"%f\", \"%u\", " + "\"%F\" or \"%U\" field code\n", + value, locale_key, kf->current_group); + retval = FALSE; + } + + file_uri = TRUE; + flag = FALSE; + } + break; + case 'i': + case 'c': + case 'k': + if (flag) + flag = FALSE; + break; + case 'd': + case 'D': + case 'n': + case 'N': + case 'v': + case 'm': + if (flag) { + if (!kf->no_deprecated_warnings) + print_warning (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "contains a deprecated field code \"%%%c\"\n", + value, locale_key, kf->current_group, *c); + flag = FALSE; + } + break; + + default: + PRINT_INVALID_IF_FLAG; + break; + } + + c++; + } + + if (in_quote) { + print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" contains a " + "quote which is not closed\n", + value, locale_key, kf->current_group); + retval = FALSE; + } + + if (flag) { + print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" contains a " + "non-complete field code\n", + value, locale_key, kf->current_group); + retval = FALSE; + } + + return retval; +} + +/* See checks for handle_exec_key(). + */ +static gboolean +handle_desktop_exec_key (kf_validator *kf, + const char *locale_key, + const char *value) +{ + handle_key_for_application (kf, locale_key, value); + + return handle_exec_key (kf, locale_key, value); +} + +/* + If entry is of type Application, the working directory to run the program + * in. (probably implies an absolute path) + * Checked. + * + FIXME: is it okay to have an empty string here? (wireshark.desktop does) + */ +static gboolean +handle_path_key (kf_validator *kf, + const char *locale_key, + const char *value) +{ + handle_key_for_application (kf, locale_key, value); + + if (!g_path_is_absolute (value)) + print_warning (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "does not look like an absolute path\n", + value, locale_key, kf->current_group); + + return TRUE; +} + +/* + The MIME type(s) supported by this application. Check they are valid + * MIME types. + * Checked. + */ +static gboolean +handle_mime_key (kf_validator *kf, + const char *locale_key, + const char *value) +{ + gboolean retval; + char **types; + GHashTable *hashtable; + int i; + char *valid_error; + MimeUtilsValidity valid; + + handle_key_for_application (kf, locale_key, value); + + retval = TRUE; + + hashtable = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, NULL); + types = g_strsplit (value, ";", 0); + + for (i = 0; types[i]; i++) { + /* since the value ends with a semicolon, we'll have an empty string + * at the end */ + if (*types[i] == '\0' && types[i + 1] == NULL) + break; + + if (g_hash_table_lookup (hashtable, types[i])) { + print_warning (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "contains \"%s\" more than once\n", + value, locale_key, kf->current_group, types[i]); + continue; + } + + g_hash_table_insert (hashtable, types[i], types[i]); + + valid = mu_mime_type_is_valid (types[i], &valid_error); + switch (valid) { + case MU_VALID: + break; + case MU_DISCOURAGED: + print_warning (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "contains value \"%s\" which is a MIME type that " + "should probably not be used: %s\n", + value, locale_key, kf->current_group, + types[i], valid_error); + + g_free (valid_error); + break; + case MU_INVALID: + print_future_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "contains value \"%s\" which is an invalid MIME " + "type: %s\n", + value, locale_key, kf->current_group, + types[i], valid_error); + + retval = FALSE; + g_free (valid_error); + break; + default: + g_assert_not_reached (); + } + } + + g_strfreev (types); + g_hash_table_destroy (hashtable); + + return retval; +} + +/* + FIXME: are there restrictions on how a category should be named? + * + Categories in which the entry should be shown in a menu (for possible + * values see the Desktop Menu Specification). + * Checked. + * + The table below describes Reserved Categories. Reserved Categories have a + * specific desktop specific meaning that has not been standardized (yet). + * Desktop entry files that use a reserved category MUST also include an + * appropriate OnlyShowIn= entry to restrict themselves to those environments + * that properly support the reserved category as used. + * Checked. + * + Accept "Application" as a deprecated category. + * Checked. + * FIXME: it's not really deprecated, so the error message is wrong + * + All categories extending the format should start with "X-". + * Checked. + * + At least one main category must be included. + * Checked. + * FIXME: decide if it's okay to have an empty list of categories. + * + Some categories, if include, require that another category is included. + * Eg: if Audio is there, AudioVideo must be there. Same for most additional + * categories. + * Checked. + */ +static gboolean +handle_categories_key (kf_validator *kf, + const char *locale_key, + const char *value) +{ + gboolean retval; + char **categories; + GHashTable *hashtable; + int i; + unsigned int j; + gboolean main_category_present; + + handle_key_for_application (kf, locale_key, value); + + retval = TRUE; + + /* accept empty value as valid: this is like having no category at all */ + if (value[0] == '\0') + return retval; + + hashtable = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, NULL); + categories = g_strsplit (value, ";", 0); + + /* this is a two-pass check: we first put the categories in a hash table so + * that they are easy-to-find, and we then do many checks */ + + /* first pass */ + for (i = 0; categories[i]; i++) { + /* since the value ends with a semicolon, we'll have an empty string + * at the end */ + if (*categories[i] == '\0' && categories[i + 1] == NULL) + break; + + if (g_hash_table_lookup (hashtable, categories[i])) { + print_warning (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "contains \"%s\" more than once\n", + value, locale_key, kf->current_group, categories[i]); + continue; + } + + g_hash_table_insert (hashtable, categories[i], categories[i]); + } + + /* second pass */ + main_category_present = FALSE; + + for (i = 0; categories[i]; i++) { + unsigned int k; + + /* since the value ends with a semicolon, we'll have an empty string + * at the end */ + if (*categories[i] == '\0' && categories[i + 1] == NULL) + break; + + if (!strncmp (categories[i], "X-", 2)) + continue; + + for (j = 0; j < G_N_ELEMENTS (registered_categories); j++) { + if (!strcmp (categories[i], registered_categories[j].name)) + break; + } + + if (j == G_N_ELEMENTS (registered_categories)) { + print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "contains an unregistered value \"%s\"; values " + "extending the format should start with \"X-\"\n", + value, locale_key, kf->current_group, categories[i]); + retval = FALSE; + continue; + } + + if (registered_categories[j].main) + main_category_present = TRUE; + + if (registered_categories[j].deprecated) { + if (!kf->no_deprecated_warnings) + print_warning (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "contains a deprecated value \"%s\"\n", + value, locale_key, kf->current_group, + categories[i]); + } + + if (registered_categories[j].require_only_show_in) { + if (!g_hash_table_lookup (kf->current_keys, "OnlyShowIn")) { + print_fatal (kf, "value \"%s\" in key \"%s\" in group \"%s\" " + "is a reserved category, so a \"OnlyShowIn\" key " + "must be included\n", + categories[i], locale_key, kf->current_group); + retval = FALSE; + } + } + + for (k = 0; registered_categories[j].requires[k] != NULL; k++) { + char **required_categories; + int l; + + required_categories = g_strsplit (registered_categories[j].requires[k], + ";", 0); + + for (l = 0; required_categories[l]; l++) { + if (!g_hash_table_lookup (hashtable, required_categories[l])) + break; + } + + /* we've reached the end of a list of required categories, so + * the condition is satisfied */ + if (required_categories[l] == NULL) { + g_strfreev (required_categories); + break; + } + + g_strfreev (required_categories); + } + + /* there was a required category and it wasn't found */ + if (k != 0 && registered_categories[j].requires[k] == NULL) { + GString *output_required; + + output_required = g_string_new (registered_categories[j].requires[0]); + for (k = 1; registered_categories[j].requires[k] != NULL; k++) + g_string_append_printf (output_required, ", or %s", + registered_categories[j].requires[k]); + + print_future_fatal (kf, "value \"%s\" in key \"%s\" in group \"%s\" " + "requires another category to be present among the " + "following categories: %s\n", + categories[i], locale_key, kf->current_group, + output_required->str); + + g_string_free (output_required, TRUE); + retval = FALSE; + } + + } + + g_strfreev (categories); + g_hash_table_destroy (hashtable); + + if (!main_category_present) { + print_future_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "does not contain a registered main category\n", + value, locale_key, kf->current_group, categories[i]); + retval = FALSE; + } + + return retval; +} + +/* + Identifiers for application actions. Check they are using a valid format. + * Checked. + * + * Note that we will check later on (in * validate_actions()) that there is a + * "Desktop Action foobar" group for each "foobar" identifier. + */ +static gboolean +handle_actions_key (kf_validator *kf, + const char *locale_key, + const char *value) +{ + char **actions; + char *action; + int i; + gboolean retval; + + handle_key_for_application (kf, locale_key, value); + + retval = TRUE; + actions = g_strsplit (value, ";", 0); + + for (i = 0; actions[i]; i++) { + /* since the value ends with a semicolon, we'll have an empty string + * at the end */ + if (*actions[i] == '\0') { + if (actions[i + 1] != NULL) { + print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "contains an empty action\n", + value, locale_key, kf->current_group); + retval = FALSE; + break; + } + + continue; + } + + if (g_hash_table_lookup (kf->action_values, actions[i])) { + print_warning (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "contains action \"%s\" more than once\n", + value, locale_key, kf->current_group, actions[i]); + continue; + } + + if (!key_is_valid (actions[i], strlen (actions[i]))) { + print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "contains invalid action identifier \"%s\", only " + "alphanumeric characters and '-' are allowed\n", + value, locale_key, kf->current_group, actions[i]); + retval = FALSE; + break; + } + + action = g_strdup (actions[i]); + g_hash_table_insert (kf->action_values, action, action); + } + + g_strfreev (actions); + + return retval; +} + +/* + The device to mount. (probably implies an absolute path) + * Checked. + */ +static gboolean +handle_dev_key (kf_validator *kf, + const char *locale_key, + const char *value) +{ + handle_key_for_fsdevice (kf, locale_key, value); + + if (!g_path_is_absolute (value)) + print_warning (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "does not look like an absolute path\n", + value, locale_key, kf->current_group); + + return TRUE; +} + +/* + The mount point of the device in question. (probably implies an absolute + * path) + * Checked. + */ +static gboolean +handle_mountpoint_key (kf_validator *kf, + const char *locale_key, + const char *value) +{ + handle_key_for_fsdevice (kf, locale_key, value); + + if (!g_path_is_absolute (value)) + print_warning (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "does not look like an absolute path\n", + value, locale_key, kf->current_group); + + return TRUE; +} + +/* + Possible values are UTF-8 and Legacy-Mixed. + * Checked. + */ +static gboolean +handle_encoding_key (kf_validator *kf, + const char *locale_key, + const char *value) +{ + if (!strcmp (value, "UTF-8") || !strcmp (value, "Legacy-Mixed")) + return TRUE; + + print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "is not a registered encoding value (\"UTF-8\", and " + "\"Legacy-Mixed\")\n", + value, locale_key, kf->current_group); + + return FALSE; +} + +/* + See http://lists.freedesktop.org/archives/xdg/2007-January/007436.html + * + Value is one of: + * - if-exists FILE + * - unless-exists FILE + * - DESKTOP-ENVIRONMENT-NAME [DESKTOP-SPECIFIC-TEST] + * Checked. + * + FILE must be a path to a filename, relative to $XDG_CONFIG_HOME. + * Checked. + * + DESKTOP-ENVIRONMENT-NAME should be a registered value (in Desktop Menu + * Specification) or start with "X-". + * Checked. + * + [DESKTOP-SPECIFIC-TEST] is optional. + * Checked. + */ +static gboolean +handle_autostart_condition_key (kf_validator *kf, + const char *locale_key, + const char *value) +{ + gboolean retval; + char *condition; + char *argument; + + handle_key_for_application (kf, locale_key, value); + + retval = TRUE; + + condition = g_strdup (value); + argument = g_utf8_strchr (condition, -1, ' '); + + if (argument) { + /* make condition a 0-ended string */ + *argument = '\0'; + + /* skip the space(s) */ + argument++; + while (*argument == ' ') { + argument++; + } + } + + if (!strcmp (condition, "if-exists") || !strcmp (condition, "unless-exists")) { + if (!argument || argument[0] == '\0') { + print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "does not contain a path to a file to test the " + "condition\n", + value, locale_key, kf->current_group); + retval = FALSE; + } else if (argument[0] == G_DIR_SEPARATOR) { + print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "contains a path \"%s\" that is absolute, while it " + "should be relative (to $XDG_CONFIG_HOME)\n", + value, locale_key, kf->current_group, argument); + retval = FALSE; + } else if (argument[0] == '.' && + ((strlen (argument) == 2 && + argument[1] == '.') || + (strlen (argument) >= 3 && + argument[1] == '.' && + argument[2] == G_DIR_SEPARATOR))) { + print_warning (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "contains a path \"%s\" that depends on the value " + "of $XDG_CONFIG_HOME (\"..\" should be avoided)\n", + value, locale_key, kf->current_group, argument); + } + + } else { + if (strncmp (condition, "X-", 2)) { + unsigned int i; + + for (i = 0; i < G_N_ELEMENTS (show_in_registered); i++) { + if (!strcmp (condition, show_in_registered[i])) + break; + } + + if (i == G_N_ELEMENTS (show_in_registered)) { + print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "contains an unregistered value \"%s\" for the " + "condition; values extending the format should " + "start with \"X-\"\n", + value, locale_key, kf->current_group, condition); + retval = FALSE; + } + } + + if (argument && argument[0] == '\0') { + print_warning (kf, "value \"%s\" for key \"%s\" in group \"%s\" " + "has trailing space(s)\n", + value, locale_key, kf->current_group); + } + } + + g_free (condition); + + return retval; +} + +static gboolean +handle_key_for_application (kf_validator *kf, + const char *locale_key, + const char *value) +{ + kf->application_keys = g_list_append (kf->application_keys, + g_strdup (locale_key)); + return TRUE; +} + +static gboolean +handle_key_for_link (kf_validator *kf, + const char *locale_key, + const char *value) +{ + kf->link_keys = g_list_append (kf->link_keys, + g_strdup (locale_key)); + return TRUE; +} + +static gboolean +handle_key_for_fsdevice (kf_validator *kf, + const char *locale_key, + const char *value) +{ + kf->fsdevice_keys = g_list_append (kf->fsdevice_keys, + g_strdup (locale_key)); + return TRUE; +} + +static gboolean +handle_key_for_mimetype (kf_validator *kf, + const char *locale_key, + const char *value) +{ + kf->mimetype_keys = g_list_append (kf->mimetype_keys, + g_strdup (locale_key)); + return TRUE; +} + +/* + Key names must contain only the characters A-Za-z0-9-. + * Checked (through key_is_valid()). + * + LOCALE must be of the form lang_COUNTRY.ENCODING@MODIFIER, where _COUNTRY, + * .ENCODING, and @MODIFIER may be omitted. + * Checked. + */ +static gboolean +key_extract_locale (const char *key, + char **real_key, + char **locale) +{ + const char *start_locale; + char c; + int len; + int i; + + if (real_key) + *real_key = NULL; + if (locale) + *locale = NULL; + + start_locale = g_strrstr (key, "["); + + if (start_locale) + len = start_locale - key; + else + len = strlen (key); + + if (!key_is_valid(key, len)) + return FALSE; + + if (!start_locale) { + if (real_key) + *real_key = g_strdup (key); + if (locale) + *locale = NULL; + + return TRUE; + } + + len = strlen (start_locale); + if (len <= 2 || start_locale[len - 1] != ']') + return FALSE; + + /* ignore first [ and last ] */ + for (i = 1; i < len - 2; i++) { + c = start_locale[i]; + if (!g_ascii_isalnum (c) && c != '-' && c != '_' && c != '.' && c != '@') + return FALSE; + } + + if (real_key) + *real_key = g_strndup (key, strlen (key) - len); + if (locale) + *locale = g_strndup (start_locale + 1, len - 2); + + return TRUE; +} + +/* + All keys extending the format should start with "X-". + * Checked. + */ +static gboolean +validate_known_key (kf_validator *kf, + const char *locale_key, + const char *key, + const char *locale, + const char *value, + DesktopKeyDefinition *keys, + unsigned int n_keys) +{ + unsigned int i; + unsigned int j; + + if (!strncmp (key, "X-", 2)) + return TRUE; + + for (i = 0; i < n_keys; i++) { + if (strcmp (key, keys[i].name)) + continue; + + if (keys[i].type != DESKTOP_LOCALESTRING_TYPE && + keys[i].type != DESKTOP_LOCALESTRING_LIST_TYPE && + locale != NULL) { + print_fatal (kf, "file contains key \"%s\" in group \"%s\", " + "but \"%s\" is not defined as a locale string\n", + locale_key, kf->current_group, key); + return FALSE; + } + + for (j = 0; j < G_N_ELEMENTS (validate_for_type); j++) { + if (validate_for_type[j].type == keys[i].type) + break; + } + + g_assert (j != G_N_ELEMENTS (validate_for_type)); + + if (!kf->no_deprecated_warnings && keys[i].deprecated) + print_warning (kf, "key \"%s\" in group \"%s\" is deprecated\n", + locale_key, kf->current_group); + + if (keys[i].kde_reserved && kf->kde_reserved_warnings) + print_warning (kf, "key \"%s\" in group \"%s\" is a reserved key for " + "KDE\n", + locale_key, kf->current_group); + + if (!validate_for_type[j].validate (kf, key, locale, value)) + return FALSE; + + if (keys[i].handle_and_validate != NULL) { + if (!keys[i].handle_and_validate (kf, locale_key, value)) + return FALSE; + } + + break; + } + + if (i == n_keys) { + print_fatal (kf, "file contains key \"%s\" in group \"%s\", but " + "keys extending the format should start with " + "\"X-\"\n", key, kf->current_group); + return FALSE; + } + + return TRUE; +} + +static gboolean +validate_desktop_key (kf_validator *kf, + const char *locale_key, + const char *key, + const char *locale, + const char *value) +{ + return validate_known_key (kf, locale_key, key, locale, value, + registered_desktop_keys, + G_N_ELEMENTS (registered_desktop_keys)); +} + +static gboolean +validate_action_key (kf_validator *kf, + const char *locale_key, + const char *key, + const char *locale, + const char *value) +{ + return validate_known_key (kf, locale_key, key, locale, value, + registered_action_keys, + G_N_ELEMENTS (registered_action_keys)); +} + +/* + Multiple keys in the same group may not have the same name. + * Checked. + */ +static gboolean +validate_keys_for_current_group (kf_validator *kf) +{ + gboolean desktop_group; + gboolean action_group; + gboolean retval; + GHashTable *duplicated_keys_hash; + char *key; + char *locale; + GSList *keys; + GSList *sl; + gpointer hashvalue; + + retval = TRUE; + + desktop_group = (!strcmp (kf->current_group, GROUP_DESKTOP_ENTRY) || + !strcmp (kf->current_group, GROUP_KDE_DESKTOP_ENTRY)); + action_group = (!strncmp (kf->current_group, GROUP_DESKTOP_ACTION, + strlen (GROUP_DESKTOP_ACTION))); + + keys = g_slist_copy (g_hash_table_lookup (kf->groups, kf->current_group)); + /* keys were prepended, so reverse the list (that's why we use a + * g_slist_copy() */ + keys = g_slist_reverse (keys); + + kf->current_keys = g_hash_table_new_full (g_str_hash, g_str_equal, + NULL, NULL); + duplicated_keys_hash = g_hash_table_new_full (g_str_hash, g_str_equal, + NULL, NULL); + + /* we need two passes: some checks are looking if another key exists in the + * group */ + for (sl = keys; sl != NULL; sl = sl->next) { + kf_keyvalue *keyvalue; + + keyvalue = (kf_keyvalue *) sl->data; + g_hash_table_insert (kf->current_keys, keyvalue->key, keyvalue); + + /* we could display the error about duplicate keys here, but it's better + * to display it with the first occurence of this key */ + hashvalue = g_hash_table_lookup (duplicated_keys_hash, keyvalue->key); + if (!hashvalue) + g_hash_table_insert (duplicated_keys_hash, keyvalue->key, + GINT_TO_POINTER (1)); + else { + g_hash_table_replace (duplicated_keys_hash, keyvalue->key, + GINT_TO_POINTER (GPOINTER_TO_INT (hashvalue) + 1)); + } + } + + for (sl = keys; sl != NULL; sl = sl->next) { + kf_keyvalue *keyvalue; + gboolean skip_desktop_check; + + keyvalue = (kf_keyvalue *) sl->data; + + skip_desktop_check = FALSE; + + if (!key_extract_locale (keyvalue->key, &key, &locale)) { + print_fatal (kf, "file contains key \"%s\" in group \"%s\", but " + "key names must contain only the characters " + "A-Za-z0-9- (they may have a \"[LOCALE]\" postfix)\n", + keyvalue->key, kf->current_group); + retval = FALSE; + skip_desktop_check = TRUE; + + key = g_strdup (keyvalue->key); + } + + g_assert (key != NULL); + + hashvalue = g_hash_table_lookup (duplicated_keys_hash, keyvalue->key); + if (GPOINTER_TO_INT (hashvalue) > 1) { + g_hash_table_remove (duplicated_keys_hash, keyvalue->key); + print_fatal (kf, "file contains multiple keys named \"%s\" in " + "group \"%s\"\n", keyvalue->key, kf->current_group); + retval = FALSE; + } + + if (desktop_group && !skip_desktop_check) { + if (!validate_desktop_key (kf, keyvalue->key, + key, locale, keyvalue->value)) + retval = FALSE; + } else if (action_group && !skip_desktop_check) { + if (!validate_action_key (kf, keyvalue->key, + key, locale, keyvalue->value)) + retval = FALSE; + } + + g_free (key); + key = NULL; + g_free (locale); + locale = NULL; + } + + g_slist_free (keys); + g_hash_table_destroy (duplicated_keys_hash); + g_hash_table_destroy (kf->current_keys); + kf->current_keys = NULL; + /* Clear ShowIn flag, so that different groups can each have a OnlyShowIn / + * NotShowIn key */ + kf->show_in = FALSE; + + return retval; +} + +/* + Using [KDE Desktop Entry] instead of [Desktop Entry] as header is + * deprecated. + * Checked. + * + Group names may contain all ASCII characters except for [ and ] and + * control characters. + * Checked. + * + All groups extending the format should start with "X-". + * Checked. + * + Accept "Desktop Action foobar" group, where foobar is a valid key + * name. + * Checked. + * + * Note that for "Desktop Action foobar" group, we will check later on (in + * validate_actions()) that the Actions key contains "foobar". + */ +static gboolean +validate_group_name (kf_validator *kf, + const char *group) +{ + int i; + char c; + + for (i = 0; group[i] != '\0'; i++) { + c = group[i]; + if (g_ascii_iscntrl (c) || c == '[' || c == ']') { + print_fatal (kf, "file contains group \"%s\", but group names " + "may contain all ASCII characters except for [ " + "and ] and control characters\n", group); + return FALSE; + } + } + + if (!strncmp (group, "X-", 2)) + return TRUE; + + if (!strcmp (group, GROUP_DESKTOP_ENTRY)) { + if (kf->main_group && !strcmp (kf->main_group, GROUP_KDE_DESKTOP_ENTRY)) + print_warning (kf, "file contains groups \"%s\" and \"%s\", which play " + "the same role\n", + GROUP_KDE_DESKTOP_ENTRY, GROUP_DESKTOP_ENTRY); + + kf->main_group = GROUP_DESKTOP_ENTRY; + + return TRUE; + } + + if (!strcmp (group, GROUP_KDE_DESKTOP_ENTRY)) { + if (kf->kde_reserved_warnings || !kf->no_deprecated_warnings) + print_warning (kf, "file contains group \"%s\", which is deprecated " + "in favor of \"%s\"\n", group, GROUP_DESKTOP_ENTRY); + + if (kf->main_group && !strcmp (kf->main_group, GROUP_DESKTOP_ENTRY)) + print_warning (kf, "file contains groups \"%s\" and \"%s\", which play " + "the same role\n", + GROUP_DESKTOP_ENTRY, GROUP_KDE_DESKTOP_ENTRY); + + kf->main_group = GROUP_KDE_DESKTOP_ENTRY; + + return TRUE; + } + + if (!strncmp (group, GROUP_DESKTOP_ACTION, strlen (GROUP_DESKTOP_ACTION))) { + if (group[strlen (GROUP_DESKTOP_ACTION) - 1] == '\0') { + print_fatal (kf, "file contains group \"%s\", which is an action " + "group with no action name\n", group); + return FALSE; + } else { + char *action; + + action = g_strdup (group + strlen (GROUP_DESKTOP_ACTION)); + + if (!key_is_valid (action, strlen (action))) { + print_fatal (kf, "file contains group \"%s\", which has an invalid " + "action identifier, only alphanumeric characters and " + "'-' are allowed\n", group); + g_free (action); + return FALSE; + } + + g_hash_table_insert (kf->action_groups, action, action); + + return TRUE; + } + } + + print_fatal (kf, "file contains group \"%s\", but groups extending " + "the format should start with \"X-\"\n", group); + return FALSE; +} + +static gboolean +validate_required_keys (kf_validator *kf, + const char *group_name, + DesktopKeyDefinition *key_definitions, + unsigned int n_keys) +{ + gboolean retval; + unsigned int i; + GSList *sl; + GSList *keys; + GHashTable *hashtable; + + retval = TRUE; + + hashtable = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, NULL); + keys = g_hash_table_lookup (kf->groups, group_name); + + for (sl = keys; sl != NULL; sl = sl->next) { + kf_keyvalue *keyvalue; + + keyvalue = (kf_keyvalue *) sl->data; + g_hash_table_insert (hashtable, keyvalue->key, keyvalue->key); + } + + for (i = 0; i < n_keys; i++) { + if (key_definitions[i].required) { + if (!g_hash_table_lookup (hashtable, + key_definitions[i].name)) { + print_fatal (kf, "required key \"%s\" in group \"%s\" is not " + "present\n", + key_definitions[i].name, group_name); + retval = FALSE; + } + } + } + + g_hash_table_destroy (hashtable); + + return retval; +} + +static gboolean +validate_required_desktop_keys (kf_validator *kf) +{ + return validate_required_keys (kf, kf->main_group, + registered_desktop_keys, + G_N_ELEMENTS (registered_desktop_keys)); +} + +#define PRINT_ERROR_FOREACH_KEY(lower, real) \ +static void \ +print_error_foreach_##lower##_key (const char *name, \ + kf_validator *kf) \ +{ \ + print_fatal (kf, "key \"%s\" is present in group \"%s\", but the type is " \ + "\"%s\" while this key is only valid for type \"%s\"\n", \ + name, kf->main_group, kf->type_string, real); \ +} + +PRINT_ERROR_FOREACH_KEY (application, "Application") +PRINT_ERROR_FOREACH_KEY (link, "Link") +PRINT_ERROR_FOREACH_KEY (fsdevice, "FSDevice") +PRINT_ERROR_FOREACH_KEY (mimetype, "MimeType") + +static gboolean +validate_type_keys (kf_validator *kf) +{ + gboolean retval; + + retval = TRUE; + + switch (kf->type) { + case INVALID_TYPE: + break; + case APPLICATION_TYPE: + g_list_foreach (kf->link_keys, + (GFunc) print_error_foreach_link_key, kf); + g_list_foreach (kf->fsdevice_keys, + (GFunc) print_error_foreach_fsdevice_key, kf); + g_list_foreach (kf->mimetype_keys, + (GFunc) print_error_foreach_mimetype_key, kf); + retval = (g_list_length (kf->link_keys) + + g_list_length (kf->fsdevice_keys) + + g_list_length (kf->mimetype_keys) == 0); + break; + case LINK_TYPE: + g_list_foreach (kf->application_keys, + (GFunc) print_error_foreach_application_key, kf); + g_list_foreach (kf->fsdevice_keys, + (GFunc) print_error_foreach_fsdevice_key, kf); + g_list_foreach (kf->mimetype_keys, + (GFunc) print_error_foreach_mimetype_key, kf); + retval = (g_list_length (kf->application_keys) + + g_list_length (kf->fsdevice_keys) + + g_list_length (kf->mimetype_keys) == 0); + break; + case DIRECTORY_TYPE: + case SERVICE_TYPE: + case SERVICE_TYPE_TYPE: + g_list_foreach (kf->application_keys, + (GFunc) print_error_foreach_application_key, kf); + g_list_foreach (kf->link_keys, + (GFunc) print_error_foreach_link_key, kf); + g_list_foreach (kf->fsdevice_keys, + (GFunc) print_error_foreach_fsdevice_key, kf); + g_list_foreach (kf->mimetype_keys, + (GFunc) print_error_foreach_mimetype_key, kf); + retval = (g_list_length (kf->application_keys) + + g_list_length (kf->link_keys) + + g_list_length (kf->fsdevice_keys) + + g_list_length (kf->mimetype_keys) == 0); + break; + case FSDEVICE_TYPE: + g_list_foreach (kf->application_keys, + (GFunc) print_error_foreach_application_key, kf); + g_list_foreach (kf->link_keys, + (GFunc) print_error_foreach_link_key, kf); + g_list_foreach (kf->mimetype_keys, + (GFunc) print_error_foreach_mimetype_key, kf); + retval = (g_list_length (kf->application_keys) + + g_list_length (kf->link_keys) + + g_list_length (kf->mimetype_keys) == 0); + break; + case MIMETYPE_TYPE: + g_list_foreach (kf->application_keys, + (GFunc) print_error_foreach_application_key, kf); + g_list_foreach (kf->link_keys, + (GFunc) print_error_foreach_link_key, kf); + g_list_foreach (kf->fsdevice_keys, + (GFunc) print_error_foreach_fsdevice_key, kf); + retval = (g_list_length (kf->application_keys) + + g_list_length (kf->link_keys) + + g_list_length (kf->fsdevice_keys) == 0); + break; + case LAST_TYPE: + g_assert_not_reached (); + } + + return retval; +} + +static gboolean +lookup_group_foreach_action (char *key, + char *value, + kf_validator *kf) +{ + if (g_hash_table_lookup (kf->action_groups, key)) { + gchar *group_name; + + group_name = g_strconcat (GROUP_DESKTOP_ACTION, key, NULL); + validate_required_keys (kf, group_name, + registered_action_keys, + G_N_ELEMENTS (registered_action_keys)); + g_free (group_name); + + g_hash_table_remove (kf->action_groups, key); + return TRUE; + } + + return FALSE; +} + +static void +print_error_foreach_action (char *key, + char *value, + kf_validator *kf) +{ + print_fatal (kf, "action \"%s\" is defined, but there is no matching " + "\"%s%s\" group\n", key, GROUP_DESKTOP_ACTION, key); +} + +static void +print_error_foreach_group (char *key, + char *value, + kf_validator *kf) +{ + print_fatal (kf, "action group \"%s%s\" exists, but there is no matching " + "action \"%s\"\n", GROUP_DESKTOP_ACTION, key, key); +} + +static gboolean +validate_actions (kf_validator *kf) +{ + g_hash_table_foreach_remove (kf->action_values, + (GHRFunc) lookup_group_foreach_action, kf); + + g_hash_table_foreach (kf->action_values, + (GHFunc) print_error_foreach_action, kf); + + g_hash_table_foreach (kf->action_groups, + (GHFunc) print_error_foreach_group, kf); + + return (g_hash_table_size (kf->action_values) + + g_hash_table_size (kf->action_groups) == 0); +} + +/* + These desktop entry files should have the extension .desktop. + * Checked. + * + Desktop entries which describe how a directory is to be + * formatted/displayed should be simply called .directory. + * Checked. + * + Using .kdelnk instead of .desktop as the file extension is deprecated. + * Checked. + * FIXME: we're not doing what the spec says wrt Directory. + */ +static gboolean +validate_filename (kf_validator *kf) +{ + if (kf->type == DIRECTORY_TYPE) { + if (g_str_has_suffix (kf->filename, ".directory")) + return TRUE; + else { + print_fatal (kf, "file is of type \"Directory\", but filename does not " + "have a .directory extension\n"); + return FALSE; + } + } + + if (g_str_has_suffix (kf->filename, ".desktop")) + return TRUE; + + if (g_str_has_suffix (kf->filename, ".kdelnk")) { + if (kf->kde_reserved_warnings || !kf->no_deprecated_warnings) + print_warning (kf, "filename has a .kdelnk extension, which is " + "deprecated in favor of .desktop\n"); + return TRUE; + } + + print_fatal (kf, "filename does not have a .desktop extension\n"); + return FALSE; +} + +/* + Lines beginning with a # and blank lines are considered comments. + * Checked. + */ +static gboolean +validate_line_is_comment (kf_validator *kf, + const char *line) +{ + return (*line == '#' || *line == '\0'); +} + +/* + A group header with name groupname is a line in the format: [groupname] + * Checked. + * + Group names may contain all ASCII characters except for [ and ] and + * control characters. + * This is done in validate_group_name(). + */ +static gboolean +validate_line_looks_like_group (kf_validator *kf, + const char *line, + char **group) +{ + char *chomped; + gboolean result; + + chomped = g_strdup (line); + g_strchomp (chomped); + + result = (*chomped == '[' && chomped[strlen (chomped) - 1] == ']'); + + if (result && strcmp (chomped, line)) + print_fatal (kf, "line \"%s\" ends with a space, but looks like a group. " + "The validation will continue, with the trailing spaces " + "ignored.\n", line); + + if (group && result) + *group = g_strndup (chomped + 1, strlen (chomped) - 2); + + g_free (chomped); + + return result; +} + +/* + Space before and after the equals sign should be ignored; the = sign is + * the actual delimiter. + * Checked. + */ +static gboolean +validate_line_looks_like_entry (kf_validator *kf, + const char *line, + char **key, + char **value) +{ + char *p; + + p = g_utf8_strchr (line, -1, '='); + + if (!p) + return FALSE; + + /* key must be non-empty */ + if (*p == line[0]) + return FALSE; + + if (key) { + *key = g_strndup (line, p - line); + g_strchomp (*key); + } + if (value) { + *value = g_strdup (p + 1); + g_strchug (*value); + } + + return TRUE; +} + +/* + Only comments are accepted before the first group. + * Checked. + * + The first group should be "Desktop Entry". + * Checked. + * + Multiple groups may not have the same name. + * Checked. + */ +static void +validate_parse_line (kf_validator *kf) +{ + char *line; + int len; + char *group; + char *key; + char *value; + + line = kf->parse_buffer->str; + len = kf->parse_buffer->len; + + if (!kf->utf8_warning && !g_utf8_validate (line, len, NULL)) { + print_warning (kf, "file contains lines that are not UTF-8 encoded. There " + "is no guarantee the validator will correctly work.\n"); + kf->utf8_warning = TRUE; + } + + if (g_ascii_isspace (*line)) { + print_fatal (kf, "line \"%s\" starts with a space. Comment, group and " + "key-value lines should not start with a space. The " + "validation will continue, with the leading spaces " + "ignored.\n", line); + while (g_ascii_isspace (*line)) + line++; + } + + if (validate_line_is_comment (kf, line)) + return; + + group = NULL; + if (validate_line_looks_like_group (kf, line, &group)) { + if (!kf->current_group && + (strcmp (group, GROUP_DESKTOP_ENTRY) && + strcmp (group, GROUP_KDE_DESKTOP_ENTRY))) + print_fatal (kf, "first group is not \"" GROUP_DESKTOP_ENTRY "\"\n"); + + if (kf->current_group && strcmp (kf->current_group, group)) + validate_keys_for_current_group (kf); + + if (g_hash_table_lookup_extended (kf->groups, group, NULL, NULL)) { + print_fatal (kf, "file contains multiple groups named \"%s\", but " + "multiple groups may not have the same name\n", group); + } else { + validate_group_name (kf, group); + g_hash_table_insert (kf->groups, g_strdup (group), NULL); + } + + if (kf->current_group) + g_free (kf->current_group); + kf->current_group = group; + + return; + } + + key = NULL; + value = NULL; + if (validate_line_looks_like_entry (kf, line, &key, &value)) { + if (kf->current_group) { + GSList *keys; + kf_keyvalue *keyvalue; + + keyvalue = g_slice_new (kf_keyvalue); + keyvalue->key = key; + keyvalue->value = value; + + keys = g_hash_table_lookup (kf->groups, kf->current_group); + keys = g_slist_prepend (keys, keyvalue); + g_hash_table_replace (kf->groups, g_strdup (kf->current_group), keys); + } else { + if (key) + g_free (key); + if (value) + g_free (value); + + print_fatal (kf, "file contains entry \"%s\" before the first group, " + "but only comments are accepted before the first " + "group\n", line); + } + + return; + } + + print_fatal (kf, "file contains line \"%s\", which is not a comment, " + "a group or an entry\n", line); +} + +/* + Desktop entry files are encoded as lines of 8-bit characters separated by + * LF characters. + * Checked. + */ +static void +validate_parse_data (kf_validator *kf, + char *data, + int length) +{ + int i; + + for (i = 0; i < length; i++) { + if (data[i] == '\n') { + if (i > 0 && data[i - 1] == '\r') { + g_string_erase (kf->parse_buffer, kf->parse_buffer->len - 1, 1); + + if (!kf->cr_error) { + print_fatal (kf, "file contains at least one line ending with a " + "carriage return before the line feed, while lines " + "should only be separated by a line feed " + "character. First such line is: \"%s\"\n", + kf->parse_buffer->str); + kf->cr_error = TRUE; + } + } + + if (kf->parse_buffer->len > 0) { + validate_parse_line (kf); + g_string_erase (kf->parse_buffer, 0, -1); + } + + } else if (data[i] == '\r') { + if (!kf->cr_error) { + print_fatal (kf, "file contains at least one line ending with a " + "carriage return, while lines should only be " + "separated by a line feed character. First such " + "line is: \"%s\"\n", kf->parse_buffer->str); + kf->cr_error = TRUE; + } + + data[i] = '\n'; + i--; + } else + g_string_append_c (kf->parse_buffer, data[i]); + } +} + +static void +validate_flush_parse_buffer (kf_validator *kf) +{ + if (kf->parse_buffer->len > 0) { + validate_parse_line (kf); + g_string_erase (kf->parse_buffer, 0, -1); + } + + if (kf->current_group) + validate_keys_for_current_group (kf); +} + +#define VALIDATE_READ_SIZE 4096 +static gboolean +validate_parse_from_fd (kf_validator *kf, + int fd) +{ + int bytes_read; + struct stat stat_buf; + char read_buf[VALIDATE_READ_SIZE]; + + if (fstat (fd, &stat_buf) < 0) { + print_fatal (kf, "while reading the file: %s\n", g_strerror (errno)); + return FALSE; + } + + if (!S_ISREG (stat_buf.st_mode)) { + print_fatal (kf, "file is not a regular file\n"); + return FALSE; + } + + if (stat_buf.st_size == 0) { + print_fatal (kf, "file is empty\n"); + return FALSE; + } + + bytes_read = 0; + while (1) { + bytes_read = read (fd, read_buf, VALIDATE_READ_SIZE); + + if (bytes_read == 0) /* End of File */ + break; + + if (bytes_read < 0) { + if (errno == EINTR || errno == EAGAIN) + continue; + + /* let's validate what we already have */ + validate_flush_parse_buffer (kf); + + print_fatal (kf, "while reading the file: %s\n", g_strerror (errno)); + return FALSE; + } + + validate_parse_data (kf, read_buf, bytes_read); + } + + validate_flush_parse_buffer (kf); + + return TRUE; +} + +static gboolean +validate_load_and_parse (kf_validator *kf) +{ + int fd; + gboolean ret; + + fd = g_open (kf->filename, O_RDONLY, 0); + + if (fd < 0) { + print_fatal (kf, "while reading the file: %s\n", g_strerror (errno)); + return FALSE; + } + + ret = validate_parse_from_fd (kf, fd); + + close (fd); + + return ret; +} + +static gboolean +groups_hashtable_free (gpointer key, + gpointer value, + gpointer data) +{ + GSList *list; + GSList *sl; + + list = (GSList *) value; + for (sl = list; sl != NULL; sl = sl->next) { + kf_keyvalue *keyvalue; + + keyvalue = (kf_keyvalue *) sl->data; + g_free (keyvalue->key); + g_free (keyvalue->value); + g_slice_free (kf_keyvalue, keyvalue); + } + + g_slist_free (list); + + return TRUE; +} + +gboolean +desktop_file_validate (const char *filename, + gboolean warn_kde, + gboolean no_warn_deprecated) +{ + kf_validator kf; + + /* just a consistency check */ + g_assert (G_N_ELEMENTS (registered_types) == LAST_TYPE - 1); + + kf.filename = filename; + kf.parse_buffer = g_string_new (""); + kf.utf8_warning = FALSE; + kf.cr_error = FALSE; + kf.current_group = NULL; + kf.groups = g_hash_table_new_full (g_str_hash, g_str_equal, + g_free, NULL); + kf.current_keys = NULL; + kf.kde_reserved_warnings = warn_kde; + kf.no_deprecated_warnings = no_warn_deprecated; + + kf.main_group = NULL; + kf.type = INVALID_TYPE; + kf.type_string = NULL; + kf.show_in = FALSE; + kf.application_keys = NULL; + kf.link_keys = NULL; + kf.fsdevice_keys = NULL; + kf.mimetype_keys = NULL; + kf.action_values = g_hash_table_new_full (g_str_hash, g_str_equal, + NULL, g_free); + kf.action_groups = g_hash_table_new_full (g_str_hash, g_str_equal, + NULL, g_free); + kf.fatal_error = FALSE; + + validate_load_and_parse (&kf); + //FIXME: this does not work well if there are both a Desktop Entry and a KDE + //Desktop Entry groups since only the last one will be validated for this. + if (kf.main_group) { + validate_required_desktop_keys (&kf); + validate_type_keys (&kf); + } + validate_actions (&kf); + validate_filename (&kf); + + g_list_foreach (kf.application_keys, (GFunc) g_free, NULL); + g_list_free (kf.application_keys); + g_list_foreach (kf.link_keys, (GFunc) g_free, NULL); + g_list_free (kf.link_keys); + g_list_foreach (kf.fsdevice_keys, (GFunc) g_free, NULL); + g_list_free (kf.fsdevice_keys); + g_list_foreach (kf.mimetype_keys, (GFunc) g_free, NULL); + g_list_free (kf.mimetype_keys); + + g_hash_table_destroy (kf.action_values); + g_hash_table_destroy (kf.action_groups); + + g_assert (kf.current_keys == NULL); + /* we can't add an automatic destroy handler for the value because we replace + * it when adding keys, and this means we'd have to copy the value each time + * we replace it */ + g_hash_table_foreach_remove (kf.groups, groups_hashtable_free, NULL); + g_hash_table_destroy (kf.groups); + g_free (kf.current_group); + g_string_free (kf.parse_buffer, TRUE); + + return (!kf.fatal_error); +} + +static void +fixup_list (GKeyFile *keyfile, + const gchar *filename, + const gchar *key) +{ + char *value; + int len; + + value = g_key_file_get_value (keyfile, GROUP_DESKTOP_ENTRY, key, NULL); + if (!value) + return; + + len = strlen (value); + + if (len > 0 && (value[len - 1] != ';' || + (len > 1 && value[len - 2] == '\\' && + (len < 3 || value[len - 3] != '\\')))) { + char *str; + + g_printerr ("%s: warning: key \"%s\" is a list and does not have a " + "semicolon as trailing character, fixing\n", + filename, key); + + str = g_strconcat (value, ";", NULL); + g_key_file_set_value (keyfile, GROUP_DESKTOP_ENTRY, + key, str); + g_free (str); + } +} + +/* return FALSE if we were unable to fix the file */ +gboolean +desktop_file_fixup (GKeyFile *keyfile, + const char *filename) +{ + gchar **keys; + gsize keys_nb; + unsigned int i; + + if (g_key_file_has_group (keyfile, GROUP_KDE_DESKTOP_ENTRY)) { + g_printerr ("%s: warning: renaming deprecated \"%s\" group to \"%s\"\n", + filename, GROUP_KDE_DESKTOP_ENTRY, GROUP_DESKTOP_ENTRY); + dfu_key_file_rename_group (keyfile, + GROUP_KDE_DESKTOP_ENTRY, GROUP_DESKTOP_ENTRY); + } + + keys = g_key_file_get_keys (keyfile, GROUP_DESKTOP_ENTRY, &keys_nb, NULL); + + /* Fix lists to have a ';' at the end if they don't */ + for (i = 0; i < G_N_ELEMENTS (registered_desktop_keys); i++) { + if (registered_desktop_keys[i].type == DESKTOP_STRING_LIST_TYPE || + registered_desktop_keys[i].type == DESKTOP_REGEXP_LIST_TYPE) + fixup_list (keyfile, filename, registered_desktop_keys[i].name); + + if (registered_desktop_keys[i].type == DESKTOP_LOCALESTRING_LIST_TYPE) { + gsize keylen; + guint j; + + keylen = strlen (registered_desktop_keys[i].name); + for (j = 0; j < keys_nb; j++) { + if (g_str_has_prefix (keys[j], registered_desktop_keys[i].name) && + (keys[j][keylen] == '[' || keys[j][keylen] == '\0')) { + fixup_list (keyfile, filename, keys[j]); + } + } + } + } + + g_strfreev (keys); + + return TRUE; +} diff --git a/src/validate.h b/src/validate.h new file mode 100644 index 0000000..7910083 --- /dev/null +++ b/src/validate.h @@ -0,0 +1,40 @@ +/* validate.c: validate a desktop entry file + * vim: set ts=2 sw=2 et: */ + +/* + * Copyright (C) 2007 Vincent Untz <vuntz@gnome.org> + * + * A really small portion of this code comes from the old validate.c. + * The old validate.c was Copyright (C) 2002 Red Hat, Inc. + * It was written by: + * Havoc Pennington <hp@pobox.com> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + * USA. + */ + +#include <glib.h> + +#define CURRENT_SPEC_VERSION "1.0" + +#define GROUP_KDE_DESKTOP_ENTRY "KDE Desktop Entry" +#define GROUP_DESKTOP_ACTION "Desktop Action " + +gboolean desktop_file_validate (const char *filename, + gboolean warn_kde, + gboolean no_warn_deprecated); +gboolean desktop_file_fixup (GKeyFile *keyfile, + const char *filename); + diff --git a/src/validator.c b/src/validator.c new file mode 100644 index 0000000..c50157e --- /dev/null +++ b/src/validator.c @@ -0,0 +1,82 @@ +/* validator.c: validate a desktop entry file + * vim: set ts=2 sw=2 et: */ + +/* + * Copyright (C) 2007, 2008 Vincent Untz <vuntz@gnome.org> + * + * A really small portion of this code comes from the old validator.c. + * The old validator.c was Copyright (C) 2002, 2004 Red Hat, Inc. + * It was written by: + * Mark McLoughlin <mark@skynet.ie> + * Havoc Pennington <hp@pobox.com> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + * USA. + */ + +#include "validate.h" + +static gboolean warn_kde = FALSE; +static gboolean no_warn_deprecated = FALSE; +static char **filename = NULL; + +static GOptionEntry option_entries[] = { + { "no-warn-deprecated", 0, 0, G_OPTION_ARG_NONE, &no_warn_deprecated, "Do not warn about usage of deprecated items", NULL }, + { "warn-kde", 0, 0, G_OPTION_ARG_NONE, &warn_kde, "Warn about usage of KDE extensions to the specification", NULL }, + { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &filename, NULL, "<desktop-file>" }, + { NULL } +}; + +int +main (int argc, char *argv[]) +{ + GOptionContext *context; + GError *error; + + context = g_option_context_new (NULL); + g_option_context_set_summary (context, "Validate desktop entry files " + "according to the Desktop Entry " + "specification "CURRENT_SPEC_VERSION + ".\n" + "For information about this " + "specification, see:\n\t" + "http://freedesktop.org/wiki/Specifications/desktop-entry-spec"); + g_option_context_add_main_entries (context, option_entries, NULL); + + error = NULL; + if (!g_option_context_parse (context, &argc, &argv, &error)) { + g_printerr ("Error while parsing arguments: %s\n", error->message); + g_error_free (error); + return 1; + } + + g_option_context_free (context); + + /* only accept one desktop file argument */ + if (filename == NULL || filename[0] == NULL || filename[1] != NULL) { + g_printerr ("See \"%s --help\" for correct usage.\n", g_get_prgname ()); + return 1; + } + + if (!g_file_test (filename[0], G_FILE_TEST_IS_REGULAR)) { + g_printerr ("%s: file does not exist\n", filename[0]); + return 1; + } + + if (desktop_file_validate (filename[0], warn_kde, no_warn_deprecated)) + return 0; + else + return 1; +} |