summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fickle/COPYING340
-rw-r--r--fickle/ChangeLog49
-rw-r--r--fickle/README.md164
-rw-r--r--fickle/examples/Makefile20
-rw-r--r--fickle/examples/README102
-rw-r--r--fickle/examples/cat.fcl4
-rw-r--r--fickle/examples/cl.fcl76
-rw-r--r--fickle/examples/csa.fcl65
-rw-r--r--fickle/examples/tsa.fcl79
-rw-r--r--fickle/examples/verbs.fcl34
-rw-r--r--fickle/examples/wc.fcl40
-rw-r--r--fickle/examples/wc2.fcl102
-rw-r--r--fickle/fickle.tcl1007
-rw-r--r--taccle/COPYING340
-rw-r--r--taccle/ChangeLog48
-rw-r--r--taccle/README.md123
-rw-r--r--taccle/examples/Makefile17
-rw-r--r--taccle/examples/if_then_else.tac18
-rw-r--r--taccle/examples/infix_calc.tac35
-rw-r--r--taccle/examples/interactive_calculator.tac42
-rw-r--r--taccle/examples/lalr_reduce_reduce.tac18
-rw-r--r--taccle/examples/reduce_reduce.tac20
-rw-r--r--taccle/examples/reduce_reduce2.tac15
-rw-r--r--taccle/examples/shift_reduce.tac17
-rw-r--r--taccle/examples/shift_reduce2.tac20
-rw-r--r--taccle/examples/simple_calculator.tac36
-rw-r--r--taccle/examples/simple_expressions.tac30
-rw-r--r--taccle/examples/simple_grammar.tac27
-rw-r--r--taccle/examples/simple_scanner.fcl16
-rw-r--r--taccle/taccle.tcl1726
-rw-r--r--tclzipfs/Makefile.in459
-rw-r--r--tclzipfs/README.md5
-rw-r--r--tclzipfs/aclocal.m49
-rwxr-xr-xtclzipfs/configure9416
-rw-r--r--tclzipfs/configure.ac193
-rw-r--r--tclzipfs/crypt.h131
-rw-r--r--tclzipfs/license.terms40
-rw-r--r--tclzipfs/pkgIndex.tcl.in5
-rw-r--r--tclzipfs/tclZipfs.c5049
-rw-r--r--tclzipfs/tclconfig/ChangeLog1003
-rw-r--r--tclzipfs/tclconfig/README.txt26
-rwxr-xr-xtclzipfs/tclconfig/install-sh528
-rw-r--r--tclzipfs/tclconfig/tcl.m44176
-rwxr-xr-xtclzipfs/tclzipfsConfig.sh.in45
44 files changed, 0 insertions, 25715 deletions
diff --git a/fickle/COPYING b/fickle/COPYING
deleted file mode 100644
index d60c31a..0000000
--- a/fickle/COPYING
+++ /dev/null
@@ -1,340 +0,0 @@
- 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.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 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.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/fickle/ChangeLog b/fickle/ChangeLog
deleted file mode 100644
index 2b26507..0000000
--- a/fickle/ChangeLog
+++ /dev/null
@@ -1,49 +0,0 @@
-2004-11-13 J. Tang <tang@jtang.org>
-
- * Released as fickle version 2.04.
-
- * Reworded parts of README; included explanation of change to
- [unput].
-
- * Changes some internal variable names. With the exception of
- yy_scan_string, all other global variables beginning with 'yy_'
- are used to keep track of internal fickle states. (Of course,
- this is all changed if %option prefix is given.)
-
- * Fixed a missing parameter within yyless function. Thanks to Jon
- Harrison for reporting this.
-
-2004-09-30 J. Tang <tang@jtang.org>
-
- * Found some problems when both %option debug and %option prefix
- enabled.
-
- * Found a problem with patterns that use vertical bars.
-
-2004-09-30 J. Tang <tang@jtang.org>
-
- * Added some more comments; reformatted code slightly.
-
-2004-09-27 J. Tang <tang@jtang.org>
-
- * Removed errornous space in "%buffersize" within handle_defs
- switch. Thanks to jcw for discovering this.
-
-2004-08-19 J. Tang <tang@jtang.org>
-
- * definitions containing backslashses correctly maintain those
- backslashes during substitution. thanks to Matt Newman for
- discovering this bug.
-
-2004-08-18 J. Tang <tang@jtang.org>
-
- * added interactive mode (-I option)
-
-2004-08-05 J. Tang <tang@jtang.org>
-
- * fixed yy_scan_string; moved comments about to be Tcldoc-friendly
-
-2002-06-24 J. Tang <tang@jtang.org>
-
- * fixed spelling and grammar mistakes within README
-
diff --git a/fickle/README.md b/fickle/README.md
deleted file mode 100644
index ae6fb0d..0000000
--- a/fickle/README.md
+++ /dev/null
@@ -1,164 +0,0 @@
-fickle 2.04 by Jason Tang (tang@jtang.org)
-
-This is a scanner generator program much like flex(1) is to C. If you
-have no desire to author Tcl programs, particularly those that
-manipulate text, fickle is not for you. A passing knowledge of flex
-or some other lex-like program would be useful as that fickle uses
-nearly identical syntax and commands as flex. Two good references are
-the flex(1) man page and the O'Reilly book 'lex & yacc' by Levine,
-Mason, and Brown.
-
-Examples of working fickle code may be found in the 'examples'
-directory. See the examples' README for further details.
-
-fickle is protected by the GNU general public license. See the file
-COPYING for details.
-
-
-USAGE
------
-fickle is to be used as a command-line utility that translates 'fickle
-specification files' into valid Tcl code. Invoke fickle like so:
-
-$ tclsh fickle.tcl some_spec_file.f
-
-and it will generate a file 'some_spec_file.tcl' containing the
-resultant scanner. fickle supports the more popular of flex's
-options:
-
- Usage: fickle [options] [FILE]
- FILE a fickle specification file
-
- Options:
- -h print this help message and quit
- -v be verbose while generating scanner
- -o FILE specify name to write scanner
- -d enable debug mode while running scanner
- -i generate a case-insensitive scanner
- -l keep track of line numbers in global variable yylineno
- -s suppress default rule; unmatched input aborts with errors
- -t write scanner to standard output
- -I read input interactively
- -P PREFIX change default yy prefix to PREFIX
- --version print fickle version and quit
-
-If no input files are given fickle reads from standard input. Also
-like flex fickle supports the following '%option' directives (and
-their "no" counterparts):
-
- caseful or case-sensitive opposite of -i option (default)
- caseless or case-insensitive -i option
- debug -d option
- default opposite of -s option
- interactive -I option
- verbose -v option
- stack enables start states
- yylineno enables tracking of line numbers
- yywrap call [yywrap] upon end-of-file
-
-In addition fickle has two additional directives:
-
- %buffersize NUM set size of internal input buffer (default 1024)
- %option noheaders strips fickle-generated comments from output file
-
-
-CAPABILITIES
-------------
-fickle is capable of most of flex's functionality. In addition to the
-options listed above the following functions work how one would expect
-within a Tcl environment:
-
- input, unput, yy_scan_string, yyless, yylex, yyrestart, yywrap,
- ECHO, YY_FLUSH_BUFFER, and YY_INPUT
-
-as well as these global variables:
-
- ::yytext, ::yyleng, ::yyin, and ::yyout
-
-With debug mode enabled (either -d flag or %option debug) fickle
-adds a global variable ::yy_flex_debug. Set this to non-zero to
-display to standard error every time the scanner matches a pattern as
-well as when it reaches the end of a file.
-
-With start states enabled (%option stack) one now can call the
-functions yy_push_state, yy_pop_state, yy_top_state, and BEGIN. Like
-flex fickle allows for both inclusionary (%s directive) and
-exclusionary (%x) states.
-
-With line numbers enabled (%option yylineno) fickle will keep track of
-newlines within the input file. The line number may be accessed
-through the global variable ::yylineno.
-
-See a generated file for full documentation of these fickle-supplied
-functions, assuming that one did not call '%option noheaders'.
-
-
-DIFFERENCES
------------
-fickle does its best to emulate flex but there are some important
-differences to note. The following functions/macros are not supported
-by fickle:
-
- output, yymore, yy_*_buffer, REJECT, YY_CURRENT_BUFFER, or YY_DECL
-
-nor does it support the declarations %T, %unused, or %used. Unlike
-flex, unput() is a procedure that takes accepts any string not just a
-character at a time.
-
-Textual substitutions of definitions is kind of blind, and will ignore
-backslashes preceding opening braces. For example, if there exists a
-definition 'foo' then it would be substituted into the patterns
-"{foo}" as well as "\{foo}". Substitutions are performed by order of
-appearance. Thus if the result of one substitution creates a pattern
-that looks like a second definition then a second substitution occurs.
-To prevent this behavior place definitions that might result in
-creating a valid name higher up in the file. Furthermore fickle will
-not issue any warnings whenever a pattern has an undefined name.
-
-Interactive mode differs somewhat from flex. fickle reads from
-$::yyin a block of bytes at a time; by default this block is 1024
-bytes though it may be changed with %buffersize. This is akin to
-flex's batch processing mode. However this behavior is very
-undesirable for interactive programs; fickle would block until a user
-types in 1024 characters. Instead when in interactive mode, set by
-either the -I command line option or %interactive directive, fickle
-reads a line at a time from $::yyin through the [gets] procedure.
-Unlike flex, fickle defaults to batch mode and not interactive mode.
-
-The start state INITIAL is exactly that -- the literal "INITIAL" and
-not the value zero. In addition fickle does not support start
-condition scopes.
-
-fickle calls Tcl's [regexp] to handle pattern matching, so any valid
-Tcl regexp is valid under fickle. This does lead to some
-incompatiblities with flex-style regexps. <<EOF>> is unsupported.
-Circumflexes (^) may behave oddly; fickle tries to handle ^ sanely by
-modifying its internal buffer whenever it matches newlines. Finally,
-Tcl regexps do not treat double quotation marks as metacharacters.
-For example, given the regular expression "/*" the call:
-
- regexp -- {"/*"} $string
-
-attempts to match any number of forward slashes rather than a C-style
-comment token. fickle rewrites patterns containing double quotes to
-explicitly escape metacharacters within. Therefore fickle instead
-interprets the above pattern as:
-
- regexp -- {\/\*} $string
-
-
-MISCELLANY
-----------
-fickle, like flex, allows the user to change all 'yy' prefaces through
-the -P flag. The argument to -P will automagically be downcased.
-However, the pre-defined macro 'BEGIN' does not have a prefix. To get
-around this limitation it takes an optional second parameter which
-will direct it to the correct parameter. For example suppose one
-invokes fickle with '-P zz'. All internal calls to 'BEGIN' will set
-"zz" as the second parameter. Any of your code which calls 'BEGIN'
-will need to pass "zz" as well, otherwise 'BEGIN' will default to
-using the "yy" internally.
-
-Finally, fickle will exhaust its internal buffer prior to calling
-yywrap. That means regular expressions cannot match across file
-boundaries.
diff --git a/fickle/examples/Makefile b/fickle/examples/Makefile
deleted file mode 100644
index 4a40f68..0000000
--- a/fickle/examples/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-# $Id: Makefile,v 1.1.1.1 2004/07/23 19:22:41 tang Exp $
-
-# A simple Makefile that calls fickle upon the example specification
-# files.
-
-TCL=/usr/bin/tclsh
-FICKLE=../fickle.tcl
-FCL_EXS=cat.tcl verbs.tcl wc.tcl wc2.tcl cl.tcl csa.tcl tsa.tcl
-
-all: fcl_exs
-
-fcl_exs: $(FCL_EXS)
-
-%.tcl: %.fcl
- -$(TCL) $(FICKLE) $<
-
-clean:
- -rm -f $(FCL_EXS:.fcl=.tcl)
-
-.PHONY: clean
diff --git a/fickle/examples/README b/fickle/examples/README
deleted file mode 100644
index 117e566..0000000
--- a/fickle/examples/README
+++ /dev/null
@@ -1,102 +0,0 @@
-$Id: README,v 1.1.1.1 2004/07/23 19:22:41 tang Exp $
-
-The example fickle code programs are based upon the lex examples found
-within "lex & yacc" by John R. Levine, Tony Mason, and Doug Brown (by
-O'Reilly & Associates, ISBN 1-56592-000-7). For more information on
-using lex and yacc, see http://www.oreilly.com/catalog/lex/.
-
-Run the Makefile to generate resulting Tcl code. Descriptions of
-individual files are below. The reader is assumed to have a familiarity
-with flex; if not consider purchasing the aforementioned book.
-
-
-cat.fcl
--------
-This is the simplest fickle example possible. It copies its input (from
-stdin) to output (stdout), much like the cat(1) program does without any
-arguments. Note that one must explicitly call yylex to run the lexer.
-
-
-verbs.fcl
----------
-This examples demonstrates a verbatim section (the text between '%{'
-and '%}'). Also note how fickle specification files may have
-Tcl-style comments embedded within. This program searches its input
-for various English verbs and copies it to the output. The program
-makes use of the variable $yytext (really just an upvar'ed version of
-the global ::yytext variable) to print out the text that matched.
-
-
-wc.fcl
-------
-This program will count the number of characters, words, and lines in
-its input, much like wc(1). Called without any arguments, wc.tcl reads
-from stdin; it reads from a file if given an argument. Unless otherwise
-specified, 'yyin' points to stdin and 'yyout' to stdout. Overriding
-these variables forces the lexer to read from another stream. This
-program also uses $yyleng (an upvar'ed version of ::yyleng) which is
-set to [string length $::yytext].
-
-
-wc2.fcl
--------
-This example supports multiple filenames. With more than one argument,
-wc2 will print a report for each line and a summary line totalling all
-metrics. No summary is displayed given zero or one argument.
-
-wc2 handles multiple files by overriding the definition for yywrap.
-yywrap returns 0 when additional files need to be processed.
-
-The directive `%option noheaders' causes fickle to not include
-comments about the autogenerated functions within wc2.tcl. Note the
-difference in size between wc2.tcl and wc.tcl.
-
-
-cl.fcl
-------
-This example demonstrates how to feed the lexer input from a source
-other than a file -- in this case, the command line. One must rewrite
-YY_INPUT to use the alternative source. The first parameter should be
-'upvar'ed; it holds the next string to scan. 'result' should be the
-size of the buffer, or zero to indicate an end of file; this too needs
-to be 'upvar'ed. The final parameter indicates the maximum allowed
-buffer size. By default this is 1024; use the `%option buffersize'
-directive to change this amount.
-
-Also note the use of `%option nodefault'. By default fickle will
-write to yyout any unmatched input through the ECHO function. Use
-`%option nodefault' to abort the program upon unmatched input; this is
-useful during debugging sessions. One can also invoke this
-suppression behavior with the `-s' flag on the fickle command line.
-
-
-csa.fcl
--------
-The next example is a C source analyzer. It takes a single C source
-file as a parameter; it then counts the lines of code, comments, and
-whitespace within.
-
-This example demonstrates the start state feature of fickle, enabled
-through the directive `%option stack'. fickle supports both exclusive
-start states (as indicated by '%x') as well as regular start states
-('%s', though not featured in this program). Start states specify
-when a pattern is allowed. Switch states through calls to 'BEGIN',
-'yy_push_state', and 'yy_pop_state'.
-
-The initial state is called, not surprisingly, 'INITIAL'. Unlike flex,
-'BEGIN 0' and 'BEGIN INITIAL' are not identical. To match all states,
-prepend the pattern with '<*>'. Patterns that have no state listed are
-defaulted to matching only INITIAL and any regular start state.[*]
-
-Note that if multiple patterns match the input, the largest match takes
-precedence. In case of a tie the pattern appearing earlier within the
-specification file wins.
-
-[*] Regular start states are a source of much confusion and are rarely
-useful. Avoid them like the plague.
-
-
-tsa.fcl
--------
-In comparison to the above this program instead analyzes Tcl code.
-It's not particularly foolproof but does get the job done.
diff --git a/fickle/examples/cat.fcl b/fickle/examples/cat.fcl
deleted file mode 100644
index ebbd8e9..0000000
--- a/fickle/examples/cat.fcl
+++ /dev/null
@@ -1,4 +0,0 @@
-%%
-.|\n ECHO;
-%%
-yylex
diff --git a/fickle/examples/cl.fcl b/fickle/examples/cl.fcl
deleted file mode 100644
index 0949843..0000000
--- a/fickle/examples/cl.fcl
+++ /dev/null
@@ -1,76 +0,0 @@
-# $Id: cl.fcl,v 1.1.1.1 2004/07/23 19:22:41 tang Exp $
-
-# Scans its command line for various arguments.
-
-# This is based upon example 'ape-05.l' (which is the flex version of
-# 'ch2-05.l') from "lex & yacc" by John R. Levine, Tony Mason, and
-# Doug Brown (by O'Reilly & Associates, ISBN 1-56592-000-7). For more
-# information on using lex and yacc, see
-# http://www.oreilly.com/catalog/lex/.
-
-# myinput() could have been written much more efficiently because Tcl
-# handles command line arguments as a list. For the sake of porting
-# the original example to Tcl, I used the same logic found within the
-# original flex code.
-
-%{
-#!/usr/bin/tclsh
-%}
-
-%buffersize 1024
-%option nodefault
-
-%%
-
--h |
--\? |
--help {
- puts "usage is: $::progName \[-help | -h | -? \] \[-verbose | -v \] \[(-file | -f) filename\]"
- # actually, the -f option is not handled by this program.
- # that is left as an exercise to the reader.
- }
--v |
--verbose {
- puts "verbose mode is on"
- set ::verbose 1
- }
-
-%%
-
-proc YY_INPUT {buf result max} {
- upvar $result ret_val
- upvar $buf buf_data
- set ret_val [myinput buf_data $max]
-}
-
-set ::offset 0
-proc myinput {buf max} {
- upvar $buf buf_data
- if {[llength $::targv] == 0} {
- # no arguments left, so return an EOF
- return 0
- }
- set len [string length [lindex $::targv 0]]
- if {$len >= $max} {
- set copylen [expr {$max - 1}]
- } else {
- set copylen $len
- }
- if {$len > 0} {
- set buf_data [string range [lindex $::targv 0] $::offset $copylen]
- }
- if {[string length [lindex $::targv 0]] >= $::offset + $copylen} {
- append buf " "
- incr copylen
- set ::offset 0
- set ::targv [lrange $::targv 1 end]
- } else {
- incr ::offset $copylen
- }
- return $copylen
-}
-
-set progName $argv0
-set verbose 0
-set ::targv $argv ;# holds remainder of argument list
-yylex
diff --git a/fickle/examples/csa.fcl b/fickle/examples/csa.fcl
deleted file mode 100644
index 3cd6dc3..0000000
--- a/fickle/examples/csa.fcl
+++ /dev/null
@@ -1,65 +0,0 @@
-# $Id: csa.fcl,v 1.1.1.1 2004/07/23 19:22:41 tang Exp $
-
-# Counts the lines of comments, code, and whitespace within a C
-# program.
-
-# This is based upon example 'ch2-09.l' from "lex & yacc" by John
-# R. Levine, Tony Mason, and Doug Brown (by O'Reilly & Associates, ISBN
-# 1-56592-000-7). For more information on using lex and yacc, see
-# http://www.oreilly.com/catalog/lex/.
-
-%{
-#!/usr/bin/tclsh
-
-set comments 0
-set code 0
-set whitespace 0
-
-proc update_count { a b c } {
- incr ::comments $a
- incr ::code $b
- incr ::whitespace $c
- puts -nonewline "code: $::code, comments: $::comments, whitespace: $::whitespace\r"
- flush stdout
-}
-
-%}
-
-%option noheaders stack nodefault
-%x COMMENT
-
-%%
-
-^[ \t]*"/*" { BEGIN COMMENT }
-^[ \t]*"/*".*"*/"[ \t]*\n { update_count 1 0 0 }
-<COMMENT>"*/"[ \t]*\n { BEGIN INITIAL; update_count 1 0 0 }
-<COMMENT>"*/" { BEGIN INITIAL }
-<COMMENT>\n { update_count 1 0 0 }
-<COMMENT>.\n { update_count 1 0 0 }
-
-^[ \t]*\n { update_count 0 0 1 }
-
-.+"/*".*"*/".*\n { update_count 0 1 0 }
-.*"/*".*"*/".+\n { update_count 0 1 0 }
-.+"/*".*\n { BEGIN COMMENT; update_count 0 1 0 }
-.\n { update_count 0 1 0 }
-
-<*>. # do nothing
-
-%%
-
-if {[llength $argv] == 0} {
- puts stderr "C source analyzer needs a filename."
- exit 0
-}
-
-if {[catch {open [lindex $argv 0] r} yyin]} {
- puts stderr "Could not open [lindex $argv 0]"
- exit 0
-}
-
-yylex
-
-close $yyin
-
-puts ""
diff --git a/fickle/examples/tsa.fcl b/fickle/examples/tsa.fcl
deleted file mode 100644
index 86a3733..0000000
--- a/fickle/examples/tsa.fcl
+++ /dev/null
@@ -1,79 +0,0 @@
-#$Id: tsa.fcl,v 1.1.1.1 2004/07/23 19:22:41 tang Exp $
-
-# Counts lines of comments, logical lines of code, and function
-# invocations in Tcl code.
-
-# The patterns can handle most "normal" Tcl code. There are some
-# instances where it will not correctly detect a function call.
-
-%{
-#!/usr/bin/tclsh
-
-proc found_func {funcname} {
- if [info exist ::func($funcname)] {
- incr ::func($funcname)
- } else {
- set ::func($funcname) 1
- }
-}
-
-proc spin {} {
- if {$::numlines % 8 == 0} {
- puts -nonewline "."
- flush stdout
- }
-}
-
-set comments 0
-set numlines 0
-set spinner_count 0
-
-%}
-
-%option stack
-%x ARG
-
-%%
-
-<*>^\s*\n { incr ::numlines; spin }
-<*>;?\s*#.*\n { incr ::comments; incr ::numlines; spin }
-<*>\n { yy_pop_state; incr ::numlines; spin }
-<*>\s # ignore whitespace
-<*>\\(.|\n) # ignore escaped characters
-<*>\d+ # numbers are ignored
-<INITIAL>\w+ { found_func $yytext; yy_push_state ARG }
-<ARG>\w+ # ignore arguments
-<*>\[\s*\w+ { set start [string first "\[" $yytext]
- set func [string range $yytext [expr {$start + 1}] end]
- found_func [string trim $func]
- yy_push_state ARG }
-<ARG>\] { yy_pop_state }
-<*>; { yy_pop_state }
-<*>. # unknown character; ignore it
-
-%%
-
-# start of main
-if {[llength $argv] > 0} {
- if {[catch {open [lindex $argv 0]} yyin]} {
- puts stderr "could not open file"
- exit 0
- }
-}
-
-yylex
-
-if {[llength $argv] > 0} {
- close $yyin
-}
-
-puts ""
-puts "Comments: $comments"
-puts "Num lines: $numlines"
-puts "Function calls:"
-parray func
-set totalcalls 0
-foreach {name calls} [array get func] {
- incr totalcalls $calls
-}
-puts "Total calls: $totalcalls"
diff --git a/fickle/examples/verbs.fcl b/fickle/examples/verbs.fcl
deleted file mode 100644
index c9317ae..0000000
--- a/fickle/examples/verbs.fcl
+++ /dev/null
@@ -1,34 +0,0 @@
-# $Id: verbs.fcl,v 1.1.1.1 2004/07/23 19:22:41 tang Exp $
-
-# Recognizes various English verbs in sentences.
-
-# This is based upon example 'ch1-02.l' from "lex & yacc" by John
-# R. Levine, Tony Mason, and Doug Brown (by O'Reilly & Associates, ISBN
-# 1-56592-000-7). For more information on using lex and yacc, see
-# http://www.oreilly.com/catalog/lex/.
-
-%{
-#!/usr/bin/tclsh
-%}
-
-%%
-[\t ]+ # ignore whitespace
-is |
-am |
-are |
-were |
-was |
-be |
-being |
-been |
-do |
-does |
-did |
-will puts "$yytext: is a verb"
-[a-zA-Z]+ puts "$yytext: is not a verb"
-
-.|\n ECHO ;# normal default anyway
-
-%%
-
-yylex
diff --git a/fickle/examples/wc.fcl b/fickle/examples/wc.fcl
deleted file mode 100644
index 871b3ad..0000000
--- a/fickle/examples/wc.fcl
+++ /dev/null
@@ -1,40 +0,0 @@
-%{
-#!/usr/bin/tclsh
-
-# Counts characters, words, and lines within its input.
-
-# This is based upon example 'ch2-02.l' from "lex & yacc" by John
-# R. Levine, Tony Mason, and Doug Brown (by O'Reilly & Associates, ISBN
-# 1-56592-000-7). For more information on using lex and yacc, see
-# http://www.oreilly.com/catalog/lex/.
-
-set charCount 0
-set wordCount 0
-set lineCount 0
-
-%}
-
-word [^ \t\n]+
-eol \n
-
-%%
-
-{word} { incr ::wordCount; incr ::charCount $yyleng }
-{eol} { incr ::charCount; incr ::lineCount }
-. { incr ::charCount }
-
-%%
-
-if {[llength $argv] > 0} {
- if {[catch {open [lindex $argv 0]} f]} {
- puts stderr "could not open file [lindex $argv 0]"
- exit 1
- }
- set yyin $f
-}
-
-yylex
-
-puts "$charCount $wordCount $lineCount"
-
-return 0
diff --git a/fickle/examples/wc2.fcl b/fickle/examples/wc2.fcl
deleted file mode 100644
index e887003..0000000
--- a/fickle/examples/wc2.fcl
+++ /dev/null
@@ -1,102 +0,0 @@
-%{
-#!/usr/bin/tclsh
-
-# Counts characters, words, and lines, with support for multiple
-# filenames.
-
-# This is based upon example 'ch2-03.l' from "lex & yacc" by John
-# R. Levine, Tony Mason, and Doug Brown (by O'Reilly & Associates, ISBN
-# 1-56592-000-7). For more information on using lex and yacc, see
-# http://www.oreilly.com/catalog/lex/.
-
-set charCount 0
-set wordCount 0
-set lineCount 0
-
-%}
-
-%option noheaders
-
-word [^ \t\n]+
-eol \n
-
-%%
-
-{word} { incr ::wordCount; incr ::charCount $yyleng }
-{eol} { incr ::charCount; incr ::lineCount }
-. { incr ::charCount }
-
-%%
-
-# lexer calls yywrap to handle EOF conditions (e.g., to
-# connect to a new file, as we do in this case.)
-proc yywrap {} {
- set file ""
- if {$::currentFile != 0 && $::nFiles > 1 && $::currentFile < $::nFiles} {
- # print out statstics for previous file
- puts [format "%8u %8u %8u %s" $::lineCount $::wordCount $::charCount \
- [lindex $::fileList [expr {$::currentFile - 1}]]]
- incr ::totalCC $::charCount
- incr ::totalWC $::wordCount
- incr ::totalLC $::lineCount
- set ::charCount 0
- set ::wordCount 0
- set ::lineCount 0
- close $::yyin
- }
- while {$::currentFile < $::nFiles} {
- if {[catch {open [lindex $::fileList $::currentFile] r} file]} {
- puts stderr "could not open [lindex $::fileList $::currentFile]"
- incr ::currentFile
- } else {
- set ::yyin $file
- incr ::currentFile
- break
- }
- }
- if {$file != ""} {
- return 0 ;# 0 means there's more input
- } else {
- return 1
- }
-}
-
-set fileList ""
-set currentFile 0
-set nFiles 0
-set totalCC 0
-set totalWC 0
-set totalLC 0
-
-set fileList $argv
-set nFiles [llength $argv]
-
-if {[llength $argv] == 1} {
- # handle single file case differenly since we don't need to print a
- # summary line
- set currentFile 1
- if {[catch {open [lindex $argv 0] r} file]} {
- puts stderr "could not open file [lindex $argv 0]"
- exit 1
- }
- set yyin $file
-}
-if {[llength $argv] > 1} {
- yywrap
-}
-
-yylex
-
-# handle zero or one file differently from multiple files
-if {[llength $argv] > 1} {
- puts [format "%8u %8u %8u %s" $lineCount $wordCount $charCount \
- [lindex $argv [expr {$currentFile - 1}]]]
- incr totalCC $charCount
- incr totalWC $wordCount
- incr totalLC $lineCount
- puts [format "%8u %8u %8u total" $totalLC $totalWC $totalCC]
-} else {
- puts [format "%8u %8u %8u" $lineCount $wordCount $charCount]
-}
-
-return 0
diff --git a/fickle/fickle.tcl b/fickle/fickle.tcl
deleted file mode 100644
index 0019d52..0000000
--- a/fickle/fickle.tcl
+++ /dev/null
@@ -1,1007 +0,0 @@
-#!/usr/bin/tclsh
-
-# $Id: fickle.tcl,v 1.6 2004/11/14 02:36:28 tang Exp $
-
-set FICKLE_VERSION 2.1
-
-# no output()
-# no yymore()
-# no REJECT
-
-#//#
-# Fickle is a lexical analyzer generator written in pure Tcl. It
-# reads a <em>fickle specification file</em> to generate pure Tcl code
-# that implements a scanner. See the {@link README} file for complete
-# instructions. Additional information may be found at {@link
-# http://mini.net/tcl/fickle}.
-#
-# @author Jason Tang (tang@jtang.org)
-# @version 2.04
-#//#
-
-# Process a definition / directive on a single line.
-proc handle_defs {line} {
- # trim whitespace and remove any comments
- set line [strip_comments [string trim $line]]
- if {$line == ""} {
- return
- }
- if {$line == "%\{"} {
- handle_literal_block
- } else {
- # extract the keyword to the left of the first space and the
- # arguments (if any) to the right
- if {[regexp -line {^(\S+)\s+(.*)} $line foo keyword args] == 0} {
- set keyword $line
- set args ""
- }
- switch -- $keyword {
- "%s" {
- foreach state_name [split $args] {
- if {$state_name != ""} {
- set ::state_table($state_name) $::INCLUSIVE
- }
- }
- }
- "%x" {
- foreach state_name [split $args] {
- if {$state_name != ""} {
- set ::state_table($state_name) $::EXCLUSIVE
- }
- }
- }
- "%option" {
- handle_options $args
- }
- "%buffersize" {
- if {$args == ""} {
- fickle_error "%buffersize must have an integer parameter" $::PARAM_ERROR
- } elseif {[string is digit $args] && $args > 0} {
- set ::BUFFER_SIZE $args
- } else {
- fickle_error "%buffersize parameter must be positive integer" $::PARAM_ERROR
- }
- }
- default {
- # check if the directive is an option or a substitution
- if {[string index $keyword 0] == "%"} {
- fickle_error "Unknown directive \"$keyword\"" $::SYNTAX_ERROR
- } else {
- add_definition $line
- }
- }
- }
- }
-}
-
-# Copy everything between ^%\{$ to ^%\}$ to the destination file.
-proc handle_literal_block {} {
- set end_defs 0
- while {$end_defs == 0} {
- if {[gets $::src line] < 0} {
- fickle_error "No terminator to verbatim section found " $::SYNTAX_ERROR
- } elseif {[string trim $line] == "%\}"} {
- set end_defs 1
- } else {
- puts $::dest $line
- }
- incr ::line_count
- }
-}
-
-# Examine each option (given by a %option directive) and set/unset
-# flags as necessary.
-proc handle_options {optargs} {
- foreach option [split $optargs] {
- if {$option == ""} {
- continue
- }
- if {$option == "default"} {
- # special construct to handle %option default (because I
- # can't match this in the switch statement below
- set ::suppress 0
- continue
- }
- switch -- $option {
- "caseful" - "case-sensitive" -
- "nocaseless" - "nocase-insensitive" { set ::nocase 0 }
- "caseless" - "case-insensitive" -
- "nocaseful" - "nocase-sensitive" { set ::nocase 1 }
- "debug" { set ::debugmode 1 }
- "nodebug" { set ::debugmode 0 }
- "nodefault" { set ::suppress 1 }
- "interactive" { set ::interactive 1 }
- "nointeractive" { set ::interactive 0 }
- "verbose" { set ::verbose 1 }
- "noverbose" { set ::verbose 0 }
- "stack" { set ::startstates 1 }
- "nostack" { set ::startstates 0 }
- "yylineno" { set ::linenums 1 }
- "noyylineno" { set ::linenums 0 }
- "yywrap" { set ::callyywrap 1 }
- "noyywrap" { set ::callyywrap 0 }
- "headers" { set ::headers 1 }
- "noheaders" { set ::headers 0 }
- default {
- # note this is /not/ the same as %option default (see above)
- fickle_error "Unknown %option $option" $::PARAM_ERROR
- }
-
- }
- }
-}
-
-# Adds a definition to the substition table.
-proc add_definition {line} {
- if {![regexp -line -- {\A\s*([a-zA-Z_]\S*)\s+(.+)} $line foo name pattern]} {
- fickle_error "Malformed definition" $::SYNTAX_ERROR
- }
- # make any substitutions within the pattern now
- foreach {sub_rule sub_pat} [array get ::sub_table] {
- # the quotes around the regexp below is necessary, to
- # allow for substitution of the sub_rule
- regsub -all -- "\{$sub_rule\}" $pattern "\($sub_pat\)" pattern
- }
- # double the backslashes (during the next round of substitution
- # the extras will go away)
- regsub -all -- {\\} $pattern {\\\\} pattern
- set ::sub_table($name) $pattern
-}
-
-# Actually build the scanner given a set of pattern / action pairs.
-proc build_scanner {rules_buf} {
- # step 0: parse the rules buffer into individual rules and actions
- handle_rules_buf $rules_buf
-
- if $::interactive {
- set ::BUFFER_SIZE 1
- }
-
- # step 1: write scanner support functions
- write_scanner_utils
-
- # step 2: write the scanner to the destination file
- write_scanner
-}
-
-# Scan though the rules buffer, pulling out each pattern / action pair.
-proc handle_rules_buf {rules_buf} {
- set regexp_list ""
- set num_rules 0
- while {[string length $rules_buf] > 0} {
- set line_start $::line_count
- # remove the next line from the buffer
- regexp -line -- {\A(.*)\n?} $rules_buf foo line
- set rules_buf [string range $rules_buf [string length $foo] end]
- # consume blank lines
- if {[string trim $line] == ""} {
- incr ::line_count
- continue
- }
- # extract the left hand side
- if {![regexp -line -- {\A\s*(\S+)(.*)} $line foo pattern line]} {
- fickle_error "No pattern found" $::SYNTAX_ERROR
- }
- # the pattern may contain spaces; use [info complete] to keep
- # appending to it
- set pattern_done 0
- while {!$pattern_done && $line != ""} {
- if [info complete $pattern] {
- set pattern_done 1
- } else {
- regexp -- {\A(\S*\s?)(.*)} $line foo p line
- append pattern $p
- }
- }
- if {!$pattern_done} {
- fickle_error "Pattern appears to be unterminated" $::SYNTAX_ERROR
- }
- set pattern [rewrite_pattern [string trim $pattern]]
- set orig_pattern $pattern
-
- # check the pattern to see if it has a start state
- set state_name ""
- if [regexp -- {\A<([^>]+)>} $pattern foo state_name] {
- if {!$::startstates} {
- fickle_error "Start state specified, but states were not enabled with `%option stack'" $::GRAMMAR_ERROR
- }
- # a state was found; remove it from the pattern
- regsub -- {\A<[^>]+>} $pattern "" pattern
- # check that the state was declared
- if {$state_name != "*" && ![info exists ::state_table($state_name)]} {
- fickle_error "Undeclared start state $state_name" $::GRAMMAR_ERROR
- }
- }
- # check if any textual substitutions are needed
- foreach sub_rule [array names ::sub_table] {
- # the quotes around the regexp below is necessary, to
- # allow for substitution of the sub_rule
- regsub -all -- "\{$sub_rule\}" $pattern "\($::sub_table($sub_rule)\)" pattern
- }
-
- # now determine the action; an action of just a vertical bar
- # means to use the subsequent action
- set action [string trimleft $line]
- if {[string trim $action] == ""} {
- fickle_error "Rule has no associated action" $::SYNTAX_ERROR
- } elseif {[string trim $action] == "|"} {
- # blank action means to use next one
- set action ""
- } else {
- # keep scanning through buffer until action is complete
- set num_lines 0
- set action_done 0
- while {!$action_done && $rules_buf != ""} {
- if [info complete $action] {
- set action_done 1
- } else {
- regexp -line -- {\A(.*)\n?} $rules_buf foo line
- set rules_buf [string range $rules_buf [string length $foo] end]
- append action "\n$line"
- incr num_lines
- }
- }
- if {!$action_done && ![info complete $action]} {
- fickle_error "Unterminated action" $::SYNTAX_ERROR
- }
- # clean up the action, especially if it had curly braces
- # around the ends
- set action [string trim $action]
- if {[string index $action 0] == "{" && \
- [string index $action end] == "}"} {
- set action [string trim [string range $action 1 end-1]]
- }
- incr ::line_count $num_lines
- }
- lappend ::rule_table [list $orig_pattern $state_name $pattern $action $line_start]
- incr ::line_count
- if $::verbose {
- if {$state_name == ""} {
- set state "default state"
- } else {
- set state "state $state_name"
- }
- if {$action == ""} {
- set action "<fallthrough>"
- }
- puts stderr "Rule $num_rules: \[$pattern\] ($state) -> $action"
- incr num_rules
- }
- }
-}
-
-# Tcl style regexps are not 100% compatible with flex, so rewrite them
-# here.
-proc rewrite_pattern {pattern} {
- set in_quotes 0
- set in_brackets 0
- set in_escape 0
- foreach c [split $pattern {}] {
- if $in_escape {
- append newpattern $c
- set in_escape 0
- continue
- }
- if $in_quotes {
- if {$c == "\""} {
- set in_quotes 0
- } else {
- # metacharacters lose their meaning within quotes
- if [regexp -- {[.*\[\]^$\{\}+?|/\(\)]} $c foo] {
- append newpattern "\\"
- }
- append newpattern $c
- }
- continue
- }
- switch -- $c {
- "\\" { append newpattern "\\"; set in_escape 1 }
- "\[" { append newpattern "\["; incr in_brackets }
- "\]" { append newpattern "\]"; incr in_brackets -1 }
- "\"" {
- if $in_brackets {
- append newpattern "\\\""
- } else {
- set in_quotes 1
- }
- }
- default {
- append newpattern $c
- }
- }
- }
- return $newpattern
-}
-
-######################################################################
-# procedure to write scanner
-
-# Writes all of the support procedures needed by the scanner during
-# run time.
-proc write_scanner_utils {} {
- puts $::dest "
-######
-# Begin autogenerated fickle (version $::FICKLE_VERSION) routines.
-# Although fickle itself is protected by the GNU Public License (GPL)
-# all user-supplied functions are protected by their respective
-# author's license. See http://mini.net/tcl/fickle for other details.
-######
-"
- puts $::dest "namespace eval ${::p} \{
- variable yylval
-
- variable yytext {}
- variable yyleng 0
- variable yyin stdin
- variable yyout stdout
- variable yy_current_buffer {}"
- if $::debugmode {
- puts $::dest "
- variable yy_flex_debug 1"
- }
- if $::linenums {
- puts $::dest "
- variable yylineno 1"
- }
-
- puts $::dest "
- variable index_ 0
- variable done_ 0"
-
- if $::startstates {
- puts $::dest "
- variable state_stack_ {}
- variable state_table_
- array set state_table_ \{[array get ::state_table]\}"
- }
-
- puts $::dest "\}"
- puts $::dest ""
-
- if $::callyywrap {
- if $::headers {
- puts $::dest "# If yywrap() returns false (zero), then it is assumed that the
-# function has gone ahead and set up yyin to point to another input
-# file, and scanning continues. If it returns true (non-zero), then
-# the scanner terminates, returning 0 to its caller. Note that in
-# either case, the start condition remains unchanged; it does not
-# revert to INITIAL.
-# -- from the flex(1) man page"
- }
- puts $::dest "proc ${::p}::yywrap \{\} \{
- return 1
-\}
-"
- }
- if $::headers {
- puts $::dest "# ECHO copies yytext to the scanner's output if no arguments are
-# given. The scanner writes its ECHO output to the yyout global
-# (default, stdout), which may be redefined by the user simply by
-# assigning it to some other channel.
-# -- from the flex(1) man page"
- }
- puts $::dest "proc ${::p}::ECHO \{\{s \"\"\}\} \{
- variable yytext
- variable yyout
-
- if \{\$s == \"\"\} \{
- puts -nonewline \$yyout \$yytext
- \} else \{
- puts -nonewline \$yyout \$s
- \}
-\}
-"
- if $::headers {
- puts $::dest "# YY_FLUSH_BUFFER flushes the scanner's internal buffer so that the
-# next time the scanner attempts to match a token, it will first
-# refill the buffer using YY_INPUT.
-# -- from the flex(1) man page"
- }
- puts $::dest "proc ${::p}::YY_FLUSH_BUFFER \{\} \{
- variable yy_current_buffer
- variable index_
- variable done_
-
- set yy_current_buffer \"\"
- set index_ 0
- set done_ 0
-\}
-"
- if $::headers {
- puts $::dest "# yyrestart(new_file) may be called to point yyin at the new input
-# file. The switch-over to the new file is immediate (any previously
-# buffered-up input is lost). Note that calling yyrestart with yyin
-# as an argument thus throws away the current input buffer and
-# continues scanning the same input file.
-# -- from the flex(1) man page"
- }
- puts $::dest "proc ${::p}::yyrestart \{new_file\} \{
- variable yyin
-
- set yyin \$new_file
- YY_FLUSH_BUFFER
-\}
-"
- if $::headers {
- puts $::dest "# The nature of how it gets its input can be controlled by defining
-# the YY_INPUT macro. YY_INPUT's calling sequence is
-# \"YY_INPUT(buf,result,max_size)\". Its action is to place up to
-# max_size characters in the character array buf and return in the
-# integer variable result either the number of characters read or the
-# constant YY_NULL (0 on Unix systems) to indicate EOF. The default
-# YY_INPUT reads from the global file-pointer \"yyin\".
-# -- from the flex(1) man page"
- }
- puts $::dest "proc ${::p}::YY_INPUT \{buf result max_size\} \{
- variable yyin
-
- upvar \$result ret_val
- upvar \$buf new_data
- if \{\$yyin != \"\"\} \{"
- if $::interactive {
- puts $::dest " gets \$yyin new_data
- if \{!\[eof \$yyin\]\} \{
- append new_data \\n
- \}"
- } else {
- puts $::dest " set new_data \[read \$yyin \$max_size\]"
- }
- puts $::dest " set ret_val \[string length \$new_data\]
- \} else \{
- set new_data \"\"
- set ret_val 0
- \}
-\}
-"
- if $::headers {
- puts $::dest "# yy_scan_string sets up input buffers for scanning in-memory
-# strings instead of files. Note that switching input sources does
-# not change the start condition.
-# -- from the flex(1) man page"
- }
- puts $::dest "proc ${::p}::yy_scan_string \{str\} \{
- variable yy_current_buffer
- variable yyin
-
- append yy_current_buffer \$str
- set yyin \"\"
-\}
-"
- if $::headers {
- puts $::dest "# unput(c) puts the character c back onto the input stream. It will
-# be the next character scanned.
-# -- from the flex(1) man page"
- }
- puts $::dest "proc ${::p}::unput \{c\} \{
- variable yy_current_buffer
- variable index_
-
- set s \[string range \$yy_current_buffer 0 \[expr \{\$index_ - 1\}\]\]
- append s \$c
- set yy_current_buffer \[append s \[string range \$yy_current_buffer \$index_ end\]\]
-\}
-"
- if $::headers {
- puts $::dest "# Returns all but the first n characters of the current token back to
-# the input stream, where they will be rescanned when the scanner
-# looks for the next match. yytext and yyleng are adjusted
-# appropriately.
-# -- from the flex(1) man page"
- }
- puts $::dest "proc ${::p}::yyless \{n\} \{
- variable yy_current_buffer
- variable index_
- variable yytext
- variable yyleng
-
- set s \[string range \$yy_current_buffer 0 \[expr \{\$index_ - 1\}\]\]
- append s \[string range \$yytext \$n end\]
- set yy_current_buffer \[append s \[string range \$yy_current_buffer \$index_ end\]\]
- set yytext \[string range \$yytext 0 \[expr \{\$n - 1\}\]\]
- set yyleng \[string length \$yytext\]
-\}
-"
- if $::headers {
- puts $::dest "# input() reads the next character from the input stream.
-# -- from the flex(1) man page"
- }
- puts $::dest "proc ${::p}::input \{\} \{
- variable yy_current_buffer
- variable index_
- variable done_
-
- if \{\[string length \$yy_current_buffer\] - \$index_ < $::BUFFER_SIZE\} \{
- set new_buffer \"\"
- set new_buffer_size 0
- if \{\$done_ == 0\} \{
- YY_INPUT new_buffer new_buffer_size $::BUFFER_SIZE
- append yy_current_buffer \$new_buffer
- if \{\$new_buffer_size == 0\} \{
- set done_ 1
- \}
- \}
- if \$done_ \{"
- if $::callyywrap {
- puts -nonewline $::dest " if \{\[yywrap\] == 0\} \{
- return \[input\]
- \} else"
- } else {
- puts -nonewline $::dest " "
- }
- puts $::dest "if \{\[string length \$yy_current_buffer\] - \$index_ == 0\} \{
- return \{\}
- \}
- \}
- \}
- set c \[string index \$yy_current_buffer \$index_\]
- incr index_
- return \$c
-\}
-"
- if $::startstates {
- if $::headers {
- puts $::dest "# Pushes the current start condition onto the top of the start
-# condition stack and switches to new_state as though you had used
-# BEGIN new_state.
-# -- from the flex(1) man page"
- }
- puts $::dest "proc ${::p}::yy_push_state \{new_state\} \{
- variable state_stack_
-
- lappend state_stack_ \$new_state
-\}
-"
- if $::headers {
- puts $::dest "# Pops off the top of the state stack; if the stack is now empty, then
-# pushes the state \"INITIAL\".
-# -- from the flex(1) man page"
- }
- puts $::dest "proc ${::p}::yy_pop_state \{\} \{
- variable state_stack_
-
- set state_stack_ \[lrange \$state_stack_ 0 end-1\]
- if \{\$state_stack_ == \"\"\} \{
- yy_push_state INITIAL
- \}
-\}
-"
- if $::headers {
- puts $::dest "# Returns the top of the stack without altering the stack's contents.
-# -- from the flex(1) man page"
- }
- puts $::dest "proc ${::p}::yy_top_state \{\} \{
- variable state_stack_
-
- return \[lindex \$state_stack_ end\]
-\}
-"
- if $::headers {
- puts $::dest "# BEGIN followed by the name of a start condition places the scanner
-# in the corresponding start condition. . . .Until the next BEGIN
-# action is executed, rules with the given start condition will be
-# active and rules with other start conditions will be inactive. If
-# the start condition is inclusive, then rules with no start
-# conditions at all will also be active. If it is exclusive, then
-# only rules qualified with the start condition will be active.
-# -- from the flex(1) man page"
- }
- puts $::dest "proc ${::p}::BEGIN \{new_state\} \{
- variable state_stack_
-
- set state_stack_ \[lrange \$state_stack_ 0 end-1\]
- lappend state_stack_ \$new_state
-\}"
- }
-
- if $::startstates {
- puts $::dest "
-${::p}::BEGIN INITIAL
-"
- }
-}
-
-# Writes the actual scanner as a function called <code>yylex</code>.
-# Note that this function may be renamed if the <code>-P</code> flag
-# was given at the command line.
-proc write_scanner {} {
- puts $::dest "######
-# autogenerated yylex function created by fickle
-######
-
-# Whenever yylex() is called, it scans tokens from the global input
-# file yyin (which defaults to stdin). It continues until it either
-# reaches an end-of-file (at which point it returns the value 0) or
-# one of its actions executes a return statement.
-# -- from the flex(1) man page
-proc ${::p}::yylex \{\} \{
- variable yylval
-
- variable yytext
- variable yylineno
- variable yyleng
- variable yy_current_buffer
- variable yy_flex_debug
-
- variable index_
- variable done_
- variable state_table_
-"
- puts $::dest $::tab
- puts $::dest " while \{1\} \{"
- if $::startstates {
- puts $::dest " set yy_current_state \[yy_top_state\]"
- }
- puts $::dest " if \{\[string length \$yy_current_buffer\] - \$index_ < $::BUFFER_SIZE\} \{
- if \{\$done_ == 0\} \{
- set buffer_size 0
- set new_buffer \"\"
- YY_INPUT new_buffer buffer_size $::BUFFER_SIZE
- append yy_current_buffer \$new_buffer
- if \{\$buffer_size == 0 && \\
- \[string length \$yy_current_buffer\] - \$index_ == 0\} \{
- set done_ 1
- \}
- \}
- if \$done_ \{"
- if $::debugmode {
- puts $::dest " if \$yy_flex_debug \{
- puts stderr \" ${::p} --reached end of input buffer\"
- \}"
- }
- if $::callyywrap {
- puts -nonewline $::dest " if \{\[yywrap\] == 0\} \{
- set done_ 0
- continue
- \} else"
- } else {
- puts -nonewline $::dest " "
- }
- puts $::dest "if \{\[string length \$yy_current_buffer\] - \$index_ == 0\} \{
- break
- \}
- \}
- \}
- set yyleng 0
- set matched_rule -1"
-
- # build up the if statements to determine which rule to execute;
- # lex is greedy and will use the rule that matches the most
- # strings
- if {$::nocase} {
- set scan_args "-nocase"
- } else {
- set scan_args ""
- }
- set rule_num 0
- foreach rule $::rule_table {
- foreach {orig_pattern state_name pattern action rule_line} $rule {}
- puts $::dest " # rule $rule_num: $orig_pattern"
- puts -nonewline $::dest " if \{"
- if $::startstates {
- if {$state_name == ""} {
- puts -nonewline $::dest "\$state_table_(\$yy_current_state) && \\\n "
- } elseif {$state_name != "*"} {
- puts -nonewline $::dest "\$yy_current_state == \"$state_name\" && \\\n "
- }
- }
- puts $::dest "\[regexp -start \$index_ -indices -line $scan_args -- \{\\A($pattern)\} \$yy_current_buffer match\] > 0\ && \\
- \[lindex \$match 1\] - \$index_ + 1 > \$yyleng\} \{
- set yytext \[string range \$yy_current_buffer \$index_ \[lindex \$match 1\]\]
- set yyleng \[string length \$yytext\]
- set matched_rule $rule_num"
- if $::debugmode {
- puts $::dest " set yyrule_num \"rule at line $rule_line\""
- }
- puts $::dest " \}"
- incr rule_num
- }
- # now add the default case
- puts $::dest " if \{\$matched_rule == -1\} \{
- set yytext \[string index \$yy_current_buffer \$index_\]
- set yyleng 1"
- if $::debugmode {
- puts $::dest " set yyrule_num \"default rule\""
- }
- puts $::dest " \}
- incr index_ \$yyleng
- # workaround for Tcl's circumflex behavior
- if \{\[string index \$yytext end\] == \"\\n\"\} \{
- set yy_current_buffer \[string range \$yy_current_buffer \$index_ end\]
- set index_ 0
- \}"
- if $::debugmode {
- puts $::dest " if \$yy_flex_debug \{
- puts stderr \" ${::p} --accepting \$yyrule_num (\\\"\$yytext\\\")\"
- \}"
- }
- if $::linenums {
- puts $::dest " set numlines \[expr \{\[llength \[split \$yytext \"\\n\"\]\] - 1\}\]"
- }
- puts $::dest " switch -- \$matched_rule \{"
- set rule_num 0
- foreach rule $::rule_table {
- puts -nonewline $::dest " $rule_num "
- if {[string length [lindex $rule 3]] == 0} {
- # action is empty, so use next pattern's action
- puts $::dest "-"
- } else {
- puts $::dest "\{\n[lindex $rule 3]\n \}"
- }
- incr rule_num
- }
- puts $::dest " default"
- if {$::suppress == 0} {
- puts $::dest " \{ ECHO \}"
- } else {
- puts -nonewline $::dest " \{ puts stderr \"unmatched token: \$yytext"
- if $::startstates {
- puts -nonewline $::dest " in state `\$yy_current_state'"
- }
- puts $::dest "\"; exit -1 \}"
- }
- puts $::dest " \}"
- if $::linenums {
- puts $::dest " incr yylineno \$numlines"
- }
- puts $::dest " \}
- return 0
-\}
-######
-# end autogenerated fickle functions
-######
-"
-}
-
-######################################################################
-# utility functions
-
-# Given a line, returns a new line with any comments removed.
-proc strip_comments {line} {
- regexp -- {\A([^\#]*)} $line foo line
- return $line
-}
-
-# If the first non-whitespace character on a line is a hash, then
-# return an empty string; otherwise return the entire line.
-proc strip_only_comments {line} {
- if [regexp -- {\A\s*\#} $line] {
- return ""
- } else {
- return $line
- }
-}
-
-# Retrives a parameter from the options list. If no parameter exists
-# then abort with an error very reminisicent of C's
-# <code>getopt</code> function; otherwise increment
-# <code>param_num</code> by one.
-#
-# @param param_list list of parameters from the command line
-# @param param_num index into <code>param_list</code> to retrieve
-# @param param_name name of the parameter, used when reporting an error
-# @return the <code>$param_num</code>'th element into <code>$param_list</code>
-proc get_param {param_list param_num param_name} {
- upvar $param_num pn
- incr pn
- if {$pn >= [llength $param_list]} {
- puts stderr "fickle: option requires an argument -- $param_name"
- exit $::PARAM_ERROR
- }
- return [lindex $param_list $pn]
-}
-
-# Display an error message to standard error along with where within
-# the specification file it occurred. Then abort this program.
-proc fickle_error {message returnvalue} {
- puts -nonewline stderr $message
- puts stderr " (line $::line_count)"
- exit $returnvalue
-}
-
-# Display to a channel a brief summary of fickle command line options.
-proc print_fickle_help {chan} {
- puts $chan "fickle: a Tcl lexical anaylzer generator
-Usage: fickle \[options\] \[FILE\]
- FILE a fickle specification file
-
-Options:
- -h print this help message and quit
- -v be verbose while generating scanner
- -o FILE specify name to write scanner
- -d enable debug mode while running scanner
- -i generate a case-insensitive scanner
- -l keep track of line numbers in global variable yylineno
- -s suppress default rule; unmatched input aborts with errors
- -t write scanner to standard output
- -I read input interactively
- -P PREFIX change default yy prefix to PREFIX
- --version print fickle version and quit
-
-For more information see http://mini.net/tcl/fickle"
-}
-
-# Displays to standard out the fickle version, then exits program.
-proc print_fickle_version {} {
- puts "fickle version $::FICKLE_VERSION"
- exit 0
-}
-
-######################################################################
-# other fickle functions
-
-# Parse the command line and set all global options.
-proc fickle_args {argv} {
- set argvp 0
- set out_filename ""
- set write_to_stdout 0
- set ::callyywrap 1
- set ::debugmode 0
- set ::headers 1
- set ::interactive 0
- set ::nocase 0
- set ::linenums 0
- set ::startstates 0
- set ::suppress 0
- set ::BUFFER_SIZE 1024
- set ::p "yy"
- set ::verbose 0
- set ::tab {}
- while {$argvp < [llength $argv]} {
- set arg [lindex $argv $argvp]
- switch -- $arg {
- "-d" { set ::debugmode 1 }
- "-h" - "--help" { print_fickle_help stdout; exit 0 }
- "-i" { set ::nocase 1 }
- "-l" { set ::linenums 1 }
- "-o" { set out_filename [get_param $argv argvp "o"] }
- "-s" { set ::suppress 1 }
- "-t" { set write_to_stdout 1 }
- "-v" { set ::verbose 1 }
- "-I" { set ::interactive 1 }
- "-P" {
- set prefix [get_param $argv argvp "P"]
- set ::p [string tolower $prefix]
- }
- "--version" { print_fickle_version }
- default {
- if {[string index $arg 0] != "-"} {
- break
- } else {
- puts stderr "fickle: unknown option $arg"
- print_fickle_help stderr
- exit $::PARAM_ERROR
- }
- }
- }
- incr argvp
- }
- if {$argvp >= [llength $argv]} {
- # read from stdin
- set ::src stdin
- set ::in_filename {}
- set ::in_dir {}
- set out_filename "lex.yy.tcl"
- } else {
- set ::in_filename [lindex $argv $argvp]
- set ::in_dir [file dirname $::in_filename]
- if {$out_filename == ""} {
- set out_filename [file rootname $::in_filename]
- append out_filename ".tcl"
- }
- if [catch {open $::in_filename r} ::src] {
- puts stderr "Could not open specification file '$::in_filename'."
- exit $::IO_ERROR
- }
- }
- if $write_to_stdout {
- set ::dest stdout
- } else {
- if [catch {open $out_filename w} ::dest] {
- puts stderr "Could not create output file '$out_filename'."
- exit $::IO_ERROR
- }
- }
-}
-
-# Actually do the scanner generation.
-proc fickle_main {} {
- set ::line_count 0
-
- # keep track of all rules found
- set ::rule_table ""
-
- # set up the INITIAL start state to be a normal inclusionary state
- set ::state_table(INITIAL) $::INCLUSIVE
-
- # keep track of where within the file I am:
- # definitions, rules, or subroutines
- set file_state definitions
-
- while {[gets $::src line] >= 0} {
- incr ::line_count
-
- if {$line == "%%"} {
- if {$file_state == "definitions"} {
- set file_state "rules"
- } elseif {$file_state == "rules"} {
- set file_state "subroutines"
- } else {
- fickle_error "Syntax error." $::SYNTAX_ERROR
- }
- } else {
- if {[lindex $line 0] == "#tab"} {
- set fn [lindex $line 1]
- if {$fn != {}} {
- if [catch {open [file join $::in_dir $fn] r} ch] {
- puts stderr "Could not open tab file '$fn'."
- exit $::IO_ERROR
- }
- catch {set ::tab [read $ch]}
- catch {close $fn}
- }
- } elseif {$file_state == "definitions"} {
- if {[lindex $line 0] == "#include"} {
- set fn [lindex $line 1]
- if {$fn != {}} {
- if [catch {open [file join $::in_dir $fn] r} ch] {
- puts stderr "Could not open definition file '$fn'."
- exit $::IO_ERROR
- }
- while {[gets $ch line] >= 0} {
- incr ::line_count
- handle_defs $line
- }
- catch {close $fn}
- }
- } else {
- handle_defs $line
- }
- } elseif {$file_state == "rules"} {
- # keep reading the rest of the file until EOF or
- # another '%%' appears
- set rules_buf [strip_only_comments $line]
- while {[gets $::src line] >= 0 && $file_state == "rules"} {
- if {$line == "%%"} {
- set file_state "subroutines"
- break
- } elseif {[lindex $line 0] == "#include"} {
- set fn [lindex $line 1]
- if {$fn != {}} {
- if [catch {open [file join $::in_dir $fn] r} ch] {
- puts stderr "Could not open include file '$fn'."
- exit $::IO_ERROR
- }
- while {[gets $ch line] >= 0} {
- incr ::line_count
- append rules_buf "\n" [strip_only_comments $line]
- }
- catch {close $fn}
- }
- } else {
- append rules_buf "\n" [strip_only_comments $line]
- }
- }
- build_scanner $rules_buf
- set file_state "subroutines"
- } else {
- # file_state is subroutines -- copy verbatim to output file
- puts $::dest $line
- }
- }
- }
-}
-
-######################################################################
-# start of actual script
-
-set IO_ERROR 1
-set SYNTAX_ERROR 2
-set PARAM_ERROR 3
-set GRAMMAR_ERROR 4
-
-# two types of start states allowed:
-set INCLUSIVE 1
-set EXCLUSIVE 0
-
-fickle_args $argv
-fickle_main
diff --git a/taccle/COPYING b/taccle/COPYING
deleted file mode 100644
index d60c31a..0000000
--- a/taccle/COPYING
+++ /dev/null
@@ -1,340 +0,0 @@
- 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.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 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.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/taccle/ChangeLog b/taccle/ChangeLog
deleted file mode 100644
index e9728f1..0000000
--- a/taccle/ChangeLog
+++ /dev/null
@@ -1,48 +0,0 @@
-2005-03-17 J. Tang <tang@jtang.org>
-
- * Added infinite recursion detection. It should work.
-
-2004-10-29 J. Tang <tang@jtang.org>
-
- * Added more comments; upped version to 1.0.
-
-2004-09-29 J. Tang <tang@jtang.org>
-
- * Added --version flag to display taccle version.
-
- * Added infix_calc.tac as example of how to do precedence.
-
- * Added operator precedence (%left, %right, %nonassoc, and
- %prec). Seems to work, at least with the example from the bison
- info manual.
-
-2004-09-28 J. Tang <tang@jtang.org>
-
- * Discovered obscure error when calculating FIRST and FOLLOW sets
- given a rule of the form: x -> A x A
- (i.e., when the rule recurses with a terminal following the lhs
- token)
-
- * Added -w to enable warnings display.
-
-2004-09-27 J. Tang <tang@jtang.org>
-
- * Added write_array procedure to better format state transition
- tables. Thanks to jcw for suggestion.
-
-2004-09-08 J. Tang <tang@jtang.org>
-
- * As a result of working epsilons, added embedded actions.
-
- * Fixed epsilon transitions by adding FOLLOW sets. Double Woot!
-
-2004-08-18 J. Tang <tang@jtang.org>
-
- * Added epsilon transitions. Woot!
-
- * Renamed synthesized attributes to just $1, $2... Renamed $yy_
- to $_. (Yup, $_ like in Perl.) Thanks to Matt Newman for
- suggestion.
-
- * Added error terminal and error recovery (though no yyerrok).
- See interactive_calculator.tac example.
diff --git a/taccle/README.md b/taccle/README.md
deleted file mode 100644
index 19609e9..0000000
--- a/taccle/README.md
+++ /dev/null
@@ -1,123 +0,0 @@
-Copyright
----------
-taccle itself is protected by the GNU General Public License. See the
-file COPYING for details. Of course, any code you generate using
-taccle is subject to whatever restrictions you place on it.
-
-
-Availability
-------------
-A wiki page for taccle may be found at http://mini.net/tcl/taccle.
-An archive of taccle files are available at http://tcl.jtang.org/taccle.
-
-
-taccle README
--------------
-taccle is another compiler compiler for the Tcl language. It takes as
-input a "taccle specification file"; from this taccle generates a Tcl
-file that implements an LALR(1) parser. The program brings to the Tcl
-language what yacc and bison do for C and C++.
-
-This release of taccle implements nearly all features of yacc:
- - #include filename
- - %define parse.error verbose declaration
- - %token and %start declarations
- - epsilon transitions (i.e., "empty" rules)
- - embedded (mid-rule) actions
- - literal tokens
- - symbol values and synthesized attributes
- - the error token and error recovery
- - shift/reduce and reduce/reduce conflict notification
- - operator precedence with %left, %right, %nonassoc, and %prec
- - functions yyerror, YYABORT, YYACCEPT, and yyclearin
- - infinite recursion detection
-
-Features currently missing in taccle are:
- - inherited attributes
-
-Because taccle uses the lset command it requires Tcl 8.4 or greater.
-
-Be aware of the following differences between taccle and yacc:
-
-1. taccle (and Tcl) has no concept of variable types. Thus %union and
- %type declarations are no longer needed.
-
-2. yacc uses variables $1, $2, etc for symbol values; it uses $$ for
- the synthesized attribute. Although both $1 and $$ are legal
- variable references in Tcl the latter is more awkward; the
- expression `set $ foo' is not legal. Instead of $$ use the name
- '_', as in `set _ foo'. These variables' scopes are valid only
- within the context of an action. See
- examples/simple_calculator.tac for an example.
-
- (The astute observer notes that using $_ for synthesized values is
- similar to Perl's use of the auto-variable $_.)
-
-3. taccle has error handling just like bison. It always declares the
- terminal `error' that is pushed onto the stack whenever it detects
- a syntax error. Although yyclearin is implemented neither
- YYRECOVERING nor yyerrok are. The example
- interactive_calculator.tac implements error handling.
-
-4. Like yacc, taccle requires a token generator. The examples use
- fickle (http://mini.net/tcl/fickle), though others are welcome.
-
-5. taccle calls a global function yylex to fetch the next token. This
- yylex function is expected to return the next token in the input
- stream, either a string or a number. Normally this poses no
- problem except for the case of a literal zero. Tcl makes no
- distinction between the integer zero and the string zero. Because
- zero is reserved for the end of input marker, taccle will refuse
- grammars that employ literal zeros. You can get around this by
- declaring `%token ZERO' and using that instead.
-
-6. Another literal that causes all sorts of problems is the open brace
- '{'. Because most things are represented internally as lists the
- presence of the brace breaks everything. Thus taccle will refuse
- to parse grammars with this literal; you'll have to use a %token
- instead.
-
-
-Using the Examples
-------------------
-Execute taccle as if it were yacc:
-
- $ tclsh ./taccle.tcl -d some_spec_file.tac
-
-This will generate two files, some_spec_file.tcl and
-some_spec_file.tab.tcl. The first contains the actual parser code;
-execute it by calling yyparse. The latter file is file to be sourced
-by the lexer, much akin to yacc's y.tab.h file.
-
-The Makefile in the examples subdirectory will generate two simple
-calculator programs. You will need a copy of fickle (available at
-http://mini.net/tcl/fickle) and may need to modify its location on
-line 4 of the Makefile. After filtering simple_calculator through
-ficcle and taccle execute it like so:
-
- $ echo "6*9" | tclsh simple_calculator.tcl
-
-If all goes well the program displays:
-
- Result is 54
-
-A more interesting example is interactive_calculator.tcl. This one is
-designed to handle any arbitrary number of commands. Upon errornous
-equations it recovers by discarding the rest of the buffer. Here is
-an example session of it:
-
- $ tclsh interactive_calculator.tcl
- 6*9
- = 54
- 1++2++3
- = error
- 1 + 2 + 3
- = 6
-
-The final example, infix_calc.tcl, shows how to use operator
-precedence to resolve shift/reduce conflicts. It understands both
-left associative operators (addition et al) as well as right
-associative (exponentation). Here is an example use:
-
- $ echo "2^2^2 - 10 * 2 + 6 / 3" | tclsh infix_calc.tcl
- -2
diff --git a/taccle/examples/Makefile b/taccle/examples/Makefile
deleted file mode 100644
index 7235aea..0000000
--- a/taccle/examples/Makefile
+++ /dev/null
@@ -1,17 +0,0 @@
-# $Id: Makefile,v 1.2 2004/09/29 16:23:28 tang Exp $
-
-TCL=tclsh
-FICKLE=~/fickle/fickle.tcl
-TACCLE=../taccle.tcl
-EXAMPLES=interactive_calculator.tcl simple_calculator.tcl infix_calc.tcl
-
-all: $(EXAMPLES) simple_scanner.tcl
-
-%.tcl: %.fcl
- $(TCL) $(FICKLE) $<
-
-%.tcl: %.tac
- $(TCL) $(TACCLE) -d -v -w $<
-
-clean:
- -rm -f *tcl *output
diff --git a/taccle/examples/if_then_else.tac b/taccle/examples/if_then_else.tac
deleted file mode 100644
index eee631a..0000000
--- a/taccle/examples/if_then_else.tac
+++ /dev/null
@@ -1,18 +0,0 @@
-# $Id: if_then_else.tac,v 1.1 2004/08/18 23:53:42 tang Exp $
-
-# The classical if/then/else ambiguity. taccle resolves this by
-# giving higher precedence to shifting else.
-#
-# References:
-# Dragon book, page 250
-# lex & yacc, pages 233-235
-
-%token IF ELSE TERMINAL
-
-%%
-
-stmt: IF '(' cond ')' stmt
- | IF '(' cond ')' stmt ELSE stmt
- | TERMINAL;
-
-cond: TERMINAL;
diff --git a/taccle/examples/infix_calc.tac b/taccle/examples/infix_calc.tac
deleted file mode 100644
index 95ef2ee..0000000
--- a/taccle/examples/infix_calc.tac
+++ /dev/null
@@ -1,35 +0,0 @@
-# $Id: infix_calc.tac,v 1.1 2004/09/29 16:23:28 tang Exp $
-
-# This example demonstrates how taccle handles operator precedence.
-# The code is shamelessly borrowed from the GNU Bison info manual.
-
-# taccle Declarations
-%token ID NEWLINE
-%left '-' '+'
-%left '*' '/'
-%left NEG # negation--unary minus
-%right '^' # exponentiation
-
-# Grammar follows
-%%
-input: # empty string
- | input line
-;
-
-line: NEWLINE
- | exp NEWLINE { puts [format "\t%.10g" $1] }
-;
-
-exp: ID { set _ $1 }
- | exp '+' exp { set _ [expr {$1 + $3}] }
- | exp '-' exp { set _ [expr {$1 - $3}] }
- | exp '*' exp { set _ [expr {$1 * $3}] }
- | exp '/' exp { set _ [expr {$1 / $3}] }
- | '-' exp %prec NEG { set _ [expr {-1.0 * $2}] }
- | exp '^' exp { set _ [expr {pow($1, $3)}] }
- | '(' exp ')' { set _ $2 }
-;
-%%
-
-source simple_scanner.tcl
-yyparse
diff --git a/taccle/examples/interactive_calculator.tac b/taccle/examples/interactive_calculator.tac
deleted file mode 100644
index ac8a3ba..0000000
--- a/taccle/examples/interactive_calculator.tac
+++ /dev/null
@@ -1,42 +0,0 @@
-# $Id: interactive_calculator.tac,v 1.2 2004/09/08 21:38:44 tang Exp $
-
-# This example expands the simple calculator to be interactive from
-# the command line. Note the use of an empty rule (i.e., epsilon
-# transition). Also featured are the error token and error recovery.
-
-%{
-#!/usr/bin/tclsh
-
-%}
-
-%token ID NEWLINE
-
-%%
-
-start: line NEWLINE start
- | line
- ;
-
-line: E { puts " = $1" }
- | error { puts " -- error" }
- | # empty
- ;
-
-E: E '+' T { set _ [expr {$1 + $3}] }
- | E '-' T { set _ [expr {$1 - $3}] }
- | T
- ;
-
-T: T '*' F { set _ [expr {$1 * $3}] }
- | T '/' F { set _ [expr {$1 / $3}] }
- | F
- ;
-
-F: '(' E ')' { set _ $2 }
- | ID { set _ $::yylval }
- ;
-
-%%
-
-source simple_scanner.tcl
-yyparse
diff --git a/taccle/examples/lalr_reduce_reduce.tac b/taccle/examples/lalr_reduce_reduce.tac
deleted file mode 100644
index fb7e493..0000000
--- a/taccle/examples/lalr_reduce_reduce.tac
+++ /dev/null
@@ -1,18 +0,0 @@
-# $Id: lalr_reduce_reduce.tac,v 1.1 2004/08/18 23:53:42 tang Exp $
-
-# Below illustrates a grammar that is ambiguous by an LALR(1) parser
-# but not an LR(1). There is a reduce/reduce conflict given a viable
-# prefix ac. taccle resolves this by giving precedence to the first
-# listed rule (A -> c).
-#
-# Reference:
-# Dragon book, page 238
-
-%token a b c d e
-
-%%
-
-S: a A d | b B d | a B e | b A e ;
-
-A: c ;
-B: c ;
diff --git a/taccle/examples/reduce_reduce.tac b/taccle/examples/reduce_reduce.tac
deleted file mode 100644
index 4de6556..0000000
--- a/taccle/examples/reduce_reduce.tac
+++ /dev/null
@@ -1,20 +0,0 @@
-# $Id: reduce_reduce.tac,v 1.1 2004/08/18 23:53:43 tang Exp $
-
-# This is an example of where a lookahead of just one symbol is
-# insufficient. taccle finds a reduce/reduce conflict and resolves it
-# by giving precedence to the first rule (cart_animal -> horse).
-#
-# Reference:
-# lex & yacc, page 55
-
-%token and cart plow horse goat ox
-
-%%
-
-phrase: cart_animal and cart
- | work_animal and plow
- ;
-
-cart_animal: horse | goat ;
-
-work_animal: horse | ox ;
diff --git a/taccle/examples/reduce_reduce2.tac b/taccle/examples/reduce_reduce2.tac
deleted file mode 100644
index 53c6d3b..0000000
--- a/taccle/examples/reduce_reduce2.tac
+++ /dev/null
@@ -1,15 +0,0 @@
-# $Id: reduce_reduce2.tac,v 1.1 2004/08/18 23:53:43 tang Exp $
-
-# Here is another reduce/reduce conflict.
-#
-# Reference:
-# lex & yacc, page 225
-
-%token A B C Z
-
-%%
-
-start: A B x Z | y Z;
-
-x: C;
-y: A B C;
diff --git a/taccle/examples/shift_reduce.tac b/taccle/examples/shift_reduce.tac
deleted file mode 100644
index 8905e26..0000000
--- a/taccle/examples/shift_reduce.tac
+++ /dev/null
@@ -1,17 +0,0 @@
-# $Id: shift_reduce.tac,v 1.1 2004/08/18 23:53:43 tang Exp $
-
-# This is an example of a shift/reduce conflict. Eventually I will
-# add operator precedence and associativity, but for now taccle simply
-# gives higher precedence to shifts.
-#
-# Reference:
-# lex & yacc, pages 229-230 and 236
-
-%token TERMINAL
-
-%%
-
-expr: TERMINAL
- | expr '+' expr
- | expr '-' expr
- | expr '*' expr ;
diff --git a/taccle/examples/shift_reduce2.tac b/taccle/examples/shift_reduce2.tac
deleted file mode 100644
index c3ad0d3..0000000
--- a/taccle/examples/shift_reduce2.tac
+++ /dev/null
@@ -1,20 +0,0 @@
-# $Id: shift_reduce2.tac,v 1.1 2004/08/18 23:53:43 tang Exp $
-
-# Here is one final shift/reduce conflict. taccles resolves the
-# problem by giving precedence to a shift.
-#
-# Reference:
-# lex & yacc, pages 226-227
-
-%token A R
-
-%%
-
-start: x1
- | x2
- | y R;
-
-x1: A R;
-x2: A z;
-y: A;
-z: R;
diff --git a/taccle/examples/simple_calculator.tac b/taccle/examples/simple_calculator.tac
deleted file mode 100644
index ea104aa..0000000
--- a/taccle/examples/simple_calculator.tac
+++ /dev/null
@@ -1,36 +0,0 @@
-# $Id: simple_calculator.tac,v 1.1 2004/08/18 23:53:43 tang Exp $
-
-# This example demonstrates symbol and synthesized values.
-
-%{
-#!/usr/bin/tclsh
-
-%}
-
-%token ID NEWLINE
-%start start
-
-%%
-
-start: E NEWLINE { puts "Result is $1" }
- | E { puts "Result is $1" }
- ;
-
-E: E '+' T { set _ [expr {$1 + $3}] }
- | E '-' T { set _ [expr {$1 - $3}] }
- | T
- ;
-
-T: T '*' F { set _ [expr {$1 * $3}] }
- | T '/' F { set _ [expr {$1 / $3}] }
- | F
- ;
-
-F: '(' E ')' { set _ $2 }
- | ID { set _ $::yylval }
- ;
-
-%%
-
-source simple_scanner.tcl
-yyparse
diff --git a/taccle/examples/simple_expressions.tac b/taccle/examples/simple_expressions.tac
deleted file mode 100644
index 7cc1f58..0000000
--- a/taccle/examples/simple_expressions.tac
+++ /dev/null
@@ -1,30 +0,0 @@
-# $Id: simple_expressions.tac,v 1.1 2004/08/18 23:53:43 tang Exp $
-
-# This examples takes simple_grammar and adds actions to each rule.
-
-%{
-#!/usr/bin/tclsh
-
-%}
-
-%token ID
-%start E
-
-%%
-
-E: E '+' T { puts "E + T" }
- | T { puts "T" }
- ;
-
-T: T '*' F { puts "T * F" }
- | F { puts "F" }
- ;
-
-F: '(' E ')' { puts "(E)" }
- | ID { puts "id" }
- ;
-
-%%
-
-source simple_scanner.tcl
-yyparse
diff --git a/taccle/examples/simple_grammar.tac b/taccle/examples/simple_grammar.tac
deleted file mode 100644
index ea354d9..0000000
--- a/taccle/examples/simple_grammar.tac
+++ /dev/null
@@ -1,27 +0,0 @@
-# $Id: simple_grammar.tac,v 1.1 2004/08/18 23:53:43 tang Exp $
-
-%{
-
-source simple_scanner.tcl
-
-%}
-
-%token ID
-
-%%
-
-E: E '+' T
- | T
- ;
-
-T: T '*' F
- | F
- ;
-
-F: '(' E ')'
- | ID
- ;
-
-%%
-
-yyparse
diff --git a/taccle/examples/simple_scanner.fcl b/taccle/examples/simple_scanner.fcl
deleted file mode 100644
index 99ff67f..0000000
--- a/taccle/examples/simple_scanner.fcl
+++ /dev/null
@@ -1,16 +0,0 @@
-# $Id: simple_scanner.fcl,v 1.2 2004/08/18 23:55:31 tang Exp $
-
-%{
-source "simple_calculator.tab.tcl"
-%}
-
-%option interactive
-
-number [0-9]+
-
-%%
-
-{number} { set ::yylval $yytext; return $::ID }
-\n { return $::NEWLINE }
-\s # ignore whitespace
-. { set ::yylval $yytext; return $yytext }
diff --git a/taccle/taccle.tcl b/taccle/taccle.tcl
deleted file mode 100644
index d97a607..0000000
--- a/taccle/taccle.tcl
+++ /dev/null
@@ -1,1726 +0,0 @@
-#!/usr/bin/tclsh
-
-# $Id: taccle.tcl,v 1.6 2005/03/17 20:42:21 tang Exp $
-
-set TACCLE_VERSION 1.3
-
-# no yydebug
-# no YYDEBUG
-# no yyerrok
-# no YYRECOVERING
-# add %define parse.error verbose
-
-#//#
-# Taccle is another compiler compiler written in pure Tcl. reads a
-# <em>taccle specification file</em> to generate pure Tcl code that
-# implements an LALR(1) parser. See the {@link README} file for
-# complete instructions. Additional information may be found at
-# {@link http://mini.net/tcl/taccle}.
-#
-# @author Jason Tang (tang@jtang.org)
-#//#
-
-# Process a definition on a single line, either a literal block or a
-# <code>%</code> directive.
-#
-# @param line text of a definition
-proc handle_defs {line} {
- # trim whitespace and remove any comments
- set line [strip_comments [string trim $line]]
- if {$line == ""} {
- return
- }
- if {$line == "%\{"} {
- handle_literal_block
- } else {
- # extract the keyword to the left of the first space and the
- # arguments (if any) to the right
- if {[regexp -line {^(\S+)\s+(.*)} $line foo keyword args] == 0} {
- set keyword $line
- set args ""
- }
- switch -- $keyword {
- "%token" {
- if {!$::parse_error} {
- foreach {token_name} [split $args] {
- if {$token_name != ""} {
- # add the terminal token to the table
- add_token $token_name $::TERMINAL 0 0 nonassoc
- }
- }
- } else {
- foreach {token_name token_title} [split $args] {
- if {$token_name != {}} {
- # add the terminal token to the table
- set tt {}
- if {$token_title != {}} {
- set tt $token_title
- } else {
- set tt [string trimright $token_name {_}]
- }
- add_token $token_name $::TERMINAL 0 0 nonassoc $tt
- }
- }
- }
- }
- "%left" -
- "%right" -
- "%nonassoc" {
- handle_precedence $::next_precedence [string range $keyword 1 end] $args
- incr ::next_precedence
- }
- "%start" {
- if {$args == ""} {
- taccle_error "Must supply a token with %start" $::PARAM_ERROR
- }
- set ::start_symbol $args
- }
- "%define" {
- if {$args == {parse.error verbose}} {
- set ::parse_error 1
- }
- }
- default {
- taccle_error "Unknown declaration \"$keyword\"" $::SYNTAX_ERROR
- }
- }
- }
-}
-
-# Start reading from the source file and copy everything between ^%\{$
-# to ^%\}$ to the destination file.
-proc handle_literal_block {} {
- set end_defs 0
- set lines_in_block 0
- while {$end_defs == 0} {
- if {[gets $::src line] < 0} {
- taccle_error "No terminator to verbatim section found " $::SYNTAX_ERROR
- } elseif {[string trim $line] == "%\}"} {
- set end_defs 1
- } else {
- puts $::dest $line
- }
- incr lines_in_block
- }
- incr ::line_count $lines_in_block
-}
-
-# Assigns operator precedence to each token in $tokens. Adds the
-# token as a TERMINAL to the token table.
-#
-# @param level integer value for token precedence
-# @param direction direction of precedence, either <var>left</var>,
-# <var>right</var>, or <var>nonassoc</var>
-# @param tokens list of terminals to which assign precedence
-proc handle_precedence {level direction tokens} {
- foreach token $tokens {
- if {[regexp -- {\A\'(.)\'\Z} $token foo c]} {
- add_token $c $::TERMINAL 1 $level $direction
- } else {
- add_token $token $::TERMINAL 0 $level $direction
- }
- }
-}
-
-# The nine steps to actually building a parser, given a string buffer
-# containing all of the rules.
-#
-# @param rules_buf a very large string consisting of all of the
-# grammar's rules
-proc build_parser {rules_buf} {
- # setp 0: parse the entire rules buffer into separate productions
- handle_rules_buf $rules_buf
-
- # step 1: rewrite the grammar, then augment it
- rewrite_grammar
-
- # step 2: determine which non-terminals are nullable
- generate_nullable_table
-
- # step 3: generate FIRST table for each element in the token table
- generate_first_table
-
- # step 4: now generate FOLLOW table for each element
- generate_follow_table
-
- # step 5: build canonical LR(1) table
- generate_lr1
-
- # step 6: combine cores into LALR(1) table
- generate_lalr1
-
- # step 7: wherever there exists a shift/reduce conflict, choose to
- # reduce wherever the precedence table dictates such
- resolve_precedences
-
- # step 8: check for infinite recursions
- check_recursions
-
- # step 9: finally take LALR(1) table and generate a state
- # transition matrix
- generate_lalr1_parse_table
-}
-
-# Parses the rules buffer, extracting each rule and adding
-# pseudo-rules wherever embedded actions exist.
-#
-# @param rules_buf remaining rules to handle
-proc handle_rules_buf {rules_buf} {
- # counts number of rules in the grammar
- # rule number 0 is reserved for the special augmentation S' -> S
- set ::rule_count 1
- set prev_lhs ""
-
- # keep track of pseudo-rules (used for embedded actions)
- set pseudo_count 1
-
- # add the special end marker
- set ::token_table("\$",t) $::TERMINAL
- set ::token_table("\$") 0
- set ::token_id_table(0) "\$"
- set ::token_id_table(0,t) $::TERMINAL
- set ::prec_table(0) 0
- set ::prec_table(0,dir) nonassoc
-
- # add the special error token
- add_token error $::TERMINAL 1 0 nonassoc
-
- while {[string length $rules_buf] > 0} {
- # consume blank lines
- if {[regexp -line -- {\A([[:blank:]]*\n)} $rules_buf foo blanks]} {
- set rules_buf [string range $rules_buf [string length $blanks] end]
- incr ::line_count
- continue
- }
- # extract left hand side
- if {[regexp -line -- {\A\s*(\w+)\s*:} $rules_buf foo lhs]} {
- add_token $lhs $::NONTERMINAL 0 0 nonassoc
- set prev_lhs $lhs
- } elseif {[regexp -line -- {\A\s*\|} $rules_buf foo]} {
- if {$prev_lhs == ""} {
- taccle_error "No previously declared left hand side" $::SYNTAX_ERROR
- }
- set lhs $prev_lhs
- } elseif {[regexp -line -- {\A\s*\Z} $rules_buf]} {
- # only whitespace left
- break
- } else {
- taccle_error "No left hand side found" $::SYNTAX_ERROR
- }
- set rules_buf [string range $rules_buf [string length $foo] end]
-
- # read the rule derivation, which is everything up to a bar or
- # semicolon
- set rhs ""
- set action ""
- set done_deriv 0
- set num_lines 0
- while {$rules_buf != "" && $done_deriv != 1} {
- switch -- [string index $rules_buf 0] {
- | { set done_deriv 1 }
- ; {
- set done_deriv 1
- set prev_lhs ""
- set rules_buf [string range $rules_buf 1 end]
- }
- "\n" {
- incr num_lines
- append rhs " "
- set rules_buf [string range $rules_buf 1 end]
- }
- ' {
- append rhs [string range $rules_buf 0 2]
- set rules_buf [string range $rules_buf 3 end]
- }
- \{ {
- # keep scanning until end of action found
- set a ""
- set rp 1
- set found_end 0
- while {!$found_end && $rp < [string length $rules_buf]} {
- set c [string index $rules_buf $rp]
- if {$c == "\}"} {
- if {[info complete $a]} {
- set found_end 1
- } else {
- append a "\}"
- }
- } elseif {$c == "\n"} {
- append a $c
- incr num_lines
- } else {
- append a $c
- }
- incr rp
- }
- if {!$found_end} {
- taccle_error "Unmatched `\{'" $::SYNTAX_ERROR
- }
- set action $a
- set rules_buf [string range $rules_buf $rp end]
- }
- default {
- set c [string index $rules_buf 0]
- if {$action != "" && ![string is space $c]} {
- # embedded action found; add a special rule for it
- set pseudo_name "@PSEUDO$pseudo_count"
- add_token $pseudo_name $::NONTERMINAL 0 0 nonassoc
- set ::rule_table($::rule_count,l) $pseudo_name
- set ::rule_table($::rule_count,d) ""
- set ::rule_table($::rule_count,dc) 0
- set ::rule_table($::rule_count,a) $action
- set ::rule_table($::rule_count,e) 0
- set ::rule_table($::rule_count,line) $::line_count
- append rhs "$pseudo_name "
- set action ""
- incr pseudo_count
- incr ::rule_count
- } else {
- append rhs $c
- set rules_buf [string range $rules_buf 1 end]
- }
- }
- }
- }
- if {$rules_buf == "" && $done_deriv == 0} {
- taccle_error "Rule does not terminate" $::SYNTAX_ERROR
- }
- set derivation [string trim $rhs]
- set deriv_list ""
- set deriv_count 0
- set prec_next 0
- foreach token [split $derivation] {
- if {$prec_next} {
- # check that argument to %prec is a terminal symbol
- if {![info exists ::token_table($token)] || \
- $::token_table($token,t) != $::TERMINAL} {
- taccle_error "Argument to %prec is not a terminal symbol" $::GRAMMAR_ERROR
- }
- set ::rule_table($::rule_count,prec) $::token_table($token)
- set prec_next 0
- continue
- }
- if {$token == "%prec"} {
- set prec_next 1
- continue
- }
- if {[regexp -- {\A\'(.)\'\Z} $token foo c]} {
- add_token $c $::TERMINAL 1 0 nonassoc
- set token $c
- }
- if {$token != ""} {
- if {[string range $token 0 6] == "@PSEUDO"} {
- set ::rule_table([expr {$::rule_count - 1}],e) $deriv_count
- }
-
- lappend deriv_list $token
- incr deriv_count
- }
- }
- if {$prec_next} {
- taccle_error "%prec modifier has no associated terminal symbol" $::PARAM_ERROR
- }
- incr ::line_count $num_lines
- set ::rule_table($::rule_count,l) $lhs
- set ::rule_table($::rule_count,d) $deriv_list
- set ::rule_table($::rule_count,dc) [llength $deriv_list]
- set ::rule_table($::rule_count,a) $action
- set ::rule_table($::rule_count,line) $::line_count
- incr ::rule_count
- }
-}
-
-# Post-process the grammar by augmenting it and and replacing all
-# tokens with their id values.
-proc rewrite_grammar {} {
- set ::rule_table(0,l) "start'"
- if {[info exists ::start_symbol]} {
- if {![info exists ::token_table($::start_symbol)]} {
- taccle_error "Token given by %start does not exist" $::PARAM_ERROR
- }
- if {$::token_table($::start_symbol,t) == $::TERMINAL} {
- taccle_error "Token given by %start is a terminal." $::PARAM_ERROR
- }
- set ::rule_table(0,d) $::start_symbol
- } else {
- set ::rule_table(0,d) $::rule_table(1,l)
- }
- set ::rule_table(0,dc) 1
- set ::rule_table(0,prec) 0
- set ::start_token_id [add_token "start'" $::NONTERMINAL 0 0 nonassoc]
- set ::token_list [lsort -command tokid_compare $::token_list]
-
- # now go through grammar and replace all token names with their id
- # number
- for {set i 0} {$i < $::rule_count} {incr i} {
- set ::rule_table($i,l) $::token_table($::rule_table($i,l))
- set new_deriv_list ""
- foreach deriv $::rule_table($i,d) {
- if {![info exists ::token_table($deriv)]} {
- taccle_error "Symbol $deriv used, but is not defined as a token and has no rules." $::GRAMMAR_ERROR
- }
- lappend new_deriv_list $::token_table($deriv)
- }
- set ::rule_table($i,d) $new_deriv_list
- # set the rule's precedence only if it was not already specified
- if {![info exist ::rule_table($i,prec)]} {
- set ::rule_table($i,prec) [get_prec $new_deriv_list]
- }
- }
-
- # check for unused tokens
- set used_list [concat "error" [recurse_dfs $::start_token_id ""]]
- foreach tok_id $::token_list {
- if {[lsearch -exact $used_list $tok_id] == -1} {
- taccle_warn "Token $::token_id_table($tok_id) unused."
- } else {
- lappend ::used_token_list $tok_id
- }
- }
- # add to the used token list {$} but /not/ start'
- set ::used_token_list [concat [lrange $::used_token_list 0 end-1] \
- $::token_table("\$")]
-}
-
-# Determine which non-terminals are nullable. Any terminal which can
-# be simplified to just an epsilon transition is nullable.
-proc generate_nullable_table {} {
- set nullable_found 1
- while {$nullable_found} {
- set nullable_found 0
- foreach tok_id $::token_list {
- if {[info exist ::nullable_table($tok_id)]} {
- continue
- }
- if {$::token_id_table($tok_id,t) == $::TERMINAL} {
- set ::nullable_table($tok_id) 0
- continue
- }
- for {set i 0} {$i < $::rule_count} {incr i} {
- set lhs $::rule_table($i,l)
- if {$lhs != $tok_id} {
- continue
- }
- set rhs [lindex $::rule_table($i,d) 0]
- if {$rhs == ""} {
- set ::nullable_table($lhs) 1
- set nullable_found 1
- } else {
- set nullable 0
- foreach r $rhs {
- if {[info exists ::nullable_table($r)]} {
- set nullable $::nullable_table($r)
- break
- }
- }
- if {$nullable} {
- set ::nullable_table($lhs) 1
- set nullable_found 1
- }
- }
- }
- }
- }
- foreach tok_id $::token_list {
- if {![info exist ::nullable_table($tok_id)]} {
- set ::nullable_table($tok_id) 0
- }
- }
-}
-
-# Generate the table of FIRST symbols for the grammar.
-proc generate_first_table {} {
- foreach tok_id $::token_list {
- generate_first_recurse $tok_id ""
- }
-}
-
-# Recursively calculates the FIRST set for a given token, handling
-# nullable terminals as well.
-#
-# @param tok_id id of token to generate FIRST set
-# @param history list of tokens already examined
-# @return list of tokens (including -1 for epsilon) in tok_id's FIRST set
-proc generate_first_recurse {tok_id history} {
- if {[lsearch -exact $history $tok_id] >= 0} {
- return ""
- }
- if {[info exists ::first_table($tok_id)]} {
- return $::first_table($tok_id)
- }
- if {$::token_id_table($tok_id,t) == $::TERMINAL} {
- set ::first_table($tok_id) $tok_id
- return $tok_id
- }
- # FIRST = union of all first non-terminals on rhs. if a
- # non-terminal is nullable, then add FIRST of the following
- # terminal to the FIRST set. keep repeating while nullable.
- set first_union ""
- for {set i 0} {$i < $::rule_count} {incr i} {
- set lhs $::rule_table($i,l)
- if {$lhs != $tok_id} {
- continue
- }
- if {$::rule_table($i,dc) == 0} {
- # empty rule, so add the special epsilon marker -1 to the FIRST set
- lappend first_union -1
- } else {
- foreach r $::rule_table($i,d) {
- lconcat first_union [generate_first_recurse $r [concat $history $tok_id]]
- if {$::nullable_table($r) == 0} {
- break
- }
- }
- }
- }
- set ::first_table($tok_id) [lsort -increasing -unique $first_union]
- return $first_union
-}
-
-# Generate the table of FOLLOW symbols for the grammar.
-proc generate_follow_table {} {
- set ::follow_table($::token_table(start')) $::token_table("\$")
- foreach tok_id $::token_list {
- generate_follow_recurse $tok_id ""
- }
-}
-
-# Recursively calculates the FOLLOW set for a given token, handling
-# nullable terminals as well.
-#
-# @param tok_id id of token to generate FOLLOW set
-# @param history list of tokens already examined
-# @return list of tokens in tok_id's FOLLOW set
-proc generate_follow_recurse {tok_id history} {
- if {[lsearch -exact $history $tok_id] >= 0} {
- return ""
- }
- if {[info exists ::follow_table($tok_id)]} {
- return $::follow_table($tok_id)
- }
- set follow_union ""
- for {set i 0} {$i < $::rule_count} {incr i} {
- # if the token is on the rhs of the rule then FOLLOW includes
- # the FIRST of the token following it; if at end of rule (or
- # can be derived to end of rule) then FOLLOW includes the
- # FOLLOW of the lhs
- set rhs $::rule_table($i,d)
- for {set j [expr {$::rule_table($i,dc) - 1}]} {$j >= 0} {incr j -1} {
- set r [lindex $rhs $j]
- if {$r != $tok_id} {
- continue
- }
- set k [expr {$j + 1}]
- set gamma [lindex $rhs $k]
- if {$gamma != ""} {
- lconcat follow_union [all_but_eps $::first_table($gamma)]
- }
- set at_end_of_list 1
- while {$k < $::rule_table($i,dc)} {
- if {![has_eps $::first_table([lindex $rhs $k])]} {
- set at_end_of_list 0
- break
- }
- incr k
- }
- if {$at_end_of_list} {
- set lhs $::rule_table($i,l)
- lconcat follow_union [generate_follow_recurse $lhs [concat $history $tok_id]]
- }
- }
- }
- set ::follow_table($tok_id) [lsort -increasing -unique $follow_union]
- return $follow_union
-}
-
-# Construct a canonical LR(1) by taking the start rule (rule 0) and
-# successively adding closures/states until no more new states.
-proc generate_lr1 {} {
- # first add start rule to the closure list
- set first_item [list [list 0 $::token_table("\$") 0]]
- set first_closure [add_closure $first_item 0 1]
- set ::lr1_table(0) [concat $first_item $first_closure]
-
- # used to keep count of total number of states produced by LR(1)
- set ::next_lr1_state 1
-
- # keep generating items until none remain
- for {set state_pointer 0} {$state_pointer < $::next_lr1_state} {incr state_pointer} {
- # iterate through each token, adding transitions to new state(s)
- set trans_list ""
- set oldclosure_list $::lr1_table($state_pointer)
- foreach tok_id $::token_list {
- set todo_list ""
- set working_list ""
- foreach item $oldclosure_list {
- foreach {rule lookahead position} $item {}
- if {$position >= $::rule_table($rule,dc)} {
- # at end of rule; don't expand (and remove it
- # from the list)
- continue
- }
- set nexttoken [lindex $::rule_table($rule,d) $position]
- if {$nexttoken == $tok_id} {
- # item's next token matches the one currently
- # saught; add it to the working list
- lappend working_list $item
- } else {
- # item was not used yet -- add it back to the
- # todo list
- lappend todo_list $item
- }
- }
- set oldclosure_list $todo_list
- if {$working_list != ""} {
- set new_closure ""
- foreach item $working_list {
- # move pointer ahead to the next position
- foreach {rule lookahead position} $item {}
- incr position
- set newitem [list $rule $lookahead $position]
- lappend new_closure $newitem
- }
- set new_closure [concat $new_closure \
- [add_closure $new_closure 0 [llength $working_list]]]
- # add a transition out of this state -- to a
- # previously examined state if possible, or else
- # create a new state with my new closure
- set next_state -1
- for {set i 0} {$i < $::next_lr1_state} {incr i} {
- if {[lsort $::lr1_table($i)] == [lsort $new_closure]} {
- set next_state $i
- break
- }
- }
- if {$next_state == -1} {
- # create a new state
- set ::lr1_table($::next_lr1_state) $new_closure
- lappend trans_list [list $tok_id $::next_lr1_state]
- incr ::next_lr1_state
- } else {
- # reuse existing state
- lappend trans_list [list $tok_id $next_state]
- }
-
- }
- }
- set ::lr1_table($state_pointer,trans) [lsort -command tokid_compare -index 0 $trans_list]
- }
-}
-
-# Successively add closures from LR(1) table to LALR(1) table merging
-# kernels with similar cores.
-proc generate_lalr1 {} {
- for {set i 0} {$i < $::next_lr1_state} {incr i} {
- # as matching closures are found change their mapping here
- set state_mapping_table($i) $i
- }
- # go through all elements of LR(1) table and generate their cores.
- # this will make future comparisons easier.
- for {set i 0} {$i < $::next_lr1_state} {incr i} {
- set core ""
- foreach item $::lr1_table($i) {
- lappend core [list [lindex $item 0] [lindex $item 2]]
- }
- set core_table($i) [lsort $core]
- }
- lappend new_lalr_states(0) 0
- for {set i 1} {$i < $::next_lr1_state} {incr i} {
- set found_matching 0
- for {set j 0} {$j < $i} {incr j} {
- if {$core_table($i) == $core_table($j)} {
- # found a matching core -- change its mapping
- set state_mapping_table($i) $state_mapping_table($j)
- # because this state is being eliminated, shuffle all
- # future states down one
- for {set k [expr {$i + 1}]} {$k < $::next_lr1_state} {incr k} {
- incr state_mapping_table($k) -1
- }
- # merge state $i into state $j
- lappend new_lalr_states($j) $i
- set found_matching 1
- break
- }
- }
- if {!$found_matching} {
- lappend new_lalr_states($i) $i
- }
- }
- # now copy items from LR(1) table to LALR(1) table
- set ::next_lalr1_state 0
- for {set i 0} {$i < $::next_lr1_state} {incr i} {
- if {![info exists new_lalr_states($i)]} {
- # state no longer exists (it got merged into another one)
- continue
- }
- # first merge together all lookaheads
- set ::lalr1_table($::next_lalr1_state) $::lr1_table([lindex $new_lalr_states($i) 0])
- foreach state [lrange $new_lalr_states($i) 1 end] {
- set ::lalr1_table($::next_lalr1_state) \
- [merge_closures $::lalr1_table($::next_lalr1_state) $::lr1_table($state)]
- }
- # now rewrite the transition table
- foreach trans $::lr1_table($i,trans) {
- foreach {symbol new_state} $trans {}
- lappend ::lalr1_table($::next_lalr1_state,trans) \
- [list $symbol $state_mapping_table($new_state)]
- }
- incr ::next_lalr1_state
- }
-}
-
-# Takes the LALR(1) table and resolves precedence issues by removing
-# transitions whenever the precedence values indicate a reduce instead
-# of a shift.
-proc resolve_precedences {} {
- for {set i 0} {$i < $::next_lalr1_state} {incr i} {
- # scan through all kernel items that are at the end of their
- # rule. for those, use the precedence table to decide to keep
- # a transition (a shift) or not (a reduce)
- foreach item $::lalr1_table($i) {
- foreach {rule lookahead position} $item {}
- if {$position < $::rule_table($rule,dc) || \
- ![info exist ::lalr1_table($i,trans)]} {
- continue
- }
- set rule_prec_tok $::rule_table($rule,prec)
- set rule_prec_level $::prec_table($rule_prec_tok)
- set rule_prec_dir $::prec_table($rule_prec_tok,dir)
- set new_trans ""
- foreach trans $::lalr1_table($i,trans) {
- set trans_tok [lindex $trans 0]
- if {[lsearch $lookahead $trans_tok] == -1} {
- lappend new_trans $trans
- continue
- }
- set trans_tok_level $::prec_table($trans_tok)
- set trans_tok_dir $::prec_table($trans_tok,dir)
- if {$rule_prec_dir == "nonassoc" || \
- $trans_tok_dir == "nonassoc" || \
- $rule_prec_level < $trans_tok_level || \
- ($rule_prec_level == $trans_tok_level && $rule_prec_dir == "right")} {
- # precedence says to shift, so keep this transition
- lappend new_trans $trans
- } else {
- taccle_warn "Conflict in state $i between rule $rule and token \"$trans_tok\", resolved as reduce."
- }
- }
- set ::lalr1_table($i,trans) $new_trans
- }
- }
-}
-
-# Check if the grammar contains any infinite recursions.
-proc check_recursions {} {
- set cleared ""
- for {set i 0} {$i < $::next_lalr1_state} {incr i} {
- if {[lsearch -exact $cleared $i] >= 0} {
- continue
- }
- set cleared [get_cleared $i {} $cleared]
- }
-}
-
-# Recursively performs a DFS search through the LALR(1) table to check
-# for cycles. In each node check if the position is at the end of any
-# rule; this marks the node is "reducible" and it is added to the
-# 'cleared' list. Otherwise recurse on each terminal transitioning
-# out of this state. If a state and all of its transitions are not
-# reducible then abort with an error.
-#
-# @param state which state within the LALR(1) table to examine
-# @param history a list of states so far examined on this pass
-# @param cleared a list of states which have already been verified as reducible
-#
-# @return a new cleared list, or an empty list of this state is not reducible
-proc get_cleared {state history cleared} {
- if {[lsearch -exact $cleared $state] >= 0} {
- return $cleared
- }
- if {[lsearch -exact $history $state] >= 0} {
- return {}
- }
- # check if any items in this closure are reducible; if so then
- # this state passes
- set token -1
- foreach item $::lalr1_table($state) {
- foreach {rule lookahead position} $item {}
- if {$position == $::rule_table($rule,dc)} {
- return [concat $cleared $state]
- }
- if {$position == 0} {
- set token $::rule_table($rule,l)
- }
- }
- # recursively check all terminals transitioning out of this state;
- # if none of the new states eventually reduce then report this as
- # a cycle
- foreach trans $::lalr1_table($state,trans) {
- foreach {tok_id nextstate} $trans {}
- if {$::token_id_table($tok_id,t) == $::TERMINAL} {
- set retval [get_cleared $nextstate [concat $history $state] $cleared]
- if {[llength $retval] > 0} {
- return [concat $retval $state]
- }
- }
- }
- if {$token == -1} {
- puts stderr "OOPS: should not have gotten here!"
- exit -1
- }
- set ::line_count $::rule_table($rule,line)
- taccle_error "Token $::token_id_table($token) appears to recurse infinitely" $::GRAMMAR_ERROR
-}
-
-# Takes the LALR(1) table and generates the LALR(1) transition table.
-# For terminals do a shift to the new state. For non-terminals reduce
-# when the next token is a lookahead. Detect shift/reduce conflicts;
-# resolve by giving precedence to shifting. Detect reduce/reduce
-# conflicts and resolve by reducing to the first rule found.
-proc generate_lalr1_parse_table {} {
- for {set i 0} {$i < $::next_lalr1_state} {incr i} {
- foreach item $::lalr1_table($i) {
- foreach {rule lookahead position} $item {}
- if {$position >= $::rule_table($rule,dc)} {
- if {$rule == 0} {
- set command "accept"
- } else {
- set command "reduce"
- }
- set token_list $lookahead
- # target for a reduce/accept is which rule to use
- # while accepting
- set target $rule
- } else {
- set token [lindex $::rule_table($rule,d) $position]
- if {$::token_id_table($token,t) == $::TERMINAL} {
- set command "shift"
- } else {
- set command "goto"
- }
- set token_list [list $token]
- # target for a shift/goto is the new state to move to
- set target ""
- foreach trans $::lalr1_table($i,trans) {
- foreach {tok_id nextstate} $trans {}
- if {$tok_id == $token} {
- set target $nextstate
- break
- }
- }
- # this token must have been consumed by shift/reduce
- # conflict resolution through the precedence table
- # (above)
- if {$target == ""} {
- continue
- }
- }
-
- foreach token $token_list {
- # check for shift/reduce conflicts
- if {[info exists ::lalr1_parse($i:$token)] && \
- $::lalr1_parse($i:$token) != $command} {
- # shifting takes precedence, so overwrite table
- # entry if needed
- if {$::lalr1_parse($i:$token) == "shift"} {
- taccle_warn "Shift/Reduce error in state $i, token \"$::token_id_table($token)\", resolved by keeping shift."
- break
- }
- taccle_warn "Shift/Reduce error in state $i between rule $::lalr1_parse($i:$token,target) and token \"$::token_id_table($token)\", resolved as shift."
- unset ::lalr1_parse($i:$token,target)
- }
- set ::lalr1_parse($i:$token) $command
- # check for reduce/reduce conflicts
- # (theoretically it is impossible to have a shift/shift error)
- if {[info exists ::lalr1_parse($i:$token,target)] && \
- $::lalr1_parse($i:$token,target) != $target} {
- taccle_warn "Reduce/Reduce error in state $i, token \"$::token_id_table($token)\", resolved by reduce to rule $::lalr1_parse($i:$token,target)."
- break
- }
- set ::lalr1_parse($i:$token,target) $target
- }
-
- }
- }
-}
-
-######################################################################
-# utility routines that actually handle writing parser to output files
-
-# Writes to the destination file utility functions called by yyparse
-# as well as by user-supplied actions.
-proc write_parser_utils {} {
- puts $::dest "
-######
-# Begin autogenerated taccle (version $::TACCLE_VERSION) routines.
-# Although taccle itself is protected by the GNU Public License (GPL)
-# all user-supplied functions are protected by their respective
-# author's license. See http://mini.net/tcl/taccle for other details.
-######
-
-namespace eval ${::p} \{
- variable yylval {}
- variable table
- variable rules
- variable token {}
- variable yycnt 0
- variable yyerr 0
- variable save_state 0
-
- namespace export yylex
-\}
-
-proc ${::p}::YYABORT \{\} \{
- return -code return 1
-\}
-
-proc ${::p}::YYACCEPT \{\} \{
- return -code return 0
-\}
-
-proc ${::p}::YYERROR \{\} \{
- variable yyerr
- set yyerr 1
-\}
-
-proc ${::p}::yyclearin \{\} \{
- variable token
- variable yycnt
- set token {}
- incr yycnt -1
-\}
-
-proc ${::p}::yyerror \{s\} \{
- puts stderr \$s
-\}
-
-proc ${::p}::setupvalues \{stack pointer numsyms\} \{
- upvar 1 1 y
- set y \{\}
- for \{set i 1\} \{\$i <= \$numsyms\} \{incr i\} \{
- upvar 1 \$i y
- set y \[lindex \$stack \$pointer\]
- incr pointer
- \}
-\}
-
-proc ${::p}::unsetupvalues \{numsyms\} \{
- for \{set i 1\} \{\$i <= \$numsyms\} \{incr i\} \{
- upvar 1 \$i y
- unset y
- \}
-\}"
-}
-
-# Writes to the destination file the actual parser including LALR(1)
-# table.
-proc write_parser {} {
- write_array $::dest ${::p}::table [array get ::lalr1_parse]
- write_array $::dest ${::p}::rules [array get ::rule_table *l]
- write_array $::dest ${::p}::rules [array get ::rule_table *dc]
- write_array $::dest ${::p}::rules [array get ::rule_table *e]
- if {$::parse_error} {
- write_array $::dest ${::p}::lr1_table [array get ::lr1_table]
- write_array $::dest ${::p}::token_id_table [array get ::token_id_table]
- }
-
- puts $::dest "\nproc ${::p}::yyparse {} {
- variable yylval
- variable table
- variable rules
- variable token
- variable yycnt
- variable lr1_table
- variable token_id_table
- variable yyerr
- variable save_state
-
- set yycnt 0
- set state_stack {0}
- set value_stack {{}}
- set token \"\"
- set accepted 0
- set yyerr 0
- set save_state 0
-
- while {\$accepted == 0} {
- set state \[lindex \$state_stack end\]
- if {\$token == \"\"} {
- set yylval \"\"
- set token \[yylex\]
- set buflval \$yylval
- if {\$token>0} {
- incr yycnt
- }
- }
- if {!\[info exists table(\$state:\$token)\] || \$yyerr} {
- if {!\$yyerr} {
- set save_state \$state
- }
- \# pop off states until error token accepted
- while {\[llength \$state_stack\] > 0 && \\
- !\[info exists table(\$state:error)]} {
- set state_stack \[lrange \$state_stack 0 end-1\]
- set value_stack \[lrange \$value_stack 0 \\
- \[expr {\[llength \$state_stack\] - 1}\]\]
- set state \[lindex \$state_stack end\]
- }
- if {\[llength \$state_stack\] == 0} {"
- if {$::parse_error} {
-puts $::dest "
- set rr { }
- if {\[info exists lr1_table(\$save_state,trans)\] && \[llength \$lr1_table(\$save_state,trans)\] >= 1} {
- foreach trans \$lr1_table(\$save_state,trans) {
- foreach {tok_id nextstate} \$trans {
- set ss \$token_id_table(\$tok_id,title)
- if {\$ss != {}} {
- append rr \"\$ss, \"
- }
- }
- }
- }
- set rr \[string trimleft \$rr { }\]
- set rr \[string trimright \$rr {, }\]
- yyerror \"parse error, expecting: \$rr\"
-"
- } else {
-puts $::dest "
- yyerror \"parse error\"
-"
- }
-puts $::dest "
- return 1
- }
- lappend state_stack \[set state \$table(\$state:error,target)\]
- lappend value_stack {}
- \# consume tokens until it finds an acceptable one
- while {!\[info exists table(\$state:\$token)]} {
- if {\$token == 0} {
- yyerror \"end of file while recovering from error\"
- return 1
- }
- set yylval {}
- set token \[yylex\]
- set buflval \$yylval
- }
- continue
- }
- switch -- \$table(\$state:\$token) {
- shift {
- lappend state_stack \$table(\$state:\$token,target)
- lappend value_stack \$buflval
- set token \"\"
- }
- reduce {
- set rule \$table(\$state:\$token,target)
- set ll \$rules(\$rule,l)
- if \{\[info exists rules(\$rule,e)\]\} \{
- set dc \$rules(\$rule,e)
- \} else \{
- set dc \$rules(\$rule,dc)
- \}
- set stackpointer \[expr {\[llength \$state_stack\]-\$dc}\]
- setupvalues \$value_stack \$stackpointer \$dc
- set _ \$1
- set yylval \[lindex \$value_stack end\]
- switch -- \$rule {"
- for {set i 0} {$i < $::rule_count} {incr i} {
- if {[info exists ::rule_table($i,a)] && [string trim $::rule_table($i,a)] != ""} {
- puts $::dest " $i { $::rule_table($i,a) }"
- }
- }
-
- puts $::dest " }
- unsetupvalues \$dc
- # pop off tokens from the stack if normal rule
- if \{!\[info exists rules(\$rule,e)\]\} \{
- incr stackpointer -1
- set state_stack \[lrange \$state_stack 0 \$stackpointer\]
- set value_stack \[lrange \$value_stack 0 \$stackpointer\]
- \}
- # now do the goto transition
- lappend state_stack \$table(\[lindex \$state_stack end\]:\$ll,target)
- lappend value_stack \$_
- }
- accept {
- set accepted 1
- }
- goto -
- default {
- puts stderr \"Internal parser error: illegal command \$table(\$state:\$token)\"
- return 2
- }
- }
- }
- return 0
-}
-
-######
-# end autogenerated taccle functions
-######
-"
-}
-
-# Pretty-prints an array to a file descriptor. Code contributed by
-# jcw.
-#
-# @param fd file descriptor to which write the array
-# @param name name of array to declare within the file
-# @param values list of 2-ple values
-proc write_array {fd name values} {
- puts $fd "\narray set $name {"
- foreach {x y} $values {
- puts $fd " [list $x $y]"
- }
- puts $fd "}"
-}
-
-# Writes a header file that should be [source]d by the lexer.
-proc write_header_file {} {
- # scan through token_table and write out all non-implicit terminals
- foreach tok_id $::token_list {
- if {$::token_id_table($tok_id,t) == $::TERMINAL && \
- [string is integer $tok_id] && $tok_id >= 256} {
- set token $::token_id_table($tok_id)
- puts $::header "set ${token} $tok_id"
- }
- }
-}
-
-######################################################################
-# utility functions
-
-# Adds a token to the token table, checking that it does not already
-# exist. Returns the ID for the token (either old one if token
-# already exists or the newly assigned id value).
-#
-# @param token_name name of token to add
-# @param type type of token, either $::TERMINAL or $::NON_TERMINAL
-# @param implicit for $::TERMINAL tokens, 1 if the token is implicitly
-# declared
-# @param prec_level precedence level for token
-# @param prec_dir direction of precedence, either <var>left</var>,
-# <var>right</var>, or <var>nonassoc</var>
-# @return id value for this token
-proc add_token {token_name type implicit prec_level prec_dir {token_title {}}} {
- if {$token_name == "\$"} {
- taccle_error "The token '$' is reserved and may not be used in productions." $::SYNTAX_ERROR
- }
- if {$token_name == "\{" || $token_name == 0} {
- taccle_error "Literal value $token_name not allowed; define a %token instead" $::SYNTAX_ERROR
- }
- if [info exists ::token_table($token_name)] {
- set id $::token_table($token_name)
- if {$::token_table($token_name,t) == $type} {
- # token already exists; modify its precedence level if necessary
- if {$::prec_table($id) < $prec_level} {
- taccle_warn "Redefining precedence of $token_name"
- set ::prec_table($id) $prec_level
- set ::prec_table($id,dir) $prec_dir
- }
- set ::token_id_table($id,line) $::line_count
- return $id
- }
- set old_type [expr {$::token_table($token_name,t) == 1 ? "non-" : ""}]terminal
- taccle_error "Token $token_name already declared as a $old_type" $::GRAMMAR_ERROR
- }
- if $implicit {
- set ::token_table($token_name) $token_name
- set id $token_name
- } else {
- set ::token_table($token_name) $::next_token_id
- set id $::next_token_id
- incr ::next_token_id
- }
- set ::token_table($token_name,t) $type
- set ::token_id_table($id) $token_name
- set ::token_id_table($id,title) $token_title
- set ::token_id_table($id,t) $type
- set ::token_id_table($id,line) $::line_count
- lappend ::token_list $id
- set ::prec_table($id) $prec_level
- set ::prec_table($id,dir) $prec_dir
- return $id
-}
-
-# Adds closures to each item on $closure_list, starting from the index
-# $closure_pointer. Keeps adding closures until no more are added.
-#
-# @param closure_list list of closures to process
-# @param closure_pointer index into $closure_list to which start
-# @param original_length original size of $closure_list
-# @return list of closures added
-proc add_closure {closure_list closure_pointer original_length} {
- set orig_closure_pointer [expr {$closure_pointer + $original_length}]
- # keep adding items to the closure list until no more
- while {$closure_pointer < [llength $closure_list]} {
- set item [lindex $closure_list $closure_pointer]
- incr closure_pointer
- foreach {rule lookahead position} $item {}
- set mylength $::rule_table($rule,dc)
- if {$position < $mylength} {
- set nexttoken [lindex $::rule_table($rule,d) $position]
- if {$::token_id_table($nexttoken,t) == $::TERMINAL} {
- continue
- }
- # the lookahead is the FIRST of the rule /after/
- # nexttoken, or the current lookahead if at the end of
- # rule. if the next token is NULLABLE then the lookahead
- # includes that which FOLLOWS it
- set beta_pos [expr {$position + 1}]
- if {$beta_pos >= $mylength} {
- set nextfirst $lookahead
- } else {
- set n [lindex $::rule_table($rule,d) $beta_pos]
- set nextfirst [all_but_eps $::first_table($n)]
- if {$::nullable_table($n)} {
- set nextfirst [lsort -unique [concat $nextfirst $::follow_table($n)]]
- }
- }
- for {set rule_num 0} {$rule_num < $::rule_count} {incr rule_num} {
- if {$::rule_table($rule_num,l) != $nexttoken} {
- continue
- }
- set newitem [list $rule_num $nextfirst 0]
- set closure_list [merge_closures $closure_list [list $newitem]]
- }
- }
- }
- return [lrange $closure_list $orig_closure_pointer end]
-}
-
-# Recurses through all productions, recording which tokens are
-# actually used by the grammar. Tokens used to indicate a rule's
-# precedence are also added. Returns a list of tokens used; note that
-# this list can (and probably will) include duplicates.
-#
-# @param tok_id id of token to start
-# @param history list of tok_id's already examined
-# @return list of tokens used
-proc recurse_dfs {tok_id history} {
- if {[lsearch -exact $history $tok_id] >= 0} {
- return $history
- }
- if {$::token_id_table($tok_id,t) == $::TERMINAL} {
- return [concat $history $tok_id]
- }
- lappend history $tok_id
- for {set i 0} {$i < $::rule_count} {incr i} {
- set lhs $::rule_table($i,l)
- if {$lhs == $tok_id} {
- foreach deriv $::rule_table($i,d) {
- set history [recurse_dfs $deriv $history]
- }
- lconcat history $::rule_table($i,prec)
- }
- }
- return $history
-}
-
-# Given a line, returns a new line with any comments removed.
-#
-# @param line string with a possible comment
-# @return line with any commens removed
-proc strip_comments {line} {
- regexp -- {\A([^\#]*)} $line foo line
- return $line
-}
-
-# Combines unique elements of the two closures, also merging lookahead
-# symbols, and returns the new closure.
-#
-# @param closure1 first closure to merge
-# @param closure2 second closure to merge
-# @return $closure1 and $closure2 merged together, with duplicated removed
-proc merge_closures {closure1 closure2} {
- foreach item2 $closure2 {
- foreach {rule2 lookahead2 pos2} $item2 {}
- set found_match 0
- for {set i 0} {$i < [llength $closure1]} {incr i} {
- foreach {rule1 lookahead1 pos1} [lindex $closure1 $i] {}
- if {$rule2 == $rule1 && $pos2 == $pos1} {
- set lookahead1 [lsort -uniq [concat $lookahead1 $lookahead2]]
- lset closure1 $i [list $rule1 $lookahead1 $pos1]
- set found_match 1
- break
- }
- }
- if {!$found_match} {
- lappend closure1 $item2
- }
- }
- return $closure1
-}
-
-# Compares two token id values. If the two are integers then uses
-# their values for comparison; otherwise performs a string comparison.
-# Integer values are always "greater than" strings.
-#
-# @param a first token id
-# @param b second token id
-# @return -1 if <var>a</var> is less than <var>b</var>, 1 if
-# <var>a</var> is greater, otherwise 0
-proc tokid_compare {a b} {
- if {[string is integer $a] && [string is integer $b]} {
- if {$a < $b} {
- return -1
- } else {
- return 1
- }
- }
- if [string is integer $a] {
- return 1
- }
- if [string is integer $b] {
- return -1
- }
- return [string compare $a $b]
-}
-
-# Given a list, returns all everything in it except for any elements
-# of value "-1", which corresponds with the epsilon symbol.
-#
-# @param first_list list of tokens (presumably a FIRST set)
-# @return new list with all -1 values removed
-proc all_but_eps {first_list} {
- set new_list ""
- foreach tok $first_list {
- if {$tok != -1} {
- lappend new_list $tok
- }
- }
- return $new_list
-}
-
-# Returns truth if the element value "-1", corresponding with the
-# epsilon symbol, resides within the first list $first_list.
-#
-# @param first_list list of tokens (presumably a FIRST set)
-# @return 1 if $first_list has the element -1, 0 otherwise
-proc has_eps {first_list} {
- foreach tok $first_list {
- if {$tok == -1} {
- return 1
- }
- }
- return 0
-}
-
-# Given a list of tokens, returns the token with highest precedence
-# level.
-#
-# @param tok_list list of token ids
-# @return token with highest precedence; in case of tie returns first
-# one found
-proc get_prec {tok_list} {
- set prec_token 0
- foreach tok $tok_list {
- if {$::prec_table($tok) > $::prec_table($prec_token)} {
- set prec_token $tok
- }
- }
- return $prec_token
-}
-
-# Appends the first list a flattened version of the second, but only
-# if the second is non-empty.
-#
-# @param list first list
-# @param lists list of lists to append
-# @return new list
-proc lconcat {list lists} {
- upvar $list l
- if {$lists != ""} {
- set l [concat $l $lists]
- } else {
- return $l
- }
-}
-
-# Retrives a parameter from the options list. If no parameter exists
-# then abort with an error very reminisicent of C's
-# <code>getopt</code> function; otherwise increment
-# <code>param_num</code> by one.
-#
-# @param param_list list of parameters from the command line
-# @param param_num index into <code>param_list</code> to retrieve
-# @param param_name name of the parameter, used when reporting an error
-# @return the <code>$param_num</code>'th element into <code>$param_list</code>
-proc get_param {param_list param_num param_name} {
- upvar $param_num pn
- incr pn
- if {$pn >= [llength $param_list]} {
- puts stderr "taccle: option requires an argument -- $param_name"
- exit $::PARAM_ERROR
- }
- return [lindex $param_list $pn]
-}
-
-# Display to standard error a message, then abort the program.
-proc taccle_error {message returnvalue} {
- if {$::verbose != ""} {
- puts $::verbose "$message (line $::line_count)"
- }
- puts stderr "$message (line $::line_count)"
- exit $returnvalue
-}
-
-# Display a message to standard error if warnings enabled. Write to
-# the verbose output file if verbose is enabled.
-proc taccle_warn {message} {
- if {$::show_warnings} {
- puts stderr $message
- }
- if {$::verbose != ""} {
- puts $::verbose "$message"
- }
-}
-
-# Print to a particular channel a brief summary of taccle command line
-# options.
-proc print_taccle_help {chan} {
- puts $chan "taccle: a Tcl compiler compiler
-Usage: taccle \[options\] file
- file a taccle grammar specification file
-
-Options:
- -h print this help message and quit
- -d write extra output file containing Tcl code to be
- \[source\]d by yylex
- -o FILE specify name to write parser
- -v write extra output file containing descriptions of all
- parser states and extended information about conflicts
- -w display all warnings to standard error
- -p PREFIX change default yy prefix to PREFIX
- --version print taccle version and quit
-
-For more information see http://mini.net/tcl/taccle"
-}
-
-# Displays to standard out the taccle version, then exits program.
-proc print_taccle_version {} {
- puts "taccle version $::TACCLE_VERSION"
- exit 0
-}
-
-######################################################################
-# internal debugging routines
-
-proc print_symbol_table {} {
- puts $::verbose "token table:"
- puts $::verbose [format "%-5s %-10s %s" "id" "token" "type"]
- foreach tok_id $::token_list {
- set token $::token_id_table($tok_id)
- if {$::token_id_table($tok_id,t) == $::TERMINAL} {
- set type "terminal"
- } else {
- set type "non-terminal"
- }
- puts $::verbose [format "%-5s %-10s %s" $tok_id $token $type]
- }
-}
-
-proc print_rule_table {} {
- puts $::verbose "rule table:"
- for {set i 0} {$i < $::rule_count} {incr i} {
- set lhs $::token_id_table($::rule_table($i,l))
- set deriv_list ""
- foreach deriv $::rule_table($i,d) {
- lappend deriv_list $::token_id_table($deriv)
- }
- if {$deriv_list == ""} {
- set deriv_list "\#\# empty \#\#"
- }
- puts $::verbose [format "%3d: %-10s -> %s" $i $lhs $deriv_list]
- }
-}
-
-proc print_first_table {} {
- puts $::verbose "first table:"
- foreach tok_id $::token_list {
- if {$tok_id == -1} {
- continue
- }
- set token $::token_id_table($tok_id)
- set first_list ""
- foreach first $::first_table($tok_id) {
- if {$first >= 0} {
- lappend first_list $::token_id_table($first)
- }
- }
- puts $::verbose [format "%-10s => %s" $token $first_list]
- }
-}
-
-proc print_closure {closure_list indent dest} {
- foreach item $closure_list {
- foreach {rule lookahead position} $item {}
- set lhs $::token_id_table($::rule_table($rule,l))
- set deriv_list ""
- set i 0
- foreach deriv $::rule_table($rule,d) {
- if {$i == $position} {
- lappend deriv_list "."
- }
- lappend deriv_list $::token_id_table($deriv)
- incr i
- }
- if {$position == $::rule_table($rule,dc)} {
- lappend deriv_list "."
- }
- set lookahead_list ""
- foreach la $lookahead {
- lappend lookahead_list $::token_id_table($la)
- }
- puts $dest \
- [format "%*s %-10s -> %s, %s" $indent "" $lhs $deriv_list $lookahead_list]
- }
-}
-
-proc print_lr_table {table_name num_entries} {
- upvar $table_name table
- for {set i 0} {$i < $num_entries} {incr i} {
- puts $::verbose "state $i:"
- print_closure $table($i) 2 $::verbose
- if {[info exists table($i,trans)] && [llength $table($i,trans)] >= 1} {
- puts -nonewline $::verbose [format "%*s transitions:" 2 ""]
- foreach trans $table($i,trans) {
- foreach {tok_id nextstate} $trans {}
- puts -nonewline $::verbose " $::token_id_table($tok_id) => s$nextstate"
- }
- puts $::verbose ""
- }
- puts $::verbose ""
- }
-}
-
-proc print_lr1_table {} {
- puts $::verbose "lr(1) table:"
- print_lr_table ::lr1_table $::next_lr1_state
-}
-
-proc print_lalr1_table {} {
- puts $::verbose "lalr(1) table:"
- print_lr_table ::lalr1_table $::next_lalr1_state
-}
-
-proc print_lalr1_parse {} {
- puts $::verbose "generated lalr(1) parse table:"
- puts -nonewline $::verbose "state "
- foreach tok_id $::used_token_list {
- set token [string range $::token_id_table($tok_id) 0 4]
- puts -nonewline $::verbose [format " %-5s" $token]
- }
- puts $::verbose ""
- for {set i 0} {$i < $::next_lalr1_state} {incr i} {
- puts -nonewline $::verbose [format "%4s " $i]
- foreach tok_id $::used_token_list {
- if [info exists ::lalr1_parse($i:$tok_id)] {
- switch -- $::lalr1_parse($i:$tok_id) {
- shift { set s "sh" }
- goto { set s "go" }
- reduce { set s "re" }
- accept { set s "accept" }
- }
- if {$s != "accept"} {
- append s $::lalr1_parse($i:$tok_id,target)
- }
- puts -nonewline $::verbose [format " %-5s" $s]
- } else {
- puts -nonewline $::verbose " "
- }
- }
- puts $::verbose ""
- }
-}
-
-######################################################################
-# other taccle functions
-
-# Parse the taccle command line.
-proc taccle_args {argv} {
- set argvp 0
- set write_defs_file 0
- set write_verbose_file 0
- set ::parse_error 0
- set out_filename ""
- set ::p "yy"
- set ::show_warnings 0
- while {$argvp < [llength $argv]} {
- set arg [lindex $argv $argvp]
- switch -- $arg {
- "-d" { set write_defs_file 1 }
- "-h" -
- "--help" { print_taccle_help stdout; exit 0 }
- "-o" { set out_filename [get_param $argv argvp "o"] }
- "-v" - "--verbose" { set write_verbose_file 1 }
- "-w" { set ::show_warnings 1 }
- "-p" {
- set prefix [get_param $argv argvp "p"]
- set ::p [string tolower $prefix]
- }
- "--version" { print_taccle_version }
- default {
- if {[string index $arg 0] != "-"} {
- break
- } else {
- puts stderr "taccle: unknown option $arg"
- print_taccle_help stderr
- exit $::PARAM_ERROR
- }
- }
- }
- incr argvp
- }
- if {$argvp >= [llength $argv]} {
- puts stderr "taccle: no grammar file given"
- print_taccle_help stderr
- exit $::IO_ERROR
- }
- set ::in_filename [lindex $argv $argvp]
- set ::in_dir [file dirname $::in_filename]
- if {$out_filename == ""} {
- set out_filename [file rootname $::in_filename]
- append out_filename ".tcl"
- }
- if [catch {open $::in_filename r} ::src] {
- puts stderr "Could not open grammar file '$::in_filename'."
- exit $::IO_ERROR
- }
- if [catch {open $out_filename w} ::dest] {
- puts stderr "Could not open output file '$out_filename'."
- exit $::IO_ERROR
- }
- if $write_defs_file {
- set header_filename "[file rootname $out_filename].tab.tcl"
- if [catch {open $header_filename w} ::header] {
- puts stderr "Could not open header file '$header_filename'."
- exit $::IO_ERROR
- }
- } else {
- set ::header ""
- }
- if $write_verbose_file {
- set verbose_filename "[file rootname $out_filename].output"
- if [catch {open $verbose_filename w} ::verbose] {
- puts stderr "Could not open verbose file '$verbose_filename'."
- exit $::IO_ERROR
- }
- } else {
- set ::verbose ""
- }
-}
-
-# Actually do the parser generation.
-proc taccle_main {} {
- set ::line_count 0
-
- # counts number of rules in the grammar
- # rule number 0 is reserved for the special augmentation S' -> S
- set ::rule_count 1
-
- # used to keep track of token IDs:
- # 0 is reserved for the special token '$'
- # 256 for the error token
- set ::next_token_id 257
-
- # used to keep track of operator precedence level
- # level 0 is reserved for terminals without any precedence
- set ::next_precedence 1
-
- # keep track of where within the file I am:
- # definitions, rules, or subroutines
- set file_state definitions
-
- while {[gets $::src line] >= 0} {
- incr ::line_count
-
- if {$line == "%%"} {
- if {$file_state == "definitions"} {
- set file_state "rules"
- } elseif {$file_state == "rules"} {
- set file_state "subroutines"
- } else {
- taccle_error "Syntax error." $::SYNTAX_ERROR
- }
- } else {
- if {$file_state == "definitions"} {
- if {[lindex $line 0] == "#include"} {
- set fn [lindex $line 1]
- if {$fn != {}} {
- if [catch {open [file join $::in_dir $fn] r} ch] {
- puts stderr "Could not open definition file '$fn'."
- exit $::IO_ERROR
- }
- while {[gets $ch line] >= 0} {
- incr ::line_count
- handle_defs $line
- }
- catch {close $fn}
- }
- } else {
- handle_defs $line
- }
- } elseif {$file_state == "rules"} {
- # keep reading the rest of the file until EOF or
- # another '%%' appears
- set rules_buf [strip_comments $line]
- while {[gets $::src line] >= 0 && $file_state == "rules"} {
- if {$line == "%%"} {
- set file_state "subroutines"
- } elseif {[lindex $line 0] == "#include"} {
- set fn [lindex $line 1]
- if {$fn != {}} {
- if [catch {open [file join $::in_dir $fn] r} ch] {
- puts stderr "Could not open include file '$fn'."
- exit $::IO_ERROR
- }
- while {[gets $ch line] >= 0} {
- incr ::line_count
- append rules_buf "\n" [strip_comments $line]
- }
- catch {close $fn}
- }
- } else {
- append rules_buf "\n" [strip_comments $line]
- }
- }
- build_parser $rules_buf
- set file_state "subroutines"
- write_parser_utils
- write_parser
- } else {
- # file_state is subroutines -- copy verbatim to output file
- puts $::dest $line
- }
- }
- }
- if {$::header != ""} {
- write_header_file
- }
- if {$::verbose != ""} {
- print_symbol_table
- puts $::verbose ""
- print_rule_table
- puts $::verbose ""
- #print_first_table
- #puts $::verbose ""
- #print_lr1_table
- print_lalr1_table
- print_lalr1_parse
- }
-}
-
-######################################################################
-# start of actual script
-
-set IO_ERROR 1
-set SYNTAX_ERROR 2
-set PARAM_ERROR 3
-set GRAMMAR_ERROR 4
-
-set TERMINAL 0
-set NONTERMINAL 1
-
-taccle_args $argv
-taccle_main
diff --git a/tclzipfs/Makefile.in b/tclzipfs/Makefile.in
deleted file mode 100644
index 69e3c19..0000000
--- a/tclzipfs/Makefile.in
+++ /dev/null
@@ -1,459 +0,0 @@
-# Makefile.in --
-#
-# This file is a Makefile for Sample TEA Extension. If it has the name
-# "Makefile.in" then it is a template for a Makefile; to generate the
-# actual Makefile, run "./configure", which is a configuration script
-# generated by the "autoconf" program (constructs like "@foo@" will get
-# replaced in the actual Makefile.
-#
-# Copyright (c) 1999 Scriptics Corporation.
-# Copyright (c) 2002-2005 ActiveState Corporation.
-#
-# See the file "license.terms" for information on usage and redistribution
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-
-#========================================================================
-# Add additional lines to handle any additional AC_SUBST cases that
-# have been added in a customized configure script.
-#========================================================================
-
-#SAMPLE_NEW_VAR = @SAMPLE_NEW_VAR@
-
-#========================================================================
-# Nothing of the variables below this line should need to be changed.
-# Please check the TARGETS section below to make sure the make targets
-# are correct.
-#========================================================================
-
-#========================================================================
-# The names of the source files is defined in the configure script.
-# The object files are used for linking into the final library.
-# This will be used when a dist target is added to the Makefile.
-# It is not important to specify the directory, as long as it is the
-# $(srcdir) or in the generic, win or unix subdirectory.
-#========================================================================
-
-PKG_SOURCES = @PKG_SOURCES@
-PKG_OBJECTS = @PKG_OBJECTS@
-
-PKG_STUB_SOURCES = @PKG_STUB_SOURCES@
-PKG_STUB_OBJECTS = @PKG_STUB_OBJECTS@
-
-#========================================================================
-# PKG_TCL_SOURCES identifies Tcl runtime files that are associated with
-# this package that need to be installed, if any.
-#========================================================================
-
-PKG_TCL_SOURCES = @PKG_TCL_SOURCES@
-
-#========================================================================
-# This is a list of public header files to be installed, if any.
-#========================================================================
-
-PKG_HEADERS = @PKG_HEADERS@
-
-#========================================================================
-# "PKG_LIB_FILE" refers to the library (dynamic or static as per
-# configuration options) composed of the named objects.
-#========================================================================
-
-PKG_LIB_FILE = @PKG_LIB_FILE@
-PKG_STUB_LIB_FILE = @PKG_STUB_LIB_FILE@
-
-lib_BINARIES = $(PKG_LIB_FILE)
-BINARIES = $(lib_BINARIES)
-
-SHELL = @SHELL@
-
-srcdir = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-libdir = @libdir@
-includedir = @includedir@
-datarootdir = @datarootdir@
-datadir = @datadir@
-mandir = @mandir@
-
-DESTDIR =
-
-PKG_DIR = $(PACKAGE_NAME)$(PACKAGE_VERSION)
-pkgdatadir = $(datadir)/$(PKG_DIR)
-pkglibdir = $(libdir)/$(PKG_DIR)
-pkgincludedir = $(includedir)/$(PKG_DIR)
-
-top_builddir = @abs_top_builddir@
-
-INSTALL_OPTIONS =
-INSTALL = @INSTALL@ $(INSTALL_OPTIONS)
-INSTALL_DATA_DIR = ${INSTALL} -d -m 755
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_LIBRARY = ${INSTALL_DATA}
-
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-CC = @CC@
-CFLAGS_DEFAULT = @CFLAGS_DEFAULT@
-CFLAGS_WARNING = @CFLAGS_WARNING@
-EXEEXT = @EXEEXT@
-LDFLAGS_DEFAULT = @LDFLAGS_DEFAULT@
-MAKE_LIB = @MAKE_LIB@
-MAKE_SHARED_LIB = @MAKE_SHARED_LIB@
-MAKE_STATIC_LIB = @MAKE_STATIC_LIB@
-MAKE_STUB_LIB = @MAKE_STUB_LIB@
-OBJEXT = @OBJEXT@
-RANLIB = @RANLIB@
-RANLIB_STUB = @RANLIB_STUB@
-SHLIB_CFLAGS = @SHLIB_CFLAGS@
-SHLIB_LD = @SHLIB_LD@
-SHLIB_LD_LIBS = @SHLIB_LD_LIBS@
-STLIB_LD = @STLIB_LD@
-#TCL_DEFS = @TCL_DEFS@
-TCL_BIN_DIR = @TCL_BIN_DIR@
-TCL_SRC_DIR = @TCL_SRC_DIR@
-#TK_BIN_DIR = @TK_BIN_DIR@
-#TK_SRC_DIR = @TK_SRC_DIR@
-
-# Not used, but retained for reference of what libs Tcl required
-#TCL_LIBS = @TCL_LIBS@
-
-#========================================================================
-# TCLLIBPATH seeds the auto_path in Tcl's init.tcl so we can test our
-# package without installing. The other environment variables allow us
-# to test against an uninstalled Tcl. Add special env vars that you
-# require for testing here (like TCLX_LIBRARY).
-#========================================================================
-
-EXTRA_PATH = $(top_builddir):$(TCL_BIN_DIR)
-#EXTRA_PATH = $(top_builddir):$(TCL_BIN_DIR):$(TK_BIN_DIR)
-TCLLIBPATH = $(top_builddir)
-TCLSH_ENV = TCL_LIBRARY=`@CYGPATH@ $(TCL_SRC_DIR)/library`
-PKG_ENV = @LD_LIBRARY_PATH_VAR@="$(EXTRA_PATH):$(@LD_LIBRARY_PATH_VAR@)" \
- PATH="$(EXTRA_PATH):$(PATH)" \
- TCLLIBPATH="$(TCLLIBPATH)"
-
-TCLSH_PROG = @TCLSH_PROG@
-TCLSH = $(TCLSH_ENV) $(PKG_ENV) $(TCLSH_PROG)
-
-#WISH_ENV = TK_LIBRARY=`@CYGPATH@ $(TK_SRC_DIR)/library`
-#WISH_PROG = @WISH_PROG@
-#WISH = $(TCLSH_ENV) $(WISH_ENV) $(PKG_ENV) $(WISH_PROG)
-
-SHARED_BUILD = @SHARED_BUILD@
-
-INCLUDES = @PKG_INCLUDES@ @TCL_INCLUDES@
-#INCLUDES = @PKG_INCLUDES@ @TCL_INCLUDES@ @TK_INCLUDES@ @TK_XINCLUDES@
-
-PKG_CFLAGS = @PKG_CFLAGS@
-
-# TCL_DEFS is not strictly need here, but if you remove it, then you
-# must make sure that configure.ac checks for the necessary components
-# that your library may use. TCL_DEFS can actually be a problem if
-# you do not compile with a similar machine setup as the Tcl core was
-# compiled with.
-#DEFS = $(TCL_DEFS) @DEFS@ $(PKG_CFLAGS)
-DEFS = @DEFS@ $(PKG_CFLAGS)
-
-# Move pkgIndex.tcl to 'BINARIES' var if it is generated in the Makefile
-CONFIG_CLEAN_FILES = Makefile pkgIndex.tcl
-CLEANFILES = @CLEANFILES@
-
-CPPFLAGS = @CPPFLAGS@
-LIBS = @PKG_LIBS@ @LIBS@
-AR = @AR@
-CFLAGS = @CFLAGS@
-COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) \
- $(CFLAGS_DEFAULT) $(CFLAGS_WARNING) $(SHLIB_CFLAGS) $(CFLAGS)
-
-GDB = gdb
-VALGRIND = valgrind
-VALGRINDARGS = --tool=memcheck --num-callers=8 --leak-resolution=high \
- --leak-check=yes --show-reachable=yes -v
-
-.SUFFIXES: .c .$(OBJEXT)
-
-#========================================================================
-# Start of user-definable TARGETS section
-#========================================================================
-
-#========================================================================
-# TEA TARGETS. Please note that the "libraries:" target refers to platform
-# independent files, and the "binaries:" target includes executable programs and
-# platform-dependent libraries. Modify these targets so that they install
-# the various pieces of your package. The make and install rules
-# for the BINARIES that you specified above have already been done.
-#========================================================================
-
-all: binaries libraries #doc
-
-#========================================================================
-# The binaries target builds executable programs, Windows .dll's, unix
-# shared/static libraries, and any other platform-dependent files.
-# The list of targets to build for "binaries:" is specified at the top
-# of the Makefile, in the "BINARIES" variable.
-#========================================================================
-
-binaries: $(BINARIES)
-
-libraries:
-
-#========================================================================
-# Your doc target should differentiate from doc builds (by the developer)
-# and doc installs (see install-doc), which just install the docs on the
-# end user machine when building from source.
-#========================================================================
-
-doc:
- @echo "If you have documentation to create, place the commands to"
- @echo "build the docs in the 'doc:' target. For example:"
- @echo " xml2nroff sample.xml > sample.n"
- @echo " xml2html sample.xml > sample.html"
-
-install: all install-binaries install-libraries #install-doc
-
-install-binaries: binaries install-lib-binaries install-bin-binaries
-
-#========================================================================
-# This rule installs platform-independent files, such as header files.
-# The list=...; for p in $$list handles the empty list case x-platform.
-#========================================================================
-
-install-libraries: libraries
- @$(INSTALL_DATA_DIR) $(DESTDIR)$(includedir)
- @echo "Installing header files in $(DESTDIR)$(includedir)"
- @list='$(PKG_HEADERS)'; for i in $$list; do \
- echo "Installing $(srcdir)/$$i" ; \
- $(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(includedir) ; \
- done;
-
-#========================================================================
-# Install documentation. Unix manpages should go in the $(mandir)
-# directory.
-#========================================================================
-
-install-doc: doc
- @$(INSTALL_DATA_DIR) $(DESTDIR)$(mandir)/mann
- @echo "Installing documentation in $(DESTDIR)$(mandir)"
- @list='$(srcdir)/doc/*.n'; for i in $$list; do \
- echo "Installing $$i"; \
- $(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/mann ; \
- done
-
-test: binaries libraries
- $(TCLSH) `@CYGPATH@ $(srcdir)/tests/all.tcl` $(TESTFLAGS) \
- -load "package ifneeded $(PACKAGE_NAME) $(PACKAGE_VERSION) \
- [list load `@CYGPATH@ $(PKG_LIB_FILE)` $(PACKAGE_NAME)]"
-
-shell: binaries libraries
- @$(TCLSH) $(SCRIPT)
-
-gdb:
- $(TCLSH_ENV) $(PKG_ENV) $(GDB) $(TCLSH_PROG) $(SCRIPT)
-
-gdb-test: binaries libraries
- $(TCLSH_ENV) $(PKG_ENV) $(GDB) \
- --args $(TCLSH_PROG) `@CYGPATH@ $(srcdir)/tests/all.tcl` \
- $(TESTFLAGS) -singleproc 1 \
- -load "package ifneeded $(PACKAGE_NAME) $(PACKAGE_VERSION) \
- [list load `@CYGPATH@ $(PKG_LIB_FILE)` $(PACKAGE_NAME)]"
-
-valgrind: binaries libraries
- $(TCLSH_ENV) $(PKG_ENV) $(VALGRIND) $(VALGRINDARGS) $(TCLSH_PROG) \
- `@CYGPATH@ $(srcdir)/tests/all.tcl` $(TESTFLAGS)
-
-valgrindshell: binaries libraries
- $(TCLSH_ENV) $(PKG_ENV) $(VALGRIND) $(VALGRINDARGS) $(TCLSH_PROG) $(SCRIPT)
-
-depend:
-
-#========================================================================
-# $(PKG_LIB_FILE) should be listed as part of the BINARIES variable
-# mentioned above. That will ensure that this target is built when you
-# run "make binaries".
-#
-# The $(PKG_OBJECTS) objects are created and linked into the final
-# library. In most cases these object files will correspond to the
-# source files above.
-#========================================================================
-
-$(PKG_LIB_FILE): $(PKG_OBJECTS)
- -rm -f $(PKG_LIB_FILE)
- ${MAKE_LIB}
- $(RANLIB) $(PKG_LIB_FILE)
-
-$(PKG_STUB_LIB_FILE): $(PKG_STUB_OBJECTS)
- -rm -f $(PKG_STUB_LIB_FILE)
- ${MAKE_STUB_LIB}
- $(RANLIB_STUB) $(PKG_STUB_LIB_FILE)
-
-#========================================================================
-# We need to enumerate the list of .c to .o lines here.
-#
-# In the following lines, $(srcdir) refers to the toplevel directory
-# containing your extension. If your sources are in a subdirectory,
-# you will have to modify the paths to reflect this:
-#
-# sample.$(OBJEXT): $(srcdir)/generic/sample.c
-# $(COMPILE) -c `@CYGPATH@ $(srcdir)/generic/sample.c` -o $@
-#
-# Setting the VPATH variable to a list of paths will cause the makefile
-# to look into these paths when resolving .c to .obj dependencies.
-# As necessary, add $(srcdir):$(srcdir)/compat:....
-#========================================================================
-
-VPATH = $(srcdir):$(srcdir)/generic:$(srcdir)/unix:$(srcdir)/win:$(srcdir)/macosx
-
-.c.@OBJEXT@:
- $(COMPILE) -c `@CYGPATH@ $<` -o $@
-
-#========================================================================
-# Distribution creation
-# You may need to tweak this target to make it work correctly.
-#========================================================================
-
-#COMPRESS = tar cvf $(PKG_DIR).tar $(PKG_DIR); compress $(PKG_DIR).tar
-COMPRESS = tar zcvf $(PKG_DIR).tar.gz $(PKG_DIR)
-DIST_ROOT = /tmp/dist
-DIST_DIR = $(DIST_ROOT)/$(PKG_DIR)
-
-DIST_INSTALL_DATA = CPPROG='cp -p' $(INSTALL) -m 644
-DIST_INSTALL_SCRIPT = CPPROG='cp -p' $(INSTALL) -m 755
-
-dist-clean:
- rm -rf $(DIST_DIR) $(DIST_ROOT)/$(PKG_DIR).tar.*
-
-dist: dist-clean
- $(INSTALL_DATA_DIR) $(DIST_DIR)
-
- # TEA files
- $(DIST_INSTALL_DATA) $(srcdir)/Makefile.in \
- $(srcdir)/aclocal.m4 $(srcdir)/configure.ac \
- $(DIST_DIR)/
- $(DIST_INSTALL_SCRIPT) $(srcdir)/configure $(DIST_DIR)/
-
- $(INSTALL_DATA_DIR) $(DIST_DIR)/tclconfig
- $(DIST_INSTALL_DATA) $(srcdir)/tclconfig/README.txt \
- $(srcdir)/tclconfig/tcl.m4 $(srcdir)/tclconfig/install-sh \
- $(DIST_DIR)/tclconfig/
-
- # Extension files
- $(DIST_INSTALL_DATA) \
- $(srcdir)/ChangeLog \
- $(srcdir)/README.sha \
- $(srcdir)/license.terms \
- $(srcdir)/README \
- $(srcdir)/pkgIndex.tcl.in \
- $(DIST_DIR)/
-
- list='demos doc generic library mac tests unix win'; \
- for p in $$list; do \
- if test -d $(srcdir)/$$p ; then \
- $(INSTALL_DATA_DIR) $(DIST_DIR)/$$p; \
- $(DIST_INSTALL_DATA) $(srcdir)/$$p/* $(DIST_DIR)/$$p/; \
- fi; \
- done
-
- (cd $(DIST_ROOT); $(COMPRESS);)
-
-#========================================================================
-# End of user-definable section
-#========================================================================
-
-#========================================================================
-# Don't modify the file to clean here. Instead, set the "CLEANFILES"
-# variable in configure.ac
-#========================================================================
-
-clean:
- -test -z "$(BINARIES)" || rm -f $(BINARIES)
- -rm -f *.$(OBJEXT) core *.core
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean: clean
- -rm -f *.tab.c
- -rm -f $(CONFIG_CLEAN_FILES)
- -rm -f config.cache config.log config.status
-
-#========================================================================
-# Install binary object libraries. On Windows this includes both .dll and
-# .lib files. Because the .lib files are not explicitly listed anywhere,
-# we need to deduce their existence from the .dll file of the same name.
-# Library files go into the lib directory.
-# In addition, this will generate the pkgIndex.tcl
-# file in the install location (assuming it can find a usable tclsh shell)
-#
-# You should not have to modify this target.
-#========================================================================
-
-install-lib-binaries: binaries
- @$(INSTALL_DATA_DIR) $(DESTDIR)$(pkglibdir)
- @list='$(lib_BINARIES)'; for p in $$list; do \
- if test -f $$p; then \
- echo " $(INSTALL_LIBRARY) $$p $(DESTDIR)$(pkglibdir)/$$p"; \
- $(INSTALL_LIBRARY) $$p $(DESTDIR)$(pkglibdir)/$$p; \
- ext=`echo $$p|sed -e "s/.*\.//"`; \
- if test "x$$ext" = "xdll"; then \
- lib=`basename $$p|sed -e 's/.[^.]*$$//'`.lib; \
- if test -f $$lib; then \
- echo " $(INSTALL_DATA) $$lib $(DESTDIR)$(pkglibdir)/$$lib"; \
- $(INSTALL_DATA) $$lib $(DESTDIR)$(pkglibdir)/$$lib; \
- fi; \
- fi; \
- fi; \
- done
- @list='$(PKG_TCL_SOURCES)'; for p in $$list; do \
- if test -f $(srcdir)/$$p; then \
- destp=`basename $$p`; \
- echo " Install $$destp $(DESTDIR)$(pkglibdir)/$$destp"; \
- $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkglibdir)/$$destp; \
- fi; \
- done
- @if test "x$(SHARED_BUILD)" = "x1"; then \
- echo " Install pkgIndex.tcl $(DESTDIR)$(pkglibdir)"; \
- $(INSTALL_DATA) pkgIndex.tcl $(DESTDIR)$(pkglibdir); \
- fi
- $(INSTALL_DATA) tclzipfsConfig.sh $(DESTDIR)$(libdir)
-
-#========================================================================
-# Install binary executables (e.g. .exe files and dependent .dll files)
-# This is for files that must go in the bin directory (located next to
-# wish and tclsh), like dependent .dll files on Windows.
-#
-# You should not have to modify this target, except to define bin_BINARIES
-# above if necessary.
-#========================================================================
-
-install-bin-binaries: binaries
- @$(INSTALL_DATA_DIR) $(DESTDIR)$(bindir)
- @list='$(bin_BINARIES)'; for p in $$list; do \
- if test -f $$p; then \
- echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p"; \
- $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p; \
- fi; \
- done
-
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- cd $(top_builddir) \
- && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-uninstall-binaries:
- list='$(lib_BINARIES)'; for p in $$list; do \
- rm -f $(DESTDIR)$(pkglibdir)/$$p; \
- done
- list='$(PKG_TCL_SOURCES)'; for p in $$list; do \
- p=`basename $$p`; \
- rm -f $(DESTDIR)$(pkglibdir)/$$p; \
- done
- list='$(bin_BINARIES)'; for p in $$list; do \
- rm -f $(DESTDIR)$(bindir)/$$p; \
- done
-
-.PHONY: all binaries clean depend distclean doc install libraries test
-.PHONY: gdb gdb-test valgrind valgrindshell
-
-# 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/tclzipfs/README.md b/tclzipfs/README.md
deleted file mode 100644
index ddc3add..0000000
--- a/tclzipfs/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# tclzipfs
-TCL Zip Virtual File System.
-Tcl 8.6 TEA compatible.
-Based on AndoWish
-Copyright (c) 2013-2018 Christian Werner
diff --git a/tclzipfs/aclocal.m4 b/tclzipfs/aclocal.m4
deleted file mode 100644
index 0b05739..0000000
--- a/tclzipfs/aclocal.m4
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# Include the TEA standard macro set
-#
-
-builtin(include,tclconfig/tcl.m4)
-
-#
-# Add here whatever m4 macros you want to define for your package
-#
diff --git a/tclzipfs/configure b/tclzipfs/configure
deleted file mode 100755
index 5749bf6..0000000
--- a/tclzipfs/configure
+++ /dev/null
@@ -1,9416 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for tclzipfs 1.0.
-#
-#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
-#
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# Use a proper internal environment variable to ensure we don't fall
- # into an infinite loop, continuously re-executing ourselves.
- if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
- _as_can_reexec=no; export _as_can_reexec;
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
- fi
- # We don't want this to propagate to other subprocesses.
- { _as_can_reexec=; unset _as_can_reexec;}
-if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '\${1+\"\$@\"}'='\"\$@\"'
- setopt NO_GLOB_SUBST
-else
- case \`(set -o) 2>/dev/null\` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-"
- as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
- exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
- as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
- as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
- eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
- test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
- as_have_required=yes
-else
- as_have_required=no
-fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- as_found=:
- case $as_dir in #(
- /*)
- for as_base in sh bash ksh sh5; do
- # Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
- CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
- break 2
-fi
-fi
- done;;
- esac
- as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
- if test "x$CONFIG_SHELL" != x; then :
- export CONFIG_SHELL
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
-fi
-
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
- else
- $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
-$0: including any error possibly output before this
-$0: message. Then install a modern shell, or manually run
-$0: the script under such a shell if you do have one."
- fi
- exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-
- as_lineno_1=$LINENO as_lineno_1a=$LINENO
- as_lineno_2=$LINENO as_lineno_2a=$LINENO
- eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
- test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
- # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
- # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
- # already done that, so ensure we don't try to do so again and fall
- # in an infinite loop. This has already happened in practice.
- _as_can_reexec=no; export _as_can_reexec
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME='tclzipfs'
-PACKAGE_TARNAME='tclzipfs'
-PACKAGE_VERSION='1.0'
-PACKAGE_STRING='tclzipfs 1.0'
-PACKAGE_BUGREPORT=''
-PACKAGE_URL=''
-
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include <memory.h>
-# endif
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-PATCHLEVEL
-MINOR_VERSION
-MAJOR_VERSION
-tclzipfs_STUB_LIB_PATH
-tclzipfs_BUILD_STUB_LIB_PATH
-tclzipfs_STUB_LIB_SPEC
-tclzipfs_BUILD_STUB_LIB_SPEC
-tclzipfs_LIB_SPEC
-tclzipfs_BUILD_LIB_SPEC
-TCLSH_PROG
-VC_MANIFEST_EMBED_EXE
-VC_MANIFEST_EMBED_DLL
-RANLIB_STUB
-MAKE_STUB_LIB
-MAKE_STATIC_LIB
-MAKE_SHARED_LIB
-MAKE_LIB
-TCL_DBGX
-LDFLAGS_DEFAULT
-CFLAGS_DEFAULT
-LD_LIBRARY_PATH_VAR
-SHLIB_CFLAGS
-SHLIB_LD_LIBS
-SHLIB_LD
-STLIB_LD
-CFLAGS_WARNING
-CFLAGS_OPTIMIZE
-CFLAGS_DEBUG
-RC
-CELIB_DIR
-AR
-STUBS_BUILD
-SHARED_BUILD
-TCL_THREADS
-TCL_TOP_DIR_NATIVE
-TCL_INCLUDES
-PKG_OBJECTS
-PKG_SOURCES
-EGREP
-GREP
-RANLIB
-SET_MAKE
-CPP
-TCL_SHLIB_LD_LIBS
-TCL_LD_FLAGS
-TCL_EXTRA_CFLAGS
-TCL_DEFS
-TCL_LIBS
-CLEANFILES
-OBJEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-TCL_STUB_LIB_SPEC
-TCL_STUB_LIB_FLAG
-TCL_STUB_LIB_FILE
-TCL_LIB_SPEC
-TCL_LIB_FLAG
-TCL_LIB_FILE
-TCL_SRC_DIR
-TCL_BIN_DIR
-TCL_PATCH_LEVEL
-TCL_VERSION
-INSTALL_LIBRARY
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-INSTALL_DATA
-INSTALL_DATA_DIR
-INSTALL
-PKG_CFLAGS
-PKG_LIBS
-PKG_INCLUDES
-PKG_HEADERS
-PKG_TCL_SOURCES
-PKG_STUB_OBJECTS
-PKG_STUB_SOURCES
-PKG_STUB_LIB_FILE
-PKG_LIB_FILE
-EXEEXT
-CYGPATH
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-with_tcl
-with_tclinclude
-enable_threads
-enable_shared
-enable_stubs
-enable_64bit
-enable_64bit_vis
-enable_rpath
-enable_wince
-with_celib
-enable_symbols
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *=) ac_optarg= ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir=$ac_optarg ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build_alias ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build_alias=$ac_optarg ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file=$ac_optarg ;;
-
- --config-cache | -C)
- cache_file=config.cache ;;
-
- -datadir | --datadir | --datadi | --datad)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=\$ac_optarg ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix=$ac_optarg ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he | -h)
- ac_init_help=long ;;
- -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
- ac_init_help=recursive ;;
- -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
- ac_init_help=short ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host_alias ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host_alias=$ac_optarg ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$ac_optarg ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir=$ac_optarg ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir=$ac_optarg ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir=$ac_optarg ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir=$ac_optarg ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- localstatedir=$ac_optarg ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir=$ac_optarg ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c | -n)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir=$ac_optarg ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix=$ac_optarg ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix=$ac_optarg ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix=$ac_optarg ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name=$ac_optarg ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$ac_optarg ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir=$ac_optarg ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir=$ac_optarg ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site=$ac_optarg ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir=$ac_optarg ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir=$ac_optarg ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target_alias ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target_alias=$ac_optarg ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers | -V)
- ac_init_version=: ;;
-
- -with-* | --with-*)
- ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=no ;;
-
- --x)
- # Obsolete; use --with-x.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes=$ac_optarg ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries=$ac_optarg ;;
-
- -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- case $ac_envvar in #(
- '' | [0-9]* | *[!_$as_cr_alnum]* )
- as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
- esac
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
- : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
- esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- # Remove trailing slashes.
- case $ac_val in
- */ )
- ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
- eval $ac_var=\$ac_val;;
- esac
- # Be sure to have absolute directory names.
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
- if test "x$build_alias" = x; then
- cross_compiling=maybe
- elif test "x$build_alias" != "x$host_alias"; then
- cross_compiling=yes
- fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- as_fn_error $? "pwd does not report name of working directory"
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then the parent directory.
- ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_myself" : 'X\(//\)[^/]' \| \
- X"$as_myself" : 'X\(//\)$' \| \
- X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- srcdir=$ac_confdir
- if test ! -r "$srcdir/$ac_unique_file"; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat <<_ACEOF
-\`configure' configures tclzipfs 1.0 to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE. See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
- -h, --help display this help and exit
- --help=short display options specific to this package
- --help=recursive display the short help of all the included packages
- -V, --version display version information and exit
- -q, --quiet, --silent do not print \`checking ...' messages
- --cache-file=FILE cache test results in FILE [disabled]
- -C, --config-cache alias for \`--cache-file=config.cache'
- -n, --no-create do not create output files
- --srcdir=DIR find the sources in DIR [configure dir or \`..']
-
-Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/tclzipfs]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
- case $ac_init_help in
- short | recursive ) echo "Configuration of tclzipfs 1.0:";;
- esac
- cat <<\_ACEOF
-
-Optional Features:
- --disable-option-checking ignore unrecognized --enable/--with options
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --enable-threads build with threads (default: on)
- --enable-shared build and link with shared libraries (default: on)
- --enable-stubs build and link with stub libraries. Always true for
- shared builds (default: on)
- --enable-64bit enable 64bit support (default: off)
- --enable-64bit-vis enable 64bit Sparc VIS support (default: off)
- --disable-rpath disable rpath support (default: on)
- --enable-wince enable Win/CE support (where applicable)
- --enable-symbols build with debugging symbols (default: off)
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-tcl directory containing tcl configuration
- (tclConfig.sh)
- --with-tclinclude directory containing the public Tcl header files
- --with-celib=DIR use Windows/CE support library from DIR
-
-Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
- nonstandard directory <lib dir>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
- CPP C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to the package provider.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" ||
- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
- continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
- if test -f "$ac_srcdir/configure.gnu"; then
- echo &&
- $SHELL "$ac_srcdir/configure.gnu" --help=recursive
- elif test -f "$ac_srcdir/configure"; then
- echo &&
- $SHELL "$ac_srcdir/configure" --help=recursive
- else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-tclzipfs configure 1.0
-generated by GNU Autoconf 2.69
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
- exit
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
- if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } > conftest.i && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then :
- ac_retval=0
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=$ac_status
-fi
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_run
-
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_compile
-
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest$ac_exeext
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- test -x conftest$ac_exeext
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
- # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
- # interfere with the next link command; also delete a directory that is
- # left behind by Apple's compiler. We do this before executing the actions.
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_link
-
-# ac_fn_c_check_func LINENO FUNC VAR
-# ----------------------------------
-# Tests whether FUNC exists, setting the cache variable VAR accordingly
-ac_fn_c_check_func ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $2 innocuous_$2
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $2 (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $2
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $2 ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_$2 || defined __stub___$2
-choke me
-#endif
-
-int
-main ()
-{
-return $2 ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_func
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by tclzipfs $as_me 1.0, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
-
-/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
-/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
-/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
- done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
- for ac_arg
- do
- case $ac_arg in
- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
- 2)
- as_fn_append ac_configure_args1 " '$ac_arg'"
- if test $ac_must_keep_next = true; then
- ac_must_keep_next=false # Got value, back to normal.
- else
- case $ac_arg in
- *=* | --config-cache | -C | -disable-* | --disable-* \
- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
- | -with-* | --with-* | -without-* | --without-* | --x)
- case "$ac_configure_args0 " in
- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
- esac
- ;;
- -* ) ac_must_keep_next=true ;;
- esac
- fi
- as_fn_append ac_configure_args " '$ac_arg'"
- ;;
- esac
- done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset ac_configure_args1;}
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log. We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
-elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
-else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
- fi
-done
-
-if test -r "$cache_file"; then
- # Some versions of bash will fail to source /dev/null (special files
- # actually), so we avoid doing that. DJGPP emulates it as a regular file.
- if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
- eval ac_old_set=\$ac_cv_env_${ac_var}_set
- eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val=\$ac_cv_env_${ac_var}_value
- eval ac_new_val=\$ac_env_${ac_var}_value
- case $ac_old_set,$ac_new_set in
- set,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,);;
- *)
- if test "x$ac_old_val" != "x$ac_new_val"; then
- # differences in whitespace do not lead to failure.
- ac_old_val_w=`echo x $ac_old_val`
- ac_new_val_w=`echo x $ac_new_val`
- if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- ac_cache_corrupted=:
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
- eval $ac_var=\$ac_old_val
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
- *) ac_arg=$ac_var=$ac_new_val ;;
- esac
- case " $ac_configure_args " in
- *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
- *) as_fn_append ac_configure_args " '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-#--------------------------------------------------------------------
-# Call TEA_INIT as the first TEA_ macro to set up initial vars.
-# This will define a ${TEA_PLATFORM} variable == "unix" or "windows"
-# as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE.
-#--------------------------------------------------------------------
-
-
- TEA_VERSION="3.13"
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking TEA configuration" >&5
-$as_echo_n "checking TEA configuration... " >&6; }
- if test x"${PACKAGE_NAME}" = x ; then
- as_fn_error $? "
-The PACKAGE_NAME variable must be defined by your TEA configure.ac" "$LINENO" 5
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok (TEA ${TEA_VERSION})" >&5
-$as_echo "ok (TEA ${TEA_VERSION})" >&6; }
-
- # If the user did not set CFLAGS, set it now to keep macros
- # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2".
- if test "${CFLAGS+set}" != "set" ; then
- CFLAGS=""
- fi
-
- case "`uname -s`" in
- *win32*|*WIN32*|*MINGW32_*|*MINGW64_*)
- # Extract the first word of "cygpath", so it can be a program name with args.
-set dummy cygpath; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CYGPATH+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CYGPATH"; then
- ac_cv_prog_CYGPATH="$CYGPATH" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CYGPATH="cygpath -m"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_prog_CYGPATH" && ac_cv_prog_CYGPATH="echo"
-fi
-fi
-CYGPATH=$ac_cv_prog_CYGPATH
-if test -n "$CYGPATH"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5
-$as_echo "$CYGPATH" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- EXEEXT=".exe"
- TEA_PLATFORM="windows"
- ;;
- *CYGWIN_*)
- EXEEXT=".exe"
- # CYGPATH and TEA_PLATFORM are determined later in LOAD_TCLCONFIG
- ;;
- *)
- CYGPATH=echo
- # Maybe we are cross-compiling....
- case ${host_alias} in
- *mingw32*)
- EXEEXT=".exe"
- TEA_PLATFORM="windows"
- ;;
- *)
- EXEEXT=""
- TEA_PLATFORM="unix"
- ;;
- esac
- ;;
- esac
-
- # Check if exec_prefix is set. If not use fall back to prefix.
- # Note when adjusted, so that TEA_PREFIX can correct for this.
- # This is needed for recursive configures, since autoconf propagates
- # $prefix, but not $exec_prefix (doh!).
- if test x$exec_prefix = xNONE ; then
- exec_prefix_default=yes
- exec_prefix=$prefix
- fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}" >&5
-$as_echo "$as_me: configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}" >&6;}
-
-
-
-
- # This package name must be replaced statically for AC_SUBST to work
-
- # Substitute STUB_LIB_FILE in case package creates a stub library too.
-
-
- # We AC_SUBST these here to ensure they are subst'ed,
- # in case the user doesn't call TEA_ADD_...
-
-
-
-
-
-
-
-
- # Configure the installer.
-
- INSTALL='$(SHELL) $(srcdir)/tclconfig/install-sh -c'
- INSTALL_DATA_DIR='${INSTALL} -d -m 755'
- INSTALL_DATA='${INSTALL} -m 644'
- INSTALL_PROGRAM='${INSTALL} -m 755'
- INSTALL_SCRIPT='${INSTALL} -m 755'
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking system version" >&5
-$as_echo_n "checking system version... " >&6; }
-if ${tcl_cv_sys_version+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- # TEA specific:
- if test "${TEA_PLATFORM}" = "windows" ; then
- tcl_cv_sys_version=windows
- else
- tcl_cv_sys_version=`uname -s`-`uname -r`
- if test "$?" -ne 0 ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: can't find uname command" >&5
-$as_echo "$as_me: WARNING: can't find uname command" >&2;}
- tcl_cv_sys_version=unknown
- else
- if test "`uname -s`" = "AIX" ; then
- tcl_cv_sys_version=AIX-`uname -v`.`uname -r`
- fi
- fi
- fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_sys_version" >&5
-$as_echo "$tcl_cv_sys_version" >&6; }
- system=$tcl_cv_sys_version
-
- case $system in
- HP-UX-*) INSTALL_LIBRARY='${INSTALL} -m 755' ;;
- *) INSTALL_LIBRARY='${INSTALL} -m 644' ;;
- esac
-
-
-
-
-
-
-
-
-
-
-ac_aux_dir=
-for ac_dir in tclconfig "$srcdir"/tclconfig; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- as_fn_error $? "cannot find install-sh, install.sh, or shtool in tclconfig \"$srcdir\"/tclconfig" "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-
-
-
-#--------------------------------------------------------------------
-# Load the tclConfig.sh file
-#--------------------------------------------------------------------
-
-
-
- #
- # Ok, lets find the tcl configuration
- # First, look for one uninstalled.
- # the alternative search directory is invoked by --with-tcl
- #
-
- if test x"${no_tcl}" = x ; then
- # we reset no_tcl in case something fails here
- no_tcl=true
-
-# Check whether --with-tcl was given.
-if test "${with_tcl+set}" = set; then :
- withval=$with_tcl; with_tclconfig="${withval}"
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tcl configuration" >&5
-$as_echo_n "checking for Tcl configuration... " >&6; }
- if ${ac_cv_c_tclconfig+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- # First check to see if --with-tcl was specified.
- if test x"${with_tclconfig}" != x ; then
- case "${with_tclconfig}" in
- */tclConfig.sh )
- if test -f "${with_tclconfig}"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&5
-$as_echo "$as_me: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&2;}
- with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`"
- fi ;;
- esac
- if test -f "${with_tclconfig}/tclConfig.sh" ; then
- ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`"
- else
- as_fn_error $? "${with_tclconfig} directory doesn't contain tclConfig.sh" "$LINENO" 5
- fi
- fi
-
- # then check for a private Tcl installation
- if test x"${ac_cv_c_tclconfig}" = x ; then
- for i in \
- ../tcl \
- `ls -dr ../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \
- `ls -dr ../tcl[8-9].[0-9] 2>/dev/null` \
- `ls -dr ../tcl[8-9].[0-9]* 2>/dev/null` \
- ../../tcl \
- `ls -dr ../../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \
- `ls -dr ../../tcl[8-9].[0-9] 2>/dev/null` \
- `ls -dr ../../tcl[8-9].[0-9]* 2>/dev/null` \
- ../../../tcl \
- `ls -dr ../../../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \
- `ls -dr ../../../tcl[8-9].[0-9] 2>/dev/null` \
- `ls -dr ../../../tcl[8-9].[0-9]* 2>/dev/null` ; do
- if test "${TEA_PLATFORM}" = "windows" \
- -a -f "$i/win/tclConfig.sh" ; then
- ac_cv_c_tclconfig="`(cd $i/win; pwd)`"
- break
- fi
- if test -f "$i/unix/tclConfig.sh" ; then
- ac_cv_c_tclconfig="`(cd $i/unix; pwd)`"
- break
- fi
- done
- fi
-
- # on Darwin, check in Framework installation locations
- if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then
- for i in `ls -d ~/Library/Frameworks 2>/dev/null` \
- `ls -d /Library/Frameworks 2>/dev/null` \
- `ls -d /Network/Library/Frameworks 2>/dev/null` \
- `ls -d /System/Library/Frameworks 2>/dev/null` \
- `ls -d /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/Library/Frameworks/Tcl.framework 2>/dev/null` \
- `ls -d /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/Network/Library/Frameworks/Tcl.framework 2>/dev/null` \
- `ls -d /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Tcl.framework 2>/dev/null` \
- ; do
- if test -f "$i/Tcl.framework/tclConfig.sh" ; then
- ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`"
- break
- fi
- done
- fi
-
- # TEA specific: on Windows, check in common installation locations
- if test "${TEA_PLATFORM}" = "windows" \
- -a x"${ac_cv_c_tclconfig}" = x ; then
- for i in `ls -d C:/Tcl/lib 2>/dev/null` \
- `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \
- ; do
- if test -f "$i/tclConfig.sh" ; then
- ac_cv_c_tclconfig="`(cd $i; pwd)`"
- break
- fi
- done
- fi
-
- # check in a few common install locations
- if test x"${ac_cv_c_tclconfig}" = x ; then
- for i in `ls -d ${libdir} 2>/dev/null` \
- `ls -d ${exec_prefix}/lib 2>/dev/null` \
- `ls -d ${prefix}/lib 2>/dev/null` \
- `ls -d /usr/local/lib 2>/dev/null` \
- `ls -d /usr/contrib/lib 2>/dev/null` \
- `ls -d /usr/pkg/lib 2>/dev/null` \
- `ls -d /usr/lib 2>/dev/null` \
- `ls -d /usr/lib64 2>/dev/null` \
- `ls -d /usr/lib/tcl8.6 2>/dev/null` \
- `ls -d /usr/lib/tcl8.5 2>/dev/null` \
- `ls -d /usr/local/lib/tcl8.6 2>/dev/null` \
- `ls -d /usr/local/lib/tcl8.5 2>/dev/null` \
- `ls -d /usr/local/lib/tcl/tcl8.6 2>/dev/null` \
- `ls -d /usr/local/lib/tcl/tcl8.5 2>/dev/null` \
- ; do
- if test -f "$i/tclConfig.sh" ; then
- ac_cv_c_tclconfig="`(cd $i; pwd)`"
- break
- fi
- done
- fi
-
- # check in a few other private locations
- if test x"${ac_cv_c_tclconfig}" = x ; then
- for i in \
- ${srcdir}/../tcl \
- `ls -dr ${srcdir}/../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \
- `ls -dr ${srcdir}/../tcl[8-9].[0-9] 2>/dev/null` \
- `ls -dr ${srcdir}/../tcl[8-9].[0-9]* 2>/dev/null` ; do
- if test "${TEA_PLATFORM}" = "windows" \
- -a -f "$i/win/tclConfig.sh" ; then
- ac_cv_c_tclconfig="`(cd $i/win; pwd)`"
- break
- fi
- if test -f "$i/unix/tclConfig.sh" ; then
- ac_cv_c_tclconfig="`(cd $i/unix; pwd)`"
- break
- fi
- done
- fi
-
-fi
-
-
- if test x"${ac_cv_c_tclconfig}" = x ; then
- TCL_BIN_DIR="# no Tcl configs found"
- as_fn_error $? "Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh" "$LINENO" 5
- else
- no_tcl=
- TCL_BIN_DIR="${ac_cv_c_tclconfig}"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: found ${TCL_BIN_DIR}/tclConfig.sh" >&5
-$as_echo "found ${TCL_BIN_DIR}/tclConfig.sh" >&6; }
- fi
- fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- fi
-fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
- { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if { ac_try='./conftest$ac_cv_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-else
- CFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for existence of ${TCL_BIN_DIR}/tclConfig.sh" >&5
-$as_echo_n "checking for existence of ${TCL_BIN_DIR}/tclConfig.sh... " >&6; }
-
- if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: loading" >&5
-$as_echo "loading" >&6; }
- . "${TCL_BIN_DIR}/tclConfig.sh"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not find ${TCL_BIN_DIR}/tclConfig.sh" >&5
-$as_echo "could not find ${TCL_BIN_DIR}/tclConfig.sh" >&6; }
- fi
-
- # eval is required to do the TCL_DBGX substitution
- eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\""
- eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\""
-
- # If the TCL_BIN_DIR is the build directory (not the install directory),
- # then set the common variable name to the value of the build variables.
- # For example, the variable TCL_LIB_SPEC will be set to the value
- # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC
- # instead of TCL_BUILD_LIB_SPEC since it will work with both an
- # installed and uninstalled version of Tcl.
- if test -f "${TCL_BIN_DIR}/Makefile" ; then
- TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}"
- TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}"
- TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}"
- elif test "`uname -s`" = "Darwin"; then
- # If Tcl was built as a framework, attempt to use the libraries
- # from the framework at the given location so that linking works
- # against Tcl.framework installed in an arbitrary location.
- case ${TCL_DEFS} in
- *TCL_FRAMEWORK*)
- if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then
- for i in "`cd "${TCL_BIN_DIR}"; pwd`" \
- "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do
- if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then
- TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}"
- break
- fi
- done
- fi
- if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then
- TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}"
- TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"
- fi
- ;;
- esac
- fi
-
- # eval is required to do the TCL_DBGX substitution
- eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\""
- eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\""
- eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\""
- eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\""
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking platform" >&5
-$as_echo_n "checking platform... " >&6; }
- hold_cc=$CC; CC="$TCL_CC"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- #ifdef _WIN32
- #error win32
- #endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
- TEA_PLATFORM="unix"
- CYGPATH=echo
-
-else
-
- TEA_PLATFORM="windows"
- # Extract the first word of "cygpath", so it can be a program name with args.
-set dummy cygpath; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CYGPATH+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CYGPATH"; then
- ac_cv_prog_CYGPATH="$CYGPATH" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CYGPATH="cygpath -m"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_prog_CYGPATH" && ac_cv_prog_CYGPATH="echo"
-fi
-fi
-CYGPATH=$ac_cv_prog_CYGPATH
-if test -n "$CYGPATH"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5
-$as_echo "$CYGPATH" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- CC=$hold_cc
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEA_PLATFORM" >&5
-$as_echo "$TEA_PLATFORM" >&6; }
-
- # The BUILD_$pkg is to define the correct extern storage class
- # handling when making this package
-
-cat >>confdefs.h <<_ACEOF
-#define BUILD_${PACKAGE_NAME} /**/
-_ACEOF
-
- # Do this here as we have fully defined TEA_PLATFORM now
- if test "${TEA_PLATFORM}" = "windows" ; then
- EXEEXT=".exe"
- CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp"
- fi
-
- # TEA specific:
-
-
-
-
-
-
-
-
-#--------------------------------------------------------------------
-# Load the tkConfig.sh file if necessary (Tk extension)
-#--------------------------------------------------------------------
-
-#TEA_PATH_TKCONFIG
-#TEA_LOAD_TKCONFIG
-
-#-----------------------------------------------------------------------
-# Handle the --prefix=... option by defaulting to what Tcl gave.
-# Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER.
-#-----------------------------------------------------------------------
-
-
- if test "${prefix}" = "NONE"; then
- prefix_default=yes
- if test x"${TCL_PREFIX}" != x; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: --prefix defaulting to TCL_PREFIX ${TCL_PREFIX}" >&5
-$as_echo "$as_me: --prefix defaulting to TCL_PREFIX ${TCL_PREFIX}" >&6;}
- prefix=${TCL_PREFIX}
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: --prefix defaulting to /usr/local" >&5
-$as_echo "$as_me: --prefix defaulting to /usr/local" >&6;}
- prefix=/usr/local
- fi
- fi
- if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \
- -o x"${exec_prefix_default}" = x"yes" ; then
- if test x"${TCL_EXEC_PREFIX}" != x; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: --exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}" >&5
-$as_echo "$as_me: --exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}" >&6;}
- exec_prefix=${TCL_EXEC_PREFIX}
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: --exec-prefix defaulting to ${prefix}" >&5
-$as_echo "$as_me: --exec-prefix defaulting to ${prefix}" >&6;}
- exec_prefix=$prefix
- fi
- fi
-
-
-#-----------------------------------------------------------------------
-# Standard compiler checks.
-# This sets up CC by using the CC env var, or looks for gcc otherwise.
-# This also calls AC_PROG_CC and a few others to create the basic setup
-# necessary to compile executables.
-#-----------------------------------------------------------------------
-
-
- # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE)
- # in this macro, they need to go into TEA_SETUP_COMPILER instead.
-
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- fi
-fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-else
- CFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if ${ac_cv_prog_CPP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
- #--------------------------------------------------------------------
- # Checks to see if the make program sets the $MAKE variable.
- #--------------------------------------------------------------------
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
-set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.make <<\_ACEOF
-SHELL = /bin/sh
-all:
- @echo '@@@%%%=$(MAKE)=@@@%%%'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
-case `${MAKE-make} -f conftest.make 2>/dev/null` in
- *@@@%%%=?*=@@@%%%*)
- eval ac_cv_prog_make_${ac_make}_set=yes;;
- *)
- eval ac_cv_prog_make_${ac_make}_set=no;;
-esac
-rm -f conftest.make
-fi
-if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- SET_MAKE=
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-
- #--------------------------------------------------------------------
- # Find ranlib
- #--------------------------------------------------------------------
-
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
- ac_ct_RANLIB=$RANLIB
- # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_RANLIB"; then
- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_RANLIB="ranlib"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_RANLIB" = x; then
- RANLIB=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- RANLIB=$ac_ct_RANLIB
- fi
-else
- RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-
- #--------------------------------------------------------------------
- # Determines the correct binary file extension (.o, .obj, .exe etc.)
- #--------------------------------------------------------------------
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -z "$GREP"; then
- ac_path_GREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_GREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_GREP"; then
- as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
- if test -z "$EGREP"; then
- ac_path_EGREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'EGREP' >> "conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_EGREP="$ac_path_EGREP"
- ac_path_EGREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_EGREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_EGREP"; then
- as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_EGREP=$EGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
- # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here.
-
-
- #------------------------------------------------------------------------
- # If we're using GCC, see if the compiler understands -pipe. If so, use it.
- # It makes compiling go faster. (This is only a performance feature.)
- #------------------------------------------------------------------------
-
- if test -z "$no_pipe" -a -n "$GCC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the compiler understands -pipe" >&5
-$as_echo_n "checking if the compiler understands -pipe... " >&6; }
-if ${tcl_cv_cc_pipe+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- tcl_cv_cc_pipe=yes
-else
- tcl_cv_cc_pipe=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- CFLAGS=$hold_cflags
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_pipe" >&5
-$as_echo "$tcl_cv_cc_pipe" >&6; }
- if test $tcl_cv_cc_pipe = yes; then
- CFLAGS="$CFLAGS -pipe"
- fi
- fi
-
- #--------------------------------------------------------------------
- # Common compiler flag setup
- #--------------------------------------------------------------------
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
-$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
-if ${ac_cv_c_bigendian+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_c_bigendian=unknown
- # See if we're dealing with a universal compiler.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifndef __APPLE_CC__
- not a universal capable compiler
- #endif
- typedef int dummy;
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
- # Check for potential -arch flags. It is not universal unless
- # there are at least two -arch flags with different values.
- ac_arch=
- ac_prev=
- for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
- if test -n "$ac_prev"; then
- case $ac_word in
- i?86 | x86_64 | ppc | ppc64)
- if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
- ac_arch=$ac_word
- else
- ac_cv_c_bigendian=universal
- break
- fi
- ;;
- esac
- ac_prev=
- elif test "x$ac_word" = "x-arch"; then
- ac_prev=arch
- fi
- done
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- if test $ac_cv_c_bigendian = unknown; then
- # See if sys/param.h defines the BYTE_ORDER macro.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- #include <sys/param.h>
-
-int
-main ()
-{
-#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
- && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
- && LITTLE_ENDIAN)
- bogus endian macros
- #endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- # It does; now see whether it defined to BIG_ENDIAN or not.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- #include <sys/param.h>
-
-int
-main ()
-{
-#if BYTE_ORDER != BIG_ENDIAN
- not big endian
- #endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_bigendian=yes
-else
- ac_cv_c_bigendian=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- fi
- if test $ac_cv_c_bigendian = unknown; then
- # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <limits.h>
-
-int
-main ()
-{
-#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
- bogus endian macros
- #endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- # It does; now see whether it defined to _BIG_ENDIAN or not.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <limits.h>
-
-int
-main ()
-{
-#ifndef _BIG_ENDIAN
- not big endian
- #endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_bigendian=yes
-else
- ac_cv_c_bigendian=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- fi
- if test $ac_cv_c_bigendian = unknown; then
- # Compile a test program.
- if test "$cross_compiling" = yes; then :
- # Try to guess by grepping values from an object file.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-short int ascii_mm[] =
- { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
- short int ascii_ii[] =
- { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
- int use_ascii (int i) {
- return ascii_mm[i] + ascii_ii[i];
- }
- short int ebcdic_ii[] =
- { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
- short int ebcdic_mm[] =
- { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
- int use_ebcdic (int i) {
- return ebcdic_mm[i] + ebcdic_ii[i];
- }
- extern int foo;
-
-int
-main ()
-{
-return use_ascii (foo) == use_ebcdic (foo);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
- ac_cv_c_bigendian=yes
- fi
- if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
- if test "$ac_cv_c_bigendian" = unknown; then
- ac_cv_c_bigendian=no
- else
- # finding both strings is unlikely to happen, but who knows?
- ac_cv_c_bigendian=unknown
- fi
- fi
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-
- /* Are we little or big endian? From Harbison&Steele. */
- union
- {
- long int l;
- char c[sizeof (long int)];
- } u;
- u.l = 1;
- return u.c[sizeof (long int) - 1] == 1;
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_c_bigendian=no
-else
- ac_cv_c_bigendian=yes
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
-$as_echo "$ac_cv_c_bigendian" >&6; }
- case $ac_cv_c_bigendian in #(
- yes)
- $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
-;; #(
- no)
- ;; #(
- universal)
-
-$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
-
- ;; #(
- *)
- as_fn_error $? "unknown endianness
- presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
- esac
-
-
-
-#-----------------------------------------------------------------------
-# __CHANGE__
-# Specify the C source files to compile in TEA_ADD_SOURCES,
-# public headers that need to be installed in TEA_ADD_HEADERS,
-# stub library C source files to compile in TEA_ADD_STUB_SOURCES,
-# and runtime Tcl library files in TEA_ADD_TCL_SOURCES.
-# This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS
-# and PKG_TCL_SOURCES.
-#-----------------------------------------------------------------------
-
-
- vars="tclZipfs.c"
- for i in $vars; do
- case $i in
- \$*)
- # allow $-var names
- PKG_SOURCES="$PKG_SOURCES $i"
- PKG_OBJECTS="$PKG_OBJECTS $i"
- ;;
- *)
- # check for existence - allows for generic/win/unix VPATH
- # To add more dirs here (like 'src'), you have to update VPATH
- # in Makefile.in as well
- if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
- -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
- -a ! -f "${srcdir}/macosx/$i" \
- ; then
- as_fn_error $? "could not find source file '$i'" "$LINENO" 5
- fi
- PKG_SOURCES="$PKG_SOURCES $i"
- # this assumes it is in a VPATH dir
- i=`basename $i`
- # handle user calling this before or after TEA_SETUP_COMPILER
- if test x"${OBJEXT}" != x ; then
- j="`echo $i | sed -e 's/\.[^.]*$//'`.${OBJEXT}"
- else
- j="`echo $i | sed -e 's/\.[^.]*$//'`.\${OBJEXT}"
- fi
- PKG_OBJECTS="$PKG_OBJECTS $j"
- ;;
- esac
- done
-
-
-
-
- vars=""
- for i in $vars; do
- # check for existence, be strict because it is installed
- if test ! -f "${srcdir}/$i" ; then
- as_fn_error $? "could not find header file '${srcdir}/$i'" "$LINENO" 5
- fi
- PKG_HEADERS="$PKG_HEADERS $i"
- done
-
-
-
- vars=""
- for i in $vars; do
- PKG_INCLUDES="$PKG_INCLUDES $i"
- done
-
-
-
- vars=""
- for i in $vars; do
- if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then
- # Convert foo.lib to -lfoo for GCC. No-op if not *.lib
- i=`echo "$i" | sed -e 's/^\([^-].*\)\.lib$/-l\1/i'`
- fi
- PKG_LIBS="$PKG_LIBS $i"
- done
-
-
-
- PKG_CFLAGS="$PKG_CFLAGS "
-
-
-
- vars=""
- for i in $vars; do
- # check for existence - allows for generic/win/unix VPATH
- if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
- -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
- -a ! -f "${srcdir}/macosx/$i" \
- ; then
- as_fn_error $? "could not find stub source file '$i'" "$LINENO" 5
- fi
- PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i"
- # this assumes it is in a VPATH dir
- i=`basename $i`
- # handle user calling this before or after TEA_SETUP_COMPILER
- if test x"${OBJEXT}" != x ; then
- j="`echo $i | sed -e 's/\.[^.]*$//'`.${OBJEXT}"
- else
- j="`echo $i | sed -e 's/\.[^.]*$//'`.\${OBJEXT}"
- fi
- PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j"
- done
-
-
-
-
- vars=""
- for i in $vars; do
- # check for existence, be strict because it is installed
- if test ! -f "${srcdir}/$i" ; then
- as_fn_error $? "could not find tcl source file '${srcdir}/$i'" "$LINENO" 5
- fi
- PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i"
- done
-
-
-
-$as_echo "#define HAVE_ZLIB 1" >>confdefs.h
-
-
-#--------------------------------------------------------------------
-# __CHANGE__
-#
-# You can add more files to clean if your extension creates any extra
-# files by extending CLEANFILES.
-# Add pkgIndex.tcl if it is generated in the Makefile instead of ./configure
-# and change Makefile.in to move it from CONFIG_CLEAN_FILES to BINARIES var.
-#
-# A few miscellaneous platform-specific items:
-# TEA_ADD_* any platform specific compiler/build info here.
-#--------------------------------------------------------------------
-
-#CLEANFILES="$CLEANFILES pkgIndex.tcl"
-if test "${TEA_PLATFORM}" = "windows" ; then
- # Ensure no empty if clauses
- :
- #TEA_ADD_SOURCES([win/winFile.c])
- #TEA_ADD_INCLUDES([-I\"$(${CYGPATH} ${srcdir}/win)\"])
-else
- # Ensure no empty else clauses
- :
- #TEA_ADD_SOURCES([unix/unixFile.c])
- #TEA_ADD_LIBS([-lsuperfly])
-fi
-
-#--------------------------------------------------------------------
-# __CHANGE__
-# Choose which headers you need. Extension authors should try very
-# hard to only rely on the Tcl public header files. Internal headers
-# contain private data structures and are subject to change without
-# notice.
-# This MUST be called after TEA_LOAD_TCLCONFIG / TEA_LOAD_TKCONFIG
-#--------------------------------------------------------------------
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tcl public headers" >&5
-$as_echo_n "checking for Tcl public headers... " >&6; }
-
-
-# Check whether --with-tclinclude was given.
-if test "${with_tclinclude+set}" = set; then :
- withval=$with_tclinclude; with_tclinclude=${withval}
-fi
-
-
- if ${ac_cv_c_tclh+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- # Use the value from --with-tclinclude, if it was given
-
- if test x"${with_tclinclude}" != x ; then
- if test -f "${with_tclinclude}/tcl.h" ; then
- ac_cv_c_tclh=${with_tclinclude}
- else
- as_fn_error $? "${with_tclinclude} directory does not contain tcl.h" "$LINENO" 5
- fi
- else
- list=""
- if test "`uname -s`" = "Darwin"; then
- # If Tcl was built as a framework, attempt to use
- # the framework's Headers directory
- case ${TCL_DEFS} in
- *TCL_FRAMEWORK*)
- list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`"
- ;;
- esac
- fi
-
- # Look in the source dir only if Tcl is not installed,
- # and in that situation, look there before installed locations.
- if test -f "${TCL_BIN_DIR}/Makefile" ; then
- list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`"
- fi
-
- # Check order: pkg --prefix location, Tcl's --prefix location,
- # relative to directory of tclConfig.sh.
-
- eval "temp_includedir=${includedir}"
- list="$list \
- `ls -d ${temp_includedir} 2>/dev/null` \
- `ls -d ${TCL_PREFIX}/include 2>/dev/null` \
- `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`"
- if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then
- list="$list /usr/local/include /usr/include"
- if test x"${TCL_INCLUDE_SPEC}" != x ; then
- d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'`
- list="$list `ls -d ${d} 2>/dev/null`"
- fi
- fi
- for i in $list ; do
- if test -f "$i/tcl.h" ; then
- ac_cv_c_tclh=$i
- break
- fi
- done
- fi
-
-fi
-
-
- # Print a message based on how we determined the include path
-
- if test x"${ac_cv_c_tclh}" = x ; then
- as_fn_error $? "tcl.h not found. Please specify its location with --with-tclinclude" "$LINENO" 5
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_cv_c_tclh}" >&5
-$as_echo "${ac_cv_c_tclh}" >&6; }
- fi
-
- # Convert to a native path and substitute into the output files.
-
- INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}`
-
- TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
-
-
-
-
- # Allow for --with-tclinclude to take effect and define ${ac_cv_c_tclh}
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tcl private include files" >&5
-$as_echo_n "checking for Tcl private include files... " >&6; }
-
- TCL_SRC_DIR_NATIVE=`${CYGPATH} ${TCL_SRC_DIR}`
- TCL_TOP_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}\"
-
- # Check to see if tcl<Plat>Port.h isn't already with the public headers
- # Don't look for tclInt.h because that resides with tcl.h in the core
- # sources, but the <plat>Port headers are in a different directory
- if test "${TEA_PLATFORM}" = "windows" -a \
- -f "${ac_cv_c_tclh}/tclWinPort.h"; then
- result="private headers found with public headers"
- elif test "${TEA_PLATFORM}" = "unix" -a \
- -f "${ac_cv_c_tclh}/tclUnixPort.h"; then
- result="private headers found with public headers"
- else
- TCL_GENERIC_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/generic\"
- if test "${TEA_PLATFORM}" = "windows"; then
- TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/win\"
- else
- TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/unix\"
- fi
- # Overwrite the previous TCL_INCLUDES as this should capture both
- # public and private headers in the same set.
- # We want to ensure these are substituted so as not to require
- # any *_NATIVE vars be defined in the Makefile
- TCL_INCLUDES="-I${TCL_GENERIC_DIR_NATIVE} -I${TCL_PLATFORM_DIR_NATIVE}"
- if test "`uname -s`" = "Darwin"; then
- # If Tcl was built as a framework, attempt to use
- # the framework's Headers and PrivateHeaders directories
- case ${TCL_DEFS} in
- *TCL_FRAMEWORK*)
- if test -d "${TCL_BIN_DIR}/Headers" -a \
- -d "${TCL_BIN_DIR}/PrivateHeaders"; then
- TCL_INCLUDES="-I\"${TCL_BIN_DIR}/Headers\" -I\"${TCL_BIN_DIR}/PrivateHeaders\" ${TCL_INCLUDES}"
- else
- TCL_INCLUDES="${TCL_INCLUDES} ${TCL_INCLUDE_SPEC} `echo "${TCL_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`"
- fi
- ;;
- esac
- result="Using ${TCL_INCLUDES}"
- else
- if test ! -f "${TCL_SRC_DIR}/generic/tclInt.h" ; then
- as_fn_error $? "Cannot find private header tclInt.h in ${TCL_SRC_DIR}" "$LINENO" 5
- fi
- result="Using srcdir found in tclConfig.sh: ${TCL_SRC_DIR}"
- fi
- fi
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${result}" >&5
-$as_echo "${result}" >&6; }
-
-
-#TEA_PUBLIC_TK_HEADERS
-#TEA_PRIVATE_TK_HEADERS
-#TEA_PATH_X
-
-#--------------------------------------------------------------------
-# Check whether --enable-threads or --disable-threads was given.
-# This auto-enables if Tcl was compiled threaded.
-#--------------------------------------------------------------------
-
-
- # Check whether --enable-threads was given.
-if test "${enable_threads+set}" = set; then :
- enableval=$enable_threads; tcl_ok=$enableval
-else
- tcl_ok=yes
-fi
-
-
- if test "${enable_threads+set}" = set; then
- enableval="$enable_threads"
- tcl_ok=$enableval
- else
- tcl_ok=yes
- fi
-
- if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then
- TCL_THREADS=1
-
- if test "${TEA_PLATFORM}" != "windows" ; then
- # We are always OK on Windows, so check what this platform wants:
-
- # USE_THREAD_ALLOC tells us to try the special thread-based
- # allocator that significantly reduces lock contention
-
-$as_echo "#define USE_THREAD_ALLOC 1" >>confdefs.h
-
-
-$as_echo "#define _REENTRANT 1" >>confdefs.h
-
- if test "`uname -s`" = "SunOS" ; then
-
-$as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
-
- fi
-
-$as_echo "#define _THREAD_SAFE 1" >>confdefs.h
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lpthread" >&5
-$as_echo_n "checking for pthread_mutex_init in -lpthread... " >&6; }
-if ${ac_cv_lib_pthread_pthread_mutex_init+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpthread $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pthread_mutex_init ();
-int
-main ()
-{
-return pthread_mutex_init ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_pthread_pthread_mutex_init=yes
-else
- ac_cv_lib_pthread_pthread_mutex_init=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_mutex_init" >&5
-$as_echo "$ac_cv_lib_pthread_pthread_mutex_init" >&6; }
-if test "x$ac_cv_lib_pthread_pthread_mutex_init" = xyes; then :
- tcl_ok=yes
-else
- tcl_ok=no
-fi
-
- if test "$tcl_ok" = "no"; then
- # Check a little harder for __pthread_mutex_init in the same
- # library, as some systems hide it there until pthread.h is
- # defined. We could alternatively do an AC_TRY_COMPILE with
- # pthread.h, but that will work with libpthread really doesn't
- # exist, like AIX 4.2. [Bug: 4359]
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __pthread_mutex_init in -lpthread" >&5
-$as_echo_n "checking for __pthread_mutex_init in -lpthread... " >&6; }
-if ${ac_cv_lib_pthread___pthread_mutex_init+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpthread $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char __pthread_mutex_init ();
-int
-main ()
-{
-return __pthread_mutex_init ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_pthread___pthread_mutex_init=yes
-else
- ac_cv_lib_pthread___pthread_mutex_init=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread___pthread_mutex_init" >&5
-$as_echo "$ac_cv_lib_pthread___pthread_mutex_init" >&6; }
-if test "x$ac_cv_lib_pthread___pthread_mutex_init" = xyes; then :
- tcl_ok=yes
-else
- tcl_ok=no
-fi
-
- fi
-
- if test "$tcl_ok" = "yes"; then
- # The space is needed
- THREADS_LIBS=" -lpthread"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lpthreads" >&5
-$as_echo_n "checking for pthread_mutex_init in -lpthreads... " >&6; }
-if ${ac_cv_lib_pthreads_pthread_mutex_init+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpthreads $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pthread_mutex_init ();
-int
-main ()
-{
-return pthread_mutex_init ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_pthreads_pthread_mutex_init=yes
-else
- ac_cv_lib_pthreads_pthread_mutex_init=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthreads_pthread_mutex_init" >&5
-$as_echo "$ac_cv_lib_pthreads_pthread_mutex_init" >&6; }
-if test "x$ac_cv_lib_pthreads_pthread_mutex_init" = xyes; then :
- tcl_ok=yes
-else
- tcl_ok=no
-fi
-
- if test "$tcl_ok" = "yes"; then
- # The space is needed
- THREADS_LIBS=" -lpthreads"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lc" >&5
-$as_echo_n "checking for pthread_mutex_init in -lc... " >&6; }
-if ${ac_cv_lib_c_pthread_mutex_init+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lc $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pthread_mutex_init ();
-int
-main ()
-{
-return pthread_mutex_init ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_c_pthread_mutex_init=yes
-else
- ac_cv_lib_c_pthread_mutex_init=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_pthread_mutex_init" >&5
-$as_echo "$ac_cv_lib_c_pthread_mutex_init" >&6; }
-if test "x$ac_cv_lib_c_pthread_mutex_init" = xyes; then :
- tcl_ok=yes
-else
- tcl_ok=no
-fi
-
- if test "$tcl_ok" = "no"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lc_r" >&5
-$as_echo_n "checking for pthread_mutex_init in -lc_r... " >&6; }
-if ${ac_cv_lib_c_r_pthread_mutex_init+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lc_r $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pthread_mutex_init ();
-int
-main ()
-{
-return pthread_mutex_init ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_c_r_pthread_mutex_init=yes
-else
- ac_cv_lib_c_r_pthread_mutex_init=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_mutex_init" >&5
-$as_echo "$ac_cv_lib_c_r_pthread_mutex_init" >&6; }
-if test "x$ac_cv_lib_c_r_pthread_mutex_init" = xyes; then :
- tcl_ok=yes
-else
- tcl_ok=no
-fi
-
- if test "$tcl_ok" = "yes"; then
- # The space is needed
- THREADS_LIBS=" -pthread"
- else
- TCL_THREADS=0
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Do not know how to find pthread lib on your system - thread support disabled" >&5
-$as_echo "$as_me: WARNING: Do not know how to find pthread lib on your system - thread support disabled" >&2;}
- fi
- fi
- fi
- fi
- fi
- else
- TCL_THREADS=0
- fi
- # Do checking message here to not mess up interleaved configure output
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for building with threads" >&5
-$as_echo_n "checking for building with threads... " >&6; }
- if test "${TCL_THREADS}" = 1; then
-
-$as_echo "#define TCL_THREADS 1" >>confdefs.h
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (default)" >&5
-$as_echo "yes (default)" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
- # TCL_THREADS sanity checking. See if our request for building with
- # threads is the same as the way Tcl was built. If not, warn the user.
- case ${TCL_DEFS} in
- *THREADS=1*)
- if test "${TCL_THREADS}" = "0"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
- Building ${PACKAGE_NAME} without threads enabled, but building against Tcl
- that IS thread-enabled. It is recommended to use --enable-threads." >&5
-$as_echo "$as_me: WARNING:
- Building ${PACKAGE_NAME} without threads enabled, but building against Tcl
- that IS thread-enabled. It is recommended to use --enable-threads." >&2;}
- fi
- ;;
- esac
-
-
-
-#--------------------------------------------------------------------
-# The statement below defines a collection of symbols related to
-# building as a shared library instead of a static library.
-#--------------------------------------------------------------------
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to build libraries" >&5
-$as_echo_n "checking how to build libraries... " >&6; }
- # Check whether --enable-shared was given.
-if test "${enable_shared+set}" = set; then :
- enableval=$enable_shared; shared_ok=$enableval
-else
- shared_ok=yes
-fi
-
-
- if test "${enable_shared+set}" = set; then
- enableval="$enable_shared"
- shared_ok=$enableval
- else
- shared_ok=yes
- fi
-
- # Check whether --enable-stubs was given.
-if test "${enable_stubs+set}" = set; then :
- enableval=$enable_stubs; stubs_ok=$enableval
-else
- stubs_ok=yes
-fi
-
-
- if test "${enable_stubs+set}" = set; then
- enableval="$enable_stubs"
- stubs_ok=$enableval
- else
- stubs_ok=yes
- fi
-
- # Stubs are always enabled for shared builds
- if test "$shared_ok" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: shared" >&5
-$as_echo "shared" >&6; }
- SHARED_BUILD=1
- STUBS_BUILD=1
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: static" >&5
-$as_echo "static" >&6; }
- SHARED_BUILD=0
-
-$as_echo "#define STATIC_BUILD 1" >>confdefs.h
-
- if test "$stubs_ok" = "yes" ; then
- STUBS_BUILD=1
- else
- STUBS_BUILD=0
- fi
- fi
- if test "${STUBS_BUILD}" = "1" ; then
-
-$as_echo "#define USE_TCL_STUBS 1" >>confdefs.h
-
-
-$as_echo "#define USE_TCLOO_STUBS 1" >>confdefs.h
-
- if test "${TEA_WINDOWINGSYSTEM}" != ""; then
-
-$as_echo "#define USE_TK_STUBS 1" >>confdefs.h
-
- fi
- fi
-
-
-
-
-
-#--------------------------------------------------------------------
-# This macro figures out what flags to use with the compiler/linker
-# when building shared/static debug/optimized objects. This information
-# can be taken from the tclConfig.sh file, but this figures it all out.
-#--------------------------------------------------------------------
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
- ac_ct_RANLIB=$RANLIB
- # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_RANLIB"; then
- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_RANLIB="ranlib"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_RANLIB" = x; then
- RANLIB=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- RANLIB=$ac_ct_RANLIB
- fi
-else
- RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-
-
-
- # Step 0.a: Enable 64 bit support?
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 64bit support is requested" >&5
-$as_echo_n "checking if 64bit support is requested... " >&6; }
- # Check whether --enable-64bit was given.
-if test "${enable_64bit+set}" = set; then :
- enableval=$enable_64bit; do64bit=$enableval
-else
- do64bit=no
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $do64bit" >&5
-$as_echo "$do64bit" >&6; }
-
- # Step 0.b: Enable Solaris 64 bit VIS support?
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 64bit Sparc VIS support is requested" >&5
-$as_echo_n "checking if 64bit Sparc VIS support is requested... " >&6; }
- # Check whether --enable-64bit-vis was given.
-if test "${enable_64bit_vis+set}" = set; then :
- enableval=$enable_64bit_vis; do64bitVIS=$enableval
-else
- do64bitVIS=no
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $do64bitVIS" >&5
-$as_echo "$do64bitVIS" >&6; }
- # Force 64bit on with VIS
- if test "$do64bitVIS" = "yes"; then :
- do64bit=yes
-fi
-
- # Step 0.c: Check if visibility support is available. Do this here so
- # that platform specific alternatives can be used below if this fails.
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler supports visibility \"hidden\"" >&5
-$as_echo_n "checking if compiler supports visibility \"hidden\"... " >&6; }
-if ${tcl_cv_cc_visibility_hidden+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
- extern __attribute__((__visibility__("hidden"))) void f(void);
- void f(void) {}
-int
-main ()
-{
-f();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- tcl_cv_cc_visibility_hidden=yes
-else
- tcl_cv_cc_visibility_hidden=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- CFLAGS=$hold_cflags
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_visibility_hidden" >&5
-$as_echo "$tcl_cv_cc_visibility_hidden" >&6; }
- if test $tcl_cv_cc_visibility_hidden = yes; then :
-
-
-$as_echo "#define MODULE_SCOPE extern __attribute__((__visibility__(\"hidden\")))" >>confdefs.h
-
-
-$as_echo "#define HAVE_HIDDEN 1" >>confdefs.h
-
-
-fi
-
- # Step 0.d: Disable -rpath support?
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if rpath support is requested" >&5
-$as_echo_n "checking if rpath support is requested... " >&6; }
- # Check whether --enable-rpath was given.
-if test "${enable_rpath+set}" = set; then :
- enableval=$enable_rpath; doRpath=$enableval
-else
- doRpath=yes
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $doRpath" >&5
-$as_echo "$doRpath" >&6; }
-
- # TEA specific: Cross-compiling options for Windows/CE builds?
-
- if test "${TEA_PLATFORM}" = windows; then :
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Windows/CE build is requested" >&5
-$as_echo_n "checking if Windows/CE build is requested... " >&6; }
- # Check whether --enable-wince was given.
-if test "${enable_wince+set}" = set; then :
- enableval=$enable_wince; doWince=$enableval
-else
- doWince=no
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $doWince" >&5
-$as_echo "$doWince" >&6; }
-
-fi
-
- # Set the variable "system" to hold the name and version number
- # for the system.
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking system version" >&5
-$as_echo_n "checking system version... " >&6; }
-if ${tcl_cv_sys_version+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- # TEA specific:
- if test "${TEA_PLATFORM}" = "windows" ; then
- tcl_cv_sys_version=windows
- else
- tcl_cv_sys_version=`uname -s`-`uname -r`
- if test "$?" -ne 0 ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: can't find uname command" >&5
-$as_echo "$as_me: WARNING: can't find uname command" >&2;}
- tcl_cv_sys_version=unknown
- else
- if test "`uname -s`" = "AIX" ; then
- tcl_cv_sys_version=AIX-`uname -v`.`uname -r`
- fi
- fi
- fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_sys_version" >&5
-$as_echo "$tcl_cv_sys_version" >&6; }
- system=$tcl_cv_sys_version
-
-
- # Require ranlib early so we can override it in special cases below.
-
-
-
- # Set configuration options based on system name and version.
- # This is similar to Tcl's unix/tcl.m4 except that we've added a
- # "windows" case and removed some core-only vars.
-
- do64bit_ok=no
- # default to '{$LIBS}' and set to "" on per-platform necessary basis
- SHLIB_LD_LIBS='${LIBS}'
- # When ld needs options to work in 64-bit mode, put them in
- # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load]
- # is disabled by the user. [Bug 1016796]
- LDFLAGS_ARCH=""
- UNSHARED_LIB_SUFFIX=""
- # TEA specific: use PACKAGE_VERSION instead of VERSION
- TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`'
- ECHO_VERSION='`echo ${PACKAGE_VERSION}`'
- TCL_LIB_VERSIONS_OK=ok
- CFLAGS_DEBUG=-g
- if test "$GCC" = yes; then :
-
- CFLAGS_OPTIMIZE=-O2
- CFLAGS_WARNING="-Wall"
-
-else
-
- CFLAGS_OPTIMIZE=-O
- CFLAGS_WARNING=""
-
-fi
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AR+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$AR"; then
- ac_cv_prog_AR="$AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_AR="${ac_tool_prefix}ar"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_AR"; then
- ac_ct_AR=$AR
- # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AR+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_AR"; then
- ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_AR="ar"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_AR" = x; then
- AR=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- AR=$ac_ct_AR
- fi
-else
- AR="$ac_cv_prog_AR"
-fi
-
- STLIB_LD='${AR} cr'
- LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH"
- if test "x$SHLIB_VERSION" = x; then :
- SHLIB_VERSION=""
-else
- SHLIB_VERSION=".$SHLIB_VERSION"
-fi
- case $system in
- # TEA specific:
- windows)
- # This is a 2-stage check to make sure we have the 64-bit SDK
- # We have to know where the SDK is installed.
- # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs
- # MACHINE is IX86 for LINK, but this is used by the manifest,
- # which requires x86|amd64|ia64.
- MACHINE="X86"
- if test "$do64bit" != "no" ; then
- if test "x${MSSDK}x" = "xx" ; then
- MSSDK="C:/Progra~1/Microsoft Platform SDK"
- fi
- MSSDK=`echo "$MSSDK" | sed -e 's!\\\!/!g'`
- PATH64=""
- case "$do64bit" in
- amd64|x64|yes)
- MACHINE="AMD64" ; # default to AMD64 64-bit build
- PATH64="${MSSDK}/Bin/Win64/x86/AMD64"
- ;;
- ia64)
- MACHINE="IA64"
- PATH64="${MSSDK}/Bin/Win64"
- ;;
- esac
- if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find 64-bit $MACHINE SDK to enable 64bit mode" >&5
-$as_echo "$as_me: WARNING: Could not find 64-bit $MACHINE SDK to enable 64bit mode" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ensure latest Platform SDK is installed" >&5
-$as_echo "$as_me: WARNING: Ensure latest Platform SDK is installed" >&2;}
- do64bit="no"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using 64-bit $MACHINE mode" >&5
-$as_echo " Using 64-bit $MACHINE mode" >&6; }
- do64bit_ok="yes"
- fi
- fi
-
- if test "$doWince" != "no" ; then
- if test "$do64bit" != "no" ; then
- as_fn_error $? "Windows/CE and 64-bit builds incompatible" "$LINENO" 5
- fi
- if test "$GCC" = "yes" ; then
- as_fn_error $? "Windows/CE and GCC builds incompatible" "$LINENO" 5
- fi
-
- # First, look for one uninstalled.
- # the alternative search directory is invoked by --with-celib
-
- if test x"${no_celib}" = x ; then
- # we reset no_celib in case something fails here
- no_celib=true
-
-# Check whether --with-celib was given.
-if test "${with_celib+set}" = set; then :
- withval=$with_celib; with_celibconfig=${withval}
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Windows/CE celib directory" >&5
-$as_echo_n "checking for Windows/CE celib directory... " >&6; }
- if ${ac_cv_c_celibconfig+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- # First check to see if --with-celibconfig was specified.
- if test x"${with_celibconfig}" != x ; then
- if test -d "${with_celibconfig}/inc" ; then
- ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)`
- else
- as_fn_error $? "${with_celibconfig} directory doesn't contain inc directory" "$LINENO" 5
- fi
- fi
-
- # then check for a celib library
- if test x"${ac_cv_c_celibconfig}" = x ; then
- for i in \
- ../celib-palm-3.0 \
- ../celib \
- ../../celib-palm-3.0 \
- ../../celib \
- `ls -dr ../celib-*3.[0-9]* 2>/dev/null` \
- ${srcdir}/../celib-palm-3.0 \
- ${srcdir}/../celib \
- `ls -dr ${srcdir}/../celib-*3.[0-9]* 2>/dev/null` \
- ; do
- if test -d "$i/inc" ; then
- ac_cv_c_celibconfig=`(cd $i; pwd)`
- break
- fi
- done
- fi
-
-fi
-
- if test x"${ac_cv_c_celibconfig}" = x ; then
- as_fn_error $? "Cannot find celib support library directory" "$LINENO" 5
- else
- no_celib=
- CELIB_DIR=${ac_cv_c_celibconfig}
- CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'`
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: found $CELIB_DIR" >&5
-$as_echo "found $CELIB_DIR" >&6; }
- fi
- fi
-
- # Set defaults for common evc4/PPC2003 setup
- # Currently Tcl requires 300+, possibly 420+ for sockets
- CEVERSION=420; # could be 211 300 301 400 420 ...
- TARGETCPU=ARMV4; # could be ARMV4 ARM MIPS SH3 X86 ...
- ARCH=ARM; # could be ARM MIPS X86EM ...
- PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002"
- if test "$doWince" != "yes"; then
- # If !yes then the user specified something
- # Reset ARCH to allow user to skip specifying it
- ARCH=
- eval `echo $doWince | awk -F, '{ \
- if (length($1)) { printf "CEVERSION=\"%s\"\n", $1; \
- if ($1 < 400) { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \
- if (length($2)) { printf "TARGETCPU=\"%s\"\n", toupper($2) }; \
- if (length($3)) { printf "ARCH=\"%s\"\n", toupper($3) }; \
- if (length($4)) { printf "PLATFORM=\"%s\"\n", $4 }; \
- }'`
- if test "x${ARCH}" = "x" ; then
- ARCH=$TARGETCPU;
- fi
- fi
- OSVERSION=WCE$CEVERSION;
- if test "x${WCEROOT}" = "x" ; then
- WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0"
- if test ! -d "${WCEROOT}" ; then
- WCEROOT="C:/Program Files/Microsoft eMbedded Tools"
- fi
- fi
- if test "x${SDKROOT}" = "x" ; then
- SDKROOT="C:/Program Files/Windows CE Tools"
- if test ! -d "${SDKROOT}" ; then
- SDKROOT="C:/Windows CE Tools"
- fi
- fi
- WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'`
- SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'`
- if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \
- -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then
- as_fn_error $? "could not find PocketPC SDK or target compiler to enable WinCE mode $CEVERSION,$TARGETCPU,$ARCH,$PLATFORM" "$LINENO" 5
- doWince="no"
- else
- # We could PATH_NOSPACE these, but that's not important,
- # as long as we quote them when used.
- CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include"
- if test -d "${CEINCLUDE}/${TARGETCPU}" ; then
- CEINCLUDE="${CEINCLUDE}/${TARGETCPU}"
- fi
- CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}"
- fi
- fi
-
- if test "$GCC" != "yes" ; then
- if test "${SHARED_BUILD}" = "0" ; then
- runtime=-MT
- else
- runtime=-MD
- fi
- case "x`echo \${VisualStudioVersion}`" in
- x1[4-9]*)
- lflags="${lflags} -nodefaultlib:libucrt.lib"
-
- vars="ucrt.lib"
- for i in $vars; do
- if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then
- # Convert foo.lib to -lfoo for GCC. No-op if not *.lib
- i=`echo "$i" | sed -e 's/^\([^-].*\)\.lib$/-l\1/i'`
- fi
- PKG_LIBS="$PKG_LIBS $i"
- done
-
-
- ;;
- *)
- ;;
- esac
-
- if test "$do64bit" != "no" ; then
- # All this magic is necessary for the Win64 SDK RC1 - hobbs
- CC="\"${PATH64}/cl.exe\""
- CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\""
- RC="\"${MSSDK}/bin/rc.exe\""
- lflags="${lflags} -nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\""
- LINKBIN="\"${PATH64}/link.exe\""
- CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d"
- CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}"
- # Avoid 'unresolved external symbol __security_cookie'
- # errors, c.f. http://support.microsoft.com/?id=894573
-
- vars="bufferoverflowU.lib"
- for i in $vars; do
- if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then
- # Convert foo.lib to -lfoo for GCC. No-op if not *.lib
- i=`echo "$i" | sed -e 's/^\([^-].*\)\.lib$/-l\1/i'`
- fi
- PKG_LIBS="$PKG_LIBS $i"
- done
-
-
- elif test "$doWince" != "no" ; then
- CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin"
- if test "${TARGETCPU}" = "X86"; then
- CC="\"${CEBINROOT}/cl.exe\""
- else
- CC="\"${CEBINROOT}/cl${ARCH}.exe\""
- fi
- CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\""
- RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\""
- arch=`echo ${ARCH} | awk '{print tolower($0)}'`
- defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS"
- if test "${SHARED_BUILD}" = "1" ; then
- # Static CE builds require static celib as well
- defs="${defs} _DLL"
- fi
- for i in $defs ; do
-
-cat >>confdefs.h <<_ACEOF
-#define $i 1
-_ACEOF
-
- done
-
-cat >>confdefs.h <<_ACEOF
-#define _WIN32_WCE $CEVERSION
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define UNDER_CE $CEVERSION
-_ACEOF
-
- CFLAGS_DEBUG="-nologo -Zi -Od"
- CFLAGS_OPTIMIZE="-nologo -Ox"
- lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'`
- lflags="${lflags} -MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo"
- LINKBIN="\"${CEBINROOT}/link.exe\""
-
- else
- RC="rc"
- lflags="${lflags} -nologo"
- LINKBIN="link"
- CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d"
- CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}"
- fi
- fi
-
- if test "$GCC" = "yes"; then
- # mingw gcc mode
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args.
-set dummy ${ac_tool_prefix}windres; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$RC"; then
- ac_cv_prog_RC="$RC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_RC="${ac_tool_prefix}windres"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-RC=$ac_cv_prog_RC
-if test -n "$RC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5
-$as_echo "$RC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RC"; then
- ac_ct_RC=$RC
- # Extract the first word of "windres", so it can be a program name with args.
-set dummy windres; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_RC"; then
- ac_cv_prog_ac_ct_RC="$ac_ct_RC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_RC="windres"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RC=$ac_cv_prog_ac_ct_RC
-if test -n "$ac_ct_RC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RC" >&5
-$as_echo "$ac_ct_RC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_RC" = x; then
- RC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- RC=$ac_ct_RC
- fi
-else
- RC="$ac_cv_prog_RC"
-fi
-
- CFLAGS_DEBUG="-g"
- CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
- SHLIB_LD='${CC} -shared'
- UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
- LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}"
- LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}"
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cross-compile version of gcc" >&5
-$as_echo_n "checking for cross-compile version of gcc... " >&6; }
-if ${ac_cv_cross+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
- #ifdef _WIN32
- #error cross-compiler
- #endif
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_cross=yes
-else
- ac_cv_cross=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cross" >&5
-$as_echo "$ac_cv_cross" >&6; }
- if test "$ac_cv_cross" = "yes"; then
- case "$do64bit" in
- amd64|x64|yes)
- CC="x86_64-w64-mingw32-gcc"
- LD="x86_64-w64-mingw32-ld"
- AR="x86_64-w64-mingw32-ar"
- RANLIB="x86_64-w64-mingw32-ranlib"
- RC="x86_64-w64-mingw32-windres"
- ;;
- *)
- CC="i686-w64-mingw32-gcc"
- LD="i686-w64-mingw32-ld"
- AR="i686-w64-mingw32-ar"
- RANLIB="i686-w64-mingw32-ranlib"
- RC="i686-w64-mingw32-windres"
- ;;
- esac
- fi
-
- else
- SHLIB_LD="${LINKBIN} -dll ${lflags}"
- # link -lib only works when -lib is the first arg
- STLIB_LD="${LINKBIN} -lib ${lflags}"
- UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib'
- PATHTYPE=-w
- # For information on what debugtype is most useful, see:
- # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp
- # and also
- # http://msdn2.microsoft.com/en-us/library/y0zzbyt4%28VS.80%29.aspx
- # This essentially turns it all on.
- LDFLAGS_DEBUG="-debug -debugtype:cv"
- LDFLAGS_OPTIMIZE="-release"
- if test "$doWince" != "no" ; then
- LDFLAGS_CONSOLE="-link ${lflags}"
- LDFLAGS_WINDOW=${LDFLAGS_CONSOLE}
- else
- LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}"
- LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}"
- fi
- fi
-
- SHLIB_SUFFIX=".dll"
- SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll'
-
- TCL_LIB_VERSIONS_OK=nodots
- ;;
- AIX-*)
- if test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"; then :
-
- # AIX requires the _r compiler when gcc isn't being used
- case "${CC}" in
- *_r|*_r\ *)
- # ok ...
- ;;
- *)
- # Make sure only first arg gets _r
- CC=`echo "$CC" | sed -e 's/^\([^ ]*\)/\1_r/'`
- ;;
- esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using $CC for compiling with threads" >&5
-$as_echo "Using $CC for compiling with threads" >&6; }
-
-fi
- LIBS="$LIBS -lc"
- SHLIB_CFLAGS=""
- SHLIB_SUFFIX=".so"
-
- LD_LIBRARY_PATH_VAR="LIBPATH"
-
- # Check to enable 64-bit flags for compiler/linker
- if test "$do64bit" = yes; then :
-
- if test "$GCC" = yes; then :
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5
-$as_echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;}
-
-else
-
- do64bit_ok=yes
- CFLAGS="$CFLAGS -q64"
- LDFLAGS_ARCH="-q64"
- RANLIB="${RANLIB} -X64"
- AR="${AR} -X64"
- SHLIB_LD_FLAGS="-b64"
-
-fi
-
-fi
-
- if test "`uname -m`" = ia64; then :
-
- # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC
- SHLIB_LD="/usr/ccs/bin/ld -G -z text"
- if test "$GCC" = yes; then :
-
- CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
-
-else
-
- CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}'
-
-fi
- LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
-
-else
-
- if test "$GCC" = yes; then :
-
- SHLIB_LD='${CC} -shared -Wl,-bexpall'
-
-else
-
- SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry"
- LDFLAGS="$LDFLAGS -brtl"
-
-fi
- SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}"
- CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
- LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-
-fi
- ;;
- BeOS*)
- SHLIB_CFLAGS="-fPIC"
- SHLIB_LD='${CC} -nostart'
- SHLIB_SUFFIX=".so"
-
- #-----------------------------------------------------------
- # Check for inet_ntoa in -lbind, for BeOS (which also needs
- # -lsocket, even if the network functions are in -lnet which
- # is always linked to, for compatibility.
- #-----------------------------------------------------------
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lbind" >&5
-$as_echo_n "checking for inet_ntoa in -lbind... " >&6; }
-if ${ac_cv_lib_bind_inet_ntoa+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lbind $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char inet_ntoa ();
-int
-main ()
-{
-return inet_ntoa ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_bind_inet_ntoa=yes
-else
- ac_cv_lib_bind_inet_ntoa=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bind_inet_ntoa" >&5
-$as_echo "$ac_cv_lib_bind_inet_ntoa" >&6; }
-if test "x$ac_cv_lib_bind_inet_ntoa" = xyes; then :
- LIBS="$LIBS -lbind -lsocket"
-fi
-
- ;;
- BSD/OS-4.*)
- SHLIB_CFLAGS="-export-dynamic -fPIC"
- SHLIB_LD='${CC} -shared'
- SHLIB_SUFFIX=".so"
- LDFLAGS="$LDFLAGS -export-dynamic"
- CC_SEARCH_FLAGS=""
- LD_SEARCH_FLAGS=""
- ;;
- CYGWIN_*)
- SHLIB_CFLAGS=""
- SHLIB_LD='${CC} -shared'
- SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,--out-implib,\$@.a"
- SHLIB_SUFFIX=".dll"
- EXEEXT=".exe"
- do64bit_ok=yes
- CC_SEARCH_FLAGS=""
- LD_SEARCH_FLAGS=""
- ;;
- Haiku*)
- LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
- SHLIB_CFLAGS="-fPIC"
- SHLIB_SUFFIX=".so"
- SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lnetwork" >&5
-$as_echo_n "checking for inet_ntoa in -lnetwork... " >&6; }
-if ${ac_cv_lib_network_inet_ntoa+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lnetwork $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char inet_ntoa ();
-int
-main ()
-{
-return inet_ntoa ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_network_inet_ntoa=yes
-else
- ac_cv_lib_network_inet_ntoa=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_network_inet_ntoa" >&5
-$as_echo "$ac_cv_lib_network_inet_ntoa" >&6; }
-if test "x$ac_cv_lib_network_inet_ntoa" = xyes; then :
- LIBS="$LIBS -lnetwork"
-fi
-
- ;;
- HP-UX-*.11.*)
- # Use updated header definitions where possible
-
-$as_echo "#define _XOPEN_SOURCE_EXTENDED 1" >>confdefs.h
-
- # TEA specific: Needed by Tcl, but not most extensions
- #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?])
- #LIBS="$LIBS -lxnet" # Use the XOPEN network library
-
- if test "`uname -m`" = ia64; then :
-
- SHLIB_SUFFIX=".so"
- # Use newer C++ library for C++ extensions
- #if test "$GCC" != "yes" ; then
- # CPPFLAGS="-AA"
- #fi
-
-else
-
- SHLIB_SUFFIX=".sl"
-
-fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
-$as_echo_n "checking for shl_load in -ldld... " >&6; }
-if ${ac_cv_lib_dld_shl_load+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load ();
-int
-main ()
-{
-return shl_load ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_dld_shl_load=yes
-else
- ac_cv_lib_dld_shl_load=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
-$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
-if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
- tcl_ok=yes
-else
- tcl_ok=no
-fi
-
- if test "$tcl_ok" = yes; then :
-
- LDFLAGS="$LDFLAGS -Wl,-E"
- CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.'
- LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.'
- LD_LIBRARY_PATH_VAR="SHLIB_PATH"
-
-fi
- if test "$GCC" = yes; then :
-
- SHLIB_LD='${CC} -shared'
- LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-
-else
-
- CFLAGS="$CFLAGS -z"
- # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc
- #CFLAGS="$CFLAGS +DAportable"
- SHLIB_CFLAGS="+z"
- SHLIB_LD="ld -b"
-
-fi
-
- # Check to enable 64-bit flags for compiler/linker
- if test "$do64bit" = "yes"; then :
-
- if test "$GCC" = yes; then :
-
- case `${CC} -dumpmachine` in
- hppa64*)
- # 64-bit gcc in use. Fix flags for GNU ld.
- do64bit_ok=yes
- SHLIB_LD='${CC} -shared'
- if test $doRpath = yes; then :
-
- CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-fi
- LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
- ;;
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5
-$as_echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;}
- ;;
- esac
-
-else
-
- do64bit_ok=yes
- CFLAGS="$CFLAGS +DD64"
- LDFLAGS_ARCH="+DD64"
-
-fi
-
-fi ;;
- IRIX-6.*)
- SHLIB_CFLAGS=""
- SHLIB_LD="ld -n32 -shared -rdata_shared"
- SHLIB_SUFFIX=".so"
- if test $doRpath = yes; then :
-
- CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
- LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'
-fi
- if test "$GCC" = yes; then :
-
- CFLAGS="$CFLAGS -mabi=n32"
- LDFLAGS="$LDFLAGS -mabi=n32"
-
-else
-
- case $system in
- IRIX-6.3)
- # Use to build 6.2 compatible binaries on 6.3.
- CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS"
- ;;
- *)
- CFLAGS="$CFLAGS -n32"
- ;;
- esac
- LDFLAGS="$LDFLAGS -n32"
-
-fi
- ;;
- IRIX64-6.*)
- SHLIB_CFLAGS=""
- SHLIB_LD="ld -n32 -shared -rdata_shared"
- SHLIB_SUFFIX=".so"
- if test $doRpath = yes; then :
-
- CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
- LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'
-fi
-
- # Check to enable 64-bit flags for compiler/linker
-
- if test "$do64bit" = yes; then :
-
- if test "$GCC" = yes; then :
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported by gcc" >&5
-$as_echo "$as_me: WARNING: 64bit mode not supported by gcc" >&2;}
-
-else
-
- do64bit_ok=yes
- SHLIB_LD="ld -64 -shared -rdata_shared"
- CFLAGS="$CFLAGS -64"
- LDFLAGS_ARCH="-64"
-
-fi
-
-fi
- ;;
- Linux*|GNU*|NetBSD-Debian)
- SHLIB_CFLAGS="-fPIC"
- SHLIB_SUFFIX=".so"
-
- # TEA specific:
- CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
-
- # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
- SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS_DEFAULT} -shared'
- LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
- if test $doRpath = yes; then :
-
- CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-fi
- LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
- if test "`uname -m`" = "alpha"; then :
- CFLAGS="$CFLAGS -mieee"
-fi
- if test $do64bit = yes; then :
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -m64 flag" >&5
-$as_echo_n "checking if compiler accepts -m64 flag... " >&6; }
-if ${tcl_cv_cc_m64+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- hold_cflags=$CFLAGS
- CFLAGS="$CFLAGS -m64"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- tcl_cv_cc_m64=yes
-else
- tcl_cv_cc_m64=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- CFLAGS=$hold_cflags
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_m64" >&5
-$as_echo "$tcl_cv_cc_m64" >&6; }
- if test $tcl_cv_cc_m64 = yes; then :
-
- CFLAGS="$CFLAGS -m64"
- do64bit_ok=yes
-
-fi
-
-fi
-
- # The combo of gcc + glibc has a bug related to inlining of
- # functions like strtod(). The -fno-builtin flag should address
- # this problem but it does not work. The -fno-inline flag is kind
- # of overkill but it works. Disable inlining only when one of the
- # files in compat/*.c is being linked in.
-
- if test x"${USE_COMPAT}" != x; then :
- CFLAGS="$CFLAGS -fno-inline"
-fi
- ;;
- Lynx*)
- SHLIB_CFLAGS="-fPIC"
- SHLIB_SUFFIX=".so"
- CFLAGS_OPTIMIZE=-02
- SHLIB_LD='${CC} -shared'
- LD_FLAGS="-Wl,--export-dynamic"
- if test $doRpath = yes; then :
-
- CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
- LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-fi
- ;;
- OpenBSD-*)
- arch=`arch -s`
- case "$arch" in
- alpha|sparc64)
- SHLIB_CFLAGS="-fPIC"
- ;;
- *)
- SHLIB_CFLAGS="-fpic"
- ;;
- esac
- SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
- SHLIB_SUFFIX=".so"
- if test $doRpath = yes; then :
-
- CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-fi
- LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
- SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}'
- LDFLAGS="-Wl,-export-dynamic"
- CFLAGS_OPTIMIZE="-O2"
- if test "${TCL_THREADS}" = "1"; then :
-
- # On OpenBSD: Compile with -pthread
- # Don't link with -lpthread
- LIBS=`echo $LIBS | sed s/-lpthread//`
- CFLAGS="$CFLAGS -pthread"
-
-fi
- # OpenBSD doesn't do version numbers with dots.
- UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
- TCL_LIB_VERSIONS_OK=nodots
- ;;
- NetBSD-*)
- # NetBSD has ELF and can use 'cc -shared' to build shared libs
- SHLIB_CFLAGS="-fPIC"
- SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
- SHLIB_SUFFIX=".so"
- LDFLAGS="$LDFLAGS -export-dynamic"
- if test $doRpath = yes; then :
-
- CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-fi
- LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
- if test "${TCL_THREADS}" = "1"; then :
-
- # The -pthread needs to go in the CFLAGS, not LIBS
- LIBS=`echo $LIBS | sed s/-pthread//`
- CFLAGS="$CFLAGS -pthread"
- LDFLAGS="$LDFLAGS -pthread"
-
-fi
- ;;
- DragonFly-*|FreeBSD-*)
- # This configuration from FreeBSD Ports.
- SHLIB_CFLAGS="-fPIC"
- SHLIB_LD="${CC} -shared"
- SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,-soname,\$@"
- SHLIB_SUFFIX=".so"
- LDFLAGS=""
- if test $doRpath = yes; then :
-
- CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
- LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-fi
- if test "${TCL_THREADS}" = "1"; then :
-
- # The -pthread needs to go in the LDFLAGS, not LIBS
- LIBS=`echo $LIBS | sed s/-pthread//`
- CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
- LDFLAGS="$LDFLAGS $PTHREAD_LIBS"
-fi
- case $system in
- FreeBSD-3.*)
- # Version numbers are dot-stripped by system policy.
- TCL_TRIM_DOTS=`echo ${PACKAGE_VERSION} | tr -d .`
- UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
- SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1'
- TCL_LIB_VERSIONS_OK=nodots
- ;;
- esac
- ;;
- Darwin-*)
- CFLAGS_OPTIMIZE="-Os"
- SHLIB_CFLAGS="-fno-common"
- # To avoid discrepancies between what headers configure sees during
- # preprocessing tests and compiling tests, move any -isysroot and
- # -mmacosx-version-min flags from CFLAGS to CPPFLAGS:
- CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \
- awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
- if ($i~/^(isysroot|mmacosx-version-min)/) print "-"$i}'`"
- CFLAGS="`echo " ${CFLAGS}" | \
- awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
- if (!($i~/^(isysroot|mmacosx-version-min)/)) print "-"$i}'`"
- if test $do64bit = yes; then :
-
- case `arch` in
- ppc)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -arch ppc64 flag" >&5
-$as_echo_n "checking if compiler accepts -arch ppc64 flag... " >&6; }
-if ${tcl_cv_cc_arch_ppc64+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- hold_cflags=$CFLAGS
- CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- tcl_cv_cc_arch_ppc64=yes
-else
- tcl_cv_cc_arch_ppc64=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- CFLAGS=$hold_cflags
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_arch_ppc64" >&5
-$as_echo "$tcl_cv_cc_arch_ppc64" >&6; }
- if test $tcl_cv_cc_arch_ppc64 = yes; then :
-
- CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
- do64bit_ok=yes
-
-fi;;
- i386)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -arch x86_64 flag" >&5
-$as_echo_n "checking if compiler accepts -arch x86_64 flag... " >&6; }
-if ${tcl_cv_cc_arch_x86_64+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- hold_cflags=$CFLAGS
- CFLAGS="$CFLAGS -arch x86_64"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- tcl_cv_cc_arch_x86_64=yes
-else
- tcl_cv_cc_arch_x86_64=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- CFLAGS=$hold_cflags
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_arch_x86_64" >&5
-$as_echo "$tcl_cv_cc_arch_x86_64" >&6; }
- if test $tcl_cv_cc_arch_x86_64 = yes; then :
-
- CFLAGS="$CFLAGS -arch x86_64"
- do64bit_ok=yes
-
-fi;;
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Don't know how enable 64-bit on architecture \`arch\`" >&5
-$as_echo "$as_me: WARNING: Don't know how enable 64-bit on architecture \`arch\`" >&2;};;
- esac
-
-else
-
- # Check for combined 32-bit and 64-bit fat build
- if echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \
- && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '; then :
-
- fat_32_64=yes
-fi
-
-fi
- # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
- SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}'
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ld accepts -single_module flag" >&5
-$as_echo_n "checking if ld accepts -single_module flag... " >&6; }
-if ${tcl_cv_ld_single_module+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- hold_ldflags=$LDFLAGS
- LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-int i;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- tcl_cv_ld_single_module=yes
-else
- tcl_cv_ld_single_module=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- LDFLAGS=$hold_ldflags
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_single_module" >&5
-$as_echo "$tcl_cv_ld_single_module" >&6; }
- if test $tcl_cv_ld_single_module = yes; then :
-
- SHLIB_LD="${SHLIB_LD} -Wl,-single_module"
-
-fi
- # TEA specific: link shlib with current and compatibility version flags
- vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([0-9]\{1,5\}\)\(\(\.[0-9]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d`
- SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}"
- SHLIB_SUFFIX=".dylib"
- # Don't use -prebind when building for Mac OS X 10.4 or later only:
- if test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int($2)}'`" -lt 4 -a \
- "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int($2)}'`" -lt 4; then :
-
- LDFLAGS="$LDFLAGS -prebind"
-fi
- LDFLAGS="$LDFLAGS -headerpad_max_install_names"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ld accepts -search_paths_first flag" >&5
-$as_echo_n "checking if ld accepts -search_paths_first flag... " >&6; }
-if ${tcl_cv_ld_search_paths_first+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- hold_ldflags=$LDFLAGS
- LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-int i;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- tcl_cv_ld_search_paths_first=yes
-else
- tcl_cv_ld_search_paths_first=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- LDFLAGS=$hold_ldflags
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_search_paths_first" >&5
-$as_echo "$tcl_cv_ld_search_paths_first" >&6; }
- if test $tcl_cv_ld_search_paths_first = yes; then :
-
- LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
-
-fi
- if test "$tcl_cv_cc_visibility_hidden" != yes; then :
-
-
-$as_echo "#define MODULE_SCOPE __private_extern__" >>confdefs.h
-
- tcl_cv_cc_visibility_hidden=yes
-
-fi
- CC_SEARCH_FLAGS=""
- LD_SEARCH_FLAGS=""
- LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH"
- # TEA specific: for combined 32 & 64 bit fat builds of Tk
- # extensions, verify that 64-bit build is possible.
- if test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"; then :
-
- if test "${TEA_WINDOWINGSYSTEM}" = x11; then :
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit X11" >&5
-$as_echo_n "checking for 64-bit X11... " >&6; }
-if ${tcl_cv_lib_x11_64+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- for v in CFLAGS CPPFLAGS LDFLAGS; do
- eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"'
- done
- CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include"
- LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <X11/Xlib.h>
-int
-main ()
-{
-XrmInitialize();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- tcl_cv_lib_x11_64=yes
-else
- tcl_cv_lib_x11_64=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- for v in CFLAGS CPPFLAGS LDFLAGS; do
- eval $v'="$hold_'$v'"'
- done
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_lib_x11_64" >&5
-$as_echo "$tcl_cv_lib_x11_64" >&6; }
-
-fi
- if test "${TEA_WINDOWINGSYSTEM}" = aqua; then :
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit Tk" >&5
-$as_echo_n "checking for 64-bit Tk... " >&6; }
-if ${tcl_cv_lib_tk_64+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- for v in CFLAGS CPPFLAGS LDFLAGS; do
- eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"'
- done
- CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}"
- LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <tk.h>
-int
-main ()
-{
-Tk_InitStubs(NULL, "", 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- tcl_cv_lib_tk_64=yes
-else
- tcl_cv_lib_tk_64=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- for v in CFLAGS CPPFLAGS LDFLAGS; do
- eval $v'="$hold_'$v'"'
- done
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_lib_tk_64" >&5
-$as_echo "$tcl_cv_lib_tk_64" >&6; }
-
-fi
- # remove 64-bit arch flags from CFLAGS et al. if configuration
- # does not support 64-bit.
- if test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no; then :
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: Removing 64-bit architectures from compiler & linker flags" >&5
-$as_echo "$as_me: Removing 64-bit architectures from compiler & linker flags" >&6;}
- for v in CFLAGS CPPFLAGS LDFLAGS; do
- eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"'
- done
-fi
-
-fi
- ;;
- OS/390-*)
- CFLAGS_OPTIMIZE="" # Optimizer is buggy
-
-$as_echo "#define _OE_SOCKETS 1" >>confdefs.h
-
- ;;
- OSF1-V*)
- # Digital OSF/1
- SHLIB_CFLAGS=""
- if test "$SHARED_BUILD" = 1; then :
-
- SHLIB_LD='ld -shared -expect_unresolved "*"'
-
-else
-
- SHLIB_LD='ld -non_shared -expect_unresolved "*"'
-
-fi
- SHLIB_SUFFIX=".so"
- if test $doRpath = yes; then :
-
- CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
- LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'
-fi
- if test "$GCC" = yes; then :
- CFLAGS="$CFLAGS -mieee"
-else
-
- CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"
-fi
- # see pthread_intro(3) for pthread support on osf1, k.furukawa
- if test "${TCL_THREADS}" = 1; then :
-
- CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE"
- CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64"
- LIBS=`echo $LIBS | sed s/-lpthreads//`
- if test "$GCC" = yes; then :
-
- LIBS="$LIBS -lpthread -lmach -lexc"
-
-else
-
- CFLAGS="$CFLAGS -pthread"
- LDFLAGS="$LDFLAGS -pthread"
-
-fi
-
-fi
- ;;
- QNX-6*)
- # QNX RTP
- # This may work for all QNX, but it was only reported for v6.
- SHLIB_CFLAGS="-fPIC"
- SHLIB_LD="ld -Bshareable -x"
- SHLIB_LD_LIBS=""
- SHLIB_SUFFIX=".so"
- CC_SEARCH_FLAGS=""
- LD_SEARCH_FLAGS=""
- ;;
- SCO_SV-3.2*)
- if test "$GCC" = yes; then :
-
- SHLIB_CFLAGS="-fPIC -melf"
- LDFLAGS="$LDFLAGS -melf -Wl,-Bexport"
-
-else
-
- SHLIB_CFLAGS="-Kpic -belf"
- LDFLAGS="$LDFLAGS -belf -Wl,-Bexport"
-
-fi
- SHLIB_LD="ld -G"
- SHLIB_LD_LIBS=""
- SHLIB_SUFFIX=".so"
- CC_SEARCH_FLAGS=""
- LD_SEARCH_FLAGS=""
- ;;
- SunOS-5.[0-6])
- # Careful to not let 5.10+ fall into this case
-
- # Note: If _REENTRANT isn't defined, then Solaris
- # won't define thread-safe library routines.
-
-
-$as_echo "#define _REENTRANT 1" >>confdefs.h
-
-
-$as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
-
-
- SHLIB_CFLAGS="-KPIC"
- SHLIB_SUFFIX=".so"
- if test "$GCC" = yes; then :
-
- SHLIB_LD='${CC} -shared'
- CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
- LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-
-else
-
- SHLIB_LD="/usr/ccs/bin/ld -G -z text"
- CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
- LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-
-fi
- ;;
- SunOS-5*)
- # Note: If _REENTRANT isn't defined, then Solaris
- # won't define thread-safe library routines.
-
-
-$as_echo "#define _REENTRANT 1" >>confdefs.h
-
-
-$as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
-
-
- SHLIB_CFLAGS="-KPIC"
-
- # Check to enable 64-bit flags for compiler/linker
- if test "$do64bit" = yes; then :
-
- arch=`isainfo`
- if test "$arch" = "sparcv9 sparc"; then :
-
- if test "$GCC" = yes; then :
-
- if test "`${CC} -dumpversion | awk -F. '{print $1}'`" -lt 3; then :
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC < 3.2 on $system" >&5
-$as_echo "$as_me: WARNING: 64bit mode not supported with GCC < 3.2 on $system" >&2;}
-
-else
-
- do64bit_ok=yes
- CFLAGS="$CFLAGS -m64 -mcpu=v9"
- LDFLAGS="$LDFLAGS -m64 -mcpu=v9"
- SHLIB_CFLAGS="-fPIC"
-
-fi
-
-else
-
- do64bit_ok=yes
- if test "$do64bitVIS" = yes; then :
-
- CFLAGS="$CFLAGS -xarch=v9a"
- LDFLAGS_ARCH="-xarch=v9a"
-
-else
-
- CFLAGS="$CFLAGS -xarch=v9"
- LDFLAGS_ARCH="-xarch=v9"
-
-fi
- # Solaris 64 uses this as well
- #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64"
-
-fi
-
-else
- if test "$arch" = "amd64 i386"; then :
-
- if test "$GCC" = yes; then :
-
- case $system in
- SunOS-5.1[1-9]*|SunOS-5.[2-9][0-9]*)
- do64bit_ok=yes
- CFLAGS="$CFLAGS -m64"
- LDFLAGS="$LDFLAGS -m64";;
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5
-$as_echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;};;
- esac
-
-else
-
- do64bit_ok=yes
- case $system in
- SunOS-5.1[1-9]*|SunOS-5.[2-9][0-9]*)
- CFLAGS="$CFLAGS -m64"
- LDFLAGS="$LDFLAGS -m64";;
- *)
- CFLAGS="$CFLAGS -xarch=amd64"
- LDFLAGS="$LDFLAGS -xarch=amd64";;
- esac
-
-fi
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported for $arch" >&5
-$as_echo "$as_me: WARNING: 64bit mode not supported for $arch" >&2;}
-fi
-fi
-
-fi
-
- SHLIB_SUFFIX=".so"
- if test "$GCC" = yes; then :
-
- SHLIB_LD='${CC} -shared'
- CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
- LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
- if test "$do64bit_ok" = yes; then :
-
- if test "$arch" = "sparcv9 sparc"; then :
-
- # We need to specify -static-libgcc or we need to
- # add the path to the sparv9 libgcc.
- # JH: static-libgcc is necessary for core Tcl, but may
- # not be necessary for extensions.
- SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc"
- # for finding sparcv9 libgcc, get the regular libgcc
- # path, remove so name and append 'sparcv9'
- #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..."
- #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir"
-
-else
- if test "$arch" = "amd64 i386"; then :
-
- # JH: static-libgcc is necessary for core Tcl, but may
- # not be necessary for extensions.
- SHLIB_LD="$SHLIB_LD -m64 -static-libgcc"
-
-fi
-fi
-
-fi
-
-else
-
- case $system in
- SunOS-5.[1-9][0-9]*)
- # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
- SHLIB_LD='${CC} -G -z text ${LDFLAGS_DEFAULT}';;
- *)
- SHLIB_LD='/usr/ccs/bin/ld -G -z text';;
- esac
- CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
- LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
-
-fi
- ;;
- UNIX_SV* | UnixWare-5*)
- SHLIB_CFLAGS="-KPIC"
- SHLIB_LD='${CC} -G'
- SHLIB_LD_LIBS=""
- SHLIB_SUFFIX=".so"
- # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers
- # that don't grok the -Bexport option. Test that it does.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld accepts -Bexport flag" >&5
-$as_echo_n "checking for ld accepts -Bexport flag... " >&6; }
-if ${tcl_cv_ld_Bexport+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- hold_ldflags=$LDFLAGS
- LDFLAGS="$LDFLAGS -Wl,-Bexport"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-int i;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- tcl_cv_ld_Bexport=yes
-else
- tcl_cv_ld_Bexport=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- LDFLAGS=$hold_ldflags
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_Bexport" >&5
-$as_echo "$tcl_cv_ld_Bexport" >&6; }
- if test $tcl_cv_ld_Bexport = yes; then :
-
- LDFLAGS="$LDFLAGS -Wl,-Bexport"
-
-fi
- CC_SEARCH_FLAGS=""
- LD_SEARCH_FLAGS=""
- ;;
- esac
-
- if test "$do64bit" = yes -a "$do64bit_ok" = no; then :
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit support being disabled -- don't know magic for this platform" >&5
-$as_echo "$as_me: WARNING: 64bit support being disabled -- don't know magic for this platform" >&2;}
-
-fi
-
-
-
- # Add in the arch flags late to ensure it wasn't removed.
- # Not necessary in TEA, but this is aligned with core
- LDFLAGS="$LDFLAGS $LDFLAGS_ARCH"
-
- # If we're running gcc, then change the C flags for compiling shared
- # libraries to the right flags for gcc, instead of those for the
- # standard manufacturer compiler.
-
- if test "$GCC" = yes; then :
-
- case $system in
- AIX-*) ;;
- BSD/OS*) ;;
- CYGWIN_*|MINGW32_*|MINGW64_*) ;;
- IRIX*) ;;
- NetBSD-*|DragonFly-*|FreeBSD-*|OpenBSD-*) ;;
- Darwin-*) ;;
- SCO_SV-3.2*) ;;
- windows) ;;
- *) SHLIB_CFLAGS="-fPIC" ;;
- esac
-fi
-
- if test "$tcl_cv_cc_visibility_hidden" != yes; then :
-
-
-$as_echo "#define MODULE_SCOPE extern" >>confdefs.h
-
-
-fi
-
- if test "$SHARED_LIB_SUFFIX" = ""; then :
-
- # TEA specific: use PACKAGE_VERSION instead of VERSION
- SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}'
-fi
- if test "$UNSHARED_LIB_SUFFIX" = ""; then :
-
- # TEA specific: use PACKAGE_VERSION instead of VERSION
- UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a'
-fi
-
- if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SEH support in compiler" >&5
-$as_echo_n "checking for SEH support in compiler... " >&6; }
-if ${tcl_cv_seh+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- tcl_cv_seh=no
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#undef WIN32_LEAN_AND_MEAN
-
- int main(int argc, char** argv) {
- int a, b = 0;
- __try {
- a = 666 / b;
- }
- __except (EXCEPTION_EXECUTE_HANDLER) {
- return 0;
- }
- return 1;
- }
-
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- tcl_cv_seh=yes
-else
- tcl_cv_seh=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_seh" >&5
-$as_echo "$tcl_cv_seh" >&6; }
- if test "$tcl_cv_seh" = "no" ; then
-
-$as_echo "#define HAVE_NO_SEH 1" >>confdefs.h
-
- fi
-
- #
- # Check to see if the excpt.h include file provided contains the
- # definition for EXCEPTION_DISPOSITION; if not, which is the case
- # with Cygwin's version as of 2002-04-10, define it to be int,
- # sufficient for getting the current code to work.
- #
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EXCEPTION_DISPOSITION support in include files" >&5
-$as_echo_n "checking for EXCEPTION_DISPOSITION support in include files... " >&6; }
-if ${tcl_cv_eh_disposition+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h>
-# undef WIN32_LEAN_AND_MEAN
-
-int
-main ()
-{
-
- EXCEPTION_DISPOSITION x;
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- tcl_cv_eh_disposition=yes
-else
- tcl_cv_eh_disposition=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_eh_disposition" >&5
-$as_echo "$tcl_cv_eh_disposition" >&6; }
- if test "$tcl_cv_eh_disposition" = "no" ; then
-
-$as_echo "#define EXCEPTION_DISPOSITION int" >>confdefs.h
-
- fi
-
- # Check to see if winnt.h defines CHAR, SHORT, and LONG
- # even if VOID has already been #defined. The win32api
- # used by mingw and cygwin is known to do this.
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for winnt.h that ignores VOID define" >&5
-$as_echo_n "checking for winnt.h that ignores VOID define... " >&6; }
-if ${tcl_cv_winnt_ignore_void+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#define VOID void
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#undef WIN32_LEAN_AND_MEAN
-
-int
-main ()
-{
-
- CHAR c;
- SHORT s;
- LONG l;
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- tcl_cv_winnt_ignore_void=yes
-else
- tcl_cv_winnt_ignore_void=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_winnt_ignore_void" >&5
-$as_echo "$tcl_cv_winnt_ignore_void" >&6; }
- if test "$tcl_cv_winnt_ignore_void" = "yes" ; then
-
-$as_echo "#define HAVE_WINNT_IGNORE_VOID 1" >>confdefs.h
-
- fi
- fi
-
- # See if the compiler supports casting to a union type.
- # This is used to stop gcc from printing a compiler
- # warning when initializing a union member.
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cast to union support" >&5
-$as_echo_n "checking for cast to union support... " >&6; }
-if ${tcl_cv_cast_to_union+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- union foo { int i; double d; };
- union foo f = (union foo) (int) 0;
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- tcl_cv_cast_to_union=yes
-else
- tcl_cv_cast_to_union=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cast_to_union" >&5
-$as_echo "$tcl_cv_cast_to_union" >&6; }
- if test "$tcl_cv_cast_to_union" = "yes"; then
-
-$as_echo "#define HAVE_CAST_TO_UNION 1" >>confdefs.h
-
- fi
-
-
-
-
-
-
-
-
-
-
-
-
-
- # These must be called after we do the basic CFLAGS checks and
- # verify any possible 64-bit or similar switches are necessary
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for required early compiler flags" >&5
-$as_echo_n "checking for required early compiler flags... " >&6; }
- tcl_flags=""
-
- if ${tcl_cv_flag__isoc99_source+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-int
-main ()
-{
-char *p = (char *)strtoll; char *q = (char *)strtoull;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- tcl_cv_flag__isoc99_source=no
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#define _ISOC99_SOURCE 1
-#include <stdlib.h>
-int
-main ()
-{
-char *p = (char *)strtoll; char *q = (char *)strtoull;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- tcl_cv_flag__isoc99_source=yes
-else
- tcl_cv_flag__isoc99_source=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- if test "x${tcl_cv_flag__isoc99_source}" = "xyes" ; then
-
-$as_echo "#define _ISOC99_SOURCE 1" >>confdefs.h
-
- tcl_flags="$tcl_flags _ISOC99_SOURCE"
- fi
-
-
- if ${tcl_cv_flag__largefile64_source+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/stat.h>
-int
-main ()
-{
-struct stat64 buf; int i = stat64("/", &buf);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- tcl_cv_flag__largefile64_source=no
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#define _LARGEFILE64_SOURCE 1
-#include <sys/stat.h>
-int
-main ()
-{
-struct stat64 buf; int i = stat64("/", &buf);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- tcl_cv_flag__largefile64_source=yes
-else
- tcl_cv_flag__largefile64_source=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- if test "x${tcl_cv_flag__largefile64_source}" = "xyes" ; then
-
-$as_echo "#define _LARGEFILE64_SOURCE 1" >>confdefs.h
-
- tcl_flags="$tcl_flags _LARGEFILE64_SOURCE"
- fi
-
-
- if ${tcl_cv_flag__largefile_source64+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/stat.h>
-int
-main ()
-{
-char *p = (char *)open64;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- tcl_cv_flag__largefile_source64=no
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#define _LARGEFILE_SOURCE64 1
-#include <sys/stat.h>
-int
-main ()
-{
-char *p = (char *)open64;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- tcl_cv_flag__largefile_source64=yes
-else
- tcl_cv_flag__largefile_source64=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- if test "x${tcl_cv_flag__largefile_source64}" = "xyes" ; then
-
-$as_echo "#define _LARGEFILE_SOURCE64 1" >>confdefs.h
-
- tcl_flags="$tcl_flags _LARGEFILE_SOURCE64"
- fi
-
- if test "x${tcl_flags}" = "x" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
-$as_echo "none" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${tcl_flags}" >&5
-$as_echo "${tcl_flags}" >&6; }
- fi
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit integer type" >&5
-$as_echo_n "checking for 64-bit integer type... " >&6; }
- if ${tcl_cv_type_64bit+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- tcl_cv_type_64bit=none
- # See if the compiler knows natively about __int64
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-__int64 value = (__int64) 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- tcl_type_64bit=__int64
-else
- tcl_type_64bit="long long"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- # See if we should use long anyway Note that we substitute in the
- # type that is our current guess for a 64-bit type inside this check
- # program, so it should be modified only carefully...
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-switch (0) {
- case 1: case (sizeof(${tcl_type_64bit})==sizeof(long)): ;
- }
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- tcl_cv_type_64bit=${tcl_type_64bit}
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- if test "${tcl_cv_type_64bit}" = none ; then
-
-$as_echo "#define TCL_WIDE_INT_IS_LONG 1" >>confdefs.h
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: using long" >&5
-$as_echo "using long" >&6; }
- elif test "${tcl_cv_type_64bit}" = "__int64" \
- -a "${TEA_PLATFORM}" = "windows" ; then
- # TEA specific: We actually want to use the default tcl.h checks in
- # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER*
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: using Tcl header defaults" >&5
-$as_echo "using Tcl header defaults" >&6; }
- else
-
-cat >>confdefs.h <<_ACEOF
-#define TCL_WIDE_INT_TYPE ${tcl_cv_type_64bit}
-_ACEOF
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${tcl_cv_type_64bit}" >&5
-$as_echo "${tcl_cv_type_64bit}" >&6; }
-
- # Now check for auxiliary declarations
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct dirent64" >&5
-$as_echo_n "checking for struct dirent64... " >&6; }
-if ${tcl_cv_struct_dirent64+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <dirent.h>
-int
-main ()
-{
-struct dirent64 p;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- tcl_cv_struct_dirent64=yes
-else
- tcl_cv_struct_dirent64=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_struct_dirent64" >&5
-$as_echo "$tcl_cv_struct_dirent64" >&6; }
- if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then
-
-$as_echo "#define HAVE_STRUCT_DIRENT64 1" >>confdefs.h
-
- fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct stat64" >&5
-$as_echo_n "checking for struct stat64... " >&6; }
-if ${tcl_cv_struct_stat64+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/stat.h>
-int
-main ()
-{
-struct stat64 p;
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- tcl_cv_struct_stat64=yes
-else
- tcl_cv_struct_stat64=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_struct_stat64" >&5
-$as_echo "$tcl_cv_struct_stat64" >&6; }
- if test "x${tcl_cv_struct_stat64}" = "xyes" ; then
-
-$as_echo "#define HAVE_STRUCT_STAT64 1" >>confdefs.h
-
- fi
-
- for ac_func in open64 lseek64
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for off64_t" >&5
-$as_echo_n "checking for off64_t... " >&6; }
- if ${tcl_cv_type_off64_t+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
-int
-main ()
-{
-off64_t offset;
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- tcl_cv_type_off64_t=yes
-else
- tcl_cv_type_off64_t=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- if test "x${tcl_cv_type_off64_t}" = "xyes" && \
- test "x${ac_cv_func_lseek64}" = "xyes" && \
- test "x${ac_cv_func_open64}" = "xyes" ; then
-
-$as_echo "#define HAVE_TYPE_OFF64_T 1" >>confdefs.h
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
- fi
-
-
-
-#--------------------------------------------------------------------
-# Set the default compiler switches based on the --enable-symbols option.
-#--------------------------------------------------------------------
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for build with symbols" >&5
-$as_echo_n "checking for build with symbols... " >&6; }
- # Check whether --enable-symbols was given.
-if test "${enable_symbols+set}" = set; then :
- enableval=$enable_symbols; tcl_ok=$enableval
-else
- tcl_ok=no
-fi
-
- DBGX=""
- if test "$tcl_ok" = "no"; then
- CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG"
- LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- else
- CFLAGS_DEFAULT="${CFLAGS_DEBUG}"
- LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}"
- if test "$tcl_ok" = "yes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (standard debugging)" >&5
-$as_echo "yes (standard debugging)" >&6; }
- fi
- fi
- # TEA specific:
- if test "${TEA_PLATFORM}" != "windows" ; then
- LDFLAGS_DEFAULT="${LDFLAGS}"
- fi
-
-
-
-
- if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then
-
-$as_echo "#define TCL_MEM_DEBUG 1" >>confdefs.h
-
- fi
-
- if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then
- if test "$tcl_ok" = "all"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: enabled symbols mem debugging" >&5
-$as_echo "enabled symbols mem debugging" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: enabled $tcl_ok debugging" >&5
-$as_echo "enabled $tcl_ok debugging" >&6; }
- fi
- fi
-
-
-#--------------------------------------------------------------------
-# This macro generates a line to use when building a library. It
-# depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS,
-# and TEA_LOAD_TCLCONFIG macros above.
-#--------------------------------------------------------------------
-
-
- if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then
- MAKE_STATIC_LIB="\${STLIB_LD} -out:\$@ \$(PKG_OBJECTS)"
- MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\$@ \$(PKG_OBJECTS)"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#if defined(_MSC_VER) && _MSC_VER >= 1400
-print("manifest needed")
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "manifest needed" >/dev/null 2>&1; then :
-
- # Could do a CHECK_PROG for mt, but should always be with MSVC8+
- VC_MANIFEST_EMBED_DLL="if test -f \$@.manifest ; then mt.exe -nologo -manifest \$@.manifest -outputresource:\$@\;2 ; fi"
- VC_MANIFEST_EMBED_EXE="if test -f \$@.manifest ; then mt.exe -nologo -manifest \$@.manifest -outputresource:\$@\;1 ; fi"
- MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}"
-
- CLEANFILES="$CLEANFILES *.manifest"
-
-
-fi
-rm -f conftest*
-
- MAKE_STUB_LIB="\${STLIB_LD} -nodefaultlib -out:\$@ \$(PKG_STUB_OBJECTS)"
- else
- MAKE_STATIC_LIB="\${STLIB_LD} \$@ \$(PKG_OBJECTS)"
- MAKE_SHARED_LIB="\${SHLIB_LD} -o \$@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}"
- MAKE_STUB_LIB="\${STLIB_LD} \$@ \$(PKG_STUB_OBJECTS)"
- fi
-
- if test "${SHARED_BUILD}" = "1" ; then
- MAKE_LIB="${MAKE_SHARED_LIB} "
- else
- MAKE_LIB="${MAKE_STATIC_LIB} "
- fi
-
- #--------------------------------------------------------------------
- # Shared libraries and static libraries have different names.
- # Use the double eval to make sure any variables in the suffix is
- # substituted. (@@@ Might not be necessary anymore)
- #--------------------------------------------------------------------
-
- if test "${TEA_PLATFORM}" = "windows" ; then
- if test "${SHARED_BUILD}" = "1" ; then
- # We force the unresolved linking of symbols that are really in
- # the private libraries of Tcl and Tk.
- if test x"${TK_BIN_DIR}" != x ; then
- SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\""
- fi
- SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\""
- if test "$GCC" = "yes"; then
- SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -static-libgcc"
- fi
- eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}"
- else
- eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}"
- if test "$GCC" = "yes"; then
- PKG_LIB_FILE=lib${PKG_LIB_FILE}
- fi
- fi
- # Some packages build their own stubs libraries
- eval eval "PKG_STUB_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}"
- if test "$GCC" = "yes"; then
- PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE}
- fi
- # These aren't needed on Windows (either MSVC or gcc)
- RANLIB=:
- RANLIB_STUB=:
- else
- RANLIB_STUB="${RANLIB}"
- if test "${SHARED_BUILD}" = "1" ; then
- SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}"
- if test x"${TK_BIN_DIR}" != x ; then
- SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}"
- fi
- eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}"
- RANLIB=:
- else
- eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}"
- fi
- # Some packages build their own stubs libraries
- eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}"
- fi
-
- # These are escaped so that only CFLAGS is picked up at configure time.
- # The other values will be substituted at make time.
- CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}"
- if test "${SHARED_BUILD}" = "1" ; then
- CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}"
- fi
-
-
-
-
-
-
-
-
-
-
-#--------------------------------------------------------------------
-# Determine the name of the tclsh and/or wish executables in the
-# Tcl and Tk build directories or the location they were installed
-# into. These paths are used to support running test cases only,
-# the Makefile should not be making use of these paths to generate
-# a pkgIndex.tcl file or anything else at extension build time.
-#--------------------------------------------------------------------
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tclsh" >&5
-$as_echo_n "checking for tclsh... " >&6; }
- if test -f "${TCL_BIN_DIR}/Makefile" ; then
- # tclConfig.sh is in Tcl build directory
- if test "${TEA_PLATFORM}" = "windows"; then
- if test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" ; then
- TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}"
- elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}s${EXEEXT}" ; then
- TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}s${EXEEXT}"
- elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}t${EXEEXT}" ; then
- TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}t${EXEEXT}"
- elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}st${EXEEXT}" ; then
- TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}st${EXEEXT}"
- fi
- else
- TCLSH_PROG="${TCL_BIN_DIR}/tclsh"
- fi
- else
- # tclConfig.sh is in install location
- if test "${TEA_PLATFORM}" = "windows"; then
- TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}"
- else
- TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}"
- fi
- list="`ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null` \
- `ls -d ${TCL_BIN_DIR}/.. 2>/dev/null` \
- `ls -d ${TCL_PREFIX}/bin 2>/dev/null`"
- for i in $list ; do
- if test -f "$i/${TCLSH_PROG}" ; then
- REAL_TCL_BIN_DIR="`cd "$i"; pwd`/"
- break
- fi
- done
- TCLSH_PROG="${REAL_TCL_BIN_DIR}${TCLSH_PROG}"
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${TCLSH_PROG}" >&5
-$as_echo "${TCLSH_PROG}" >&6; }
-
-
-#TEA_PROG_WISH
-
-#--------------------------------------------------------------------
-# Setup a *Config.sh.in configuration file.
-#--------------------------------------------------------------------
-
-
- #--------------------------------------------------------------------
- # These are for tclzipfsConfig.sh
- #--------------------------------------------------------------------
-
- # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib)
- eval pkglibdir="${libdir}/tclzipfs${PACKAGE_VERSION}"
- if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then
- eval tclzipfs_LIB_FLAG="-ltclzipfs${PACKAGE_VERSION}${DBGX}"
- eval tclzipfs_STUB_LIB_FLAG="-ltclzipfsstub${PACKAGE_VERSION}${DBGX}"
- else
- eval tclzipfs_LIB_FLAG="-ltclzipfs`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}"
- eval tclzipfs_STUB_LIB_FLAG="-ltclzipfsstub`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}"
- fi
- tclzipfs_BUILD_LIB_SPEC="-L`$CYGPATH $(pwd)` ${tclzipfs_LIB_FLAG}"
- tclzipfs_LIB_SPEC="-L`$CYGPATH ${pkglibdir}` ${tclzipfs_LIB_FLAG}"
- tclzipfs_BUILD_STUB_LIB_SPEC="-L`$CYGPATH $(pwd)` ${tclzipfs_STUB_LIB_FLAG}"
- tclzipfs_STUB_LIB_SPEC="-L`$CYGPATH ${pkglibdir}` ${tclzipfs_STUB_LIB_FLAG}"
- tclzipfs_BUILD_STUB_LIB_PATH="`$CYGPATH $(pwd)`/${PKG_STUB_LIB_FILE}"
- tclzipfs_STUB_LIB_PATH="`$CYGPATH ${pkglibdir}`/${PKG_STUB_LIB_FILE}"
-
-
-
-
-
-
-
-
-
-
-
-
-#AC_SUBST(SAMPLE_VAR)
-
-#--------------------------------------------------------------------
-# Specify files to substitute AC variables in. You may alternatively
-# have a special pkgIndex.tcl.in or other files which require
-# substituting the AC variables in. Include these here.
-#--------------------------------------------------------------------
-
-ac_config_files="$ac_config_files Makefile pkgIndex.tcl"
-
-ac_config_files="$ac_config_files tclzipfsConfig.sh"
-
-
-#--------------------------------------------------------------------
-# Finally, substitute all of the various values into the files
-# specified with AC_CONFIG_FILES.
-#--------------------------------------------------------------------
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems. If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- # `set' does not quote correctly, so add quotes: double-quote
- # substitution turns \\\\ into \\, and sed turns \\ into \.
- sed -n \
- "s/'/'\\\\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;; #(
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- if test ! -f "$cache_file" || test -h "$cache_file"; then
- cat confcache >"$cache_file"
- else
- case $cache_file in #(
- */* | ?:*)
- mv -f confcache "$cache_file"$$ &&
- mv -f "$cache_file"$$ "$cache_file" ;; #(
- *)
- mv -f confcache "$cache_file" ;;
- esac
- fi
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# Transform confdefs.h into DEFS.
-# Protect against shell expansion while executing Makefile rules.
-# Protect against Makefile macro expansion.
-#
-# If the first sed substitution is executed (which looks for macros that
-# take arguments), then branch to the quote section. Otherwise,
-# look for a macro that doesn't take arguments.
-ac_script='
-:mline
-/\\$/{
- N
- s,\\\n,,
- b mline
-}
-t clear
-:clear
-s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-b any
-:quote
-s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
-s/\[/\\&/g
-s/\]/\\&/g
-s/\$/$$/g
-H
-:any
-${
- g
- s/^\n//
- s/\n/ /g
- p
-}
-'
-DEFS=`sed -n "$ac_script" confdefs.h`
-
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-
-SHELL=\${CONFIG_SHELL-$SHELL}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by tclzipfs $as_me 1.0, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration. Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- --config print configuration, then exit
- -q, --quiet, --silent
- do not print progress messages
- -d, --debug don't remove temporary files
- --recheck update $as_me by reconfiguring in the same conditions
- --file=FILE[:TEMPLATE]
- instantiate the configuration file FILE
-
-Configuration files:
-$config_files
-
-Report bugs to the package provider."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-tclzipfs config.status 1.0
-configured by $0, generated by GNU Autoconf 2.69,
- with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
- case $1 in
- --*=?*)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
- ac_shift=:
- ;;
- --*=)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
- --config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- '') as_fn_error $? "missing file argument" ;;
- esac
- as_fn_append CONFIG_FILES " '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h | --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
- *) as_fn_append ac_config_targets " $1"
- ac_need_defaults=false ;;
-
- esac
- shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
- set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
- CONFIG_SHELL='$SHELL'
- export CONFIG_SHELL
- exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
- "pkgIndex.tcl") CONFIG_FILES="$CONFIG_FILES pkgIndex.tcl" ;;
- "tclzipfsConfig.sh") CONFIG_FILES="$CONFIG_FILES tclzipfsConfig.sh" ;;
-
- *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
- esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used. Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp= ac_tmp=
- trap 'exit_status=$?
- : "${ac_tmp:=$tmp}"
- { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
- trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
- eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\\r'
-else
- ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- . ./conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
- if test $ac_delim_n = $ac_delim_num; then
- break
- elif $ac_last_try; then
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
- for (key in S) S_is_set[key] = 1
- FS = ""
-
-}
-{
- line = $ 0
- nfields = split(line, field, "@")
- substed = 0
- len = length(field[1])
- for (i = 2; i < nfields; i++) {
- key = field[i]
- keylen = length(key)
- if (S_is_set[key]) {
- value = S[key]
- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
- len += length(value) + length(field[++i])
- substed = 1
- } else
- len += 1 + keylen
- }
-
- print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
- sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
- cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
- || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
-h
-s///
-s/^/:/
-s/[ ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[ ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-
-eval set X " :F $CONFIG_FILES "
-shift
-for ac_tag
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$ac_tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- as_fn_append ac_file_inputs " '$ac_f'"
- done
-
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
- `' by configure.'
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
- fi
- # Neutralize special characters interpreted by sed in replacement strings.
- case $configure_input in #(
- *\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
- sed 's/[\\\\&|]/\\\\&/g'`;; #(
- *) ac_sed_conf_input=$configure_input;;
- esac
-
- case $ac_tag in
- *:-:* | *:-) cat >"$ac_tmp/stdin" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- as_dir="$ac_dir"; as_fn_mkdir_p
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
- >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
- "$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&2;}
-
- rm -f "$ac_tmp/stdin"
- case $ac_file in
- -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
- *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
- esac \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
-
-
-
- esac
-
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded. So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status. When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
- ac_cs_success=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
- exec 5>>config.log
- # Use ||, not &&, to avoid exiting from the if with $? = 1, which
- # would make configure fail if this is the last instruction.
- $ac_cs_success || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff --git a/tclzipfs/configure.ac b/tclzipfs/configure.ac
deleted file mode 100644
index 870e7b1..0000000
--- a/tclzipfs/configure.ac
+++ /dev/null
@@ -1,193 +0,0 @@
-#!/bin/bash -norc
-dnl This file is an input file used by the GNU "autoconf" program to
-dnl generate the file "configure", which is run during Tcl installation
-dnl to configure the system for the local environment.
-
-#-----------------------------------------------------------------------
-# Sample configure.ac for Tcl Extensions. The only places you should
-# need to modify this file are marked by the string __CHANGE__
-#-----------------------------------------------------------------------
-
-#-----------------------------------------------------------------------
-# __CHANGE__
-# Set your package name and version numbers here.
-#
-# This initializes the environment with PACKAGE_NAME and PACKAGE_VERSION
-# set as provided. These will also be added as -D defs in your Makefile
-# so you can encode the package version directly into the source files.
-# This will also define a special symbol for Windows (BUILD_<PACKAGE_NAME>
-# so that we create the export library with the dll.
-#-----------------------------------------------------------------------
-
-AC_INIT([tclzipfs], [1.0])
-
-#--------------------------------------------------------------------
-# Call TEA_INIT as the first TEA_ macro to set up initial vars.
-# This will define a ${TEA_PLATFORM} variable == "unix" or "windows"
-# as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE.
-#--------------------------------------------------------------------
-
-TEA_INIT()
-
-AC_CONFIG_AUX_DIR(tclconfig)
-
-#--------------------------------------------------------------------
-# Load the tclConfig.sh file
-#--------------------------------------------------------------------
-
-TEA_PATH_TCLCONFIG
-TEA_LOAD_TCLCONFIG
-
-#--------------------------------------------------------------------
-# Load the tkConfig.sh file if necessary (Tk extension)
-#--------------------------------------------------------------------
-
-#TEA_PATH_TKCONFIG
-#TEA_LOAD_TKCONFIG
-
-#-----------------------------------------------------------------------
-# Handle the --prefix=... option by defaulting to what Tcl gave.
-# Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER.
-#-----------------------------------------------------------------------
-
-TEA_PREFIX
-
-#-----------------------------------------------------------------------
-# Standard compiler checks.
-# This sets up CC by using the CC env var, or looks for gcc otherwise.
-# This also calls AC_PROG_CC and a few others to create the basic setup
-# necessary to compile executables.
-#-----------------------------------------------------------------------
-
-TEA_SETUP_COMPILER
-
-#-----------------------------------------------------------------------
-# __CHANGE__
-# Specify the C source files to compile in TEA_ADD_SOURCES,
-# public headers that need to be installed in TEA_ADD_HEADERS,
-# stub library C source files to compile in TEA_ADD_STUB_SOURCES,
-# and runtime Tcl library files in TEA_ADD_TCL_SOURCES.
-# This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS
-# and PKG_TCL_SOURCES.
-#-----------------------------------------------------------------------
-
-TEA_ADD_SOURCES([tclZipfs.c])
-TEA_ADD_HEADERS([])
-TEA_ADD_INCLUDES([])
-TEA_ADD_LIBS([])
-TEA_ADD_CFLAGS([])
-TEA_ADD_STUB_SOURCES([])
-TEA_ADD_TCL_SOURCES([])
-
-AC_DEFINE(HAVE_ZLIB,1)
-
-#--------------------------------------------------------------------
-# __CHANGE__
-#
-# You can add more files to clean if your extension creates any extra
-# files by extending CLEANFILES.
-# Add pkgIndex.tcl if it is generated in the Makefile instead of ./configure
-# and change Makefile.in to move it from CONFIG_CLEAN_FILES to BINARIES var.
-#
-# A few miscellaneous platform-specific items:
-# TEA_ADD_* any platform specific compiler/build info here.
-#--------------------------------------------------------------------
-
-#CLEANFILES="$CLEANFILES pkgIndex.tcl"
-if test "${TEA_PLATFORM}" = "windows" ; then
- # Ensure no empty if clauses
- :
- #TEA_ADD_SOURCES([win/winFile.c])
- #TEA_ADD_INCLUDES([-I\"$(${CYGPATH} ${srcdir}/win)\"])
-else
- # Ensure no empty else clauses
- :
- #TEA_ADD_SOURCES([unix/unixFile.c])
- #TEA_ADD_LIBS([-lsuperfly])
-fi
-
-#--------------------------------------------------------------------
-# __CHANGE__
-# Choose which headers you need. Extension authors should try very
-# hard to only rely on the Tcl public header files. Internal headers
-# contain private data structures and are subject to change without
-# notice.
-# This MUST be called after TEA_LOAD_TCLCONFIG / TEA_LOAD_TKCONFIG
-#--------------------------------------------------------------------
-
-TEA_PUBLIC_TCL_HEADERS
-TEA_PRIVATE_TCL_HEADERS
-
-#TEA_PUBLIC_TK_HEADERS
-#TEA_PRIVATE_TK_HEADERS
-#TEA_PATH_X
-
-#--------------------------------------------------------------------
-# Check whether --enable-threads or --disable-threads was given.
-# This auto-enables if Tcl was compiled threaded.
-#--------------------------------------------------------------------
-
-TEA_ENABLE_THREADS
-
-#--------------------------------------------------------------------
-# The statement below defines a collection of symbols related to
-# building as a shared library instead of a static library.
-#--------------------------------------------------------------------
-
-TEA_ENABLE_SHARED
-
-#--------------------------------------------------------------------
-# This macro figures out what flags to use with the compiler/linker
-# when building shared/static debug/optimized objects. This information
-# can be taken from the tclConfig.sh file, but this figures it all out.
-#--------------------------------------------------------------------
-
-TEA_CONFIG_CFLAGS
-
-#--------------------------------------------------------------------
-# Set the default compiler switches based on the --enable-symbols option.
-#--------------------------------------------------------------------
-
-TEA_ENABLE_SYMBOLS
-
-#--------------------------------------------------------------------
-# This macro generates a line to use when building a library. It
-# depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS,
-# and TEA_LOAD_TCLCONFIG macros above.
-#--------------------------------------------------------------------
-
-TEA_MAKE_LIB
-
-#--------------------------------------------------------------------
-# Determine the name of the tclsh and/or wish executables in the
-# Tcl and Tk build directories or the location they were installed
-# into. These paths are used to support running test cases only,
-# the Makefile should not be making use of these paths to generate
-# a pkgIndex.tcl file or anything else at extension build time.
-#--------------------------------------------------------------------
-
-TEA_PROG_TCLSH
-#TEA_PROG_WISH
-
-#--------------------------------------------------------------------
-# Setup a *Config.sh.in configuration file.
-#--------------------------------------------------------------------
-
-TEA_EXPORT_CONFIG([tclzipfs])
-#AC_SUBST(SAMPLE_VAR)
-
-#--------------------------------------------------------------------
-# Specify files to substitute AC variables in. You may alternatively
-# have a special pkgIndex.tcl.in or other files which require
-# substituting the AC variables in. Include these here.
-#--------------------------------------------------------------------
-
-AC_CONFIG_FILES([Makefile pkgIndex.tcl])
-AC_CONFIG_FILES([tclzipfsConfig.sh])
-
-#--------------------------------------------------------------------
-# Finally, substitute all of the various values into the files
-# specified with AC_CONFIG_FILES.
-#--------------------------------------------------------------------
-
-AC_OUTPUT()
diff --git a/tclzipfs/crypt.h b/tclzipfs/crypt.h
deleted file mode 100644
index 1e9e820..0000000
--- a/tclzipfs/crypt.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/* crypt.h -- base code for crypt/uncrypt ZIPfile
-
-
- Version 1.01e, February 12th, 2005
-
- Copyright (C) 1998-2005 Gilles Vollant
-
- This code is a modified version of crypting code in Infozip distribution
-
- The encryption/decryption parts of this source code (as opposed to the
- non-echoing password parts) were originally written in Europe. The
- whole source package can be freely distributed, including from the USA.
- (Prior to January 2000, re-export from the US was a violation of US law.)
-
- This encryption code is a direct transcription of the algorithm from
- Roger Schlafly, described by Phil Katz in the file appnote.txt. This
- file (appnote.txt) is distributed with the PKZIP program (even in the
- version without encryption capabilities).
-
- If you don't need crypting in your application, just define symbols
- NOCRYPT and NOUNCRYPT.
-
- This code support the "Traditional PKWARE Encryption".
-
- The new AES encryption added on Zip format by Winzip (see the page
- http://www.winzip.com/aes_info.htm ) and PKWare PKZip 5.x Strong
- Encryption is not supported.
-*/
-
-#define CRC32(c, b) ((*(pcrc_32_tab+(((int)(c) ^ (b)) & 0xff))) ^ ((c) >> 8))
-
-/***********************************************************************
- * Return the next byte in the pseudo-random sequence
- */
-static int decrypt_byte(unsigned long* pkeys, const z_crc_t* pcrc_32_tab)
-{
- unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an
- * unpredictable manner on 16-bit systems; not a problem
- * with any known compiler so far, though */
-
- temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2;
- return (int)(((temp * (temp ^ 1)) >> 8) & 0xff);
-}
-
-/***********************************************************************
- * Update the encryption keys with the next byte of plain text
- */
-static int update_keys(unsigned long* pkeys,const z_crc_t* pcrc_32_tab,int c)
-{
- (*(pkeys+0)) = CRC32((*(pkeys+0)), c);
- (*(pkeys+1)) += (*(pkeys+0)) & 0xff;
- (*(pkeys+1)) = (*(pkeys+1)) * 134775813L + 1;
- {
- register int keyshift = (int)((*(pkeys+1)) >> 24);
- (*(pkeys+2)) = CRC32((*(pkeys+2)), keyshift);
- }
- return c;
-}
-
-
-/***********************************************************************
- * Initialize the encryption keys and the random header according to
- * the given password.
- */
-static void init_keys(const char* passwd,unsigned long* pkeys,const z_crc_t* pcrc_32_tab)
-{
- *(pkeys+0) = 305419896L;
- *(pkeys+1) = 591751049L;
- *(pkeys+2) = 878082192L;
- while (*passwd != '\0') {
- update_keys(pkeys,pcrc_32_tab,(int)*passwd);
- passwd++;
- }
-}
-
-#define zdecode(pkeys,pcrc_32_tab,c) \
- (update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab)))
-
-#define zencode(pkeys,pcrc_32_tab,c,t) \
- (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c))
-
-#ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED
-
-#define RAND_HEAD_LEN 12
- /* "last resort" source for second part of crypt seed pattern */
-# ifndef ZCR_SEED2
-# define ZCR_SEED2 3141592654UL /* use PI as default pattern */
-# endif
-
-static int crypthead(const char* passwd, /* password string */
- unsigned char* buf, /* where to write header */
- int bufSize,
- unsigned long* pkeys,
- const z_crc_t* pcrc_32_tab,
- unsigned long crcForCrypting)
-{
- int n; /* index in random header */
- int t; /* temporary */
- int c; /* random byte */
- unsigned char header[RAND_HEAD_LEN-2]; /* random header */
- static unsigned calls = 0; /* ensure different random header each time */
-
- if (bufSize<RAND_HEAD_LEN)
- return 0;
-
- /* First generate RAND_HEAD_LEN-2 random bytes. We encrypt the
- * output of rand() to get less predictability, since rand() is
- * often poorly implemented.
- */
- if (++calls == 1)
- {
- srand((unsigned)(time(NULL) ^ ZCR_SEED2));
- }
- init_keys(passwd, pkeys, pcrc_32_tab);
- for (n = 0; n < RAND_HEAD_LEN-2; n++)
- {
- c = (rand() >> 7) & 0xff;
- header[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, c, t);
- }
- /* Encrypt random header (last two bytes is high word of crc) */
- init_keys(passwd, pkeys, pcrc_32_tab);
- for (n = 0; n < RAND_HEAD_LEN-2; n++)
- {
- buf[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, header[n], t);
- }
- buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 16) & 0xff, t);
- buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 24) & 0xff, t);
- return n;
-}
-
-#endif
diff --git a/tclzipfs/license.terms b/tclzipfs/license.terms
deleted file mode 100644
index d8049cd..0000000
--- a/tclzipfs/license.terms
+++ /dev/null
@@ -1,40 +0,0 @@
-This software is copyrighted by the Regents of the University of
-California, Sun Microsystems, Inc., Scriptics Corporation, ActiveState
-Corporation and other parties. The following terms apply to all files
-associated with the software unless explicitly disclaimed in
-individual files.
-
-The authors hereby grant permission to use, copy, modify, distribute,
-and license this software and its documentation for any purpose, provided
-that existing copyright notices are retained in all copies and that this
-notice is included verbatim in any distributions. No written agreement,
-license, or royalty fee is required for any of the authorized uses.
-Modifications to this software may be copyrighted by their authors
-and need not follow the licensing terms described here, provided that
-the new terms are clearly indicated on the first page of each file where
-they apply.
-
-IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
-FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
-ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
-DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
-THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE
-IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
-NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
-MODIFICATIONS.
-
-GOVERNMENT USE: If you are acquiring this software on behalf of the
-U.S. government, the Government shall have only "Restricted Rights"
-in the software and related documentation as defined in the Federal
-Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you
-are acquiring the software on behalf of the Department of Defense, the
-software shall be classified as "Commercial Computer Software" and the
-Government shall have only "Restricted Rights" as defined in Clause
-252.227-7014 (b) (3) of DFARs. Notwithstanding the foregoing, the
-authors grant the U.S. Government and others acting in its behalf
-permission to use and distribute the software in accordance with the
-terms specified in this license.
diff --git a/tclzipfs/pkgIndex.tcl.in b/tclzipfs/pkgIndex.tcl.in
deleted file mode 100644
index d7566b4..0000000
--- a/tclzipfs/pkgIndex.tcl.in
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# Tcl package index file
-#
-package ifneeded @PACKAGE_NAME@ @PACKAGE_VERSION@ \
- [list load [file join $dir @PKG_LIB_FILE@] @PACKAGE_NAME@]
diff --git a/tclzipfs/tclZipfs.c b/tclzipfs/tclZipfs.c
deleted file mode 100644
index a9b9c33..0000000
--- a/tclzipfs/tclZipfs.c
+++ /dev/null
@@ -1,5049 +0,0 @@
-/*
- * tclZipfs.c --
- *
- * Implementation of the ZIP filesystem used in TIP 430
- * Adapted from the implentation for AndroWish.
- *
- * Copyright (c) 2016-2017 Sean Woods <yoda@etoyoc.com>
- * Copyright (c) 2013-2015 Christian Werner <chw@ch-werner.de>
- *
- * See the file "license.terms" for information on usage and redistribution of
- * this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * This file is distributed in two ways:
- * generic/tclZipfs.c file in the TIP430-enabled Tcl cores.
- * compat/tclZipfs.c file in the tclconfig (TEA) file system, for pre-tip430
- * projects.
- */
-
-#define TCL_IO_FAILURE ((size_t)-1)
-#define TclGetByteArrayFromObj(objPtr, lenPtr) \
- (Tcl_GetByteArrayFromObj(objPtr, NULL), \
- *(lenPtr) = *((size_t *) (objPtr)->internalRep.twoPtrValue.ptr1), \
- Tcl_GetByteArrayFromObj(objPtr, NULL))
-
-#include "tclInt.h"
-#include "tclFileSystem.h"
-
-#ifndef _WIN32
-#include <sys/mman.h>
-#endif /* _WIN32*/
-
-#ifndef MAP_FILE
-#define MAP_FILE 0
-#endif /* !MAP_FILE */
-
-#ifdef HAVE_ZLIB
-#include "zlib.h"
-
-#ifdef Z_U4
- typedef Z_U4 z_crc_t;
-#else
- typedef unsigned long z_crc_t;
-#endif
-
-#include "crypt.h"
-
-#ifdef CFG_RUNTIME_DLLFILE
-
-/*
-** We are compiling as part of the core.
-** TIP430 style zipfs prefix
-*/
-
-#define ZIPFS_VOLUME "//zipfs:/"
-#define ZIPFS_VOLUME_LEN 9
-#define ZIPFS_APP_MOUNT "//zipfs:/app"
-#define ZIPFS_ZIP_MOUNT "//zipfs:/lib/tcl"
-
-#else /* !CFG_RUNTIME_DLLFILE */
-
-/*
-** We are compiling from the /compat folder of tclconfig
-** Pre TIP430 style zipfs prefix
-** //zipfs:/ doesn't work straight out of the box on either windows or Unix
-** without other changes made to tip 430
-*/
-
-#define ZIPFS_VOLUME "zipfs:/"
-#define ZIPFS_VOLUME_LEN 7
-#define ZIPFS_APP_MOUNT "zipfs:/app"
-#define ZIPFS_ZIP_MOUNT "zipfs:/lib/tcl"
-
-#endif /* CFG_RUNTIME_DLLFILE */
-
-/*
- * Various constants and offsets found in ZIP archive files
- */
-
-#define ZIP_SIG_LEN 4
-
-/*
- * Local header of ZIP archive member (at very beginning of each member).
- */
-
-#define ZIP_LOCAL_HEADER_SIG 0x04034b50
-#define ZIP_LOCAL_HEADER_LEN 30
-#define ZIP_LOCAL_SIG_OFFS 0
-#define ZIP_LOCAL_VERSION_OFFS 4
-#define ZIP_LOCAL_FLAGS_OFFS 6
-#define ZIP_LOCAL_COMPMETH_OFFS 8
-#define ZIP_LOCAL_MTIME_OFFS 10
-#define ZIP_LOCAL_MDATE_OFFS 12
-#define ZIP_LOCAL_CRC32_OFFS 14
-#define ZIP_LOCAL_COMPLEN_OFFS 18
-#define ZIP_LOCAL_UNCOMPLEN_OFFS 22
-#define ZIP_LOCAL_PATHLEN_OFFS 26
-#define ZIP_LOCAL_EXTRALEN_OFFS 28
-
-/*
- * Central header of ZIP archive member at end of ZIP file.
- */
-
-#define ZIP_CENTRAL_HEADER_SIG 0x02014b50
-#define ZIP_CENTRAL_HEADER_LEN 46
-#define ZIP_CENTRAL_SIG_OFFS 0
-#define ZIP_CENTRAL_VERSIONMADE_OFFS 4
-#define ZIP_CENTRAL_VERSION_OFFS 6
-#define ZIP_CENTRAL_FLAGS_OFFS 8
-#define ZIP_CENTRAL_COMPMETH_OFFS 10
-#define ZIP_CENTRAL_MTIME_OFFS 12
-#define ZIP_CENTRAL_MDATE_OFFS 14
-#define ZIP_CENTRAL_CRC32_OFFS 16
-#define ZIP_CENTRAL_COMPLEN_OFFS 20
-#define ZIP_CENTRAL_UNCOMPLEN_OFFS 24
-#define ZIP_CENTRAL_PATHLEN_OFFS 28
-#define ZIP_CENTRAL_EXTRALEN_OFFS 30
-#define ZIP_CENTRAL_FCOMMENTLEN_OFFS 32
-#define ZIP_CENTRAL_DISKFILE_OFFS 34
-#define ZIP_CENTRAL_IATTR_OFFS 36
-#define ZIP_CENTRAL_EATTR_OFFS 38
-#define ZIP_CENTRAL_LOCALHDR_OFFS 42
-
-/*
- * Central end signature at very end of ZIP file.
- */
-
-#define ZIP_CENTRAL_END_SIG 0x06054b50
-#define ZIP_CENTRAL_END_LEN 22
-#define ZIP_CENTRAL_END_SIG_OFFS 0
-#define ZIP_CENTRAL_DISKNO_OFFS 4
-#define ZIP_CENTRAL_DISKDIR_OFFS 6
-#define ZIP_CENTRAL_ENTS_OFFS 8
-#define ZIP_CENTRAL_TOTALENTS_OFFS 10
-#define ZIP_CENTRAL_DIRSIZE_OFFS 12
-#define ZIP_CENTRAL_DIRSTART_OFFS 16
-#define ZIP_CENTRAL_COMMENTLEN_OFFS 20
-
-#define ZIP_MIN_VERSION 20
-#define ZIP_COMPMETH_STORED 0
-#define ZIP_COMPMETH_DEFLATED 8
-
-#define ZIP_PASSWORD_END_SIG 0x5a5a4b50
-
-#define DEFAULT_WRITE_MAX_SIZE (2 * 1024 * 1024)
-
-/*
- * Macros to report errors only if an interp is present.
- */
-
-#define ZIPFS_ERROR(interp,errstr) \
- do { \
- if (interp) { \
- Tcl_SetObjResult(interp, Tcl_NewStringObj(errstr, -1)); \
- } \
- } while (0)
-#define ZIPFS_POSIX_ERROR(interp,errstr) \
- do { \
- if (interp) { \
- Tcl_SetObjResult(interp, Tcl_ObjPrintf( \
- "%s: %s", errstr, Tcl_PosixError(interp))); \
- } \
- } while (0)
-
-/*
- * Macros to read and write 16 and 32 bit integers from/to ZIP archives.
- */
-
-#define ZipReadInt(p) \
- ((p)[0] | ((p)[1] << 8) | ((p)[2] << 16) | ((p)[3] << 24))
-#define ZipReadShort(p) \
- ((p)[0] | ((p)[1] << 8))
-
-#define ZipWriteInt(p, v) \
- do { \
- (p)[0] = (v) & 0xff; \
- (p)[1] = ((v) >> 8) & 0xff; \
- (p)[2] = ((v) >> 16) & 0xff; \
- (p)[3] = ((v) >> 24) & 0xff; \
- } while (0)
-#define ZipWriteShort(p, v) \
- do { \
- (p)[0] = (v) & 0xff; \
- (p)[1] = ((v) >> 8) & 0xff; \
- } while (0)
-
-/*
- * Windows drive letters.
- */
-
-#ifdef _WIN32
-static const char drvletters[] =
- "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
-#endif /* _WIN32 */
-
-/*
- * Mutex to protect localtime(3) when no reentrant version available.
- */
-
-#if !defined(_WIN32) && !defined(HAVE_LOCALTIME_R) && TCL_THREADS
-TCL_DECLARE_MUTEX(localtimeMutex)
-#endif /* !_WIN32 && !HAVE_LOCALTIME_R && TCL_THREADS */
-
-/*
- * In-core description of mounted ZIP archive file.
- */
-
-typedef struct ZipFile {
- char *name; /* Archive name */
- size_t nameLength; /* Length of archive name */
- char isMemBuffer; /* When true, not a file but a memory buffer */
- Tcl_Channel chan; /* Channel handle or NULL */
- unsigned char *data; /* Memory mapped or malloc'ed file */
- size_t length; /* Length of memory mapped file */
- void *ptrToFree; /* Non-NULL if malloc'ed file */
- size_t numFiles; /* Number of files in archive */
- size_t baseOffset; /* Archive start */
- size_t passOffset; /* Password start */
- size_t directoryOffset; /* Archive directory start */
- unsigned char passBuf[264]; /* Password buffer */
- size_t numOpen; /* Number of open files on archive */
- struct ZipEntry *entries; /* List of files in archive */
- struct ZipEntry *topEnts; /* List of top-level dirs in archive */
- char *mountPoint; /* Mount point name */
- size_t mountPointLen; /* Length of mount point name */
-#ifdef _WIN32
- HANDLE mountHandle; /* Handle used for direct file access. */
-#endif /* _WIN32 */
-} ZipFile;
-
-/*
- * In-core description of file contained in mounted ZIP archive.
- */
-
-typedef struct ZipEntry {
- char *name; /* The full pathname of the virtual file */
- ZipFile *zipFilePtr; /* The ZIP file holding this virtual file */
- Tcl_WideInt offset; /* Data offset into memory mapped ZIP file */
- int numBytes; /* Uncompressed size of the virtual file */
- int numCompressedBytes; /* Compressed size of the virtual file */
- int compressMethod; /* Compress method */
- int isDirectory; /* Set to 1 if directory, or -1 if root */
- int depth; /* Number of slashes in path. */
- int crc32; /* CRC-32 */
- int timestamp; /* Modification time */
- int isEncrypted; /* True if data is encrypted */
- unsigned char *data; /* File data if written */
- struct ZipEntry *next; /* Next file in the same archive */
- struct ZipEntry *tnext; /* Next top-level dir in archive */
-} ZipEntry;
-
-/*
- * File channel for file contained in mounted ZIP archive.
- */
-
-typedef struct ZipChannel {
- ZipFile *zipFilePtr; /* The ZIP file holding this channel */
- ZipEntry *zipEntryPtr; /* Pointer back to virtual file */
- size_t maxWrite; /* Maximum size for write */
- size_t numBytes; /* Number of bytes of uncompressed data */
- size_t numRead; /* Position of next byte to be read from the
- * channel */
- unsigned char *ubuf; /* Pointer to the uncompressed data */
- int iscompr; /* True if data is compressed */
- int isDirectory; /* Set to 1 if directory, or -1 if root */
- int isEncrypted; /* True if data is encrypted */
- int isWriting; /* True if open for writing */
- unsigned long keys[3]; /* Key for decryption */
-} ZipChannel;
-
-/*
- * Global variables.
- *
- * Most are kept in single ZipFS struct. When build with threading support
- * this struct is protected by the ZipFSMutex (see below).
- *
- * The "fileHash" component is the process wide global table of all known ZIP
- * archive members in all mounted ZIP archives.
- *
- * The "zipHash" components is the process wide global table of all mounted
- * ZIP archive files.
- */
-
-static struct {
- int initialized; /* True when initialized */
- int lock; /* RW lock, see below */
- int waiters; /* RW lock, see below */
- int wrmax; /* Maximum write size of a file */
- int idCount; /* Counter for channel names */
- Tcl_HashTable fileHash; /* File name to ZipEntry mapping */
- Tcl_HashTable zipHash; /* Mount to ZipFile mapping */
-} ZipFS = {
- 0, 0, 0, DEFAULT_WRITE_MAX_SIZE, 0,
-};
-
-/*
- * For password rotation.
- */
-
-static const char pwrot[16] = {
- 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
- 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0
-};
-
-/*
- * Table to compute CRC32.
-#ifdef Z_U4
- typedef Z_U4 z_crc_t;
-#else
- typedef unsigned long z_crc_t;
-#endif
- */
-
-static const z_crc_t crc32tab[256] = {
- 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
- 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
- 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
- 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
- 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
- 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
- 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
- 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
- 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
- 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
- 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
- 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
- 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
- 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
- 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
- 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
- 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
- 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
- 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
- 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
- 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
- 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
- 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
- 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
- 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
- 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
- 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
- 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
- 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
- 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
- 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
- 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
- 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
- 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
- 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
- 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
- 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
- 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
- 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
- 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
- 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
- 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
- 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
- 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
- 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
- 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
- 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
- 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
- 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
- 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
- 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
- 0x2d02ef8d,
-};
-
-static const char *zipfs_literal_tcl_library = NULL;
-
-/* Function prototypes */
-
-static inline int DescribeMounted(Tcl_Interp *interp,
- const char *mountPoint);
-static inline int ListMountPoints(Tcl_Interp *interp);
-static int ZipfsAppHookFindTclInit(const char *archive);
-static int ZipFSPathInFilesystemProc(Tcl_Obj *pathPtr,
- void **clientDataPtr);
-static Tcl_Obj * ZipFSFilesystemPathTypeProc(Tcl_Obj *pathPtr);
-static Tcl_Obj * ZipFSFilesystemSeparatorProc(Tcl_Obj *pathPtr);
-static int ZipFSStatProc(Tcl_Obj *pathPtr, Tcl_StatBuf *buf);
-static int ZipFSAccessProc(Tcl_Obj *pathPtr, int mode);
-static Tcl_Channel ZipFSOpenFileChannelProc(Tcl_Interp *interp,
- Tcl_Obj *pathPtr, int mode, int permissions);
-static int ZipFSMatchInDirectoryProc(Tcl_Interp *interp,
- Tcl_Obj *result, Tcl_Obj *pathPtr,
- const char *pattern, Tcl_GlobTypeData *types);
-static Tcl_Obj * ZipFSListVolumesProc(void);
-static const char *const *ZipFSFileAttrStringsProc(Tcl_Obj *pathPtr,
- Tcl_Obj **objPtrRef);
-static int ZipFSFileAttrsGetProc(Tcl_Interp *interp, int index,
- Tcl_Obj *pathPtr, Tcl_Obj **objPtrRef);
-static int ZipFSFileAttrsSetProc(Tcl_Interp *interp, int index,
- Tcl_Obj *pathPtr, Tcl_Obj *objPtr);
-static int ZipFSLoadFile(Tcl_Interp *interp, Tcl_Obj *path,
- Tcl_LoadHandle *loadHandle,
- Tcl_FSUnloadFileProc **unloadProcPtr, int flags);
-static void ZipfsSetup(void);
-static int ZipChannelClose(void *instanceData,
- Tcl_Interp *interp);
-static int ZipChannelGetFile(void *instanceData,
- int direction, void **handlePtr);
-static int ZipChannelRead(void *instanceData, char *buf,
- int toRead, int *errloc);
-static int ZipChannelSeek(void *instanceData, long offset,
- int mode, int *errloc);
-static void ZipChannelWatchChannel(void *instanceData,
- int mask);
-static int ZipChannelWrite(void *instanceData,
- const char *buf, int toWrite, int *errloc);
-
-/*
- * Define the ZIP filesystem dispatch table.
- */
-
-MODULE_SCOPE const Tcl_Filesystem zipfsFilesystem;
-
-const Tcl_Filesystem zipfsFilesystem = {
- "zipfs",
- sizeof(Tcl_Filesystem),
- TCL_FILESYSTEM_VERSION_2,
- ZipFSPathInFilesystemProc,
- NULL, /* dupInternalRepProc */
- NULL, /* freeInternalRepProc */
- NULL, /* internalToNormalizedProc */
- NULL, /* createInternalRepProc */
- NULL, /* normalizePathProc */
- ZipFSFilesystemPathTypeProc,
- ZipFSFilesystemSeparatorProc,
- ZipFSStatProc,
- ZipFSAccessProc,
- ZipFSOpenFileChannelProc,
- ZipFSMatchInDirectoryProc,
- NULL, /* utimeProc */
- NULL, /* linkProc */
- ZipFSListVolumesProc,
- ZipFSFileAttrStringsProc,
- ZipFSFileAttrsGetProc,
- ZipFSFileAttrsSetProc,
- NULL, /* createDirectoryProc */
- NULL, /* removeDirectoryProc */
- NULL, /* deleteFileProc */
- NULL, /* copyFileProc */
- NULL, /* renameFileProc */
- NULL, /* copyDirectoryProc */
- NULL, /* lstatProc */
- (Tcl_FSLoadFileProc *) ZipFSLoadFile,
- NULL, /* getCwdProc */
- NULL, /* chdirProc */
-};
-
-/*
- * The channel type/driver definition used for ZIP archive members.
- */
-
-static Tcl_ChannelType ZipChannelType = {
- "zip", /* Type name. */
- TCL_CHANNEL_VERSION_5,
- ZipChannelClose, /* Close channel, clean instance data */
- ZipChannelRead, /* Handle read request */
- ZipChannelWrite, /* Handle write request */
- ZipChannelSeek, /* Move location of access point, NULL'able */
- NULL, /* Set options, NULL'able */
- NULL, /* Get options, NULL'able */
- ZipChannelWatchChannel, /* Initialize notifier */
- ZipChannelGetFile, /* Get OS handle from the channel */
- NULL, /* 2nd version of close channel, NULL'able */
- NULL, /* Set blocking mode for raw channel, NULL'able */
- NULL, /* Function to flush channel, NULL'able */
- NULL, /* Function to handle event, NULL'able */
- NULL, /* Wide seek function, NULL'able */
- NULL, /* Thread action function, NULL'able */
- NULL, /* Truncate function, NULL'able */
-};
-
-/*
- *-------------------------------------------------------------------------
- *
- * ReadLock, WriteLock, Unlock --
- *
- * POSIX like rwlock functions to support multiple readers and single
- * writer on internal structs.
- *
- * Limitations:
- * - a read lock cannot be promoted to a write lock
- * - a write lock may not be nested
- *
- *-------------------------------------------------------------------------
- */
-
-TCL_DECLARE_MUTEX(ZipFSMutex)
-
-#if TCL_THREADS
-
-static Tcl_Condition ZipFSCond;
-
-static void
-ReadLock(void)
-{
- Tcl_MutexLock(&ZipFSMutex);
- while (ZipFS.lock < 0) {
- ZipFS.waiters++;
- Tcl_ConditionWait(&ZipFSCond, &ZipFSMutex, NULL);
- ZipFS.waiters--;
- }
- ZipFS.lock++;
- Tcl_MutexUnlock(&ZipFSMutex);
-}
-
-static void
-WriteLock(void)
-{
- Tcl_MutexLock(&ZipFSMutex);
- while (ZipFS.lock != 0) {
- ZipFS.waiters++;
- Tcl_ConditionWait(&ZipFSCond, &ZipFSMutex, NULL);
- ZipFS.waiters--;
- }
- ZipFS.lock = -1;
- Tcl_MutexUnlock(&ZipFSMutex);
-}
-
-static void
-Unlock(void)
-{
- Tcl_MutexLock(&ZipFSMutex);
- if (ZipFS.lock > 0) {
- --ZipFS.lock;
- } else if (ZipFS.lock < 0) {
- ZipFS.lock = 0;
- }
- if ((ZipFS.lock == 0) && (ZipFS.waiters > 0)) {
- Tcl_ConditionNotify(&ZipFSCond);
- }
- Tcl_MutexUnlock(&ZipFSMutex);
-}
-
-#else /* !TCL_THREADS */
-#define ReadLock() do {} while (0)
-#define WriteLock() do {} while (0)
-#define Unlock() do {} while (0)
-#endif /* TCL_THREADS */
-
-/*
- *-------------------------------------------------------------------------
- *
- * DosTimeDate, ToDosTime, ToDosDate --
- *
- * Functions to perform conversions between DOS time stamps and POSIX
- * time_t.
- *
- *-------------------------------------------------------------------------
- */
-
-static time_t
-DosTimeDate(
- int dosDate,
- int dosTime)
-{
- struct tm tm;
- time_t ret;
-
- memset(&tm, 0, sizeof(tm));
- tm.tm_isdst = -1; /* let mktime() deal with DST */
- tm.tm_year = ((dosDate & 0xfe00) >> 9) + 80;
- tm.tm_mon = ((dosDate & 0x1e0) >> 5) - 1;
- tm.tm_mday = dosDate & 0x1f;
- tm.tm_hour = (dosTime & 0xf800) >> 11;
- tm.tm_min = (dosTime & 0x7e0) >> 5;
- tm.tm_sec = (dosTime & 0x1f) << 1;
- ret = mktime(&tm);
- if (ret == (time_t) -1) {
- /* fallback to 1980-01-01T00:00:00+00:00 (DOS epoch) */
- ret = (time_t) 315532800;
- }
- return ret;
-}
-
-static int
-ToDosTime(
- time_t when)
-{
- struct tm *tmp, tm;
-
-#if !TCL_THREADS || defined(_WIN32)
- /* Not threaded, or on Win32 which uses thread local storage */
- tmp = localtime(&when);
- tm = *tmp;
-#elif defined(HAVE_LOCALTIME_R)
- /* Threaded, have reentrant API */
- tmp = &tm;
- localtime_r(&when, tmp);
-#else /* TCL_THREADS && !_WIN32 && !HAVE_LOCALTIME_R */
- /* Only using a mutex is safe. */
- Tcl_MutexLock(&localtimeMutex);
- tmp = localtime(&when);
- tm = *tmp;
- Tcl_MutexUnlock(&localtimeMutex);
-#endif
- return (tm.tm_hour << 11) | (tm.tm_min << 5) | (tm.tm_sec >> 1);
-}
-
-static int
-ToDosDate(
- time_t when)
-{
- struct tm *tmp, tm;
-
-#if !TCL_THREADS || defined(_WIN32)
- /* Not threaded, or on Win32 which uses thread local storage */
- tmp = localtime(&when);
- tm = *tmp;
-#elif /* TCL_THREADS && !_WIN32 && */ defined(HAVE_LOCALTIME_R)
- /* Threaded, have reentrant API */
- tmp = &tm;
- localtime_r(&when, tmp);
-#else /* TCL_THREADS && !_WIN32 && !HAVE_LOCALTIME_R */
- /* Only using a mutex is safe. */
- Tcl_MutexLock(&localtimeMutex);
- tmp = localtime(&when);
- tm = *tmp;
- Tcl_MutexUnlock(&localtimeMutex);
-#endif
- return ((tm.tm_year - 80) << 9) | ((tm.tm_mon + 1) << 5) | tm.tm_mday;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * CountSlashes --
- *
- * This function counts the number of slashes in a pathname string.
- *
- * Results:
- * Number of slashes found in string.
- *
- * Side effects:
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-CountSlashes(
- const char *string)
-{
- int count = 0;
- const char *p = string;
-
- while (*p != '\0') {
- if (*p == '/') {
- count++;
- }
- p++;
- }
- return count;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * CanonicalPath --
- *
- * This function computes the canonical path from a directory and file
- * name components into the specified Tcl_DString.
- *
- * Results:
- * Returns the pointer to the canonical path contained in the specified
- * Tcl_DString.
- *
- * Side effects:
- * Modifies the specified Tcl_DString.
- *
- *-------------------------------------------------------------------------
- */
-
-static char *
-CanonicalPath(
- const char *root,
- const char *tail,
- Tcl_DString *dsPtr,
- int inZipfs)
-{
- char *path;
- int i, j, c, isUNC = 0, isVfs = 0, n = 0;
- int haveZipfsPath = 1;
-
-#ifdef _WIN32
- if (tail[0] != '\0' && strchr(drvletters, tail[0]) && tail[1] == ':') {
- tail += 2;
- haveZipfsPath = 0;
- }
- /* UNC style path */
- if (tail[0] == '\\') {
- root = "";
- ++tail;
- haveZipfsPath = 0;
- }
- if (tail[0] == '\\') {
- root = "/";
- ++tail;
- haveZipfsPath = 0;
- }
-#endif /* _WIN32 */
-
- if (haveZipfsPath) {
- /* UNC style path */
- if (root && strncmp(root, ZIPFS_VOLUME, ZIPFS_VOLUME_LEN) == 0) {
- isVfs = 1;
- } else if (tail &&
- strncmp(tail, ZIPFS_VOLUME, ZIPFS_VOLUME_LEN) == 0) {
- isVfs = 2;
- }
- if (isVfs != 1 && (root[0] == '/') && (root[1] == '/')) {
- isUNC = 1;
- }
- }
-
- if (isVfs != 2) {
- if (tail[0] == '/') {
- if (isVfs != 1) {
- root = "";
- }
- ++tail;
- isUNC = 0;
- }
- if (tail[0] == '/') {
- if (isVfs != 1) {
- root = "/";
- }
- ++tail;
- isUNC = 1;
- }
- }
- i = strlen(root);
- j = strlen(tail);
-
- switch (isVfs) {
- case 1:
- if (i > ZIPFS_VOLUME_LEN) {
- Tcl_DStringSetLength(dsPtr, i + j + 1);
- path = Tcl_DStringValue(dsPtr);
- memcpy(path, root, i);
- path[i++] = '/';
- memcpy(path + i, tail, j);
- } else {
- Tcl_DStringSetLength(dsPtr, i + j);
- path = Tcl_DStringValue(dsPtr);
- memcpy(path, root, i);
- memcpy(path + i, tail, j);
- }
- break;
- case 2:
- Tcl_DStringSetLength(dsPtr, j);
- path = Tcl_DStringValue(dsPtr);
- memcpy(path, tail, j);
- break;
- default:
- if (inZipfs) {
- Tcl_DStringSetLength(dsPtr, i + j + ZIPFS_VOLUME_LEN);
- path = Tcl_DStringValue(dsPtr);
- memcpy(path, ZIPFS_VOLUME, ZIPFS_VOLUME_LEN);
- memcpy(path + ZIPFS_VOLUME_LEN + i , tail, j);
- } else {
- Tcl_DStringSetLength(dsPtr, i + j + 1);
- path = Tcl_DStringValue(dsPtr);
- memcpy(path, root, i);
- path[i++] = '/';
- memcpy(path + i, tail, j);
- }
- break;
- }
-
-#ifdef _WIN32
- for (i = 0; path[i] != '\0'; i++) {
- if (path[i] == '\\') {
- path[i] = '/';
- }
- }
-#endif /* _WIN32 */
-
- if (inZipfs) {
- n = ZIPFS_VOLUME_LEN;
- } else {
- n = 0;
- }
-
- for (i = j = n; (c = path[i]) != '\0'; i++) {
- if (c == '/') {
- int c2 = path[i + 1];
-
- if (c2 == '\0' || c2 == '/') {
- continue;
- }
- if (c2 == '.') {
- int c3 = path[i + 2];
-
- if ((c3 == '/') || (c3 == '\0')) {
- i++;
- continue;
- }
- if ((c3 == '.')
- && ((path[i + 3] == '/') || (path[i + 3] == '\0'))) {
- i += 2;
- while ((j > 0) && (path[j - 1] != '/')) {
- j--;
- }
- if (j > isUNC) {
- --j;
- while ((j > 1 + isUNC) && (path[j - 2] == '/')) {
- j--;
- }
- }
- continue;
- }
- }
- }
- path[j++] = c;
- }
- if (j == 0) {
- path[j++] = '/';
- }
- path[j] = 0;
- Tcl_DStringSetLength(dsPtr, j);
- return Tcl_DStringValue(dsPtr);
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSLookup --
- *
- * This function returns the ZIP entry struct corresponding to the ZIP
- * archive member of the given file name. Caller must hold the right
- * lock.
- *
- * Results:
- * Returns the pointer to ZIP entry struct or NULL if the the given file
- * name could not be found in the global list of ZIP archive members.
- *
- * Side effects:
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static ZipEntry *
-ZipFSLookup(
- char *filename)
-{
- Tcl_HashEntry *hPtr;
- ZipEntry *z = NULL;
-
- hPtr = Tcl_FindHashEntry(&ZipFS.fileHash, filename);
- if (hPtr) {
- z = Tcl_GetHashValue(hPtr);
- }
- return z;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSLookupMount --
- *
- * This function returns an indication if the given file name corresponds
- * to a mounted ZIP archive file.
- *
- * Results:
- * Returns true, if the given file name is a mounted ZIP archive file.
- *
- * Side effects:
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-#ifdef NEVER_USED
-static int
-ZipFSLookupMount(
- char *filename)
-{
- Tcl_HashEntry *hPtr;
- Tcl_HashSearch search;
-
- for (hPtr = Tcl_FirstHashEntry(&ZipFS.zipHash, &search); hPtr;
- hPtr = Tcl_NextHashEntry(&search)) {
- ZipFile *zf = Tcl_GetHashValue(hPtr);
-
- if (strcmp(zf->mountPoint, filename) == 0) {
- return 1;
- }
- }
- return 0;
-}
-#endif /* NEVER_USED */
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSCloseArchive --
- *
- * This function closes a mounted ZIP archive file.
- *
- * Results:
- * None.
- *
- * Side effects:
- * A memory mapped ZIP archive is unmapped, allocated memory is released.
- * The ZipFile pointer is *NOT* deallocated by this function.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-ZipFSCloseArchive(
- Tcl_Interp *interp, /* Current interpreter. */
- ZipFile *zf)
-{
- if (zf->nameLength) {
- Tcl_Free(zf->name);
- }
- if (zf->isMemBuffer) {
- /* Pointer to memory */
- if (zf->ptrToFree) {
- Tcl_Free(zf->ptrToFree);
- zf->ptrToFree = NULL;
- }
- zf->data = NULL;
- return;
- }
-
-#ifdef _WIN32
- if (zf->data && !zf->ptrToFree) {
- UnmapViewOfFile(zf->data);
- zf->data = NULL;
- }
- if (zf->mountHandle != INVALID_HANDLE_VALUE) {
- CloseHandle(zf->mountHandle);
- }
-#else /* !_WIN32 */
- if ((zf->data != MAP_FAILED) && !zf->ptrToFree) {
- munmap(zf->data, zf->length);
- zf->data = MAP_FAILED;
- }
-#endif /* _WIN32 */
-
- if (zf->ptrToFree) {
- Tcl_Free(zf->ptrToFree);
- zf->ptrToFree = NULL;
- }
- if (zf->chan) {
- Tcl_Close(interp, zf->chan);
- zf->chan = NULL;
- }
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSFindTOC --
- *
- * This function takes a memory mapped zip file and indexes the contents.
- * When "needZip" is zero an embedded ZIP archive in an executable file
- * is accepted.
- *
- * Results:
- * TCL_OK on success, TCL_ERROR otherwise with an error message placed
- * into the given "interp" if it is not NULL.
- *
- * Side effects:
- * The given ZipFile struct is filled with information about the ZIP
- * archive file.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSFindTOC(
- Tcl_Interp *interp, /* Current interpreter. NULLable. */
- int needZip,
- ZipFile *zf)
-{
- size_t i;
- unsigned char *p, *q;
-
- p = zf->data + zf->length - ZIP_CENTRAL_END_LEN;
- while (p >= zf->data) {
- if (*p == (ZIP_CENTRAL_END_SIG & 0xFF)) {
- if (ZipReadInt(p) == ZIP_CENTRAL_END_SIG) {
- break;
- }
- p -= ZIP_SIG_LEN;
- } else {
- --p;
- }
- }
- if (p < zf->data) {
- if (!needZip) {
- zf->baseOffset = zf->passOffset = zf->length;
- return TCL_OK;
- }
- ZIPFS_ERROR(interp, "wrong end signature");
- if (interp) {
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "END_SIG", NULL);
- }
- goto error;
- }
- zf->numFiles = ZipReadShort(p + ZIP_CENTRAL_ENTS_OFFS);
- if (zf->numFiles == 0) {
- if (!needZip) {
- zf->baseOffset = zf->passOffset = zf->length;
- return TCL_OK;
- }
- ZIPFS_ERROR(interp, "empty archive");
- if (interp) {
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "EMPTY", NULL);
- }
- goto error;
- }
- q = zf->data + ZipReadInt(p + ZIP_CENTRAL_DIRSTART_OFFS);
- p -= ZipReadInt(p + ZIP_CENTRAL_DIRSIZE_OFFS);
- if ((p < zf->data) || (p > zf->data + zf->length)
- || (q < zf->data) || (q > zf->data + zf->length)) {
- if (!needZip) {
- zf->baseOffset = zf->passOffset = zf->length;
- return TCL_OK;
- }
- ZIPFS_ERROR(interp, "archive directory not found");
- if (interp) {
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "NO_DIR", NULL);
- }
- goto error;
- }
- zf->baseOffset = zf->passOffset = p - q;
- zf->directoryOffset = p - zf->data;
- q = p;
- for (i = 0; i < zf->numFiles; i++) {
- int pathlen, comlen, extra;
-
- if (q + ZIP_CENTRAL_HEADER_LEN > zf->data + zf->length) {
- ZIPFS_ERROR(interp, "wrong header length");
- if (interp) {
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "HDR_LEN", NULL);
- }
- goto error;
- }
- if (ZipReadInt(q) != ZIP_CENTRAL_HEADER_SIG) {
- ZIPFS_ERROR(interp, "wrong header signature");
- if (interp) {
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "HDR_SIG", NULL);
- }
- goto error;
- }
- pathlen = ZipReadShort(q + ZIP_CENTRAL_PATHLEN_OFFS);
- comlen = ZipReadShort(q + ZIP_CENTRAL_FCOMMENTLEN_OFFS);
- extra = ZipReadShort(q + ZIP_CENTRAL_EXTRALEN_OFFS);
- q += pathlen + comlen + extra + ZIP_CENTRAL_HEADER_LEN;
- }
- q = zf->data + zf->baseOffset;
- if ((zf->baseOffset >= 6) && (ZipReadInt(q - 4) == ZIP_PASSWORD_END_SIG)) {
- i = q[-5];
- if (q - 5 - i > zf->data) {
- zf->passBuf[0] = i;
- memcpy(zf->passBuf + 1, q - 5 - i, i);
- zf->passOffset -= i ? (5 + i) : 0;
- }
- }
- return TCL_OK;
-
- error:
- ZipFSCloseArchive(interp, zf);
- return TCL_ERROR;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSOpenArchive --
- *
- * This function opens a ZIP archive file for reading. An attempt is made
- * to memory map that file. Otherwise it is read into an allocated memory
- * buffer. The ZIP archive header is verified and must be valid for the
- * function to succeed. When "needZip" is zero an embedded ZIP archive in
- * an executable file is accepted.
- *
- * Results:
- * TCL_OK on success, TCL_ERROR otherwise with an error message placed
- * into the given "interp" if it is not NULL.
- *
- * Side effects:
- * ZIP archive is memory mapped or read into allocated memory, the given
- * ZipFile struct is filled with information about the ZIP archive file.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSOpenArchive(
- Tcl_Interp *interp, /* Current interpreter. NULLable. */
- const char *zipname, /* Path to ZIP file to open. */
- int needZip,
- ZipFile *zf)
-{
- size_t i;
- void *handle;
-
- zf->nameLength = 0;
- zf->isMemBuffer = 0;
-#ifdef _WIN32
- zf->data = NULL;
- zf->mountHandle = INVALID_HANDLE_VALUE;
-#else /* !_WIN32 */
- zf->data = MAP_FAILED;
-#endif /* _WIN32 */
- zf->length = 0;
- zf->numFiles = 0;
- zf->baseOffset = zf->passOffset = 0;
- zf->ptrToFree = NULL;
- zf->passBuf[0] = 0;
- zf->chan = Tcl_OpenFileChannel(interp, zipname, "rb", 0);
- if (!zf->chan) {
- return TCL_ERROR;
- }
- if (Tcl_GetChannelHandle(zf->chan, TCL_READABLE, &handle) != TCL_OK) {
- zf->length = Tcl_Seek(zf->chan, 0, SEEK_END);
- if (zf->length == TCL_IO_FAILURE) {
- ZIPFS_POSIX_ERROR(interp, "seek error");
- goto error;
- }
- if ((zf->length - ZIP_CENTRAL_END_LEN)
- > (64 * 1024 * 1024 - ZIP_CENTRAL_END_LEN)) {
- ZIPFS_ERROR(interp, "illegal file size");
- if (interp) {
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "FILE_SIZE", NULL);
- }
- goto error;
- }
- if (Tcl_Seek(zf->chan, 0, SEEK_SET) == -1) {
- ZIPFS_POSIX_ERROR(interp, "seek error");
- goto error;
- }
- zf->ptrToFree = zf->data = Tcl_AttemptAlloc(zf->length);
- if (!zf->ptrToFree) {
- ZIPFS_ERROR(interp, "out of memory");
- if (interp) {
- Tcl_SetErrorCode(interp, "TCL", "MALLOC", NULL);
- }
- goto error;
- }
- i = Tcl_Read(zf->chan, (char *) zf->data, zf->length);
- if (i != zf->length) {
- ZIPFS_POSIX_ERROR(interp, "file read error");
- goto error;
- }
- Tcl_Close(interp, zf->chan);
- zf->chan = NULL;
- } else {
-#ifdef _WIN32
- int readSuccessful;
-# ifdef _WIN64
- i = GetFileSizeEx((HANDLE) handle, (PLARGE_INTEGER) &zf->length);
- readSuccessful = (i != 0);
-# else /* !_WIN64 */
- zf->length = GetFileSize((HANDLE) handle, 0);
- readSuccessful = (zf->length != (size_t) INVALID_FILE_SIZE);
-# endif /* _WIN64 */
- if (!readSuccessful || (zf->length < ZIP_CENTRAL_END_LEN)) {
- ZIPFS_POSIX_ERROR(interp, "invalid file size");
- goto error;
- }
- zf->mountHandle = CreateFileMapping((HANDLE) handle, 0, PAGE_READONLY,
- 0, zf->length, 0);
- if (zf->mountHandle == INVALID_HANDLE_VALUE) {
- ZIPFS_POSIX_ERROR(interp, "file mapping failed");
- goto error;
- }
- zf->data = MapViewOfFile(zf->mountHandle, FILE_MAP_READ, 0, 0,
- zf->length);
- if (!zf->data) {
- ZIPFS_POSIX_ERROR(interp, "file mapping failed");
- goto error;
- }
-#else /* !_WIN32 */
- zf->length = lseek(PTR2INT(handle), 0, SEEK_END);
- if (zf->length == TCL_IO_FAILURE || zf->length < ZIP_CENTRAL_END_LEN) {
- ZIPFS_POSIX_ERROR(interp, "invalid file size");
- goto error;
- }
- lseek(PTR2INT(handle), 0, SEEK_SET);
- zf->data = (unsigned char *) mmap(0, zf->length, PROT_READ,
- MAP_FILE | MAP_PRIVATE, PTR2INT(handle), 0);
- if (zf->data == MAP_FAILED) {
- ZIPFS_POSIX_ERROR(interp, "file mapping failed");
- goto error;
- }
-#endif /* _WIN32 */
- }
- return ZipFSFindTOC(interp, needZip, zf);
-
- error:
- ZipFSCloseArchive(interp, zf);
- return TCL_ERROR;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSRootNode --
- *
- * This function generates the root node for a ZIPFS filesystem.
- *
- * Results:
- * TCL_OK on success, TCL_ERROR otherwise with an error message placed
- * into the given "interp" if it is not NULL.
- *
- * Side effects:
- * ...
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSCatalogFilesystem(
- Tcl_Interp *interp, /* Current interpreter. NULLable. */
- ZipFile *zf0,
- const char *mountPoint, /* Mount point path. */
- const char *passwd, /* Password for opening the ZIP, or NULL if
- * the ZIP is unprotected. */
- const char *zipname) /* Path to ZIP file to build a catalog of. */
-{
- int pwlen, isNew;
- size_t i;
- ZipFile *zf;
- ZipEntry *z;
- Tcl_HashEntry *hPtr;
- Tcl_DString ds, dsm, fpBuf;
- unsigned char *q;
-
- /*
- * Basic verification of the password for sanity.
- */
-
- pwlen = 0;
- if (passwd) {
- pwlen = strlen(passwd);
- if ((pwlen > 255) || strchr(passwd, 0xff)) {
- if (interp) {
- Tcl_SetObjResult(interp,
- Tcl_NewStringObj("illegal password", -1));
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "BAD_PASS", NULL);
- }
- return TCL_ERROR;
- }
- }
-
- WriteLock();
-
- /*
- * Mount point sometimes is a relative or otherwise denormalized path.
- * But an absolute name is needed as mount point here.
- */
-
- Tcl_DStringInit(&ds);
- Tcl_DStringInit(&dsm);
- if (strcmp(mountPoint, "/") == 0) {
- mountPoint = "";
- } else {
- mountPoint = CanonicalPath("", mountPoint, &dsm, 1);
- }
- hPtr = Tcl_CreateHashEntry(&ZipFS.zipHash, mountPoint, &isNew);
- if (!isNew) {
- if (interp) {
- zf = Tcl_GetHashValue(hPtr);
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "%s is already mounted on %s", zf->name, mountPoint));
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "MOUNTED", NULL);
- }
- Unlock();
- ZipFSCloseArchive(interp, zf0);
- return TCL_ERROR;
- }
- zf = Tcl_AttemptAlloc(sizeof(ZipFile) + strlen(mountPoint) + 1);
- if (!zf) {
- if (interp) {
- Tcl_AppendResult(interp, "out of memory", (char *) NULL);
- Tcl_SetErrorCode(interp, "TCL", "MALLOC", NULL);
- }
- Unlock();
- ZipFSCloseArchive(interp, zf0);
- return TCL_ERROR;
- }
- Unlock();
-
- *zf = *zf0;
- zf->mountPoint = Tcl_GetHashKey(&ZipFS.zipHash, hPtr);
- zf->mountPointLen = strlen(zf->mountPoint);
- zf->nameLength = strlen(zipname);
- zf->name = Tcl_Alloc(zf->nameLength + 1);
- memcpy(zf->name, zipname, zf->nameLength + 1);
- zf->entries = NULL;
- zf->topEnts = NULL;
- zf->numOpen = 0;
- Tcl_SetHashValue(hPtr, zf);
- if ((zf->passBuf[0] == 0) && pwlen) {
- int k = 0;
-
- zf->passBuf[k++] = pwlen;
- for (i = pwlen; i-- > 0 ;) {
- zf->passBuf[k++] = (passwd[i] & 0x0f)
- | pwrot[(passwd[i] >> 4) & 0x0f];
- }
- zf->passBuf[k] = '\0';
- }
- if (mountPoint[0] != '\0') {
- hPtr = Tcl_CreateHashEntry(&ZipFS.fileHash, mountPoint, &isNew);
- if (isNew) {
- z = Tcl_Alloc(sizeof(ZipEntry));
- Tcl_SetHashValue(hPtr, z);
-
- z->tnext = NULL;
- z->depth = CountSlashes(mountPoint);
- z->zipFilePtr = zf;
- z->isDirectory = (zf->baseOffset == 0) ? 1 : -1; /* root marker */
- z->isEncrypted = 0;
- z->offset = zf->baseOffset;
- z->crc32 = 0;
- z->timestamp = 0;
- z->numBytes = z->numCompressedBytes = 0;
- z->compressMethod = ZIP_COMPMETH_STORED;
- z->data = NULL;
- z->name = Tcl_GetHashKey(&ZipFS.fileHash, hPtr);
- z->next = zf->entries;
- zf->entries = z;
- }
- }
- q = zf->data + zf->directoryOffset;
- Tcl_DStringInit(&fpBuf);
- for (i = 0; i < zf->numFiles; i++) {
- int extra, isdir = 0, dosTime, dosDate, nbcompr;
- size_t offs, pathlen, comlen;
- unsigned char *lq, *gq = NULL;
- char *fullpath, *path;
-
- pathlen = ZipReadShort(q + ZIP_CENTRAL_PATHLEN_OFFS);
- comlen = ZipReadShort(q + ZIP_CENTRAL_FCOMMENTLEN_OFFS);
- extra = ZipReadShort(q + ZIP_CENTRAL_EXTRALEN_OFFS);
- Tcl_DStringSetLength(&ds, 0);
- Tcl_DStringAppend(&ds, (char *) q + ZIP_CENTRAL_HEADER_LEN, pathlen);
- path = Tcl_DStringValue(&ds);
- if ((pathlen > 0) && (path[pathlen - 1] == '/')) {
- Tcl_DStringSetLength(&ds, pathlen - 1);
- path = Tcl_DStringValue(&ds);
- isdir = 1;
- }
- if ((strcmp(path, ".") == 0) || (strcmp(path, "..") == 0)) {
- goto nextent;
- }
- lq = zf->data + zf->baseOffset
- + ZipReadInt(q + ZIP_CENTRAL_LOCALHDR_OFFS);
- if ((lq < zf->data) || (lq > zf->data + zf->length)) {
- goto nextent;
- }
- nbcompr = ZipReadInt(lq + ZIP_LOCAL_COMPLEN_OFFS);
- if (!isdir && (nbcompr == 0)
- && (ZipReadInt(lq + ZIP_LOCAL_UNCOMPLEN_OFFS) == 0)
- && (ZipReadInt(lq + ZIP_LOCAL_CRC32_OFFS) == 0)) {
- gq = q;
- nbcompr = ZipReadInt(gq + ZIP_CENTRAL_COMPLEN_OFFS);
- }
- offs = (lq - zf->data)
- + ZIP_LOCAL_HEADER_LEN
- + ZipReadShort(lq + ZIP_LOCAL_PATHLEN_OFFS)
- + ZipReadShort(lq + ZIP_LOCAL_EXTRALEN_OFFS);
- if (offs + nbcompr > zf->length) {
- goto nextent;
- }
- if (!isdir && (mountPoint[0] == '\0') && !CountSlashes(path)) {
-#ifdef ANDROID
- /*
- * When mounting the ZIP archive on the root directory try to
- * remap top level regular files of the archive to
- * /assets/.root/... since this directory should not be in a valid
- * APK due to the leading dot in the file name component. This
- * trick should make the files AndroidManifest.xml,
- * resources.arsc, and classes.dex visible to Tcl.
- */
- Tcl_DString ds2;
-
- Tcl_DStringInit(&ds2);
- Tcl_DStringAppend(&ds2, "assets/.root/", -1);
- Tcl_DStringAppend(&ds2, path, -1);
- hPtr = Tcl_FindHashEntry(&ZipFS.fileHash, Tcl_DStringValue(&ds2));
- if (hPtr) {
- /* should not happen but skip it anyway */
- Tcl_DStringFree(&ds2);
- goto nextent;
- }
- Tcl_DStringSetLength(&ds, 0);
- Tcl_DStringAppend(&ds, Tcl_DStringValue(&ds2),
- Tcl_DStringLength(&ds2));
- path = Tcl_DStringValue(&ds);
- Tcl_DStringFree(&ds2);
-#else /* !ANDROID */
- /*
- * Regular files skipped when mounting on root.
- */
- goto nextent;
-#endif /* ANDROID */
- }
- Tcl_DStringSetLength(&fpBuf, 0);
- fullpath = CanonicalPath(mountPoint, path, &fpBuf, 1);
- z = Tcl_Alloc(sizeof(ZipEntry));
- z->name = NULL;
- z->tnext = NULL;
- z->depth = CountSlashes(fullpath);
- z->zipFilePtr = zf;
- z->isDirectory = isdir;
- z->isEncrypted = (ZipReadShort(lq + ZIP_LOCAL_FLAGS_OFFS) & 1)
- && (nbcompr > 12);
- z->offset = offs;
- if (gq) {
- z->crc32 = ZipReadInt(gq + ZIP_CENTRAL_CRC32_OFFS);
- dosDate = ZipReadShort(gq + ZIP_CENTRAL_MDATE_OFFS);
- dosTime = ZipReadShort(gq + ZIP_CENTRAL_MTIME_OFFS);
- z->timestamp = DosTimeDate(dosDate, dosTime);
- z->numBytes = ZipReadInt(gq + ZIP_CENTRAL_UNCOMPLEN_OFFS);
- z->compressMethod = ZipReadShort(gq + ZIP_CENTRAL_COMPMETH_OFFS);
- } else {
- z->crc32 = ZipReadInt(lq + ZIP_LOCAL_CRC32_OFFS);
- dosDate = ZipReadShort(lq + ZIP_LOCAL_MDATE_OFFS);
- dosTime = ZipReadShort(lq + ZIP_LOCAL_MTIME_OFFS);
- z->timestamp = DosTimeDate(dosDate, dosTime);
- z->numBytes = ZipReadInt(lq + ZIP_LOCAL_UNCOMPLEN_OFFS);
- z->compressMethod = ZipReadShort(lq + ZIP_LOCAL_COMPMETH_OFFS);
- }
- z->numCompressedBytes = nbcompr;
- z->data = NULL;
- hPtr = Tcl_CreateHashEntry(&ZipFS.fileHash, fullpath, &isNew);
- if (!isNew) {
- /* should not happen but skip it anyway */
- Tcl_Free(z);
- } else {
- Tcl_SetHashValue(hPtr, z);
- z->name = Tcl_GetHashKey(&ZipFS.fileHash, hPtr);
- z->next = zf->entries;
- zf->entries = z;
- if (isdir && (mountPoint[0] == '\0') && (z->depth == 1)) {
- z->tnext = zf->topEnts;
- zf->topEnts = z;
- }
- if (!z->isDirectory && (z->depth > 1)) {
- char *dir, *end;
- ZipEntry *zd;
-
- Tcl_DStringSetLength(&ds, strlen(z->name) + 8);
- Tcl_DStringSetLength(&ds, 0);
- Tcl_DStringAppend(&ds, z->name, -1);
- dir = Tcl_DStringValue(&ds);
- for (end = strrchr(dir, '/'); end && (end != dir);
- end = strrchr(dir, '/')) {
- Tcl_DStringSetLength(&ds, end - dir);
- hPtr = Tcl_CreateHashEntry(&ZipFS.fileHash, dir, &isNew);
- if (!isNew) {
- break;
- }
- zd = Tcl_Alloc(sizeof(ZipEntry));
- zd->name = NULL;
- zd->tnext = NULL;
- zd->depth = CountSlashes(dir);
- zd->zipFilePtr = zf;
- zd->isDirectory = 1;
- zd->isEncrypted = 0;
- zd->offset = z->offset;
- zd->crc32 = 0;
- zd->timestamp = z->timestamp;
- zd->numBytes = zd->numCompressedBytes = 0;
- zd->compressMethod = ZIP_COMPMETH_STORED;
- zd->data = NULL;
- Tcl_SetHashValue(hPtr, zd);
- zd->name = Tcl_GetHashKey(&ZipFS.fileHash, hPtr);
- zd->next = zf->entries;
- zf->entries = zd;
- if ((mountPoint[0] == '\0') && (zd->depth == 1)) {
- zd->tnext = zf->topEnts;
- zf->topEnts = zd;
- }
- }
- }
- }
- nextent:
- q += pathlen + comlen + extra + ZIP_CENTRAL_HEADER_LEN;
- }
- Tcl_DStringFree(&fpBuf);
- Tcl_DStringFree(&ds);
- Tcl_FSMountsChanged(NULL);
- Unlock();
- return TCL_OK;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipfsSetup --
- *
- * Common initialisation code. ZipFS.initialized must *not* be set prior
- * to the call.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-ZipfsSetup(void)
-{
-#if TCL_THREADS
- static const Tcl_Time t = { 0, 0 };
-
- /*
- * Inflate condition variable.
- */
-
- Tcl_MutexLock(&ZipFSMutex);
- Tcl_ConditionWait(&ZipFSCond, &ZipFSMutex, &t);
- Tcl_MutexUnlock(&ZipFSMutex);
-#endif /* TCL_THREADS */
-
- Tcl_FSRegister(NULL, &zipfsFilesystem);
- Tcl_InitHashTable(&ZipFS.fileHash, TCL_STRING_KEYS);
- Tcl_InitHashTable(&ZipFS.zipHash, TCL_STRING_KEYS);
- ZipFS.idCount = 1;
- ZipFS.wrmax = DEFAULT_WRITE_MAX_SIZE;
- ZipFS.initialized = 1;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ListMountPoints --
- *
- * This procedure lists the mount points and what's mounted there, or
- * reports whether there are any mounts (if there's no interpreter). The
- * read lock must be held by the caller.
- *
- * Results:
- * A standard Tcl result. TCL_OK (or TCL_BREAK if no mounts and no
- * interpreter).
- *
- * Side effects:
- * Interpreter result may be updated.
- *
- *-------------------------------------------------------------------------
- */
-
-static inline int
-ListMountPoints(
- Tcl_Interp *interp)
-{
- Tcl_HashEntry *hPtr;
- Tcl_HashSearch search;
- ZipFile *zf;
-
- for (hPtr = Tcl_FirstHashEntry(&ZipFS.zipHash, &search); hPtr;
- hPtr = Tcl_NextHashEntry(&search)) {
- if (!interp) {
- return TCL_OK;
- }
- zf = Tcl_GetHashValue(hPtr);
- Tcl_AppendElement(interp, zf->mountPoint);
- Tcl_AppendElement(interp, zf->name);
- }
- return (interp ? TCL_OK : TCL_BREAK);
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * DescribeMounted --
- *
- * This procedure describes what is mounted at the given the mount point.
- * The interpreter result is not updated if there is nothing mounted at
- * the given point. The read lock must be held by the caller.
- *
- * Results:
- * A standard Tcl result. TCL_OK (or TCL_BREAK if nothing mounted there
- * and no interpreter).
- *
- * Side effects:
- * Interpreter result may be updated.
- *
- *-------------------------------------------------------------------------
- */
-
-static inline int
-DescribeMounted(
- Tcl_Interp *interp,
- const char *mountPoint)
-{
- Tcl_HashEntry *hPtr;
- ZipFile *zf;
-
- if (interp) {
- hPtr = Tcl_FindHashEntry(&ZipFS.zipHash, mountPoint);
- if (hPtr) {
- zf = Tcl_GetHashValue(hPtr);
- Tcl_SetObjResult(interp, Tcl_NewStringObj(zf->name, -1));
- return TCL_OK;
- }
- }
- return (interp ? TCL_OK : TCL_BREAK);
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * TclZipfs_Mount --
- *
- * This procedure is invoked to mount a given ZIP archive file on a given
- * mountpoint with optional ZIP password.
- *
- * Results:
- * A standard Tcl result.
- *
- * Side effects:
- * A ZIP archive file is read, analyzed and mounted, resources are
- * allocated.
- *
- *-------------------------------------------------------------------------
- */
-
-int
-TclZipfs_Mount(
- Tcl_Interp *interp, /* Current interpreter. NULLable. */
- const char *mountPoint, /* Mount point path. */
- const char *zipname, /* Path to ZIP file to mount. */
- const char *passwd) /* Password for opening the ZIP, or NULL if
- * the ZIP is unprotected. */
-{
- ZipFile *zf;
-
- ReadLock();
- if (!ZipFS.initialized) {
- ZipfsSetup();
- }
-
- /*
- * No mount point, so list all mount points and what is mounted there.
- */
-
- if (!mountPoint) {
- int ret = ListMountPoints(interp);
- Unlock();
- return ret;
- }
-
- /*
- * Mount point but no file, so describe what is mounted at that mount
- * point.
- */
-
- if (!zipname) {
- DescribeMounted(interp, mountPoint);
- Unlock();
- return TCL_OK;
- }
- Unlock();
-
- /*
- * Have both a mount point and a file (name) to mount there.
- */
-
- if (passwd) {
- if ((strlen(passwd) > 255) || strchr(passwd, 0xff)) {
- if (interp) {
- Tcl_SetObjResult(interp,
- Tcl_NewStringObj("illegal password", -1));
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "BAD_PASS", NULL);
- }
- return TCL_ERROR;
- }
- }
- zf = Tcl_AttemptAlloc(sizeof(ZipFile) + strlen(mountPoint) + 1);
- if (!zf) {
- if (interp) {
- Tcl_AppendResult(interp, "out of memory", (char *) NULL);
- Tcl_SetErrorCode(interp, "TCL", "MALLOC", NULL);
- }
- return TCL_ERROR;
- }
- if (ZipFSOpenArchive(interp, zipname, 1, zf) != TCL_OK) {
- return TCL_ERROR;
- }
- return ZipFSCatalogFilesystem(interp, zf, mountPoint, passwd, zipname);
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * TclZipfs_MountBuffer --
- *
- * This procedure is invoked to mount a given ZIP archive file on a given
- * mountpoint with optional ZIP password.
- *
- * Results:
- * A standard Tcl result.
- *
- * Side effects:
- * A ZIP archive file is read, analyzed and mounted, resources are
- * allocated.
- *
- *-------------------------------------------------------------------------
- */
-
-int
-TclZipfs_MountBuffer(
- Tcl_Interp *interp, /* Current interpreter. NULLable. */
- const char *mountPoint, /* Mount point path. */
- unsigned char *data,
- size_t datalen,
- int copy)
-{
- ZipFile *zf;
-
- ReadLock();
- if (!ZipFS.initialized) {
- ZipfsSetup();
- }
-
- /*
- * No mount point, so list all mount points and what is mounted there.
- */
-
- if (!mountPoint) {
- int ret = ListMountPoints(interp);
- Unlock();
- return ret;
- }
-
- /*
- * Mount point but no data, so describe what is mounted at that mount
- * point.
- */
-
- if (!data) {
- DescribeMounted(interp, mountPoint);
- Unlock();
- return TCL_OK;
- }
- Unlock();
-
- /*
- * Have both a mount point and data to mount there.
- */
-
- zf = Tcl_AttemptAlloc(sizeof(ZipFile) + strlen(mountPoint) + 1);
- if (!zf) {
- if (interp) {
- Tcl_AppendResult(interp, "out of memory", (char *) NULL);
- Tcl_SetErrorCode(interp, "TCL", "MALLOC", NULL);
- }
- return TCL_ERROR;
- }
- zf->isMemBuffer = 1;
- zf->length = datalen;
- if (copy) {
- zf->data = Tcl_AttemptAlloc(datalen);
- if (!zf->data) {
- if (interp) {
- Tcl_AppendResult(interp, "out of memory", (char *) NULL);
- Tcl_SetErrorCode(interp, "TCL", "MALLOC", NULL);
- }
- return TCL_ERROR;
- }
- memcpy(zf->data, data, datalen);
- zf->ptrToFree = zf->data;
- } else {
- zf->data = data;
- zf->ptrToFree = NULL;
- }
- if (ZipFSFindTOC(interp, 0, zf) != TCL_OK) {
- return TCL_ERROR;
- }
- return ZipFSCatalogFilesystem(interp, zf, mountPoint, NULL,
- "Memory Buffer");
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * TclZipfs_Unmount --
- *
- * This procedure is invoked to unmount a given ZIP archive.
- *
- * Results:
- * A standard Tcl result.
- *
- * Side effects:
- * A mounted ZIP archive file is unmounted, resources are free'd.
- *
- *-------------------------------------------------------------------------
- */
-
-int
-TclZipfs_Unmount(
- Tcl_Interp *interp, /* Current interpreter. NULLable. */
- const char *mountPoint) /* Mount point path. */
-{
- ZipFile *zf;
- ZipEntry *z, *znext;
- Tcl_HashEntry *hPtr;
- Tcl_DString dsm;
- int ret = TCL_OK, unmounted = 0;
-
- WriteLock();
- if (!ZipFS.initialized) {
- goto done;
- }
-
- /*
- * Mount point sometimes is a relative or otherwise denormalized path.
- * But an absolute name is needed as mount point here.
- */
-
- Tcl_DStringInit(&dsm);
- mountPoint = CanonicalPath("", mountPoint, &dsm, 1);
-
- hPtr = Tcl_FindHashEntry(&ZipFS.zipHash, mountPoint);
- /* don't report no-such-mount as an error */
- if (!hPtr) {
- goto done;
- }
-
- zf = Tcl_GetHashValue(hPtr);
- if (zf->numOpen > 0) {
- ZIPFS_ERROR(interp, "filesystem is busy");
- ret = TCL_ERROR;
- goto done;
- }
- Tcl_DeleteHashEntry(hPtr);
- for (z = zf->entries; z; z = znext) {
- znext = z->next;
- hPtr = Tcl_FindHashEntry(&ZipFS.fileHash, z->name);
- if (hPtr) {
- Tcl_DeleteHashEntry(hPtr);
- }
- if (z->data) {
- Tcl_Free(z->data);
- }
- Tcl_Free(z);
- }
- ZipFSCloseArchive(interp, zf);
- Tcl_Free(zf);
- unmounted = 1;
- done:
- Unlock();
- if (unmounted) {
- Tcl_FSMountsChanged(NULL);
- }
- return ret;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSMountObjCmd --
- *
- * This procedure is invoked to process the [zipfs mount] command.
- *
- * Results:
- * A standard Tcl result.
- *
- * Side effects:
- * A ZIP archive file is mounted, resources are allocated.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSMountObjCmd(
- void *clientData, /* Not used. */
- Tcl_Interp *interp, /* Current interpreter. */
- int objc, /* Number of arguments. */
- Tcl_Obj *const objv[]) /* Argument objects. */
-{
- if (objc > 4) {
- Tcl_WrongNumArgs(interp, 1, objv,
- "?mountpoint? ?zipfile? ?password?");
- return TCL_ERROR;
- }
-
- return TclZipfs_Mount(interp, (objc > 1) ? Tcl_GetString(objv[1]) : NULL,
- (objc > 2) ? Tcl_GetString(objv[2]) : NULL,
- (objc > 3) ? Tcl_GetString(objv[3]) : NULL);
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSMountBufferObjCmd --
- *
- * This procedure is invoked to process the [zipfs mount_data] command.
- *
- * Results:
- * A standard Tcl result.
- *
- * Side effects:
- * A ZIP archive file is mounted, resources are allocated.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSMountBufferObjCmd(
- void *clientData, /* Not used. */
- Tcl_Interp *interp, /* Current interpreter. */
- int objc, /* Number of arguments. */
- Tcl_Obj *const objv[]) /* Argument objects. */
-{
- const char *mountPoint; /* Mount point path. */
- unsigned char *data;
- size_t length;
-
- if (objc > 4) {
- Tcl_WrongNumArgs(interp, 1, objv, "?mountpoint? ?data?");
- return TCL_ERROR;
- }
- if (objc < 2) {
- int ret;
-
- ReadLock();
- ret = ListMountPoints(interp);
- Unlock();
- return ret;
- }
-
- mountPoint = Tcl_GetString(objv[1]);
- if (objc < 3) {
- ReadLock();
- DescribeMounted(interp, mountPoint);
- Unlock();
- return TCL_OK;
- }
-
- data = TclGetByteArrayFromObj(objv[2], &length);
- return TclZipfs_MountBuffer(interp, mountPoint, data, length, 1);
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSRootObjCmd --
- *
- * This procedure is invoked to process the [zipfs root] command. It
- * returns the root that all zipfs file systems are mounted under.
- *
- * Results:
- * A standard Tcl result.
- *
- * Side effects:
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSRootObjCmd(
- void *clientData, /* Not used. */
- Tcl_Interp *interp, /* Current interpreter. */
- int objc, /* Number of arguments. */
- Tcl_Obj *const objv[]) /* Argument objects. */
-{
- Tcl_SetObjResult(interp, Tcl_NewStringObj(ZIPFS_VOLUME, -1));
- return TCL_OK;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSUnmountObjCmd --
- *
- * This procedure is invoked to process the [zipfs unmount] command.
- *
- * Results:
- * A standard Tcl result.
- *
- * Side effects:
- * A mounted ZIP archive file is unmounted, resources are free'd.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSUnmountObjCmd(
- void *clientData, /* Not used. */
- Tcl_Interp *interp, /* Current interpreter. */
- int objc, /* Number of arguments. */
- Tcl_Obj *const objv[]) /* Argument objects. */
-{
- if (objc != 2) {
- Tcl_WrongNumArgs(interp, 1, objv, "zipfile");
- return TCL_ERROR;
- }
- return TclZipfs_Unmount(interp, Tcl_GetString(objv[1]));
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSMkKeyObjCmd --
- *
- * This procedure is invoked to process the [zipfs mkkey] command. It
- * produces a rotated password to be embedded into an image file.
- *
- * Results:
- * A standard Tcl result.
- *
- * Side effects:
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSMkKeyObjCmd(
- void *clientData, /* Not used. */
- Tcl_Interp *interp, /* Current interpreter. */
- int objc, /* Number of arguments. */
- Tcl_Obj *const objv[]) /* Argument objects. */
-{
- int len, i = 0;
- char *pw, passBuf[264];
-
- if (objc != 2) {
- Tcl_WrongNumArgs(interp, 1, objv, "password");
- return TCL_ERROR;
- }
- pw = Tcl_GetString(objv[1]);
- len = strlen(pw);
- if (len == 0) {
- return TCL_OK;
- }
- if ((len > 255) || strchr(pw, 0xff)) {
- Tcl_SetObjResult(interp, Tcl_NewStringObj("illegal password", -1));
- return TCL_ERROR;
- }
- while (len > 0) {
- int ch = pw[len - 1];
-
- passBuf[i] = (ch & 0x0f) | pwrot[(ch >> 4) & 0x0f];
- i++;
- len--;
- }
- passBuf[i] = i;
- ++i;
- passBuf[i++] = (char) ZIP_PASSWORD_END_SIG;
- passBuf[i++] = (char) (ZIP_PASSWORD_END_SIG >> 8);
- passBuf[i++] = (char) (ZIP_PASSWORD_END_SIG >> 16);
- passBuf[i++] = (char) (ZIP_PASSWORD_END_SIG >> 24);
- passBuf[i] = '\0';
- Tcl_AppendResult(interp, passBuf, (char *) NULL);
- return TCL_OK;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipAddFile --
- *
- * This procedure is used by ZipFSMkZipOrImgCmd() to add a single file to
- * the output ZIP archive file being written. A ZipEntry struct about the
- * input file is added to the given fileHash table for later creation of
- * the central ZIP directory.
- *
- * Results:
- * A standard Tcl result.
- *
- * Side effects:
- * Input file is read and (compressed and) written to the output ZIP
- * archive file.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipAddFile(
- Tcl_Interp *interp, /* Current interpreter. */
- const char *path,
- const char *name,
- Tcl_Channel out,
- const char *passwd, /* Password for encoding the file, or NULL if
- * the file is to be unprotected. */
- char *buf,
- int bufsize,
- Tcl_HashTable *fileHash)
-{
- Tcl_Channel in;
- Tcl_HashEntry *hPtr;
- ZipEntry *z;
- z_stream stream;
- const char *zpath;
- int crc, flush, zpathlen;
- size_t nbyte, nbytecompr, len, olen, align = 0;
- Tcl_WideInt pos[3];
- int mtime = 0, isNew, compMeth;
- unsigned long keys[3], keys0[3];
- char obuf[4096];
-
- /*
- * Trim leading '/' characters. If this results in an empty string, we've
- * nothing to do.
- */
-
- zpath = name;
- while (zpath && zpath[0] == '/') {
- zpath++;
- }
- if (!zpath || (zpath[0] == '\0')) {
- return TCL_OK;
- }
-
- zpathlen = strlen(zpath);
- if (zpathlen + ZIP_CENTRAL_HEADER_LEN > bufsize) {
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "path too long for \"%s\"", path));
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "PATH_LEN", NULL);
- return TCL_ERROR;
- }
- in = Tcl_OpenFileChannel(interp, path, "rb", 0);
- if (!in) {
-#ifdef _WIN32
- /* hopefully a directory */
- if (strcmp("permission denied", Tcl_PosixError(interp)) == 0) {
- Tcl_Close(interp, in);
- return TCL_OK;
- }
-#endif /* _WIN32 */
- Tcl_Close(interp, in);
- return TCL_ERROR;
- } else {
- Tcl_Obj *pathObj = Tcl_NewStringObj(path, -1);
- Tcl_StatBuf statBuf;
-
- Tcl_IncrRefCount(pathObj);
- if (Tcl_FSStat(pathObj, &statBuf) != -1) {
- mtime = statBuf.st_mtime;
- }
- Tcl_DecrRefCount(pathObj);
- }
- Tcl_ResetResult(interp);
- crc = 0;
- nbyte = nbytecompr = 0;
- while (1) {
- len = Tcl_Read(in, buf, bufsize);
- if (len == TCL_IO_FAILURE) {
- if (nbyte == 0 && errno == EISDIR) {
- Tcl_Close(interp, in);
- return TCL_OK;
- }
- Tcl_SetObjResult(interp, Tcl_ObjPrintf("read error on \"%s\": %s",
- path, Tcl_PosixError(interp)));
- Tcl_Close(interp, in);
- return TCL_ERROR;
- }
- if (len == 0) {
- break;
- }
- crc = crc32(crc, (unsigned char *) buf, len);
- nbyte += len;
- }
- if (Tcl_Seek(in, 0, SEEK_SET) == -1) {
- Tcl_SetObjResult(interp, Tcl_ObjPrintf("seek error on \"%s\": %s",
- path, Tcl_PosixError(interp)));
- Tcl_Close(interp, in);
- return TCL_ERROR;
- }
- pos[0] = Tcl_Tell(out);
- memset(buf, '\0', ZIP_LOCAL_HEADER_LEN);
- memcpy(buf + ZIP_LOCAL_HEADER_LEN, zpath, zpathlen);
- len = zpathlen + ZIP_LOCAL_HEADER_LEN;
- if (Tcl_Write(out, buf, len) != len) {
- wrerr:
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "write error on %s: %s", path, Tcl_PosixError(interp)));
- Tcl_Close(interp, in);
- return TCL_ERROR;
- }
- if ((len + pos[0]) & 3) {
- unsigned char abuf[8];
-
- /*
- * Align payload to next 4-byte boundary using a dummy extra entry
- * similar to the zipalign tool from Android's SDK.
- */
-
- align = 4 + ((len + pos[0]) & 3);
- ZipWriteShort(abuf, 0xffff);
- ZipWriteShort(abuf + 2, align - 4);
- ZipWriteInt(abuf + 4, 0x03020100);
- if (Tcl_Write(out, (const char *) abuf, align) != align) {
- goto wrerr;
- }
- }
- if (passwd) {
- int i, ch, tmp;
- unsigned char kvbuf[24];
- Tcl_Obj *ret;
-
- init_keys(passwd, keys, crc32tab);
- for (i = 0; i < 12 - 2; i++) {
- double r;
-
- if (Tcl_EvalEx(interp, "::tcl::mathfunc::rand", -1, 0) != TCL_OK) {
- Tcl_Obj *eiPtr = Tcl_ObjPrintf(
- "\n (evaluating PRNG step %d for password encoding)",
- i);
-
- Tcl_AppendObjToErrorInfo(interp, eiPtr);
- Tcl_Close(interp, in);
- return TCL_ERROR;
- }
- ret = Tcl_GetObjResult(interp);
- if (Tcl_GetDoubleFromObj(interp, ret, &r) != TCL_OK) {
- Tcl_Obj *eiPtr = Tcl_ObjPrintf(
- "\n (evaluating PRNG step %d for password encoding)",
- i);
-
- Tcl_AppendObjToErrorInfo(interp, eiPtr);
- Tcl_Close(interp, in);
- return TCL_ERROR;
- }
- ch = (int) (r * 256);
- kvbuf[i + 12] = (unsigned char) zencode(keys, crc32tab, ch, tmp);
- }
- Tcl_ResetResult(interp);
- init_keys(passwd, keys, crc32tab);
- for (i = 0; i < 12 - 2; i++) {
- kvbuf[i] = (unsigned char)
- zencode(keys, crc32tab, kvbuf[i + 12], tmp);
- }
- kvbuf[i++] = (unsigned char) zencode(keys, crc32tab, crc >> 16, tmp);
- kvbuf[i++] = (unsigned char) zencode(keys, crc32tab, crc >> 24, tmp);
- len = Tcl_Write(out, (char *) kvbuf, 12);
- memset(kvbuf, 0, 24);
- if (len != 12) {
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "write error on %s: %s", path, Tcl_PosixError(interp)));
- Tcl_Close(interp, in);
- return TCL_ERROR;
- }
- memcpy(keys0, keys, sizeof(keys0));
- nbytecompr += 12;
- }
- Tcl_Flush(out);
- pos[2] = Tcl_Tell(out);
- compMeth = ZIP_COMPMETH_DEFLATED;
- memset(&stream, 0, sizeof(z_stream));
- stream.zalloc = Z_NULL;
- stream.zfree = Z_NULL;
- stream.opaque = Z_NULL;
- if (deflateInit2(&stream, 9, Z_DEFLATED, -15, 8,
- Z_DEFAULT_STRATEGY) != Z_OK) {
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "compression init error on \"%s\"", path));
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "DEFLATE_INIT", NULL);
- Tcl_Close(interp, in);
- return TCL_ERROR;
- }
- do {
- len = Tcl_Read(in, buf, bufsize);
- if (len == TCL_IO_FAILURE) {
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "read error on %s: %s", path, Tcl_PosixError(interp)));
- deflateEnd(&stream);
- Tcl_Close(interp, in);
- return TCL_ERROR;
- }
- stream.avail_in = len;
- stream.next_in = (unsigned char *) buf;
- flush = Tcl_Eof(in) ? Z_FINISH : Z_NO_FLUSH;
- do {
- stream.avail_out = sizeof(obuf);
- stream.next_out = (unsigned char *) obuf;
- len = deflate(&stream, flush);
- if (len == (size_t) Z_STREAM_ERROR) {
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "deflate error on %s", path));
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "DEFLATE", NULL);
- deflateEnd(&stream);
- Tcl_Close(interp, in);
- return TCL_ERROR;
- }
- olen = sizeof(obuf) - stream.avail_out;
- if (passwd) {
- size_t i;
- int tmp;
-
- for (i = 0; i < olen; i++) {
- obuf[i] = (char) zencode(keys, crc32tab, obuf[i], tmp);
- }
- }
- if (olen && (Tcl_Write(out, obuf, olen) != olen)) {
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "write error: %s", Tcl_PosixError(interp)));
- deflateEnd(&stream);
- Tcl_Close(interp, in);
- return TCL_ERROR;
- }
- nbytecompr += olen;
- } while (stream.avail_out == 0);
- } while (flush != Z_FINISH);
- deflateEnd(&stream);
- Tcl_Flush(out);
- pos[1] = Tcl_Tell(out);
- if (nbyte - nbytecompr <= 0) {
- /*
- * Compressed file larger than input, write it again uncompressed.
- */
- if (Tcl_Seek(in, 0, SEEK_SET) != 0) {
- goto seekErr;
- }
- if (Tcl_Seek(out, pos[2], SEEK_SET) != pos[2]) {
- seekErr:
- Tcl_Close(interp, in);
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "seek error: %s", Tcl_PosixError(interp)));
- return TCL_ERROR;
- }
- nbytecompr = (passwd ? 12 : 0);
- while (1) {
- len = Tcl_Read(in, buf, bufsize);
- if (len == TCL_IO_FAILURE) {
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "read error on \"%s\": %s",
- path, Tcl_PosixError(interp)));
- Tcl_Close(interp, in);
- return TCL_ERROR;
- } else if (len == 0) {
- break;
- }
- if (passwd) {
- size_t i;
- int tmp;
-
- for (i = 0; i < len; i++) {
- buf[i] = (char) zencode(keys0, crc32tab, buf[i], tmp);
- }
- }
- if (Tcl_Write(out, buf, len) != len) {
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "write error: %s", Tcl_PosixError(interp)));
- Tcl_Close(interp, in);
- return TCL_ERROR;
- }
- nbytecompr += len;
- }
- compMeth = ZIP_COMPMETH_STORED;
- Tcl_Flush(out);
- pos[1] = Tcl_Tell(out);
- Tcl_TruncateChannel(out, pos[1]);
- }
- Tcl_Close(interp, in);
-
- hPtr = Tcl_CreateHashEntry(fileHash, zpath, &isNew);
- if (!isNew) {
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "non-unique path name \"%s\"", path));
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "DUPLICATE_PATH", NULL);
- return TCL_ERROR;
- }
-
- z = Tcl_Alloc(sizeof(ZipEntry));
- Tcl_SetHashValue(hPtr, z);
- z->name = NULL;
- z->tnext = NULL;
- z->depth = 0;
- z->zipFilePtr = NULL;
- z->isDirectory = 0;
- z->isEncrypted = (passwd ? 1 : 0);
- z->offset = pos[0];
- z->crc32 = crc;
- z->timestamp = mtime;
- z->numBytes = nbyte;
- z->numCompressedBytes = nbytecompr;
- z->compressMethod = compMeth;
- z->data = NULL;
- z->name = Tcl_GetHashKey(fileHash, hPtr);
- z->next = NULL;
-
- /*
- * Write final local header information.
- */
- ZipWriteInt(buf + ZIP_LOCAL_SIG_OFFS, ZIP_LOCAL_HEADER_SIG);
- ZipWriteShort(buf + ZIP_LOCAL_VERSION_OFFS, ZIP_MIN_VERSION);
- ZipWriteShort(buf + ZIP_LOCAL_FLAGS_OFFS, z->isEncrypted);
- ZipWriteShort(buf + ZIP_LOCAL_COMPMETH_OFFS, z->compressMethod);
- ZipWriteShort(buf + ZIP_LOCAL_MTIME_OFFS, ToDosTime(z->timestamp));
- ZipWriteShort(buf + ZIP_LOCAL_MDATE_OFFS, ToDosDate(z->timestamp));
- ZipWriteInt(buf + ZIP_LOCAL_CRC32_OFFS, z->crc32);
- ZipWriteInt(buf + ZIP_LOCAL_COMPLEN_OFFS, z->numCompressedBytes);
- ZipWriteInt(buf + ZIP_LOCAL_UNCOMPLEN_OFFS, z->numBytes);
- ZipWriteShort(buf + ZIP_LOCAL_PATHLEN_OFFS, zpathlen);
- ZipWriteShort(buf + ZIP_LOCAL_EXTRALEN_OFFS, align);
- if (Tcl_Seek(out, pos[0], SEEK_SET) != pos[0]) {
- Tcl_DeleteHashEntry(hPtr);
- Tcl_Free(z);
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "seek error: %s", Tcl_PosixError(interp)));
- return TCL_ERROR;
- }
- if (Tcl_Write(out, buf, ZIP_LOCAL_HEADER_LEN) != ZIP_LOCAL_HEADER_LEN) {
- Tcl_DeleteHashEntry(hPtr);
- Tcl_Free(z);
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "write error: %s", Tcl_PosixError(interp)));
- return TCL_ERROR;
- }
- Tcl_Flush(out);
- if (Tcl_Seek(out, pos[1], SEEK_SET) != pos[1]) {
- Tcl_DeleteHashEntry(hPtr);
- Tcl_Free(z);
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "seek error: %s", Tcl_PosixError(interp)));
- return TCL_ERROR;
- }
- return TCL_OK;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSMkZipOrImgObjCmd --
- *
- * This procedure is creates a new ZIP archive file or image file given
- * output filename, input directory of files to be archived, optional
- * password, and optional image to be prepended to the output ZIP archive
- * file.
- *
- * Results:
- * A standard Tcl result.
- *
- * Side effects:
- * A new ZIP archive file or image file is written.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSMkZipOrImgObjCmd(
- Tcl_Interp *interp, /* Current interpreter. */
- int isImg,
- int isList,
- int objc, /* Number of arguments. */
- Tcl_Obj *const objv[]) /* Argument objects. */
-{
- Tcl_Channel out;
- int pwlen = 0, count, ret = TCL_ERROR, lobjc;
- size_t len, slen = 0, i = 0;
- Tcl_WideInt pos[3];
- Tcl_Obj **lobjv, *list = NULL;
- ZipEntry *z;
- Tcl_HashEntry *hPtr;
- Tcl_HashSearch search;
- Tcl_HashTable fileHash;
- char *strip = NULL, *pw = NULL, passBuf[264], buf[4096];
-
- /*
- * Caller has verified that the number of arguments is correct.
- */
-
- passBuf[0] = 0;
- if (objc > (isList ? 3 : 4)) {
- pw = Tcl_GetString(objv[isList ? 3 : 4]);
- pwlen = strlen(pw);
- if ((pwlen > 255) || strchr(pw, 0xff)) {
- Tcl_SetObjResult(interp,
- Tcl_NewStringObj("illegal password", -1));
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "BAD_PASS", NULL);
- return TCL_ERROR;
- }
- }
- if (isList) {
- list = objv[2];
- Tcl_IncrRefCount(list);
- } else {
- Tcl_Obj *cmd[3];
-
- cmd[1] = Tcl_NewStringObj("::tcl::zipfs::find", -1);
- cmd[2] = objv[2];
- cmd[0] = Tcl_NewListObj(2, cmd + 1);
- Tcl_IncrRefCount(cmd[0]);
- if (Tcl_EvalObjEx(interp, cmd[0], TCL_EVAL_DIRECT) != TCL_OK) {
- Tcl_DecrRefCount(cmd[0]);
- return TCL_ERROR;
- }
- Tcl_DecrRefCount(cmd[0]);
- list = Tcl_GetObjResult(interp);
- Tcl_IncrRefCount(list);
- }
- if (Tcl_ListObjGetElements(interp, list, &lobjc, &lobjv) != TCL_OK) {
- Tcl_DecrRefCount(list);
- return TCL_ERROR;
- }
- if (isList && (lobjc % 2)) {
- Tcl_DecrRefCount(list);
- Tcl_SetObjResult(interp,
- Tcl_NewStringObj("need even number of elements", -1));
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "LIST_LENGTH", NULL);
- return TCL_ERROR;
- }
- if (lobjc == 0) {
- Tcl_DecrRefCount(list);
- Tcl_SetObjResult(interp, Tcl_NewStringObj("empty archive", -1));
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "EMPTY", NULL);
- return TCL_ERROR;
- }
- out = Tcl_OpenFileChannel(interp, Tcl_GetString(objv[1]), "wb", 0755);
- if (out == NULL) {
- Tcl_DecrRefCount(list);
- return TCL_ERROR;
- }
- if (pwlen <= 0) {
- pw = NULL;
- pwlen = 0;
- }
- if (isImg) {
- ZipFile *zf, zf0;
- int isMounted = 0;
- const char *imgName;
-
- if (isList) {
- imgName = (objc > 4) ? Tcl_GetString(objv[4]) :
- Tcl_GetNameOfExecutable();
- } else {
- imgName = (objc > 5) ? Tcl_GetString(objv[5]) :
- Tcl_GetNameOfExecutable();
- }
- if (pwlen) {
- i = 0;
- for (len = pwlen; len-- > 0;) {
- int ch = pw[len];
-
- passBuf[i] = (ch & 0x0f) | pwrot[(ch >> 4) & 0x0f];
- i++;
- }
- passBuf[i] = i;
- ++i;
- passBuf[i++] = (char) ZIP_PASSWORD_END_SIG;
- passBuf[i++] = (char) (ZIP_PASSWORD_END_SIG >> 8);
- passBuf[i++] = (char) (ZIP_PASSWORD_END_SIG >> 16);
- passBuf[i++] = (char) (ZIP_PASSWORD_END_SIG >> 24);
- passBuf[i] = '\0';
- }
-
- /*
- * Check for mounted image.
- */
-
- WriteLock();
- for (hPtr = Tcl_FirstHashEntry(&ZipFS.zipHash, &search); hPtr;
- hPtr = Tcl_NextHashEntry(&search)) {
- zf = Tcl_GetHashValue(hPtr);
- if (strcmp(zf->name, imgName) == 0) {
- isMounted = 1;
- zf->numOpen++;
- break;
- }
- }
- Unlock();
- if (!isMounted) {
- zf = &zf0;
- }
- if (isMounted || ZipFSOpenArchive(interp, imgName, 0, zf) == TCL_OK) {
- if (Tcl_Write(out, (char *) zf->data,
- zf->passOffset) != zf->passOffset) {
- memset(passBuf, 0, sizeof(passBuf));
- Tcl_DecrRefCount(list);
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "write error: %s", Tcl_PosixError(interp)));
- Tcl_Close(interp, out);
- if (zf == &zf0) {
- ZipFSCloseArchive(interp, zf);
- } else {
- WriteLock();
- zf->numOpen--;
- Unlock();
- }
- return TCL_ERROR;
- }
- if (zf == &zf0) {
- ZipFSCloseArchive(interp, zf);
- } else {
- WriteLock();
- zf->numOpen--;
- Unlock();
- }
- } else {
- size_t k;
- int m, n;
- Tcl_Channel in;
- const char *errMsg = "seek error";
-
- /*
- * Fall back to read it as plain file which hopefully is a static
- * tclsh or wish binary with proper zipfs infrastructure built in.
- */
-
- Tcl_ResetResult(interp);
- in = Tcl_OpenFileChannel(interp, imgName, "rb", 0644);
- if (!in) {
- memset(passBuf, 0, sizeof(passBuf));
- Tcl_DecrRefCount(list);
- Tcl_Close(interp, out);
- return TCL_ERROR;
- }
- i = Tcl_Seek(in, 0, SEEK_END);
- if (i == TCL_IO_FAILURE) {
- cperr:
- memset(passBuf, 0, sizeof(passBuf));
- Tcl_DecrRefCount(list);
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "%s: %s", errMsg, Tcl_PosixError(interp)));
- Tcl_Close(interp, out);
- Tcl_Close(interp, in);
- return TCL_ERROR;
- }
- Tcl_Seek(in, 0, SEEK_SET);
- for (k = 0; k < i; k += m) {
- m = i - k;
- if (m > (int) sizeof(buf)) {
- m = (int) sizeof(buf);
- }
- n = Tcl_Read(in, buf, m);
- if (n == -1) {
- errMsg = "read error";
- goto cperr;
- } else if (n == 0) {
- break;
- }
- m = Tcl_Write(out, buf, n);
- if (m != n) {
- errMsg = "write error";
- goto cperr;
- }
- }
- Tcl_Close(interp, in);
- }
- len = strlen(passBuf);
- if (len > 0) {
- i = Tcl_Write(out, passBuf, len);
- if (i != len) {
- Tcl_DecrRefCount(list);
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "write error: %s", Tcl_PosixError(interp)));
- Tcl_Close(interp, out);
- return TCL_ERROR;
- }
- }
- memset(passBuf, 0, sizeof(passBuf));
- Tcl_Flush(out);
- }
- Tcl_InitHashTable(&fileHash, TCL_STRING_KEYS);
- pos[0] = Tcl_Tell(out);
- if (!isList && (objc > 3)) {
- strip = Tcl_GetString(objv[3]);
- slen = strlen(strip);
- }
- for (i = 0; i < (size_t) lobjc; i += (isList ? 2 : 1)) {
- const char *path, *name;
-
- path = Tcl_GetString(lobjv[i]);
- if (isList) {
- name = Tcl_GetString(lobjv[i + 1]);
- } else {
- name = path;
- if (slen > 0) {
- len = strlen(name);
- if ((len <= slen) || (strncmp(strip, name, slen) != 0)) {
- continue;
- }
- name += slen;
- }
- }
- while (name[0] == '/') {
- ++name;
- }
- if (name[0] == '\0') {
- continue;
- }
- if (ZipAddFile(interp, path, name, out, pw, buf, sizeof(buf),
- &fileHash) != TCL_OK) {
- goto done;
- }
- }
- pos[1] = Tcl_Tell(out);
- count = 0;
- for (i = 0; i < (size_t) lobjc; i += (isList ? 2 : 1)) {
- const char *path, *name;
-
- path = Tcl_GetString(lobjv[i]);
- if (isList) {
- name = Tcl_GetString(lobjv[i + 1]);
- } else {
- name = path;
- if (slen > 0) {
- len = strlen(name);
- if ((len <= slen) || (strncmp(strip, name, slen) != 0)) {
- continue;
- }
- name += slen;
- }
- }
- while (name[0] == '/') {
- ++name;
- }
- if (name[0] == '\0') {
- continue;
- }
- hPtr = Tcl_FindHashEntry(&fileHash, name);
- if (!hPtr) {
- continue;
- }
- z = Tcl_GetHashValue(hPtr);
- len = strlen(z->name);
- ZipWriteInt(buf + ZIP_CENTRAL_SIG_OFFS, ZIP_CENTRAL_HEADER_SIG);
- ZipWriteShort(buf + ZIP_CENTRAL_VERSIONMADE_OFFS, ZIP_MIN_VERSION);
- ZipWriteShort(buf + ZIP_CENTRAL_VERSION_OFFS, ZIP_MIN_VERSION);
- ZipWriteShort(buf + ZIP_CENTRAL_FLAGS_OFFS, z->isEncrypted);
- ZipWriteShort(buf + ZIP_CENTRAL_COMPMETH_OFFS, z->compressMethod);
- ZipWriteShort(buf + ZIP_CENTRAL_MTIME_OFFS, ToDosTime(z->timestamp));
- ZipWriteShort(buf + ZIP_CENTRAL_MDATE_OFFS, ToDosDate(z->timestamp));
- ZipWriteInt(buf + ZIP_CENTRAL_CRC32_OFFS, z->crc32);
- ZipWriteInt(buf + ZIP_CENTRAL_COMPLEN_OFFS, z->numCompressedBytes);
- ZipWriteInt(buf + ZIP_CENTRAL_UNCOMPLEN_OFFS, z->numBytes);
- ZipWriteShort(buf + ZIP_CENTRAL_PATHLEN_OFFS, len);
- ZipWriteShort(buf + ZIP_CENTRAL_EXTRALEN_OFFS, 0);
- ZipWriteShort(buf + ZIP_CENTRAL_FCOMMENTLEN_OFFS, 0);
- ZipWriteShort(buf + ZIP_CENTRAL_DISKFILE_OFFS, 0);
- ZipWriteShort(buf + ZIP_CENTRAL_IATTR_OFFS, 0);
- ZipWriteInt(buf + ZIP_CENTRAL_EATTR_OFFS, 0);
- ZipWriteInt(buf + ZIP_CENTRAL_LOCALHDR_OFFS, z->offset - pos[0]);
- if ((Tcl_Write(out, buf,
- ZIP_CENTRAL_HEADER_LEN) != ZIP_CENTRAL_HEADER_LEN)
- || (Tcl_Write(out, z->name, len) != len)) {
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "write error: %s", Tcl_PosixError(interp)));
- goto done;
- }
- count++;
- }
- Tcl_Flush(out);
- pos[2] = Tcl_Tell(out);
- ZipWriteInt(buf + ZIP_CENTRAL_END_SIG_OFFS, ZIP_CENTRAL_END_SIG);
- ZipWriteShort(buf + ZIP_CENTRAL_DISKNO_OFFS, 0);
- ZipWriteShort(buf + ZIP_CENTRAL_DISKDIR_OFFS, 0);
- ZipWriteShort(buf + ZIP_CENTRAL_ENTS_OFFS, count);
- ZipWriteShort(buf + ZIP_CENTRAL_TOTALENTS_OFFS, count);
- ZipWriteInt(buf + ZIP_CENTRAL_DIRSIZE_OFFS, pos[2] - pos[1]);
- ZipWriteInt(buf + ZIP_CENTRAL_DIRSTART_OFFS, pos[1] - pos[0]);
- ZipWriteShort(buf + ZIP_CENTRAL_COMMENTLEN_OFFS, 0);
- if (Tcl_Write(out, buf, ZIP_CENTRAL_END_LEN) != ZIP_CENTRAL_END_LEN) {
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "write error: %s", Tcl_PosixError(interp)));
- goto done;
- }
- Tcl_Flush(out);
- ret = TCL_OK;
-
- done:
- if (ret == TCL_OK) {
- ret = Tcl_Close(interp, out);
- } else {
- Tcl_Close(interp, out);
- }
- Tcl_DecrRefCount(list);
- for (hPtr = Tcl_FirstHashEntry(&fileHash, &search); hPtr;
- hPtr = Tcl_NextHashEntry(&search)) {
- z = Tcl_GetHashValue(hPtr);
- Tcl_Free(z);
- Tcl_DeleteHashEntry(hPtr);
- }
- Tcl_DeleteHashTable(&fileHash);
- return ret;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSMkZipObjCmd, ZipFSLMkZipObjCmd --
- *
- * These procedures are invoked to process the [zipfs mkzip] and [zipfs
- * lmkzip] commands. See description of ZipFSMkZipOrImgCmd().
- *
- * Results:
- * A standard Tcl result.
- *
- * Side effects:
- * See description of ZipFSMkZipOrImgCmd().
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSMkZipObjCmd(
- void *clientData, /* Not used. */
- Tcl_Interp *interp, /* Current interpreter. */
- int objc, /* Number of arguments. */
- Tcl_Obj *const objv[]) /* Argument objects. */
-{
- if (objc < 3 || objc > 5) {
- Tcl_WrongNumArgs(interp, 1, objv, "outfile indir ?strip? ?password?");
- return TCL_ERROR;
- }
- if (Tcl_IsSafe(interp)) {
- Tcl_SetObjResult(interp, Tcl_NewStringObj(
- "operation not permitted in a safe interpreter", -1));
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "SAFE_INTERP", NULL);
- return TCL_ERROR;
- }
- return ZipFSMkZipOrImgObjCmd(interp, 0, 0, objc, objv);
-}
-
-static int
-ZipFSLMkZipObjCmd(
- void *clientData, /* Not used. */
- Tcl_Interp *interp, /* Current interpreter. */
- int objc, /* Number of arguments. */
- Tcl_Obj *const objv[]) /* Argument objects. */
-{
- if (objc < 3 || objc > 4) {
- Tcl_WrongNumArgs(interp, 1, objv, "outfile inlist ?password?");
- return TCL_ERROR;
- }
- if (Tcl_IsSafe(interp)) {
- Tcl_SetObjResult(interp, Tcl_NewStringObj(
- "operation not permitted in a safe interpreter", -1));
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "SAFE_INTERP", NULL);
- return TCL_ERROR;
- }
- return ZipFSMkZipOrImgObjCmd(interp, 0, 1, objc, objv);
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSMkImgObjCmd, ZipFSLMkImgObjCmd --
- *
- * These procedures are invoked to process the [zipfs mkimg] and [zipfs
- * lmkimg] commands. See description of ZipFSMkZipOrImgCmd().
- *
- * Results:
- * A standard Tcl result.
- *
- * Side effects:
- * See description of ZipFSMkZipOrImgCmd().
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSMkImgObjCmd(
- void *clientData, /* Not used. */
- Tcl_Interp *interp, /* Current interpreter. */
- int objc, /* Number of arguments. */
- Tcl_Obj *const objv[]) /* Argument objects. */
-{
- if (objc < 3 || objc > 6) {
- Tcl_WrongNumArgs(interp, 1, objv,
- "outfile indir ?strip? ?password? ?infile?");
- return TCL_ERROR;
- }
- if (Tcl_IsSafe(interp)) {
- Tcl_SetObjResult(interp, Tcl_NewStringObj(
- "operation not permitted in a safe interpreter", -1));
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "SAFE_INTERP", NULL);
- return TCL_ERROR;
- }
- return ZipFSMkZipOrImgObjCmd(interp, 1, 0, objc, objv);
-}
-
-static int
-ZipFSLMkImgObjCmd(
- void *clientData, /* Not used. */
- Tcl_Interp *interp, /* Current interpreter. */
- int objc, /* Number of arguments. */
- Tcl_Obj *const objv[]) /* Argument objects. */
-{
- if (objc < 3 || objc > 5) {
- Tcl_WrongNumArgs(interp, 1, objv, "outfile inlist ?password infile?");
- return TCL_ERROR;
- }
- if (Tcl_IsSafe(interp)) {
- Tcl_SetObjResult(interp, Tcl_NewStringObj(
- "operation not permitted in a safe interpreter", -1));
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "SAFE_INTERP", NULL);
- return TCL_ERROR;
- }
- return ZipFSMkZipOrImgObjCmd(interp, 1, 1, objc, objv);
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSCanonicalObjCmd --
- *
- * This procedure is invoked to process the [zipfs canonical] command.
- * It returns the canonical name for a file within zipfs
- *
- * Results:
- * Always TCL_OK provided the right number of arguments are supplied.
- *
- * Side effects:
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSCanonicalObjCmd(
- void *clientData, /* Not used. */
- Tcl_Interp *interp, /* Current interpreter. */
- int objc, /* Number of arguments. */
- Tcl_Obj *const objv[]) /* Argument objects. */
-{
- char *mntpoint = NULL;
- char *filename = NULL;
- char *result;
- Tcl_DString dPath;
-
- if (objc < 2 || objc > 4) {
- Tcl_WrongNumArgs(interp, 1, objv, "?mountpoint? filename ?inZipfs?");
- return TCL_ERROR;
- }
- Tcl_DStringInit(&dPath);
- if (objc == 2) {
- filename = Tcl_GetString(objv[1]);
- result = CanonicalPath("", filename, &dPath, 1);
- } else if (objc == 3) {
- mntpoint = Tcl_GetString(objv[1]);
- filename = Tcl_GetString(objv[2]);
- result = CanonicalPath(mntpoint, filename, &dPath, 1);
- } else {
- int zipfs = 0;
-
- if (Tcl_GetBooleanFromObj(interp, objv[3], &zipfs)) {
- return TCL_ERROR;
- }
- mntpoint = Tcl_GetString(objv[1]);
- filename = Tcl_GetString(objv[2]);
- result = CanonicalPath(mntpoint, filename, &dPath, zipfs);
- }
- Tcl_SetObjResult(interp, Tcl_NewStringObj(result, -1));
- return TCL_OK;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSExistsObjCmd --
- *
- * This procedure is invoked to process the [zipfs exists] command. It
- * tests for the existence of a file in the ZIP filesystem and places a
- * boolean into the interp's result.
- *
- * Results:
- * Always TCL_OK provided the right number of arguments are supplied.
- *
- * Side effects:
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSExistsObjCmd(
- void *clientData, /* Not used. */
- Tcl_Interp *interp, /* Current interpreter. */
- int objc, /* Number of arguments. */
- Tcl_Obj *const objv[]) /* Argument objects. */
-{
- char *filename;
- int exists;
- Tcl_DString ds;
-
- if (objc != 2) {
- Tcl_WrongNumArgs(interp, 1, objv, "filename");
- return TCL_ERROR;
- }
-
- /*
- * Prepend ZIPFS_VOLUME to filename, eliding the final /
- */
-
- filename = Tcl_GetString(objv[1]);
- Tcl_DStringInit(&ds);
- Tcl_DStringAppend(&ds, ZIPFS_VOLUME, ZIPFS_VOLUME_LEN - 1);
- Tcl_DStringAppend(&ds, filename, -1);
- filename = Tcl_DStringValue(&ds);
-
- ReadLock();
- exists = ZipFSLookup(filename) != NULL;
- Unlock();
-
- Tcl_SetObjResult(interp, Tcl_NewBooleanObj(exists));
- return TCL_OK;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSInfoObjCmd --
- *
- * This procedure is invoked to process the [zipfs info] command. On
- * success, it returns a Tcl list made up of name of ZIP archive file,
- * size uncompressed, size compressed, and archive offset of a file in
- * the ZIP filesystem.
- *
- * Results:
- * A standard Tcl result.
- *
- * Side effects:
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSInfoObjCmd(
- void *clientData, /* Not used. */
- Tcl_Interp *interp, /* Current interpreter. */
- int objc, /* Number of arguments. */
- Tcl_Obj *const objv[]) /* Argument objects. */
-{
- char *filename;
- ZipEntry *z;
-
- if (objc != 2) {
- Tcl_WrongNumArgs(interp, 1, objv, "filename");
- return TCL_ERROR;
- }
- filename = Tcl_GetString(objv[1]);
- ReadLock();
- z = ZipFSLookup(filename);
- if (z) {
- Tcl_Obj *result = Tcl_GetObjResult(interp);
-
- Tcl_ListObjAppendElement(interp, result,
- Tcl_NewStringObj(z->zipFilePtr->name, -1));
- Tcl_ListObjAppendElement(interp, result,
- Tcl_NewWideIntObj(z->numBytes));
- Tcl_ListObjAppendElement(interp, result,
- Tcl_NewWideIntObj(z->numCompressedBytes));
- Tcl_ListObjAppendElement(interp, result, Tcl_NewWideIntObj(z->offset));
- }
- Unlock();
- return TCL_OK;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSListObjCmd --
- *
- * This procedure is invoked to process the [zipfs list] command. On
- * success, it returns a Tcl list of files of the ZIP filesystem which
- * match a search pattern (glob or regexp).
- *
- * Results:
- * A standard Tcl result.
- *
- * Side effects:
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSListObjCmd(
- void *clientData, /* Not used. */
- Tcl_Interp *interp, /* Current interpreter. */
- int objc, /* Number of arguments. */
- Tcl_Obj *const objv[]) /* Argument objects. */
-{
- char *pattern = NULL;
- Tcl_RegExp regexp = NULL;
- Tcl_HashEntry *hPtr;
- Tcl_HashSearch search;
- Tcl_Obj *result = Tcl_GetObjResult(interp);
-
- if (objc > 3) {
- Tcl_WrongNumArgs(interp, 1, objv, "?(-glob|-regexp)? ?pattern?");
- return TCL_ERROR;
- }
- if (objc == 3) {
- int n;
- char *what = Tcl_GetStringFromObj(objv[1], &n);
-
- if ((n >= 2) && (strncmp(what, "-glob", n) == 0)) {
- pattern = Tcl_GetString(objv[2]);
- } else if ((n >= 2) && (strncmp(what, "-regexp", n) == 0)) {
- regexp = Tcl_RegExpCompile(interp, Tcl_GetString(objv[2]));
- if (!regexp) {
- return TCL_ERROR;
- }
- } else {
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "unknown option \"%s\"", what));
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "BAD_OPT", NULL);
- return TCL_ERROR;
- }
- } else if (objc == 2) {
- pattern = Tcl_GetString(objv[1]);
- }
- ReadLock();
- if (pattern) {
- for (hPtr = Tcl_FirstHashEntry(&ZipFS.fileHash, &search);
- hPtr != NULL; hPtr = Tcl_NextHashEntry(&search)) {
- ZipEntry *z = Tcl_GetHashValue(hPtr);
-
- if (Tcl_StringMatch(z->name, pattern)) {
- Tcl_ListObjAppendElement(interp, result,
- Tcl_NewStringObj(z->name, -1));
- }
- }
- } else if (regexp) {
- for (hPtr = Tcl_FirstHashEntry(&ZipFS.fileHash, &search);
- hPtr; hPtr = Tcl_NextHashEntry(&search)) {
- ZipEntry *z = Tcl_GetHashValue(hPtr);
-
- if (Tcl_RegExpExec(interp, regexp, z->name, z->name)) {
- Tcl_ListObjAppendElement(interp, result,
- Tcl_NewStringObj(z->name, -1));
- }
- }
- } else {
- for (hPtr = Tcl_FirstHashEntry(&ZipFS.fileHash, &search);
- hPtr; hPtr = Tcl_NextHashEntry(&search)) {
- ZipEntry *z = Tcl_GetHashValue(hPtr);
-
- Tcl_ListObjAppendElement(interp, result,
- Tcl_NewStringObj(z->name, -1));
- }
- }
- Unlock();
- return TCL_OK;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * TclZipfs_TclLibrary --
- *
- * This procedure gets (and possibly finds) the root that Tcl's library
- * files are mounted under.
- *
- * Results:
- * A Tcl object holding the location (with zero refcount), or NULL if no
- * Tcl library can be found.
- *
- * Side effects:
- * May initialise the cache of where such library files are to be found.
- * This cache is never cleared.
- *
- *-------------------------------------------------------------------------
- */
-
-#ifdef _WIN32
-#define LIBRARY_SIZE 64
-
-static inline int
-WCharToUtf(
- const WCHAR *wSrc,
- char *dst)
-{
- char *start = dst;
-
- while (*wSrc != '\0') {
- dst += Tcl_UniCharToUtf(*wSrc, dst);
- wSrc++;
- }
- *dst = '\0';
- return (int) (dst - start);
-}
-#endif /* _WIN32 */
-
-Tcl_Obj *
-TclZipfs_TclLibrary(void)
-{
- Tcl_Obj *vfsInitScript;
- int found;
-#ifdef _WIN32
- HMODULE hModule;
- WCHAR wName[MAX_PATH + LIBRARY_SIZE];
- char dllName[(MAX_PATH + LIBRARY_SIZE) * TCL_UTF_MAX];
-#endif /* _WIN32 */
-
- /*
- * Use the cached value if that has been set; we don't want to repeat the
- * searching and mounting.
- */
-
- if (zipfs_literal_tcl_library) {
- return Tcl_NewStringObj(zipfs_literal_tcl_library, -1);
- }
-
- /*
- * Look for the library file system within the executable.
- */
-
- vfsInitScript = Tcl_NewStringObj(ZIPFS_APP_MOUNT "/tcl_library/init.tcl",
- -1);
- Tcl_IncrRefCount(vfsInitScript);
- found = Tcl_FSAccess(vfsInitScript, F_OK);
- Tcl_DecrRefCount(vfsInitScript);
- if (found == TCL_OK) {
- zipfs_literal_tcl_library = ZIPFS_APP_MOUNT "/tcl_library";
- return Tcl_NewStringObj(zipfs_literal_tcl_library, -1);
- }
-
- /*
- * Look for the library file system within the DLL/shared library. Note
- * that we must mount the zip file and dll before releasing to search.
- */
-
-#if defined(_WIN32)
- hModule = TclWinGetTclInstance();
- if (GetModuleFileNameW(hModule, wName, MAX_PATH) == 0) {
- GetModuleFileNameA(hModule, dllName, MAX_PATH);
- } else {
- WCharToUtf(wName, dllName);
- }
-
- if (ZipfsAppHookFindTclInit(dllName) == TCL_OK) {
- return Tcl_NewStringObj(zipfs_literal_tcl_library, -1);
- }
-#elif /* !_WIN32 && */ defined(CFG_RUNTIME_DLLFILE)
- if (ZipfsAppHookFindTclInit(
- CFG_RUNTIME_LIBDIR "/" CFG_RUNTIME_DLLFILE) == TCL_OK) {
- return Tcl_NewStringObj(zipfs_literal_tcl_library, -1);
- }
-#endif /* _WIN32 || CFG_RUNTIME_DLLFILE */
-
- /*
- * If we're configured to know about a ZIP archive we should use, do that.
- */
-
-#ifdef CFG_RUNTIME_ZIPFILE
- if (ZipfsAppHookFindTclInit(
- CFG_RUNTIME_LIBDIR "/" CFG_RUNTIME_ZIPFILE) == TCL_OK) {
- return Tcl_NewStringObj(zipfs_literal_tcl_library, -1);
- }
- if (ZipfsAppHookFindTclInit(
- CFG_RUNTIME_SCRDIR "/" CFG_RUNTIME_ZIPFILE) == TCL_OK) {
- return Tcl_NewStringObj(zipfs_literal_tcl_library, -1);
- }
- if (ZipfsAppHookFindTclInit(CFG_RUNTIME_ZIPFILE) == TCL_OK) {
- return Tcl_NewStringObj(zipfs_literal_tcl_library, -1);
- }
-#endif /* CFG_RUNTIME_ZIPFILE */
-
- /*
- * If anything set the cache (but subsequently failed) go with that
- * anyway.
- */
-
- if (zipfs_literal_tcl_library) {
- return Tcl_NewStringObj(zipfs_literal_tcl_library, -1);
- }
- return NULL;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSTclLibraryObjCmd --
- *
- * This procedure is invoked to process the
- * [::tcl::zipfs::tcl_library_init] command, usually called during the
- * execution of Tcl's interpreter startup. It returns the root that Tcl's
- * library files are mounted under.
- *
- * Results:
- * A standard Tcl result.
- *
- * Side effects:
- * May initialise the cache of where such library files are to be found.
- * This cache is never cleared.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSTclLibraryObjCmd(
- void *clientData, /* Not used. */
- Tcl_Interp *interp, /* Current interpreter. */
- int objc, /* Number of arguments. */
- Tcl_Obj *const objv[]) /* Argument objects. */
-{
- if (!Tcl_IsSafe(interp)) {
- Tcl_Obj *pResult = TclZipfs_TclLibrary();
-
- if (!pResult) {
- pResult = Tcl_NewObj();
- }
- Tcl_SetObjResult(interp, pResult);
- }
- return TCL_OK;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipChannelClose --
- *
- * This function is called to close a channel.
- *
- * Results:
- * Always TCL_OK.
- *
- * Side effects:
- * Resources are free'd.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipChannelClose(
- void *instanceData,
- Tcl_Interp *interp) /* Current interpreter. */
-{
- ZipChannel *info = instanceData;
-
- if (info->iscompr && info->ubuf) {
- Tcl_Free(info->ubuf);
- info->ubuf = NULL;
- }
- if (info->isEncrypted) {
- info->isEncrypted = 0;
- memset(info->keys, 0, sizeof(info->keys));
- }
- if (info->isWriting) {
- ZipEntry *z = info->zipEntryPtr;
- unsigned char *newdata = Tcl_AttemptRealloc(info->ubuf, info->numRead);
-
- if (newdata) {
- if (z->data) {
- Tcl_Free(z->data);
- }
- z->data = newdata;
- z->numBytes = z->numCompressedBytes = info->numBytes;
- z->compressMethod = ZIP_COMPMETH_STORED;
- z->timestamp = time(NULL);
- z->isDirectory = 0;
- z->isEncrypted = 0;
- z->offset = 0;
- z->crc32 = 0;
- } else {
- Tcl_Free(info->ubuf);
- }
- }
- WriteLock();
- info->zipFilePtr->numOpen--;
- Unlock();
- Tcl_Free(info);
- return TCL_OK;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipChannelRead --
- *
- * This function is called to read data from channel.
- *
- * Results:
- * Number of bytes read or -1 on error with error number set.
- *
- * Side effects:
- * Data is read and file pointer is advanced.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipChannelRead(
- void *instanceData,
- char *buf,
- int toRead,
- int *errloc)
-{
- ZipChannel *info = (ZipChannel *) instanceData;
- unsigned long nextpos;
-
- if (info->isDirectory < 0) {
- /*
- * Special case: when executable combined with ZIP archive file read
- * data in front of ZIP, i.e. the executable itself.
- */
-
- nextpos = info->numRead + toRead;
- if (nextpos > info->zipFilePtr->baseOffset) {
- toRead = info->zipFilePtr->baseOffset - info->numRead;
- nextpos = info->zipFilePtr->baseOffset;
- }
- if (toRead == 0) {
- return 0;
- }
- memcpy(buf, info->zipFilePtr->data, toRead);
- info->numRead = nextpos;
- *errloc = 0;
- return toRead;
- }
- if (info->isDirectory) {
- *errloc = EISDIR;
- return -1;
- }
- nextpos = info->numRead + toRead;
- if (nextpos > info->numBytes) {
- toRead = info->numBytes - info->numRead;
- nextpos = info->numBytes;
- }
- if (toRead == 0) {
- return 0;
- }
- if (info->isEncrypted) {
- int i;
-
- for (i = 0; i < toRead; i++) {
- int ch = info->ubuf[i + info->numRead];
-
- buf[i] = zdecode(info->keys, crc32tab, ch);
- }
- } else {
- memcpy(buf, info->ubuf + info->numRead, toRead);
- }
- info->numRead = nextpos;
- *errloc = 0;
- return toRead;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipChannelWrite --
- *
- * This function is called to write data into channel.
- *
- * Results:
- * Number of bytes written or -1 on error with error number set.
- *
- * Side effects:
- * Data is written and file pointer is advanced.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipChannelWrite(
- void *instanceData,
- const char *buf,
- int toWrite,
- int *errloc)
-{
- ZipChannel *info = (ZipChannel *) instanceData;
- unsigned long nextpos;
-
- if (!info->isWriting) {
- *errloc = EINVAL;
- return -1;
- }
- nextpos = info->numRead + toWrite;
- if (nextpos > info->maxWrite) {
- toWrite = info->maxWrite - info->numRead;
- nextpos = info->maxWrite;
- }
- if (toWrite == 0) {
- return 0;
- }
- memcpy(info->ubuf + info->numRead, buf, toWrite);
- info->numRead = nextpos;
- if (info->numRead > info->numBytes) {
- info->numBytes = info->numRead;
- }
- *errloc = 0;
- return toWrite;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipChannelSeek --
- *
- * This function is called to position file pointer of channel.
- *
- * Results:
- * New file position or -1 on error with error number set.
- *
- * Side effects:
- * File pointer is repositioned according to offset and mode.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipChannelSeek(
- void *instanceData,
- long offset,
- int mode,
- int *errloc)
-{
- ZipChannel *info = (ZipChannel *) instanceData;
- unsigned long end;
-
- if (!info->isWriting && (info->isDirectory < 0)) {
- /*
- * Special case: when executable combined with ZIP archive file, seek
- * within front of ZIP, i.e. the executable itself.
- */
- end = info->zipFilePtr->baseOffset;
- } else if (info->isDirectory) {
- *errloc = EINVAL;
- return -1;
- } else {
- end = info->numBytes;
- }
- switch (mode) {
- case SEEK_CUR:
- offset += info->numRead;
- break;
- case SEEK_END:
- offset += end;
- break;
- case SEEK_SET:
- break;
- default:
- *errloc = EINVAL;
- return -1;
- }
- if (offset < 0) {
- *errloc = EINVAL;
- return -1;
- }
- if (info->isWriting) {
- if ((unsigned long) offset > info->maxWrite) {
- *errloc = EINVAL;
- return -1;
- }
- if ((unsigned long) offset > info->numBytes) {
- info->numBytes = offset;
- }
- } else if ((unsigned long) offset > end) {
- *errloc = EINVAL;
- return -1;
- }
- info->numRead = (unsigned long) offset;
- return info->numRead;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipChannelWatchChannel --
- *
- * This function is called for event notifications on channel. Does
- * nothing.
- *
- * Results:
- * None.
- *
- * Side effects:
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-ZipChannelWatchChannel(
- void *instanceData,
- int mask)
-{
- return;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipChannelGetFile --
- *
- * This function is called to retrieve OS handle for channel.
- *
- * Results:
- * Always TCL_ERROR since there's never an OS handle for a file within a
- * ZIP archive.
- *
- * Side effects:
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipChannelGetFile(
- void *instanceData,
- int direction,
- void **handlePtr)
-{
- return TCL_ERROR;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipChannelOpen --
- *
- * This function opens a Tcl_Channel on a file from a mounted ZIP archive
- * according to given open mode.
- *
- * Results:
- * Tcl_Channel on success, or NULL on error.
- *
- * Side effects:
- * Memory is allocated, the file from the ZIP archive is uncompressed.
- *
- *-------------------------------------------------------------------------
- */
-
-static Tcl_Channel
-ZipChannelOpen(
- Tcl_Interp *interp, /* Current interpreter. */
- char *filename,
- int mode,
- int permissions)
-{
- ZipEntry *z;
- ZipChannel *info;
- int i, ch, trunc, wr, flags = 0;
- char cname[128];
-
- if ((mode & O_APPEND)
- || ((ZipFS.wrmax <= 0) && (mode & (O_WRONLY | O_RDWR)))) {
- if (interp) {
- Tcl_SetObjResult(interp,
- Tcl_NewStringObj("unsupported open mode", -1));
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "BAD_MODE", NULL);
- }
- return NULL;
- }
- WriteLock();
- z = ZipFSLookup(filename);
- if (!z) {
- Tcl_SetErrno(ENOENT);
- if (interp) {
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "file not found \"%s\": %s", filename,
- Tcl_PosixError(interp)));
- }
- goto error;
- }
- trunc = (mode & O_TRUNC) != 0;
- wr = (mode & (O_WRONLY | O_RDWR)) != 0;
- if ((z->compressMethod != ZIP_COMPMETH_STORED)
- && (z->compressMethod != ZIP_COMPMETH_DEFLATED)) {
- ZIPFS_ERROR(interp, "unsupported compression method");
- if (interp) {
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "COMP_METHOD", NULL);
- }
- goto error;
- }
- if (wr && z->isDirectory) {
- ZIPFS_ERROR(interp, "unsupported file type");
- if (interp) {
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "FILE_TYPE", NULL);
- }
- goto error;
- }
- if (!trunc) {
- flags |= TCL_READABLE;
- if (z->isEncrypted && (z->zipFilePtr->passBuf[0] == 0)) {
- ZIPFS_ERROR(interp, "decryption failed");
- if (interp) {
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "DECRYPT", NULL);
- }
- goto error;
- } else if (wr && !z->data && (z->numBytes > ZipFS.wrmax)) {
- ZIPFS_ERROR(interp, "file too large");
- if (interp) {
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "FILE_SIZE", NULL);
- }
- goto error;
- }
- } else {
- flags = TCL_WRITABLE;
- }
- info = Tcl_AttemptAlloc(sizeof(ZipChannel));
- if (!info) {
- ZIPFS_ERROR(interp, "out of memory");
- if (interp) {
- Tcl_SetErrorCode(interp, "TCL", "MALLOC", NULL);
- }
- goto error;
- }
- info->zipFilePtr = z->zipFilePtr;
- info->zipEntryPtr = z;
- info->numRead = 0;
- if (wr) {
- flags |= TCL_WRITABLE;
- info->isWriting = 1;
- info->isDirectory = 0;
- info->maxWrite = ZipFS.wrmax;
- info->iscompr = 0;
- info->isEncrypted = 0;
- info->ubuf = Tcl_AttemptAlloc(info->maxWrite);
- if (!info->ubuf) {
- merror0:
- if (info->ubuf) {
- Tcl_Free(info->ubuf);
- }
- Tcl_Free(info);
- ZIPFS_ERROR(interp, "out of memory");
- if (interp) {
- Tcl_SetErrorCode(interp, "TCL", "MALLOC", NULL);
- }
- goto error;
- }
- memset(info->ubuf, 0, info->maxWrite);
- if (trunc) {
- info->numBytes = 0;
- } else if (z->data) {
- unsigned int j = z->numBytes;
-
- if (j > info->maxWrite) {
- j = info->maxWrite;
- }
- memcpy(info->ubuf, z->data, j);
- info->numBytes = j;
- } else {
- unsigned char *zbuf = z->zipFilePtr->data + z->offset;
-
- if (z->isEncrypted) {
- int len = z->zipFilePtr->passBuf[0] & 0xFF;
- char passBuf[260];
-
- for (i = 0; i < len; i++) {
- ch = z->zipFilePtr->passBuf[len - i];
- passBuf[i] = (ch & 0x0f) | pwrot[(ch >> 4) & 0x0f];
- }
- passBuf[i] = '\0';
- init_keys(passBuf, info->keys, crc32tab);
- memset(passBuf, 0, sizeof(passBuf));
- for (i = 0; i < 12; i++) {
- ch = info->ubuf[i];
- zdecode(info->keys, crc32tab, ch);
- }
- zbuf += i;
- }
- if (z->compressMethod == ZIP_COMPMETH_DEFLATED) {
- z_stream stream;
- int err;
- unsigned char *cbuf = NULL;
-
- memset(&stream, 0, sizeof(z_stream));
- stream.zalloc = Z_NULL;
- stream.zfree = Z_NULL;
- stream.opaque = Z_NULL;
- stream.avail_in = z->numCompressedBytes;
- if (z->isEncrypted) {
- unsigned int j;
-
- stream.avail_in -= 12;
- cbuf = Tcl_AttemptAlloc(stream.avail_in);
- if (!cbuf) {
- goto merror0;
- }
- for (j = 0; j < stream.avail_in; j++) {
- ch = info->ubuf[j];
- cbuf[j] = zdecode(info->keys, crc32tab, ch);
- }
- stream.next_in = cbuf;
- } else {
- stream.next_in = zbuf;
- }
- stream.next_out = info->ubuf;
- stream.avail_out = info->maxWrite;
- if (inflateInit2(&stream, -15) != Z_OK) {
- goto cerror0;
- }
- err = inflate(&stream, Z_SYNC_FLUSH);
- inflateEnd(&stream);
- if ((err == Z_STREAM_END)
- || ((err == Z_OK) && (stream.avail_in == 0))) {
- if (cbuf) {
- memset(info->keys, 0, sizeof(info->keys));
- Tcl_Free(cbuf);
- }
- goto wrapchan;
- }
- cerror0:
- if (cbuf) {
- memset(info->keys, 0, sizeof(info->keys));
- Tcl_Free(cbuf);
- }
- if (info->ubuf) {
- Tcl_Free(info->ubuf);
- }
- Tcl_Free(info);
- ZIPFS_ERROR(interp, "decompression error");
- if (interp) {
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "CORRUPT", NULL);
- }
- goto error;
- } else if (z->isEncrypted) {
- for (i = 0; i < z->numBytes - 12; i++) {
- ch = zbuf[i];
- info->ubuf[i] = zdecode(info->keys, crc32tab, ch);
- }
- } else {
- memcpy(info->ubuf, zbuf, z->numBytes);
- }
- memset(info->keys, 0, sizeof(info->keys));
- goto wrapchan;
- }
- } else if (z->data) {
- flags |= TCL_READABLE;
- info->isWriting = 0;
- info->iscompr = 0;
- info->isDirectory = 0;
- info->isEncrypted = 0;
- info->numBytes = z->numBytes;
- info->maxWrite = 0;
- info->ubuf = z->data;
- } else {
- flags |= TCL_READABLE;
- info->isWriting = 0;
- info->iscompr = (z->compressMethod == ZIP_COMPMETH_DEFLATED);
- info->ubuf = z->zipFilePtr->data + z->offset;
- info->isDirectory = z->isDirectory;
- info->isEncrypted = z->isEncrypted;
- info->numBytes = z->numBytes;
- info->maxWrite = 0;
- if (info->isEncrypted) {
- int len = z->zipFilePtr->passBuf[0] & 0xFF;
- char passBuf[260];
-
- for (i = 0; i < len; i++) {
- ch = z->zipFilePtr->passBuf[len - i];
- passBuf[i] = (ch & 0x0f) | pwrot[(ch >> 4) & 0x0f];
- }
- passBuf[i] = '\0';
- init_keys(passBuf, info->keys, crc32tab);
- memset(passBuf, 0, sizeof(passBuf));
- for (i = 0; i < 12; i++) {
- ch = info->ubuf[i];
- zdecode(info->keys, crc32tab, ch);
- }
- info->ubuf += i;
- }
- if (info->iscompr) {
- z_stream stream;
- int err;
- unsigned char *ubuf = NULL;
- unsigned int j;
-
- memset(&stream, 0, sizeof(z_stream));
- stream.zalloc = Z_NULL;
- stream.zfree = Z_NULL;
- stream.opaque = Z_NULL;
- stream.avail_in = z->numCompressedBytes;
- if (info->isEncrypted) {
- stream.avail_in -= 12;
- ubuf = Tcl_AttemptAlloc(stream.avail_in);
- if (!ubuf) {
- info->ubuf = NULL;
- goto merror;
- }
- for (j = 0; j < stream.avail_in; j++) {
- ch = info->ubuf[j];
- ubuf[j] = zdecode(info->keys, crc32tab, ch);
- }
- stream.next_in = ubuf;
- } else {
- stream.next_in = info->ubuf;
- }
- stream.next_out = info->ubuf = Tcl_AttemptAlloc(info->numBytes);
- if (!info->ubuf) {
- merror:
- if (ubuf) {
- info->isEncrypted = 0;
- memset(info->keys, 0, sizeof(info->keys));
- Tcl_Free(ubuf);
- }
- Tcl_Free(info);
- if (interp) {
- Tcl_SetObjResult(interp,
- Tcl_NewStringObj("out of memory", -1));
- Tcl_SetErrorCode(interp, "TCL", "MALLOC", NULL);
- }
- goto error;
- }
- stream.avail_out = info->numBytes;
- if (inflateInit2(&stream, -15) != Z_OK) {
- goto cerror;
- }
- err = inflate(&stream, Z_SYNC_FLUSH);
- inflateEnd(&stream);
- if ((err == Z_STREAM_END)
- || ((err == Z_OK) && (stream.avail_in == 0))) {
- if (ubuf) {
- info->isEncrypted = 0;
- memset(info->keys, 0, sizeof(info->keys));
- Tcl_Free(ubuf);
- }
- goto wrapchan;
- }
- cerror:
- if (ubuf) {
- info->isEncrypted = 0;
- memset(info->keys, 0, sizeof(info->keys));
- Tcl_Free(ubuf);
- }
- if (info->ubuf) {
- Tcl_Free(info->ubuf);
- }
- Tcl_Free(info);
- ZIPFS_ERROR(interp, "decompression error");
- if (interp) {
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "CORRUPT", NULL);
- }
- goto error;
- } else if (info->isEncrypted) {
- unsigned char *ubuf = NULL;
- unsigned int j, len;
-
- /*
- * Decode encrypted but uncompressed file, since we support
- * Tcl_Seek() on it, and it can be randomly accessed later.
- */
-
- len = z->numCompressedBytes - 12;
- ubuf = (unsigned char *) Tcl_AttemptAlloc(len);
- if (ubuf == NULL) {
- Tcl_Free((char *) info);
- if (interp != NULL) {
- Tcl_SetObjResult(interp,
- Tcl_NewStringObj("out of memory", -1));
- }
- goto error;
- }
- for (j = 0; j < len; j++) {
- ch = info->ubuf[j];
- ubuf[j] = zdecode(info->keys, crc32tab, ch);
- }
- info->ubuf = ubuf;
- info->isEncrypted = 0;
- }
- }
-
- wrapchan:
- sprintf(cname, "zipfs_%" TCL_LL_MODIFIER "x_%d", z->offset,
- ZipFS.idCount++);
- z->zipFilePtr->numOpen++;
- Unlock();
- return Tcl_CreateChannel(&ZipChannelType, cname, info, flags);
-
- error:
- Unlock();
- return NULL;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipEntryStat --
- *
- * This function implements the ZIP filesystem specific version of the
- * library version of stat.
- *
- * Results:
- * See stat documentation.
- *
- * Side effects:
- * See stat documentation.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipEntryStat(
- char *path,
- Tcl_StatBuf *buf)
-{
- ZipEntry *z;
- int ret = -1;
-
- ReadLock();
- z = ZipFSLookup(path);
- if (z) {
- memset(buf, 0, sizeof(Tcl_StatBuf));
- if (z->isDirectory) {
- buf->st_mode = S_IFDIR | 0555;
- } else {
- buf->st_mode = S_IFREG | 0555;
- }
- buf->st_size = z->numBytes;
- buf->st_mtime = z->timestamp;
- buf->st_ctime = z->timestamp;
- buf->st_atime = z->timestamp;
- ret = 0;
- }
- Unlock();
- return ret;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipEntryAccess --
- *
- * This function implements the ZIP filesystem specific version of the
- * library version of access.
- *
- * Results:
- * See access documentation.
- *
- * Side effects:
- * See access documentation.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipEntryAccess(
- char *path,
- int mode)
-{
- ZipEntry *z;
-
- if (mode & 3) {
- return -1;
- }
- ReadLock();
- z = ZipFSLookup(path);
- Unlock();
- return (z ? 0 : -1);
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSOpenFileChannelProc --
- *
- * Results:
- *
- * Side effects:
- *
- *-------------------------------------------------------------------------
- */
-
-static Tcl_Channel
-ZipFSOpenFileChannelProc(
- Tcl_Interp *interp, /* Current interpreter. */
- Tcl_Obj *pathPtr,
- int mode,
- int permissions)
-{
- int len;
-
- pathPtr = Tcl_FSGetNormalizedPath(NULL, pathPtr);
- if (!pathPtr) {
- return NULL;
- }
- return ZipChannelOpen(interp, Tcl_GetStringFromObj(pathPtr, &len), mode,
- permissions);
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSStatProc --
- *
- * This function implements the ZIP filesystem specific version of the
- * library version of stat.
- *
- * Results:
- * See stat documentation.
- *
- * Side effects:
- * See stat documentation.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSStatProc(
- Tcl_Obj *pathPtr,
- Tcl_StatBuf *buf)
-{
- int len;
-
- pathPtr = Tcl_FSGetNormalizedPath(NULL, pathPtr);
- if (!pathPtr) {
- return -1;
- }
- return ZipEntryStat(Tcl_GetStringFromObj(pathPtr, &len), buf);
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSAccessProc --
- *
- * This function implements the ZIP filesystem specific version of the
- * library version of access.
- *
- * Results:
- * See access documentation.
- *
- * Side effects:
- * See access documentation.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSAccessProc(
- Tcl_Obj *pathPtr,
- int mode)
-{
- int len;
-
- pathPtr = Tcl_FSGetNormalizedPath(NULL, pathPtr);
- if (!pathPtr) {
- return -1;
- }
- return ZipEntryAccess(Tcl_GetStringFromObj(pathPtr, &len), mode);
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSFilesystemSeparatorProc --
- *
- * This function returns the separator to be used for a given path. The
- * object returned should have a refCount of zero
- *
- * Results:
- * A Tcl object, with a refCount of zero. If the caller needs to retain a
- * reference to the object, it should call Tcl_IncrRefCount, and should
- * otherwise free the object.
- *
- * Side effects:
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static Tcl_Obj *
-ZipFSFilesystemSeparatorProc(
- Tcl_Obj *pathPtr)
-{
- return Tcl_NewStringObj("/", -1);
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSMatchInDirectoryProc --
- *
- * This routine is used by the globbing code to search a directory for
- * all files which match a given pattern.
- *
- * Results:
- * The return value is a standard Tcl result indicating whether an error
- * occurred in globbing. Errors are left in interp, good results are
- * lappend'ed to resultPtr (which must be a valid object).
- *
- * Side effects:
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSMatchInDirectoryProc(
- Tcl_Interp *interp, /* Current interpreter. */
- Tcl_Obj *result,
- Tcl_Obj *pathPtr,
- const char *pattern,
- Tcl_GlobTypeData *types)
-{
- Tcl_HashEntry *hPtr;
- Tcl_HashSearch search;
- Tcl_Obj *normPathPtr = Tcl_FSGetNormalizedPath(NULL, pathPtr);
- int scnt, l, dirOnly = -1, prefixLen, strip = 0;
- size_t len;
- char *pat, *prefix, *path;
- Tcl_DString dsPref;
-
- if (!normPathPtr) {
- return -1;
- }
- if (types) {
- dirOnly = (types->type & TCL_GLOB_TYPE_DIR) == TCL_GLOB_TYPE_DIR;
- }
-
- /*
- * The prefix that gets prepended to results.
- */
-
- prefix = Tcl_GetStringFromObj(pathPtr, &prefixLen);
-
- /*
- * The (normalized) path we're searching.
- */
-
- path = Tcl_GetString(normPathPtr);
- len = normPathPtr->length;
-
- Tcl_DStringInit(&dsPref);
- Tcl_DStringAppend(&dsPref, prefix, prefixLen);
-
- if (strcmp(prefix, path) == 0) {
- prefix = NULL;
- } else {
- strip = len + 1;
- }
- if (prefix) {
- Tcl_DStringAppend(&dsPref, "/", 1);
- prefixLen++;
- prefix = Tcl_DStringValue(&dsPref);
- }
- ReadLock();
- if (types && (types->type == TCL_GLOB_TYPE_MOUNT)) {
- l = CountSlashes(path);
- if (path[len - 1] == '/') {
- len--;
- } else {
- l++;
- }
- if (!pattern || (pattern[0] == '\0')) {
- pattern = "*";
- }
- for (hPtr = Tcl_FirstHashEntry(&ZipFS.zipHash, &search); hPtr;
- hPtr = Tcl_NextHashEntry(&search)) {
- ZipFile *zf = Tcl_GetHashValue(hPtr);
-
- if (zf->mountPointLen == 0) {
- ZipEntry *z;
-
- for (z = zf->topEnts; z; z = z->tnext) {
- size_t lenz = strlen(z->name);
-
- if ((lenz > len + 1) && (strncmp(z->name, path, len) == 0)
- && (z->name[len] == '/')
- && (CountSlashes(z->name) == l)
- && Tcl_StringCaseMatch(z->name + len + 1, pattern,
- 0)) {
- if (prefix) {
- Tcl_DStringAppend(&dsPref, z->name, lenz);
- Tcl_ListObjAppendElement(NULL, result,
- Tcl_NewStringObj(Tcl_DStringValue(&dsPref),
- Tcl_DStringLength(&dsPref)));
- Tcl_DStringSetLength(&dsPref, prefixLen);
- } else {
- Tcl_ListObjAppendElement(NULL, result,
- Tcl_NewStringObj(z->name, lenz));
- }
- }
- }
- } else if ((zf->mountPointLen > len + 1)
- && (strncmp(zf->mountPoint, path, len) == 0)
- && (zf->mountPoint[len] == '/')
- && (CountSlashes(zf->mountPoint) == l)
- && Tcl_StringCaseMatch(zf->mountPoint + len + 1,
- pattern, 0)) {
- if (prefix) {
- Tcl_DStringAppend(&dsPref, zf->mountPoint,
- zf->mountPointLen);
- Tcl_ListObjAppendElement(NULL, result,
- Tcl_NewStringObj(Tcl_DStringValue(&dsPref),
- Tcl_DStringLength(&dsPref)));
- Tcl_DStringSetLength(&dsPref, prefixLen);
- } else {
- Tcl_ListObjAppendElement(NULL, result,
- Tcl_NewStringObj(zf->mountPoint,
- zf->mountPointLen));
- }
- }
- }
- goto end;
- }
-
- if (!pattern || (pattern[0] == '\0')) {
- hPtr = Tcl_FindHashEntry(&ZipFS.fileHash, path);
- if (hPtr) {
- ZipEntry *z = Tcl_GetHashValue(hPtr);
-
- if ((dirOnly < 0) || (!dirOnly && !z->isDirectory)
- || (dirOnly && z->isDirectory)) {
- if (prefix) {
- Tcl_DStringAppend(&dsPref, z->name, -1);
- Tcl_ListObjAppendElement(NULL, result,
- Tcl_NewStringObj(Tcl_DStringValue(&dsPref),
- Tcl_DStringLength(&dsPref)));
- Tcl_DStringSetLength(&dsPref, prefixLen);
- } else {
- Tcl_ListObjAppendElement(NULL, result,
- Tcl_NewStringObj(z->name, -1));
- }
- }
- }
- goto end;
- }
-
- l = strlen(pattern);
- pat = Tcl_Alloc(len + l + 2);
- memcpy(pat, path, len);
- while ((len > 1) && (pat[len - 1] == '/')) {
- --len;
- }
- if ((len > 1) || (pat[0] != '/')) {
- pat[len] = '/';
- ++len;
- }
- memcpy(pat + len, pattern, l + 1);
- scnt = CountSlashes(pat);
- for (hPtr = Tcl_FirstHashEntry(&ZipFS.fileHash, &search);
- hPtr; hPtr = Tcl_NextHashEntry(&search)) {
- ZipEntry *z = Tcl_GetHashValue(hPtr);
-
- if ((dirOnly >= 0) && ((dirOnly && !z->isDirectory)
- || (!dirOnly && z->isDirectory))) {
- continue;
- }
- if ((z->depth == scnt) && Tcl_StringCaseMatch(z->name, pat, 0)) {
- if (prefix) {
- Tcl_DStringAppend(&dsPref, z->name + strip, -1);
- Tcl_ListObjAppendElement(NULL, result,
- Tcl_NewStringObj(Tcl_DStringValue(&dsPref),
- Tcl_DStringLength(&dsPref)));
- Tcl_DStringSetLength(&dsPref, prefixLen);
- } else {
- Tcl_ListObjAppendElement(NULL, result,
- Tcl_NewStringObj(z->name + strip, -1));
- }
- }
- }
- Tcl_Free(pat);
-
- end:
- Unlock();
- Tcl_DStringFree(&dsPref);
- return TCL_OK;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSPathInFilesystemProc --
- *
- * This function determines if the given path object is in the ZIP
- * filesystem.
- *
- * Results:
- * TCL_OK when the path object is in the ZIP filesystem, -1 otherwise.
- *
- * Side effects:
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSPathInFilesystemProc(
- Tcl_Obj *pathPtr,
- void **clientDataPtr)
-{
- Tcl_HashEntry *hPtr;
- Tcl_HashSearch search;
- int ret = -1;
- size_t len;
- char *path;
-
- pathPtr = Tcl_FSGetNormalizedPath(NULL, pathPtr);
- if (!pathPtr) {
- return -1;
- }
-
- path = Tcl_GetString(pathPtr);
- if (strncmp(path, ZIPFS_VOLUME, ZIPFS_VOLUME_LEN) != 0) {
- return -1;
- }
-
- len = pathPtr->length;
-
- ReadLock();
- hPtr = Tcl_FindHashEntry(&ZipFS.fileHash, path);
- if (hPtr) {
- ret = TCL_OK;
- goto endloop;
- }
-
- for (hPtr = Tcl_FirstHashEntry(&ZipFS.zipHash, &search); hPtr;
- hPtr = Tcl_NextHashEntry(&search)) {
- ZipFile *zf = Tcl_GetHashValue(hPtr);
-
- if (zf->mountPointLen == 0) {
- ZipEntry *z;
-
- for (z = zf->topEnts; z != NULL; z = z->tnext) {
- size_t lenz = strlen(z->name);
-
- if ((len >= lenz) && (strncmp(path, z->name, lenz) == 0)) {
- ret = TCL_OK;
- goto endloop;
- }
- }
- } else if ((len >= zf->mountPointLen) &&
- (strncmp(path, zf->mountPoint, zf->mountPointLen) == 0)) {
- ret = TCL_OK;
- break;
- }
- }
-
- endloop:
- Unlock();
- return ret;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSListVolumesProc --
- *
- * Lists the currently mounted ZIP filesystem volumes.
- *
- * Results:
- * The list of volumes.
- *
- * Side effects:
- * None
- *
- *-------------------------------------------------------------------------
- */
-
-static Tcl_Obj *
-ZipFSListVolumesProc(void)
-{
- return Tcl_NewStringObj(ZIPFS_VOLUME, -1);
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSFileAttrStringsProc --
- *
- * This function implements the ZIP filesystem dependent 'file
- * attributes' subcommand, for listing the set of possible attribute
- * strings.
- *
- * Results:
- * An array of strings
- *
- * Side effects:
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static const char *const *
-ZipFSFileAttrStringsProc(
- Tcl_Obj *pathPtr,
- Tcl_Obj **objPtrRef)
-{
- static const char *const attrs[] = {
- "-uncompsize",
- "-compsize",
- "-offset",
- "-mount",
- "-archive",
- "-permissions",
- NULL,
- };
- return attrs;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSFileAttrsGetProc --
- *
- * This function implements the ZIP filesystem specific 'file attributes'
- * subcommand, for 'get' operations.
- *
- * Results:
- * Standard Tcl return code. The object placed in objPtrRef (if TCL_OK
- * was returned) is likely to have a refCount of zero. Either way we must
- * either store it somewhere (e.g. the Tcl result), or Incr/Decr its
- * refCount to ensure it is properly freed.
- *
- * Side effects:
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSFileAttrsGetProc(
- Tcl_Interp *interp, /* Current interpreter. */
- int index,
- Tcl_Obj *pathPtr,
- Tcl_Obj **objPtrRef)
-{
- int len, ret = TCL_OK;
- char *path;
- ZipEntry *z;
-
- pathPtr = Tcl_FSGetNormalizedPath(NULL, pathPtr);
- if (!pathPtr) {
- return -1;
- }
- path = Tcl_GetStringFromObj(pathPtr, &len);
- ReadLock();
- z = ZipFSLookup(path);
- if (!z) {
- Tcl_SetErrno(ENOENT);
- ZIPFS_POSIX_ERROR(interp, "file not found");
- ret = TCL_ERROR;
- goto done;
- }
- switch (index) {
- case 0:
- *objPtrRef = Tcl_NewWideIntObj(z->numBytes);
- break;
- case 1:
- *objPtrRef = Tcl_NewWideIntObj(z->numCompressedBytes);
- break;
- case 2:
- *objPtrRef = Tcl_NewWideIntObj(z->offset);
- break;
- case 3:
- *objPtrRef = Tcl_NewStringObj(z->zipFilePtr->mountPoint,
- z->zipFilePtr->mountPointLen);
- break;
- case 4:
- *objPtrRef = Tcl_NewStringObj(z->zipFilePtr->name, -1);
- break;
- case 5:
- *objPtrRef = Tcl_NewStringObj("0o555", -1);
- break;
- default:
- ZIPFS_ERROR(interp, "unknown attribute");
- ret = TCL_ERROR;
- }
-
- done:
- Unlock();
- return ret;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSFileAttrsSetProc --
- *
- * This function implements the ZIP filesystem specific 'file attributes'
- * subcommand, for 'set' operations.
- *
- * Results:
- * Standard Tcl return code.
- *
- * Side effects:
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSFileAttrsSetProc(
- Tcl_Interp *interp, /* Current interpreter. */
- int index,
- Tcl_Obj *pathPtr,
- Tcl_Obj *objPtr)
-{
- if (interp) {
- Tcl_SetObjResult(interp, Tcl_NewStringObj("unsupported operation", -1));
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "UNSUPPORTED_OP", NULL);
- }
- return TCL_ERROR;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSFilesystemPathTypeProc --
- *
- * Results:
- *
- * Side effects:
- *
- *-------------------------------------------------------------------------
- */
-
-static Tcl_Obj *
-ZipFSFilesystemPathTypeProc(
- Tcl_Obj *pathPtr)
-{
- return Tcl_NewStringObj("zip", -1);
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * ZipFSLoadFile --
- *
- * This functions deals with loading native object code. If the given
- * path object refers to a file within the ZIP filesystem, an approriate
- * error code is returned to delegate loading to the caller (by copying
- * the file to temp store and loading from there). As fallback when the
- * file refers to the ZIP file system but is not present, it is looked up
- * relative to the executable and loaded from there when available.
- *
- * Results:
- * TCL_OK on success, TCL_ERROR otherwise with error message left.
- *
- * Side effects:
- * Loads native code into the process address space.
- *
- *-------------------------------------------------------------------------
- */
-
-static int
-ZipFSLoadFile(
- Tcl_Interp *interp, /* Current interpreter. */
- Tcl_Obj *path,
- Tcl_LoadHandle *loadHandle,
- Tcl_FSUnloadFileProc **unloadProcPtr,
- int flags)
-{
- Tcl_FSLoadFileProc2 *loadFileProc;
-#ifdef ANDROID
- /*
- * Force loadFileProc to native implementation since the package manager
- * already extracted the shared libraries from the APK at install time.
- */
-
- loadFileProc = (Tcl_FSLoadFileProc2 *) tclNativeFilesystem.loadFileProc;
- if (loadFileProc) {
- return loadFileProc(interp, path, loadHandle, unloadProcPtr, flags);
- }
- Tcl_SetErrno(ENOENT);
- ZIPFS_ERROR(interp, Tcl_PosixError(interp));
- return TCL_ERROR;
-#else /* !ANDROID */
- Tcl_Obj *altPath = NULL;
- int ret = TCL_ERROR;
- Tcl_Obj *objs[2] = { NULL, NULL };
-
- if (Tcl_FSAccess(path, R_OK) == 0) {
- /*
- * EXDEV should trigger loading by copying to temp store.
- */
-
- Tcl_SetErrno(EXDEV);
- ZIPFS_ERROR(interp, Tcl_PosixError(interp));
- return ret;
- }
-
- objs[1] = TclPathPart(interp, path, TCL_PATH_DIRNAME);
- if (objs[1] && (ZipFSAccessProc(objs[1], R_OK) == 0)) {
- const char *execName = Tcl_GetNameOfExecutable();
-
- /*
- * Shared object is not in ZIP but its path prefix is, thus try to
- * load from directory where the executable came from.
- */
-
- TclDecrRefCount(objs[1]);
- objs[1] = TclPathPart(interp, path, TCL_PATH_TAIL);
-
- /*
- * Get directory name of executable manually to deal with cases where
- * [file dirname [info nameofexecutable]] is equal to [info
- * nameofexecutable] due to VFS effects.
- */
-
- if (execName) {
- const char *p = strrchr(execName, '/');
-
- if (p > execName + 1) {
- --p;
- objs[0] = Tcl_NewStringObj(execName, p - execName);
- }
- }
- if (!objs[0]) {
- objs[0] = TclPathPart(interp, TclGetObjNameOfExecutable(),
- TCL_PATH_DIRNAME);
- }
- if (objs[0]) {
- altPath = TclJoinPath(2, objs, 0);
- /* altPath = TclJoinPath(2, objs);*/
- if (altPath) {
- Tcl_IncrRefCount(altPath);
- if (Tcl_FSAccess(altPath, R_OK) == 0) {
- path = altPath;
- }
- }
- }
- }
- if (objs[0]) {
- Tcl_DecrRefCount(objs[0]);
- }
- if (objs[1]) {
- Tcl_DecrRefCount(objs[1]);
- }
-
- loadFileProc = (Tcl_FSLoadFileProc2 *) tclNativeFilesystem.loadFileProc;
- if (loadFileProc) {
- ret = loadFileProc(interp, path, loadHandle, unloadProcPtr, flags);
- } else {
- Tcl_SetErrno(ENOENT);
- ZIPFS_ERROR(interp, Tcl_PosixError(interp));
- }
- if (altPath) {
- Tcl_DecrRefCount(altPath);
- }
- return ret;
-#endif /* ANDROID */
-}
-
-#endif /* HAVE_ZLIB */
-
-/*
- *-------------------------------------------------------------------------
- *
- * TclZipfs_Init --
- *
- * Perform per interpreter initialization of this module.
- *
- * Results:
- * The return value is a standard Tcl result.
- *
- * Side effects:
- * Initializes this module if not already initialized, and adds module
- * related commands to the given interpreter.
- *
- *-------------------------------------------------------------------------
- */
-
-MODULE_SCOPE int
-TclZipfs_Init(
- Tcl_Interp *interp) /* Current interpreter. */
-{
-#ifdef HAVE_ZLIB
- static const EnsembleImplMap initMap[] = {
- {"mkimg", ZipFSMkImgObjCmd, NULL, NULL, NULL, 1},
- {"mkzip", ZipFSMkZipObjCmd, NULL, NULL, NULL, 1},
- {"lmkimg", ZipFSLMkImgObjCmd, NULL, NULL, NULL, 1},
- {"lmkzip", ZipFSLMkZipObjCmd, NULL, NULL, NULL, 1},
- /* The 4 entries above are not available in safe interpreters */
- {"mount", ZipFSMountObjCmd, NULL, NULL, NULL, 1},
- {"mount_data", ZipFSMountBufferObjCmd, NULL, NULL, NULL, 1},
- {"unmount", ZipFSUnmountObjCmd, NULL, NULL, NULL, 1},
- {"mkkey", ZipFSMkKeyObjCmd, NULL, NULL, NULL, 1},
- {"exists", ZipFSExistsObjCmd, NULL, NULL, NULL, 0},
- {"info", ZipFSInfoObjCmd, NULL, NULL, NULL, 0},
- {"list", ZipFSListObjCmd, NULL, NULL, NULL, 0},
- {"canonical", ZipFSCanonicalObjCmd, NULL, NULL, NULL, 0},
- {"root", ZipFSRootObjCmd, NULL, NULL, NULL, 0},
- {NULL, NULL, NULL, NULL, NULL, 0}
- };
- static const char findproc[] =
- "namespace eval ::tcl::zipfs {}\n"
- "proc ::tcl::zipfs::Find dir {\n"
- " set result {}\n"
- " if {[catch {glob -directory $dir -nocomplain * .*} list]} {\n"
- " return $result\n"
- " }\n"
- " foreach file $list {\n"
- " if {[file tail $file] in {. ..}} {\n"
- " continue\n"
- " }\n"
- " lappend result $file {*}[Find $file]\n"
- " }\n"
- " return $result\n"
- "}\n"
- "proc ::tcl::zipfs::find {directoryName} {\n"
- " return [lsort [Find $directoryName]]\n"
- "}\n";
-
- /*
- * One-time initialization.
- */
-
- WriteLock();
- if (!ZipFS.initialized) {
- ZipfsSetup();
- }
- Unlock();
-
- if (interp) {
- Tcl_Command ensemble;
- Tcl_Obj *mapObj;
-
- Tcl_EvalEx(interp, findproc, -1, TCL_EVAL_GLOBAL);
- Tcl_LinkVar(interp, "::tcl::zipfs::wrmax", (char *) &ZipFS.wrmax,
- TCL_LINK_INT);
- ensemble = TclMakeEnsemble(interp, "zipfs",
- Tcl_IsSafe(interp) ? (initMap + 4) : initMap);
-
- /*
- * Add the [zipfs find] subcommand.
- */
-
- Tcl_GetEnsembleMappingDict(NULL, ensemble, &mapObj);
- Tcl_DictObjPut(NULL, mapObj, Tcl_NewStringObj("find", -1),
- Tcl_NewStringObj("::tcl::zipfs::find", -1));
- Tcl_CreateObjCommand(interp, "::tcl::zipfs::tcl_library_init",
- ZipFSTclLibraryObjCmd, NULL, NULL);
- Tcl_PkgProvide(interp, "zipfs", "2.0");
- }
- return TCL_OK;
-#else /* !HAVE_ZLIB */
- ZIPFS_ERROR(interp, "no zlib available");
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "NO_ZLIB", NULL);
- return TCL_ERROR;
-#endif /* HAVE_ZLIB */
-}
-
-static int
-ZipfsAppHookFindTclInit(
- const char *archive)
-{
- Tcl_Obj *vfsInitScript;
- int found;
-
- if (zipfs_literal_tcl_library) {
- return TCL_ERROR;
- }
- if (TclZipfs_Mount(NULL, ZIPFS_ZIP_MOUNT, archive, NULL)) {
- /* Either the file doesn't exist or it is not a zip archive */
- return TCL_ERROR;
- }
-
- TclNewLiteralStringObj(vfsInitScript, ZIPFS_ZIP_MOUNT "/init.tcl");
- Tcl_IncrRefCount(vfsInitScript);
- found = Tcl_FSAccess(vfsInitScript, F_OK);
- Tcl_DecrRefCount(vfsInitScript);
- if (found == 0) {
- zipfs_literal_tcl_library = ZIPFS_ZIP_MOUNT;
- return TCL_OK;
- }
-
- TclNewLiteralStringObj(vfsInitScript,
- ZIPFS_ZIP_MOUNT "/tcl_library/init.tcl");
- Tcl_IncrRefCount(vfsInitScript);
- found = Tcl_FSAccess(vfsInitScript, F_OK);
- Tcl_DecrRefCount(vfsInitScript);
- if (found == 0) {
- zipfs_literal_tcl_library = ZIPFS_ZIP_MOUNT "/tcl_library";
- return TCL_OK;
- }
-
- return TCL_ERROR;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * TclZipfs_AppHook --
- *
- * Performs the argument munging for the shell
- *
- *-------------------------------------------------------------------------
- */
-
-int
-TclZipfs_AppHook(
- int *argcPtr, /* Pointer to argc */
-#ifdef _WIN32
- TCHAR
-#else /* !_WIN32 */
- char
-#endif /* _WIN32 */
- ***argvPtr) /* Pointer to argv */
-{
- char *archive;
-
- Tcl_FindExecutable((*argvPtr)[0]);
- archive = (char *) Tcl_GetNameOfExecutable();
- TclZipfs_Init(NULL);
-
- /*
- * Look for init.tcl in one of the locations mounted later in this
- * function.
- */
-
- if (!TclZipfs_Mount(NULL, ZIPFS_APP_MOUNT, archive, NULL)) {
- int found;
- Tcl_Obj *vfsInitScript;
-
- TclNewLiteralStringObj(vfsInitScript, ZIPFS_APP_MOUNT "/main.tcl");
- Tcl_IncrRefCount(vfsInitScript);
- if (Tcl_FSAccess(vfsInitScript, F_OK) == 0) {
- /*
- * Startup script should be set before calling Tcl_AppInit
- */
-
- Tcl_SetStartupScript(vfsInitScript, NULL);
- } else {
- Tcl_DecrRefCount(vfsInitScript);
- }
-
- /*
- * Set Tcl Encodings
- */
-
- if (!zipfs_literal_tcl_library) {
- TclNewLiteralStringObj(vfsInitScript,
- ZIPFS_APP_MOUNT "/tcl_library/init.tcl");
- Tcl_IncrRefCount(vfsInitScript);
- found = Tcl_FSAccess(vfsInitScript, F_OK);
- Tcl_DecrRefCount(vfsInitScript);
- if (found == TCL_OK) {
- zipfs_literal_tcl_library = ZIPFS_APP_MOUNT "/tcl_library";
- return TCL_OK;
- }
- }
-#ifdef SUPPORT_BUILTIN_ZIP_INSTALL
- } else if (*argcPtr > 1) {
- /*
- * If the first argument is "install", run the supplied installer
- * script.
- */
-
-#ifdef _WIN32
- Tcl_DString ds;
-
- archive = Tcl_WinTCharToUtf((*argvPtr)[1], -1, &ds);
-#else /* !_WIN32 */
- archive = (*argvPtr)[1];
-#endif /* _WIN32 */
- if (strcmp(archive, "install") == 0) {
- Tcl_Obj *vfsInitScript;
-
- /*
- * Run this now to ensure the file is present by the time Tcl_Main
- * wants it.
- */
-
- TclZipfs_TclLibrary();
- TclNewLiteralStringObj(vfsInitScript,
- ZIPFS_ZIP_MOUNT "/tcl_library/install.tcl");
- Tcl_IncrRefCount(vfsInitScript);
- if (Tcl_FSAccess(vfsInitScript, F_OK) == 0) {
- Tcl_SetStartupScript(vfsInitScript, NULL);
- }
- return TCL_OK;
- } else if (!TclZipfs_Mount(NULL, ZIPFS_APP_MOUNT, archive, NULL)) {
- int found;
- Tcl_Obj *vfsInitScript;
-
- TclNewLiteralStringObj(vfsInitScript, ZIPFS_APP_MOUNT "/main.tcl");
- Tcl_IncrRefCount(vfsInitScript);
- if (Tcl_FSAccess(vfsInitScript, F_OK) == 0) {
- /*
- * Startup script should be set before calling Tcl_AppInit
- */
-
- Tcl_SetStartupScript(vfsInitScript, NULL);
- } else {
- Tcl_DecrRefCount(vfsInitScript);
- }
- /* Set Tcl Encodings */
- TclNewLiteralStringObj(vfsInitScript,
- ZIPFS_APP_MOUNT "/tcl_library/init.tcl");
- Tcl_IncrRefCount(vfsInitScript);
- found = Tcl_FSAccess(vfsInitScript, F_OK);
- Tcl_DecrRefCount(vfsInitScript);
- if (found == TCL_OK) {
- zipfs_literal_tcl_library = ZIPFS_APP_MOUNT "/tcl_library";
- return TCL_OK;
- }
- }
-#ifdef _WIN32
- Tcl_DStringFree(&ds);
-#endif /* _WIN32 */
-#endif /* SUPPORT_BUILTIN_ZIP_INSTALL */
- }
- return TCL_OK;
-}
-
-#ifndef HAVE_ZLIB
-
-/*
- *-------------------------------------------------------------------------
- *
- * TclZipfs_Mount, TclZipfs_MountBuffer, TclZipfs_Unmount --
- *
- * Dummy version when no ZLIB support available.
- *
- *-------------------------------------------------------------------------
- */
-
-int
-TclZipfs_Mount(
- Tcl_Interp *interp, /* Current interpreter. */
- const char *mountPoint, /* Mount point path. */
- const char *zipname, /* Path to ZIP file to mount. */
- const char *passwd) /* Password for opening the ZIP, or NULL if
- * the ZIP is unprotected. */
-{
- ZIPFS_ERROR(interp, "no zlib available");
- if (interp) {
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "NO_ZLIB", NULL);
- }
- return TCL_ERROR;
-}
-
-int
-TclZipfs_MountBuffer(
- Tcl_Interp *interp, /* Current interpreter. NULLable. */
- const char *mountPoint, /* Mount point path. */
- unsigned char *data,
- size_t datalen,
- int copy)
-{
- ZIPFS_ERROR(interp, "no zlib available");
- if (interp) {
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "NO_ZLIB", NULL);
- }
- return TCL_ERROR;
-}
-
-int
-TclZipfs_Unmount(
- Tcl_Interp *interp, /* Current interpreter. */
- const char *mountPoint) /* Mount point path. */
-{
- ZIPFS_ERROR(interp, "no zlib available");
- if (interp) {
- Tcl_SetErrorCode(interp, "TCL", "ZIPFS", "NO_ZLIB", NULL);
- }
- return TCL_ERROR;
-}
-#endif /* !HAVE_ZLIB */
-
-/*
- * Local Variables:
- * mode: c
- * c-basic-offset: 4
- * fill-column: 78
- * End:
- */
diff --git a/tclzipfs/tclconfig/ChangeLog b/tclzipfs/tclconfig/ChangeLog
deleted file mode 100644
index 9504def..0000000
--- a/tclzipfs/tclconfig/ChangeLog
+++ /dev/null
@@ -1,1003 +0,0 @@
-2016-03-11 Sean Woods <yoda@etoyoc.com>
- *tcl.m4 Fixed the search for Tcl and Wish shells under MinGW. Static builds and threaded builds
- get an "s" or "t" added to the name.
-
-2015-08-28 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tcl.m4: Rfe [00189c4afc]: Allow semi-static UCRT build on
- Windows with VC 14.0
-
-2013-10-08 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tcl.m4: Bug [172223e008]: Wrong filename in
- --disable-shared compile on MinGW
-
-2013-10-04 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tcl.m4: stub library is no longer linked with msvcrt??.dll.
-
-2013-10-01 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tcl.m4: Workaround for MinGW bug #2065: "gcc --shared" links
- with libgcc_s_dw2-1.dll when using 64-bit division in C
-
-2013-07-04 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tcl.m4: Bug [3324676]: AC_PROG_INSTALL incompat,
- Bug [3606445]: Unneeded -DHAVE_NO_SEH=1 when not building on Windows
-
-2013-07-02 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tcl.m4: Bug [32afa6e256]: dirent64 check is incorrect in tcl.m4
- (thanks to Brian Griffin)
-
-2013-06-20 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tcl.m4: Use X11/Xlib.h for checking where X11 can be found
- in stead of X11/XIntrinsic.h. Suggested by Pietro Cerutti.
-
-2013-06-04 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tcl.m4: Eliminate NO_VIZ macro as current
- zlib uses HAVE_HIDDEN in stead. One more last-moment
- fix for FreeBSD by Pietro Cerutti
-
-2013-05-19 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tcl.m4: Fix for FreeBSD, and remove support for old
- FreeBSD versions. Patch by Pietro Cerutti
-
-2013-03-12 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tcl.m4: Patch by Andrew Shadura, providing better support for
- * three architectures they have in Debian.
-
-2012-08-07 Stuart Cassoff <stwo@users.sourceforge.net>
-
- * tcl.m4: Added "-DNDEBUG" to CFLAGS_DEFAULT
- when building with --disable-symbols.
-
-2012-08-07 Stuart Cassoff <stwo@users.sourceforge.net>
-
- * tcl.m4: [Bug 3555058]: Checkin [30736d63f0] broke
- CFLAGS_DEFAULT, LDFLAGS_DEFAULT
-
-2012-08-07 Stuart Cassoff <stwo@users.sourceforge.net>
-
- * tcl.m4: [Bug 3511806]: Checkin [30736d63f0] broke CFLAGS
-
-2012-08-07 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tcl.m4: [Bug 3511806]: Checkin [30736d63f0] broke CFLAGS
-
-2012-07-25 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tcl.m4: My previous commit (2012-04-03) broke the ActiveTcl
- build for AMD64, because of the quotes in "C:/<path>/AMD64/cl.exe".
- It turns out that the AC_TRY_COMPILE macro cannot handle that.
-
-2012-07-22 Stuart Cassoff <stwo@users.sourceforge.net>
-
- * tcl.m4: Tidy: consistency, spelling, phrasing, whitespace.
- No functional change.
-
-2012-04-03 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tcl.m4: [Bug 3511806] Compiler checks too early
- This change allows to build the cygwin and mingw32 ports of
- Tcl/Tk extensions to build out-of-the-box using a native or
- cross-compiler, e.g. on Cygwin, Linux or Darwin.
-
-2011-04-02 Jan Nijtmans <nijtmans@users.sf.net>
-
- * install-sh: Fix issue with library stripping in install-sh
- (backported from kevin_walzer's patch from Tcl 8.6 trunk)
-
-2011-04-05 Andreas Kupries <andreask@activestate.com>
-
- * tcl.m4: Applied patch by Jeff Lawson. Nicer error message when
- tclConfig.sh was not found.
-
-2010-12-15 Stuart Cassoff <stwo@users.sourceforge.net>
-
- * install-sh: Upgrade to newer install-sh and use it.
- * tcl.m4:
-
-2010-12-14 Stuart Cassoff <stwo@users.sourceforge.net>
-
- * tcl.m4: Better building on OpenBSD.
-
-2010-12-14 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tcl.m4: when using gcc, don't try to determine Win64 SDK
-
-2010-12-12 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tcl.m4: Determine correctly a cross-compiler-windres
-
-2010-11-23 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tcl.m4: add some cross-compile support, borrowed from Tcl 8.6
-
-2010-09-16 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: correct HP-UX LDFLAGS (only used when building big shell)
-
-2010-09-14 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: add extra if check for .manifest file generation
- Add notice about package name and version being built.
-
-2010-09-09 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tcl.m4: [FREQ #3058486] TEA_LOAD_CONFIG doesn't set all BUILD_ vars
- Slightly related: defining BUILD_$1 on all platforms - not only win -
- allows the -fvisibility feature to be used in extensions as well, at
- least if you compile against tcl >= 8.5.
-
-2010-08-26 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: ensure safe quoting for autoheader usage
-
-2010-08-19 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: add TEA_ADD_CLEANFILES macro to make adding cleanfiles
- easier, and add *.exp to CLEANFILES Windows default.
- (TEA_MAKE_LIB): Enhanced to check for MSVC that requires manifests
- and auto-embed it into proj DLL via MAKE_SHARED_LIB. Also define
- VC_MANIFEST_EMBED_DLL and VC_MANIFEST_EMBED_EXE that do the same
- magic in case it is needed for extended TEA projects.
-
-2010-08-16 Jeff Hobbs <jeffh@ActiveState.com>
-
- *** Bump to TEA_VERSION 3.9 ***
- If upgrading from TEA_VERSION 3.8, copy over tcl.m4, change
- TEA_INIT to use 3.9 and reconfigure (ac-2.59+).
- BUILD_${PACKAGE_NAME} will be auto-defined on Windows for
- correct setting of TCL_STORAGE_CLASS.
- TEA_LOAD_CONFIG users should remove the SHLIB_LD_LIBS setting done
- in configure.in (LIBS will be automagically populated by
- TEA_LOAD_CONFIG).
- TEA_EXPORT_CONFIG has been added for ${pkg}Config.sh creators
- SHLIB_LD_FLAGS was deprecated a while ago, remove it if it is
- still in your Makefile.in.
-
- * tcl.m4: add /usr/lib64 to set of auto-search dirs. [Bug 1230554]
- Auto-define BUILD_$PACKAGE_NAME so users don't need to. This
- needs to correspond with $pkg.h define magic for TCL_STORAGE_CLASS.
- Auto-define CLEANFILES. Users can expand it.
- (SHLIB_LD_LIBS): define to '${LIBS}' default and change it only if
- necessary. Platforms not using this may simply not work or have
- very funky linkers.
- (TEA_LOAD_CONFIG): When loading config for another extension,
- auto-add stub libraries found with TEA_ADD_LIBS. Eases
- configure.in for modules like itk and img::*.
- (TEA_EXPORT_CONFIG): Add standardized function for exporting a
- ${pkg}Config.sh. See use by img::* and itcl.
-
-2010-08-12 Jeff Hobbs <jeffh@ActiveState.com>
-
- *** Bump to TEA_VERSION 3.8 ***
- If upgrading from TEA_VERSION 3.7, copy over tcl.m4, change
- TEA_INIT to use 3.8 and reconfigure (ac-2.59+).
- No other changes should be necessary.
-
- * tcl.m4: remove more vestigial bits from removed platforms.
- Add back SCO_SV-3.2*.
- Remove use of DL_LIBS and DL_OBJS and related baggage - these are
- only needed by the core to support 'load'.
- Allow for macosx in TEA_ADD_SOURCES.
- Correct check for found_xincludes=no in TEA_PATH_UNIX_X.
-
-2010-08-11 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: remove the following old platform configurations:
- UNIX_SV*|UnixWare-5*, SunOS-4.*, SINIX*5.4*, SCO_SV-3.2*<readded>,
- OSF1-1.*, NEXTSTEP-*, NetBSD-1.*|FreeBSD-[[1-2]].*, MP-RAS-*,
- IRIX-5.*, HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*, dgux*,
- BSD/OS-2.1*|BSD/OS-3*
- (AIX): drop AIX-pre4 support and use of ldAix, use -bexpall/-brtl
-
-2010-07-05 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tcl.m4: [Patch #1055668] removal of exported internals from
- tclInt.h (EXTERN macro)
-
-2010-04-14 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tcl.m4 - Backport a lot of quoting fixes from tcl8.6/unix/tcl.m4
- - Fix determination of CYGPATH for CYGWIN
- With those fixes, itcl and tdbc compile fine with CYGWIN
-
-2010-04-06 Jan Nijtmans <nijtmans@users.sf.net>
-
- * install-sh [Bug 2982540] configure and install* script files
- should always have LF
-
-2010-02-19 Stuart Cassoff <stwo@users.sourceforge.net>
-
- * tcl.m4: Correct compiler/linker flags for threaded builds on
- OpenBSD.
-
-2010-01-19 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tcl.m4: Detect CYGWIN variant: win32 or unix
-
-2010-01-03 Donal K. Fellows <dkf@users.sf.net>
-
- * unix/tcl.m4 (TEA_CONFIG_CFLAGS): [Tcl Bug 1636685]: Use the
- configuration for modern FreeBSD suggested by the FreeBSD porter.
-
-2009-10-22 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tcl.m4: [Tcl Patch #2883533] tcl.m4 support for Haiku OS
-
-2009-04-27 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4 (TEA_CONFIG_CFLAGS): harden the check to add _r to CC on
- AIX with threads.
-
-2009-04-10 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4 (Darwin): check for 64-bit TkAqua.
-
-2009-03-26 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tclconfig/tcl.m4: Adapt LDFLAGS and LD_SEARCH_FLAGS
- together with SHLIB_LD definition to unbreak building on HPUX.
-
-2009-03-20 Andreas Kupries <andreask@activestate.com>
-
- * tclconfig/tcl.m4: Changed SHLIB_LD definition to unbreak
- building on HPUX.
-
-2009-03-16 Joe English <jenglish@users.sourceforge.net>
-
- * tcl.m4(TEA_PUBLIC_TK_HEADERS): Look at ${TK_INCLUDE_SPEC}
- (found in tkConfig.sh) when trying to guess where tk.h might be
- [Patch 1960628].
-
-2009-03-11 Joe English <jenglish@users.sourceforge.net>
-
- * tcl.m4: Allow ${SHLIB_SUFFIX} to be overridden at
- configure-time [Patch 1960628]. Also fix some comment typos,
- and an uninitialized variable bug-waiting-to-happen.
-
-2008-12-21 Jan Nijtmans <nijtmans@users.sf.net>
-
- * tcl.m4: [Bug 2073255] Tcl_GetString(NULL) doesn't crash on HP-UX
- (this bug report was for Tcl, but holds for TEA as well.)
-
-2008-12-20 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4: sync with tdbc tcl.m4 changes
- (SunOS-5.11): Sun cc SHLIB_LD: use LDFLAGS_DEFAULT instead of LDFLAGS
-
-2008-12-02 Jeff Hobbs <jeffh@ActiveState.com>
-
- *** Bump to TEA_VERSION 3.7 ***
-
- * tcl.m4: in private header check, check for <plat>Port.h instead
- of Int.h to ensure all private headers are available.
-
-2008-11-04 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4 (Darwin): sync TEA_PRIVATE_TK_HEADERS handling of
- Tk.framework PrivateHeaders with TEA_PRIVATE_TCL_HEADERS.
-
-2008-11-04 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4 (TEA_PATH_TCLCONFIG, TEA_PATH_TKCONFIG): exit with error
- when tclConfig.sh cannot be found. [Bug #1997760]
- (TEA_PRIVATE_TCL_HEADERS, TEA_PRIVATE_TK_HEADERS): allow for
- finding the headers installed in the public areas, e.g. a result of
- make install-private-headers. [Bug #1631922]
-
-2008-08-12 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4 (Darwin): link shlib with current and compatiblity version
- flags; look for libX11.dylib when searching for X11 libraries.
-
-2008-06-12 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4 (SunOS-5.11): fix 64bit amd64 support with gcc & Sun cc.
-
-2008-03-27 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4 (SunOS-5.1x): fix 64bit support for Sun cc. [Bug 1921166]
-
-2008-02-01 Donal K. Fellows <donal.k.fellows@man.ac.uk>
-
- * tcl.m4 (TEA_CONFIG_CFLAGS): Updated to work at least in part with
- more modern VC versions. Currently just made the linker flags more
- flexible; more work may be needed.
-
-2007-10-26 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4 (Darwin): add support for 64-bit X11.
-
-2007-10-23 Jeff Hobbs <jeffh@ActiveState.com>
-
- *** Tagged tea-3-branch to start TEA 4 development on HEAD ***
-
-2007-09-17 Joe English <jenglish@users.sourceforge.net>
-
- * tcl.m4: use '${CC} -shared' instead of 'ld -Bshareable'
- to build shared libraries on current NetBSDs [Bug 1749251].
-
-2007-09-15 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4: replace all direct references to compiler by ${CC} to
- enable CC overriding at configure & make time.
- (SunOS-5.1x): replace direct use of '/usr/ccs/bin/ld' in SHLIB_LD by
- 'cc' compiler driver.
-
-2007-08-08 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: check Ttk dir for Tk private headers (8.5).
- Add some comments to other bits.
-
-2007-06-25 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4 (TEA_PROG_TCLSH, TEA_PROG_WISH): move where / is added.
-
-2007-06-13 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: fix --with-tkinclude alignment. [Bug 1506111]
-
-2007-06-06 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4 (Darwin): fix 64bit arch removal in fat 32&64bit builds.
-
-2007-05-18 Donal K. Fellows <donal.k.fellows@man.ac.uk>
-
- * tcl.m4: Added quoting so that paths with spaces cause fewer
- problems.
-
-2007-03-07 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4 (Darwin): s/CFLAGS/CPPFLAGS/ in -mmacosx-version-min check.
-
-2007-02-15 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: correct private header check to search in generic subdir
-
-2007-02-09 Jeff Hobbs <jeffh@ActiveState.com>
-
- *** Bump to TEA_VERSION 3.6 ***
-
- * tcl.m4: correct -d to -f
- (TEA_CONFIG_CFLAGS): SHLIB_SUFFIX is .so on HP ia64 [Bug 1615058]
-
-2007-02-08 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4 (TEA_PRIVATE_TCL_HEADERS, TEA_PRIVATE_TK_HEADERS): check
- that the dirs actually have private headers. [Bug 1631922]
-
-2007-02-04 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4: add caching to -pipe check.
-
-2007-01-25 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4: integrate CPPFLAGS into CFLAGS as late as possible and
- move (rather than duplicate) -isysroot flags from CFLAGS to CPPFLAGS to
- avoid errors about multiple -isysroot flags from some older gcc builds.
-
-2006-01-19 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4: ensure CPPFLAGS env var is used when set. [Bug 1586861]
- (Darwin): add -isysroot and -mmacosx-version-min flags to CPPFLAGS when
- present in CFLAGS to avoid discrepancies between what headers configure
- sees during preprocessing tests and compiling tests.
-
-2006-12-19 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4 (Darwin): --enable-64bit: verify linking with 64bit -arch flag
- succeeds before enabling 64bit build.
-
-2006-12-16 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4 (Linux): fix previous change to use makefile variable
- LDFLAGS_DEFAULT instead of LDFLAGS in SHLIB_LD, to ensure linker
- flags in sampleextension Makefile are picked up.
-
-2006-11-26 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4 (Linux): --enable-64bit support. [Patch 1597389], [Bug 1230558]
-
-2006-08-18 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4 (Darwin): add support for --enable-64bit on x86_64, for
- universal builds including x86_64 and for use of -mmacosx-version-min
- instead of MACOSX_DEPLOYMENT_TARGET. For Tk extensions, remove 64-bit
- arch flags from CFLAGS like in the Tk configure, as neither TkAqua nor
- TkX11 can be built for 64-bit at present.
-
-2006-03-28 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: []-quote AC_DEFUN functions.
- (TEA_PATH_TKCONFIG): Fixed Windows-specific check for tkConfig.sh.
- (TEA_MAKE_LIB): Prepend 'lib' for Windows-gcc configs.
-
-2006-03-07 Joe English <jenglish@users.sourceforge.net>
-
- * tcl.m4: Set SHLIB_LD_FLAGS='${LIBS}' on NetBSD,
- as per the other *BSD variants [Bug 1334613].
-
-2006-01-25 Jeff Hobbs <jeffh@ActiveState.com>
-
- *** Bump to TEA version 3.5 ***
-
- * tcl.m4: keep LD_SEARCH_FLAGS and CC_SEARCH_FLAGS synchronous
- with core tcl.m4 meaning.
-
-2006-01-24 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4 (Darwin): use makefile variable LDFLAGS_DEFAULT instead of
- LDFLAGS in SHLIB_LD, to ensure linker flags in sampleextension Makefile
- are picked up. [Bug 1403343]
-
-2006-01-23 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: add C:/Tcl/lib and C:/Progra~1/Tcl/lib dirs to check for
- *Config.sh on Windows. [Bug 1407544]
-
-2006-01-23 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4 (Darwin): for Tk extensions, remove -arch ppc64 from CFLAGS
- like in the Tk configure, as neither TkAqua nor TkX11 can be built for
- 64bit at present (no 64bit GUI libraries).
-
-2006-01-22 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: restore system=windows on Windows.
- Remove error if 'ar' isn't found (it may not be on Windows).
- Do not add -lxnet or define _XOPEN_SOURCE on HP-UX by default.
- Ensure the C|LDFLAGS_DEFAULT gets the fully sub'd value at
- configure time.
-
-2006-01-10 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4: add caching, use AC_CACHE_CHECK instead of AC_CACHE_VAL
- where possible, consistent message quoting, sync relevant
- tcl/unix/tcl.m4 HEAD changes and gratuitous formatting differences
- (notably sunc removal of support for for ancient BSD's, IRIX 4,
- RISCos and Ultrix by kennykb), Darwin improvements to
- TEA_LOAD_*CONFIG to make linking work against Tcl/Tk frameworks
- installed in arbitrary location, change TEA_PROG_* search order
- (look in *_BIN_DIR parents before *_PREFIX).
-
-2006-01-05 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: add dkf's system config refactor
-
-2006-01-04 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: remove extraneous ' that causes bash 3.1 to choke
-
-2005-12-19 Joe English <jenglish@users.sourceforge.net>
-
- * tcl.m4 (TEA_PATH_TCLCONFIG &c): Look for tclConfig.sh &c
- in ${libdir}, where they are installed by default [Patch #1377407].
-
-2005-12-05 Don Porter <dgp@users.sf.net>
-
- * tcl.m4 (TEA_PUBLIC_*_HEADERS): Better support for finding
- header files for uninstalled Tcl and Tk.
-
-2005-12-02 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: correctly bump TEA_VERSION var to 3.4
-
-2005-12-01 Daniel Steffen <das@users.sourceforge.net>
-
- * unix/tcl.m4 (Darwin): fixed error when MACOSX_DEPLOYMENT_TARGET unset
-
-2005-11-29 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: *** Bump to TEA version 3.4 ***
- Add Windows x64 build support.
- Remove TEA_PATH_NOSPACE and handle the problem with ""s where
- necessary - the macro relied on TCLSH_PROG which didn't work for
- cross-compiles.
-
-2005-11-27 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4 (Darwin): add 64bit support, add CFLAGS to SHLIB_LD to
- support passing -isysroot in env(CFLAGS) to configure (flag can't
- be present twice, so can't be in both CFLAGS and LDFLAGS during
- configure), don't use -prebind when deploying on 10.4.
- (TEA_ENABLE_LANGINFO, TEA_TIME_HANDLER): add/fix caching.
-
-2005-10-30 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4: fixed two tests for TEA_WINDOWINGSYSTEM = "aqua" that
- should have been for `uname -s` = "Darwin" instead; added some
- missing quoting.
- (TEA_PROG_TCLSH, TEA_PROG_WISH): fix incorrect assumption that
- install location of tclConfig.sh/tkConfig.sh allows to determine
- the tclsh/wish install dir via ../bin. Indeed tcl/tk can be
- configured with arbitrary --libdir and --bindir (independent of
- prefix) and such a configuration is in fact standard with Darwin
- framework builds. At least now also check ${TCL_PREFIX}/bin
- resp. ${TK_PREFIX}/bin for presence of tclsh resp. wish (if tcl/tk
- have been configured with arbitrary --bindir, this will still not
- find them, for a general solution *Config.sh would need to contain
- the values of bindir/libdir/includedir passed to configure).
-
-2005-10-07 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: Fix Solaris 5.10 check and Solaris AMD64 64-bit builds.
-
-2005-10-04 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4 (TEA_PRIVATE_TCL_HEADERS): add / to finish sed macro
- (TEA_ENABLE_THREADS): don't check for pthread_attr_setstacksize func
-
-2005-09-13 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: *** Update to TEA version 3.3 ***
- define TEA_WINDOWINGSYSTEM in TEA_LOAD_TKCONFIG.
- Make --enable-threads the default (users can --disable-threads).
- Improve AIX ${CC}_r fix to better check existing ${CC} value.
- Do the appropriate evals to not require the *TOP_DIR_NATIVE vars
- be set for extensions that use private headers.
- Make aqua check for Xlib compat headers the same as win32.
-
-2005-07-26 Mo DeJong <mdejong@users.sourceforge.net>
-
- * tcl.m4 (TEA_PROG_TCLSH, TEA_BUILD_TCLSH,
- TEA_PROG_WISH, TEA_BUILD_WISH): Remove
- TEA_BUILD_TCLSH and TEA_BUILD_WISH because
- of complaints that it broke the build when
- only an installed version of Tcl was available
- at extension build time. The TEA_PROG_TCLSH and
- TEA_PROG_WISH macros will no longer search the
- path at all. The build tclsh or installed
- tclsh shell will now be found by TEA_PROG_TCLSH.
-
-2005-07-24 Mo DeJong <mdejong@users.sourceforge.net>
-
- * tcl.m4 (TEA_PROG_TCLSH, TEA_BUILD_TCLSH,
- TEA_PROG_WISH, TEA_BUILD_WISH):
- Split confused search for tclsh on PATH and
- build and install locations into two macros.
- TEA_PROG_TCLSH and TEA_PROG_WISH search the
- system PATH for an installed tclsh or wish.
- The TEA_BUILD_TCLSH and TEA_BUILD_WISH
- macros determine the name of tclsh or
- wish in the Tcl or Tk build directory even
- if tclsh or wish has not yet been built.
- [Tcl bug 1160114]
- [Tcl patch 1244153]
-
-2005-06-23 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4 (TEA_PRIVATE_TK_HEADERS): add ${TK_SRC_DIR}/macosx to
- TK_INCLUDES when building against TkAqua.
-
- * tcl.m4 (TEA_PATH_X): fixed missing comma in AC_DEFINE
-
- * tcl.m4: changes to better support framework builds of Tcl and Tk out
- of the box: search framework install locations for *Config.sh, and if in
- presence of a framework build, use the framework's Headers and
- PrivateHeaders directories for public and private includes. [FR 947735]
-
-2005-06-18 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4 (Darwin): add -headerpad_max_install_names to LDFLAGS to
- ensure we can always relocate binaries with install_name_tool.
-
-2005-06-04 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4 (TEA_PATH_X): for TEA_WINDOWINGSYSTEM == aqua, check if xlib
- compat headers are available in tkheaders location, otherwise add xlib
- sourcedir to TK_XINCLUDES.
-
-2005-04-25 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4: added AC_DEFINE* descriptions (from core tcl.m4) to allow
- use with autoheader.
- (Darwin): added configure checks for recently added linker flags
- -single_module and -search_paths_first to allow building with older
- tools (and on Mac OS X 10.1), use -single_module in SHLIB_LD.
- (TEA_MISSING_POSIX_HEADERS): added caching of dirent.h check.
- (TEA_BUGGY_STRTOD): added caching (sync with core tcl.m4).
-
-2005-03-24 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4 (TEA_TCL_64BIT_FLAGS): use Tcl header defaults for wide
- int type only on Windows when __int64 is detected as valid.
-
-2005-03-24 Don Porter <dgp@users.sf.net>
-
- * README.txt: Update reference to "SC_* macros" to "TEA_* macros".
- * tcl.m4: Incorporated recent improvements in SC_PATH_TCLCONFIG
- and SC_PATH_TKCONFIG into TEA_PATH_TCLCONFIG and TEA_PATH_TKCONFIG.
- Corrected search path in TEA_PATH_CONFIG and added
- AC_SUBST($1_BIN_DIR) to TEA_LOAD_CONFIG so that packages that load
- the configuration of another package can know where they loaded
- it from.
-
-2005-03-18 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4 (TEA_CONFIG_CFLAGS): correct 2005-03-17 change to have
- variant LD_SEARCH_FLAGS for gcc and cc builds.
-
- * tcl.m4 (TEA_PROG_TCLSH, TEA_PROG_WISH): correct x-compile check.
-
-2005-03-17 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: Correct gcc build and HP-UX-11.
-
-2005-02-08 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4 (TEA_ADD_LIBS): don't touch lib args starting with -.
- (TEA_CONFIG_CFLAGS): only define _DLL for CE in shared build.
- (TEA_MAKE_LIB): set RANLIB* to : on Windows (it's not needed).
-
-2005-02-01 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: redo of 2005-01-27 changes to correctly handle paths
- with spaces. Win/CE and Win/64 builds now require a prebuilt
- tclsh to handle conversion to short pathnames. This is done in
- the new TEA_PATH_NOSPACE macro. For Win/CE|64, make CC just the
- compiler and move the necessary includes to CFLAGS.
- (TEA_CONFIG_CFLAGS): Add Solaris 64-bit gcc build support.
- (TEA_PROG_TCLSH, TEA_PROG_WISH): Allow TCLSH_PROG and WISH_PROG to
- be set in the env and prevent resetting.
- (TEA_ADD_LIBS): On Windows using GCC (mingw), convert foo.lib
- args to -lfoo, for use with mingw.
- *** POTENTIAL INCOMPATABILITY ***
- (TEA_CONFIG_CFLAGS): Fix AIX gcc builds to work out-of-box.
- Bumped TEA to 3.2.
-
-2005-01-27 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: remove cygpath calls to support msys.
- Update base CE build assumption to "420,ARMV4,ARM,Pocket PC 2003".
- Make STLIB_LD use $LINKBIN -lib.
-
-2005-01-25 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4 (Darwin): fixed bug with static build linking to dynamic
- library in /usr/lib etc instead of linking to static library earlier
- in search path. [Tcl Bug 956908]
- Removed obsolete references to Rhapsody.
-
-2004-12-29 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: Updates for VC7 compatibility, fixing CFLAGS and LDFLAGS
- options, using better default -O levels. [Bug 1092952, 1091967]
-
-2004-12-29 Joe English <jenglish@users.sourceforge.net>
-
- * tcl.m4: Do not use ${DBGX} suffix when building
- shared libraries [patch #1081595, TIP #34]
-
-2004-09-07 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4 (TEA_CONFIG_CFLAGS): support eVC4 Win/CE builds
-
-2004-08-10 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4 (TEA_INIT, TEA_PREFIX): update handling of exec_prefix to
- work around subdir configures since autoconf only propagates the
- prefix (not exec_prefix).
-
-2004-07-23 Daniel Steffen <das@users.sourceforge.net>
-
- * tcl.m4 (TEA_CONFIG_CFLAGS): Darwin section: brought inline with
- Tcl 8.5 HEAD config, removed core specific & obsolete settings.
-
-2004-07-22 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4 (TEA_PATH_X): check in TK_DEFS for MAC_OSX_TK to see if
- we are compiling on Aqua. Add TEA_WINDOWINGSYSTEM var that
- reflects 'tk windowingsystem' value.
-
-2004-07-16 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4 (TEA_ENABLE_THREADS): force a threaded build when
- building against a threaded core.
- (CFLAGS_WARNING): Remove -Wconversion for gcc builds
- (TEA_CONFIG_CFLAGS): Reorder configure.in for better 64-bit build
- configuration, replacing EXTRA_CFLAGS with CFLAGS. [Bug #874058]
- Update to latest Tcl 8.5 head config settings.
- Call this TEA version 3.1.
-
-2004-04-29 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4 (TEA_TCL_64BIT_FLAGS): replace AC_TRY_RUN test with
- AC_TRY_COMPILE for the long vs. long long check. (kenny)
-
-2004-04-26 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4 (TEA_TCL_64BIT_FLAGS): update against core tcl.m4 to
- define TCL_WIDE_INT_IS_LONG if 'using long'.
-
-2004-03-19 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: correct Windows builds getting LDFLAGS info in MAKE_LIB
-
-2004-02-11 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: correct TCL_INCLUDES for private headers on Windows - it
- doesn't need the eval.
-
-2004-02-10 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: don't require TK_INCLUDES and TCL_INCLUDES to have the
- DIR_NATIVE vars defined when using private headers on unix.
- Allow $... to TEA_ADD_SOURCES for constructs like
- TEA_ADD_SOURCES([\$(WIN_OBJECTS)]), that allow the developer to
- place more in the Makefile.in.
- tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and
- CHECK on limits.h
-
-2003-12-10 Jeff Hobbs <jeffh@ActiveState.com>
-
- * Makefile.in: added TEA_ADD_LIBS, TEA_ADD_INCLUDES and
- * configure: TEA_ADD_CFLAGS to configurable parameters with
- * configure.in: PKG_* equivs in the Makefile. This allows the
- * tclconfig/tcl.m4: user to worry less about actual magic VAR names.
- Corrected Makefile.in to note that TEA_ADD_TCL_SOURCES requires
- exact file names.
-
-2003-12-09 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: updated OpenBSD support based on [Patch #775246] (cassoff)
-
-2003-12-05 Jeff Hobbs <jeffh@ActiveState.com>
-
- * configure:
- * configure.in:
- * Makefile.in (VPATH): readd $(srcdir) to front of VPATH as the
- first part of VPATH can get chopped off.
- Change .c.$(OBJEXT) rule to .c.@OBJEXT@ to support more makes.
- * tclconfig/tcl.m4: add TEA_ADD_STUB_SOURCES to support libstub
- generation and TEA_ADD_TCL_SOURCES to replace RUNTIME_SOURCES as
- the way the user specifies library files.
-
-2003-12-03 Jeff Hobbs <jeffh@ActiveState.com>
-
- * configure: Update of TEA spec to (hopefully) simplify
- * configure.in: some aspects of TEA by making use of more
- * Makefile.in: AC 2.5x features. Use PACKAGE_NAME (instead
- * generic/tclsample.c: of PACKAGE) and PACKAGE_VERSION (instead of
- * tclconfig/tcl.m4: VERSION) arguments to AC_INIT as the TEA
- package name and version.
- Provide a version argument to TEA_INIT - starting with 3.0.
- Drop all use of interior shell substs that older makefiles didn't
- like. Use PKG_* naming convention instead.
- Move specification of source files and public headers into
- configure.in with TEA_ADD_SOURCES and TEA_ADD_HEADERS. These will
- be munged during ./configure into the right obj file names (no
- $(SOURCES:.c=.obj) needed).
- There is almost nothing that should be touched in Makefile.in now
- for the developer. May want to add a TEA_ADD_TCL_SOURCES for the
- RUNTIME_SOURCES that remains.
- Use SHLID_LD_FLAGS (instead of SHLID_LDFLAGS) as Tcl does.
- Only specify the user requested LDFLAGS/CFLAGS in the Makefile,
- don't mention the _OPTIMIZE/_DEBUG variants.
-
-2003-10-15 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: create a TEA_SETUP_COMPILER_CC the precedes the
- TEA_SETUP_COMPILER macro. They are split so the check for CC
- occurs before any use of CC. Also add AC_PROG_CPP to the compiler
- checks.
-
-2003-10-06 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: Updated for autoconf 2.5x prereq.
- Where TCL_WIDE_INT_TYPE would be __int64, defer to the code checks
- in tcl.h, which also handles TCL_LL_MODIFIER* properly.
-
-2003-04-22 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: correct default setting of ARCH for WinCE builds.
- Correct \ escaping for CE sed macros.
-
-2003-04-10 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: replace $(syscal) construct with older `syscall` for
- systems where sh != bash.
-
-2003-04-09 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4 (TEA_WITH_CELIB): add --enable-wince and --with-celib
- options for Windows/CE compilation support. Requires the
- Microsoft eMbedded SDK and Keuchel's celib emulation layer.
-
-2003-02-18 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4 (TEA_ENABLE_THREADS): Make sure -lpthread gets passed on
- the link line when checking for the pthread_attr_setstacksize
- symbol. (dejong)
-
- * tcl.m4 (TEA_SETUP_COMPILER): added default calls to
- TEA_TCL_EARLY_FLAGS, TEA_TCL_64BIT_FLAGS,
- TEA_MISSING_POSIX_HEADERS and TEA_BUGGY_STRTOD.
-
-2003-02-14 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: correct HP-UX ia64 --enable-64bit build flags
-
-2003-01-29 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: check $prefix/lib as well as $exec_prefix/lib when
- looking for tcl|tkConfig.sh, as this check is done before we would
- set exec_prefix when the user does not define it.
-
-2003-01-21 Mo DeJong <mdejong@users.sourceforge.net>
-
- * tcl.m4 (TEA_CONFIG_CFLAGS): Fix build support
- for mingw, the previous implementation would
- use VC++ when compiling with mingw gcc. Don't
- pass -fPIC since gcc always compiles pic code
- under win32. Change some hard coded cases
- of gcc to ${CC}.
-
-2002-10-15 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: move the CFLAGS definition from TEA_ENABLE_SHARED to
- TEA_MAKE_LIB because setting too early confuses other AC_* macros.
- Correct the HP-11 SHLIB_LD_LIBS setting.
-
- * tcl.m4: add the CFLAGS definition into TEA_ENABLE_SHARED and
- make it pick up the env CFLAGS at configure time.
-
-2002-10-09 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: add --enable-symbols=mem option to enable TCL_MEM_DEBUG.
- Improved AIX 64-bit build support, allow it on AIX-4 as well.
- Enable 64-bit HP-11 compilation with gcc.
- Enable 64-bit IRIX64-6 cc build support.
- Correct FreeBSD thread library linkage.
- Add OSF1 static build support.
- Improve SunOS-5 shared build SHLIB_LD macro.
-
-2002-07-20 Zoran Vasiljevic <zoran@archiware.com>
-
- * tcl.m4: Added MINGW32 to list of systems checked for Windows build.
- Also, fixes some indentation issues with "--with-XXX" options.
-
-2002-04-23 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4 (TEA_ENABLE_THREADS): added USE_THREAD_ALLOC define to
- use new threaded allocatory by default on Unix for Tcl 8.4.
- (TEA_CONFIG_CFLAGS): corrected LD_SEARCH_FLAGS for FreeBSD-3+.
-
-2002-04-22 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4 (TEA_SETUP_COMPILER): removed call to AC_CYGWIN so that
- we can use autoconf 2.5x as well as 2.13. This prevents us from
- being able to warn against the use of cygwin gcc at configure
- time, but allows autoconf 2.5x, which is what is shipped with most
- newer systems.
-
-2002-04-11 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: Enabled COFF as well as CV style debug info with
- --enable-symbols to allow Dr. Watson users to see function info.
- More info on debugging levels can be obtained at:
- http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp
-
-2002-04-03 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: change all SC_* macros to TEA_*. The SC_ was for
- Scriptics, which is no more. TEA represents a better, independent
- prefix that won't need changing.
- Added preliminary mingw gcc support. [Patch #538772]
- Added TEA_PREFIX macro that handles defaulting the prefix and
- exec_prefix vars to those used by Tcl if none were specified.
- Added TEA_SETUP_COMPILER macro that encompasses the AC_PROG_CC
- check and several other basic AC_PROG checks needed for making
- executables. This greatly simplifies user's configure.in files.
- Collapsed AIX-5 defines into AIX-* with extra checks for doing the
- ELF stuff on AIX-5-ia64.
- Updated TEA_ENABLE_THREADS to take an optional arg to allow
- switching it on by default (for Thread) and add sanity checking to
- warn the user if configuring threads incompatibly.
-
-2002-03-29 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: made sure that SHLIB_LDFLAGS was set to LDFLAGS_DEFAULT.
- Removed --enable-64bit support for AIX-4 because it wasn't correct.
- Added -MT or -MD Windows linker switches to properly support
- symbols-enabled builds.
-
-2002-03-28 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: called AC_MSG_ERROR when SC_TEA_INIT wasn't called first
- instead of calling it as that inlines it each time in shell code.
- Changed Windows CFLAGS_OPTIMIZE to use -O2 instead of -Oti.
- Noted TCL_LIB_VERSIONS_OK=nodots for Windows builds.
- A few changes to support itcl (and perhaps others):
- Added support for making your own stub libraries to SC_MAKE_LIB.
- New SC_PATH_CONFIG and SC_LOAD_CONFIG that take a package name arg
- and find that ${pkg}Config.sh file. itk uses this for itcl.
-
-2002-03-27 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: made SC_LOAD_TKCONFIG recognize when working with a Tk
- build dir setup.
- Added EXTRA_CFLAGS and SHLIB_LD_LIBS substs to SC_CONFIG_CFLAGS.
- Added XLIBSW onto LIBS when it is defined.
- Remove TCL_LIBS from MAKE_LIB and correctly use SHLIB_LD_LIBS
- instead to not rely as much on tclConfig.sh cached info.
- Add TK_BIN_DIR to paths to find wish in SC_PROG_WISH.
- These move towards making TEA much more independent of *Config.sh.
-
-2002-03-19 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: corrected forgotten (UN)SHARED_LIB_SUFFIX and
- SHLIB_SUFFIX defines for Win.
- (SC_PATH_X): made this only do the check on unix platforms.
-
-2002-03-12 Jeff Hobbs <jeffh@ActiveState.com>
-
- * README.txt: updated to reflect fewer files
-
-2002-03-06 Jeff Hobbs <jeffh@ActiveState.com>
-
- * config.guess (removed):
- * config.sub (removed): removed unnecessary files
-
- * installFile.tcl (removed):
- * mkinstalldirs (removed): these aren't really necessary for
- making TEA work
-
- * tcl.m4 (SC_PUBLIC_TCL_HEADERS, SC_PUBLIC_TK_HEADERS): don't
- check /usr(/local)/include for includes on Windows when not using
- gcc
-
-2002-03-05 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tcl.m4: added warnings on Windows, removed RELPATH define and
- added TCL_LIBS to MAKE_LIB macro.
-
- This import represents 2.0.0, or a new start at attempting to
- make TEA much easier for C extension developers.
-
- **** moved from tclpro project to core tcl project, ****
- **** renamed to 'tclconfig' ****
-
-2001-03-15 Karl Lehenbauer <karl@procplace.com>
-
- * installFile.tcl: Added updating of the modification time of
- the target file whether we overwrote it or decided that it
- hadn't changed. This was necessary for us to be able to
- determine whether or not a module install touched the file.
-
-2001-03-08 Karl Lehenbauer <karl@procplace.com>
-
- * installFile.tcl: Added support for converting new-style (1.1+)
- Cygnus drive paths to Tcl-style.
-
-2001-01-15 <brent.welch@interwoven.com>
-
- * tcl.m4: Added FreeBSD clause.
-
-2001-01-03 <brent.welch@interwoven.com>
-
- * tcl.m4: Fixed typo in SC_LIB_SPEC where it is checking
- for exec-prefix.
-
-2000-12-01 <brent.welch@interwoven.com>
-
- * tcl.m4: Concatenated most of the Ajuba acsite.m4 file
- so we don't need to modify the autoconf installation.
- * config.guess:
- * config.sub:
- * installFile.tcl:
- Added files from the itcl config subdirectory,
- which should go away.
-
-2000-7-29 <welch@ajubasolutions.com>
-
- * Fixed the use of TCL_SRC_DIR and TK_SRC_DIR within
- TCL_PRIVATE_INCLUDES and TK_PRIVATE_INCLUDES to match their recent
- change from $(srcdir) to $(srcdir)/..
diff --git a/tclzipfs/tclconfig/README.txt b/tclzipfs/tclconfig/README.txt
deleted file mode 100644
index 59b5a3e..0000000
--- a/tclzipfs/tclconfig/README.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-These files comprise the basic building blocks for a Tcl Extension
-Architecture (TEA) extension. For more information on TEA see:
-
- http://www.tcl.tk/doc/tea/
-
-This package is part of the Tcl project at SourceForge, and latest
-sources should be available there:
-
- http://tcl.sourceforge.net/
-
-This package is a freely available open source package. You can do
-virtually anything you like with it, such as modifying it, redistributing
-it, and selling it either in whole or in part.
-
-CONTENTS
-========
-The following is a short description of the files you will find in
-the sample extension.
-
-README.txt This file
-
-install-sh Program used for copying binaries and script files
- to their install locations.
-
-tcl.m4 Collection of Tcl autoconf macros. Included by a package's
- aclocal.m4 to define TEA_* macros.
diff --git a/tclzipfs/tclconfig/install-sh b/tclzipfs/tclconfig/install-sh
deleted file mode 100755
index 7c34c3f..0000000
--- a/tclzipfs/tclconfig/install-sh
+++ /dev/null
@@ -1,528 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2011-04-20.01; # UTC
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.
-
-nl='
-'
-IFS=" "" $nl"
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit=${DOITPROG-}
-if test -z "$doit"; then
- doit_exec=exec
-else
- doit_exec=$doit
-fi
-
-# Put in absolute file names if you don't have them in your path;
-# or use environment vars.
-
-chgrpprog=${CHGRPPROG-chgrp}
-chmodprog=${CHMODPROG-chmod}
-chownprog=${CHOWNPROG-chown}
-cmpprog=${CMPPROG-cmp}
-cpprog=${CPPROG-cp}
-mkdirprog=${MKDIRPROG-mkdir}
-mvprog=${MVPROG-mv}
-rmprog=${RMPROG-rm}
-stripprog=${STRIPPROG-strip}
-
-posix_glob='?'
-initialize_posix_glob='
- test "$posix_glob" != "?" || {
- if (set -f) 2>/dev/null; then
- posix_glob=
- else
- posix_glob=:
- fi
- }
-'
-
-posix_mkdir=
-
-# Desired mode of installed file.
-mode=0755
-
-chgrpcmd=
-chmodcmd=$chmodprog
-chowncmd=
-mvcmd=$mvprog
-rmcmd="$rmprog -f"
-stripcmd=
-
-src=
-dst=
-dir_arg=
-dst_arg=
-
-copy_on_change=false
-no_target_directory=
-
-usage="\
-Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
- or: $0 [OPTION]... SRCFILES... DIRECTORY
- or: $0 [OPTION]... -t DIRECTORY SRCFILES...
- or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
- --help display this help and exit.
- --version display version info and exit.
-
- -c (ignored)
- -C install only if different (preserve the last data modification time)
- -d create directories instead of installing files.
- -g GROUP $chgrpprog installed files to GROUP.
- -m MODE $chmodprog installed files to MODE.
- -o USER $chownprog installed files to USER.
- -s $stripprog installed files.
- -S $stripprog installed files.
- -t DIRECTORY install into DIRECTORY.
- -T report an error if DSTFILE is a directory.
-
-Environment variables override the default commands:
- CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
- RMPROG STRIPPROG
-"
-
-while test $# -ne 0; do
- case $1 in
- -c) ;;
-
- -C) copy_on_change=true;;
-
- -d) dir_arg=true;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift;;
-
- --help) echo "$usage"; exit $?;;
-
- -m) mode=$2
- case $mode in
- *' '* | *' '* | *'
-'* | *'*'* | *'?'* | *'['*)
- echo "$0: invalid mode: $mode" >&2
- exit 1;;
- esac
- shift;;
-
- -o) chowncmd="$chownprog $2"
- shift;;
-
- -s) stripcmd=$stripprog;;
-
- -S) stripcmd="$stripprog $2"
- shift;;
-
- -t) dst_arg=$2
- shift;;
-
- -T) no_target_directory=true;;
-
- --version) echo "$0 $scriptversion"; exit $?;;
-
- --) shift
- break;;
-
- -*) echo "$0: invalid option: $1" >&2
- exit 1;;
-
- *) break;;
- esac
- shift
-done
-
-if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
- # When -d is used, all remaining arguments are directories to create.
- # When -t is used, the destination is already specified.
- # Otherwise, the last argument is the destination. Remove it from $@.
- for arg
- do
- if test -n "$dst_arg"; then
- # $@ is not empty: it contains at least $arg.
- set fnord "$@" "$dst_arg"
- shift # fnord
- fi
- shift # arg
- dst_arg=$arg
- done
-fi
-
-if test $# -eq 0; then
- if test -z "$dir_arg"; then
- echo "$0: no input file specified." >&2
- exit 1
- fi
- # It's OK to call `install-sh -d' without argument.
- # This can happen when creating conditional directories.
- exit 0
-fi
-
-if test -z "$dir_arg"; then
- do_exit='(exit $ret); exit $ret'
- trap "ret=129; $do_exit" 1
- trap "ret=130; $do_exit" 2
- trap "ret=141; $do_exit" 13
- trap "ret=143; $do_exit" 15
-
- # Set umask so as not to create temps with too-generous modes.
- # However, 'strip' requires both read and write access to temps.
- case $mode in
- # Optimize common cases.
- *644) cp_umask=133;;
- *755) cp_umask=22;;
-
- *[0-7])
- if test -z "$stripcmd"; then
- u_plus_rw=
- else
- u_plus_rw='% 200'
- fi
- cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
- *)
- if test -z "$stripcmd"; then
- u_plus_rw=
- else
- u_plus_rw=,u+rw
- fi
- cp_umask=$mode$u_plus_rw;;
- esac
-fi
-
-for src
-do
- # Protect names starting with `-'.
- case $src in
- -*) src=./$src;;
- esac
-
- if test -n "$dir_arg"; then
- dst=$src
- dstdir=$dst
- test -d "$dstdir"
- dstdir_status=$?
- else
-
- # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
- # might cause directories to be created, which would be especially bad
- # if $src (and thus $dsttmp) contains '*'.
- if test ! -f "$src" && test ! -d "$src"; then
- echo "$0: $src does not exist." >&2
- exit 1
- fi
-
- if test -z "$dst_arg"; then
- echo "$0: no destination specified." >&2
- exit 1
- fi
-
- dst=$dst_arg
- # Protect names starting with `-'.
- case $dst in
- -*) dst=./$dst;;
- esac
-
- # If destination is a directory, append the input filename; won't work
- # if double slashes aren't ignored.
- if test -d "$dst"; then
- if test -n "$no_target_directory"; then
- echo "$0: $dst_arg: Is a directory" >&2
- exit 1
- fi
- dstdir=$dst
- dst=$dstdir/`basename "$src"`
- dstdir_status=0
- else
- # Prefer dirname, but fall back on a substitute if dirname fails.
- dstdir=`
- (dirname "$dst") 2>/dev/null ||
- expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$dst" : 'X\(//\)[^/]' \| \
- X"$dst" : 'X\(//\)$' \| \
- X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
- echo X"$dst" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'
- `
-
- test -d "$dstdir"
- dstdir_status=$?
- fi
- fi
-
- obsolete_mkdir_used=false
-
- if test $dstdir_status != 0; then
- case $posix_mkdir in
- '')
- # Create intermediate dirs using mode 755 as modified by the umask.
- # This is like FreeBSD 'install' as of 1997-10-28.
- umask=`umask`
- case $stripcmd.$umask in
- # Optimize common cases.
- *[2367][2367]) mkdir_umask=$umask;;
- .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
-
- *[0-7])
- mkdir_umask=`expr $umask + 22 \
- - $umask % 100 % 40 + $umask % 20 \
- - $umask % 10 % 4 + $umask % 2
- `;;
- *) mkdir_umask=$umask,go-w;;
- esac
-
- # With -d, create the new directory with the user-specified mode.
- # Otherwise, rely on $mkdir_umask.
- if test -n "$dir_arg"; then
- mkdir_mode=-m$mode
- else
- mkdir_mode=
- fi
-
- posix_mkdir=false
- case $umask in
- *[123567][0-7][0-7])
- # POSIX mkdir -p sets u+wx bits regardless of umask, which
- # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
- ;;
- *)
- tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
- trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
-
- if (umask $mkdir_umask &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
- then
- if test -z "$dir_arg" || {
- # Check for POSIX incompatibilities with -m.
- # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
- # other-writeable bit of parent directory when it shouldn't.
- # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
- ls_ld_tmpdir=`ls -ld "$tmpdir"`
- case $ls_ld_tmpdir in
- d????-?r-*) different_mode=700;;
- d????-?--*) different_mode=755;;
- *) false;;
- esac &&
- $mkdirprog -m$different_mode -p -- "$tmpdir" && {
- ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
- test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
- }
- }
- then posix_mkdir=:
- fi
- rmdir "$tmpdir/d" "$tmpdir"
- else
- # Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
- fi
- trap '' 0;;
- esac;;
- esac
-
- if
- $posix_mkdir && (
- umask $mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
- )
- then :
- else
-
- # The umask is ridiculous, or mkdir does not conform to POSIX,
- # or it failed possibly due to a race condition. Create the
- # directory the slow way, step by step, checking for races as we go.
-
- case $dstdir in
- /*) prefix='/';;
- -*) prefix='./';;
- *) prefix='';;
- esac
-
- eval "$initialize_posix_glob"
-
- oIFS=$IFS
- IFS=/
- $posix_glob set -f
- set fnord $dstdir
- shift
- $posix_glob set +f
- IFS=$oIFS
-
- prefixes=
-
- for d
- do
- test -z "$d" && continue
-
- prefix=$prefix$d
- if test -d "$prefix"; then
- prefixes=
- else
- if $posix_mkdir; then
- (umask=$mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
- # Don't fail if two instances are running concurrently.
- test -d "$prefix" || exit 1
- else
- case $prefix in
- *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
- *) qprefix=$prefix;;
- esac
- prefixes="$prefixes '$qprefix'"
- fi
- fi
- prefix=$prefix/
- done
-
- if test -n "$prefixes"; then
- # Don't fail if two instances are running concurrently.
- (umask $mkdir_umask &&
- eval "\$doit_exec \$mkdirprog $prefixes") ||
- test -d "$dstdir" || exit 1
- obsolete_mkdir_used=true
- fi
- fi
- fi
-
- if test -n "$dir_arg"; then
- { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
- { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
- test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
- else
-
- # Make a couple of temp file names in the proper directory.
- dsttmp=$dstdir/_inst.$$_
- rmtmp=$dstdir/_rm.$$_
-
- # Trap to clean up those temp files at exit.
- trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-
- # Copy the file name to the temp name.
- (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
-
- # and set any options; do chmod last to preserve setuid bits.
- #
- # If any of these fail, we abort the whole thing. If we want to
- # ignore errors from any of these, just make sure not to ignore
- # errors from the above "$doit $cpprog $src $dsttmp" command.
- #
- { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
- { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
- { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
-
- # If -C, don't bother to copy if it wouldn't change the file.
- if $copy_on_change &&
- old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
- new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
-
- eval "$initialize_posix_glob" &&
- $posix_glob set -f &&
- set X $old && old=:$2:$4:$5:$6 &&
- set X $new && new=:$2:$4:$5:$6 &&
- $posix_glob set +f &&
-
- test "$old" = "$new" &&
- $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
- then
- rm -f "$dsttmp"
- else
- # Rename the file to the real destination.
- $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
-
- # The rename failed, perhaps because mv can't rename something else
- # to itself, or perhaps because mv is so ancient that it does not
- # support -f.
- {
- # Now remove or move aside any old file at destination location.
- # We try this two ways since rm can't unlink itself on some
- # systems and the destination file might be busy for other
- # reasons. In this case, the final cleanup might fail but the new
- # file should still install successfully.
- {
- test ! -f "$dst" ||
- $doit $rmcmd -f "$dst" 2>/dev/null ||
- { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
- { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
- } ||
- { echo "$0: cannot unlink or rename $dst" >&2
- (exit 1); exit 1
- }
- } &&
-
- # Now rename the file to the real destination.
- $doit $mvcmd "$dsttmp" "$dst"
- }
- fi || exit 1
-
- trap '' 0
- fi
-done
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/tclzipfs/tclconfig/tcl.m4 b/tclzipfs/tclconfig/tcl.m4
deleted file mode 100644
index 655be25..0000000
--- a/tclzipfs/tclconfig/tcl.m4
+++ /dev/null
@@ -1,4176 +0,0 @@
-# tcl.m4 --
-#
-# This file provides a set of autoconf macros to help TEA-enable
-# a Tcl extension.
-#
-# Copyright (c) 1999-2000 Ajuba Solutions.
-# Copyright (c) 2002-2005 ActiveState Corporation.
-#
-# See the file "license.terms" for information on usage and redistribution
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-
-AC_PREREQ(2.57)
-
-# Possible values for key variables defined:
-#
-# TEA_WINDOWINGSYSTEM - win32 aqua x11 (mirrors 'tk windowingsystem')
-# TEA_PLATFORM - windows unix
-# TEA_TK_EXTENSION - True if this is a Tk extension
-#
-
-#------------------------------------------------------------------------
-# TEA_PATH_TCLCONFIG --
-#
-# Locate the tclConfig.sh file and perform a sanity check on
-# the Tcl compile flags
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Adds the following arguments to configure:
-# --with-tcl=...
-#
-# Defines the following vars:
-# TCL_BIN_DIR Full path to the directory containing
-# the tclConfig.sh file
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PATH_TCLCONFIG], [
- dnl TEA specific: Make sure we are initialized
- AC_REQUIRE([TEA_INIT])
- #
- # Ok, lets find the tcl configuration
- # First, look for one uninstalled.
- # the alternative search directory is invoked by --with-tcl
- #
-
- if test x"${no_tcl}" = x ; then
- # we reset no_tcl in case something fails here
- no_tcl=true
- AC_ARG_WITH(tcl,
- AC_HELP_STRING([--with-tcl],
- [directory containing tcl configuration (tclConfig.sh)]),
- with_tclconfig="${withval}")
- AC_MSG_CHECKING([for Tcl configuration])
- AC_CACHE_VAL(ac_cv_c_tclconfig,[
-
- # First check to see if --with-tcl was specified.
- if test x"${with_tclconfig}" != x ; then
- case "${with_tclconfig}" in
- */tclConfig.sh )
- if test -f "${with_tclconfig}"; then
- AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself])
- with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`"
- fi ;;
- esac
- if test -f "${with_tclconfig}/tclConfig.sh" ; then
- ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`"
- else
- AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh])
- fi
- fi
-
- # then check for a private Tcl installation
- if test x"${ac_cv_c_tclconfig}" = x ; then
- for i in \
- ../tcl \
- `ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
- `ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
- ../../tcl \
- `ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
- `ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
- ../../../tcl \
- `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
- `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
- if test "${TEA_PLATFORM}" = "windows" \
- -a -f "$i/win/tclConfig.sh" ; then
- ac_cv_c_tclconfig="`(cd $i/win; pwd)`"
- break
- fi
- if test -f "$i/unix/tclConfig.sh" ; then
- ac_cv_c_tclconfig="`(cd $i/unix; pwd)`"
- break
- fi
- done
- fi
-
- # on Darwin, check in Framework installation locations
- if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then
- for i in `ls -d ~/Library/Frameworks 2>/dev/null` \
- `ls -d /Library/Frameworks 2>/dev/null` \
- `ls -d /Network/Library/Frameworks 2>/dev/null` \
- `ls -d /System/Library/Frameworks 2>/dev/null` \
- `ls -d /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/Library/Frameworks/Tcl.framework 2>/dev/null` \
- `ls -d /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/Network/Library/Frameworks/Tcl.framework 2>/dev/null` \
- `ls -d /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Tcl.framework 2>/dev/null` \
- ; do
- if test -f "$i/Tcl.framework/tclConfig.sh" ; then
- ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`"
- break
- fi
- done
- fi
-
- # TEA specific: on Windows, check in common installation locations
- if test "${TEA_PLATFORM}" = "windows" \
- -a x"${ac_cv_c_tclconfig}" = x ; then
- for i in `ls -d C:/Tcl/lib 2>/dev/null` \
- `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \
- ; do
- if test -f "$i/tclConfig.sh" ; then
- ac_cv_c_tclconfig="`(cd $i; pwd)`"
- break
- fi
- done
- fi
-
- # check in a few common install locations
- if test x"${ac_cv_c_tclconfig}" = x ; then
- for i in `ls -d ${libdir} 2>/dev/null` \
- `ls -d ${exec_prefix}/lib 2>/dev/null` \
- `ls -d ${prefix}/lib 2>/dev/null` \
- `ls -d /usr/local/lib 2>/dev/null` \
- `ls -d /usr/contrib/lib 2>/dev/null` \
- `ls -d /usr/pkg/lib 2>/dev/null` \
- `ls -d /usr/lib 2>/dev/null` \
- `ls -d /usr/lib64 2>/dev/null` \
- `ls -d /usr/lib/tcl8.6 2>/dev/null` \
- `ls -d /usr/lib/tcl8.5 2>/dev/null` \
- `ls -d /usr/local/lib/tcl8.6 2>/dev/null` \
- `ls -d /usr/local/lib/tcl8.5 2>/dev/null` \
- `ls -d /usr/local/lib/tcl/tcl8.6 2>/dev/null` \
- `ls -d /usr/local/lib/tcl/tcl8.5 2>/dev/null` \
- ; do
- if test -f "$i/tclConfig.sh" ; then
- ac_cv_c_tclconfig="`(cd $i; pwd)`"
- break
- fi
- done
- fi
-
- # check in a few other private locations
- if test x"${ac_cv_c_tclconfig}" = x ; then
- for i in \
- ${srcdir}/../tcl \
- `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
- `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
- if test "${TEA_PLATFORM}" = "windows" \
- -a -f "$i/win/tclConfig.sh" ; then
- ac_cv_c_tclconfig="`(cd $i/win; pwd)`"
- break
- fi
- if test -f "$i/unix/tclConfig.sh" ; then
- ac_cv_c_tclconfig="`(cd $i/unix; pwd)`"
- break
- fi
- done
- fi
- ])
-
- if test x"${ac_cv_c_tclconfig}" = x ; then
- TCL_BIN_DIR="# no Tcl configs found"
- AC_MSG_ERROR([Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh])
- else
- no_tcl=
- TCL_BIN_DIR="${ac_cv_c_tclconfig}"
- AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh])
- fi
- fi
-])
-
-#------------------------------------------------------------------------
-# TEA_PATH_TKCONFIG --
-#
-# Locate the tkConfig.sh file
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Adds the following arguments to configure:
-# --with-tk=...
-#
-# Defines the following vars:
-# TK_BIN_DIR Full path to the directory containing
-# the tkConfig.sh file
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PATH_TKCONFIG], [
- #
- # Ok, lets find the tk configuration
- # First, look for one uninstalled.
- # the alternative search directory is invoked by --with-tk
- #
-
- if test x"${no_tk}" = x ; then
- # we reset no_tk in case something fails here
- no_tk=true
- AC_ARG_WITH(tk,
- AC_HELP_STRING([--with-tk],
- [directory containing tk configuration (tkConfig.sh)]),
- with_tkconfig="${withval}")
- AC_MSG_CHECKING([for Tk configuration])
- AC_CACHE_VAL(ac_cv_c_tkconfig,[
-
- # First check to see if --with-tkconfig was specified.
- if test x"${with_tkconfig}" != x ; then
- case "${with_tkconfig}" in
- */tkConfig.sh )
- if test -f "${with_tkconfig}"; then
- AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself])
- with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`"
- fi ;;
- esac
- if test -f "${with_tkconfig}/tkConfig.sh" ; then
- ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`"
- else
- AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh])
- fi
- fi
-
- # then check for a private Tk library
- if test x"${ac_cv_c_tkconfig}" = x ; then
- for i in \
- ../tk \
- `ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
- `ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \
- ../../tk \
- `ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
- `ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \
- ../../../tk \
- `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
- `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
- if test "${TEA_PLATFORM}" = "windows" \
- -a -f "$i/win/tkConfig.sh" ; then
- ac_cv_c_tkconfig="`(cd $i/win; pwd)`"
- break
- fi
- if test -f "$i/unix/tkConfig.sh" ; then
- ac_cv_c_tkconfig="`(cd $i/unix; pwd)`"
- break
- fi
- done
- fi
-
- # on Darwin, check in Framework installation locations
- if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then
- for i in `ls -d ~/Library/Frameworks 2>/dev/null` \
- `ls -d /Library/Frameworks 2>/dev/null` \
- `ls -d /Network/Library/Frameworks 2>/dev/null` \
- `ls -d /System/Library/Frameworks 2>/dev/null` \
- `ls -d /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/Library/Frameworks/Tcl.framework 2>/dev/null` \
- `ls -d /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/Network/Library/Frameworks/Tcl.framework 2>/dev/null` \
- `ls -d /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Tcl.framework 2>/dev/null` \
- ; do
- if test -f "$i/Tk.framework/tkConfig.sh" ; then
- ac_cv_c_tkconfig="`(cd $i/Tk.framework; pwd)`"
- break
- fi
- done
- fi
-
- # check in a few common install locations
- if test x"${ac_cv_c_tkconfig}" = x ; then
- for i in `ls -d ${libdir} 2>/dev/null` \
- `ls -d ${exec_prefix}/lib 2>/dev/null` \
- `ls -d ${prefix}/lib 2>/dev/null` \
- `ls -d /usr/local/lib 2>/dev/null` \
- `ls -d /usr/contrib/lib 2>/dev/null` \
- `ls -d /usr/pkg/lib 2>/dev/null` \
- `ls -d /usr/lib 2>/dev/null` \
- `ls -d /usr/lib64 2>/dev/null` \
- `ls -d /usr/lib/tk8.6 2>/dev/null` \
- `ls -d /usr/lib/tk8.5 2>/dev/null` \
- `ls -d /usr/local/lib/tk8.6 2>/dev/null` \
- `ls -d /usr/local/lib/tk8.5 2>/dev/null` \
- `ls -d /usr/local/lib/tcl/tk8.6 2>/dev/null` \
- `ls -d /usr/local/lib/tcl/tk8.5 2>/dev/null` \
- ; do
- if test -f "$i/tkConfig.sh" ; then
- ac_cv_c_tkconfig="`(cd $i; pwd)`"
- break
- fi
- done
- fi
-
- # TEA specific: on Windows, check in common installation locations
- if test "${TEA_PLATFORM}" = "windows" \
- -a x"${ac_cv_c_tkconfig}" = x ; then
- for i in `ls -d C:/Tcl/lib 2>/dev/null` \
- `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \
- ; do
- if test -f "$i/tkConfig.sh" ; then
- ac_cv_c_tkconfig="`(cd $i; pwd)`"
- break
- fi
- done
- fi
-
- # check in a few other private locations
- if test x"${ac_cv_c_tkconfig}" = x ; then
- for i in \
- ${srcdir}/../tk \
- `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
- `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
- if test "${TEA_PLATFORM}" = "windows" \
- -a -f "$i/win/tkConfig.sh" ; then
- ac_cv_c_tkconfig="`(cd $i/win; pwd)`"
- break
- fi
- if test -f "$i/unix/tkConfig.sh" ; then
- ac_cv_c_tkconfig="`(cd $i/unix; pwd)`"
- break
- fi
- done
- fi
- ])
-
- if test x"${ac_cv_c_tkconfig}" = x ; then
- TK_BIN_DIR="# no Tk configs found"
- AC_MSG_ERROR([Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh])
- else
- no_tk=
- TK_BIN_DIR="${ac_cv_c_tkconfig}"
- AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh])
- fi
- fi
-])
-
-#------------------------------------------------------------------------
-# TEA_LOAD_TCLCONFIG --
-#
-# Load the tclConfig.sh file
-#
-# Arguments:
-#
-# Requires the following vars to be set:
-# TCL_BIN_DIR
-#
-# Results:
-#
-# Substitutes the following vars:
-# TCL_BIN_DIR
-# TCL_SRC_DIR
-# TCL_LIB_FILE
-# TCL_ZIP_FILE
-# TCL_ZIPFS_SUPPORT
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_LOAD_TCLCONFIG], [
- AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh])
-
- if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then
- AC_MSG_RESULT([loading])
- . "${TCL_BIN_DIR}/tclConfig.sh"
- else
- AC_MSG_RESULT([could not find ${TCL_BIN_DIR}/tclConfig.sh])
- fi
-
- # eval is required to do the TCL_DBGX substitution
- eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\""
- eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\""
-
- # If the TCL_BIN_DIR is the build directory (not the install directory),
- # then set the common variable name to the value of the build variables.
- # For example, the variable TCL_LIB_SPEC will be set to the value
- # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC
- # instead of TCL_BUILD_LIB_SPEC since it will work with both an
- # installed and uninstalled version of Tcl.
- if test -f "${TCL_BIN_DIR}/Makefile" ; then
- TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}"
- TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}"
- TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}"
- elif test "`uname -s`" = "Darwin"; then
- # If Tcl was built as a framework, attempt to use the libraries
- # from the framework at the given location so that linking works
- # against Tcl.framework installed in an arbitrary location.
- case ${TCL_DEFS} in
- *TCL_FRAMEWORK*)
- if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then
- for i in "`cd "${TCL_BIN_DIR}"; pwd`" \
- "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do
- if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then
- TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}"
- break
- fi
- done
- fi
- if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then
- TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}"
- TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"
- fi
- ;;
- esac
- fi
-
- # eval is required to do the TCL_DBGX substitution
- eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\""
- eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\""
- eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\""
- eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\""
-
- AC_SUBST(TCL_VERSION)
- AC_SUBST(TCL_PATCH_LEVEL)
- AC_SUBST(TCL_BIN_DIR)
- AC_SUBST(TCL_SRC_DIR)
-
- AC_SUBST(TCL_LIB_FILE)
- AC_SUBST(TCL_LIB_FLAG)
- AC_SUBST(TCL_LIB_SPEC)
-
- AC_SUBST(TCL_STUB_LIB_FILE)
- AC_SUBST(TCL_STUB_LIB_FLAG)
- AC_SUBST(TCL_STUB_LIB_SPEC)
-
- AC_MSG_CHECKING([platform])
- hold_cc=$CC; CC="$TCL_CC"
- AC_TRY_COMPILE(,[
- #ifdef _WIN32
- #error win32
- #endif
- ], [
- TEA_PLATFORM="unix"
- CYGPATH=echo
- ], [
- TEA_PLATFORM="windows"
- AC_CHECK_PROG(CYGPATH, cygpath, cygpath -m, echo) ]
- )
- CC=$hold_cc
- AC_MSG_RESULT($TEA_PLATFORM)
-
- # The BUILD_$pkg is to define the correct extern storage class
- # handling when making this package
- AC_DEFINE_UNQUOTED(BUILD_${PACKAGE_NAME}, [],
- [Building extension source?])
- # Do this here as we have fully defined TEA_PLATFORM now
- if test "${TEA_PLATFORM}" = "windows" ; then
- EXEEXT=".exe"
- CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp"
- fi
-
- # TEA specific:
- AC_SUBST(CLEANFILES)
- AC_SUBST(TCL_LIBS)
- AC_SUBST(TCL_DEFS)
- AC_SUBST(TCL_EXTRA_CFLAGS)
- AC_SUBST(TCL_LD_FLAGS)
- AC_SUBST(TCL_SHLIB_LD_LIBS)
-])
-
-#------------------------------------------------------------------------
-# TEA_LOAD_TKCONFIG --
-#
-# Load the tkConfig.sh file
-#
-# Arguments:
-#
-# Requires the following vars to be set:
-# TK_BIN_DIR
-#
-# Results:
-#
-# Sets the following vars that should be in tkConfig.sh:
-# TK_BIN_DIR
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_LOAD_TKCONFIG], [
- AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh])
-
- if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then
- AC_MSG_RESULT([loading])
- . "${TK_BIN_DIR}/tkConfig.sh"
- else
- AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh])
- fi
-
- # eval is required to do the TK_DBGX substitution
- eval "TK_LIB_FILE=\"${TK_LIB_FILE}\""
- eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\""
-
- # If the TK_BIN_DIR is the build directory (not the install directory),
- # then set the common variable name to the value of the build variables.
- # For example, the variable TK_LIB_SPEC will be set to the value
- # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC
- # instead of TK_BUILD_LIB_SPEC since it will work with both an
- # installed and uninstalled version of Tcl.
- if test -f "${TK_BIN_DIR}/Makefile" ; then
- TK_LIB_SPEC="${TK_BUILD_LIB_SPEC}"
- TK_STUB_LIB_SPEC="${TK_BUILD_STUB_LIB_SPEC}"
- TK_STUB_LIB_PATH="${TK_BUILD_STUB_LIB_PATH}"
- elif test "`uname -s`" = "Darwin"; then
- # If Tk was built as a framework, attempt to use the libraries
- # from the framework at the given location so that linking works
- # against Tk.framework installed in an arbitrary location.
- case ${TK_DEFS} in
- *TK_FRAMEWORK*)
- if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then
- for i in "`cd "${TK_BIN_DIR}"; pwd`" \
- "`cd "${TK_BIN_DIR}"/../..; pwd`"; do
- if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then
- TK_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TK_LIB_FILE}"
- break
- fi
- done
- fi
- if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then
- TK_STUB_LIB_SPEC="-L` echo "${TK_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TK_STUB_LIB_FLAG}"
- TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"
- fi
- ;;
- esac
- fi
-
- # eval is required to do the TK_DBGX substitution
- eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\""
- eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\""
- eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\""
- eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\""
-
- # TEA specific: Ensure windowingsystem is defined
- if test "${TEA_PLATFORM}" = "unix" ; then
- case ${TK_DEFS} in
- *MAC_OSX_TK*)
- AC_DEFINE(MAC_OSX_TK, 1, [Are we building against Mac OS X TkAqua?])
- TEA_WINDOWINGSYSTEM="aqua"
- ;;
- *)
- TEA_WINDOWINGSYSTEM="x11"
- ;;
- esac
- elif test "${TEA_PLATFORM}" = "windows" ; then
- TEA_WINDOWINGSYSTEM="win32"
- fi
-
- AC_SUBST(TK_VERSION)
- AC_SUBST(TK_BIN_DIR)
- AC_SUBST(TK_SRC_DIR)
-
- AC_SUBST(TK_LIB_FILE)
- AC_SUBST(TK_LIB_FLAG)
- AC_SUBST(TK_LIB_SPEC)
-
- AC_SUBST(TK_STUB_LIB_FILE)
- AC_SUBST(TK_STUB_LIB_FLAG)
- AC_SUBST(TK_STUB_LIB_SPEC)
-
- # TEA specific:
- AC_SUBST(TK_LIBS)
- AC_SUBST(TK_XINCLUDES)
-])
-
-#------------------------------------------------------------------------
-# TEA_PROG_TCLSH
-# Determine the fully qualified path name of the tclsh executable
-# in the Tcl build directory or the tclsh installed in a bin
-# directory. This macro will correctly determine the name
-# of the tclsh executable even if tclsh has not yet been
-# built in the build directory. The tclsh found is always
-# associated with a tclConfig.sh file. This tclsh should be used
-# only for running extension test cases. It should never be
-# or generation of files (like pkgIndex.tcl) at build time.
-#
-# Arguments:
-# none
-#
-# Results:
-# Substitutes the following vars:
-# TCLSH_PROG
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PROG_TCLSH], [
- AC_MSG_CHECKING([for tclsh])
- if test -f "${TCL_BIN_DIR}/Makefile" ; then
- # tclConfig.sh is in Tcl build directory
- if test "${TEA_PLATFORM}" = "windows"; then
- if test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" ; then
- TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}"
- elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}s${EXEEXT}" ; then
- TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}s${EXEEXT}"
- elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}t${EXEEXT}" ; then
- TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}t${EXEEXT}"
- elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}st${EXEEXT}" ; then
- TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}st${EXEEXT}"
- fi
- else
- TCLSH_PROG="${TCL_BIN_DIR}/tclsh"
- fi
- else
- # tclConfig.sh is in install location
- if test "${TEA_PLATFORM}" = "windows"; then
- TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}"
- else
- TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}"
- fi
- list="`ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null` \
- `ls -d ${TCL_BIN_DIR}/.. 2>/dev/null` \
- `ls -d ${TCL_PREFIX}/bin 2>/dev/null`"
- for i in $list ; do
- if test -f "$i/${TCLSH_PROG}" ; then
- REAL_TCL_BIN_DIR="`cd "$i"; pwd`/"
- break
- fi
- done
- TCLSH_PROG="${REAL_TCL_BIN_DIR}${TCLSH_PROG}"
- fi
- AC_MSG_RESULT([${TCLSH_PROG}])
- AC_SUBST(TCLSH_PROG)
-])
-
-#------------------------------------------------------------------------
-# TEA_PROG_WISH
-# Determine the fully qualified path name of the wish executable
-# in the Tk build directory or the wish installed in a bin
-# directory. This macro will correctly determine the name
-# of the wish executable even if wish has not yet been
-# built in the build directory. The wish found is always
-# associated with a tkConfig.sh file. This wish should be used
-# only for running extension test cases. It should never be
-# or generation of files (like pkgIndex.tcl) at build time.
-#
-# Arguments:
-# none
-#
-# Results:
-# Substitutes the following vars:
-# WISH_PROG
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PROG_WISH], [
- AC_MSG_CHECKING([for wish])
- if test -f "${TK_BIN_DIR}/Makefile" ; then
- # tkConfig.sh is in Tk build directory
- if test "${TEA_PLATFORM}" = "windows"; then
- if test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" ; then
- WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}"
- elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}s${EXEEXT}" ; then
- WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}$s{EXEEXT}"
- elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}t${EXEEXT}" ; then
- WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}t${EXEEXT}"
- elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}st${EXEEXT}" ; then
- WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}st${EXEEXT}"
- fi
- else
- WISH_PROG="${TK_BIN_DIR}/wish"
- fi
- else
- # tkConfig.sh is in install location
- if test "${TEA_PLATFORM}" = "windows"; then
- WISH_PROG="wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}"
- else
- WISH_PROG="wish${TK_MAJOR_VERSION}.${TK_MINOR_VERSION}${TK_DBGX}"
- fi
- list="`ls -d ${TK_BIN_DIR}/../bin 2>/dev/null` \
- `ls -d ${TK_BIN_DIR}/.. 2>/dev/null` \
- `ls -d ${TK_PREFIX}/bin 2>/dev/null`"
- for i in $list ; do
- if test -f "$i/${WISH_PROG}" ; then
- REAL_TK_BIN_DIR="`cd "$i"; pwd`/"
- break
- fi
- done
- WISH_PROG="${REAL_TK_BIN_DIR}${WISH_PROG}"
- fi
- AC_MSG_RESULT([${WISH_PROG}])
- AC_SUBST(WISH_PROG)
-])
-
-#------------------------------------------------------------------------
-# TEA_ENABLE_SHARED --
-#
-# Allows the building of shared libraries
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Adds the following arguments to configure:
-# --enable-shared=yes|no
-# --enable-stubs=yes|no
-#
-# Defines the following vars:
-# STATIC_BUILD Used for building import/export libraries
-# on Windows.
-#
-# Sets the following vars:
-# SHARED_BUILD Value of 1 or 0
-# STUBS_BUILD Value if 1 or 0
-# USE_TCL_STUBS Value true: if SHARED_BUILD or --enable-stubs
-# USE_TCLOO_STUBS Value true: if SHARED_BUILD or --enable-stubs
-# USE_TK_STUBS Value true: if SHARED_BUILD or --enable-stubs
-# AND TEA_WINDOWING_SYSTEM != ""
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ENABLE_SHARED], [
- AC_MSG_CHECKING([how to build libraries])
- AC_ARG_ENABLE(shared,
- AC_HELP_STRING([--enable-shared],
- [build and link with shared libraries (default: on)]),
- [shared_ok=$enableval], [shared_ok=yes])
-
- if test "${enable_shared+set}" = set; then
- enableval="$enable_shared"
- shared_ok=$enableval
- else
- shared_ok=yes
- fi
-
- AC_ARG_ENABLE(stubs,
- AC_HELP_STRING([--enable-stubs],
- [build and link with stub libraries. Always true for shared builds (default: on)]),
- [stubs_ok=$enableval], [stubs_ok=yes])
-
- if test "${enable_stubs+set}" = set; then
- enableval="$enable_stubs"
- stubs_ok=$enableval
- else
- stubs_ok=yes
- fi
-
- # Stubs are always enabled for shared builds
- if test "$shared_ok" = "yes" ; then
- AC_MSG_RESULT([shared])
- SHARED_BUILD=1
- STUBS_BUILD=1
- else
- AC_MSG_RESULT([static])
- SHARED_BUILD=0
- AC_DEFINE(STATIC_BUILD, 1, [This a static build])
- if test "$stubs_ok" = "yes" ; then
- STUBS_BUILD=1
- else
- STUBS_BUILD=0
- fi
- fi
- if test "${STUBS_BUILD}" = "1" ; then
- AC_DEFINE(USE_TCL_STUBS, 1, [Use Tcl stubs])
- AC_DEFINE(USE_TCLOO_STUBS, 1, [Use TclOO stubs])
- if test "${TEA_WINDOWINGSYSTEM}" != ""; then
- AC_DEFINE(USE_TK_STUBS, 1, [Use Tk stubs])
- fi
- fi
-
- AC_SUBST(SHARED_BUILD)
- AC_SUBST(STUBS_BUILD)
-])
-
-#------------------------------------------------------------------------
-# TEA_ENABLE_THREADS --
-#
-# Specify if thread support should be enabled. If "yes" is specified
-# as an arg (optional), threads are enabled by default, "no" means
-# threads are disabled. "yes" is the default.
-#
-# TCL_THREADS is checked so that if you are compiling an extension
-# against a threaded core, your extension must be compiled threaded
-# as well.
-#
-# Note that it is legal to have a thread enabled extension run in a
-# threaded or non-threaded Tcl core, but a non-threaded extension may
-# only run in a non-threaded Tcl core.
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Adds the following arguments to configure:
-# --enable-threads
-#
-# Sets the following vars:
-# THREADS_LIBS Thread library(s)
-#
-# Defines the following vars:
-# TCL_THREADS
-# _REENTRANT
-# _THREAD_SAFE
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_ENABLE_THREADS], [
- AC_ARG_ENABLE(threads,
- AC_HELP_STRING([--enable-threads],
- [build with threads (default: on)]),
- [tcl_ok=$enableval], [tcl_ok=yes])
-
- if test "${enable_threads+set}" = set; then
- enableval="$enable_threads"
- tcl_ok=$enableval
- else
- tcl_ok=yes
- fi
-
- if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then
- TCL_THREADS=1
-
- if test "${TEA_PLATFORM}" != "windows" ; then
- # We are always OK on Windows, so check what this platform wants:
-
- # USE_THREAD_ALLOC tells us to try the special thread-based
- # allocator that significantly reduces lock contention
- AC_DEFINE(USE_THREAD_ALLOC, 1,
- [Do we want to use the threaded memory allocator?])
- AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
- if test "`uname -s`" = "SunOS" ; then
- AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
- [Do we really want to follow the standard? Yes we do!])
- fi
- AC_DEFINE(_THREAD_SAFE, 1, [Do we want the thread-safe OS API?])
- AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no)
- if test "$tcl_ok" = "no"; then
- # Check a little harder for __pthread_mutex_init in the same
- # library, as some systems hide it there until pthread.h is
- # defined. We could alternatively do an AC_TRY_COMPILE with
- # pthread.h, but that will work with libpthread really doesn't
- # exist, like AIX 4.2. [Bug: 4359]
- AC_CHECK_LIB(pthread, __pthread_mutex_init,
- tcl_ok=yes, tcl_ok=no)
- fi
-
- if test "$tcl_ok" = "yes"; then
- # The space is needed
- THREADS_LIBS=" -lpthread"
- else
- AC_CHECK_LIB(pthreads, pthread_mutex_init,
- tcl_ok=yes, tcl_ok=no)
- if test "$tcl_ok" = "yes"; then
- # The space is needed
- THREADS_LIBS=" -lpthreads"
- else
- AC_CHECK_LIB(c, pthread_mutex_init,
- tcl_ok=yes, tcl_ok=no)
- if test "$tcl_ok" = "no"; then
- AC_CHECK_LIB(c_r, pthread_mutex_init,
- tcl_ok=yes, tcl_ok=no)
- if test "$tcl_ok" = "yes"; then
- # The space is needed
- THREADS_LIBS=" -pthread"
- else
- TCL_THREADS=0
- AC_MSG_WARN([Do not know how to find pthread lib on your system - thread support disabled])
- fi
- fi
- fi
- fi
- fi
- else
- TCL_THREADS=0
- fi
- # Do checking message here to not mess up interleaved configure output
- AC_MSG_CHECKING([for building with threads])
- if test "${TCL_THREADS}" = 1; then
- AC_DEFINE(TCL_THREADS, 1, [Are we building with threads enabled?])
- AC_MSG_RESULT([yes (default)])
- else
- AC_MSG_RESULT([no])
- fi
- # TCL_THREADS sanity checking. See if our request for building with
- # threads is the same as the way Tcl was built. If not, warn the user.
- case ${TCL_DEFS} in
- *THREADS=1*)
- if test "${TCL_THREADS}" = "0"; then
- AC_MSG_WARN([
- Building ${PACKAGE_NAME} without threads enabled, but building against Tcl
- that IS thread-enabled. It is recommended to use --enable-threads.])
- fi
- ;;
- esac
- AC_SUBST(TCL_THREADS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ENABLE_SYMBOLS --
-#
-# Specify if debugging symbols should be used.
-# Memory (TCL_MEM_DEBUG) debugging can also be enabled.
-#
-# Arguments:
-# none
-#
-# TEA varies from core Tcl in that C|LDFLAGS_DEFAULT receives
-# the value of C|LDFLAGS_OPTIMIZE|DEBUG already substituted.
-# Requires the following vars to be set in the Makefile:
-# CFLAGS_DEFAULT
-# LDFLAGS_DEFAULT
-#
-# Results:
-#
-# Adds the following arguments to configure:
-# --enable-symbols
-#
-# Defines the following vars:
-# CFLAGS_DEFAULT Sets to $(CFLAGS_DEBUG) if true
-# Sets to "$(CFLAGS_OPTIMIZE) -DNDEBUG" if false
-# LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true
-# Sets to $(LDFLAGS_OPTIMIZE) if false
-# DBGX Formerly used as debug library extension;
-# always blank now.
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_ENABLE_SYMBOLS], [
- dnl TEA specific: Make sure we are initialized
- AC_REQUIRE([TEA_CONFIG_CFLAGS])
- AC_MSG_CHECKING([for build with symbols])
- AC_ARG_ENABLE(symbols,
- AC_HELP_STRING([--enable-symbols],
- [build with debugging symbols (default: off)]),
- [tcl_ok=$enableval], [tcl_ok=no])
- DBGX=""
- if test "$tcl_ok" = "no"; then
- CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG"
- LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}"
- AC_MSG_RESULT([no])
- else
- CFLAGS_DEFAULT="${CFLAGS_DEBUG}"
- LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}"
- if test "$tcl_ok" = "yes"; then
- AC_MSG_RESULT([yes (standard debugging)])
- fi
- fi
- # TEA specific:
- if test "${TEA_PLATFORM}" != "windows" ; then
- LDFLAGS_DEFAULT="${LDFLAGS}"
- fi
- AC_SUBST(CFLAGS_DEFAULT)
- AC_SUBST(LDFLAGS_DEFAULT)
- AC_SUBST(TCL_DBGX)
-
- if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then
- AC_DEFINE(TCL_MEM_DEBUG, 1, [Is memory debugging enabled?])
- fi
-
- if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then
- if test "$tcl_ok" = "all"; then
- AC_MSG_RESULT([enabled symbols mem debugging])
- else
- AC_MSG_RESULT([enabled $tcl_ok debugging])
- fi
- fi
-])
-
-#------------------------------------------------------------------------
-# TEA_ENABLE_LANGINFO --
-#
-# Allows use of modern nl_langinfo check for better l10n.
-# This is only relevant for Unix.
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Adds the following arguments to configure:
-# --enable-langinfo=yes|no (default is yes)
-#
-# Defines the following vars:
-# HAVE_LANGINFO Triggers use of nl_langinfo if defined.
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_ENABLE_LANGINFO], [
- AC_ARG_ENABLE(langinfo,
- AC_HELP_STRING([--enable-langinfo],
- [use nl_langinfo if possible to determine encoding at startup, otherwise use old heuristic (default: on)]),
- [langinfo_ok=$enableval], [langinfo_ok=yes])
-
- HAVE_LANGINFO=0
- if test "$langinfo_ok" = "yes"; then
- AC_CHECK_HEADER(langinfo.h,[langinfo_ok=yes],[langinfo_ok=no])
- fi
- AC_MSG_CHECKING([whether to use nl_langinfo])
- if test "$langinfo_ok" = "yes"; then
- AC_CACHE_VAL(tcl_cv_langinfo_h, [
- AC_TRY_COMPILE([#include <langinfo.h>], [nl_langinfo(CODESET);],
- [tcl_cv_langinfo_h=yes],[tcl_cv_langinfo_h=no])])
- AC_MSG_RESULT([$tcl_cv_langinfo_h])
- if test $tcl_cv_langinfo_h = yes; then
- AC_DEFINE(HAVE_LANGINFO, 1, [Do we have nl_langinfo()?])
- fi
- else
- AC_MSG_RESULT([$langinfo_ok])
- fi
-])
-
-#--------------------------------------------------------------------
-# TEA_CONFIG_SYSTEM
-#
-# Determine what the system is (some things cannot be easily checked
-# on a feature-driven basis, alas). This can usually be done via the
-# "uname" command.
-#
-# Arguments:
-# none
-#
-# Results:
-# Defines the following var:
-#
-# system - System/platform/version identification code.
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_CONFIG_SYSTEM], [
- AC_CACHE_CHECK([system version], tcl_cv_sys_version, [
- # TEA specific:
- if test "${TEA_PLATFORM}" = "windows" ; then
- tcl_cv_sys_version=windows
- else
- tcl_cv_sys_version=`uname -s`-`uname -r`
- if test "$?" -ne 0 ; then
- AC_MSG_WARN([can't find uname command])
- tcl_cv_sys_version=unknown
- else
- if test "`uname -s`" = "AIX" ; then
- tcl_cv_sys_version=AIX-`uname -v`.`uname -r`
- fi
- fi
- fi
- ])
- system=$tcl_cv_sys_version
-])
-
-#--------------------------------------------------------------------
-# TEA_CONFIG_CFLAGS
-#
-# Try to determine the proper flags to pass to the compiler
-# for building shared libraries and other such nonsense.
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Defines and substitutes the following vars:
-#
-# DL_OBJS, DL_LIBS - removed for TEA, only needed by core.
-# LDFLAGS - Flags to pass to the compiler when linking object
-# files into an executable application binary such
-# as tclsh.
-# LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib",
-# that tell the run-time dynamic linker where to look
-# for shared libraries such as libtcl.so. Depends on
-# the variable LIB_RUNTIME_DIR in the Makefile. Could
-# be the same as CC_SEARCH_FLAGS if ${CC} is used to link.
-# CC_SEARCH_FLAGS-Flags to pass to ${CC}, such as "-Wl,-rpath,/usr/local/tcl/lib",
-# that tell the run-time dynamic linker where to look
-# for shared libraries such as libtcl.so. Depends on
-# the variable LIB_RUNTIME_DIR in the Makefile.
-# SHLIB_CFLAGS - Flags to pass to cc when compiling the components
-# of a shared library (may request position-independent
-# code, among other things).
-# SHLIB_LD - Base command to use for combining object files
-# into a shared library.
-# SHLIB_LD_LIBS - Dependent libraries for the linker to scan when
-# creating shared libraries. This symbol typically
-# goes at the end of the "ld" commands that build
-# shared libraries. The value of the symbol defaults to
-# "${LIBS}" if all of the dependent libraries should
-# be specified when creating a shared library. If
-# dependent libraries should not be specified (as on
-# SunOS 4.x, where they cause the link to fail, or in
-# general if Tcl and Tk aren't themselves shared
-# libraries), then this symbol has an empty string
-# as its value.
-# SHLIB_SUFFIX - Suffix to use for the names of dynamically loadable
-# extensions. An empty string means we don't know how
-# to use shared libraries on this platform.
-# LIB_SUFFIX - Specifies everything that comes after the "libfoo"
-# in a static or shared library name, using the $PACKAGE_VERSION variable
-# to put the version in the right place. This is used
-# by platforms that need non-standard library names.
-# Examples: ${PACKAGE_VERSION}.so.1.1 on NetBSD, since it needs
-# to have a version after the .so, and ${PACKAGE_VERSION}.a
-# on AIX, since a shared library needs to have
-# a .a extension whereas shared objects for loadable
-# extensions have a .so extension. Defaults to
-# ${PACKAGE_VERSION}${SHLIB_SUFFIX}.
-# CFLAGS_DEBUG -
-# Flags used when running the compiler in debug mode
-# CFLAGS_OPTIMIZE -
-# Flags used when running the compiler in optimize mode
-# CFLAGS - Additional CFLAGS added as necessary (usually 64-bit)
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_CONFIG_CFLAGS], [
- dnl TEA specific: Make sure we are initialized
- AC_REQUIRE([TEA_INIT])
-
- # Step 0.a: Enable 64 bit support?
-
- AC_MSG_CHECKING([if 64bit support is requested])
- AC_ARG_ENABLE(64bit,
- AC_HELP_STRING([--enable-64bit],
- [enable 64bit support (default: off)]),
- [do64bit=$enableval], [do64bit=no])
- AC_MSG_RESULT([$do64bit])
-
- # Step 0.b: Enable Solaris 64 bit VIS support?
-
- AC_MSG_CHECKING([if 64bit Sparc VIS support is requested])
- AC_ARG_ENABLE(64bit-vis,
- AC_HELP_STRING([--enable-64bit-vis],
- [enable 64bit Sparc VIS support (default: off)]),
- [do64bitVIS=$enableval], [do64bitVIS=no])
- AC_MSG_RESULT([$do64bitVIS])
- # Force 64bit on with VIS
- AS_IF([test "$do64bitVIS" = "yes"], [do64bit=yes])
-
- # Step 0.c: Check if visibility support is available. Do this here so
- # that platform specific alternatives can be used below if this fails.
-
- AC_CACHE_CHECK([if compiler supports visibility "hidden"],
- tcl_cv_cc_visibility_hidden, [
- hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror"
- AC_TRY_LINK([
- extern __attribute__((__visibility__("hidden"))) void f(void);
- void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes,
- tcl_cv_cc_visibility_hidden=no)
- CFLAGS=$hold_cflags])
- AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [
- AC_DEFINE(MODULE_SCOPE,
- [extern __attribute__((__visibility__("hidden")))],
- [Compiler support for module scope symbols])
- AC_DEFINE(HAVE_HIDDEN, [1], [Compiler support for module scope symbols])
- ])
-
- # Step 0.d: Disable -rpath support?
-
- AC_MSG_CHECKING([if rpath support is requested])
- AC_ARG_ENABLE(rpath,
- AC_HELP_STRING([--disable-rpath],
- [disable rpath support (default: on)]),
- [doRpath=$enableval], [doRpath=yes])
- AC_MSG_RESULT([$doRpath])
-
- # TEA specific: Cross-compiling options for Windows/CE builds?
-
- AS_IF([test "${TEA_PLATFORM}" = windows], [
- AC_MSG_CHECKING([if Windows/CE build is requested])
- AC_ARG_ENABLE(wince,
- AC_HELP_STRING([--enable-wince],
- [enable Win/CE support (where applicable)]),
- [doWince=$enableval], [doWince=no])
- AC_MSG_RESULT([$doWince])
- ])
-
- # Set the variable "system" to hold the name and version number
- # for the system.
-
- TEA_CONFIG_SYSTEM
-
- # Require ranlib early so we can override it in special cases below.
-
- AC_REQUIRE([AC_PROG_RANLIB])
-
- # Set configuration options based on system name and version.
- # This is similar to Tcl's unix/tcl.m4 except that we've added a
- # "windows" case and removed some core-only vars.
-
- do64bit_ok=no
- # default to '{$LIBS}' and set to "" on per-platform necessary basis
- SHLIB_LD_LIBS='${LIBS}'
- # When ld needs options to work in 64-bit mode, put them in
- # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load]
- # is disabled by the user. [Bug 1016796]
- LDFLAGS_ARCH=""
- UNSHARED_LIB_SUFFIX=""
- # TEA specific: use PACKAGE_VERSION instead of VERSION
- TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`'
- ECHO_VERSION='`echo ${PACKAGE_VERSION}`'
- TCL_LIB_VERSIONS_OK=ok
- CFLAGS_DEBUG=-g
- AS_IF([test "$GCC" = yes], [
- CFLAGS_OPTIMIZE=-O2
- CFLAGS_WARNING="-Wall"
- ], [
- CFLAGS_OPTIMIZE=-O
- CFLAGS_WARNING=""
- ])
- AC_CHECK_TOOL(AR, ar)
- STLIB_LD='${AR} cr'
- LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH"
- AS_IF([test "x$SHLIB_VERSION" = x],[SHLIB_VERSION=""],[SHLIB_VERSION=".$SHLIB_VERSION"])
- case $system in
- # TEA specific:
- windows)
- # This is a 2-stage check to make sure we have the 64-bit SDK
- # We have to know where the SDK is installed.
- # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs
- # MACHINE is IX86 for LINK, but this is used by the manifest,
- # which requires x86|amd64|ia64.
- MACHINE="X86"
- if test "$do64bit" != "no" ; then
- if test "x${MSSDK}x" = "xx" ; then
- MSSDK="C:/Progra~1/Microsoft Platform SDK"
- fi
- MSSDK=`echo "$MSSDK" | sed -e 's!\\\!/!g'`
- PATH64=""
- case "$do64bit" in
- amd64|x64|yes)
- MACHINE="AMD64" ; # default to AMD64 64-bit build
- PATH64="${MSSDK}/Bin/Win64/x86/AMD64"
- ;;
- ia64)
- MACHINE="IA64"
- PATH64="${MSSDK}/Bin/Win64"
- ;;
- esac
- if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then
- AC_MSG_WARN([Could not find 64-bit $MACHINE SDK to enable 64bit mode])
- AC_MSG_WARN([Ensure latest Platform SDK is installed])
- do64bit="no"
- else
- AC_MSG_RESULT([ Using 64-bit $MACHINE mode])
- do64bit_ok="yes"
- fi
- fi
-
- if test "$doWince" != "no" ; then
- if test "$do64bit" != "no" ; then
- AC_MSG_ERROR([Windows/CE and 64-bit builds incompatible])
- fi
- if test "$GCC" = "yes" ; then
- AC_MSG_ERROR([Windows/CE and GCC builds incompatible])
- fi
- TEA_PATH_CELIB
- # Set defaults for common evc4/PPC2003 setup
- # Currently Tcl requires 300+, possibly 420+ for sockets
- CEVERSION=420; # could be 211 300 301 400 420 ...
- TARGETCPU=ARMV4; # could be ARMV4 ARM MIPS SH3 X86 ...
- ARCH=ARM; # could be ARM MIPS X86EM ...
- PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002"
- if test "$doWince" != "yes"; then
- # If !yes then the user specified something
- # Reset ARCH to allow user to skip specifying it
- ARCH=
- eval `echo $doWince | awk -F, '{ \
- if (length([$]1)) { printf "CEVERSION=\"%s\"\n", [$]1; \
- if ([$]1 < 400) { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \
- if (length([$]2)) { printf "TARGETCPU=\"%s\"\n", toupper([$]2) }; \
- if (length([$]3)) { printf "ARCH=\"%s\"\n", toupper([$]3) }; \
- if (length([$]4)) { printf "PLATFORM=\"%s\"\n", [$]4 }; \
- }'`
- if test "x${ARCH}" = "x" ; then
- ARCH=$TARGETCPU;
- fi
- fi
- OSVERSION=WCE$CEVERSION;
- if test "x${WCEROOT}" = "x" ; then
- WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0"
- if test ! -d "${WCEROOT}" ; then
- WCEROOT="C:/Program Files/Microsoft eMbedded Tools"
- fi
- fi
- if test "x${SDKROOT}" = "x" ; then
- SDKROOT="C:/Program Files/Windows CE Tools"
- if test ! -d "${SDKROOT}" ; then
- SDKROOT="C:/Windows CE Tools"
- fi
- fi
- WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'`
- SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'`
- if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \
- -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then
- AC_MSG_ERROR([could not find PocketPC SDK or target compiler to enable WinCE mode [$CEVERSION,$TARGETCPU,$ARCH,$PLATFORM]])
- doWince="no"
- else
- # We could PATH_NOSPACE these, but that's not important,
- # as long as we quote them when used.
- CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include"
- if test -d "${CEINCLUDE}/${TARGETCPU}" ; then
- CEINCLUDE="${CEINCLUDE}/${TARGETCPU}"
- fi
- CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}"
- fi
- fi
-
- if test "$GCC" != "yes" ; then
- if test "${SHARED_BUILD}" = "0" ; then
- runtime=-MT
- else
- runtime=-MD
- fi
- case "x`echo \${VisualStudioVersion}`" in
- x1[[4-9]]*)
- lflags="${lflags} -nodefaultlib:libucrt.lib"
- TEA_ADD_LIBS([ucrt.lib])
- ;;
- *)
- ;;
- esac
-
- if test "$do64bit" != "no" ; then
- # All this magic is necessary for the Win64 SDK RC1 - hobbs
- CC="\"${PATH64}/cl.exe\""
- CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\""
- RC="\"${MSSDK}/bin/rc.exe\""
- lflags="${lflags} -nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\""
- LINKBIN="\"${PATH64}/link.exe\""
- CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d"
- CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}"
- # Avoid 'unresolved external symbol __security_cookie'
- # errors, c.f. http://support.microsoft.com/?id=894573
- TEA_ADD_LIBS([bufferoverflowU.lib])
- elif test "$doWince" != "no" ; then
- CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin"
- if test "${TARGETCPU}" = "X86"; then
- CC="\"${CEBINROOT}/cl.exe\""
- else
- CC="\"${CEBINROOT}/cl${ARCH}.exe\""
- fi
- CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\""
- RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\""
- arch=`echo ${ARCH} | awk '{print tolower([$]0)}'`
- defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS"
- if test "${SHARED_BUILD}" = "1" ; then
- # Static CE builds require static celib as well
- defs="${defs} _DLL"
- fi
- for i in $defs ; do
- AC_DEFINE_UNQUOTED($i, 1, [WinCE def ]$i)
- done
- AC_DEFINE_UNQUOTED(_WIN32_WCE, $CEVERSION, [_WIN32_WCE version])
- AC_DEFINE_UNQUOTED(UNDER_CE, $CEVERSION, [UNDER_CE version])
- CFLAGS_DEBUG="-nologo -Zi -Od"
- CFLAGS_OPTIMIZE="-nologo -Ox"
- lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'`
- lflags="${lflags} -MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo"
- LINKBIN="\"${CEBINROOT}/link.exe\""
- AC_SUBST(CELIB_DIR)
- else
- RC="rc"
- lflags="${lflags} -nologo"
- LINKBIN="link"
- CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d"
- CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}"
- fi
- fi
-
- if test "$GCC" = "yes"; then
- # mingw gcc mode
- AC_CHECK_TOOL(RC, windres)
- CFLAGS_DEBUG="-g"
- CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
- SHLIB_LD='${CC} -shared'
- UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
- LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}"
- LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}"
-
- AC_CACHE_CHECK(for cross-compile version of gcc,
- ac_cv_cross,
- AC_TRY_COMPILE([
- #ifdef _WIN32
- #error cross-compiler
- #endif
- ], [],
- ac_cv_cross=yes,
- ac_cv_cross=no)
- )
- if test "$ac_cv_cross" = "yes"; then
- case "$do64bit" in
- amd64|x64|yes)
- CC="x86_64-w64-mingw32-gcc"
- LD="x86_64-w64-mingw32-ld"
- AR="x86_64-w64-mingw32-ar"
- RANLIB="x86_64-w64-mingw32-ranlib"
- RC="x86_64-w64-mingw32-windres"
- ;;
- *)
- CC="i686-w64-mingw32-gcc"
- LD="i686-w64-mingw32-ld"
- AR="i686-w64-mingw32-ar"
- RANLIB="i686-w64-mingw32-ranlib"
- RC="i686-w64-mingw32-windres"
- ;;
- esac
- fi
-
- else
- SHLIB_LD="${LINKBIN} -dll ${lflags}"
- # link -lib only works when -lib is the first arg
- STLIB_LD="${LINKBIN} -lib ${lflags}"
- UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib'
- PATHTYPE=-w
- # For information on what debugtype is most useful, see:
- # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp
- # and also
- # http://msdn2.microsoft.com/en-us/library/y0zzbyt4%28VS.80%29.aspx
- # This essentially turns it all on.
- LDFLAGS_DEBUG="-debug -debugtype:cv"
- LDFLAGS_OPTIMIZE="-release"
- if test "$doWince" != "no" ; then
- LDFLAGS_CONSOLE="-link ${lflags}"
- LDFLAGS_WINDOW=${LDFLAGS_CONSOLE}
- else
- LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}"
- LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}"
- fi
- fi
-
- SHLIB_SUFFIX=".dll"
- SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll'
-
- TCL_LIB_VERSIONS_OK=nodots
- ;;
- AIX-*)
- AS_IF([test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"], [
- # AIX requires the _r compiler when gcc isn't being used
- case "${CC}" in
- *_r|*_r\ *)
- # ok ...
- ;;
- *)
- # Make sure only first arg gets _r
- CC=`echo "$CC" | sed -e 's/^\([[^ ]]*\)/\1_r/'`
- ;;
- esac
- AC_MSG_RESULT([Using $CC for compiling with threads])
- ])
- LIBS="$LIBS -lc"
- SHLIB_CFLAGS=""
- SHLIB_SUFFIX=".so"
-
- LD_LIBRARY_PATH_VAR="LIBPATH"
-
- # Check to enable 64-bit flags for compiler/linker
- AS_IF([test "$do64bit" = yes], [
- AS_IF([test "$GCC" = yes], [
- AC_MSG_WARN([64bit mode not supported with GCC on $system])
- ], [
- do64bit_ok=yes
- CFLAGS="$CFLAGS -q64"
- LDFLAGS_ARCH="-q64"
- RANLIB="${RANLIB} -X64"
- AR="${AR} -X64"
- SHLIB_LD_FLAGS="-b64"
- ])
- ])
-
- AS_IF([test "`uname -m`" = ia64], [
- # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC
- SHLIB_LD="/usr/ccs/bin/ld -G -z text"
- AS_IF([test "$GCC" = yes], [
- CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
- ], [
- CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}'
- ])
- LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
- ], [
- AS_IF([test "$GCC" = yes], [
- SHLIB_LD='${CC} -shared -Wl,-bexpall'
- ], [
- SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry"
- LDFLAGS="$LDFLAGS -brtl"
- ])
- SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}"
- CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
- LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
- ])
- ;;
- BeOS*)
- SHLIB_CFLAGS="-fPIC"
- SHLIB_LD='${CC} -nostart'
- SHLIB_SUFFIX=".so"
-
- #-----------------------------------------------------------
- # Check for inet_ntoa in -lbind, for BeOS (which also needs
- # -lsocket, even if the network functions are in -lnet which
- # is always linked to, for compatibility.
- #-----------------------------------------------------------
- AC_CHECK_LIB(bind, inet_ntoa, [LIBS="$LIBS -lbind -lsocket"])
- ;;
- BSD/OS-4.*)
- SHLIB_CFLAGS="-export-dynamic -fPIC"
- SHLIB_LD='${CC} -shared'
- SHLIB_SUFFIX=".so"
- LDFLAGS="$LDFLAGS -export-dynamic"
- CC_SEARCH_FLAGS=""
- LD_SEARCH_FLAGS=""
- ;;
- CYGWIN_*)
- SHLIB_CFLAGS=""
- SHLIB_LD='${CC} -shared'
- SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,--out-implib,\$[@].a"
- SHLIB_SUFFIX=".dll"
- EXEEXT=".exe"
- do64bit_ok=yes
- CC_SEARCH_FLAGS=""
- LD_SEARCH_FLAGS=""
- ;;
- Haiku*)
- LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
- SHLIB_CFLAGS="-fPIC"
- SHLIB_SUFFIX=".so"
- SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
- AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"])
- ;;
- HP-UX-*.11.*)
- # Use updated header definitions where possible
- AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Do we want to use the XOPEN network library?])
- # TEA specific: Needed by Tcl, but not most extensions
- #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?])
- #LIBS="$LIBS -lxnet" # Use the XOPEN network library
-
- AS_IF([test "`uname -m`" = ia64], [
- SHLIB_SUFFIX=".so"
- # Use newer C++ library for C++ extensions
- #if test "$GCC" != "yes" ; then
- # CPPFLAGS="-AA"
- #fi
- ], [
- SHLIB_SUFFIX=".sl"
- ])
- AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no)
- AS_IF([test "$tcl_ok" = yes], [
- LDFLAGS="$LDFLAGS -Wl,-E"
- CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.'
- LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.'
- LD_LIBRARY_PATH_VAR="SHLIB_PATH"
- ])
- AS_IF([test "$GCC" = yes], [
- SHLIB_LD='${CC} -shared'
- LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
- ], [
- CFLAGS="$CFLAGS -z"
- # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc
- #CFLAGS="$CFLAGS +DAportable"
- SHLIB_CFLAGS="+z"
- SHLIB_LD="ld -b"
- ])
-
- # Check to enable 64-bit flags for compiler/linker
- AS_IF([test "$do64bit" = "yes"], [
- AS_IF([test "$GCC" = yes], [
- case `${CC} -dumpmachine` in
- hppa64*)
- # 64-bit gcc in use. Fix flags for GNU ld.
- do64bit_ok=yes
- SHLIB_LD='${CC} -shared'
- AS_IF([test $doRpath = yes], [
- CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
- LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
- ;;
- *)
- AC_MSG_WARN([64bit mode not supported with GCC on $system])
- ;;
- esac
- ], [
- do64bit_ok=yes
- CFLAGS="$CFLAGS +DD64"
- LDFLAGS_ARCH="+DD64"
- ])
- ]) ;;
- IRIX-6.*)
- SHLIB_CFLAGS=""
- SHLIB_LD="ld -n32 -shared -rdata_shared"
- SHLIB_SUFFIX=".so"
- AS_IF([test $doRpath = yes], [
- CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
- LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
- AS_IF([test "$GCC" = yes], [
- CFLAGS="$CFLAGS -mabi=n32"
- LDFLAGS="$LDFLAGS -mabi=n32"
- ], [
- case $system in
- IRIX-6.3)
- # Use to build 6.2 compatible binaries on 6.3.
- CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS"
- ;;
- *)
- CFLAGS="$CFLAGS -n32"
- ;;
- esac
- LDFLAGS="$LDFLAGS -n32"
- ])
- ;;
- IRIX64-6.*)
- SHLIB_CFLAGS=""
- SHLIB_LD="ld -n32 -shared -rdata_shared"
- SHLIB_SUFFIX=".so"
- AS_IF([test $doRpath = yes], [
- CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
- LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
-
- # Check to enable 64-bit flags for compiler/linker
-
- AS_IF([test "$do64bit" = yes], [
- AS_IF([test "$GCC" = yes], [
- AC_MSG_WARN([64bit mode not supported by gcc])
- ], [
- do64bit_ok=yes
- SHLIB_LD="ld -64 -shared -rdata_shared"
- CFLAGS="$CFLAGS -64"
- LDFLAGS_ARCH="-64"
- ])
- ])
- ;;
- Linux*|GNU*|NetBSD-Debian)
- SHLIB_CFLAGS="-fPIC"
- SHLIB_SUFFIX=".so"
-
- # TEA specific:
- CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
-
- # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
- SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS_DEFAULT} -shared'
- LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
- AS_IF([test $doRpath = yes], [
- CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
- LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
- AS_IF([test "`uname -m`" = "alpha"], [CFLAGS="$CFLAGS -mieee"])
- AS_IF([test $do64bit = yes], [
- AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [
- hold_cflags=$CFLAGS
- CFLAGS="$CFLAGS -m64"
- AC_TRY_LINK(,, tcl_cv_cc_m64=yes, tcl_cv_cc_m64=no)
- CFLAGS=$hold_cflags])
- AS_IF([test $tcl_cv_cc_m64 = yes], [
- CFLAGS="$CFLAGS -m64"
- do64bit_ok=yes
- ])
- ])
-
- # The combo of gcc + glibc has a bug related to inlining of
- # functions like strtod(). The -fno-builtin flag should address
- # this problem but it does not work. The -fno-inline flag is kind
- # of overkill but it works. Disable inlining only when one of the
- # files in compat/*.c is being linked in.
-
- AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"])
- ;;
- Lynx*)
- SHLIB_CFLAGS="-fPIC"
- SHLIB_SUFFIX=".so"
- CFLAGS_OPTIMIZE=-02
- SHLIB_LD='${CC} -shared'
- LD_FLAGS="-Wl,--export-dynamic"
- AS_IF([test $doRpath = yes], [
- CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
- LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
- ;;
- OpenBSD-*)
- arch=`arch -s`
- case "$arch" in
- alpha|sparc64)
- SHLIB_CFLAGS="-fPIC"
- ;;
- *)
- SHLIB_CFLAGS="-fpic"
- ;;
- esac
- SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
- SHLIB_SUFFIX=".so"
- AS_IF([test $doRpath = yes], [
- CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
- LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
- SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}'
- LDFLAGS="-Wl,-export-dynamic"
- CFLAGS_OPTIMIZE="-O2"
- AS_IF([test "${TCL_THREADS}" = "1"], [
- # On OpenBSD: Compile with -pthread
- # Don't link with -lpthread
- LIBS=`echo $LIBS | sed s/-lpthread//`
- CFLAGS="$CFLAGS -pthread"
- ])
- # OpenBSD doesn't do version numbers with dots.
- UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
- TCL_LIB_VERSIONS_OK=nodots
- ;;
- NetBSD-*)
- # NetBSD has ELF and can use 'cc -shared' to build shared libs
- SHLIB_CFLAGS="-fPIC"
- SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
- SHLIB_SUFFIX=".so"
- LDFLAGS="$LDFLAGS -export-dynamic"
- AS_IF([test $doRpath = yes], [
- CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
- LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
- AS_IF([test "${TCL_THREADS}" = "1"], [
- # The -pthread needs to go in the CFLAGS, not LIBS
- LIBS=`echo $LIBS | sed s/-pthread//`
- CFLAGS="$CFLAGS -pthread"
- LDFLAGS="$LDFLAGS -pthread"
- ])
- ;;
- DragonFly-*|FreeBSD-*)
- # This configuration from FreeBSD Ports.
- SHLIB_CFLAGS="-fPIC"
- SHLIB_LD="${CC} -shared"
- SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,-soname,\$[@]"
- SHLIB_SUFFIX=".so"
- LDFLAGS=""
- AS_IF([test $doRpath = yes], [
- CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
- LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
- AS_IF([test "${TCL_THREADS}" = "1"], [
- # The -pthread needs to go in the LDFLAGS, not LIBS
- LIBS=`echo $LIBS | sed s/-pthread//`
- CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
- LDFLAGS="$LDFLAGS $PTHREAD_LIBS"])
- case $system in
- FreeBSD-3.*)
- # Version numbers are dot-stripped by system policy.
- TCL_TRIM_DOTS=`echo ${PACKAGE_VERSION} | tr -d .`
- UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
- SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1'
- TCL_LIB_VERSIONS_OK=nodots
- ;;
- esac
- ;;
- Darwin-*)
- CFLAGS_OPTIMIZE="-Os"
- SHLIB_CFLAGS="-fno-common"
- # To avoid discrepancies between what headers configure sees during
- # preprocessing tests and compiling tests, move any -isysroot and
- # -mmacosx-version-min flags from CFLAGS to CPPFLAGS:
- CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \
- awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
- if ([$]i~/^(isysroot|mmacosx-version-min)/) print "-"[$]i}'`"
- CFLAGS="`echo " ${CFLAGS}" | \
- awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
- if (!([$]i~/^(isysroot|mmacosx-version-min)/)) print "-"[$]i}'`"
- AS_IF([test $do64bit = yes], [
- case `arch` in
- ppc)
- AC_CACHE_CHECK([if compiler accepts -arch ppc64 flag],
- tcl_cv_cc_arch_ppc64, [
- hold_cflags=$CFLAGS
- CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
- AC_TRY_LINK(,, tcl_cv_cc_arch_ppc64=yes,
- tcl_cv_cc_arch_ppc64=no)
- CFLAGS=$hold_cflags])
- AS_IF([test $tcl_cv_cc_arch_ppc64 = yes], [
- CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
- do64bit_ok=yes
- ]);;
- i386)
- AC_CACHE_CHECK([if compiler accepts -arch x86_64 flag],
- tcl_cv_cc_arch_x86_64, [
- hold_cflags=$CFLAGS
- CFLAGS="$CFLAGS -arch x86_64"
- AC_TRY_LINK(,, tcl_cv_cc_arch_x86_64=yes,
- tcl_cv_cc_arch_x86_64=no)
- CFLAGS=$hold_cflags])
- AS_IF([test $tcl_cv_cc_arch_x86_64 = yes], [
- CFLAGS="$CFLAGS -arch x86_64"
- do64bit_ok=yes
- ]);;
- *)
- AC_MSG_WARN([Don't know how enable 64-bit on architecture `arch`]);;
- esac
- ], [
- # Check for combined 32-bit and 64-bit fat build
- AS_IF([echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \
- && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '], [
- fat_32_64=yes])
- ])
- # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
- SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}'
- AC_CACHE_CHECK([if ld accepts -single_module flag], tcl_cv_ld_single_module, [
- hold_ldflags=$LDFLAGS
- LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module"
- AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no)
- LDFLAGS=$hold_ldflags])
- AS_IF([test $tcl_cv_ld_single_module = yes], [
- SHLIB_LD="${SHLIB_LD} -Wl,-single_module"
- ])
- # TEA specific: link shlib with current and compatibility version flags
- vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([[0-9]]\{1,5\}\)\(\(\.[[0-9]]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d`
- SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}"
- SHLIB_SUFFIX=".dylib"
- # Don't use -prebind when building for Mac OS X 10.4 or later only:
- AS_IF([test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int([$]2)}'`" -lt 4 -a \
- "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4], [
- LDFLAGS="$LDFLAGS -prebind"])
- LDFLAGS="$LDFLAGS -headerpad_max_install_names"
- AC_CACHE_CHECK([if ld accepts -search_paths_first flag],
- tcl_cv_ld_search_paths_first, [
- hold_ldflags=$LDFLAGS
- LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
- AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes,
- tcl_cv_ld_search_paths_first=no)
- LDFLAGS=$hold_ldflags])
- AS_IF([test $tcl_cv_ld_search_paths_first = yes], [
- LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
- ])
- AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [
- AC_DEFINE(MODULE_SCOPE, [__private_extern__],
- [Compiler support for module scope symbols])
- tcl_cv_cc_visibility_hidden=yes
- ])
- CC_SEARCH_FLAGS=""
- LD_SEARCH_FLAGS=""
- LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH"
- # TEA specific: for combined 32 & 64 bit fat builds of Tk
- # extensions, verify that 64-bit build is possible.
- AS_IF([test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"], [
- AS_IF([test "${TEA_WINDOWINGSYSTEM}" = x11], [
- AC_CACHE_CHECK([for 64-bit X11], tcl_cv_lib_x11_64, [
- for v in CFLAGS CPPFLAGS LDFLAGS; do
- eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"'
- done
- CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include"
- LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11"
- AC_TRY_LINK([#include <X11/Xlib.h>], [XrmInitialize();],
- tcl_cv_lib_x11_64=yes, tcl_cv_lib_x11_64=no)
- for v in CFLAGS CPPFLAGS LDFLAGS; do
- eval $v'="$hold_'$v'"'
- done])
- ])
- AS_IF([test "${TEA_WINDOWINGSYSTEM}" = aqua], [
- AC_CACHE_CHECK([for 64-bit Tk], tcl_cv_lib_tk_64, [
- for v in CFLAGS CPPFLAGS LDFLAGS; do
- eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"'
- done
- CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}"
- LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}"
- AC_TRY_LINK([#include <tk.h>], [Tk_InitStubs(NULL, "", 0);],
- tcl_cv_lib_tk_64=yes, tcl_cv_lib_tk_64=no)
- for v in CFLAGS CPPFLAGS LDFLAGS; do
- eval $v'="$hold_'$v'"'
- done])
- ])
- # remove 64-bit arch flags from CFLAGS et al. if configuration
- # does not support 64-bit.
- AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [
- AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags])
- for v in CFLAGS CPPFLAGS LDFLAGS; do
- eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"'
- done])
- ])
- ;;
- OS/390-*)
- CFLAGS_OPTIMIZE="" # Optimizer is buggy
- AC_DEFINE(_OE_SOCKETS, 1, # needed in sys/socket.h
- [Should OS/390 do the right thing with sockets?])
- ;;
- OSF1-V*)
- # Digital OSF/1
- SHLIB_CFLAGS=""
- AS_IF([test "$SHARED_BUILD" = 1], [
- SHLIB_LD='ld -shared -expect_unresolved "*"'
- ], [
- SHLIB_LD='ld -non_shared -expect_unresolved "*"'
- ])
- SHLIB_SUFFIX=".so"
- AS_IF([test $doRpath = yes], [
- CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
- LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
- AS_IF([test "$GCC" = yes], [CFLAGS="$CFLAGS -mieee"], [
- CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"])
- # see pthread_intro(3) for pthread support on osf1, k.furukawa
- AS_IF([test "${TCL_THREADS}" = 1], [
- CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE"
- CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64"
- LIBS=`echo $LIBS | sed s/-lpthreads//`
- AS_IF([test "$GCC" = yes], [
- LIBS="$LIBS -lpthread -lmach -lexc"
- ], [
- CFLAGS="$CFLAGS -pthread"
- LDFLAGS="$LDFLAGS -pthread"
- ])
- ])
- ;;
- QNX-6*)
- # QNX RTP
- # This may work for all QNX, but it was only reported for v6.
- SHLIB_CFLAGS="-fPIC"
- SHLIB_LD="ld -Bshareable -x"
- SHLIB_LD_LIBS=""
- SHLIB_SUFFIX=".so"
- CC_SEARCH_FLAGS=""
- LD_SEARCH_FLAGS=""
- ;;
- SCO_SV-3.2*)
- AS_IF([test "$GCC" = yes], [
- SHLIB_CFLAGS="-fPIC -melf"
- LDFLAGS="$LDFLAGS -melf -Wl,-Bexport"
- ], [
- SHLIB_CFLAGS="-Kpic -belf"
- LDFLAGS="$LDFLAGS -belf -Wl,-Bexport"
- ])
- SHLIB_LD="ld -G"
- SHLIB_LD_LIBS=""
- SHLIB_SUFFIX=".so"
- CC_SEARCH_FLAGS=""
- LD_SEARCH_FLAGS=""
- ;;
- SunOS-5.[[0-6]])
- # Careful to not let 5.10+ fall into this case
-
- # Note: If _REENTRANT isn't defined, then Solaris
- # won't define thread-safe library routines.
-
- AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
- AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
- [Do we really want to follow the standard? Yes we do!])
-
- SHLIB_CFLAGS="-KPIC"
- SHLIB_SUFFIX=".so"
- AS_IF([test "$GCC" = yes], [
- SHLIB_LD='${CC} -shared'
- CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
- LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
- ], [
- SHLIB_LD="/usr/ccs/bin/ld -G -z text"
- CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
- LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
- ])
- ;;
- SunOS-5*)
- # Note: If _REENTRANT isn't defined, then Solaris
- # won't define thread-safe library routines.
-
- AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
- AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
- [Do we really want to follow the standard? Yes we do!])
-
- SHLIB_CFLAGS="-KPIC"
-
- # Check to enable 64-bit flags for compiler/linker
- AS_IF([test "$do64bit" = yes], [
- arch=`isainfo`
- AS_IF([test "$arch" = "sparcv9 sparc"], [
- AS_IF([test "$GCC" = yes], [
- AS_IF([test "`${CC} -dumpversion | awk -F. '{print [$]1}'`" -lt 3], [
- AC_MSG_WARN([64bit mode not supported with GCC < 3.2 on $system])
- ], [
- do64bit_ok=yes
- CFLAGS="$CFLAGS -m64 -mcpu=v9"
- LDFLAGS="$LDFLAGS -m64 -mcpu=v9"
- SHLIB_CFLAGS="-fPIC"
- ])
- ], [
- do64bit_ok=yes
- AS_IF([test "$do64bitVIS" = yes], [
- CFLAGS="$CFLAGS -xarch=v9a"
- LDFLAGS_ARCH="-xarch=v9a"
- ], [
- CFLAGS="$CFLAGS -xarch=v9"
- LDFLAGS_ARCH="-xarch=v9"
- ])
- # Solaris 64 uses this as well
- #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64"
- ])
- ], [AS_IF([test "$arch" = "amd64 i386"], [
- AS_IF([test "$GCC" = yes], [
- case $system in
- SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*)
- do64bit_ok=yes
- CFLAGS="$CFLAGS -m64"
- LDFLAGS="$LDFLAGS -m64";;
- *)
- AC_MSG_WARN([64bit mode not supported with GCC on $system]);;
- esac
- ], [
- do64bit_ok=yes
- case $system in
- SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*)
- CFLAGS="$CFLAGS -m64"
- LDFLAGS="$LDFLAGS -m64";;
- *)
- CFLAGS="$CFLAGS -xarch=amd64"
- LDFLAGS="$LDFLAGS -xarch=amd64";;
- esac
- ])
- ], [AC_MSG_WARN([64bit mode not supported for $arch])])])
- ])
-
- SHLIB_SUFFIX=".so"
- AS_IF([test "$GCC" = yes], [
- SHLIB_LD='${CC} -shared'
- CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
- LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
- AS_IF([test "$do64bit_ok" = yes], [
- AS_IF([test "$arch" = "sparcv9 sparc"], [
- # We need to specify -static-libgcc or we need to
- # add the path to the sparv9 libgcc.
- # JH: static-libgcc is necessary for core Tcl, but may
- # not be necessary for extensions.
- SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc"
- # for finding sparcv9 libgcc, get the regular libgcc
- # path, remove so name and append 'sparcv9'
- #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..."
- #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir"
- ], [AS_IF([test "$arch" = "amd64 i386"], [
- # JH: static-libgcc is necessary for core Tcl, but may
- # not be necessary for extensions.
- SHLIB_LD="$SHLIB_LD -m64 -static-libgcc"
- ])])
- ])
- ], [
- case $system in
- SunOS-5.[[1-9]][[0-9]]*)
- # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
- SHLIB_LD='${CC} -G -z text ${LDFLAGS_DEFAULT}';;
- *)
- SHLIB_LD='/usr/ccs/bin/ld -G -z text';;
- esac
- CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
- LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
- ])
- ;;
- UNIX_SV* | UnixWare-5*)
- SHLIB_CFLAGS="-KPIC"
- SHLIB_LD='${CC} -G'
- SHLIB_LD_LIBS=""
- SHLIB_SUFFIX=".so"
- # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers
- # that don't grok the -Bexport option. Test that it does.
- AC_CACHE_CHECK([for ld accepts -Bexport flag], tcl_cv_ld_Bexport, [
- hold_ldflags=$LDFLAGS
- LDFLAGS="$LDFLAGS -Wl,-Bexport"
- AC_TRY_LINK(, [int i;], tcl_cv_ld_Bexport=yes, tcl_cv_ld_Bexport=no)
- LDFLAGS=$hold_ldflags])
- AS_IF([test $tcl_cv_ld_Bexport = yes], [
- LDFLAGS="$LDFLAGS -Wl,-Bexport"
- ])
- CC_SEARCH_FLAGS=""
- LD_SEARCH_FLAGS=""
- ;;
- esac
-
- AS_IF([test "$do64bit" = yes -a "$do64bit_ok" = no], [
- AC_MSG_WARN([64bit support being disabled -- don't know magic for this platform])
- ])
-
-dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so
-dnl # until the end of configure, as configure's compile and link tests use
-dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's
-dnl # preprocessing tests use only CPPFLAGS.
- AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""])
-
- # Add in the arch flags late to ensure it wasn't removed.
- # Not necessary in TEA, but this is aligned with core
- LDFLAGS="$LDFLAGS $LDFLAGS_ARCH"
-
- # If we're running gcc, then change the C flags for compiling shared
- # libraries to the right flags for gcc, instead of those for the
- # standard manufacturer compiler.
-
- AS_IF([test "$GCC" = yes], [
- case $system in
- AIX-*) ;;
- BSD/OS*) ;;
- CYGWIN_*|MINGW32_*|MINGW64_*) ;;
- IRIX*) ;;
- NetBSD-*|DragonFly-*|FreeBSD-*|OpenBSD-*) ;;
- Darwin-*) ;;
- SCO_SV-3.2*) ;;
- windows) ;;
- *) SHLIB_CFLAGS="-fPIC" ;;
- esac])
-
- AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [
- AC_DEFINE(MODULE_SCOPE, [extern],
- [No Compiler support for module scope symbols])
- ])
-
- AS_IF([test "$SHARED_LIB_SUFFIX" = ""], [
- # TEA specific: use PACKAGE_VERSION instead of VERSION
- SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}'])
- AS_IF([test "$UNSHARED_LIB_SUFFIX" = ""], [
- # TEA specific: use PACKAGE_VERSION instead of VERSION
- UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a'])
-
- if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then
- AC_CACHE_CHECK(for SEH support in compiler,
- tcl_cv_seh,
- AC_TRY_RUN([
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#undef WIN32_LEAN_AND_MEAN
-
- int main(int argc, char** argv) {
- int a, b = 0;
- __try {
- a = 666 / b;
- }
- __except (EXCEPTION_EXECUTE_HANDLER) {
- return 0;
- }
- return 1;
- }
- ],
- tcl_cv_seh=yes,
- tcl_cv_seh=no,
- tcl_cv_seh=no)
- )
- if test "$tcl_cv_seh" = "no" ; then
- AC_DEFINE(HAVE_NO_SEH, 1,
- [Defined when mingw does not support SEH])
- fi
-
- #
- # Check to see if the excpt.h include file provided contains the
- # definition for EXCEPTION_DISPOSITION; if not, which is the case
- # with Cygwin's version as of 2002-04-10, define it to be int,
- # sufficient for getting the current code to work.
- #
- AC_CACHE_CHECK(for EXCEPTION_DISPOSITION support in include files,
- tcl_cv_eh_disposition,
- AC_TRY_COMPILE([
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h>
-# undef WIN32_LEAN_AND_MEAN
- ],[
- EXCEPTION_DISPOSITION x;
- ],
- tcl_cv_eh_disposition=yes,
- tcl_cv_eh_disposition=no)
- )
- if test "$tcl_cv_eh_disposition" = "no" ; then
- AC_DEFINE(EXCEPTION_DISPOSITION, int,
- [Defined when cygwin/mingw does not support EXCEPTION DISPOSITION])
- fi
-
- # Check to see if winnt.h defines CHAR, SHORT, and LONG
- # even if VOID has already been #defined. The win32api
- # used by mingw and cygwin is known to do this.
-
- AC_CACHE_CHECK(for winnt.h that ignores VOID define,
- tcl_cv_winnt_ignore_void,
- AC_TRY_COMPILE([
-#define VOID void
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#undef WIN32_LEAN_AND_MEAN
- ], [
- CHAR c;
- SHORT s;
- LONG l;
- ],
- tcl_cv_winnt_ignore_void=yes,
- tcl_cv_winnt_ignore_void=no)
- )
- if test "$tcl_cv_winnt_ignore_void" = "yes" ; then
- AC_DEFINE(HAVE_WINNT_IGNORE_VOID, 1,
- [Defined when cygwin/mingw ignores VOID define in winnt.h])
- fi
- fi
-
- # See if the compiler supports casting to a union type.
- # This is used to stop gcc from printing a compiler
- # warning when initializing a union member.
-
- AC_CACHE_CHECK(for cast to union support,
- tcl_cv_cast_to_union,
- AC_TRY_COMPILE([],
- [
- union foo { int i; double d; };
- union foo f = (union foo) (int) 0;
- ],
- tcl_cv_cast_to_union=yes,
- tcl_cv_cast_to_union=no)
- )
- if test "$tcl_cv_cast_to_union" = "yes"; then
- AC_DEFINE(HAVE_CAST_TO_UNION, 1,
- [Defined when compiler supports casting to union type.])
- fi
-
- AC_SUBST(CFLAGS_DEBUG)
- AC_SUBST(CFLAGS_OPTIMIZE)
- AC_SUBST(CFLAGS_WARNING)
-
- AC_SUBST(STLIB_LD)
- AC_SUBST(SHLIB_LD)
-
- AC_SUBST(SHLIB_LD_LIBS)
- AC_SUBST(SHLIB_CFLAGS)
-
- AC_SUBST(LD_LIBRARY_PATH_VAR)
-
- # These must be called after we do the basic CFLAGS checks and
- # verify any possible 64-bit or similar switches are necessary
- TEA_TCL_EARLY_FLAGS
- TEA_TCL_64BIT_FLAGS
-])
-
-#--------------------------------------------------------------------
-# TEA_SERIAL_PORT
-#
-# Determine which interface to use to talk to the serial port.
-# Note that #include lines must begin in leftmost column for
-# some compilers to recognize them as preprocessor directives,
-# and some build environments have stdin not pointing at a
-# pseudo-terminal (usually /dev/null instead.)
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Defines only one of the following vars:
-# HAVE_SYS_MODEM_H
-# USE_TERMIOS
-# USE_TERMIO
-# USE_SGTTY
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_SERIAL_PORT], [
- AC_CHECK_HEADERS(sys/modem.h)
- AC_CACHE_CHECK([termios vs. termio vs. sgtty], tcl_cv_api_serial, [
- AC_TRY_RUN([
-#include <termios.h>
-
-int main() {
- struct termios t;
- if (tcgetattr(0, &t) == 0) {
- cfsetospeed(&t, 0);
- t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
- return 0;
- }
- return 1;
-}], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
- if test $tcl_cv_api_serial = no ; then
- AC_TRY_RUN([
-#include <termio.h>
-
-int main() {
- struct termio t;
- if (ioctl(0, TCGETA, &t) == 0) {
- t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
- return 0;
- }
- return 1;
-}], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
- fi
- if test $tcl_cv_api_serial = no ; then
- AC_TRY_RUN([
-#include <sgtty.h>
-
-int main() {
- struct sgttyb t;
- if (ioctl(0, TIOCGETP, &t) == 0) {
- t.sg_ospeed = 0;
- t.sg_flags |= ODDP | EVENP | RAW;
- return 0;
- }
- return 1;
-}], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
- fi
- if test $tcl_cv_api_serial = no ; then
- AC_TRY_RUN([
-#include <termios.h>
-#include <errno.h>
-
-int main() {
- struct termios t;
- if (tcgetattr(0, &t) == 0
- || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
- cfsetospeed(&t, 0);
- t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
- return 0;
- }
- return 1;
-}], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
- fi
- if test $tcl_cv_api_serial = no; then
- AC_TRY_RUN([
-#include <termio.h>
-#include <errno.h>
-
-int main() {
- struct termio t;
- if (ioctl(0, TCGETA, &t) == 0
- || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
- t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
- return 0;
- }
- return 1;
- }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
- fi
- if test $tcl_cv_api_serial = no; then
- AC_TRY_RUN([
-#include <sgtty.h>
-#include <errno.h>
-
-int main() {
- struct sgttyb t;
- if (ioctl(0, TIOCGETP, &t) == 0
- || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
- t.sg_ospeed = 0;
- t.sg_flags |= ODDP | EVENP | RAW;
- return 0;
- }
- return 1;
-}], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none)
- fi])
- case $tcl_cv_api_serial in
- termios) AC_DEFINE(USE_TERMIOS, 1, [Use the termios API for serial lines]);;
- termio) AC_DEFINE(USE_TERMIO, 1, [Use the termio API for serial lines]);;
- sgtty) AC_DEFINE(USE_SGTTY, 1, [Use the sgtty API for serial lines]);;
- esac
-])
-
-#--------------------------------------------------------------------
-# TEA_PATH_X
-#
-# Locate the X11 header files and the X11 library archive. Try
-# the ac_path_x macro first, but if it doesn't find the X stuff
-# (e.g. because there's no xmkmf program) then check through
-# a list of possible directories. Under some conditions the
-# autoconf macro will return an include directory that contains
-# no include files, so double-check its result just to be safe.
-#
-# This should be called after TEA_CONFIG_CFLAGS as setting the
-# LIBS line can confuse some configure macro magic.
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Sets the following vars:
-# XINCLUDES
-# XLIBSW
-# PKG_LIBS (appends to)
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_PATH_X], [
- if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then
- TEA_PATH_UNIX_X
- fi
-])
-
-AC_DEFUN([TEA_PATH_UNIX_X], [
- AC_PATH_X
- not_really_there=""
- if test "$no_x" = ""; then
- if test "$x_includes" = ""; then
- AC_TRY_CPP([#include <X11/Xlib.h>], , not_really_there="yes")
- else
- if test ! -r $x_includes/X11/Xlib.h; then
- not_really_there="yes"
- fi
- fi
- fi
- if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then
- AC_MSG_CHECKING([for X11 header files])
- found_xincludes="no"
- AC_TRY_CPP([#include <X11/Xlib.h>], found_xincludes="yes", found_xincludes="no")
- if test "$found_xincludes" = "no"; then
- dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include"
- for i in $dirs ; do
- if test -r $i/X11/Xlib.h; then
- AC_MSG_RESULT([$i])
- XINCLUDES=" -I$i"
- found_xincludes="yes"
- break
- fi
- done
- fi
- else
- if test "$x_includes" != ""; then
- XINCLUDES="-I$x_includes"
- found_xincludes="yes"
- fi
- fi
- if test "$found_xincludes" = "no"; then
- AC_MSG_RESULT([couldn't find any!])
- fi
-
- if test "$no_x" = yes; then
- AC_MSG_CHECKING([for X11 libraries])
- XLIBSW=nope
- dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib"
- for i in $dirs ; do
- if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl -o -r $i/libX11.dylib; then
- AC_MSG_RESULT([$i])
- XLIBSW="-L$i -lX11"
- x_libraries="$i"
- break
- fi
- done
- else
- if test "$x_libraries" = ""; then
- XLIBSW=-lX11
- else
- XLIBSW="-L$x_libraries -lX11"
- fi
- fi
- if test "$XLIBSW" = nope ; then
- AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow)
- fi
- if test "$XLIBSW" = nope ; then
- AC_MSG_RESULT([could not find any! Using -lX11.])
- XLIBSW=-lX11
- fi
- # TEA specific:
- if test x"${XLIBSW}" != x ; then
- PKG_LIBS="${PKG_LIBS} ${XLIBSW}"
- fi
-])
-
-#--------------------------------------------------------------------
-# TEA_BLOCKING_STYLE
-#
-# The statements below check for systems where POSIX-style
-# non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented.
-# On these systems (mostly older ones), use the old BSD-style
-# FIONBIO approach instead.
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Defines some of the following vars:
-# HAVE_SYS_IOCTL_H
-# HAVE_SYS_FILIO_H
-# USE_FIONBIO
-# O_NONBLOCK
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_BLOCKING_STYLE], [
- AC_CHECK_HEADERS(sys/ioctl.h)
- AC_CHECK_HEADERS(sys/filio.h)
- TEA_CONFIG_SYSTEM
- AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O])
- case $system in
- OSF*)
- AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?])
- AC_MSG_RESULT([FIONBIO])
- ;;
- *)
- AC_MSG_RESULT([O_NONBLOCK])
- ;;
- esac
-])
-
-#--------------------------------------------------------------------
-# TEA_TIME_HANDLER
-#
-# Checks how the system deals with time.h, what time structures
-# are used on the system, and what fields the structures have.
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Defines some of the following vars:
-# USE_DELTA_FOR_TZ
-# HAVE_TM_GMTOFF
-# HAVE_TM_TZADJ
-# HAVE_TIMEZONE_VAR
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_TIME_HANDLER], [
- AC_CHECK_HEADERS(sys/time.h)
- AC_HEADER_TIME
- AC_STRUCT_TIMEZONE
-
- AC_CHECK_FUNCS(gmtime_r localtime_r)
-
- AC_CACHE_CHECK([tm_tzadj in struct tm], tcl_cv_member_tm_tzadj, [
- AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_tzadj;],
- tcl_cv_member_tm_tzadj=yes, tcl_cv_member_tm_tzadj=no)])
- if test $tcl_cv_member_tm_tzadj = yes ; then
- AC_DEFINE(HAVE_TM_TZADJ, 1, [Should we use the tm_tzadj field of struct tm?])
- fi
-
- AC_CACHE_CHECK([tm_gmtoff in struct tm], tcl_cv_member_tm_gmtoff, [
- AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_gmtoff;],
- tcl_cv_member_tm_gmtoff=yes, tcl_cv_member_tm_gmtoff=no)])
- if test $tcl_cv_member_tm_gmtoff = yes ; then
- AC_DEFINE(HAVE_TM_GMTOFF, 1, [Should we use the tm_gmtoff field of struct tm?])
- fi
-
- #
- # Its important to include time.h in this check, as some systems
- # (like convex) have timezone functions, etc.
- #
- AC_CACHE_CHECK([long timezone variable], tcl_cv_timezone_long, [
- AC_TRY_COMPILE([#include <time.h>],
- [extern long timezone;
- timezone += 1;
- exit (0);],
- tcl_cv_timezone_long=yes, tcl_cv_timezone_long=no)])
- if test $tcl_cv_timezone_long = yes ; then
- AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?])
- else
- #
- # On some systems (eg IRIX 6.2), timezone is a time_t and not a long.
- #
- AC_CACHE_CHECK([time_t timezone variable], tcl_cv_timezone_time, [
- AC_TRY_COMPILE([#include <time.h>],
- [extern time_t timezone;
- timezone += 1;
- exit (0);],
- tcl_cv_timezone_time=yes, tcl_cv_timezone_time=no)])
- if test $tcl_cv_timezone_time = yes ; then
- AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?])
- fi
- fi
-])
-
-#--------------------------------------------------------------------
-# TEA_BUGGY_STRTOD
-#
-# Under Solaris 2.4, strtod returns the wrong value for the
-# terminating character under some conditions. Check for this
-# and if the problem exists use a substitute procedure
-# "fixstrtod" (provided by Tcl) that corrects the error.
-# Also, on Compaq's Tru64 Unix 5.0,
-# strtod(" ") returns 0.0 instead of a failure to convert.
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Might defines some of the following vars:
-# strtod (=fixstrtod)
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_BUGGY_STRTOD], [
- AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0)
- if test "$tcl_strtod" = 1; then
- AC_CACHE_CHECK([for Solaris2.4/Tru64 strtod bugs], tcl_cv_strtod_buggy,[
- AC_TRY_RUN([
- extern double strtod();
- int main() {
- char *infString="Inf", *nanString="NaN", *spaceString=" ";
- char *term;
- double value;
- value = strtod(infString, &term);
- if ((term != infString) && (term[-1] == 0)) {
- exit(1);
- }
- value = strtod(nanString, &term);
- if ((term != nanString) && (term[-1] == 0)) {
- exit(1);
- }
- value = strtod(spaceString, &term);
- if (term == (spaceString+1)) {
- exit(1);
- }
- exit(0);
- }], tcl_cv_strtod_buggy=ok, tcl_cv_strtod_buggy=buggy,
- tcl_cv_strtod_buggy=buggy)])
- if test "$tcl_cv_strtod_buggy" = buggy; then
- AC_LIBOBJ([fixstrtod])
- USE_COMPAT=1
- AC_DEFINE(strtod, fixstrtod, [Do we want to use the strtod() in compat?])
- fi
- fi
-])
-
-#--------------------------------------------------------------------
-# TEA_TCL_EARLY_FLAGS
-#
-# Check for what flags are needed to be passed so the correct OS
-# features are available.
-#
-# Arguments:
-# None
-#
-# Results:
-#
-# Might define the following vars:
-# _ISOC99_SOURCE
-# _LARGEFILE64_SOURCE
-# _LARGEFILE_SOURCE64
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_TCL_EARLY_FLAG],[
- AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]),
- AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no,
- AC_TRY_COMPILE([[#define ]$1[ 1
-]$2], $3,
- [tcl_cv_flag_]translit($1,[A-Z],[a-z])=yes,
- [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no)))
- if test ["x${tcl_cv_flag_]translit($1,[A-Z],[a-z])[}" = "xyes"] ; then
- AC_DEFINE($1, 1, [Add the ]$1[ flag when building])
- tcl_flags="$tcl_flags $1"
- fi
-])
-
-AC_DEFUN([TEA_TCL_EARLY_FLAGS],[
- AC_MSG_CHECKING([for required early compiler flags])
- tcl_flags=""
- TEA_TCL_EARLY_FLAG(_ISOC99_SOURCE,[#include <stdlib.h>],
- [char *p = (char *)strtoll; char *q = (char *)strtoull;])
- TEA_TCL_EARLY_FLAG(_LARGEFILE64_SOURCE,[#include <sys/stat.h>],
- [struct stat64 buf; int i = stat64("/", &buf);])
- TEA_TCL_EARLY_FLAG(_LARGEFILE_SOURCE64,[#include <sys/stat.h>],
- [char *p = (char *)open64;])
- if test "x${tcl_flags}" = "x" ; then
- AC_MSG_RESULT([none])
- else
- AC_MSG_RESULT([${tcl_flags}])
- fi
-])
-
-#--------------------------------------------------------------------
-# TEA_TCL_64BIT_FLAGS
-#
-# Check for what is defined in the way of 64-bit features.
-#
-# Arguments:
-# None
-#
-# Results:
-#
-# Might define the following vars:
-# TCL_WIDE_INT_IS_LONG
-# TCL_WIDE_INT_TYPE
-# HAVE_STRUCT_DIRENT64
-# HAVE_STRUCT_STAT64
-# HAVE_TYPE_OFF64_T
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_TCL_64BIT_FLAGS], [
- AC_MSG_CHECKING([for 64-bit integer type])
- AC_CACHE_VAL(tcl_cv_type_64bit,[
- tcl_cv_type_64bit=none
- # See if the compiler knows natively about __int64
- AC_TRY_COMPILE(,[__int64 value = (__int64) 0;],
- tcl_type_64bit=__int64, tcl_type_64bit="long long")
- # See if we should use long anyway Note that we substitute in the
- # type that is our current guess for a 64-bit type inside this check
- # program, so it should be modified only carefully...
- AC_TRY_COMPILE(,[switch (0) {
- case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ;
- }],tcl_cv_type_64bit=${tcl_type_64bit})])
- if test "${tcl_cv_type_64bit}" = none ; then
- AC_DEFINE(TCL_WIDE_INT_IS_LONG, 1, [Are wide integers to be implemented with C 'long's?])
- AC_MSG_RESULT([using long])
- elif test "${tcl_cv_type_64bit}" = "__int64" \
- -a "${TEA_PLATFORM}" = "windows" ; then
- # TEA specific: We actually want to use the default tcl.h checks in
- # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER*
- AC_MSG_RESULT([using Tcl header defaults])
- else
- AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit},
- [What type should be used to define wide integers?])
- AC_MSG_RESULT([${tcl_cv_type_64bit}])
-
- # Now check for auxiliary declarations
- AC_CACHE_CHECK([for struct dirent64], tcl_cv_struct_dirent64,[
- AC_TRY_COMPILE([#include <sys/types.h>
-#include <dirent.h>],[struct dirent64 p;],
- tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)])
- if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then
- AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in <sys/types.h>?])
- fi
-
- AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[
- AC_TRY_COMPILE([#include <sys/stat.h>],[struct stat64 p;
-],
- tcl_cv_struct_stat64=yes,tcl_cv_struct_stat64=no)])
- if test "x${tcl_cv_struct_stat64}" = "xyes" ; then
- AC_DEFINE(HAVE_STRUCT_STAT64, 1, [Is 'struct stat64' in <sys/stat.h>?])
- fi
-
- AC_CHECK_FUNCS(open64 lseek64)
- AC_MSG_CHECKING([for off64_t])
- AC_CACHE_VAL(tcl_cv_type_off64_t,[
- AC_TRY_COMPILE([#include <sys/types.h>],[off64_t offset;
-],
- tcl_cv_type_off64_t=yes,tcl_cv_type_off64_t=no)])
- dnl Define HAVE_TYPE_OFF64_T only when the off64_t type and the
- dnl functions lseek64 and open64 are defined.
- if test "x${tcl_cv_type_off64_t}" = "xyes" && \
- test "x${ac_cv_func_lseek64}" = "xyes" && \
- test "x${ac_cv_func_open64}" = "xyes" ; then
- AC_DEFINE(HAVE_TYPE_OFF64_T, 1, [Is off64_t in <sys/types.h>?])
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no])
- fi
- fi
-])
-
-##
-## Here ends the standard Tcl configuration bits and starts the
-## TEA specific functions
-##
-
-#------------------------------------------------------------------------
-# TEA_INIT --
-#
-# Init various Tcl Extension Architecture (TEA) variables.
-# This should be the first called TEA_* macro.
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Defines and substs the following vars:
-# CYGPATH
-# EXEEXT
-# Defines only:
-# TEA_VERSION
-# TEA_INITED
-# TEA_PLATFORM (windows or unix)
-#
-# "cygpath" is used on windows to generate native path names for include
-# files. These variables should only be used with the compiler and linker
-# since they generate native path names.
-#
-# EXEEXT
-# Select the executable extension based on the host type. This
-# is a lightweight replacement for AC_EXEEXT that doesn't require
-# a compiler.
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_INIT], [
- TEA_VERSION="3.13"
-
- AC_MSG_CHECKING([TEA configuration])
- if test x"${PACKAGE_NAME}" = x ; then
- AC_MSG_ERROR([
-The PACKAGE_NAME variable must be defined by your TEA configure.ac])
- fi
- AC_MSG_RESULT([ok (TEA ${TEA_VERSION})])
-
- # If the user did not set CFLAGS, set it now to keep macros
- # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2".
- if test "${CFLAGS+set}" != "set" ; then
- CFLAGS=""
- fi
-
- case "`uname -s`" in
- *win32*|*WIN32*|*MINGW32_*|*MINGW64_*)
- AC_CHECK_PROG(CYGPATH, cygpath, cygpath -m, echo)
- EXEEXT=".exe"
- TEA_PLATFORM="windows"
- ;;
- *CYGWIN_*)
- EXEEXT=".exe"
- # CYGPATH and TEA_PLATFORM are determined later in LOAD_TCLCONFIG
- ;;
- *)
- CYGPATH=echo
- # Maybe we are cross-compiling....
- case ${host_alias} in
- *mingw32*)
- EXEEXT=".exe"
- TEA_PLATFORM="windows"
- ;;
- *)
- EXEEXT=""
- TEA_PLATFORM="unix"
- ;;
- esac
- ;;
- esac
-
- # Check if exec_prefix is set. If not use fall back to prefix.
- # Note when adjusted, so that TEA_PREFIX can correct for this.
- # This is needed for recursive configures, since autoconf propagates
- # $prefix, but not $exec_prefix (doh!).
- if test x$exec_prefix = xNONE ; then
- exec_prefix_default=yes
- exec_prefix=$prefix
- fi
-
- AC_MSG_NOTICE([configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}])
-
- AC_SUBST(EXEEXT)
- AC_SUBST(CYGPATH)
-
- # This package name must be replaced statically for AC_SUBST to work
- AC_SUBST(PKG_LIB_FILE)
- # Substitute STUB_LIB_FILE in case package creates a stub library too.
- AC_SUBST(PKG_STUB_LIB_FILE)
-
- # We AC_SUBST these here to ensure they are subst'ed,
- # in case the user doesn't call TEA_ADD_...
- AC_SUBST(PKG_STUB_SOURCES)
- AC_SUBST(PKG_STUB_OBJECTS)
- AC_SUBST(PKG_TCL_SOURCES)
- AC_SUBST(PKG_HEADERS)
- AC_SUBST(PKG_INCLUDES)
- AC_SUBST(PKG_LIBS)
- AC_SUBST(PKG_CFLAGS)
-
- # Configure the installer.
- TEA_INSTALLER
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_SOURCES --
-#
-# Specify one or more source files. Users should check for
-# the right platform before adding to their list.
-# It is not important to specify the directory, as long as it is
-# in the generic, win or unix subdirectory of $(srcdir).
-#
-# Arguments:
-# one or more file names
-#
-# Results:
-#
-# Defines and substs the following vars:
-# PKG_SOURCES
-# PKG_OBJECTS
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_SOURCES], [
- vars="$@"
- for i in $vars; do
- case $i in
- [\$]*)
- # allow $-var names
- PKG_SOURCES="$PKG_SOURCES $i"
- PKG_OBJECTS="$PKG_OBJECTS $i"
- ;;
- *)
- # check for existence - allows for generic/win/unix VPATH
- # To add more dirs here (like 'src'), you have to update VPATH
- # in Makefile.in as well
- if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
- -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
- -a ! -f "${srcdir}/macosx/$i" \
- ; then
- AC_MSG_ERROR([could not find source file '$i'])
- fi
- PKG_SOURCES="$PKG_SOURCES $i"
- # this assumes it is in a VPATH dir
- i=`basename $i`
- # handle user calling this before or after TEA_SETUP_COMPILER
- if test x"${OBJEXT}" != x ; then
- j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}"
- else
- j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}"
- fi
- PKG_OBJECTS="$PKG_OBJECTS $j"
- ;;
- esac
- done
- AC_SUBST(PKG_SOURCES)
- AC_SUBST(PKG_OBJECTS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_STUB_SOURCES --
-#
-# Specify one or more source files. Users should check for
-# the right platform before adding to their list.
-# It is not important to specify the directory, as long as it is
-# in the generic, win or unix subdirectory of $(srcdir).
-#
-# Arguments:
-# one or more file names
-#
-# Results:
-#
-# Defines and substs the following vars:
-# PKG_STUB_SOURCES
-# PKG_STUB_OBJECTS
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_STUB_SOURCES], [
- vars="$@"
- for i in $vars; do
- # check for existence - allows for generic/win/unix VPATH
- if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
- -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
- -a ! -f "${srcdir}/macosx/$i" \
- ; then
- AC_MSG_ERROR([could not find stub source file '$i'])
- fi
- PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i"
- # this assumes it is in a VPATH dir
- i=`basename $i`
- # handle user calling this before or after TEA_SETUP_COMPILER
- if test x"${OBJEXT}" != x ; then
- j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}"
- else
- j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}"
- fi
- PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j"
- done
- AC_SUBST(PKG_STUB_SOURCES)
- AC_SUBST(PKG_STUB_OBJECTS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_TCL_SOURCES --
-#
-# Specify one or more Tcl source files. These should be platform
-# independent runtime files.
-#
-# Arguments:
-# one or more file names
-#
-# Results:
-#
-# Defines and substs the following vars:
-# PKG_TCL_SOURCES
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_TCL_SOURCES], [
- vars="$@"
- for i in $vars; do
- # check for existence, be strict because it is installed
- if test ! -f "${srcdir}/$i" ; then
- AC_MSG_ERROR([could not find tcl source file '${srcdir}/$i'])
- fi
- PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i"
- done
- AC_SUBST(PKG_TCL_SOURCES)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_HEADERS --
-#
-# Specify one or more source headers. Users should check for
-# the right platform before adding to their list.
-#
-# Arguments:
-# one or more file names
-#
-# Results:
-#
-# Defines and substs the following vars:
-# PKG_HEADERS
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_HEADERS], [
- vars="$@"
- for i in $vars; do
- # check for existence, be strict because it is installed
- if test ! -f "${srcdir}/$i" ; then
- AC_MSG_ERROR([could not find header file '${srcdir}/$i'])
- fi
- PKG_HEADERS="$PKG_HEADERS $i"
- done
- AC_SUBST(PKG_HEADERS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_INCLUDES --
-#
-# Specify one or more include dirs. Users should check for
-# the right platform before adding to their list.
-#
-# Arguments:
-# one or more file names
-#
-# Results:
-#
-# Defines and substs the following vars:
-# PKG_INCLUDES
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_INCLUDES], [
- vars="$@"
- for i in $vars; do
- PKG_INCLUDES="$PKG_INCLUDES $i"
- done
- AC_SUBST(PKG_INCLUDES)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_LIBS --
-#
-# Specify one or more libraries. Users should check for
-# the right platform before adding to their list. For Windows,
-# libraries provided in "foo.lib" format will be converted to
-# "-lfoo" when using GCC (mingw).
-#
-# Arguments:
-# one or more file names
-#
-# Results:
-#
-# Defines and substs the following vars:
-# PKG_LIBS
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_LIBS], [
- vars="$@"
- for i in $vars; do
- if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then
- # Convert foo.lib to -lfoo for GCC. No-op if not *.lib
- i=`echo "$i" | sed -e 's/^\([[^-]].*\)\.lib[$]/-l\1/i'`
- fi
- PKG_LIBS="$PKG_LIBS $i"
- done
- AC_SUBST(PKG_LIBS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_CFLAGS --
-#
-# Specify one or more CFLAGS. Users should check for
-# the right platform before adding to their list.
-#
-# Arguments:
-# one or more file names
-#
-# Results:
-#
-# Defines and substs the following vars:
-# PKG_CFLAGS
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_CFLAGS], [
- PKG_CFLAGS="$PKG_CFLAGS $@"
- AC_SUBST(PKG_CFLAGS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_CLEANFILES --
-#
-# Specify one or more CLEANFILES.
-#
-# Arguments:
-# one or more file names to clean target
-#
-# Results:
-#
-# Appends to CLEANFILES, already defined for subst in LOAD_TCLCONFIG
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_CLEANFILES], [
- CLEANFILES="$CLEANFILES $@"
-])
-
-#------------------------------------------------------------------------
-# TEA_PREFIX --
-#
-# Handle the --prefix=... option by defaulting to what Tcl gave
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# If --prefix or --exec-prefix was not specified, $prefix and
-# $exec_prefix will be set to the values given to Tcl when it was
-# configured.
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_PREFIX], [
- if test "${prefix}" = "NONE"; then
- prefix_default=yes
- if test x"${TCL_PREFIX}" != x; then
- AC_MSG_NOTICE([--prefix defaulting to TCL_PREFIX ${TCL_PREFIX}])
- prefix=${TCL_PREFIX}
- else
- AC_MSG_NOTICE([--prefix defaulting to /usr/local])
- prefix=/usr/local
- fi
- fi
- if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \
- -o x"${exec_prefix_default}" = x"yes" ; then
- if test x"${TCL_EXEC_PREFIX}" != x; then
- AC_MSG_NOTICE([--exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}])
- exec_prefix=${TCL_EXEC_PREFIX}
- else
- AC_MSG_NOTICE([--exec-prefix defaulting to ${prefix}])
- exec_prefix=$prefix
- fi
- fi
-])
-
-#------------------------------------------------------------------------
-# TEA_SETUP_COMPILER_CC --
-#
-# Do compiler checks the way we want. This is just a replacement
-# for AC_PROG_CC in TEA configure.ac files to make them cleaner.
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Sets up CC var and other standard bits we need to make executables.
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_SETUP_COMPILER_CC], [
- # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE)
- # in this macro, they need to go into TEA_SETUP_COMPILER instead.
-
- AC_PROG_CC
- AC_PROG_CPP
-
- #--------------------------------------------------------------------
- # Checks to see if the make program sets the $MAKE variable.
- #--------------------------------------------------------------------
-
- AC_PROG_MAKE_SET
-
- #--------------------------------------------------------------------
- # Find ranlib
- #--------------------------------------------------------------------
-
- AC_CHECK_TOOL(RANLIB, ranlib)
-
- #--------------------------------------------------------------------
- # Determines the correct binary file extension (.o, .obj, .exe etc.)
- #--------------------------------------------------------------------
-
- AC_OBJEXT
- AC_EXEEXT
-])
-
-#------------------------------------------------------------------------
-# TEA_SETUP_COMPILER --
-#
-# Do compiler checks that use the compiler. This must go after
-# TEA_SETUP_COMPILER_CC, which does the actual compiler check.
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Sets up CC var and other standard bits we need to make executables.
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_SETUP_COMPILER], [
- # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here.
- AC_REQUIRE([TEA_SETUP_COMPILER_CC])
-
- #------------------------------------------------------------------------
- # If we're using GCC, see if the compiler understands -pipe. If so, use it.
- # It makes compiling go faster. (This is only a performance feature.)
- #------------------------------------------------------------------------
-
- if test -z "$no_pipe" -a -n "$GCC"; then
- AC_CACHE_CHECK([if the compiler understands -pipe],
- tcl_cv_cc_pipe, [
- hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe"
- AC_TRY_COMPILE(,, tcl_cv_cc_pipe=yes, tcl_cv_cc_pipe=no)
- CFLAGS=$hold_cflags])
- if test $tcl_cv_cc_pipe = yes; then
- CFLAGS="$CFLAGS -pipe"
- fi
- fi
-
- #--------------------------------------------------------------------
- # Common compiler flag setup
- #--------------------------------------------------------------------
-
- AC_C_BIGENDIAN
-])
-
-#------------------------------------------------------------------------
-# TEA_MAKE_LIB --
-#
-# Generate a line that can be used to build a shared/unshared library
-# in a platform independent manner.
-#
-# Arguments:
-# none
-#
-# Requires:
-#
-# Results:
-#
-# Defines the following vars:
-# CFLAGS - Done late here to note disturb other AC macros
-# MAKE_LIB - Command to execute to build the Tcl library;
-# differs depending on whether or not Tcl is being
-# compiled as a shared library.
-# MAKE_SHARED_LIB Makefile rule for building a shared library
-# MAKE_STATIC_LIB Makefile rule for building a static library
-# MAKE_STUB_LIB Makefile rule for building a stub library
-# VC_MANIFEST_EMBED_DLL Makefile rule for embedded VC manifest in DLL
-# VC_MANIFEST_EMBED_EXE Makefile rule for embedded VC manifest in EXE
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_MAKE_LIB], [
- if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then
- MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)"
- MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)"
- AC_EGREP_CPP([manifest needed], [
-#if defined(_MSC_VER) && _MSC_VER >= 1400
-print("manifest needed")
-#endif
- ], [
- # Could do a CHECK_PROG for mt, but should always be with MSVC8+
- VC_MANIFEST_EMBED_DLL="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;2 ; fi"
- VC_MANIFEST_EMBED_EXE="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;1 ; fi"
- MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}"
- TEA_ADD_CLEANFILES([*.manifest])
- ])
- MAKE_STUB_LIB="\${STLIB_LD} -nodefaultlib -out:\[$]@ \$(PKG_STUB_OBJECTS)"
- else
- MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)"
- MAKE_SHARED_LIB="\${SHLIB_LD} -o \[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}"
- MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \$(PKG_STUB_OBJECTS)"
- fi
-
- if test "${SHARED_BUILD}" = "1" ; then
- MAKE_LIB="${MAKE_SHARED_LIB} "
- else
- MAKE_LIB="${MAKE_STATIC_LIB} "
- fi
-
- #--------------------------------------------------------------------
- # Shared libraries and static libraries have different names.
- # Use the double eval to make sure any variables in the suffix is
- # substituted. (@@@ Might not be necessary anymore)
- #--------------------------------------------------------------------
-
- if test "${TEA_PLATFORM}" = "windows" ; then
- if test "${SHARED_BUILD}" = "1" ; then
- # We force the unresolved linking of symbols that are really in
- # the private libraries of Tcl and Tk.
- if test x"${TK_BIN_DIR}" != x ; then
- SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\""
- fi
- SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\""
- if test "$GCC" = "yes"; then
- SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -static-libgcc"
- fi
- eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}"
- else
- eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}"
- if test "$GCC" = "yes"; then
- PKG_LIB_FILE=lib${PKG_LIB_FILE}
- fi
- fi
- # Some packages build their own stubs libraries
- eval eval "PKG_STUB_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}"
- if test "$GCC" = "yes"; then
- PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE}
- fi
- # These aren't needed on Windows (either MSVC or gcc)
- RANLIB=:
- RANLIB_STUB=:
- else
- RANLIB_STUB="${RANLIB}"
- if test "${SHARED_BUILD}" = "1" ; then
- SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}"
- if test x"${TK_BIN_DIR}" != x ; then
- SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}"
- fi
- eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}"
- RANLIB=:
- else
- eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}"
- fi
- # Some packages build their own stubs libraries
- eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}"
- fi
-
- # These are escaped so that only CFLAGS is picked up at configure time.
- # The other values will be substituted at make time.
- CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}"
- if test "${SHARED_BUILD}" = "1" ; then
- CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}"
- fi
-
- AC_SUBST(MAKE_LIB)
- AC_SUBST(MAKE_SHARED_LIB)
- AC_SUBST(MAKE_STATIC_LIB)
- AC_SUBST(MAKE_STUB_LIB)
- AC_SUBST(RANLIB_STUB)
- AC_SUBST(VC_MANIFEST_EMBED_DLL)
- AC_SUBST(VC_MANIFEST_EMBED_EXE)
-])
-
-#------------------------------------------------------------------------
-# TEA_LIB_SPEC --
-#
-# Compute the name of an existing object library located in libdir
-# from the given base name and produce the appropriate linker flags.
-#
-# Arguments:
-# basename The base name of the library without version
-# numbers, extensions, or "lib" prefixes.
-# extra_dir Extra directory in which to search for the
-# library. This location is used first, then
-# $prefix/$exec-prefix, then some defaults.
-#
-# Requires:
-# TEA_INIT and TEA_PREFIX must be called first.
-#
-# Results:
-#
-# Defines the following vars:
-# ${basename}_LIB_NAME The computed library name.
-# ${basename}_LIB_SPEC The computed linker flags.
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_LIB_SPEC], [
- AC_MSG_CHECKING([for $1 library])
-
- # Look in exec-prefix for the library (defined by TEA_PREFIX).
-
- tea_lib_name_dir="${exec_prefix}/lib"
-
- # Or in a user-specified location.
-
- if test x"$2" != x ; then
- tea_extra_lib_dir=$2
- else
- tea_extra_lib_dir=NONE
- fi
-
- for i in \
- `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \
- `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \
- `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \
- `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \
- `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \
- `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \
- `ls -dr /usr/lib64/$1[[0-9]]*.lib 2>/dev/null ` \
- `ls -dr /usr/lib64/lib$1[[0-9]]* 2>/dev/null ` \
- `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \
- `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do
- if test -f "$i" ; then
- tea_lib_name_dir=`dirname $i`
- $1_LIB_NAME=`basename $i`
- $1_LIB_PATH_NAME=$i
- break
- fi
- done
-
- if test "${TEA_PLATFORM}" = "windows"; then
- $1_LIB_SPEC=\"`${CYGPATH} ${$1_LIB_PATH_NAME} 2>/dev/null`\"
- else
- # Strip off the leading "lib" and trailing ".a" or ".so"
-
- tea_lib_name_lib=`echo ${$1_LIB_NAME}|sed -e 's/^lib//' -e 's/\.[[^.]]*$//' -e 's/\.so.*//'`
- $1_LIB_SPEC="-L${tea_lib_name_dir} -l${tea_lib_name_lib}"
- fi
-
- if test "x${$1_LIB_NAME}" = x ; then
- AC_MSG_ERROR([not found])
- else
- AC_MSG_RESULT([${$1_LIB_SPEC}])
- fi
-])
-
-#------------------------------------------------------------------------
-# TEA_PRIVATE_TCL_HEADERS --
-#
-# Locate the private Tcl include files
-#
-# Arguments:
-#
-# Requires:
-# TCL_SRC_DIR Assumes that TEA_LOAD_TCLCONFIG has
-# already been called.
-#
-# Results:
-#
-# Substitutes the following vars:
-# TCL_TOP_DIR_NATIVE
-# TCL_INCLUDES
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PRIVATE_TCL_HEADERS], [
- # Allow for --with-tclinclude to take effect and define ${ac_cv_c_tclh}
- AC_REQUIRE([TEA_PUBLIC_TCL_HEADERS])
- AC_MSG_CHECKING([for Tcl private include files])
-
- TCL_SRC_DIR_NATIVE=`${CYGPATH} ${TCL_SRC_DIR}`
- TCL_TOP_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}\"
-
- # Check to see if tcl<Plat>Port.h isn't already with the public headers
- # Don't look for tclInt.h because that resides with tcl.h in the core
- # sources, but the <plat>Port headers are in a different directory
- if test "${TEA_PLATFORM}" = "windows" -a \
- -f "${ac_cv_c_tclh}/tclWinPort.h"; then
- result="private headers found with public headers"
- elif test "${TEA_PLATFORM}" = "unix" -a \
- -f "${ac_cv_c_tclh}/tclUnixPort.h"; then
- result="private headers found with public headers"
- else
- TCL_GENERIC_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/generic\"
- if test "${TEA_PLATFORM}" = "windows"; then
- TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/win\"
- else
- TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/unix\"
- fi
- # Overwrite the previous TCL_INCLUDES as this should capture both
- # public and private headers in the same set.
- # We want to ensure these are substituted so as not to require
- # any *_NATIVE vars be defined in the Makefile
- TCL_INCLUDES="-I${TCL_GENERIC_DIR_NATIVE} -I${TCL_PLATFORM_DIR_NATIVE}"
- if test "`uname -s`" = "Darwin"; then
- # If Tcl was built as a framework, attempt to use
- # the framework's Headers and PrivateHeaders directories
- case ${TCL_DEFS} in
- *TCL_FRAMEWORK*)
- if test -d "${TCL_BIN_DIR}/Headers" -a \
- -d "${TCL_BIN_DIR}/PrivateHeaders"; then
- TCL_INCLUDES="-I\"${TCL_BIN_DIR}/Headers\" -I\"${TCL_BIN_DIR}/PrivateHeaders\" ${TCL_INCLUDES}"
- else
- TCL_INCLUDES="${TCL_INCLUDES} ${TCL_INCLUDE_SPEC} `echo "${TCL_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`"
- fi
- ;;
- esac
- result="Using ${TCL_INCLUDES}"
- else
- if test ! -f "${TCL_SRC_DIR}/generic/tclInt.h" ; then
- AC_MSG_ERROR([Cannot find private header tclInt.h in ${TCL_SRC_DIR}])
- fi
- result="Using srcdir found in tclConfig.sh: ${TCL_SRC_DIR}"
- fi
- fi
-
- AC_SUBST(TCL_TOP_DIR_NATIVE)
-
- AC_SUBST(TCL_INCLUDES)
- AC_MSG_RESULT([${result}])
-])
-
-#------------------------------------------------------------------------
-# TEA_PUBLIC_TCL_HEADERS --
-#
-# Locate the installed public Tcl header files
-#
-# Arguments:
-# None.
-#
-# Requires:
-# CYGPATH must be set
-#
-# Results:
-#
-# Adds a --with-tclinclude switch to configure.
-# Result is cached.
-#
-# Substitutes the following vars:
-# TCL_INCLUDES
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PUBLIC_TCL_HEADERS], [
- AC_MSG_CHECKING([for Tcl public headers])
-
- AC_ARG_WITH(tclinclude, [ --with-tclinclude directory containing the public Tcl header files], with_tclinclude=${withval})
-
- AC_CACHE_VAL(ac_cv_c_tclh, [
- # Use the value from --with-tclinclude, if it was given
-
- if test x"${with_tclinclude}" != x ; then
- if test -f "${with_tclinclude}/tcl.h" ; then
- ac_cv_c_tclh=${with_tclinclude}
- else
- AC_MSG_ERROR([${with_tclinclude} directory does not contain tcl.h])
- fi
- else
- list=""
- if test "`uname -s`" = "Darwin"; then
- # If Tcl was built as a framework, attempt to use
- # the framework's Headers directory
- case ${TCL_DEFS} in
- *TCL_FRAMEWORK*)
- list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`"
- ;;
- esac
- fi
-
- # Look in the source dir only if Tcl is not installed,
- # and in that situation, look there before installed locations.
- if test -f "${TCL_BIN_DIR}/Makefile" ; then
- list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`"
- fi
-
- # Check order: pkg --prefix location, Tcl's --prefix location,
- # relative to directory of tclConfig.sh.
-
- eval "temp_includedir=${includedir}"
- list="$list \
- `ls -d ${temp_includedir} 2>/dev/null` \
- `ls -d ${TCL_PREFIX}/include 2>/dev/null` \
- `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`"
- if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then
- list="$list /usr/local/include /usr/include"
- if test x"${TCL_INCLUDE_SPEC}" != x ; then
- d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'`
- list="$list `ls -d ${d} 2>/dev/null`"
- fi
- fi
- for i in $list ; do
- if test -f "$i/tcl.h" ; then
- ac_cv_c_tclh=$i
- break
- fi
- done
- fi
- ])
-
- # Print a message based on how we determined the include path
-
- if test x"${ac_cv_c_tclh}" = x ; then
- AC_MSG_ERROR([tcl.h not found. Please specify its location with --with-tclinclude])
- else
- AC_MSG_RESULT([${ac_cv_c_tclh}])
- fi
-
- # Convert to a native path and substitute into the output files.
-
- INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}`
-
- TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
-
- AC_SUBST(TCL_INCLUDES)
-])
-
-#------------------------------------------------------------------------
-# TEA_PRIVATE_TK_HEADERS --
-#
-# Locate the private Tk include files
-#
-# Arguments:
-#
-# Requires:
-# TK_SRC_DIR Assumes that TEA_LOAD_TKCONFIG has
-# already been called.
-#
-# Results:
-#
-# Substitutes the following vars:
-# TK_INCLUDES
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PRIVATE_TK_HEADERS], [
- # Allow for --with-tkinclude to take effect and define ${ac_cv_c_tkh}
- AC_REQUIRE([TEA_PUBLIC_TK_HEADERS])
- AC_MSG_CHECKING([for Tk private include files])
-
- TK_SRC_DIR_NATIVE=`${CYGPATH} ${TK_SRC_DIR}`
- TK_TOP_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}\"
-
- # Check to see if tk<Plat>Port.h isn't already with the public headers
- # Don't look for tkInt.h because that resides with tk.h in the core
- # sources, but the <plat>Port headers are in a different directory
- if test "${TEA_PLATFORM}" = "windows" -a \
- -f "${ac_cv_c_tkh}/tkWinPort.h"; then
- result="private headers found with public headers"
- elif test "${TEA_PLATFORM}" = "unix" -a \
- -f "${ac_cv_c_tkh}/tkUnixPort.h"; then
- result="private headers found with public headers"
- else
- TK_GENERIC_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/generic\"
- TK_XLIB_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/xlib\"
- if test "${TEA_PLATFORM}" = "windows"; then
- TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/win\"
- else
- TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/unix\"
- fi
- # Overwrite the previous TK_INCLUDES as this should capture both
- # public and private headers in the same set.
- # We want to ensure these are substituted so as not to require
- # any *_NATIVE vars be defined in the Makefile
- TK_INCLUDES="-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE}"
- # Detect and add ttk subdir
- if test -d "${TK_SRC_DIR}/generic/ttk"; then
- TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/generic/ttk\""
- fi
- if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then
- TK_INCLUDES="${TK_INCLUDES} -I\"${TK_XLIB_DIR_NATIVE}\""
- fi
- if test "${TEA_WINDOWINGSYSTEM}" = "aqua"; then
- TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/macosx\""
- fi
- if test "`uname -s`" = "Darwin"; then
- # If Tk was built as a framework, attempt to use
- # the framework's Headers and PrivateHeaders directories
- case ${TK_DEFS} in
- *TK_FRAMEWORK*)
- if test -d "${TK_BIN_DIR}/Headers" -a \
- -d "${TK_BIN_DIR}/PrivateHeaders"; then
- TK_INCLUDES="-I\"${TK_BIN_DIR}/Headers\" -I\"${TK_BIN_DIR}/PrivateHeaders\" ${TK_INCLUDES}"
- else
- TK_INCLUDES="${TK_INCLUDES} ${TK_INCLUDE_SPEC} `echo "${TK_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`"
- fi
- ;;
- esac
- result="Using ${TK_INCLUDES}"
- else
- if test ! -f "${TK_SRC_DIR}/generic/tkInt.h" ; then
- AC_MSG_ERROR([Cannot find private header tkInt.h in ${TK_SRC_DIR}])
- fi
- result="Using srcdir found in tkConfig.sh: ${TK_SRC_DIR}"
- fi
- fi
-
- AC_SUBST(TK_TOP_DIR_NATIVE)
- AC_SUBST(TK_XLIB_DIR_NATIVE)
-
- AC_SUBST(TK_INCLUDES)
- AC_MSG_RESULT([${result}])
-])
-
-#------------------------------------------------------------------------
-# TEA_PUBLIC_TK_HEADERS --
-#
-# Locate the installed public Tk header files
-#
-# Arguments:
-# None.
-#
-# Requires:
-# CYGPATH must be set
-#
-# Results:
-#
-# Adds a --with-tkinclude switch to configure.
-# Result is cached.
-#
-# Substitutes the following vars:
-# TK_INCLUDES
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PUBLIC_TK_HEADERS], [
- AC_MSG_CHECKING([for Tk public headers])
-
- AC_ARG_WITH(tkinclude, [ --with-tkinclude directory containing the public Tk header files], with_tkinclude=${withval})
-
- AC_CACHE_VAL(ac_cv_c_tkh, [
- # Use the value from --with-tkinclude, if it was given
-
- if test x"${with_tkinclude}" != x ; then
- if test -f "${with_tkinclude}/tk.h" ; then
- ac_cv_c_tkh=${with_tkinclude}
- else
- AC_MSG_ERROR([${with_tkinclude} directory does not contain tk.h])
- fi
- else
- list=""
- if test "`uname -s`" = "Darwin"; then
- # If Tk was built as a framework, attempt to use
- # the framework's Headers directory.
- case ${TK_DEFS} in
- *TK_FRAMEWORK*)
- list="`ls -d ${TK_BIN_DIR}/Headers 2>/dev/null`"
- ;;
- esac
- fi
-
- # Look in the source dir only if Tk is not installed,
- # and in that situation, look there before installed locations.
- if test -f "${TK_BIN_DIR}/Makefile" ; then
- list="$list `ls -d ${TK_SRC_DIR}/generic 2>/dev/null`"
- fi
-
- # Check order: pkg --prefix location, Tk's --prefix location,
- # relative to directory of tkConfig.sh, Tcl's --prefix location,
- # relative to directory of tclConfig.sh.
-
- eval "temp_includedir=${includedir}"
- list="$list \
- `ls -d ${temp_includedir} 2>/dev/null` \
- `ls -d ${TK_PREFIX}/include 2>/dev/null` \
- `ls -d ${TK_BIN_DIR}/../include 2>/dev/null` \
- `ls -d ${TCL_PREFIX}/include 2>/dev/null` \
- `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`"
- if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then
- list="$list /usr/local/include /usr/include"
- if test x"${TK_INCLUDE_SPEC}" != x ; then
- d=`echo "${TK_INCLUDE_SPEC}" | sed -e 's/^-I//'`
- list="$list `ls -d ${d} 2>/dev/null`"
- fi
- fi
- for i in $list ; do
- if test -f "$i/tk.h" ; then
- ac_cv_c_tkh=$i
- break
- fi
- done
- fi
- ])
-
- # Print a message based on how we determined the include path
-
- if test x"${ac_cv_c_tkh}" = x ; then
- AC_MSG_ERROR([tk.h not found. Please specify its location with --with-tkinclude])
- else
- AC_MSG_RESULT([${ac_cv_c_tkh}])
- fi
-
- # Convert to a native path and substitute into the output files.
-
- INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tkh}`
-
- TK_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
-
- AC_SUBST(TK_INCLUDES)
-
- if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then
- # On Windows and Aqua, we need the X compat headers
- AC_MSG_CHECKING([for X11 header files])
- if test ! -r "${INCLUDE_DIR_NATIVE}/X11/Xlib.h"; then
- INCLUDE_DIR_NATIVE="`${CYGPATH} ${TK_SRC_DIR}/xlib`"
- TK_XINCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
- AC_SUBST(TK_XINCLUDES)
- fi
- AC_MSG_RESULT([${INCLUDE_DIR_NATIVE}])
- fi
-])
-
-#------------------------------------------------------------------------
-# TEA_PATH_CONFIG --
-#
-# Locate the ${1}Config.sh file and perform a sanity check on
-# the ${1} compile flags. These are used by packages like
-# [incr Tk] that load *Config.sh files from more than Tcl and Tk.
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Adds the following arguments to configure:
-# --with-$1=...
-#
-# Defines the following vars:
-# $1_BIN_DIR Full path to the directory containing
-# the $1Config.sh file
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PATH_CONFIG], [
- #
- # Ok, lets find the $1 configuration
- # First, look for one uninstalled.
- # the alternative search directory is invoked by --with-$1
- #
-
- if test x"${no_$1}" = x ; then
- # we reset no_$1 in case something fails here
- no_$1=true
- AC_ARG_WITH($1, [ --with-$1 directory containing $1 configuration ($1Config.sh)], with_$1config=${withval})
- AC_MSG_CHECKING([for $1 configuration])
- AC_CACHE_VAL(ac_cv_c_$1config,[
-
- # First check to see if --with-$1 was specified.
- if test x"${with_$1config}" != x ; then
- case ${with_$1config} in
- */$1Config.sh )
- if test -f ${with_$1config}; then
- AC_MSG_WARN([--with-$1 argument should refer to directory containing $1Config.sh, not to $1Config.sh itself])
- with_$1config=`echo ${with_$1config} | sed 's!/$1Config\.sh$!!'`
- fi;;
- esac
- if test -f "${with_$1config}/$1Config.sh" ; then
- ac_cv_c_$1config=`(cd ${with_$1config}; pwd)`
- else
- AC_MSG_ERROR([${with_$1config} directory doesn't contain $1Config.sh])
- fi
- fi
-
- # then check for a private $1 installation
- if test x"${ac_cv_c_$1config}" = x ; then
- for i in \
- ../$1 \
- `ls -dr ../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
- `ls -dr ../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
- `ls -dr ../$1*[[0-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
- ../../$1 \
- `ls -dr ../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
- `ls -dr ../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
- `ls -dr ../../$1*[[0-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
- ../../../$1 \
- `ls -dr ../../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
- `ls -dr ../../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
- `ls -dr ../../../$1*[[0-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ../../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
- ${srcdir}/../$1 \
- `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
- `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
- `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]] 2>/dev/null` \
- `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
- ; do
- if test -f "$i/$1Config.sh" ; then
- ac_cv_c_$1config=`(cd $i; pwd)`
- break
- fi
- if test -f "$i/unix/$1Config.sh" ; then
- ac_cv_c_$1config=`(cd $i/unix; pwd)`
- break
- fi
- done
- fi
-
- # check in a few common install locations
- if test x"${ac_cv_c_$1config}" = x ; then
- for i in `ls -d ${libdir} 2>/dev/null` \
- `ls -d ${exec_prefix}/lib 2>/dev/null` \
- `ls -d ${prefix}/lib 2>/dev/null` \
- `ls -d /usr/local/lib 2>/dev/null` \
- `ls -d /usr/contrib/lib 2>/dev/null` \
- `ls -d /usr/pkg/lib 2>/dev/null` \
- `ls -d /usr/lib 2>/dev/null` \
- `ls -d /usr/lib64 2>/dev/null` \
- ; do
- if test -f "$i/$1Config.sh" ; then
- ac_cv_c_$1config=`(cd $i; pwd)`
- break
- fi
- done
- fi
- ])
-
- if test x"${ac_cv_c_$1config}" = x ; then
- $1_BIN_DIR="# no $1 configs found"
- AC_MSG_WARN([Cannot find $1 configuration definitions])
- exit 0
- else
- no_$1=
- $1_BIN_DIR=${ac_cv_c_$1config}
- AC_MSG_RESULT([found $$1_BIN_DIR/$1Config.sh])
- fi
- fi
-])
-
-#------------------------------------------------------------------------
-# TEA_LOAD_CONFIG --
-#
-# Load the $1Config.sh file
-#
-# Arguments:
-#
-# Requires the following vars to be set:
-# $1_BIN_DIR
-#
-# Results:
-#
-# Substitutes the following vars:
-# $1_SRC_DIR
-# $1_LIB_FILE
-# $1_LIB_SPEC
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_LOAD_CONFIG], [
- AC_MSG_CHECKING([for existence of ${$1_BIN_DIR}/$1Config.sh])
-
- if test -f "${$1_BIN_DIR}/$1Config.sh" ; then
- AC_MSG_RESULT([loading])
- . "${$1_BIN_DIR}/$1Config.sh"
- else
- AC_MSG_RESULT([file not found])
- fi
-
- #
- # If the $1_BIN_DIR is the build directory (not the install directory),
- # then set the common variable name to the value of the build variables.
- # For example, the variable $1_LIB_SPEC will be set to the value
- # of $1_BUILD_LIB_SPEC. An extension should make use of $1_LIB_SPEC
- # instead of $1_BUILD_LIB_SPEC since it will work with both an
- # installed and uninstalled version of Tcl.
- #
-
- if test -f "${$1_BIN_DIR}/Makefile" ; then
- AC_MSG_WARN([Found Makefile - using build library specs for $1])
- $1_LIB_SPEC=${$1_BUILD_LIB_SPEC}
- $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC}
- $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH}
- $1_INCLUDE_SPEC=${$1_BUILD_INCLUDE_SPEC}
- $1_LIBRARY_PATH=${$1_LIBRARY_PATH}
- fi
-
- AC_SUBST($1_VERSION)
- AC_SUBST($1_BIN_DIR)
- AC_SUBST($1_SRC_DIR)
-
- AC_SUBST($1_LIB_FILE)
- AC_SUBST($1_LIB_SPEC)
-
- AC_SUBST($1_STUB_LIB_FILE)
- AC_SUBST($1_STUB_LIB_SPEC)
- AC_SUBST($1_STUB_LIB_PATH)
-
- # Allow the caller to prevent this auto-check by specifying any 2nd arg
- AS_IF([test "x$2" = x], [
- # Check both upper and lower-case variants
- # If a dev wanted non-stubs libs, this function could take an option
- # to not use _STUB in the paths below
- AS_IF([test "x${$1_STUB_LIB_SPEC}" = x],
- [TEA_LOAD_CONFIG_LIB(translit($1,[a-z],[A-Z])_STUB)],
- [TEA_LOAD_CONFIG_LIB($1_STUB)])
- ])
-])
-
-#------------------------------------------------------------------------
-# TEA_LOAD_CONFIG_LIB --
-#
-# Helper function to load correct library from another extension's
-# ${PACKAGE}Config.sh.
-#
-# Results:
-# Adds to LIBS the appropriate extension library
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_LOAD_CONFIG_LIB], [
- AC_MSG_CHECKING([For $1 library for LIBS])
- # This simplifies the use of stub libraries by automatically adding
- # the stub lib to your path. Normally this would add to SHLIB_LD_LIBS,
- # but this is called before CONFIG_CFLAGS. More importantly, this adds
- # to PKG_LIBS, which becomes LIBS, and that is only used by SHLIB_LD.
- if test "x${$1_LIB_SPEC}" != "x" ; then
- if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes" ; then
- TEA_ADD_LIBS([\"`${CYGPATH} ${$1_LIB_PATH}`\"])
- AC_MSG_RESULT([using $1_LIB_PATH ${$1_LIB_PATH}])
- else
- TEA_ADD_LIBS([${$1_LIB_SPEC}])
- AC_MSG_RESULT([using $1_LIB_SPEC ${$1_LIB_SPEC}])
- fi
- else
- AC_MSG_RESULT([file not found])
- fi
-])
-
-#------------------------------------------------------------------------
-# TEA_EXPORT_CONFIG --
-#
-# Define the data to insert into the ${PACKAGE}Config.sh file
-#
-# Arguments:
-#
-# Requires the following vars to be set:
-# $1
-#
-# Results:
-# Substitutes the following vars:
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_EXPORT_CONFIG], [
- #--------------------------------------------------------------------
- # These are for $1Config.sh
- #--------------------------------------------------------------------
-
- # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib)
- eval pkglibdir="[$]{libdir}/$1${PACKAGE_VERSION}"
- if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then
- eval $1_LIB_FLAG="-l$1${PACKAGE_VERSION}${DBGX}"
- eval $1_STUB_LIB_FLAG="-l$1stub${PACKAGE_VERSION}${DBGX}"
- else
- eval $1_LIB_FLAG="-l$1`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}"
- eval $1_STUB_LIB_FLAG="-l$1stub`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}"
- fi
- $1_BUILD_LIB_SPEC="-L`$CYGPATH $(pwd)` ${$1_LIB_FLAG}"
- $1_LIB_SPEC="-L`$CYGPATH ${pkglibdir}` ${$1_LIB_FLAG}"
- $1_BUILD_STUB_LIB_SPEC="-L`$CYGPATH $(pwd)` [$]{$1_STUB_LIB_FLAG}"
- $1_STUB_LIB_SPEC="-L`$CYGPATH ${pkglibdir}` [$]{$1_STUB_LIB_FLAG}"
- $1_BUILD_STUB_LIB_PATH="`$CYGPATH $(pwd)`/[$]{PKG_STUB_LIB_FILE}"
- $1_STUB_LIB_PATH="`$CYGPATH ${pkglibdir}`/[$]{PKG_STUB_LIB_FILE}"
-
- AC_SUBST($1_BUILD_LIB_SPEC)
- AC_SUBST($1_LIB_SPEC)
- AC_SUBST($1_BUILD_STUB_LIB_SPEC)
- AC_SUBST($1_STUB_LIB_SPEC)
- AC_SUBST($1_BUILD_STUB_LIB_PATH)
- AC_SUBST($1_STUB_LIB_PATH)
-
- AC_SUBST(MAJOR_VERSION)
- AC_SUBST(MINOR_VERSION)
- AC_SUBST(PATCHLEVEL)
-])
-
-
-#------------------------------------------------------------------------
-# TEA_PATH_CELIB --
-#
-# Locate Keuchel's celib emulation layer for targeting Win/CE
-#
-# Arguments:
-# none
-#
-# Results:
-#
-# Adds the following arguments to configure:
-# --with-celib=...
-#
-# Defines the following vars:
-# CELIB_DIR Full path to the directory containing
-# the include and platform lib files
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PATH_CELIB], [
- # First, look for one uninstalled.
- # the alternative search directory is invoked by --with-celib
-
- if test x"${no_celib}" = x ; then
- # we reset no_celib in case something fails here
- no_celib=true
- AC_ARG_WITH(celib,[ --with-celib=DIR use Windows/CE support library from DIR], with_celibconfig=${withval})
- AC_MSG_CHECKING([for Windows/CE celib directory])
- AC_CACHE_VAL(ac_cv_c_celibconfig,[
- # First check to see if --with-celibconfig was specified.
- if test x"${with_celibconfig}" != x ; then
- if test -d "${with_celibconfig}/inc" ; then
- ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)`
- else
- AC_MSG_ERROR([${with_celibconfig} directory doesn't contain inc directory])
- fi
- fi
-
- # then check for a celib library
- if test x"${ac_cv_c_celibconfig}" = x ; then
- for i in \
- ../celib-palm-3.0 \
- ../celib \
- ../../celib-palm-3.0 \
- ../../celib \
- `ls -dr ../celib-*3.[[0-9]]* 2>/dev/null` \
- ${srcdir}/../celib-palm-3.0 \
- ${srcdir}/../celib \
- `ls -dr ${srcdir}/../celib-*3.[[0-9]]* 2>/dev/null` \
- ; do
- if test -d "$i/inc" ; then
- ac_cv_c_celibconfig=`(cd $i; pwd)`
- break
- fi
- done
- fi
- ])
- if test x"${ac_cv_c_celibconfig}" = x ; then
- AC_MSG_ERROR([Cannot find celib support library directory])
- else
- no_celib=
- CELIB_DIR=${ac_cv_c_celibconfig}
- CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'`
- AC_MSG_RESULT([found $CELIB_DIR])
- fi
- fi
-])
-
-#------------------------------------------------------------------------
-# TEA_INSTALLER --
-#
-# Configure the installer.
-#
-# Arguments:
-# none
-#
-# Results:
-# Substitutes the following vars:
-# INSTALL
-# INSTALL_DATA_DIR
-# INSTALL_DATA
-# INSTALL_PROGRAM
-# INSTALL_SCRIPT
-# INSTALL_LIBRARY
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_INSTALLER], [
- INSTALL='$(SHELL) $(srcdir)/tclconfig/install-sh -c'
- INSTALL_DATA_DIR='${INSTALL} -d -m 755'
- INSTALL_DATA='${INSTALL} -m 644'
- INSTALL_PROGRAM='${INSTALL} -m 755'
- INSTALL_SCRIPT='${INSTALL} -m 755'
-
- TEA_CONFIG_SYSTEM
- case $system in
- HP-UX-*) INSTALL_LIBRARY='${INSTALL} -m 755' ;;
- *) INSTALL_LIBRARY='${INSTALL} -m 644' ;;
- esac
-
- AC_SUBST(INSTALL)
- AC_SUBST(INSTALL_DATA_DIR)
- AC_SUBST(INSTALL_DATA)
- AC_SUBST(INSTALL_PROGRAM)
- AC_SUBST(INSTALL_SCRIPT)
- AC_SUBST(INSTALL_LIBRARY)
-])
-
-###
-# Tip 430 - ZipFS Modifications
-###
-#------------------------------------------------------------------------
-# SC_ZIPFS_SUPPORT
-# Locate a zip encoder installed on the system path, or none.
-#
-# Arguments:
-# none
-#
-# Results:
-# Substitutes the following vars:
-# TCL_ZIP_FILE
-# TCL_ZIPFS_SUPPORT
-# TCL_ZIPFS_FLAG
-# ZIP_PROG
-#------------------------------------------------------------------------
-
-#------------------------------------------------------------------------
-# SC_PROG_ZIP
-# Locate a zip encoder installed on the system path, or none.
-#
-# Arguments:
-# none
-#
-# Results:
-# Substitutes the following vars:
-# ZIP_PROG
-# ZIP_PROG_OPTIONS
-# ZIP_PROG_VFSSEARCH
-# ZIP_INSTALL_OBJS
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ZIPFS_SUPPORT], [
- AC_MSG_CHECKING([for zipfs support])
- ZIP_PROG=""
- ZIP_PROG_OPTIONS=""
- ZIP_PROG_VFSSEARCH=""
- INSTALL_MSGS=""
- # If our native tclsh processes the "install" command line option
- # we can use it to mint zip files
- AS_IF([$TCLSH_PROG install],[
- ZIP_PROG=${TCLSH_PROG}
- ZIP_PROG_OPTIONS="install mkzip"
- ZIP_PROG_VFSSEARCH="."
- AC_MSG_RESULT([Can use Native Tclsh for Zip encoding])
- ])
- if test "x$ZIP_PROG" = "x" ; then
- AC_CACHE_VAL(ac_cv_path_zip, [
- search_path=`echo ${PATH} | sed -e 's/:/ /g'`
- for dir in $search_path ; do
- for j in `ls -r $dir/zip 2> /dev/null` \
- `ls -r $dir/zip 2> /dev/null` ; do
- if test x"$ac_cv_path_zip" = x ; then
- if test -f "$j" ; then
- ac_cv_path_zip=$j
- break
- fi
- fi
- done
- done
- ])
- if test -f "$ac_cv_path_zip" ; then
- ZIP_PROG="$ac_cv_path_zip "
- AC_MSG_RESULT([$ZIP_PROG])
- ZIP_PROG_OPTIONS="-rq"
- ZIP_PROG_VFSSEARCH="."
- AC_MSG_RESULT([Found INFO Zip in environment])
- # Use standard arguments for zip
- fi
- fi
- if test "x$ZIP_PROG" = "x" ; then
- # It is not an error if an installed version of Zip can't be located.
- ZIP_PROG=""
- ZIP_PROG_OPTIONS=""
- ZIP_PROG_VFSSEARCH=""
- TCL_ZIPFS_SUPPORT=0
- TCL_ZIPFS_FLAG=
- else
- # ZIPFS Support
- eval "TCL_ZIP_FILE=\"${TCL_ZIP_FILE}\""
- if test ${TCL_ZIP_FILE} = "" ; then
- TCL_ZIPFS_SUPPORT=0
- TCL_ZIPFS_FLAG=
- INSTALL_LIBRARIES=install-libraries
- INSTALL_MSGS=install-msgs
- else
- if test ${SHARED_BUILD} = 1 ; then
- TCL_ZIPFS_SUPPORT=1
- INSTALL_LIBRARIES=install-libraries-zipfs-shared
- else
- TCL_ZIPFS_SUPPORT=2
- INSTALL_LIBRARIES=install-libraries-zipfs-static
- fi
- TCL_ZIPFS_FLAG=-DTCL_ZIPFS_SUPPORT
- fi
- fi
-
- AC_SUBST(TCL_ZIP_FILE)
- AC_SUBST(TCL_ZIPFS_SUPPORT)
- AC_SUBST(TCL_ZIPFS_FLAG)
- AC_SUBST(ZIP_PROG)
- AC_SUBST(ZIP_PROG_OPTIONS)
- AC_SUBST(ZIP_PROG_VFSSEARCH)
- AC_SUBST(INSTALL_LIBRARIES)
- AC_SUBST(INSTALL_MSGS)
-])
-
-# Local Variables:
-# mode: autoconf
-# End:
diff --git a/tclzipfs/tclzipfsConfig.sh.in b/tclzipfs/tclzipfsConfig.sh.in
deleted file mode 100755
index be001d7..0000000
--- a/tclzipfs/tclzipfsConfig.sh.in
+++ /dev/null
@@ -1,45 +0,0 @@
-# tclzipfsConfig.sh --
-#
-# This shell script (for sh) is generated automatically by tclzipfs's
-# configure script. It will create shell variables for most of
-# the configuration options discovered by the configure script.
-# This script is intended to be included by the configure scripts
-# for tclzipfs extensions so that they don't have to figure this all
-# out for themselves. This file does not duplicate information
-# already provided by tclConfig.sh, so you may need to use that
-# file in addition to this one.
-#
-# The information in this file is specific to a single platform.
-
-# tclzipfs's version number.
-tclzipfs_VERSION='@PACKAGE_VERSION@'
-
-# The name of the tclzipfs library (may be either a .a file or a shared library):
-tclzipfs_LIB_FILE=@PKG_LIB_FILE@
-
-# String to pass to linker to pick up the tclzipfs library from its
-# build directory.
-tclzipfs_BUILD_LIB_SPEC='@tclzipfs_BUILD_LIB_SPEC@'
-
-# String to pass to linker to pick up the tclzipfs library from its
-# installed directory.
-tclzipfs_LIB_SPEC='@tclzipfs_LIB_SPEC@'
-
-# The name of the tclzipfs stub library (a .a file):
-#tclzipfs_STUB_LIB_FILE=@PKG_STUB_LIB_FILE@
-
-# String to pass to linker to pick up the tclzipfs stub library from its
-# build directory.
-#tclzipfs_BUILD_STUB_LIB_SPEC='@tclzipfs_BUILD_STUB_LIB_SPEC@'
-
-# String to pass to linker to pick up the tclzipfs stub library from its
-# installed directory.
-#tclzipfs_STUB_LIB_SPEC='@tclzipfs_STUB_LIB_SPEC@'
-
-# String to pass to linker to pick up the tclzipfs stub library from its
-# build directory.
-#tclzipfs_BUILD_STUB_LIB_PATH='@tclzipfs_BUILD_STUB_LIB_PATH@'
-
-# String to pass to linker to pick up the tclzipfs stub library from its
-# installed directory.
-#tclzipfs_STUB_LIB_PATH='@tclzipfs_STUB_LIB_PATH@'