From 47139477f2f9e8aad627f80397cca32d987f9c4c Mon Sep 17 00:00:00 2001 From: Vincent Legout Date: Thu, 4 Feb 2010 07:19:46 -0700 Subject: Import gmrun_0.9.2.orig.tar.gz [dgit import orig gmrun_0.9.2.orig.tar.gz] --- AUTHORS | 1 + COPYING | 340 +++++++ ChangeLog | 23 + INSTALL | 182 ++++ Makefile.am | 26 + Makefile.in | 388 +++++++ NEWS | 55 + README | 208 ++++ acconfig.h | 9 + acinclude.m4 | 137 +++ aclocal.m4 | 468 +++++++++ config.h.in | 33 + config/Makefile.am | 6 + config/Makefile.in | 207 ++++ config/gmrunrc | 49 + configure | 2500 ++++++++++++++++++++++++++++++++++++++++++++++ configure.in | 102 ++ gmrun.spec.in | 108 ++ install-sh | 251 +++++ missing | 336 +++++++ mkinstalldirs | 40 + src/Makefile.am | 17 + src/Makefile.in | 303 ++++++ src/ci_string.h | 41 + src/gtkcompletionline.cc | 1187 ++++++++++++++++++++++ src/gtkcompletionline.h | 90 ++ src/history.cc | 167 ++++ src/history.h | 71 ++ src/main.cc | 669 +++++++++++++ src/main.h | 13 + src/prefs.cc | 177 ++++ src/prefs.h | 45 + stamp-h.in | 1 + 33 files changed, 8250 insertions(+) create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 ChangeLog create mode 100644 INSTALL create mode 100644 Makefile.am create mode 100644 Makefile.in create mode 100644 NEWS create mode 100644 README create mode 100644 acconfig.h create mode 100644 acinclude.m4 create mode 100644 aclocal.m4 create mode 100644 config.h.in create mode 100644 config/Makefile.am create mode 100644 config/Makefile.in create mode 100644 config/gmrunrc create mode 100755 configure create mode 100644 configure.in create mode 100644 gmrun.spec.in create mode 100755 install-sh create mode 100755 missing create mode 100755 mkinstalldirs create mode 100644 src/Makefile.am create mode 100644 src/Makefile.in create mode 100644 src/ci_string.h create mode 100644 src/gtkcompletionline.cc create mode 100644 src/gtkcompletionline.h create mode 100644 src/history.cc create mode 100644 src/history.h create mode 100644 src/main.cc create mode 100644 src/main.h create mode 100644 src/prefs.cc create mode 100644 src/prefs.h create mode 100644 stamp-h.in diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..ccea32c --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +Mihai Bazon diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..d60c31a --- /dev/null +++ b/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..25f991c --- /dev/null +++ b/ChangeLog @@ -0,0 +1,23 @@ +2003-11-16 AV + * configure.in: added support for libpopt + + * src/gtkcompletionline.cc: added UTF-8 support for input and output + + * src/main.cc: added UTF-8 support for input and output and + added an option to place gmrun (-geometry) + +2002-06-05 EJ + + * src/history.cc (append): Previously, an item was not placed in + the history when it was the last item. Now, if we find an entry, + we move it to the end of the list. + +2002-06-05 EJ + + * acinclude.m4: Added stlport detection code. When using an old + version of g++/stdc++ you can get this code to compile only with + the stlport. gcc-2.9[56] don't have a definition for + char_traits. + + + diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..b42a17a --- /dev/null +++ b/INSTALL @@ -0,0 +1,182 @@ +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' if you want to change +it or regenerate `configure' using a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you have to compile the package for one architecture at a time +in the source code directory. After you have installed the package for +one architecture, use `make distclean' before reconfiguring for another +architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`configure' also accepts some other, not widely useful, options. diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..b373f55 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,26 @@ +## Process this file with automake to produce Makefile.in + +SUBDIRS = src config + +install-data-local: + @$(NORMAL_INSTALL) + if test -d $(srcdir)/pixmaps; then \ + $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/pixmaps; \ + for pixmap in $(srcdir)/pixmaps/*; do \ + if test -f $$pixmap; then \ + $(INSTALL_DATA) $$pixmap $(DESTDIR)$(pkgdatadir)/pixmaps; \ + fi \ + done \ + fi + +dist-hook: + if test -d pixmaps; then \ + mkdir $(distdir)/pixmaps; \ + for pixmap in pixmaps/*; do \ + if test -f $$pixmap; then \ + cp -p $$pixmap $(distdir)/pixmaps; \ + fi \ + done \ + fi + +EXTRA_DIST = gmrun.spec.in diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..6897345 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,388 @@ +# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999, 2001 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. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = . + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +CC = @CC@ +CXX = @CXX@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_LIBS = @GTK_LIBS@ +MAKEINFO = @MAKEINFO@ +PACKAGE = @PACKAGE@ +PACKAGE_DATA_DIR = @PACKAGE_DATA_DIR@ +PKG_CONFIG = @PKG_CONFIG@ +PREFIX = @PREFIX@ +STLPORT_CXXFLAGS = @STLPORT_CXXFLAGS@ +STLPORT_INCDIR = @STLPORT_INCDIR@ +STLPORT_INCLUDES = @STLPORT_INCLUDES@ +STLPORT_LDFLAGS = @STLPORT_LDFLAGS@ +STLPORT_LIBDIR = @STLPORT_LIBDIR@ +VERSION = @VERSION@ + +SUBDIRS = src config + +EXTRA_DIST = gmrun.spec.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = gmrun.spec +DIST_COMMON = README ./stamp-h.in AUTHORS COPYING ChangeLog INSTALL \ +Makefile.am Makefile.in NEWS acconfig.h acinclude.m4 aclocal.m4 \ +config.h.in configure configure.in gmrun.spec.in install-sh missing \ +mkinstalldirs + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +all: all-redirect +.SUFFIXES: +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status + +$(ACLOCAL_M4): configure.in acinclude.m4 + cd $(srcdir) && $(ACLOCAL) + +config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck +$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) + cd $(srcdir) && $(AUTOCONF) + +config.h: stamp-h + @if test ! -f $@; then \ + rm -f stamp-h; \ + $(MAKE) stamp-h; \ + else :; fi +stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES= CONFIG_HEADERS=config.h \ + $(SHELL) ./config.status + @echo timestamp > stamp-h 2> /dev/null +$(srcdir)/config.h.in: $(srcdir)/stamp-h.in + @if test ! -f $@; then \ + rm -f $(srcdir)/stamp-h.in; \ + $(MAKE) $(srcdir)/stamp-h.in; \ + else :; fi +$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h + cd $(top_srcdir) && $(AUTOHEADER) + @echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null + +mostlyclean-hdr: + +clean-hdr: + +distclean-hdr: + -rm -f config.h + +maintainer-clean-hdr: +gmrun.spec: $(top_builddir)/config.status gmrun.spec.in + cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status + +# 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. + +@SET_MAKE@ + +all-recursive install-data-recursive install-exec-recursive \ +installdirs-recursive install-recursive uninstall-recursive \ +check-recursive installcheck-recursive info-recursive dvi-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + 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; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ + rev="$$subdir $$rev"; \ + test "$$subdir" != "." || dot_seen=yes; \ + done; \ + test "$$dot_seen" = "no" && 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; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(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 + -rm -rf $(distdir) + GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz + mkdir $(distdir)/=build + mkdir $(distdir)/=inst + dc_install_base=`cd $(distdir)/=inst && pwd`; \ + cd $(distdir)/=build \ + && ../configure --srcdir=.. --prefix=$$dc_install_base \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) dist + -rm -rf $(distdir) + @banner="$(distdir).tar.gz is ready for distribution"; \ + dashes=`echo "$$banner" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + echo "$$dashes" +dist: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +dist-all: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +distdir: $(DISTFILES) + -rm -rf $(distdir) + mkdir $(distdir) + -chmod 777 $(distdir) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + for subdir in $(SUBDIRS); do \ + if test "$$subdir" = .; then :; else \ + test -d $(distdir)/$$subdir \ + || mkdir $(distdir)/$$subdir \ + || exit 1; \ + chmod 777 $(distdir)/$$subdir; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-hook +info-am: +info: info-recursive +dvi-am: +dvi: dvi-recursive +check-am: all-am +check: check-recursive +installcheck-am: +installcheck: installcheck-recursive +all-recursive-am: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +install-exec-am: +install-exec: install-exec-recursive + +install-data-am: install-data-local +install-data: install-data-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-recursive +uninstall-am: +uninstall: uninstall-recursive +all-am: Makefile config.h +all-redirect: all-recursive-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: installdirs-recursive +installdirs-am: + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic + +mostlyclean: mostlyclean-recursive + +clean-am: clean-hdr clean-tags clean-generic mostlyclean-am + +clean: clean-recursive + +distclean-am: distclean-hdr distclean-tags distclean-generic clean-am + +distclean: distclean-recursive + -rm -f config.status + +maintainer-clean-am: maintainer-clean-hdr maintainer-clean-tags \ + maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-recursive + -rm -f config.status + +.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \ +install-data-recursive uninstall-data-recursive install-exec-recursive \ +uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ +all-recursive check-recursive installcheck-recursive info-recursive \ +dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ +maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ +dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \ +install-exec-am install-exec install-data-local install-data-am \ +install-data install-am install uninstall-am uninstall all-redirect \ +all-am all installdirs-am installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean + + +install-data-local: + @$(NORMAL_INSTALL) + if test -d $(srcdir)/pixmaps; then \ + $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/pixmaps; \ + for pixmap in $(srcdir)/pixmaps/*; do \ + if test -f $$pixmap; then \ + $(INSTALL_DATA) $$pixmap $(DESTDIR)$(pkgdatadir)/pixmaps; \ + fi \ + done \ + fi + +dist-hook: + if test -d pixmaps; then \ + mkdir $(distdir)/pixmaps; \ + for pixmap in pixmaps/*; do \ + if test -f $$pixmap; then \ + cp -p $$pixmap $(distdir)/pixmaps; \ + fi \ + done \ + fi + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..bc8e30c --- /dev/null +++ b/NEWS @@ -0,0 +1,55 @@ +-*- text -*- + +0.9.2 (Son, Nov 16 2003) + + - UTF-8 support (only tested with german). Please report problems with + other languages to + + - New little feature: you could place gmrun with the -geometry parameter + +0.8.1 (Sat, Aug 17 2002) + + - bug fix release: + + - major bug fixed: you could not edit a .doc file with soffice if + you had an extension handler for .doc set as "AbiWord %s" :) + Analogue for other extensions. + + - smoother key handling (mainly the END/C-E, HOME/C-A keys now work + correctly and also clear the selection). + + - others: elimined most compiler warnings (I just noticed them..:), + some code cleanup (mainly reindentation). + +0.8.0 (Fri, Aug 16 2002, it's been a long time) + + - New feature: extension handlers. This allows us to type directly the + file, and gmrun will select your preferred application handler based of + the configuration in ~/.gmrunrc or $prefis/share/gmrun/gmrunrc + + - New feature: TAB simulation. You can set a timeout for this in the + config file, and gmrun will automatically issue a TAB press after that + milliseconds after the last keypress.. I've tried to handle this the + smart way, but it could still be buggy so by default is disabled + (TabTimeout variable in config file, set it to some non-zero value to + enable). + + - New "feature": you can select the old way of running commands using the + "system" libc function. This has the great advantage that allows you to + combine commands using shell operators. To enable it specify + "--enable-system" at configure time. + + - Bug fix: white-space characters inside file names now (hopefully) behave + correcly. They are backslash-ed :) like in bash. + + - Bug fix: '!' character now enters search mode even if all the field is + selected. Thanks to Michal Politowski for noticing this and also for + fixing it :) actually I never regarded it as a bug, but it was.. :) + + - Another patch from Michal Politowski lets two configuration files to + work together. More specifically, if $prefix/share/gmrun/gmrunrc exists + it will be loaded, and then it will try $HOME/.gmrunrc, but the latter + does not override completely the settings from the global file. So you + can provide clean defaults in the global file, and each user will + customize it's own file by editing only those properties that he doesn't + like.. which is kind of normal, after all :) diff --git a/README b/README new file mode 100644 index 0000000..015cc10 --- /dev/null +++ b/README @@ -0,0 +1,208 @@ +gmrun 0.9.2 http://students.infoiasi.ro/~mishoo/site/gmrun.epl +------------ --------------------------------------------------- + + Short GtkEntry for file autocompletion + main.cc that does the + needed stuff for running programs. This is intended as a + replacement to grun or gnome-run, which (sorry) sucks. The idea + comes from the KDE Window Manager (ALT-F2 in KDE). Though, GNOME + is better :) + + +Copyright (c) 2000-2003 Mihai Bazon +Author: Mihai Bazon . + +send postcards to: + + Mihai Bazon, + str. Republicii, nr. 350, sc. E, ap. 9, cod 6500 VASLUI - VASLUI + Romania + +This program falls under the GNU General Public License version 2 or above. + + +Features +--------- + + * Tilda completion (~/ <==> $HOME/) + + * Completion works for separate words (e.g. you can type em which + turns to emacs, type a SPACE, and write the file you want to open using + completion). + + * I added history capability (limited to 20 entries, change history.cc for + more, #define HIST_MAX_SIZE). History is maintained in the file " + ~/.gmrun_history ". + + CHANGED (since 0.5.3, I think..) -- new config file parameter: History. + + * CTRL-Enter runs the command in a terminal. CTRL-Enter without any + command starts a new terminal. + + * New configuration file: ~/.gmrunrc or /usr/local/share/gmrun/gmrunrc. + Check one of them, configuration is very simple. From that file you + can change window position and width, history size, terminal, URL + handlers, etc. + + * You can use CTRL-R / CTRL-S to search through history, much like in bash + or Emacs. Also, pressing "!" as the first character enters some special + search mode, finding those history entries that begin with the entered + text. + + * URL handlers (added in 0.6.0). Nice feature, allowing you to enter + lines like "http://www.google.com" to start your favorite browser on + www.google.com. The URL-s are configurable from the configuration + file, in a simple manner (I hope..). + + * Extension handlers (added in 0.8.0). Basically you can run, for + instance, a ".txt" file, assuming that you have configured a handler for + it in the configuration file. The default handler for ".txt" files is, + of course, Emacs. But you can easily change that, you... you VIM user! + + * UTF-8 support (added in 0.9.2) + +Requirements +------------- + + * A good C++ compiler (that is, g++ 3.0 or later). It did originally + compile with g++ 2.95, but not anymore ;-] -- though that's easy to fix. + + * GTK-2. gmrun upto and including 0.8.1 were for GTK-1.x series, version + 0.9.0 requires GTK-2. + + +For code critics +----------------- + + This program is written in 2 hours. The code might seem a little weird, + but it works, and that's what I'm interested in. Code completion is + written in C++, although GTK+ is written in standard C. Should you think + this is a problem, feel free to rewrite the code in C (it could be at + least 4 times bigger). + + It uses some static data (I know, I'm a too lasy programmer to think about + something better); this means that if you're having *two or more* + GtkCompletionLine-s in a program, you're looking for trouble. The static + data will be *shared* between them, and completion might not work + correctly. However, I don't know for sure, and I'm not going to test + this. + + Having all that said, you should know that I'm not actually a bad + programmer ;-] The problem being too simple for huge code complications, I + preferred the easy way of doing different kind of things. It works quite + fine, so "don't expect tons of C code for completion" (quoted from some + sources in mini-commander applet of GNOME). + + +Compilation, installation +-------------------------- + + Use the configure script: + + $ ./configure + $ make + $ make install + + After this the executable goes usually in /usr/local/bin, make sure this is + in your path. Put this in your .sawmillrc: + + (require 'sawmill-defaults) + (bind-keys global-keymap "S-C-M-RET" '(system "gmrun &")) + + Note that if you're using sawfish you have other ways to customize your + keyboard, through the control panel. + + For another window managers you gonna have to find a way to bind this + program to a key combination; otherwise it wouldn't be much help... (I + coded it exactly to get rid of the mouse-time-wasting-walking). + E.g. for IceWM (my favorite, at this time) you edit ~/.icewm/preferences + and add a line like: + + KeySysRun="Alt+Ctrl+Shift+Enter" + + +Tips and tricks (hope that doesn't sound MS-ish...) +---------------------------------------------------- + +1. Everything that doesn't start with "/" or "~" gets completed from $PATH + environment var. More exactly, all files from $PATH directories are + subjects to completion (even if they are NOT executables; this is a + bug, but I'm afraid I'm not willing to fix it). + + Pressing TAB once when no text is entered opens the completion window, + which will contain ALL files under $PATH. + +2. For instance you use TAB to complete from "nets" to "netscape-navigator". + A small window appears, allowing you to select from: + + - netscape + - netscape-communicator + - netscape-navigator + - netstat + + That is because all these executables have the same prefix, "nets". You + type TAB twice to get to the third element ("netscape-navigator"). Now, + if you want to add a parameter such as "-url http://blah.blah.org" you + can press SPACE (the list disappears, and a SPACE is inserted after the + netscape-navigator). + +3. If you accidentally pressed TAB more than you wanted (in that small + window, described above) you can use UP / DOWN arrows to select the right + completion. + +4. - ESC closes the completion window, leaving the selected text in the entry. + - HOME / END - the same, but clears the selection. + - SPACE - the same, but clears the selection and appends one space. + - Pressing ENTER (anytime) runs the command that is written in the entry. + - Pressing CTRL+Enter (anytime) runs the command in a terminal (check your + configuration file). But if the entry is empty (no text is present, or + only whitespaces) then a fresh terminal will be started. + +5. Suppose you use CTRL-R to search backwards through history. If, + accidentally, you skipped the line that you're interested in, you can use + CTRL-S to search forward. This is more awesome than in bash :) It + basically acts like a filter on history, for which you use CTRL-R instead + of UP arrow, and CTRL-S instead of DOWN arrow. + + The same if you search something with "!": only lines that BEGIN with the + entered text are matching, but you can reverse the search order using + CTRL-R / CTRL-S. Very flexible approach. + + +Bugs +----- + + * It gets pretty slow... Maybe I should consider writting it in ANSI-C, + but.... maybe not. + + * Writting this README took me more time than writting the program. + + * As I mentioned before, the code is written in C++, although GTK+ is a + C library. This is not actually a bug; I like C++ because programs + become clearer and easier to maintain, not to mention the source file + size is smaller. So, if anyone cares to port this to standard C, feel + free to do it, but I fear the code should be rewritten (almost) from + scratch. + + * Documentation is inexistent (except this file) (however, it would be + quite useless). + + Should you have any problems mail me a detailed description; please put + the text "ignore_me" in the subject line, for easy message filtering. :) + (just kidding... I would gladely help if I can). + + * Actually I worked more than 2 hours. Anyway, the completion code took + about 2-3 h to design and implement. + + +Disclaimer +----------- + + * The Short Way: + NO WARRANTIES OF ANY KIND. USE IT AT YOUR OWN RISK. + + * The Right Way: + Please read the GNU General Public License. This program falls under + its terms. + + + (: END OF TERMS AND CONDITIONS :) diff --git a/acconfig.h b/acconfig.h new file mode 100644 index 0000000..4a321c8 --- /dev/null +++ b/acconfig.h @@ -0,0 +1,9 @@ +#undef ENABLE_NLS +#undef HAVE_CATGETS +#undef HAVE_GETTEXT +#undef HAVE_LC_MESSAGES +#undef HAVE_STPCPY +#undef HAVE_LIBSM +#undef PACKAGE_LOCALE_DIR +#undef PACKAGE_DATA_DIR +#undef PACKAGE_SOURCE_DIR diff --git a/acinclude.m4 b/acinclude.m4 new file mode 100644 index 0000000..8819534 --- /dev/null +++ b/acinclude.m4 @@ -0,0 +1,137 @@ +# +# $Id: acinclude.m4,v 1.1 2002/06/05 19:39:18 sonofkojak Exp $ +# + +# +# STLPort definitions +# +AC_DEFUN(AC_PATH_STLPORT_INC, +[ + AC_REQUIRE_CPP() + AC_MSG_CHECKING(for stlport headers) + + ac_stlport_includes="no" + ac_enable_stlport="yes" + + AC_ARG_ENABLE(stlport, + [ --enable-stlport do we need stlport ], + [ ac_enable_stlport="$enableval" ]) + if test "$ac_enable_stlport" = "no"; then + AC_SUBST(STLPORT_INCDIR) + AC_SUBST(STLPORT_CXXFLAGS) + have_stlport_inc="no" + else + + AC_ARG_WITH(stlport-includes, + [ --with-stlport-includes where stlport headers are located], + [ ac_stlport_includes="$withval"]) + + + AC_CACHE_VAL(ac_cv_header_stlport_includes, [ + + dnl did user give --with-stlport-includes? + + if test "$ac_stlport_includes" = "no"; then + + stlport_include_dirs="\ + $LIBCONFIGDIR/include/stlport \ + /usr/include/stlport \ + /usr/local/include/stlport \ + /usr/local/include/ + /usr/local/stlport/include" + + for dir in $stlport_include_dirs; do + if test -r "$dir/algorithm"; then + ac_stlport_includes=$dir + break + fi + done + fi + + dnl caching + ac_cv_header_stlport_includes=$ac_stlport_includes + ]) + + if test "$ac_cv_header_stlport_includes" = "no"; then + have_stlport_inc="no" + STLPORT_INCDIR="" + STLPORT_CXXFLAGS="" + else + have_stlport_inc="yes" + STLPORT_INCDIR="$ac_cv_header_stlport_includes" + STLPORT_CXXFLAGS="-I$STLPORT_INCDIR" + fi + + + AC_SUBST(STLPORT_INCDIR) + AC_SUBST(STLPORT_CXXFLAGS) + fi + + AC_MSG_RESULT([$ac_cv_header_stlport_includes]) +]) + + +AC_DEFUN(AC_PATH_STLPORT_LIB, +[ + AC_REQUIRE_CPP() + AC_MSG_CHECKING(for stlport libraries) + + ac_stlport_lib="no" + + ac_enable_stlport="yes" + + AC_ARG_ENABLE(stlport, + [ --enable-stlport do we need stlport ], + [ ac_enable_stlport="$enableval" ]) + if test "$ac_enable_stlport" = "no"; then + AC_SUBST(STLPORT_INCDIR) + AC_SUBST(STLPORT_INCLUDES) + have_stlport_inc="no" + else + + AC_ARG_WITH(stlport-lib, + [ --with-stlport-lib where stlport library is located], + [ ac_stlport_lib="$withval"]) + + + AC_CACHE_VAL(ac_cv_lib_stlport_lib, [ + + dnl did user give --with-stlport-lib? + + if test "$ac_stlport_lib" = "no"; then + + stlport_lib_dirs="\ + $STLPORTDIR/lib \ + /usr/lib \ + /usr/local/lib \ + /usr/local/tiit/lib" + + for dir in $stlport_lib_dirs; do + if test -r "$dir/libstlport_gcc.so"; then + ac_stlport_lib=$dir + break + fi + done + fi + + dnl caching + ac_cv_lib_stlport_lib=$ac_stlport_lib + ]) + + if test "$ac_cv_lib_stlport_lib" = "no"; then + have_stlport_lib="no" + STLPORT_LIBDIR="" + STLPORT_LDFLAGS="" + else + have_stlport_lib="yes" + STLPORT_LIBDIR="$ac_cv_lib_stlport_lib" + STLPORT_LDFLAGS="-L$STLPORT_LIBDIR -lstlport_gcc -lpthread" + fi + + AC_SUBST(STLPORT_LIBDIR) + AC_SUBST(STLPORT_LDFLAGS) + fi + + AC_MSG_RESULT([$ac_cv_lib_stlport_lib]) +]) + diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..265afc6 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,468 @@ +dnl aclocal.m4 generated automatically by aclocal 1.4-p6 + +dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without +dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A +dnl PARTICULAR PURPOSE. + +# +# $Id: acinclude.m4,v 1.1 2002/06/05 19:39:18 sonofkojak Exp $ +# + +# +# STLPort definitions +# +AC_DEFUN(AC_PATH_STLPORT_INC, +[ + AC_REQUIRE_CPP() + AC_MSG_CHECKING(for stlport headers) + + ac_stlport_includes="no" + ac_enable_stlport="yes" + + AC_ARG_ENABLE(stlport, + [ --enable-stlport do we need stlport ], + [ ac_enable_stlport="$enableval" ]) + if test "$ac_enable_stlport" = "no"; then + AC_SUBST(STLPORT_INCDIR) + AC_SUBST(STLPORT_CXXFLAGS) + have_stlport_inc="no" + else + + AC_ARG_WITH(stlport-includes, + [ --with-stlport-includes where stlport headers are located], + [ ac_stlport_includes="$withval"]) + + + AC_CACHE_VAL(ac_cv_header_stlport_includes, [ + + dnl did user give --with-stlport-includes? + + if test "$ac_stlport_includes" = "no"; then + + stlport_include_dirs="\ + $LIBCONFIGDIR/include/stlport \ + /usr/include/stlport \ + /usr/local/include/stlport \ + /usr/local/include/ + /usr/local/stlport/include" + + for dir in $stlport_include_dirs; do + if test -r "$dir/algorithm"; then + ac_stlport_includes=$dir + break + fi + done + fi + + dnl caching + ac_cv_header_stlport_includes=$ac_stlport_includes + ]) + + if test "$ac_cv_header_stlport_includes" = "no"; then + have_stlport_inc="no" + STLPORT_INCDIR="" + STLPORT_CXXFLAGS="" + else + have_stlport_inc="yes" + STLPORT_INCDIR="$ac_cv_header_stlport_includes" + STLPORT_CXXFLAGS="-I$STLPORT_INCDIR" + fi + + + AC_SUBST(STLPORT_INCDIR) + AC_SUBST(STLPORT_CXXFLAGS) + fi + + AC_MSG_RESULT([$ac_cv_header_stlport_includes]) +]) + + +AC_DEFUN(AC_PATH_STLPORT_LIB, +[ + AC_REQUIRE_CPP() + AC_MSG_CHECKING(for stlport libraries) + + ac_stlport_lib="no" + + ac_enable_stlport="yes" + + AC_ARG_ENABLE(stlport, + [ --enable-stlport do we need stlport ], + [ ac_enable_stlport="$enableval" ]) + if test "$ac_enable_stlport" = "no"; then + AC_SUBST(STLPORT_INCDIR) + AC_SUBST(STLPORT_INCLUDES) + have_stlport_inc="no" + else + + AC_ARG_WITH(stlport-lib, + [ --with-stlport-lib where stlport library is located], + [ ac_stlport_lib="$withval"]) + + + AC_CACHE_VAL(ac_cv_lib_stlport_lib, [ + + dnl did user give --with-stlport-lib? + + if test "$ac_stlport_lib" = "no"; then + + stlport_lib_dirs="\ + $STLPORTDIR/lib \ + /usr/lib \ + /usr/local/lib \ + /usr/local/tiit/lib" + + for dir in $stlport_lib_dirs; do + if test -r "$dir/libstlport_gcc.so"; then + ac_stlport_lib=$dir + break + fi + done + fi + + dnl caching + ac_cv_lib_stlport_lib=$ac_stlport_lib + ]) + + if test "$ac_cv_lib_stlport_lib" = "no"; then + have_stlport_lib="no" + STLPORT_LIBDIR="" + STLPORT_LDFLAGS="" + else + have_stlport_lib="yes" + STLPORT_LIBDIR="$ac_cv_lib_stlport_lib" + STLPORT_LDFLAGS="-L$STLPORT_LIBDIR -lstlport_gcc -lpthread" + fi + + AC_SUBST(STLPORT_LIBDIR) + AC_SUBST(STLPORT_LDFLAGS) + fi + + AC_MSG_RESULT([$ac_cv_lib_stlport_lib]) +]) + + +# Do all the work for Automake. 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. + +# serial 1 + +dnl Usage: +dnl AM_INIT_AUTOMAKE(package,version, [no-define]) + +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL]) +PACKAGE=[$1] +AC_SUBST(PACKAGE) +VERSION=[$2] +AC_SUBST(VERSION) +dnl test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +fi +ifelse([$3],, +AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) +AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])) +AC_REQUIRE([AM_SANITY_CHECK]) +AC_REQUIRE([AC_ARG_PROGRAM]) +dnl FIXME This is truly gross. +missing_dir=`cd $ac_aux_dir && pwd` +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}, $missing_dir) +AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}, $missing_dir) +AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) +AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) +AC_REQUIRE([AC_PROG_MAKE_SET])]) + +# Copyright 2002 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + +# 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. +AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.4"]) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION so it can be traced. +# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], + [AM_AUTOMAKE_VERSION([1.4-p6])]) + +# +# Check to make sure that the build environment is sane. +# + +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftestfile +# 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 conftestfile 2> /dev/null` + if test "[$]*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "[$]*" != "X $srcdir/configure conftestfile" \ + && test "[$]*" != "X conftestfile $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" = conftestfile + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +rm -f conftest* +AC_MSG_RESULT(yes)]) + +dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY) +dnl The program must properly implement --version. +AC_DEFUN([AM_MISSING_PROG], +[AC_MSG_CHECKING(for working $2) +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if ($2 --version) < /dev/null > /dev/null 2>&1; then + $1=$2 + AC_MSG_RESULT(found) +else + $1="$3/missing $2" + AC_MSG_RESULT(missing) +fi +AC_SUBST($1)]) + +# Like AC_CONFIG_HEADER, but automatically create stamp file. + +AC_DEFUN([AM_CONFIG_HEADER], +[AC_PREREQ([2.12]) +AC_CONFIG_HEADER([$1]) +dnl When config.status generates a header, we must update the stamp-h file. +dnl This file resides in the same directory as the config header +dnl that is generated. We must strip everything past the first ":", +dnl and everything past the last "/". +AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl +ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>, +<>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>, +<>; do + case " <<$>>CONFIG_HEADERS " in + *" <<$>>am_file "*<<)>> + echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx + ;; + esac + am_indx=`expr "<<$>>am_indx" + 1` +done<<>>dnl>>) +changequote([,]))]) + +# isc-posix.m4 serial 2 (gettext-0.11.2) +dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +# This file is not needed with autoconf-2.53 and newer. Remove it in 2005. + +# This test replaces the one in autoconf. +# Currently this macro should have the same name as the autoconf macro +# because gettext's gettext.m4 (distributed in the automake package) +# still uses it. Otherwise, the use in gettext.m4 makes autoheader +# give these diagnostics: +# configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX +# configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX + +undefine([AC_ISC_POSIX]) + +AC_DEFUN([AC_ISC_POSIX], + [ + dnl This test replaces the obsolescent AC_ISC_POSIX kludge. + AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"]) + ] +) + + +# serial 1 + +# @defmac AC_PROG_CC_STDC +# @maindex PROG_CC_STDC +# @ovindex CC +# If the C compiler in not in ANSI C mode by default, try to add an option +# to output variable @code{CC} to make it so. This macro tries various +# options that select ANSI C on some system or another. It considers the +# compiler to be in ANSI C mode if it handles function prototypes correctly. +# +# If you use this macro, you should check after calling it whether the C +# compiler has been set to accept ANSI C; if not, the shell variable +# @code{am_cv_prog_cc_stdc} is set to @samp{no}. If you wrote your source +# code in ANSI C, you can make an un-ANSIfied copy of it by using the +# program @code{ansi2knr}, which comes with Ghostscript. +# @end defmac + +AC_DEFUN([AM_PROG_CC_STDC], +[AC_REQUIRE([AC_PROG_CC]) +AC_BEFORE([$0], [AC_C_INLINE]) +AC_BEFORE([$0], [AC_C_CONST]) +dnl Force this before AC_PROG_CPP. Some cpp's, eg on HPUX, require +dnl a magic option to avoid problems with ANSI preprocessor commands +dnl like #elif. +dnl FIXME: can't do this because then AC_AIX won't work due to a +dnl circular dependency. +dnl AC_BEFORE([$0], [AC_PROG_CPP]) +AC_MSG_CHECKING(for ${CC-cc} option to accept ANSI C) +AC_CACHE_VAL(am_cv_prog_cc_stdc, +[am_cv_prog_cc_stdc=no +ac_save_CC="$CC" +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + AC_TRY_COMPILE( +[#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} +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; +], [ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; +], +[am_cv_prog_cc_stdc="$ac_arg"; break]) +done +CC="$ac_save_CC" +]) +if test -z "$am_cv_prog_cc_stdc"; then + AC_MSG_RESULT([none needed]) +else + AC_MSG_RESULT($am_cv_prog_cc_stdc) +fi +case "x$am_cv_prog_cc_stdc" in + x|xno) ;; + *) CC="$CC $am_cv_prog_cc_stdc" ;; +esac +]) + + +dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not) +dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page +dnl also defines GSTUFF_PKG_ERRORS on error +AC_DEFUN(PKG_CHECK_MODULES, [ + succeeded=no + + if test -z "$PKG_CONFIG"; then + AC_PATH_PROG(PKG_CONFIG, pkg-config, no) + fi + + if test "$PKG_CONFIG" = "no" ; then + echo "*** The pkg-config script could not be found. Make sure it is" + echo "*** in your path, or set the PKG_CONFIG environment variable" + echo "*** to the full path to pkg-config." + echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." + else + PKG_CONFIG_MIN_VERSION=0.9.0 + if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then + AC_MSG_CHECKING(for $2) + + if $PKG_CONFIG --exists "$2" ; then + AC_MSG_RESULT(yes) + succeeded=yes + + AC_MSG_CHECKING($1_CFLAGS) + $1_CFLAGS=`$PKG_CONFIG --cflags "$2"` + AC_MSG_RESULT($$1_CFLAGS) + + AC_MSG_CHECKING($1_LIBS) + $1_LIBS=`$PKG_CONFIG --libs "$2"` + AC_MSG_RESULT($$1_LIBS) + else + $1_CFLAGS="" + $1_LIBS="" + ## If we have a custom action on failure, don't print errors, but + ## do set a variable so people can do so. + $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` + ifelse([$4], ,echo $$1_PKG_ERRORS,) + fi + + AC_SUBST($1_CFLAGS) + AC_SUBST($1_LIBS) + else + echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." + echo "*** See http://www.freedesktop.org/software/pkgconfig" + fi + fi + + if test $succeeded = yes; then + ifelse([$3], , :, [$3]) + else + ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4]) + fi +]) + + + diff --git a/config.h.in b/config.h.in new file mode 100644 index 0000000..834dd4f --- /dev/null +++ b/config.h.in @@ -0,0 +1,33 @@ +/* config.h.in. Generated automatically from configure.in by autoheader. */ + +/* Define if you have the ANSI C header files. */ +#undef STDC_HEADERS + +#undef ENABLE_NLS +#undef HAVE_CATGETS +#undef HAVE_GETTEXT +#undef HAVE_LC_MESSAGES +#undef HAVE_STPCPY +#undef HAVE_LIBSM +#undef PACKAGE_LOCALE_DIR +#undef PACKAGE_DATA_DIR +#undef PACKAGE_SOURCE_DIR + +/* Define if you have the header file. */ +#undef HAVE_DIRENT_H + +/* Define if you have the header file. */ +#undef HAVE_NDIR_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_DIR_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_NDIR_H + +/* Name of package */ +#undef PACKAGE + +/* Version number of package */ +#undef VERSION + diff --git a/config/Makefile.am b/config/Makefile.am new file mode 100644 index 0000000..073ec6d --- /dev/null +++ b/config/Makefile.am @@ -0,0 +1,6 @@ +# $Id: Makefile.am,v 1.2 2001/05/17 06:58:07 mishoo Exp $ + +myrcdir = @PACKAGE_DATA_DIR@ +myrc_DATA = gmrunrc + +EXTRA_DIST = gmrunrc diff --git a/config/Makefile.in b/config/Makefile.in new file mode 100644 index 0000000..27a0f5f --- /dev/null +++ b/config/Makefile.in @@ -0,0 +1,207 @@ +# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999, 2001 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. + +# $Id: Makefile.am,v 1.2 2001/05/17 06:58:07 mishoo Exp $ + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +CC = @CC@ +CXX = @CXX@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_LIBS = @GTK_LIBS@ +MAKEINFO = @MAKEINFO@ +PACKAGE = @PACKAGE@ +PACKAGE_DATA_DIR = @PACKAGE_DATA_DIR@ +PKG_CONFIG = @PKG_CONFIG@ +PREFIX = @PREFIX@ +STLPORT_CXXFLAGS = @STLPORT_CXXFLAGS@ +STLPORT_INCDIR = @STLPORT_INCDIR@ +STLPORT_INCLUDES = @STLPORT_INCLUDES@ +STLPORT_LDFLAGS = @STLPORT_LDFLAGS@ +STLPORT_LIBDIR = @STLPORT_LIBDIR@ +VERSION = @VERSION@ + +myrcdir = @PACKAGE_DATA_DIR@ +myrc_DATA = gmrunrc + +EXTRA_DIST = gmrunrc +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +DATA = $(myrc_DATA) + +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +all: all-redirect +.SUFFIXES: +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps config/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +install-myrcDATA: $(myrc_DATA) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(myrcdir) + @list='$(myrc_DATA)'; for p in $$list; do \ + if test -f $(srcdir)/$$p; then \ + echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(myrcdir)/$$p"; \ + $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(myrcdir)/$$p; \ + else if test -f $$p; then \ + echo " $(INSTALL_DATA) $$p $(DESTDIR)$(myrcdir)/$$p"; \ + $(INSTALL_DATA) $$p $(DESTDIR)$(myrcdir)/$$p; \ + fi; fi; \ + done + +uninstall-myrcDATA: + @$(NORMAL_UNINSTALL) + list='$(myrc_DATA)'; for p in $$list; do \ + rm -f $(DESTDIR)$(myrcdir)/$$p; \ + done +tags: TAGS +TAGS: + + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = config + +distdir: $(DISTFILES) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: all-am +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: +install-exec: install-exec-am + +install-data-am: install-myrcDATA +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: uninstall-myrcDATA +uninstall: uninstall-am +all-am: Makefile $(DATA) +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: + $(mkinstalldirs) $(DESTDIR)$(myrcdir) + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-generic mostlyclean-am + +clean: clean-am + +distclean-am: distclean-generic clean-am + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: uninstall-myrcDATA install-myrcDATA tags distdir info-am info \ +dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ +install-exec install-data-am install-data install-am install \ +uninstall-am uninstall all-redirect all-am all installdirs \ +mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# 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/config/gmrunrc b/config/gmrunrc new file mode 100644 index 0000000..6262694 --- /dev/null +++ b/config/gmrunrc @@ -0,0 +1,49 @@ +# gmrun configuration file +# gmrun is (C) Mihai Bazon, +# GPL v2.0 applies + +# Set terminal +Terminal = gnome-terminal --start-factory-server --use-factory +TermExec = ${Terminal} -e +AlwaysInTerm = ssh telnet ftp lynx mc vi vim pine centericq perldoc man + +# Set window geometry (except height) +Width = 400 +Top = 100 +Left = 200 + +# History size +History = 256 + +# Shows last history line selected when invoked +ShowLast = 1 + +# Show files starting with '.' +# Default is 0 (off), set it to 1 if you want "hidden" files to show up +# in the completion window +ShowDotFiles = 0 + +# Timeout (in milliseconds) after which gmrun will simulate a TAB press +# Set this to NULL if don't like this feature. +TabTimeout = 0 + +# URL handlers +# If the entered text is "http://www.google.com" then: +# - %u gets replaced with the whole URL ("http://www.google.com") +# - %s gets replaced with "//www.google.com". This is useful for URL-s +# like "man:printf" --> %s will get replaced with "printf" +URL_http = mozilla -remote "openURL(%u, new-window)" +URL_mailto = mozilla -remote "mailto(%s)" +URL_man = ${TermExec} 'man %s' +URL_info = ${TermExec} 'info %s' +URL_pd = ${TermExec} 'perldoc %s' +URL_file = nautilus %s +URL_readme = ${TermExec} 'less /usr/doc/%s/README' +URL_info = ${TermExec} 'info %s' +URL_sh = sh -c '%s' + +# extension handlers +EXT:doc,rtf = AbiWord %s +EXT:txt,cc,cpp,h,java,html,htm,epl,tex,latex,js,css,xml,xsl,am = emacs %s +EXT:ps = gv %s +EXT:pdf = xpdf %s diff --git a/configure b/configure new file mode 100755 index 0000000..a966fa7 --- /dev/null +++ b/configure @@ -0,0 +1,2500 @@ +#! /bin/sh + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.13 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: +ac_help="$ac_help + --enable-debug=[no/yes] Debugging information == no <--> optimization == yes" +ac_help="$ac_help + --enable-system=[yes/no] Use "system" libc function to run commands " +ac_help="$ac_help + --enable-mtrace=[no/yes] Trace memory (de)allocation calls to detect memory leaks " +ac_help="$ac_help + --enable-stlport do we need stlport " +ac_help="$ac_help + --with-stlport-lib where stlport library is located" +ac_help="$ac_help + --enable-stlport do we need stlport " +ac_help="$ac_help + --with-stlport-includes where stlport headers are located" + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} +# Maximum number of lines to put in a shell here document. +ac_max_here_lines=12 + +ac_prev= +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=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case "$ac_option" in + + -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 ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$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" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "enable_${ac_feature}='$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) + # 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 << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --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 +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$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" ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + 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) + 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" ;; + + -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 ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.13" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=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" ;; + + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=configure.in + +# 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 its parent. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + 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 + if test "$ac_srcdir_defaulted" = yes; then + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + echo "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +ac_exeext= +ac_objext=o +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + + +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 + fi +done +if test -z "$ac_aux_dir"; then + { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } +fi +ac_config_guess=$ac_aux_dir/config.guess +ac_config_sub=$ac_aux_dir/config.sub +ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. + +am__api_version="1.4" +# 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 +# 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" +# ./install, which can be erroneously created by make from ./install.sh. +echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +echo "configure:571: checking for a BSD compatible install" >&5 +if test -z "$INSTALL"; then +if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/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 + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + IFS="$ac_save_IFS" + +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. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL="$ac_install_sh" + fi +fi +echo "$ac_t""$INSTALL" 1>&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_PROGRAM}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 +echo "configure:624: checking whether build environment is sane" >&5 +# Just in case +sleep 1 +echo timestamp > conftestfile +# 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 conftestfile 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "$*" != "X $srcdir/configure conftestfile" \ + && test "$*" != "X conftestfile $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". + { echo "configure: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" 1>&2; exit 1; } + fi + + test "$2" = conftestfile + ) +then + # Ok. + : +else + { echo "configure: error: newly created file is older than distributed files! +Check your system clock" 1>&2; exit 1; } +fi +rm -f conftest* +echo "$ac_t""yes" 1>&6 +if test "$program_transform_name" = s,x,x,; then + program_transform_name= +else + # Double any \ or $. echo might interpret backslashes. + cat <<\EOF_SED > conftestsed +s,\\,\\\\,g; s,\$,$$,g +EOF_SED + program_transform_name="`echo $program_transform_name|sed -f conftestsed`" + rm -f conftestsed +fi +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" + +# sed with no file args requires a program. +test "$program_transform_name" = "" && program_transform_name="s,x,x," + +echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 +echo "configure:681: checking whether ${MAKE-make} sets \${MAKE}" >&5 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftestmake <<\EOF +all: + @echo 'ac_maketemp="${MAKE}"' +EOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftestmake +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$ac_t""yes" 1>&6 + SET_MAKE= +else + echo "$ac_t""no" 1>&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + + +PACKAGE=gmrun + +VERSION=0.9.2 + +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } +fi +cat >> confdefs.h <> confdefs.h <&6 +echo "configure:727: checking for working aclocal-${am__api_version}" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (aclocal-${am__api_version} --version) < /dev/null > /dev/null 2>&1; then + ACLOCAL=aclocal-${am__api_version} + echo "$ac_t""found" 1>&6 +else + ACLOCAL="$missing_dir/missing aclocal-${am__api_version}" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 +echo "configure:740: checking for working autoconf" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoconf --version) < /dev/null > /dev/null 2>&1; then + AUTOCONF=autoconf + echo "$ac_t""found" 1>&6 +else + AUTOCONF="$missing_dir/missing autoconf" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working automake-${am__api_version}""... $ac_c" 1>&6 +echo "configure:753: checking for working automake-${am__api_version}" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (automake-${am__api_version} --version) < /dev/null > /dev/null 2>&1; then + AUTOMAKE=automake-${am__api_version} + echo "$ac_t""found" 1>&6 +else + AUTOMAKE="$missing_dir/missing automake-${am__api_version}" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 +echo "configure:766: checking for working autoheader" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoheader --version) < /dev/null > /dev/null 2>&1; then + AUTOHEADER=autoheader + echo "$ac_t""found" 1>&6 +else + AUTOHEADER="$missing_dir/missing autoheader" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 +echo "configure:779: checking for working makeinfo" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (makeinfo --version) < /dev/null > /dev/null 2>&1; then + MAKEINFO=makeinfo + echo "$ac_t""found" 1>&6 +else + MAKEINFO="$missing_dir/missing makeinfo" + echo "$ac_t""missing" 1>&6 +fi + + + + + + +# Check whether --enable-debug or --disable-debug was given. +if test "${enable_debug+set}" = set; then + enableval="$enable_debug" + : +else + enable_debug=no +fi + + +if ! test "x$enable_debug" != "xyes"; then + CFLAGS="-g3 -O0 -DDEBUG" + CXXFLAGS="-g3 -O0 -DDEBUG" +fi + +# Check whether --enable-system or --disable-system was given. +if test "${enable_system+set}" = set; then + enableval="$enable_system" + : +else + enable_system=no +fi + + +if ! test "x$enable_system" != "xyes"; then + CFLAGS="$CFLAGS -DUSE_SYSTEM" + CXXFLAGS="$CXXFLAGS -DUSE_SYSTEM" +fi + +# Check whether --enable-mtrace or --disable-mtrace was given. +if test "${enable_mtrace+set}" = set; then + enableval="$enable_mtrace" + : +else + enable_mtrace=no +fi + + +if ! test "x$enable_mtrace" != "xyes"; then + CFLAGS="$CFLAGS -DMTRACE" + CXXFLAGS="$CXXFLAGS -DMTRACE" +fi + + + echo $ac_n "checking for strerror in -lcposix""... $ac_c" 1>&6 +echo "configure:840: checking for strerror in -lcposix" >&5 +ac_lib_var=`echo cposix'_'strerror | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lcposix $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + LIBS="$LIBS -lcposix" +else + echo "$ac_t""no" 1>&6 +fi + + + +# Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:884: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +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 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:914: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_prog_rejected=no + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + break + fi + done + IFS="$ac_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 $# -gt 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 + set dummy "$ac_dir/$ac_word" "$@" + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + if test -z "$CC"; then + case "`uname -s`" in + *win32* | *WIN32*) + # Extract the first word of "cl", so it can be a program name with args. +set dummy cl; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:965: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="cl" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + ;; + esac + fi + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:997: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +cat > conftest.$ac_ext << EOF + +#line 1008 "configure" +#include "confdefs.h" + +main(){return(0);} +EOF +if { (eval echo configure:1013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cc_cross=no + else + ac_cv_prog_cc_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cc_works=no +fi +rm -fr conftest* +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 +if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:1039: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 +cross_compiling=$ac_cv_prog_cc_cross + +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +echo "configure:1044: checking whether we are using GNU C" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gcc" 1>&6 + +if test $ac_cv_prog_gcc = yes; then + GCC=yes +else + GCC= +fi + +ac_test_CFLAGS="${CFLAGS+set}" +ac_save_CFLAGS="$CFLAGS" +CFLAGS= +echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +echo "configure:1072: checking whether ${CC-cc} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.c +if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + ac_cv_prog_cc_g=yes +else + ac_cv_prog_cc_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cc_g" 1>&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 + + + + +echo $ac_n "checking for ${CC-cc} option to accept ANSI C""... $ac_c" 1>&6 +echo "configure:1107: checking for ${CC-cc} option to accept ANSI C" >&5 +if eval "test \"`echo '$''{'am_cv_prog_cc_stdc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + am_cv_prog_cc_stdc=no +ac_save_CC="$CC" +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + cat > conftest.$ac_ext < +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} +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; } +EOF +if { (eval echo configure:1160: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + am_cv_prog_cc_stdc="$ac_arg"; break +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* +done +CC="$ac_save_CC" + +fi + +if test -z "$am_cv_prog_cc_stdc"; then + echo "$ac_t""none needed" 1>&6 +else + echo "$ac_t""$am_cv_prog_cc_stdc" 1>&6 +fi +case "x$am_cv_prog_cc_stdc" in + x|xno) ;; + *) CC="$CC $am_cv_prog_cc_stdc" ;; +esac + +ac_header_dirent=no +for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 +echo "configure:1188: checking for $ac_hdr that defines DIR" >&5 +if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include <$ac_hdr> +int main() { +DIR *dirp = 0; +; return 0; } +EOF +if { (eval echo configure:1201: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "ac_cv_header_dirent_$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_dirent_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done +# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. +if test $ac_header_dirent = dirent.h; then +echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 +echo "configure:1226: checking for opendir in -ldir" >&5 +ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldir $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + LIBS="$LIBS -ldir" +else + echo "$ac_t""no" 1>&6 +fi + +else +echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 +echo "configure:1267: checking for opendir in -lx" >&5 +ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lx $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + LIBS="$LIBS -lx" +else + echo "$ac_t""no" 1>&6 +fi + +fi + +echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 +echo "configure:1309: checking how to run the C preprocessor" >&5 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then +if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # This must be in double quotes, not single quotes, because CPP may get + # substituted into the Makefile and "${CC-cc}" will confuse make. + CPP="${CC-cc} -E" + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1330: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1347: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -nologo -E" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1364: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP=/lib/cpp +fi +rm -f conftest* +fi +rm -f conftest* +fi +rm -f conftest* + ac_cv_prog_CPP="$CPP" +fi + CPP="$ac_cv_prog_CPP" +else + ac_cv_prog_CPP="$CPP" +fi +echo "$ac_t""$CPP" 1>&6 + +echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 +echo "configure:1389: checking for ANSI C header files" >&5 +if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#include +#include +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1402: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + ac_cv_header_stdc=yes +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "memchr" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "free" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. +if test "$cross_compiling" = yes; then + : +else + cat > conftest.$ac_ext < +#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int main () { int i; for (i = 0; i < 256; i++) +if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); +exit (0); } + +EOF +if { (eval echo configure:1469: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_header_stdc=no +fi +rm -fr conftest* +fi + +fi +fi + +echo "$ac_t""$ac_cv_header_stdc" 1>&6 +if test $ac_cv_header_stdc = yes; then + cat >> confdefs.h <<\EOF +#define STDC_HEADERS 1 +EOF + +fi + +for ac_prog in $CCC c++ g++ gcc CC cxx cc++ cl +do +# Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1497: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CXX="$ac_prog" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CXX="$ac_cv_prog_CXX" +if test -n "$CXX"; then + echo "$ac_t""$CXX" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +test -n "$CXX" && break +done +test -n "$CXX" || CXX="gcc" + + +echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:1529: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5 + +ac_ext=C +# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cxx_cross + +cat > conftest.$ac_ext << EOF + +#line 1540 "configure" +#include "confdefs.h" + +int main(){return(0);} +EOF +if { (eval echo configure:1545: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cxx_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cxx_cross=no + else + ac_cv_prog_cxx_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cxx_works=no +fi +rm -fr conftest* +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +echo "$ac_t""$ac_cv_prog_cxx_works" 1>&6 +if test $ac_cv_prog_cxx_works = no; then + { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:1571: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6 +cross_compiling=$ac_cv_prog_cxx_cross + +echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6 +echo "configure:1576: checking whether we are using GNU C++" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.C <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gxx=yes +else + ac_cv_prog_gxx=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gxx" 1>&6 + +if test $ac_cv_prog_gxx = yes; then + GXX=yes +else + GXX= +fi + +ac_test_CXXFLAGS="${CXXFLAGS+set}" +ac_save_CXXFLAGS="$CXXFLAGS" +CXXFLAGS= +echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6 +echo "configure:1604: checking whether ${CXX-g++} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.cc +if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then + ac_cv_prog_cxx_g=yes +else + ac_cv_prog_cxx_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cxx_g" 1>&6 +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS="$ac_save_CXXFLAGS" +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi + + + + echo $ac_n "checking for stlport libraries""... $ac_c" 1>&6 +echo "configure:1638: checking for stlport libraries" >&5 + + ac_stlport_lib="no" + + ac_enable_stlport="yes" + + # Check whether --enable-stlport or --disable-stlport was given. +if test "${enable_stlport+set}" = set; then + enableval="$enable_stlport" + ac_enable_stlport="$enableval" +fi + + if test "$ac_enable_stlport" = "no"; then + + + have_stlport_inc="no" + else + + # Check whether --with-stlport-lib or --without-stlport-lib was given. +if test "${with_stlport_lib+set}" = set; then + withval="$with_stlport_lib" + ac_stlport_lib="$withval" +fi + + + + if eval "test \"`echo '$''{'ac_cv_lib_stlport_lib'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + + + if test "$ac_stlport_lib" = "no"; then + + stlport_lib_dirs="\ + $STLPORTDIR/lib \ + /usr/lib \ + /usr/local/lib \ + /usr/local/tiit/lib" + + for dir in $stlport_lib_dirs; do + if test -r "$dir/libstlport_gcc.so"; then + ac_stlport_lib=$dir + break + fi + done + fi + + ac_cv_lib_stlport_lib=$ac_stlport_lib + +fi + + + if test "$ac_cv_lib_stlport_lib" = "no"; then + have_stlport_lib="no" + STLPORT_LIBDIR="" + STLPORT_LDFLAGS="" + else + have_stlport_lib="yes" + STLPORT_LIBDIR="$ac_cv_lib_stlport_lib" + STLPORT_LDFLAGS="-L$STLPORT_LIBDIR -lstlport_gcc -lpthread" + fi + + + + fi + + echo "$ac_t""$ac_cv_lib_stlport_lib" 1>&6 + + + + echo $ac_n "checking for stlport headers""... $ac_c" 1>&6 +echo "configure:1710: checking for stlport headers" >&5 + + ac_stlport_includes="no" + ac_enable_stlport="yes" + + # Check whether --enable-stlport or --disable-stlport was given. +if test "${enable_stlport+set}" = set; then + enableval="$enable_stlport" + ac_enable_stlport="$enableval" +fi + + if test "$ac_enable_stlport" = "no"; then + + + have_stlport_inc="no" + else + + # Check whether --with-stlport-includes or --without-stlport-includes was given. +if test "${with_stlport_includes+set}" = set; then + withval="$with_stlport_includes" + ac_stlport_includes="$withval" +fi + + + + if eval "test \"`echo '$''{'ac_cv_header_stlport_includes'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + + + if test "$ac_stlport_includes" = "no"; then + + stlport_include_dirs="\ + $LIBCONFIGDIR/include/stlport \ + /usr/include/stlport \ + /usr/local/include/stlport \ + /usr/local/include/ + /usr/local/stlport/include" + + for dir in $stlport_include_dirs; do + if test -r "$dir/algorithm"; then + ac_stlport_includes=$dir + break + fi + done + fi + + ac_cv_header_stlport_includes=$ac_stlport_includes + +fi + + + if test "$ac_cv_header_stlport_includes" = "no"; then + have_stlport_inc="no" + STLPORT_INCDIR="" + STLPORT_CXXFLAGS="" + else + have_stlport_inc="yes" + STLPORT_INCDIR="$ac_cv_header_stlport_includes" + STLPORT_CXXFLAGS="-I$STLPORT_INCDIR" + fi + + + + + fi + + echo "$ac_t""$ac_cv_header_stlport_includes" 1>&6 + + + +echo $ac_n "checking for poptGetContext""... $ac_c" 1>&6 +echo "configure:1783: checking for poptGetContext" >&5 +if eval "test \"`echo '$''{'ac_cv_func_poptGetContext'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char poptGetContext(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_poptGetContext) || defined (__stub___poptGetContext) +choke me +#else +poptGetContext(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1811: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_poptGetContext=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_poptGetContext=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'poptGetContext`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 +echo "configure:1829: checking for poptGetContext in -lpopt" >&5 +ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lpopt $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + LIBS="${LIBS} -lpopt" +else + echo "$ac_t""no" 1>&6 +echo "*** You need to get libpopt ***";exit + +fi + + +fi + + + + succeeded=no + + if test -z "$PKG_CONFIG"; then + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1881: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$PKG_CONFIG" in + /*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_PKG_CONFIG="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" + ;; +esac +fi +PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +if test -n "$PKG_CONFIG"; then + echo "$ac_t""$PKG_CONFIG" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + fi + + if test "$PKG_CONFIG" = "no" ; then + echo "*** The pkg-config script could not be found. Make sure it is" + echo "*** in your path, or set the PKG_CONFIG environment variable" + echo "*** to the full path to pkg-config." + echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." + else + PKG_CONFIG_MIN_VERSION=0.9.0 + if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then + echo $ac_n "checking for glib-2.0 >= 2.0.4 + gobject-2.0 >= 2.0.4 + gthread-2.0 >= 2.0.4""... $ac_c" 1>&6 +echo "configure:1927: checking for glib-2.0 >= 2.0.4 + gobject-2.0 >= 2.0.4 + gthread-2.0 >= 2.0.4" >&5 + + if $PKG_CONFIG --exists "glib-2.0 >= 2.0.4 + gobject-2.0 >= 2.0.4 + gthread-2.0 >= 2.0.4" ; then + echo "$ac_t""yes" 1>&6 + succeeded=yes + + echo $ac_n "checking GLIB_CFLAGS""... $ac_c" 1>&6 +echo "configure:1938: checking GLIB_CFLAGS" >&5 + GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.0.4 + gobject-2.0 >= 2.0.4 + gthread-2.0 >= 2.0.4"` + echo "$ac_t""$GLIB_CFLAGS" 1>&6 + + echo $ac_n "checking GLIB_LIBS""... $ac_c" 1>&6 +echo "configure:1945: checking GLIB_LIBS" >&5 + GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.0.4 + gobject-2.0 >= 2.0.4 + gthread-2.0 >= 2.0.4"` + echo "$ac_t""$GLIB_LIBS" 1>&6 + else + GLIB_CFLAGS="" + GLIB_LIBS="" + ## If we have a custom action on failure, don't print errors, but + ## do set a variable so people can do so. + GLIB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "glib-2.0 >= 2.0.4 + gobject-2.0 >= 2.0.4 + gthread-2.0 >= 2.0.4"` + echo $GLIB_PKG_ERRORS + fi + + + + else + echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." + echo "*** See http://www.freedesktop.org/software/pkgconfig" + fi + fi + + if test $succeeded = yes; then + : + else + { echo "configure: error: Library requirements (glib-2.0 >= 2.0.4 + gobject-2.0 >= 2.0.4 + gthread-2.0 >= 2.0.4) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." 1>&2; exit 1; } + fi + + + + + + succeeded=no + + if test -z "$PKG_CONFIG"; then + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1987: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$PKG_CONFIG" in + /*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_PKG_CONFIG="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" + ;; +esac +fi +PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +if test -n "$PKG_CONFIG"; then + echo "$ac_t""$PKG_CONFIG" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + fi + + if test "$PKG_CONFIG" = "no" ; then + echo "*** The pkg-config script could not be found. Make sure it is" + echo "*** in your path, or set the PKG_CONFIG environment variable" + echo "*** to the full path to pkg-config." + echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." + else + PKG_CONFIG_MIN_VERSION=0.9.0 + if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then + echo $ac_n "checking for gtk+-2.0 >= 2.0.5""... $ac_c" 1>&6 +echo "configure:2031: checking for gtk+-2.0 >= 2.0.5" >&5 + + if $PKG_CONFIG --exists "gtk+-2.0 >= 2.0.5" ; then + echo "$ac_t""yes" 1>&6 + succeeded=yes + + echo $ac_n "checking GTK_CFLAGS""... $ac_c" 1>&6 +echo "configure:2038: checking GTK_CFLAGS" >&5 + GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.0.5"` + echo "$ac_t""$GTK_CFLAGS" 1>&6 + + echo $ac_n "checking GTK_LIBS""... $ac_c" 1>&6 +echo "configure:2043: checking GTK_LIBS" >&5 + GTK_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.0.5"` + echo "$ac_t""$GTK_LIBS" 1>&6 + else + GTK_CFLAGS="" + GTK_LIBS="" + ## If we have a custom action on failure, don't print errors, but + ## do set a variable so people can do so. + GTK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gtk+-2.0 >= 2.0.5"` + echo $GTK_PKG_ERRORS + fi + + + + else + echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." + echo "*** See http://www.freedesktop.org/software/pkgconfig" + fi + fi + + if test $succeeded = yes; then + : + else + { echo "configure: error: Library requirements (gtk+-2.0 >= 2.0.5) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." 1>&2; exit 1; } + fi + + + + +if test "x${datadir}" = 'x${prefix}/share'; then + if test "x${prefix}" = "xNONE"; then + prefix=/usr/local + cat >> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h < confcache <<\EOF +# 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. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# 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. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +DEFS=-DHAVE_CONFIG_H + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS </dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.13" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir +ac_given_INSTALL="$INSTALL" + +trap 'rm -fr `echo " +Makefile +src/Makefile +config/Makefile +gmrun.spec + config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@SHELL@%$SHELL%g +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@FFLAGS@%$FFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g +s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g +s%@INSTALL_DATA@%$INSTALL_DATA%g +s%@PACKAGE@%$PACKAGE%g +s%@VERSION@%$VERSION%g +s%@ACLOCAL@%$ACLOCAL%g +s%@AUTOCONF@%$AUTOCONF%g +s%@AUTOMAKE@%$AUTOMAKE%g +s%@AUTOHEADER@%$AUTOHEADER%g +s%@MAKEINFO@%$MAKEINFO%g +s%@SET_MAKE@%$SET_MAKE%g +s%@CC@%$CC%g +s%@CPP@%$CPP%g +s%@CXX@%$CXX%g +s%@STLPORT_INCDIR@%$STLPORT_INCDIR%g +s%@STLPORT_INCLUDES@%$STLPORT_INCLUDES%g +s%@STLPORT_LIBDIR@%$STLPORT_LIBDIR%g +s%@STLPORT_LDFLAGS@%$STLPORT_LDFLAGS%g +s%@STLPORT_CXXFLAGS@%$STLPORT_CXXFLAGS%g +s%@PKG_CONFIG@%$PKG_CONFIG%g +s%@GLIB_CFLAGS@%$GLIB_CFLAGS%g +s%@GLIB_LIBS@%$GLIB_LIBS%g +s%@GTK_CFLAGS@%$GTK_CFLAGS%g +s%@GTK_LIBS@%$GTK_LIBS%g +s%@PACKAGE_DATA_DIR@%$PACKAGE_DATA_DIR%g +s%@PREFIX@%$PREFIX%g + +CEOF +EOF + +cat >> $CONFIG_STATUS <<\EOF + +# Split the substitutions into bite-sized pieces for seds with +# small command number limits, like on Digital OSF/1 and HP-UX. +ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # Line after last line for current file. +ac_more_lines=: +ac_sed_cmds="" +while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" + else + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" + fi + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` + fi +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi +EOF + +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +s%@INSTALL@%$INSTALL%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' +ac_dC='\3' +ac_dD='%g' +# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". +ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='\([ ]\)%\1#\2define\3' +ac_uC=' ' +ac_uD='\4%g' +# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_eB='$%\1#\2define\3' +ac_eC=' ' +ac_eD='%g' + +if test "${CONFIG_HEADERS+set}" != set; then +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +fi +for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + echo creating $ac_file + + rm -f conftest.frag conftest.in conftest.out + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + cat $ac_file_inputs > conftest.in + +EOF + +# Transform confdefs.h into a sed script conftest.vals that substitutes +# the proper values into config.h.in to produce config.h. And first: +# Protect against being on the right side of a sed subst in config.status. +# Protect against being in an unquoted here document in config.status. +rm -f conftest.vals +cat > conftest.hdr <<\EOF +s/[\\&%]/\\&/g +s%[\\$`]%\\&%g +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp +s%ac_d%ac_u%gp +s%ac_u%ac_e%gp +EOF +sed -n -f conftest.hdr confdefs.h > conftest.vals +rm -f conftest.hdr + +# This sed command replaces #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. +cat >> conftest.vals <<\EOF +s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% +EOF + +# Break up conftest.vals because some shells have a limit on +# the size of here documents, and old seds have small limits too. + +rm -f conftest.tail +while : +do + ac_lines=`grep -c . conftest.vals` + # grep -c gives empty output for an empty file on some AIX systems. + if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi + # Write a limited-size here document to conftest.frag. + echo ' cat > conftest.frag <> $CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS + echo 'CEOF + sed -f conftest.frag conftest.in > conftest.out + rm -f conftest.in + mv conftest.out conftest.in +' >> $CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail + rm -f conftest.vals + mv conftest.tail conftest.vals +done +rm -f conftest.vals + +cat >> $CONFIG_STATUS <<\EOF + rm -f conftest.frag conftest.h + echo "/* $ac_file. Generated automatically by configure. */" > conftest.h + cat conftest.in >> conftest.h + rm -f conftest.in + if cmp -s $ac_file conftest.h 2>/dev/null; then + echo "$ac_file is unchanged" + rm -f conftest.h + else + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + fi + rm -f $ac_file + mv conftest.h $ac_file + fi +fi; done + +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + + diff --git a/configure.in b/configure.in new file mode 100644 index 0000000..232c3c4 --- /dev/null +++ b/configure.in @@ -0,0 +1,102 @@ +dnl Process this file with autoconf to produce a configure script. + +AC_INIT(configure.in) +AM_INIT_AUTOMAKE(gmrun, 0.9.2) +AM_CONFIG_HEADER(config.h) + +AC_ARG_ENABLE(debug, + [ --enable-debug=[no/yes] Debugging information == no <--> optimization == yes],, + enable_debug=no) + +if [ ! test "x$enable_debug" != "xyes"]; then + CFLAGS="-g3 -O0 -DDEBUG" + CXXFLAGS="-g3 -O0 -DDEBUG" +fi + +AC_ARG_ENABLE(system, + [ --enable-system=[yes/no] Use "system" libc function to run commands ],, + enable_system=no) + +if [ ! test "x$enable_system" != "xyes"]; then + CFLAGS="$CFLAGS -DUSE_SYSTEM" + CXXFLAGS="$CXXFLAGS -DUSE_SYSTEM" +fi + +AC_ARG_ENABLE(mtrace, + [ --enable-mtrace=[no/yes] Trace memory (de)allocation calls to detect memory leaks ],, + enable_mtrace=no) + +if [ ! test "x$enable_mtrace" != "xyes"]; then + CFLAGS="$CFLAGS -DMTRACE" + CXXFLAGS="$CXXFLAGS -DMTRACE" +fi + +AC_ISC_POSIX +AC_PROG_CC +AM_PROG_CC_STDC +AC_HEADER_DIRENT +AC_HEADER_STDC +AC_PROG_CXX +AC_PATH_STLPORT_LIB +AC_PATH_STLPORT_INC + + +AC_CHECK_FUNC( poptGetContext, + , + AC_CHECK_LIB(popt, + poptGetContext, + LIBS="${LIBS} -lpopt", + echo "*** You need to get libpopt ***";exit + ) + ) + +PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.0.4 + gobject-2.0 >= 2.0.4 + gthread-2.0 >= 2.0.4) +AC_SUBST(GLIB_CFLAGS) +AC_SUBST(GLIB_LIBS) + +PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.0.5) +AC_SUBST(GTK_CFLAGS) +AC_SUBST(GTK_LIBS) + +dnl Set PACKAGE_DATA_DIR in config.h. +if test "x${datadir}" = 'x${prefix}/share'; then + if test "x${prefix}" = "xNONE"; then + prefix=/usr/local + AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${ac_default_prefix}/share/${PACKAGE}") + PACKAGE_DATA_DIR="${ac_default_prefix}/share/${PACKAGE}" + else + AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${prefix}/share/${PACKAGE}") + PACKAGE_DATA_DIR="${prefix}/share/${PACKAGE}" + fi +else + AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${datadir}/${PACKAGE}") + PACKAGE_DATA_DIR="${datadir}/${PACKAGE}" +fi +AC_SUBST(PACKAGE_DATA_DIR) + +PREFIX=${prefix} +AC_SUBST(PREFIX) + +dnl Set PACKAGE_SOURCE_DIR in config.h. +packagesrcdir=`cd $srcdir && pwd` +AC_DEFINE_UNQUOTED(PACKAGE_SOURCE_DIR, "${packagesrcdir}") + +dnl Use -Wall if we have gcc. +changequote(,)dnl +if test "x$GCC" = "xyes"; then + case " $CFLAGS " in + *[\ \ ]-Wall[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wall" ;; + esac +fi +changequote([,])dnl + +AC_OUTPUT([ +Makefile +src/Makefile +config/Makefile +gmrun.spec +]) + diff --git a/gmrun.spec.in b/gmrun.spec.in new file mode 100644 index 0000000..b92f080 --- /dev/null +++ b/gmrun.spec.in @@ -0,0 +1,108 @@ +%define prefix @PREFIX@ + +Name: @PACKAGE@ +Version: @VERSION@ +Release: 2 +Summary: Small GTK based 'Run application' +Group: X11/Utilities +Source: %{name}-%{version}.tar.gz +License: GPL +Packager: Mihai Bazon +BuildPrereq: gtk+ >= 2.0.6 +BuildRoot: %{_tmppath}/%{name}-root + +%description + + Short GtkEntry for file autocompletion + main.cc that does the needed stuff + for running programs. This is intended as a replacement to grun, which + (sorry) sucks. The idea comes from the KDE Window Manager (ALT-F2 in KDE). + Though, GNOME is better :) + +%prep +%setup -q + +%build +%configure + +%install +rm -rf %{buildroot} +make install-strip DESTDIR=%{buildroot} + +%clean +rm -rf %{buildroot} + +%files +%defattr(-,root,root) + %{_bindir}/%{name} +%doc AUTHORS COPYING INSTALL README NEWS ChangeLog +%dir %{_datadir}/%{name} + %{_datadir}/%{name}/* + +%changelog +* Sun Aug 03 2003 Mihai Bazon 0.9-2 +- fixed a parsing bug in the "run command" function + +* Sun Jun 22 2003 Marius FERARU 0.9-0.n0i +- version 0.9 + +* Sat Jun 14 2003 Marius FERARU 0.8.1-1.n0i +- rebuild on RHL9 + +* Sat Aug 17 2002 Mihai Bazon +- Some bugs fixed, specifically the behavior of END/HOME keys (or C-E, C-A), + and the major one: you could not run a file that has an extension handler + with some other program than the extension handler :) + +* Fri Aug 16 2002 Mihai Bazon +- Fixed bug: filenames can now contain white spaces (will be backslash-ed) +- New feature: can specify application handler per file extension, so you + can directly type the name of some .cpp file and emacs will show up :) + see config file for details. +- New feature: can automatically simulate a TAB press after some timeout. + Check config file for details, key "TabTimeout" (0 to disable). +- New feature: you can now always use "system" for running programs + (specify --enable-system at configure). + +* Fri Oct 19 2001 Mihai Bazon +- Fixed bug with sorting of completion list +- Fixed bug with URL handling +- New parameter: list of execs to be always run in terminal +- New feature: last history line appears directly in edit line, selected + +* Wed Aug 01 2001 Mihai Bazon +- Programs are now executed using execv. We don't use system anymore, thus + avoiding forking another shell. +- gmrun.spec gets now generated automagically, at ./configure. + +* Sun Jul 22 2001 Mihai Bazon +- added "!" history backward search; like in bash, it finds the last command + which begins with the entered text. +- CTRL-R / CTRL-S don't show two identical consecutive records. + +* Thu Jul 19 2001 Mihai Bazon +- added history search capabilities (CTRL-R / CTRL-S, like in bash / Emacs) +- small bug fixes + +* Fri Jun 29 2001 Mihai Bazon +- history size configurable from config file +- window appears directly where it should (no more flicker) + +* Wed May 14 2001 Mihai Bazon +- added default configuration file (goes to /usr/share/gmrun) + +* Wed May 07 2001 Marius Feraru +- updated to version 0.5.3 and took over to 0.5.31 + +* Wed May 03 2001 Marius Feraru +- updated to version 0.2.5 and took over to 0.2.51: + * configuration file with 2 options for now: + 'Terminal' and 'Width' + * added some more (and hopefully more useful) documentation: + README.hints, README.gmrunrc and README.icewm + +* Wed May 03 2001 Marius Feraru +- updated to version 0.2.2: + * Ctrl-Enter spawns a terminal + +* Wed May 02 2001 Marius Feraru +- initial RPM build diff --git a/install-sh b/install-sh new file mode 100755 index 0000000..e9de238 --- /dev/null +++ b/install-sh @@ -0,0 +1,251 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# This comes from X11R5 (mit/util/scripts/install.sh). +# +# Copyright 1991 by the Massachusetts Institute of Technology +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +# 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. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +else + true +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d $dst ]; then + instcmd=: + chmodcmd="" + else + instcmd=mkdir + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f $src -o -d $src ] + then + true + else + echo "install: $src does not exist" + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "install: no destination specified" + exit 1 + else + true + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d $dst ] + then + dst="$dst"/`basename $src` + else + true + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' +' +IFS="${IFS-${defaultIFS}}" + +oIFS="${IFS}" +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS="${oIFS}" + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift + + if [ ! -d "${pathcomp}" ] ; + then + $mkdirprog "${pathcomp}" + else + true + fi + + pathcomp="${pathcomp}/" +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd $dst && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename $dst` + else + dstfile=`basename $dst $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename $dst` + else + true + fi + +# Make a temp file name in the proper directory. + + dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && + +# 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 $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && + +# Now rename the file to the real destination. + + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile + +fi && + + +exit 0 diff --git a/missing b/missing new file mode 100755 index 0000000..6a37006 --- /dev/null +++ b/missing @@ -0,0 +1,336 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. +# Copyright (C) 1996, 1997, 1999, 2000, 2002 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, 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. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: + +# 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 + +case "$1" in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case "$1" in + + -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' + 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]" + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing 0.4 - GNU automake" + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + + aclocal*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. 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) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. 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) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. 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*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. 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) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. + You can get \`$1Help2man' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` + test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` + 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' is missing on your system. 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 [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. 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 [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. 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 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` + fi + if [ -f "$file" ]; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then + # We have makeinfo, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. 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." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + tar) + shift + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + fi + + # 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 you do not seem to have it handy on your + system. 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 prerequirements 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 diff --git a/mkinstalldirs b/mkinstalldirs new file mode 100755 index 0000000..b8da008 --- /dev/null +++ b/mkinstalldirs @@ -0,0 +1,40 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# Created: 1993-05-16 +# Public domain + +# $Id: mkinstalldirs,v 1.1.1.1 2001/02/23 07:48:27 mishoo Exp $ + +errstatus=0 + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case "$pathcomp" in + -* ) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# mkinstalldirs ends here diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..168be3c --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,17 @@ +## Process this file with automake to produce Makefile.in + +INCLUDES = \ + @GTK_CFLAGS@ @STLPORT_CXXFLAGS@ + +bin_PROGRAMS = gmrun + +gmrun_SOURCES = \ + gtkcompletionline.cc gtkcompletionline.h \ + history.cc history.h \ + main.cc main.h \ + prefs.cc prefs.h ci_string.h + +# gmrun_LDFLAGS = -s + +gmrun_LDADD = @GTK_LIBS@ @STLPORT_LDFLAGS@ + diff --git a/src/Makefile.in b/src/Makefile.in new file mode 100644 index 0000000..7e46523 --- /dev/null +++ b/src/Makefile.in @@ -0,0 +1,303 @@ +# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999, 2001 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. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +CC = @CC@ +CXX = @CXX@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_LIBS = @GTK_LIBS@ +MAKEINFO = @MAKEINFO@ +PACKAGE = @PACKAGE@ +PACKAGE_DATA_DIR = @PACKAGE_DATA_DIR@ +PKG_CONFIG = @PKG_CONFIG@ +PREFIX = @PREFIX@ +STLPORT_CXXFLAGS = @STLPORT_CXXFLAGS@ +STLPORT_INCDIR = @STLPORT_INCDIR@ +STLPORT_INCLUDES = @STLPORT_INCLUDES@ +STLPORT_LDFLAGS = @STLPORT_LDFLAGS@ +STLPORT_LIBDIR = @STLPORT_LIBDIR@ +VERSION = @VERSION@ + +INCLUDES = @GTK_CFLAGS@ @STLPORT_CXXFLAGS@ + + +bin_PROGRAMS = gmrun + +gmrun_SOURCES = gtkcompletionline.cc gtkcompletionline.h history.cc history.h main.cc main.h prefs.cc prefs.h ci_string.h + + +# gmrun_LDFLAGS = -s + +gmrun_LDADD = @GTK_LIBS@ @STLPORT_LDFLAGS@ +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +PROGRAMS = $(bin_PROGRAMS) + + +DEFS = @DEFS@ -I. -I$(srcdir) -I.. +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +gmrun_OBJECTS = gtkcompletionline.o history.o main.o prefs.o +gmrun_DEPENDENCIES = +gmrun_LDFLAGS = +CXXFLAGS = @CXXFLAGS@ +CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ +CFLAGS = @CFLAGS@ +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +SOURCES = $(gmrun_SOURCES) +OBJECTS = $(gmrun_OBJECTS) + +all: all-redirect +.SUFFIXES: +.SUFFIXES: .S .c .cc .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps src/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-binPROGRAMS: + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) + +distclean-binPROGRAMS: + +maintainer-clean-binPROGRAMS: + +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(bindir) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ + $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + list='$(bin_PROGRAMS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ + done + +.c.o: + $(COMPILE) -c $< + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +gmrun: $(gmrun_OBJECTS) $(gmrun_DEPENDENCIES) + @rm -f gmrun + $(CXXLINK) $(gmrun_LDFLAGS) $(gmrun_OBJECTS) $(gmrun_LDADD) $(LIBS) +.cc.o: + $(CXXCOMPILE) -c $< + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = src + +distdir: $(DISTFILES) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done +gtkcompletionline.o: gtkcompletionline.cc gtkcompletionline.h history.h +history.o: history.cc history.h prefs.h ci_string.h +main.o: main.cc gtkcompletionline.h history.h prefs.h ci_string.h +prefs.o: prefs.cc prefs.h ci_string.h ../config.h + +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: all-am +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: install-binPROGRAMS +install-exec: install-exec-am + +install-data-am: +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: uninstall-binPROGRAMS +uninstall: uninstall-am +all-am: Makefile $(PROGRAMS) +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: + $(mkinstalldirs) $(DESTDIR)$(bindir) + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \ + mostlyclean-tags mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-binPROGRAMS clean-compile clean-tags clean-generic \ + mostlyclean-am + +clean: clean-am + +distclean-am: distclean-binPROGRAMS distclean-compile distclean-tags \ + distclean-generic clean-am + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-binPROGRAMS \ + maintainer-clean-compile maintainer-clean-tags \ + maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ +maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ +mostlyclean-compile distclean-compile clean-compile \ +maintainer-clean-compile tags mostlyclean-tags distclean-tags \ +clean-tags maintainer-clean-tags distdir info-am info dvi-am dvi check \ +check-am installcheck-am installcheck install-exec-am install-exec \ +install-data-am install-data install-am install uninstall-am uninstall \ +all-redirect all-am all installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean + + +# 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/ci_string.h b/src/ci_string.h new file mode 100644 index 0000000..aed3001 --- /dev/null +++ b/src/ci_string.h @@ -0,0 +1,41 @@ +// $Id: ci_string.h,v 1.2 2001/05/16 14:39:31 mishoo Exp $ + +// This is a very nice class, probably because it's not coded by me ;=]~ +// Provide a case-insensitive std::string-like class. + +#ifndef __CI_STRING_H__ +#define __CI_STRING_H__ + +#include +#include + +struct ci_char_traits : public std::char_traits +{ + static bool eq( char c1, char c2 ) { + return ::tolower(c1) == ::tolower(c2); + } + + static bool ne( char c1, char c2 ) { + return ::tolower(c1) != ::tolower(c2); + } + + static bool lt( char c1, char c2 ) { + return ::tolower(c1) < ::tolower(c2); + } + + static int compare( const char* s1, + const char* s2, + size_t n ) { + return ::strncasecmp( s1, s2, n ); + } + + static const char* + find( const char* s, int n, char a ) { + while ( n-- > 0 && ::tolower(*s) != ::tolower(a) ) ++s; + return s; + } +}; + +typedef std::basic_string ci_string; + +#endif // __CI_STRING_H__ diff --git a/src/gtkcompletionline.cc b/src/gtkcompletionline.cc new file mode 100644 index 0000000..374deee --- /dev/null +++ b/src/gtkcompletionline.cc @@ -0,0 +1,1187 @@ +/***************************************************************************** + * $Id: gtkcompletionline.cc,v 1.33 2003/11/16 10:55:07 andreas99 Exp $ + * Copyright (C) 2000, Mishoo + * Author: Mihai Bazon Email: mishoo@fenrir.infoiasi.ro + * + * Distributed under the terms of the GNU General Public License. You are + * free to use/modify/distribute this program as long as you comply to the + * terms of the GNU General Public License, version 2 or above, at your + * option, and provided that this copyright notice remains intact. + *****************************************************************************/ + + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +using namespace std; + +#include "gtkcompletionline.h" + +static int on_row_selected_handler = 0; +static int on_key_press_handler = 0; + +/* GLOBALS */ + +/* signals */ +enum { + UNIQUE, + NOTUNIQUE, + INCOMPLETE, + RUNWITHTERM, + SEARCH_MODE, + SEARCH_LETTER, + SEARCH_NOT_FOUND, + EXT_HANDLER, + CANCEL, + LAST_SIGNAL +}; + +#define GEN_COMPLETION_OK 1 +#define GEN_CANT_COMPLETE 2 +#define GEN_NOT_UNIQUE 3 + +static guint gtk_completion_line_signals[LAST_SIGNAL]; + +typedef set StrSet; +typedef vector StrList; + +static StrSet path; +static StrSet execs; +static StrSet dirlist; +static string prefix; +static int g_show_dot_files; + +/* callbacks */ +static void gtk_completion_line_class_init(GtkCompletionLineClass *klass); +static void gtk_completion_line_init(GtkCompletionLine *object); + +static gboolean +on_key_press(GtkCompletionLine *cl, GdkEventKey *event, gpointer data); + +/* get_type */ +guint gtk_completion_line_get_type(void) +{ + static guint type = 0; + if (type == 0) + { + GtkTypeInfo type_info = + { + "GtkCompletionLine", + sizeof(GtkCompletionLine), + sizeof(GtkCompletionLineClass), + (GtkClassInitFunc)gtk_completion_line_class_init, + (GtkObjectInitFunc)gtk_completion_line_init, + /*(GtkArgSetFunc)*/NULL /* reserved */, + /*(GtkArgGetFunc)*/NULL /* reserved */ + }; + type = gtk_type_unique(gtk_entry_get_type(), &type_info); + } + return type; +} + +/* class_init */ +static void +gtk_completion_line_class_init(GtkCompletionLineClass *klass) +{ + GtkObjectClass *object_class; + + object_class = (GtkObjectClass*)klass; + + gtk_completion_line_signals[UNIQUE] = + gtk_signal_new("unique", + GTK_RUN_FIRST, G_TYPE_FROM_CLASS(object_class), + GTK_SIGNAL_OFFSET(GtkCompletionLineClass, + unique), + gtk_signal_default_marshaller, GTK_TYPE_NONE, 0); + + gtk_completion_line_signals[NOTUNIQUE] = + gtk_signal_new("notunique", + GTK_RUN_FIRST, G_TYPE_FROM_CLASS(object_class), + GTK_SIGNAL_OFFSET(GtkCompletionLineClass, + notunique), + gtk_signal_default_marshaller, GTK_TYPE_NONE, 0); + + gtk_completion_line_signals[INCOMPLETE] = + gtk_signal_new("incomplete", + GTK_RUN_FIRST, G_TYPE_FROM_CLASS(object_class), + GTK_SIGNAL_OFFSET(GtkCompletionLineClass, + incomplete), + gtk_signal_default_marshaller, GTK_TYPE_NONE, 0); + + gtk_completion_line_signals[RUNWITHTERM] = + gtk_signal_new("runwithterm", + GTK_RUN_FIRST, G_TYPE_FROM_CLASS(object_class), + GTK_SIGNAL_OFFSET(GtkCompletionLineClass, + runwithterm), + gtk_signal_default_marshaller, GTK_TYPE_NONE, 0); + + gtk_completion_line_signals[SEARCH_MODE] = + gtk_signal_new("search_mode", + GTK_RUN_FIRST, G_TYPE_FROM_CLASS(object_class), + GTK_SIGNAL_OFFSET(GtkCompletionLineClass, + search_mode), + gtk_signal_default_marshaller, GTK_TYPE_NONE, 0); + + gtk_completion_line_signals[SEARCH_NOT_FOUND] = + gtk_signal_new("search_not_found", + GTK_RUN_FIRST, G_TYPE_FROM_CLASS(object_class), + GTK_SIGNAL_OFFSET(GtkCompletionLineClass, + search_not_found), + gtk_signal_default_marshaller, GTK_TYPE_NONE, 0); + + gtk_completion_line_signals[SEARCH_LETTER] = + gtk_signal_new("search_letter", + GTK_RUN_FIRST, G_TYPE_FROM_CLASS(object_class), + GTK_SIGNAL_OFFSET(GtkCompletionLineClass, + search_letter), + gtk_signal_default_marshaller, GTK_TYPE_NONE, 0); + + gtk_completion_line_signals[EXT_HANDLER] = + gtk_signal_new("ext_handler", + GTK_RUN_FIRST, G_TYPE_FROM_CLASS(object_class), + GTK_SIGNAL_OFFSET(GtkCompletionLineClass, + ext_handler), + gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1, + GTK_TYPE_POINTER); + + gtk_completion_line_signals[CANCEL] = + gtk_signal_new("cancel", + GTK_RUN_FIRST, G_TYPE_FROM_CLASS(object_class), + GTK_SIGNAL_OFFSET(GtkCompletionLineClass, + ext_handler), + gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1, + GTK_TYPE_POINTER); + + //gtk_object_class_add_signals(object_class, + // gtk_completion_line_signals, LAST_SIGNAL); + + klass->unique = NULL; + klass->notunique = NULL; + klass->incomplete = NULL; + klass->runwithterm = NULL; + klass->search_mode = NULL; + klass->search_letter = NULL; + klass->search_not_found = NULL; + klass->ext_handler = NULL; + klass->cancel = NULL; +} + +/* init */ +static void +gtk_completion_line_init(GtkCompletionLine *object) +{ + /* Add object initialization / creation stuff here */ + + object->where = NULL; + object->cmpl = NULL; + object->win_compl = NULL; + object->list_compl = NULL; + object->hist_search_mode = GCL_SEARCH_OFF; + object->hist_word = new string; + object->tabtimeout = 0; + object->show_dot_files = 0; + + on_key_press_handler = + gtk_signal_connect(GTK_OBJECT(object), "key_press_event", + GTK_SIGNAL_FUNC(on_key_press), NULL); + gtk_signal_connect(GTK_OBJECT(object), "key_release_event", + GTK_SIGNAL_FUNC(on_key_press), NULL); + + object->hist = new HistoryFile(); + + object->first_key = 1; +} + +void gtk_completion_line_last_history_item(GtkCompletionLine* object) { + const char *last_item = object->hist->last_item(); + if (last_item) { + object->hist->set_default(""); + const char* txt = object->hist->prev(); + gtk_entry_set_text(GTK_ENTRY(object), + g_locale_to_utf8 (txt, -1, NULL, NULL, NULL)); + gtk_entry_select_region(GTK_ENTRY(object), 0, strlen(txt)); + } +} + +string quote_string(const string& str) +{ + string res; + const char* i = str.c_str(); + while (*i) { + char c = *i++; + switch (c) { + case ' ': + res += '\\'; + default: + res += c; + } + } + return res; +} + +static void +get_token(istream& is, string& s) +{ + s.clear(); + bool escaped = false; + while (!is.eof()) { + char c = is.get(); + if (is.eof()) + break; + if (escaped) { + s += c; + escaped = false; + } else if (c == '\\') { + // s += c; + escaped = true; + } else if (::isspace(c)) { + while (::isspace(c) && !is.eof()) c = is.get(); + if (!is.eof()) + is.unget(); + break; + } else { + s += c; + } + } +} + +int +get_words(GtkCompletionLine *object, vector& words) +{ + string content(gtk_entry_get_text(GTK_ENTRY(object))); + int pos_in_text = gtk_editable_get_position(GTK_EDITABLE(object)); + int pos = 0; + { + string::iterator i = content.begin() + pos_in_text; + if (i != content.end()) + content.insert(i, ' '); + } + istringstream ss(content); + + while (!ss.eof()) { + string s; + // ss >> s; + get_token(ss, s); + words.push_back(s); + if (ss.eof()) break; + if (ss.tellg() < pos_in_text && ss.tellg() >= 0) + ++pos; + } + + return pos; +} + +int +set_words(GtkCompletionLine *object, const vector& words, int pos = -1) +{ + ostringstream ss; + if (pos == -1) + pos = words.size() - 1; + int where = 0; + + vector::const_iterator + i = words.begin(), + i_end = words.end(); + + while (i != i_end) { + ss << quote_string(*i++); + if (i != i_end) + ss << ' '; + if (!pos && !where) + where = ss.tellp(); + else + --pos; + } + ss << ends; + + if (words.size() == 1) { + const string& s = words.back(); + size_t pos = s.rfind('.'); + if (pos != string::npos) + gtk_signal_emit_by_name( + GTK_OBJECT(object), "ext_handler", s.substr(pos + 1).c_str()); + else + gtk_signal_emit_by_name(GTK_OBJECT(object), "ext_handler", NULL); + } + + gtk_entry_set_text(GTK_ENTRY(object), + g_locale_to_utf8 (ss.str().c_str(), -1, NULL, NULL, NULL)); + gtk_editable_set_position(GTK_EDITABLE(object), where); + return where; +} + +static void +generate_path() +{ + char *path_cstr = (char*)getenv("PATH"); + + istringstream path_ss(path_cstr); + string tmp; + + path.clear(); + while (!path_ss.eof()) { + tmp = ""; + do { + char c; + c = path_ss.get(); + if (c == ':' || path_ss.eof()) break; + else tmp += c; + } while (true); + if (tmp.length() != 0) + path.insert(tmp); + } +} + +static int +select_executables_only(const struct dirent* dent) +{ + int len = strlen(dent->d_name); + int lenp = prefix.length(); + + if (dent->d_name[0] == '.') { + if (!g_show_dot_files) + return 0; + if (dent->d_name[1] == '\0') + return 0; + if ((dent->d_name[1] == '.') && (dent->d_name[2] == '\0')) + return 0; + } + if (dent->d_name[len - 1] == '~') + return 0; + if (lenp == 0) + return 1; + if (lenp > len) + return 0; + + if (strncmp(dent->d_name, prefix.c_str(), lenp) == 0) + return 1; + + return 0; +} + +int my_alphasort(const void* va, const void* vb) { + const struct dirent** a = (const struct dirent**)va; + const struct dirent** b = (const struct dirent**)vb; + + const char* s1 = (*a)->d_name; + const char* s2 = (*b)->d_name; + + int l1 = strlen(s1); + int l2 = strlen(s2); + int result = strcmp(s1, s2); + + if (result == 0) return 0; + + if (l1 < l2) { + int res2 = strncmp(s1, s2, l1); + if (res2 == 0) return -1; + } else { + int res2 = strncmp(s1, s2, l2); + if (res2 == 0) return 1; + } + + return result; +} + +static void +generate_execs() +{ + execs.clear(); + + for (StrSet::iterator i = path.begin(); i != path.end(); i++) { + struct dirent **eps; + int n = scandir(i->c_str(), &eps, select_executables_only, my_alphasort); + if (n >= 0) { + for (int j = 0; j < n; j++) { + execs.insert(eps[j]->d_name); + free(eps[j]); + } + free(eps); + } + } +} + +static int +generate_completion_from_execs(GtkCompletionLine *object) +{ + g_list_foreach(object->cmpl, (GFunc)g_string_free, NULL); + g_list_free(object->cmpl); + object->cmpl = NULL; + + for (StrSet::const_iterator i = execs.begin(); i != execs.end(); i++) { + GString *the_fucking_gstring = g_string_new(i->c_str()); + object->cmpl = g_list_append(object->cmpl, the_fucking_gstring); + } + + return 0; +} + +static string +get_common_part(const char *p1, const char *p2) +{ + string ret; + + while (*p1 == *p2 && *p1 != '\0' && *p2 != '\0') { + ret += *p1; + p1++; + p2++; + } + + return ret; +} + +static int +complete_common(GtkCompletionLine *object) +{ + GList *l; + GList *ls = object->cmpl; + vector words; + int pos = get_words(object, words); + words[pos] = ((GString*)ls->data)->str; + + ls = g_list_next(ls); + while (ls != NULL) { + words[pos] = get_common_part(words[pos].c_str(), + ((GString*)ls->data)->str); + ls = g_list_next(ls); + } + + set_words(object, words, pos); + + ls = object->cmpl; + l = ls; +/* + if (words[pos] == ((GString*)(l->data))->str) { + ls = g_list_remove_link(ls, l); + ls = g_list_append(ls, l->data); + g_list_free_1(l); + object->cmpl = ls; + } +*/ + return 0; +} + +static int +generate_dirlist(const char *what) +{ + char *str = strdup(what); + char *p = str + 1; + char *filename = str; + string dest("/"); + int n; + + while (*p != '\0') { + dest += *p; + if (*p == '/') { + DIR* dir = opendir(dest.c_str()); + if (!dir) + goto dirty; + closedir(dir); + filename = p; + } + ++p; + } + + *filename = '\0'; + filename++; + dest = str; + dest += '/'; + + dirlist.clear(); + struct dirent **eps; + prefix = filename; + n = scandir(dest.c_str(), &eps, select_executables_only, my_alphasort); + if (n >= 0) { + for (int j = 0; j < n; j++) { + { + string foo(dest); + foo += eps[j]->d_name; + struct stat filestatus; + stat(foo.c_str(), &filestatus); + if (S_ISDIR(filestatus.st_mode)) foo += '/'; + dirlist.insert(foo); + } + free(eps[j]); + } + free(eps); + } + + free(str); + return GEN_COMPLETION_OK; + + dirty: + free(str); + return GEN_CANT_COMPLETE; +} + +static int +generate_completion_from_dirlist(GtkCompletionLine *object) +{ + g_list_foreach(object->cmpl, (GFunc)g_string_free, NULL); + g_list_free(object->cmpl); + object->cmpl = NULL; + + for (StrSet::const_iterator i = dirlist.begin(); i != dirlist.end(); i++) { + GString *the_fucking_gstring = g_string_new(i->c_str()); + object->cmpl = g_list_append(object->cmpl, the_fucking_gstring); + } + + return 0; +} + +static int +parse_tilda(GtkCompletionLine *object) +{ + string text = gtk_entry_get_text(GTK_ENTRY(object)); + gint where = (gint)text.find("~"); + if (where != string::npos) { + if ((where > 0) && (text[where - 1] != ' ')) + return 0; + if (where < text.size() - 1 && text[where + 1] != '/') { + // FIXME: Parse another user's home + } else { + string home = g_get_home_dir(); + size_t i = home.length() - 1; + while ((i >= 0) && (home[i] == '/')) + home.erase(i--); + gtk_editable_insert_text(GTK_EDITABLE(object), home.c_str(), home.length(), &where); + gtk_editable_delete_text(GTK_EDITABLE(object), where, where + 1); + } + } + + return 0; +} + +static void +complete_from_list(GtkCompletionLine *object) +{ + parse_tilda(object); + vector words; + int pos = get_words(object, words); + + prefix = words[pos]; + + if (object->win_compl != NULL) { + object->where = (GList*)gtk_clist_get_row_data( + GTK_CLIST(object->list_compl), object->list_compl_items_where); + words[pos] = ((GString*)object->where->data)->str; + int current_pos = set_words(object, words, pos); + gtk_entry_select_region(GTK_ENTRY(object), + object->pos_in_text, current_pos); + int &item = object->list_compl_items_where; + gtk_clist_select_row(GTK_CLIST(object->list_compl), item, 0); + gtk_clist_moveto(GTK_CLIST(object->list_compl), item, 0, 0.5, 0.0); + } else { + words[pos] = ((GString*)object->where->data)->str; + object->pos_in_text = gtk_editable_get_position(GTK_EDITABLE(object)); + int current_pos = set_words(object, words, pos); + gtk_entry_select_region(GTK_ENTRY(object), + object->pos_in_text, current_pos); + object->where = g_list_next(object->where); + } +} + +static void +on_row_selected(GtkWidget *ls, gint row, gint col, GdkEvent *ev, gpointer data) +{ + GtkCompletionLine *cl = GTK_COMPLETION_LINE(data); + + cl->list_compl_items_where = row; + gtk_signal_handler_block(GTK_OBJECT(cl->list_compl), + on_row_selected_handler); + complete_from_list(cl); + gtk_signal_handler_unblock(GTK_OBJECT(cl->list_compl), + on_row_selected_handler); +} + +/* + +static void +select_appropiate(GtkCompletionLine *object) +{ + for (int i = 0; i < object->list_compl_nr_rows; ++i) { + char *text; + gtk_clist_get_text(GTK_CLIST(object->list_compl), i, 0, &text); + if (strncmp(prefix.c_str(), text, prefix.length())) { + gtk_signal_handler_block(GTK_OBJECT(object->list_compl), + on_row_selected_handler); + gtk_clist_select_row(GTK_CLIST(object->list_compl), i, 0); + object->list_compl_items_where = i; + gtk_signal_handler_unblock(GTK_OBJECT(object->list_compl), + on_row_selected_handler); + break; + } + } +} + +static void +get_prefix(GtkCompletionLine *object) +{ + parse_tilda(object); + vector words; + int pos = get_words(object, words); + prefix = words[pos]; +} + +*/ + +static int +complete_line(GtkCompletionLine *object) +{ + parse_tilda(object); + vector words; + int pos = get_words(object, words); + prefix = words[pos]; + + g_show_dot_files = object->show_dot_files; + if (prefix[0] != '/') { + if (object->where == NULL) { + generate_path(); + generate_execs(); + generate_completion_from_execs(object); + object->where = NULL; + } + } else if (object->where == NULL) { + generate_dirlist(prefix.c_str()); + generate_completion_from_dirlist(object); + object->where = NULL; + } + + if (object->cmpl != NULL) { + complete_common(object); + object->where = object->cmpl; + } + + // FUCK C! C++ Rules! + if (object->where != NULL) { + if (object->win_compl != NULL) { + int &item = object->list_compl_items_where; + ++item; + if (item >= object->list_compl_nr_rows) + item = object->list_compl_nr_rows - 1; + } + complete_from_list(object); + } else if (object->cmpl != NULL) { + complete_common(object); + object->where = object->cmpl; + } + + GList *ls = object->cmpl; + + if (g_list_length(ls) == 1) { + gtk_signal_emit_by_name(GTK_OBJECT(object), "unique"); + return GEN_COMPLETION_OK; + } else if (g_list_length(ls) == 0 || ls == NULL) { + gtk_signal_emit_by_name(GTK_OBJECT(object), "incomplete"); + return GEN_CANT_COMPLETE; + } else if (g_list_length(ls) > 1) { + gtk_signal_emit_by_name(GTK_OBJECT(object), "notunique"); + + vector words; + int pos = get_words(object, words); + + if (words[pos] == ((GString*)ls->data)->str) { + + if (object->win_compl == NULL) { + object->win_compl = gtk_window_new(GTK_WINDOW_POPUP); + gtk_widget_set_name(object->win_compl, "Msh_Run_Window"); + + /*gtk_window_set_position(GTK_WINDOW(object->win_compl), + GTK_WIN_POS_MOUSE);*/ + + gtk_window_set_policy(GTK_WINDOW(object->win_compl), + FALSE, FALSE, TRUE); + + object->list_compl = gtk_clist_new(1); + + on_row_selected_handler = + gtk_signal_connect(GTK_OBJECT(object->list_compl), "select_row", + GTK_SIGNAL_FUNC(on_row_selected), object); + + gtk_signal_handler_block(GTK_OBJECT(object->list_compl), + on_row_selected_handler); + + GList *p = ls; + object->list_compl_nr_rows = 0; + while (p) { + char *tmp[2]; + tmp[0] = ((GString*)p->data)->str; + tmp[1] = NULL; + int row = gtk_clist_append(GTK_CLIST(object->list_compl), tmp); + gtk_clist_set_row_data(GTK_CLIST(object->list_compl), row, p); + object->list_compl_nr_rows++; + p = g_list_next(p); + } + + GtkWidget *scroll = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scroll), GTK_SHADOW_OUT); + gtk_widget_show(scroll); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (scroll), + GTK_POLICY_NEVER, + GTK_POLICY_AUTOMATIC); + + gtk_container_set_border_width(GTK_CONTAINER(object->list_compl), 2); + gtk_container_add(GTK_CONTAINER (scroll), object->list_compl); + + object->list_compl_items_where = 0; + + gtk_widget_show(object->list_compl); + int w = gtk_clist_optimal_column_width(GTK_CLIST(object->list_compl), 0); + gtk_widget_set_usize(scroll, w + 40, 150); + + gtk_container_add(GTK_CONTAINER(object->win_compl), scroll); + + GdkWindow *top = gtk_widget_get_parent_window(GTK_WIDGET(object)); + int x, y; + gdk_window_get_position(top, &x, &y); + x += GTK_WIDGET(object)->allocation.x; + y += GTK_WIDGET(object)->allocation.y + + GTK_WIDGET(object)->allocation.height; + + // gtk_widget_popup(object->win_compl, x, y); + gtk_window_move(GTK_WINDOW(object->win_compl), x, y); + gtk_widget_show(object->win_compl); + + gtk_clist_select_row(GTK_CLIST(object->list_compl), + object->list_compl_items_where, 0); + + gtk_signal_handler_unblock(GTK_OBJECT(object->list_compl), + on_row_selected_handler); + } + + return GEN_COMPLETION_OK; + } + return GEN_NOT_UNIQUE; + } + + return GEN_COMPLETION_OK; +} + +GtkWidget * +gtk_completion_line_new() +{ + return GTK_WIDGET(gtk_type_new(gtk_completion_line_get_type())); +} + +static void +up_history(GtkCompletionLine* cl) +{ + cl->hist->set_default(gtk_entry_get_text(GTK_ENTRY(cl))); + gtk_entry_set_text(GTK_ENTRY(cl), + g_locale_to_utf8 (cl->hist->prev(), -1, NULL, NULL, NULL)); +} + +static void +down_history(GtkCompletionLine* cl) +{ + cl->hist->set_default(gtk_entry_get_text(GTK_ENTRY(cl))); + gtk_entry_set_text(GTK_ENTRY(cl), + g_locale_to_utf8 (cl->hist->next(), -1, NULL, NULL, NULL)); +} + +static int +search_back_history(GtkCompletionLine* cl, bool avance, bool begin) +{ + if (!cl->hist_word->empty()) { + const char * histext; + if (avance) { + histext = cl->hist->prev_to_first(); + if (histext == NULL) { + gtk_signal_emit_by_name(GTK_OBJECT(cl), "search_not_found"); + return 0; + } + } else { + histext = gtk_entry_get_text(GTK_ENTRY(cl)); + } + while (true) { + string s = histext; + string::size_type i; + i = s.find(*cl->hist_word); + if (i != string::npos && !(begin && i != 0)) { + const char *tmp = gtk_entry_get_text(GTK_ENTRY(cl)); + if (!(avance && strcmp(tmp, histext) == 0)) { + gtk_entry_set_text(GTK_ENTRY(cl), + g_locale_to_utf8 (histext, -1, NULL, NULL, NULL)); + gtk_entry_select_region(GTK_ENTRY(cl), + i, i + cl->hist_word->length()); + gtk_signal_emit_by_name(GTK_OBJECT(cl), "search_letter"); + return 1; + } + } + histext = cl->hist->prev_to_first(); + if (histext == NULL) { + gtk_signal_emit_by_name(GTK_OBJECT(cl), "search_not_found"); + break; + } + } + } else { + gtk_entry_select_region(GTK_ENTRY(cl), 0, 0); + gtk_signal_emit_by_name(GTK_OBJECT(cl), "search_letter"); + } + + return 0; +} + +static int +search_forward_history(GtkCompletionLine* cl, bool avance, bool begin) +{ + if (!cl->hist_word->empty()) { + const char * histext; + if (avance) { + histext = cl->hist->next_to_last(); + if (histext == NULL) { + gtk_signal_emit_by_name(GTK_OBJECT(cl), "search_not_found"); + return 0; + } + } else { + histext = gtk_entry_get_text(GTK_ENTRY(cl)); + } + while (true) { + string s = histext; + string::size_type i; + i = s.find(*cl->hist_word); + if (i != string::npos && !(begin && i != 0)) { + const char *tmp = gtk_entry_get_text(GTK_ENTRY(cl)); + if (!(avance && strcmp(tmp, histext) == 0)) { + gtk_entry_set_text(GTK_ENTRY(cl), + g_locale_to_utf8 (histext, -1, NULL, NULL, NULL)); + gtk_entry_select_region(GTK_ENTRY(cl), + i, i + cl->hist_word->length()); + gtk_signal_emit_by_name(GTK_OBJECT(cl), "search_letter"); + return 1; + } + } + histext = cl->hist->next_to_last(); + if (histext == NULL) { + gtk_signal_emit_by_name(GTK_OBJECT(cl), "search_not_found"); + break; + } + } + } else { + gtk_entry_select_region(GTK_ENTRY(cl), 0, 0); + gtk_signal_emit_by_name(GTK_OBJECT(cl), "search_letter"); + } + + return 0; +} + +static int +search_history(GtkCompletionLine* cl, bool avance, bool begin) +{ + switch (cl->hist_search_mode) { + case GCL_SEARCH_REW: + case GCL_SEARCH_BEG: + return search_back_history(cl, avance, begin); + + case GCL_SEARCH_FWD: + return search_forward_history(cl, avance, begin); + + default: + return -1; + } +} + +/* +static int +inverse_search_history(GtkCompletionLine* cl, bool avance, bool begin) +{ + switch (cl->hist_search_mode) { + case GCL_SEARCH_FWD: + return search_back_history(cl, avance, begin); + + case GCL_SEARCH_REW: + case GCL_SEARCH_BEG: + return search_forward_history(cl, avance, begin); + + default: + return -1; + } +} +*/ + +static void +search_off(GtkCompletionLine* cl) +{ + int pos = gtk_editable_get_position(GTK_EDITABLE(cl)); + gtk_entry_select_region(GTK_ENTRY(cl), pos, pos); + cl->hist_search_mode = GCL_SEARCH_OFF; + gtk_signal_emit_by_name(GTK_OBJECT(cl), "search_mode"); + cl->hist->reset_position(); +} + +#define STOP_PRESS \ + (gtk_signal_emit_stop_by_name(GTK_OBJECT(cl), "key_press_event")) +#define MODE_BEG \ + (cl->hist_search_mode == GCL_SEARCH_BEG) +#define MODE_REW \ + (cl->hist_search_mode == GCL_SEARCH_REW) +#define MODE_FWD \ + (cl->hist_search_mode == GCL_SEARCH_FWD) +#define MODE_SRC \ + (cl->hist_search_mode != GCL_SEARCH_OFF) + +static gint tab_pressed(GtkCompletionLine* cl) +{ + if (MODE_SRC) + search_off(cl); + complete_line(cl); + return FALSE; +} + +static void +clear_selection(GtkCompletionLine* cl) +{ + int pos = gtk_editable_get_position(GTK_EDITABLE(cl)); + gtk_editable_select_region(GTK_EDITABLE(cl), pos, pos); +} + +static gboolean +on_key_press(GtkCompletionLine *cl, GdkEventKey *event, gpointer data) +{ + static gint tt_id = -1; + + switch (event->type) { + + case GDK_KEY_PRESS: + + + switch (event->keyval) { + + case GDK_Control_R: + case GDK_Control_L: + case GDK_Shift_R: + case GDK_Shift_L: + case GDK_Alt_R: + case GDK_Alt_L: + break; + + case GDK_Tab: + if (tt_id != -1) { + gtk_timeout_remove(tt_id); + tt_id = -1; + } + tab_pressed(cl); + STOP_PRESS; + return TRUE; + + case GDK_Up: + if (cl->win_compl != NULL) { + int &item = cl->list_compl_items_where; + item--; + if (item < 0) { + item = 0; + } else { + complete_from_list(cl); + } + } else { + up_history(cl); + } + if (MODE_SRC) { + search_off(cl); + } + STOP_PRESS; + return TRUE; + + case GDK_space: + { + cl->first_key = 0; + bool search = MODE_SRC; + if (search) + search_off(cl); + if (cl->win_compl != NULL) { + gtk_widget_destroy(cl->win_compl); + cl->win_compl = NULL; + if (!search) { + int pos = gtk_editable_get_position(GTK_EDITABLE(cl)); + gtk_entry_select_region(GTK_ENTRY(cl), pos, pos); + } + } + } + return FALSE; + + case GDK_Down: + if (cl->win_compl != NULL) { + int &item = cl->list_compl_items_where; + item++; + if (item >= cl->list_compl_nr_rows) { + item = cl->list_compl_nr_rows - 1; + } else { + complete_from_list(cl); + } + } else { + down_history(cl); + } + if (MODE_SRC) { + search_off(cl); + } + STOP_PRESS; + return TRUE; + + case GDK_Return: + if (cl->win_compl != NULL) { + gtk_widget_destroy(cl->win_compl); + cl->win_compl = NULL; + } + if (event->state & GDK_CONTROL_MASK) { + gtk_signal_emit_by_name(GTK_OBJECT(cl), "runwithterm"); + } else { + gtk_signal_emit_by_name(GTK_OBJECT(cl), "activate"); + } + STOP_PRESS; + return TRUE; + + case GDK_exclam: + if (!MODE_BEG) { + if (!MODE_SRC) + gtk_editable_delete_selection(GTK_EDITABLE(cl)); + const char *tmp = gtk_entry_get_text(GTK_ENTRY(cl)); + if (!(*tmp == '\0' || cl->first_key)) + goto ordinary; + cl->hist_search_mode = GCL_SEARCH_BEG; + cl->hist_word->clear(); + gtk_signal_emit_by_name(GTK_OBJECT(cl), "search_mode"); + STOP_PRESS; + return true; + } else goto ordinary; + + case GDK_R: + case GDK_r: + if (event->state & GDK_CONTROL_MASK) { + if (MODE_SRC) { + search_back_history(cl, true, MODE_BEG); + } else { + cl->hist_search_mode = GCL_SEARCH_REW; + cl->hist_word->clear(); + cl->hist->reset_position(); + gtk_signal_emit_by_name(GTK_OBJECT(cl), "search_mode"); + } + STOP_PRESS; + return TRUE; + } else goto ordinary; + + case GDK_S: + case GDK_s: + if (event->state & GDK_CONTROL_MASK) { + if (MODE_SRC) { + search_forward_history(cl, true, MODE_BEG); + } else { + cl->hist_search_mode = GCL_SEARCH_FWD; + cl->hist_word->clear(); + cl->hist->reset_position(); + gtk_signal_emit_by_name(GTK_OBJECT(cl), "search_mode"); + } + STOP_PRESS; + return TRUE; + } else goto ordinary; + + case GDK_BackSpace: + if (MODE_SRC) { + if (!cl->hist_word->empty()) { + cl->hist_word->erase(cl->hist_word->length() - 1); + gtk_signal_emit_by_name(GTK_OBJECT(cl), "search_letter"); + } + STOP_PRESS; + return TRUE; + } + return FALSE; + + case GDK_Home: + case GDK_End: + clear_selection(cl); + goto ordinary; + + case GDK_Escape: + if (MODE_SRC) { + search_off(cl); + } else if (cl->win_compl != NULL) { + gtk_widget_destroy(cl->win_compl); + cl->win_compl = NULL; + } else { + // user cancelled + gtk_signal_emit_by_name(GTK_OBJECT(cl), "cancel"); + } + STOP_PRESS; + return TRUE; + + case GDK_G: + case GDK_g: + if (event->state & GDK_CONTROL_MASK) { + search_off(cl); + if (MODE_SRC) + STOP_PRESS; + return TRUE; + } else goto ordinary; + + case GDK_E: + case GDK_e: + if (event->state & GDK_CONTROL_MASK) { + search_off(cl); + if (MODE_SRC) + clear_selection(cl); + } + goto ordinary; + + ordinary: + default: + cl->first_key = 0; + if (cl->win_compl != NULL) { + gtk_widget_destroy(cl->win_compl); + cl->win_compl = NULL; + } + cl->where = NULL; + if (MODE_SRC) { + if (event->length > 0) { + *cl->hist_word += event->string; + if (search_history(cl, false, MODE_BEG) <= 0) + cl->hist_word->erase(cl->hist_word->length() - 1); + STOP_PRESS; + return TRUE; + } else + search_off(cl); + } + if (cl->tabtimeout != 0) { + if (tt_id != -1) { + gtk_timeout_remove(tt_id); + tt_id = -1; + } + if (::isprint(*event->string)) + tt_id = gtk_timeout_add(cl->tabtimeout, + GtkFunction(tab_pressed), cl); + } + break; + } + break; + + default: + break; + } + return FALSE; +} + +#undef STOP_PRESS +#undef MODE_BEG +#undef MODE_REW +#undef MODE_FWD +#undef MODE_SRC + +// Local Variables: *** +// mode: c++ *** +// c-basic-offset: 2 *** +// End: *** diff --git a/src/gtkcompletionline.h b/src/gtkcompletionline.h new file mode 100644 index 0000000..5e14cd7 --- /dev/null +++ b/src/gtkcompletionline.h @@ -0,0 +1,90 @@ +/***************************************************************************** + * $Id: gtkcompletionline.h,v 1.12 2003/11/16 10:43:32 andreas99 Exp $ + * Copyright (C) 2000, Mishoo + * Author: Mihai Bazon Email: mishoo@fenrir.infoiasi.ro + * + * Distributed under the terms of the GNU General Public License. You are + * free to use/modify/distribute this program as long as you comply to the + * terms of the GNU General Public License, version 2 or above, at your + * option, and provided that this copyright notice remains intact. + *****************************************************************************/ + + +#ifndef __GTKCOMPLETIONLINE_H__ +#define __GTKCOMPLETIONLINE_H__ + +#include + +#include + +#include "history.h" + +extern "C++" { + +#define GTK_COMPLETION_LINE(obj) \ + GTK_CHECK_CAST(obj, gtk_completion_line_get_type(), GtkCompletionLine) +#define GTK_COMPLETION_LINE_CLASS(klass) \ + GTK_CHECK_CLASS_CAST(klass, gtk_completion_line_get_type(), GtkCompletionLineClass) +#define IS_GTK_COMPLETION_LINE(obj) \ + GTK_CHECK_TYPE(obj, gtk_completion_line_get_type()) + + typedef struct _GtkCompletionLine GtkCompletionLine; + typedef struct _GtkCompletionLineClass GtkCompletionLineClass; + + enum GCL_SEARCH_MODE + { + GCL_SEARCH_OFF = 0, + GCL_SEARCH_REW = 1, + GCL_SEARCH_FWD = 2, + GCL_SEARCH_BEG = 3 + }; + + struct _GtkCompletionLine + { + GtkEntry parent; + GtkWidget *win_compl; + GtkWidget *list_compl; + int list_compl_items_where; + int list_compl_nr_rows; + int pos_in_text; + + GList *cmpl; + GList *where; + + HistoryFile *hist; + GCL_SEARCH_MODE hist_search_mode; + std::string *hist_word; + + int first_key; + int tabtimeout; + int show_dot_files; + }; + + struct _GtkCompletionLineClass + { + GtkEntryClass parent_class; + /* add your CLASS members here */ + + void (* unique)(GtkCompletionLine *cl); + void (* notunique)(GtkCompletionLine *cl); + void (* incomplete)(GtkCompletionLine *cl); + void (* runwithterm)(GtkCompletionLine *cl); + void (* search_mode)(GtkCompletionLine *cl); + void (* search_letter)(GtkCompletionLine *cl); + void (* search_not_found)(GtkCompletionLine *cl); + void (* ext_handler)(GtkCompletionLine *cl); + void (* cancel)(GtkCompletionLine *cl); + }; + + guint gtk_completion_line_get_type(void); + GtkWidget *gtk_completion_line_new(); + + void gtk_completion_line_last_history_item(GtkCompletionLine*); +} + +#endif /* __GTKCOMPLETIONLINE_H__ */ + +// Local Variables: *** +// mode: c++ *** +// c-basic-offset: 2 *** +// End: *** diff --git a/src/history.cc b/src/history.cc new file mode 100644 index 0000000..61afba0 --- /dev/null +++ b/src/history.cc @@ -0,0 +1,167 @@ +/***************************************************************************** + * $Id: history.cc,v 1.10 2002/08/17 13:19:31 mishoo Exp $ + * Copyright (C) 2000, Mishoo + * Author: Mihai Bazon Email: mishoo@fenrir.infoiasi.ro + * + * Distributed under the terms of the GNU General Public License. You are + * free to use/modify/distribute this program as long as you comply to the + * terms of the GNU General Public License, version 2 or above, at your + * option, and provided that this copyright notice remains intact. + *****************************************************************************/ + + +#include +#include +#include +#include +#include +#include +using namespace std; + +#include "history.h" +#include "prefs.h" + +HistoryFile::HistoryFile() +{ + m_file_entries = 0; + m_filename = g_get_home_dir(); + m_filename += "/.gmrun_history"; + m_current = 0; + m_default_set = false; + read_the_file(); +} + +HistoryFile::~HistoryFile() +{} + +void +HistoryFile::read_the_file() +{ + const char *filename = m_filename.c_str(); + ifstream f(filename); + if (!f) return; + + while (!f.eof()) { + char line_text[256]; + string line_str; + + f.getline(line_text, sizeof(line_text)); + if (*line_text) { + line_str = line_text; + history.push_back(line_str); + } + } + + m_file_entries = history.size(); + m_current = m_file_entries; +} + +void +HistoryFile::sync_the_file() +{ + const char *filename = m_filename.c_str(); + + int HIST_MAX_SIZE; + + if (!configuration.get_int("History", HIST_MAX_SIZE)) + HIST_MAX_SIZE = 20; + + ofstream f(filename, ios::out); + + int start = 0; + if (history.size() > (size_t)HIST_MAX_SIZE) + start = history.size() - HIST_MAX_SIZE; + + for (size_t i = start; i < history.size(); i++) + if (history[i].length() != 0) + f << history[i] << endl; + + f.flush(); +} + +void +HistoryFile::append(const char *entry) +{ + std::string ent = std::string(entry); + if (!history.empty()) { + StrArray::reverse_iterator i; +#ifdef DEBUG + for_each(history.begin(), history.end(), DumpString(cerr)); +#endif + i = find(history.rbegin(), history.rend(), ent); + if (i != history.rend()) { +#ifdef DEBUG + cerr << "erasing "<< ent << endl; +#endif + history.erase(remove(history.begin(), history.end(), ent)); + } + } + history.push_back(ent); +} + +void +HistoryFile::set_default(const char *defstr) +{ + if (!m_default_set) { + m_default = defstr; + m_default_set = true; + } +} + +const char * +HistoryFile::operator [] (size_t index) +{ + if (index < 0 || index >= history.size()) { + return m_default.c_str(); + } + + return history[index].c_str(); +} + +const char * +HistoryFile::prev() +{ + const char *ret = (*this)[--m_current]; + if (m_current < 0) m_current = history.size(); + return ret; +} + +const char * +HistoryFile::next() +{ + const char *ret = (*this)[++m_current]; + if (m_current >= history.size()) m_current = -1; + return ret; +} + +const char * +HistoryFile::prev_to_first() +{ + if (m_current > 0) { + return (*this)[--m_current]; + } else { + return NULL; + } +} + +const char * +HistoryFile::next_to_last() +{ + if (m_current < history.size()) { + return (*this)[++m_current]; + } else { + return NULL; + } +} + +void +HistoryFile::clear_default() +{ + m_default_set = false; +} + +void +HistoryFile::reset_position() +{ + m_current = m_file_entries; +} diff --git a/src/history.h b/src/history.h new file mode 100644 index 0000000..9f1d4b9 --- /dev/null +++ b/src/history.h @@ -0,0 +1,71 @@ +/***************************************************************************** + * $Id: history.h,v 1.11 2002/08/17 13:19:31 mishoo Exp $ + * Copyright (C) 2000, Mishoo + * Author: Mihai Bazon Email: mishoo@fenrir.infoiasi.ro + * + * Distributed under the terms of the GNU General Public License. You are + * free to use/modify/distribute this program as long as you comply to the + * terms of the GNU General Public License, version 2 or above, at your + * option, and provided that this copyright notice remains intact. + *****************************************************************************/ + + +#ifndef __HISTORY_H__ +#define __HISTORY_H__ + +#include +#include +using namespace std; + +class HistoryFile +{ + protected: + int m_file_entries; + string m_filename; + string m_default; + bool m_default_set; + int m_current; + + typedef vector StrArray; + StrArray history; + + public: + HistoryFile(); + ~HistoryFile(); + + void append(const char *entry); + void set_default(const char *defstr); + void clear_default(); + + void reset_position(); + + const char * operator [] (size_t index); + + const char * prev(); + const char * next(); + + const char * prev_to_first(); + const char * next_to_last(); + + void sync_the_file(); + + inline const char* last_item() { + return history.empty() ? 0 : history.back().c_str(); + } + + inline const char* first_item() { + return history.empty() ? 0 : history.front().c_str(); + } + + protected: + void read_the_file(); + private: + struct DumpString { + DumpString(std::ostream& o) : _out(o) {} + void operator()(std::string& str) { _out << str << endl; } + private: + std::ostream& _out; + }; +}; + +#endif // __HISTORY_H__ diff --git a/src/main.cc b/src/main.cc new file mode 100644 index 0000000..dc4b034 --- /dev/null +++ b/src/main.cc @@ -0,0 +1,669 @@ +/***************************************************************************** + * $Id: main.cc,v 1.26 2003/11/16 10:55:07 andreas99 Exp $ + * Copyright (C) 2000, Mishoo + * Author: Mihai Bazon Email: mishoo@fenrir.infoiasi.ro + * + * Distributed under the terms of the GNU General Public License. You are + * free to use/modify/distribute this program as long as you comply to the + * terms of the GNU General Public License, version 2 or above, at your + * option, and provided that this copyright notice remains intact. + *****************************************************************************/ + + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +#ifdef MTRACE +#include +#endif + +#include +#include + +#include "gtkcompletionline.h" +#include "prefs.h" + +// defined in gtkcompletionline.cc +int get_words(GtkCompletionLine *object, vector& words); +string quote_string(const string& str); + +struct gigi +{ + GtkWidget *w1; + GtkWidget *w2; +}; + +/// BEGIN: TIMEOUT MANAGEMENT + +static gint search_off_timeout(struct gigi *g); + +static guint g_search_off_timeout_id = 0; + +static void remove_search_off_timeout() +{ + if (g_search_off_timeout_id) { + gtk_timeout_remove(g_search_off_timeout_id); + g_search_off_timeout_id = 0; + } +} + +static void add_search_off_timeout(guint32 timeout, struct gigi *g, GtkFunction func = 0) +{ + remove_search_off_timeout(); + if (!func) + func = GtkFunction(search_off_timeout); + g_search_off_timeout_id = gtk_timeout_add(timeout, func, g); +} + +/// END: TIMEOUT MANAGEMENT + +GtkStyle* style_normal(GtkWidget *w) +{ + static GtkStyle *style; + + if (!style) { + style = gtk_style_copy(gtk_widget_get_style(w)); + style->fg[GTK_STATE_NORMAL] = (GdkColor){0, 0x0000, 0x0000, 0x0000}; + gtk_style_ref(style); + } + return style; +} + +GtkStyle* style_notfound(GtkWidget *w) +{ + static GtkStyle *style; + + if (!style) { + style = gtk_style_copy(gtk_widget_get_style(w)); + style->fg[GTK_STATE_NORMAL] = (GdkColor){0, 0xFFFF, 0x0000, 0x0000}; + gtk_style_ref(style); + } + return style; +} + +GtkStyle* style_notunique(GtkWidget *w) +{ + static GtkStyle *style; + + if (!style) { + style = gtk_style_copy(gtk_widget_get_style(w)); + style->fg[GTK_STATE_NORMAL] = (GdkColor){0, 0x0000, 0x0000, 0xFFFF}; + gtk_style_ref(style); + } + return style; +} + +GtkStyle* style_unique(GtkWidget *w) +{ + static GtkStyle *style; + + if (!style) { + style = gtk_style_copy(gtk_widget_get_style(w)); + style->fg[GTK_STATE_NORMAL] = (GdkColor){0, 0x0000, 0xFFFF, 0x0000}; + gtk_style_ref(style); + } + return style; +} + +static void +run_with_system(const std::string& command, struct gigi* g) +{ + string cmd(command); + cmd += '&'; + int ret = system(cmd.c_str()); +#ifdef DEBUG + cerr << "System exit code: " << ret << endl; +#endif + if (ret != -1) + gtk_main_quit(); + else { + string error("ERROR: "); + error += strerror(errno); +#ifdef DEBUG + cerr << error << endl; +#endif + gtk_label_set_text(GTK_LABEL(g->w1), error.c_str()); + gtk_widget_set_style(g->w1, style_notfound(g->w1)); + add_search_off_timeout(2000, g); + } +} + +#ifdef USE_SYSTEM + +// this version uses the "system" libc function to execute commands. +static void +run_the_command(const std::string& command, struct gigi* g) +{ + run_with_system(command, g); +} + +#else + +// a more elaborate function to avoid system.. though I think that most will +// prefer the above one. I don't even remember why I coded this... but let it +// be there. +static void +run_the_command(const std::string& command, struct gigi* g) +{ + string prog; + std::vector argv; + + string cmd = command + ' '; + istringstream iss(cmd); +#ifdef DEBUG + cerr << cmd << endl; +#endif + char what_quote = '"'; + enum TYPE_CONTEXT { + CT_NORMAL = 0, + CT_QUOTE, + CT_ESCAPE + }; + TYPE_CONTEXT context = CT_NORMAL; + TYPE_CONTEXT save_context = CT_NORMAL; + string tmp; + char c; + + while (!iss.eof()) { + c = (char)iss.get(); + if (iss.eof()) { + break; + } + + switch (c) { + case '\\': + if (context != CT_ESCAPE) { + save_context = context; + context = CT_ESCAPE; + } else { + goto ordinary; + } + break; + + case '\'': + case '"': + if (context == CT_ESCAPE) { + goto ordinary; + } else { + if (context == CT_QUOTE) { + if (what_quote == c) { + context = CT_NORMAL; + } else { + goto ordinary; + } + } else { + context = CT_QUOTE; + what_quote = c; + } + } + break; + + case ' ': + if (context == CT_ESCAPE || context == CT_QUOTE) { + goto ordinary; + } else if (!tmp.empty()) { + if (prog.empty()) { + prog = tmp; + } + char *p = (char*)malloc(tmp.length() + 1); + memcpy(p, tmp.c_str(), tmp.length() + 1); + argv.push_back(p); + tmp.clear(); + } + break; + + ordinary: + default: + if (context == CT_ESCAPE) { + context = save_context; + tmp += c; + } else if (context == CT_QUOTE) { + tmp += c; + } else if (c != ' ') { + tmp += c; + } + } + } + argv.push_back(NULL); + +#ifdef DEBUG + for (vector::iterator i = argv.begin(); i != argv.end(); ++i) { + if (*i) { + cerr << "'" << *i << "'" << endl; + } + } +#endif + + execvp(prog.c_str(), (char**)&(*argv.begin())); + string error("ERROR: "); + error += strerror(errno); +#ifdef DEBUG + cerr << error << endl; +#endif + + gtk_label_set_text(GTK_LABEL(g->w1), error.c_str()); + gtk_widget_set_style(g->w1, style_notfound(g->w1)); + add_search_off_timeout(2000, g); +} +#endif + +static void +on_ext_handler(GtkCompletionLine *cl, const char* ext, struct gigi* g) +{ + string cmd; + if (ext && configuration.get_ext_handler(ext, cmd)) { + string str("Handler: "); + size_t pos = cmd.find_first_of(" \t"); + if (pos == string::npos) + str += cmd; + else + str += cmd.substr(0, pos); + gtk_label_set_text(GTK_LABEL(g->w2), str.c_str()); + gtk_widget_show(g->w2); + // gtk_timeout_add(1000, GtkFunction(search_off_timeout), g); + } else { + search_off_timeout(g); + } +} + +static void +on_compline_runwithterm(GtkCompletionLine *cl, struct gigi* g) +{ + string command(g_locale_from_utf8 (gtk_entry_get_text(GTK_ENTRY(cl)), + -1, + NULL, + NULL, + NULL)); + string tmp; + string term; + + string::size_type i; + i = command.find_first_not_of(" \t"); + + if (i != string::npos) { + if (!configuration.get_string("TermExec", term)) { + term = "xterm -e"; + } + tmp = term; + tmp += " '"; + tmp += command + "'"; + } else { + if (!configuration.get_string("Terminal", term)) { + tmp = "xterm"; + } else { + tmp = term; + } + } + +#ifdef DEBUG + cerr << tmp << endl; +#endif + + cl->hist->append(command.c_str()); + cl->hist->sync_the_file(); + run_with_system(tmp.c_str(), g); +} + +static gint +search_off_timeout(struct gigi *g) +{ + gtk_label_set_text(GTK_LABEL(g->w1), "Run program:"); + gtk_widget_set_style(g->w1, style_normal(g->w1)); + gtk_widget_hide(g->w2); + return FALSE; +} + +static void +on_compline_unique(GtkCompletionLine *cl, struct gigi *g) +{ + gtk_label_set_text(GTK_LABEL(g->w1), "unique"); + gtk_widget_set_style(g->w1, style_unique(g->w1)); + add_search_off_timeout(1000, g); +} + +static void +on_compline_notunique(GtkCompletionLine *cl, struct gigi *g) +{ + gtk_label_set_text(GTK_LABEL(g->w1), "not unique"); + gtk_widget_set_style(g->w1, style_notunique(g->w1)); + add_search_off_timeout(1000, g); +} + +static void +on_compline_incomplete(GtkCompletionLine *cl, struct gigi *g) +{ + gtk_label_set_text(GTK_LABEL(g->w1), "not found"); + gtk_widget_set_style(g->w1, style_notfound(g->w1)); + add_search_off_timeout(1000, g); +} + +static void +on_search_mode(GtkCompletionLine *cl, struct gigi *g) +{ + if (cl->hist_search_mode != GCL_SEARCH_OFF) { + gtk_widget_show(g->w2); + gtk_label_set_text(GTK_LABEL(g->w1), "Search:"); + gtk_label_set_text(GTK_LABEL(g->w2), cl->hist_word->c_str()); + } else { + gtk_widget_hide(g->w2); + gtk_label_set_text(GTK_LABEL(g->w1), "Search OFF"); + add_search_off_timeout(1000, g); + } +} + +static void +on_search_letter(GtkCompletionLine *cl, GtkWidget *label) +{ + gtk_label_set_text(GTK_LABEL(label), cl->hist_word->c_str()); +} + +static gint +search_fail_timeout(struct gigi *g) +{ + gtk_label_set_text(GTK_LABEL(g->w1), "Search:"); + gtk_widget_set_style(g->w2, style_notunique(g->w2)); + + return FALSE; +} + +static void +on_search_not_found(GtkCompletionLine *cl, struct gigi *g) +{ + gtk_label_set_text(GTK_LABEL(g->w1), "Not Found!"); + gtk_widget_set_style(g->w2, style_notfound(g->w2)); + add_search_off_timeout(1000, g, GtkFunction(search_fail_timeout)); +} + +static bool +url_check(GtkCompletionLine *cl, struct gigi *g) +{ + string text(g_locale_from_utf8 (gtk_entry_get_text(GTK_ENTRY(cl)), + -1, + NULL, + NULL, + NULL)); + + string::size_type i; + string::size_type sp; + + sp = text.find_first_not_of(" \t"); + if (sp == string::npos) return true; + text = text.substr(sp); + + sp = text.find_first_of(" \t"); + i = text.find(":"); + + if (i != string::npos && i < sp) { + // URL entered... + string url(text.substr(i + 1)); + string url_type(text.substr(0, i)); + string url_handler; + + if (configuration.get_string(string("URL_") + url_type, url_handler)) { + string::size_type j = 0; + + do { + j = url_handler.find("%s", j); + if (j != string::npos) { + url_handler.replace(j, 2, url); + } + } while (j != string::npos); + + j = 0; + do { + j = url_handler.find("%u", j); + if (j != string::npos) { + url_handler.replace(j, 2, text); + } + } while (j != string::npos); + + cl->hist->append(text.c_str()); + cl->hist->sync_the_file(); + run_the_command(url_handler.c_str(), g); + return true; + } else { + gtk_label_set_text(GTK_LABEL(g->w1), + (string("No URL handler for [") + + url_type + "]").c_str()); + gtk_widget_set_style(g->w1, style_notfound(g->w1)); + add_search_off_timeout(1000, g); + return true; + } + } + + return false; +} + +static bool +ext_check(GtkCompletionLine *cl, struct gigi *g) +{ + vector words; + get_words(cl, words); + vector::const_iterator + i = words.begin(), + i_end = words.end(); + + while (i != i_end) { + const string& w = quote_string(*i++); + if (w[0] == '/') { + // absolute path, check for extension + size_t pos = w.rfind('.'); + if (pos != string::npos) { + // we have extension + string ext = w.substr(pos + 1); + string ext_handler; + if (configuration.get_ext_handler(ext, ext_handler)) { + // we have the handler + pos = ext_handler.find("%s"); + if (pos != string::npos) + ext_handler.replace(pos, 2, w); + cl->hist->append(w.c_str()); + cl->hist->sync_the_file(); + run_the_command(ext_handler.c_str(), g); + return true; + } + } + } + // FIXME: for now we check only one entry + break; + } + + return false; +} + +static void +on_compline_activated(GtkCompletionLine *cl, struct gigi *g) +{ + if (url_check(cl, g)) + return; + if (ext_check(cl, g)) + return; + + string command = g_locale_from_utf8 (gtk_entry_get_text(GTK_ENTRY(cl)), + -1, + NULL, + NULL, + NULL); + + string::size_type i; + i = command.find_first_not_of(" \t"); + + if (i != string::npos) { + string::size_type j = command.find_first_of(" \t", i); + string progname = command.substr(i, j - i); + list term_progs; + if (configuration.get_string_list("AlwaysInTerm", term_progs)) { +#ifdef DEBUG + cerr << "---" << std::endl; + std::copy(term_progs.begin(), term_progs.end(), + std::ostream_iterator(cerr, "\n")); + cerr << "---" << std::endl; +#endif + list::const_iterator w = + std::find(term_progs.begin(), term_progs.end(), progname); + if (w != term_progs.end()) { + on_compline_runwithterm(cl, g); + return; + } + } + cl->hist->append(command.c_str()); + cl->hist->sync_the_file(); + run_the_command(command, g); + } +} + +int main(int argc, char **argv) +{ + GtkWidget *win; + GtkWidget *compline; + GtkWidget *label_search; + struct gigi g; + +#ifdef MTRACE + mtrace(); +#endif + + gtk_init(&argc, &argv); + + win = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_widget_realize(win); + gdk_window_set_decorations(win->window, GDK_DECOR_BORDER); + gtk_widget_set_name(win, "Msh_Run_Window"); + gtk_window_set_title(GTK_WINDOW(win), "Execute program feat. completion"); + gtk_window_set_policy(GTK_WINDOW(win), FALSE, FALSE, TRUE); + // gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER); + gtk_container_set_border_width(GTK_CONTAINER(win), 4); + gtk_signal_connect(GTK_OBJECT(win), "destroy", + GTK_SIGNAL_FUNC(gtk_main_quit), NULL); + + GtkWidget *hbox = gtk_vbox_new(FALSE, 2); + gtk_widget_show(hbox); + gtk_container_add(GTK_CONTAINER(win), hbox); + + GtkWidget *hhbox = gtk_hbox_new(FALSE, 2); + gtk_widget_show(hhbox); + gtk_box_pack_start(GTK_BOX(hbox), hhbox, FALSE, FALSE, 0); + + GtkWidget *label = gtk_label_new("Run program:"); + gtk_widget_show(label); + gtk_misc_set_alignment(GTK_MISC(label), 0.0, 1.0); + gtk_misc_set_padding(GTK_MISC(label), 10, 0); + gtk_box_pack_start(GTK_BOX(hhbox), label, FALSE, FALSE, 0); + + label_search = gtk_label_new(""); + gtk_widget_show(label_search); + gtk_misc_set_alignment(GTK_MISC(label_search), 1.0, 0.5); + gtk_misc_set_padding(GTK_MISC(label_search), 10, 0); + gtk_box_pack_start(GTK_BOX(hhbox), label_search, TRUE, TRUE, 0); + + compline = gtk_completion_line_new(); + gtk_widget_set_name(compline, "Msh_Run_Compline"); + int prefs_width; + if (!configuration.get_int("Width", prefs_width)) + prefs_width = 500; + + // don't show files starting with "." by default + if (!configuration.get_int("ShowDotFiles", GTK_COMPLETION_LINE(compline)->show_dot_files)) + GTK_COMPLETION_LINE(compline)->show_dot_files = 0; + + { + int tmp; + if (configuration.get_int("TabTimeout", tmp)) + ((GtkCompletionLine*)compline)->tabtimeout = tmp; + } + + g.w1 = label; + g.w2 = label_search; + + gtk_widget_set_usize(compline, prefs_width, -2); + gtk_signal_connect(GTK_OBJECT(compline), "cancel", + GTK_SIGNAL_FUNC(gtk_main_quit), NULL); + gtk_signal_connect(GTK_OBJECT(compline), "activate", + GTK_SIGNAL_FUNC(on_compline_activated), &g); + gtk_signal_connect(GTK_OBJECT(compline), "runwithterm", + GTK_SIGNAL_FUNC(on_compline_runwithterm), &g); + + gtk_signal_connect(GTK_OBJECT(compline), "unique", + GTK_SIGNAL_FUNC(on_compline_unique), &g); + gtk_signal_connect(GTK_OBJECT(compline), "notunique", + GTK_SIGNAL_FUNC(on_compline_notunique), &g); + gtk_signal_connect(GTK_OBJECT(compline), "incomplete", + GTK_SIGNAL_FUNC(on_compline_incomplete), &g); + + gtk_signal_connect(GTK_OBJECT(compline), "search_mode", + GTK_SIGNAL_FUNC(on_search_mode), &g); + gtk_signal_connect(GTK_OBJECT(compline), "search_not_found", + GTK_SIGNAL_FUNC(on_search_not_found), &g); + gtk_signal_connect(GTK_OBJECT(compline), "search_letter", + GTK_SIGNAL_FUNC(on_search_letter), label_search); + + gtk_signal_connect(GTK_OBJECT(compline), "ext_handler", + GTK_SIGNAL_FUNC(on_ext_handler), &g); + gtk_widget_show(compline); + + int shows_last_history_item; + if (!configuration.get_int("ShowLast", shows_last_history_item)) { + shows_last_history_item = 0; + } + if (shows_last_history_item) { + gtk_completion_line_last_history_item(GTK_COMPLETION_LINE(compline)); + } + + gtk_box_pack_start(GTK_BOX(hbox), compline, TRUE, TRUE, 0); + + int prefs_top = 80; + int prefs_left = 100; + configuration.get_int("Top", prefs_top); + configuration.get_int("Left", prefs_left); + + // parse commandline options + gboolean geo_parsed; + char geo_option[30] = ""; + char *geoptr; + poptContext context; + int option; + + geoptr = geo_option; + + struct poptOption options[] = { + { "geometry", 'g', POPT_ARG_STRING | POPT_ARGFLAG_ONEDASH, + &geoptr, 0, "This option specifies the initial " + "size and location of the window.", NULL }, + POPT_AUTOHELP + { NULL, '\0', 0, NULL, 0 } + }; + + context = poptGetContext("popt1", argc, (const char**) argv, options, 0); + option = poptGetNextOpt (context); + + if (strcmp (geoptr, "")) + { + geo_parsed = gtk_window_parse_geometry (GTK_WINDOW (win), + geoptr); + } + else + { + gtk_widget_set_uposition(win, prefs_left, prefs_top); + } + + gtk_widget_show(win); + + gtk_window_set_focus(GTK_WINDOW(win), compline); + + gtk_main(); +} + +// Local Variables: *** +// mode: c++ *** +// c-basic-offset: 2 *** +// End: *** diff --git a/src/main.h b/src/main.h new file mode 100644 index 0000000..e02475b --- /dev/null +++ b/src/main.h @@ -0,0 +1,13 @@ +/***************************************************************************** + * $Id: main.h,v 1.2 2001/05/16 14:39:31 mishoo Exp $ + * Copyright (C) 2000, Mishoo + * Author: Mihai Bazon Email: mishoo@fenrir.infoiasi.ro + * + * Distributed under the terms of the GNU General Public License. You are + * free to use/modify/distribute this program as long as you comply to the + * terms of the GNU General Public License, version 2 or above, at your + * option, and provided that this copyright notice remains intact. + *****************************************************************************/ + + + diff --git a/src/prefs.cc b/src/prefs.cc new file mode 100644 index 0000000..f9e0485 --- /dev/null +++ b/src/prefs.cc @@ -0,0 +1,177 @@ +/***************************************************************************** + * $Id: prefs.cc,v 1.9 2002/08/16 10:48:22 mishoo Exp $ + * Copyright (C) 2000, Mishoo + * Author: Mihai Bazon Email: mishoo@fenrir.infoiasi.ro + * + * Distributed under the terms of the GNU General Public License. You are + * free to use/modify/distribute this program as long as you comply to the + * terms of the GNU General Public License, version 2 or above, at your + * option, and provided that this copyright notice remains intact. + *****************************************************************************/ + + +#include +#include +#include + +#include + +#define GMRUNRC "gmrunrc" + +using std::ifstream; +using std::getline; +using std::string; +using std::list; + +#include "prefs.h" +#include "config.h" + +Prefs configuration; + +Prefs::Prefs() +{ + string file_name = PACKAGE_DATA_DIR"/"; + file_name += GMRUNRC; + init(file_name); + + file_name = getenv("HOME"); + if (!file_name.empty()) { + string::iterator i = file_name.end() - 1; + if (*i == '/') file_name.erase(i); + file_name += "/."; + file_name += GMRUNRC; + init(file_name); + } +} + +Prefs::~Prefs() +{} + +bool Prefs::get_string(const string& key, string& val) const +{ + CONFIG::const_iterator i; + i = vals_.find(ci_string(key.c_str())); + if (i != vals_.end()) { + val = process(i->second); + return true; + } else { + return false; + } +} + +bool Prefs::get_ext_handler(const std::string& ext, std::string& val) const +{ + CONFIG::const_iterator i; + i = exts_.find(ci_string(ext.c_str())); + if (i != exts_.end()) { + val = process(i->second); + return true; + } else { + return false; + } +} + +bool Prefs::get_int(const std::string& key, int& val) const +{ + string sval; + if (get_string(key, sval)) { + int ret; + if (sscanf(sval.c_str(), "%d", &ret) == 1) { + val = ret; + return true; + } else { + return false; + } + } else { + return false; + } +} + +bool Prefs::init(const string& file_name) +{ + ifstream f(file_name.c_str()); + + if (!f.good() || f.eof()) return false; + + while (f.good() && !f.eof()) { + string line; + char key[0x100]; + char val[0x100]; + + getline(f, line); + if (f.eof()) break; + string::size_type i = line.find_first_not_of(" \t"); + if (i == string::npos) continue; + if (line[i] == '#') continue; + + sscanf(line.c_str(), "%255[a-zA-Z_0-9:,;] = %255[^\n]", key, val); + if (strncmp(key, "EXT:", 4) == 0) { + string k(key + 4); + size_t i = 0; + while (i != string::npos) { + string ext; + size_t j = k.find(',', i); + if (j != string::npos) { + ext = k.substr(i, j - i); + i = j + 1; + } else { + ext = k.substr(i); + i = string::npos; + } + if (ext.length() > 0) { +#ifdef DEBUG + std::cerr << "Extension: " << ext << " - " << val << std::endl; +#endif + exts_[ext.c_str()] = val; + } + } + } else { + vals_[key] = val; + } + +#ifdef DEBUG + std::cerr << "Key: " << key << ", val: " << vals_[key] << std::endl; +#endif + } + + return true; +} + +string Prefs::process(const std::string& cmd) const +{ + string::size_type i = cmd.find("${"); + string::size_type j = cmd.find("}", i); + + if (i == string::npos || j == string::npos) { + return cmd; + } + + string val; + if (!get_string(cmd.substr(i + 2, j - i - 2), val)) return cmd; + string ret(cmd); + ret.replace(i, j - i + 1, val); + return process(ret); +} + +bool Prefs::get_string_list(const string& key, list& val) const +{ + string sval; + if (get_string(key, sval)) { + const char *q, *p = sval.c_str(); + for (q = sval.c_str(); *q; ++q) { + if (::isspace(*q)) { + string s(p, q - p); + val.push_back(s); + while (*q && ::isspace(*q)) ++q; + p = q; + } + } + if (p != q) { + string s(p, q - p); + val.push_back(s); + } + return (val.size() > 0); + } + return false; +} + diff --git a/src/prefs.h b/src/prefs.h new file mode 100644 index 0000000..0732a51 --- /dev/null +++ b/src/prefs.h @@ -0,0 +1,45 @@ +/***************************************************************************** + * $Id: prefs.h,v 1.6 2002/08/16 10:30:18 mishoo Exp $ + * Copyright (C) 2000, Mishoo + * Author: Mihai Bazon Email: mishoo@fenrir.infoiasi.ro + * + * Distributed under the terms of the GNU General Public License. You are + * free to use/modify/distribute this program as long as you comply to the + * terms of the GNU General Public License, version 2 or above, at your + * option, and provided that this copyright notice remains intact. + *****************************************************************************/ + + +#ifndef __PREFS_H__ +#define __PREFS_H__ + +#include "ci_string.h" +#include +#include + +class Prefs +{ + public: + typedef std::map CONFIG; + typedef std::pair PAIR; + + private: + CONFIG vals_; + CONFIG exts_; + + bool init(const std::string& file_name); + string process(const std::string& cmd) const; + + public: + Prefs(); + ~Prefs(); + + bool get_string(const std::string& key, std::string& val) const; + bool get_int(const std::string& key, int& val) const; + bool get_string_list(const std::string& ket, std::list& val) const; + bool get_ext_handler(const std::string& ext, std::string& val) const; +}; + +extern Prefs configuration; + +#endif /* __PREFS_H__ */ diff --git a/stamp-h.in b/stamp-h.in new file mode 100644 index 0000000..9788f70 --- /dev/null +++ b/stamp-h.in @@ -0,0 +1 @@ +timestamp -- cgit v1.2.3