add sw_64 support
(cherry picked from commit 89215d574a9069b160fd0c515d01e84fd1398a2a)
This commit is contained in:
parent
5721ba8adc
commit
4b896e7ff2
@ -1 +0,0 @@
|
||||
4245
|
||||
@ -1 +0,0 @@
|
||||
2.4.7
|
||||
@ -1 +0,0 @@
|
||||
2.4.7
|
||||
@ -1,50 +0,0 @@
|
||||
* GNU Libtool was conceived, designed and implemented by:
|
||||
|
||||
Gordon Matzigkeit gord@gnu.org
|
||||
|
||||
* GNU Libtool's Dynamic Loader library (libltdl) was conceived,
|
||||
designed and implemented by:
|
||||
|
||||
Thomas Tanner tanner@ffii.org
|
||||
|
||||
* GNU Libtool and libltdl have previously been maintained, enhanced,
|
||||
ported and otherwise advanced by:
|
||||
|
||||
Alexandre Oliva oliva@dcc.unicamp.br
|
||||
Ossama Othman ossama@debian.org
|
||||
Robert Boehne rboehne@ricardo-us.com
|
||||
Scott James Remnant scott@netsplit.com
|
||||
Peter O'Gorman peter@pogma.com
|
||||
Ralf Wildenhues Ralf.Wildenhues@gmx.de
|
||||
Gary V. Vaughan gary@vaughan.pe
|
||||
Bob Friesenhahn bfriesen@simple.dallas.tx.us
|
||||
Peter Rosin peda@lysator.liu.se
|
||||
Noah Misch noah@cs.caltech.edu
|
||||
Charles Wilson libtool@cwilson.fastmail.fm
|
||||
Brooks Moses bmoses@google.com
|
||||
|
||||
* GNU Libtool is currently being cajoled, bullied,
|
||||
rewritten and otherwise dragged into the future by:
|
||||
|
||||
Alex Ameen alex.ameen.tx@gmail.com
|
||||
--
|
||||
Copyright (C) 1996, 1998-2019, 2021-2022 Free Software Foundation,
|
||||
Inc.
|
||||
|
||||
This file is part of GNU Libtool.
|
||||
|
||||
GNU Libtool 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.
|
||||
|
||||
GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy
|
||||
can be downloaded from http://www.gnu.org/licenses/gpl.html,
|
||||
or obtained by writing to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
@ -1,339 +0,0 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,127 +0,0 @@
|
||||
# Having a separate GNUmakefile lets me 'include' the dynamically
|
||||
# generated rules created via cfg.mk (package-local configuration)
|
||||
# as well as maint.mk (generic maintainer rules).
|
||||
# This makefile is used only if you run GNU Make.
|
||||
# It is necessary if you want to build targets usually of interest
|
||||
# only to the maintainer.
|
||||
|
||||
# Copyright (C) 2001, 2003, 2006-2022 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# If the user runs GNU make but has not yet run ./configure,
|
||||
# give them a diagnostic.
|
||||
_gl-Makefile := $(wildcard [M]akefile)
|
||||
ifneq ($(_gl-Makefile),)
|
||||
|
||||
# Make tar archive easier to reproduce.
|
||||
export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner
|
||||
|
||||
# Allow the user to add to this in the Makefile.
|
||||
ALL_RECURSIVE_TARGETS =
|
||||
|
||||
include Makefile
|
||||
|
||||
# Some projects override e.g., _autoreconf here.
|
||||
-include $(srcdir)/cfg.mk
|
||||
|
||||
# Allow cfg.mk to override these.
|
||||
_build-aux ?= build-aux
|
||||
_autoreconf ?= autoreconf -v
|
||||
|
||||
include $(srcdir)/maint.mk
|
||||
|
||||
# Ensure that $(VERSION) is up to date for dist-related targets, but not
|
||||
# for others: rerunning autoreconf and recompiling everything isn't cheap.
|
||||
_have-git-version-gen := \
|
||||
$(shell test -f $(srcdir)/$(_build-aux)/git-version-gen && echo yes)
|
||||
ifeq ($(_have-git-version-gen)0,yes$(MAKELEVEL))
|
||||
_is-dist-target ?= $(filter-out %clean, \
|
||||
$(filter maintainer-% dist% alpha beta stable,$(MAKECMDGOALS)))
|
||||
_is-install-target ?= $(filter-out %check, $(filter install%,$(MAKECMDGOALS)))
|
||||
ifneq (,$(_is-dist-target)$(_is-install-target))
|
||||
_curr-ver := $(shell cd $(srcdir) \
|
||||
&& $(_build-aux)/git-version-gen \
|
||||
.tarball-version \
|
||||
$(git-version-gen-tag-sed-script))
|
||||
ifneq ($(_curr-ver),$(VERSION))
|
||||
ifeq ($(_curr-ver),UNKNOWN)
|
||||
$(info WARNING: unable to verify if $(VERSION) is the correct version)
|
||||
else
|
||||
ifneq (,$(_is-install-target))
|
||||
# GNU Coding Standards state that 'make install' should not cause
|
||||
# recompilation after 'make all'. But as long as changing the version
|
||||
# string alters config.h, the cost of having 'make all' always have an
|
||||
# up-to-date version is prohibitive. So, as a compromise, we merely
|
||||
# warn when installing a version string that is out of date; the user
|
||||
# should run 'autoreconf' (or something like 'make distcheck') to
|
||||
# fix the version, 'make all' to propagate it, then 'make install'.
|
||||
$(info WARNING: version string $(VERSION) is out of date;)
|
||||
$(info run '$(MAKE) _version' to fix it)
|
||||
else
|
||||
$(info INFO: running autoreconf for new version string: $(_curr-ver))
|
||||
GNUmakefile: _version
|
||||
touch GNUmakefile
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
.PHONY: _version
|
||||
_version:
|
||||
cd $(srcdir) && rm -rf autom4te.cache .version && $(_autoreconf)
|
||||
$(MAKE) $(AM_MAKEFLAGS) Makefile
|
||||
|
||||
else
|
||||
|
||||
.DEFAULT_GOAL := abort-due-to-no-makefile
|
||||
srcdir = .
|
||||
|
||||
# The package can override .DEFAULT_GOAL to run actions like autoreconf.
|
||||
-include ./cfg.mk
|
||||
|
||||
# Allow cfg.mk to override these.
|
||||
_build-aux ?= build-aux
|
||||
_autoreconf ?= autoreconf -v
|
||||
|
||||
include ./maint.mk
|
||||
|
||||
ifeq ($(.DEFAULT_GOAL),abort-due-to-no-makefile)
|
||||
$(MAKECMDGOALS): abort-due-to-no-makefile
|
||||
endif
|
||||
|
||||
abort-due-to-no-makefile:
|
||||
@echo There seems to be no Makefile in this directory. 1>&2
|
||||
@echo "You must run ./configure before running '$(MAKE)'." 1>&2
|
||||
@exit 1
|
||||
|
||||
endif
|
||||
|
||||
# Tell version 3.79 and up of GNU make to not build goals in this
|
||||
# directory in parallel, in case someone tries to build multiple
|
||||
# targets, and one of them can cause a recursive target to be invoked.
|
||||
|
||||
# Only set this if Automake doesn't provide it.
|
||||
AM_RECURSIVE_TARGETS ?= $(RECURSIVE_TARGETS:-recursive=) \
|
||||
$(RECURSIVE_CLEAN_TARGETS:-recursive=) \
|
||||
dist distcheck tags ctags
|
||||
|
||||
ALL_RECURSIVE_TARGETS += $(AM_RECURSIVE_TARGETS)
|
||||
|
||||
ifneq ($(word 2, $(MAKECMDGOALS)), )
|
||||
ifneq ($(filter $(ALL_RECURSIVE_TARGETS), $(MAKECMDGOALS)), )
|
||||
.NOTPARALLEL:
|
||||
endif
|
||||
endif
|
||||
@ -1,368 +0,0 @@
|
||||
Installation Instructions
|
||||
*************************
|
||||
|
||||
Copyright (C) 1994-1996, 1999-2002, 2004-2017, 2020-2021 Free
|
||||
Software Foundation, Inc.
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
notice and this notice are preserved. This file is offered as-is,
|
||||
without warranty of any kind.
|
||||
|
||||
Basic Installation
|
||||
==================
|
||||
|
||||
Briefly, the shell command './configure && make && make install'
|
||||
should configure, build, and install this package. The following
|
||||
more-detailed instructions are generic; see the 'README' file for
|
||||
instructions specific to this package. Some packages provide this
|
||||
'INSTALL' file but do not implement all of the features documented
|
||||
below. The lack of an optional feature in a given package is not
|
||||
necessarily a bug. More recommendations for GNU packages can be found
|
||||
in *note Makefile Conventions: (standards)Makefile Conventions.
|
||||
|
||||
The 'configure' shell script attempts to guess correct values for
|
||||
various system-dependent variables used during compilation. It uses
|
||||
those values to create a 'Makefile' in each directory of the package.
|
||||
It may also create one or more '.h' files containing system-dependent
|
||||
definitions. Finally, it creates a shell script 'config.status' that
|
||||
you can run in the future to recreate the current configuration, and a
|
||||
file 'config.log' containing compiler output (useful mainly for
|
||||
debugging 'configure').
|
||||
|
||||
It can also use an optional file (typically called 'config.cache' and
|
||||
enabled with '--cache-file=config.cache' or simply '-C') that saves the
|
||||
results of its tests to speed up reconfiguring. Caching is disabled by
|
||||
default to prevent problems with accidental use of stale cache files.
|
||||
|
||||
If you need to do unusual things to compile the package, please try
|
||||
to figure out how 'configure' could check whether to do them, and mail
|
||||
diffs or instructions to the address given in the 'README' so they can
|
||||
be considered for the next release. If you are using the cache, and at
|
||||
some point 'config.cache' contains results you don't want to keep, you
|
||||
may remove or edit it.
|
||||
|
||||
The file 'configure.ac' (or 'configure.in') is used to create
|
||||
'configure' by a program called 'autoconf'. You need 'configure.ac' if
|
||||
you want to change it or regenerate 'configure' using a newer version of
|
||||
'autoconf'.
|
||||
|
||||
The simplest way to compile this package is:
|
||||
|
||||
1. 'cd' to the directory containing the package's source code and type
|
||||
'./configure' to configure the package for your system.
|
||||
|
||||
Running 'configure' might take a while. While running, it prints
|
||||
some messages telling which features it is checking for.
|
||||
|
||||
2. Type 'make' to compile the package.
|
||||
|
||||
3. Optionally, type 'make check' to run any self-tests that come with
|
||||
the package, generally using the just-built uninstalled binaries.
|
||||
|
||||
4. Type 'make install' to install the programs and any data files and
|
||||
documentation. When installing into a prefix owned by root, it is
|
||||
recommended that the package be configured and built as a regular
|
||||
user, and only the 'make install' phase executed with root
|
||||
privileges.
|
||||
|
||||
5. Optionally, type 'make installcheck' to repeat any self-tests, but
|
||||
this time using the binaries in their final installed location.
|
||||
This target does not install anything. Running this target as a
|
||||
regular user, particularly if the prior 'make install' required
|
||||
root privileges, verifies that the installation completed
|
||||
correctly.
|
||||
|
||||
6. You can remove the program binaries and object files from the
|
||||
source code directory by typing 'make clean'. To also remove the
|
||||
files that 'configure' created (so you can compile the package for
|
||||
a different kind of computer), type 'make distclean'. There is
|
||||
also a 'make maintainer-clean' target, but that is intended mainly
|
||||
for the package's developers. If you use it, you may have to get
|
||||
all sorts of other programs in order to regenerate files that came
|
||||
with the distribution.
|
||||
|
||||
7. Often, you can also type 'make uninstall' to remove the installed
|
||||
files again. In practice, not all packages have tested that
|
||||
uninstallation works correctly, even though it is required by the
|
||||
GNU Coding Standards.
|
||||
|
||||
8. Some packages, particularly those that use Automake, provide 'make
|
||||
distcheck', which can by used by developers to test that all other
|
||||
targets like 'make install' and 'make uninstall' work correctly.
|
||||
This target is generally not run by end users.
|
||||
|
||||
Compilers and Options
|
||||
=====================
|
||||
|
||||
Some systems require unusual options for compilation or linking that
|
||||
the 'configure' script does not know about. Run './configure --help'
|
||||
for details on some of the pertinent environment variables.
|
||||
|
||||
You can give 'configure' initial values for configuration parameters
|
||||
by setting variables in the command line or in the environment. Here is
|
||||
an example:
|
||||
|
||||
./configure CC=c99 CFLAGS=-g LIBS=-lposix
|
||||
|
||||
*Note Defining Variables::, for more details.
|
||||
|
||||
Compiling For Multiple Architectures
|
||||
====================================
|
||||
|
||||
You can compile the package for more than one kind of computer at the
|
||||
same time, by placing the object files for each architecture in their
|
||||
own directory. To do this, you can use GNU 'make'. 'cd' to the
|
||||
directory where you want the object files and executables to go and run
|
||||
the 'configure' script. 'configure' automatically checks for the source
|
||||
code in the directory that 'configure' is in and in '..'. This is known
|
||||
as a "VPATH" build.
|
||||
|
||||
With a non-GNU 'make', it is safer to compile the package for one
|
||||
architecture at a time in the source code directory. After you have
|
||||
installed the package for one architecture, use 'make distclean' before
|
||||
reconfiguring for another architecture.
|
||||
|
||||
On MacOS X 10.5 and later systems, you can create libraries and
|
||||
executables that work on multiple system types--known as "fat" or
|
||||
"universal" binaries--by specifying multiple '-arch' options to the
|
||||
compiler but only a single '-arch' option to the preprocessor. Like
|
||||
this:
|
||||
|
||||
./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
|
||||
CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
|
||||
CPP="gcc -E" CXXCPP="g++ -E"
|
||||
|
||||
This is not guaranteed to produce working output in all cases, you
|
||||
may have to build one architecture at a time and combine the results
|
||||
using the 'lipo' tool if you have problems.
|
||||
|
||||
Installation Names
|
||||
==================
|
||||
|
||||
By default, 'make install' installs the package's commands under
|
||||
'/usr/local/bin', include files under '/usr/local/include', etc. You
|
||||
can specify an installation prefix other than '/usr/local' by giving
|
||||
'configure' the option '--prefix=PREFIX', where PREFIX must be an
|
||||
absolute file name.
|
||||
|
||||
You can specify separate installation prefixes for
|
||||
architecture-specific files and architecture-independent files. If you
|
||||
pass the option '--exec-prefix=PREFIX' to 'configure', the package uses
|
||||
PREFIX as the prefix for installing programs and libraries.
|
||||
Documentation and other data files still use the regular prefix.
|
||||
|
||||
In addition, if you use an unusual directory layout you can give
|
||||
options like '--bindir=DIR' to specify different values for particular
|
||||
kinds of files. Run 'configure --help' for a list of the directories
|
||||
you can set and what kinds of files go in them. In general, the default
|
||||
for these options is expressed in terms of '${prefix}', so that
|
||||
specifying just '--prefix' will affect all of the other directory
|
||||
specifications that were not explicitly provided.
|
||||
|
||||
The most portable way to affect installation locations is to pass the
|
||||
correct locations to 'configure'; however, many packages provide one or
|
||||
both of the following shortcuts of passing variable assignments to the
|
||||
'make install' command line to change installation locations without
|
||||
having to reconfigure or recompile.
|
||||
|
||||
The first method involves providing an override variable for each
|
||||
affected directory. For example, 'make install
|
||||
prefix=/alternate/directory' will choose an alternate location for all
|
||||
directory configuration variables that were expressed in terms of
|
||||
'${prefix}'. Any directories that were specified during 'configure',
|
||||
but not in terms of '${prefix}', must each be overridden at install time
|
||||
for the entire installation to be relocated. The approach of makefile
|
||||
variable overrides for each directory variable is required by the GNU
|
||||
Coding Standards, and ideally causes no recompilation. However, some
|
||||
platforms have known limitations with the semantics of shared libraries
|
||||
that end up requiring recompilation when using this method, particularly
|
||||
noticeable in packages that use GNU Libtool.
|
||||
|
||||
The second method involves providing the 'DESTDIR' variable. For
|
||||
example, 'make install DESTDIR=/alternate/directory' will prepend
|
||||
'/alternate/directory' before all installation names. The approach of
|
||||
'DESTDIR' overrides is not required by the GNU Coding Standards, and
|
||||
does not work on platforms that have drive letters. On the other hand,
|
||||
it does better at avoiding recompilation issues, and works well even
|
||||
when some directory options were not specified in terms of '${prefix}'
|
||||
at 'configure' time.
|
||||
|
||||
Optional Features
|
||||
=================
|
||||
|
||||
If the package supports it, you can cause programs to be installed
|
||||
with an extra prefix or suffix on their names by giving 'configure' the
|
||||
option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'.
|
||||
|
||||
Some packages pay attention to '--enable-FEATURE' options to
|
||||
'configure', where FEATURE indicates an optional part of the package.
|
||||
They may also pay attention to '--with-PACKAGE' options, where PACKAGE
|
||||
is something like 'gnu-as' or 'x' (for the X Window System). The
|
||||
'README' should mention any '--enable-' and '--with-' options that the
|
||||
package recognizes.
|
||||
|
||||
For packages that use the X Window System, 'configure' can usually
|
||||
find the X include and library files automatically, but if it doesn't,
|
||||
you can use the 'configure' options '--x-includes=DIR' and
|
||||
'--x-libraries=DIR' to specify their locations.
|
||||
|
||||
Some packages offer the ability to configure how verbose the
|
||||
execution of 'make' will be. For these packages, running './configure
|
||||
--enable-silent-rules' sets the default to minimal output, which can be
|
||||
overridden with 'make V=1'; while running './configure
|
||||
--disable-silent-rules' sets the default to verbose, which can be
|
||||
overridden with 'make V=0'.
|
||||
|
||||
Particular systems
|
||||
==================
|
||||
|
||||
On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC
|
||||
is not installed, it is recommended to use the following options in
|
||||
order to use an ANSI C compiler:
|
||||
|
||||
./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
|
||||
|
||||
and if that doesn't work, install pre-built binaries of GCC for HP-UX.
|
||||
|
||||
HP-UX 'make' updates targets which have the same timestamps as their
|
||||
prerequisites, which makes it generally unusable when shipped generated
|
||||
files such as 'configure' are involved. Use GNU 'make' instead.
|
||||
|
||||
On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
|
||||
parse its '<wchar.h>' header file. The option '-nodtk' can be used as a
|
||||
workaround. If GNU CC is not installed, it is therefore recommended to
|
||||
try
|
||||
|
||||
./configure CC="cc"
|
||||
|
||||
and if that doesn't work, try
|
||||
|
||||
./configure CC="cc -nodtk"
|
||||
|
||||
On Solaris, don't put '/usr/ucb' early in your 'PATH'. This
|
||||
directory contains several dysfunctional programs; working variants of
|
||||
these programs are available in '/usr/bin'. So, if you need '/usr/ucb'
|
||||
in your 'PATH', put it _after_ '/usr/bin'.
|
||||
|
||||
On Haiku, software installed for all users goes in '/boot/common',
|
||||
not '/usr/local'. It is recommended to use the following options:
|
||||
|
||||
./configure --prefix=/boot/common
|
||||
|
||||
Specifying the System Type
|
||||
==========================
|
||||
|
||||
There may be some features 'configure' cannot figure out
|
||||
automatically, but needs to determine by the type of machine the package
|
||||
will run on. Usually, assuming the package is built to be run on the
|
||||
_same_ architectures, 'configure' can figure that out, but if it prints
|
||||
a message saying it cannot guess the machine type, give it the
|
||||
'--build=TYPE' option. TYPE can either be a short name for the system
|
||||
type, such as 'sun4', or a canonical name which has the form:
|
||||
|
||||
CPU-COMPANY-SYSTEM
|
||||
|
||||
where SYSTEM can have one of these forms:
|
||||
|
||||
OS
|
||||
KERNEL-OS
|
||||
|
||||
See the file 'config.sub' for the possible values of each field. If
|
||||
'config.sub' isn't included in this package, then this package doesn't
|
||||
need to know the machine type.
|
||||
|
||||
If you are _building_ compiler tools for cross-compiling, you should
|
||||
use the option '--target=TYPE' to select the type of system they will
|
||||
produce code for.
|
||||
|
||||
If you want to _use_ a cross compiler, that generates code for a
|
||||
platform different from the build platform, you should specify the
|
||||
"host" platform (i.e., that on which the generated programs will
|
||||
eventually be run) with '--host=TYPE'.
|
||||
|
||||
Sharing Defaults
|
||||
================
|
||||
|
||||
If you want to set default values for 'configure' scripts to share,
|
||||
you can create a site shell script called 'config.site' that gives
|
||||
default values for variables like 'CC', 'cache_file', and 'prefix'.
|
||||
'configure' looks for 'PREFIX/share/config.site' if it exists, then
|
||||
'PREFIX/etc/config.site' if it exists. Or, you can set the
|
||||
'CONFIG_SITE' environment variable to the location of the site script.
|
||||
A warning: not all 'configure' scripts look for a site script.
|
||||
|
||||
Defining Variables
|
||||
==================
|
||||
|
||||
Variables not defined in a site shell script can be set in the
|
||||
environment passed to 'configure'. However, some packages may run
|
||||
configure again during the build, and the customized values of these
|
||||
variables may be lost. In order to avoid this problem, you should set
|
||||
them in the 'configure' command line, using 'VAR=value'. For example:
|
||||
|
||||
./configure CC=/usr/local2/bin/gcc
|
||||
|
||||
causes the specified 'gcc' to be used as the C compiler (unless it is
|
||||
overridden in the site shell script).
|
||||
|
||||
Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an
|
||||
Autoconf limitation. Until the limitation is lifted, you can use this
|
||||
workaround:
|
||||
|
||||
CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
|
||||
|
||||
'configure' Invocation
|
||||
======================
|
||||
|
||||
'configure' recognizes the following options to control how it
|
||||
operates.
|
||||
|
||||
'--help'
|
||||
'-h'
|
||||
Print a summary of all of the options to 'configure', and exit.
|
||||
|
||||
'--help=short'
|
||||
'--help=recursive'
|
||||
Print a summary of the options unique to this package's
|
||||
'configure', and exit. The 'short' variant lists options used only
|
||||
in the top level, while the 'recursive' variant lists options also
|
||||
present in any nested packages.
|
||||
|
||||
'--version'
|
||||
'-V'
|
||||
Print the version of Autoconf used to generate the 'configure'
|
||||
script, and exit.
|
||||
|
||||
'--cache-file=FILE'
|
||||
Enable the cache: use and save the results of the tests in FILE,
|
||||
traditionally 'config.cache'. FILE defaults to '/dev/null' to
|
||||
disable caching.
|
||||
|
||||
'--config-cache'
|
||||
'-C'
|
||||
Alias for '--cache-file=config.cache'.
|
||||
|
||||
'--quiet'
|
||||
'--silent'
|
||||
'-q'
|
||||
Do not print messages saying which checks are being made. To
|
||||
suppress all normal output, redirect it to '/dev/null' (any error
|
||||
messages will still be shown).
|
||||
|
||||
'--srcdir=DIR'
|
||||
Look for the package's source code in directory DIR. Usually
|
||||
'configure' can determine that directory automatically.
|
||||
|
||||
'--prefix=DIR'
|
||||
Use DIR as the installation prefix. *note Installation Names:: for
|
||||
more details, including other options available for fine-tuning the
|
||||
installation locations.
|
||||
|
||||
'--no-create'
|
||||
'-n'
|
||||
Run the configure checks, but stop before creating any output
|
||||
files.
|
||||
|
||||
'configure' also accepts some other, not widely useful, options. Run
|
||||
'configure --help' for more details.
|
||||
@ -1,835 +0,0 @@
|
||||
## Makefile.am -- Process this file with automake to produce Makefile.in
|
||||
##
|
||||
## Copyright (C) 2003-2019, 2021-2022 Free Software Foundation, Inc.
|
||||
## Written by Gary V. Vaughan, 2003
|
||||
##
|
||||
## This file is part of GNU Libtool.
|
||||
##
|
||||
## GNU Libtool 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.
|
||||
##
|
||||
## GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy
|
||||
## can be downloaded from http://www.gnu.org/licenses/gpl.html,
|
||||
## or obtained by writing to the Free Software Foundation, Inc.,
|
||||
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#####
|
||||
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
|
||||
AM_CPPFLAGS =
|
||||
AM_LDFLAGS =
|
||||
|
||||
SUBDIRS = . gnulib-tests
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
EXTRA_DIST =
|
||||
|
||||
BUILT_SOURCES = libtool libtoolize
|
||||
|
||||
CLEANFILES =
|
||||
MOSTLYCLEANFILES =
|
||||
DISTCLEANFILES =
|
||||
MAINTAINERCLEANFILES =
|
||||
|
||||
include_HEADERS =
|
||||
noinst_LTLIBRARIES =
|
||||
lib_LTLIBRARIES =
|
||||
EXTRA_LTLIBRARIES =
|
||||
|
||||
# Using 'cd' in backquotes may print the directory name, use this instead:
|
||||
lt__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
|
||||
git_version_gen = '$(SHELL)' '$(aux_dir)/git-version-gen' '--fallback' '$(VERSION)' '.tarball-version'
|
||||
rebuild = rebuild=:; revision=`$(lt__cd) $(srcdir) && $(git_version_gen) | $(SED) 's|-.*$$||'`
|
||||
|
||||
|
||||
# ---------- #
|
||||
# Bootstrap. #
|
||||
# ---------- #
|
||||
|
||||
SCRIPT_ENV = GREP='$(GREP)' SED='$(SED)'
|
||||
|
||||
build_scripts = $(srcdir)/$(aux_dir)/announce-gen \
|
||||
$(srcdir)/$(aux_dir)/do-release-commit-and-tag \
|
||||
$(srcdir)/$(aux_dir)/gendocs.sh \
|
||||
$(srcdir)/$(aux_dir)/git-version-gen \
|
||||
$(srcdir)/$(aux_dir)/gnu-web-doc-update \
|
||||
$(srcdir)/$(aux_dir)/gnupload \
|
||||
$(srcdir)/$(aux_dir)/useless-if-before-free \
|
||||
$(srcdir)/$(aux_dir)/vc-list-files
|
||||
|
||||
EXTRA_DIST += bootstrap bootstrap.conf $(build_scripts) cfg.mk maint.mk \
|
||||
GNUmakefile
|
||||
CLEANFILES += libtool libtoolize
|
||||
|
||||
## If a file is named several times below, and especially if it
|
||||
## is a distributed file created during Libtool bootstrap, we
|
||||
## put it in a variable in accordance with the DRY principle.
|
||||
## Use '$(srcdir)' for the benefit of non-GNU makes: referring
|
||||
## to them by their variable makes sure they appear as targets
|
||||
## and dependencies with '$(srcdir)' consistently.
|
||||
configure_ac = $(srcdir)/configure.ac
|
||||
config_status = $(top_builddir)/config.status
|
||||
extract_trace = $(srcdir)/$(aux_dir)/extract-trace
|
||||
funclib_sh = $(srcdir)/$(aux_dir)/funclib.sh
|
||||
inline_source = $(srcdir)/$(aux_dir)/inline-source
|
||||
libtoolize_in = $(srcdir)/libtoolize.in
|
||||
ltmain_sh = $(srcdir)/$(aux_dir)/ltmain.sh
|
||||
ltmain_in = $(srcdir)/$(aux_dir)/ltmain.in
|
||||
libtool_m4 = $(srcdir)/$(macro_dir)/libtool.m4
|
||||
ltversion_in = $(srcdir)/$(macro_dir)/ltversion.in
|
||||
ltversion_m4 = $(srcdir)/$(macro_dir)/ltversion.m4
|
||||
no_bogus_macros = $(srcdir)/$(aux_dir)/no-bogus-m4-defines
|
||||
options_parser = $(srcdir)/$(aux_dir)/options-parser
|
||||
u2d_copyright = $(srcdir)/$(aux_dir)/update-copyright
|
||||
|
||||
EXTRA_DIST += $(extract_trace) $(funclib_sh) $(inline_source) \
|
||||
$(libtoolize_in) $(ltmain_in) $(ltmain_sh) \
|
||||
$(ltversion_in) $(ltversion_m4) $(no_bogus_macros) \
|
||||
$(options_parser) $(u2d_copyright)
|
||||
|
||||
## These are the replacements that need to be made at bootstrap time,
|
||||
## because they must be static in distributed files, and not accidentally
|
||||
## changed by configure running on the build machine.
|
||||
bootstrap_edit = $(SED) \
|
||||
-e 's|@MACRO_VERSION\@|$(VERSION)|g' \
|
||||
-e "s|@MACRO_REVISION\@|$$revision|g" \
|
||||
-e "s|@MACRO_SERIAL\@|$$serial|g" \
|
||||
-e 's|@PACKAGE\@|$(PACKAGE)|g' \
|
||||
-e 's|@PACKAGE_BUGREPORT\@|$(PACKAGE_BUGREPORT)|g' \
|
||||
-e 's|@PACKAGE_URL\@|$(PACKAGE_URL)|g' \
|
||||
-e 's|@PACKAGE_NAME\@|$(PACKAGE_NAME)|g' \
|
||||
-e "s|@package_revision\@|$$revision|g" \
|
||||
-e 's|@PACKAGE_STRING\@|$(PACKAGE_NAME) $(VERSION)|g' \
|
||||
-e 's|@PACKAGE_TARNAME\@|$(PACKAGE)|g' \
|
||||
-e 's|@PACKAGE_VERSION\@|$(VERSION)|g' \
|
||||
-e 's|@VERSION\@|$(VERSION)|g'
|
||||
|
||||
## We build ltversion.m4 here, instead of from config.status,
|
||||
## because config.status is rerun each time one of configure's
|
||||
## dependencies change and ltversion.m4 happens to be a configure
|
||||
## dependency. configure and ltversion.m4 would be rebuilt in
|
||||
## a loop otherwise.
|
||||
## We used to do this with a 'stamp-vcl' file, but non-gmake builds
|
||||
## would rerun configure on every invocation, so now we manually
|
||||
## check the version numbers from the build rule when necessary.
|
||||
$(ltversion_m4): $(ltversion_in) $(dotversion)
|
||||
@$(rebuild); \
|
||||
if test -f '$@'; then \
|
||||
eval `'$(SED)' -n '/^macro_revision=/p' '$@'`; \
|
||||
test "x$$macro_revision" = "x$$revision" && rebuild=false; \
|
||||
fi; \
|
||||
for prereq in $?; do \
|
||||
case $$prereq in *.version);; *) rebuild=:;; esac; \
|
||||
done; \
|
||||
if $$rebuild; then \
|
||||
rm -f '$@'; \
|
||||
if test -d '$(srcdir)/.git' && git --version >/dev/null 2>&1; then \
|
||||
$(git_commit_count) > '$(srcdir)/.serial'; \
|
||||
fi; \
|
||||
serial=`cat '$(srcdir)/.serial'`; \
|
||||
if test 0 = '$(AM_DEFAULT_VERBOSITY)' && test 1 != '$(V)'; \
|
||||
then echo " GEN " $@; \
|
||||
else echo $(bootstrap_edit) "'$(ltversion_in)' > '$@'"; fi; \
|
||||
$(bootstrap_edit) '$(ltversion_in)' > '$@'; \
|
||||
chmod a-w '$@'; \
|
||||
fi
|
||||
|
||||
## And for similar reasons, ltmain.sh can't be built from config.status.
|
||||
## We used to do this with a 'stamp-vcl' file, but non-gmake builds
|
||||
## would rerun configure on every invocation, so now we manually
|
||||
## check the version numbers from the build rule when necessary.
|
||||
## !WARNING! If you edit this rule to change the contents of ltmain.sh,
|
||||
## you must 'touch $(aux_dir)/ltmain.in' from the
|
||||
## shell if you need ltmain.sh to be regenerated. Ideally, we
|
||||
## should make this rule depend on Makefile but that will break
|
||||
## distcheck (at least) by rebuilding ltmain.sh in the source
|
||||
## tree whenever config.status regenerates the Makefile.
|
||||
$(ltmain_sh): $(ltmain_in) $(dotversion)
|
||||
@$(rebuild); \
|
||||
if test -f '$@'; then \
|
||||
eval `'$(SED)' -n '/^package_revision=/p' '$@'`; \
|
||||
test "x$$package_revision" = "x$$revision" && rebuild=false; \
|
||||
fi; \
|
||||
for prereq in $?; do \
|
||||
case $$prereq in *.version);; *) rebuild=:;; esac; \
|
||||
done; \
|
||||
if $$rebuild; then \
|
||||
rm -f '$@'; \
|
||||
if test 0 = '$(AM_DEFAULT_VERBOSITY)' && test 1 != '$(V)'; \
|
||||
then echo " GEN " $@; \
|
||||
else echo "$(inline_source) '$(ltmain_in)' |" $(bootstrap_edit) "> '$@'"; fi; \
|
||||
$(SCRIPT_ENV) '$(inline_source)' '$(ltmain_in)' | $(bootstrap_edit) > '$@'; \
|
||||
chmod a-w '$@'; \
|
||||
fi
|
||||
|
||||
lt_Makefile_am = $(srcdir)/$(ltdl_dir)/Makefile.am
|
||||
lt_Makefile_in = $(srcdir)/$(ltdl_dir)/Makefile.in
|
||||
ltdl_mk = $(srcdir)/$(ltdl_dir)/ltdl.mk
|
||||
|
||||
$(lt_Makefile_am): $(ltdl_mk)
|
||||
$(AM_V_at)rm -f '$@'
|
||||
$(AM_V_GEN)( '$(SED)' -n '1,/^.. DO NOT REMOVE THIS LINE -- /p' \
|
||||
'$(ltdl_mk)'; \
|
||||
{ echo 'ACLOCAL_AMFLAGS = -I ../m4'; \
|
||||
echo 'AUTOMAKE_OPTIONS = foreign'; \
|
||||
echo 'AM_CPPFLAGS ='; \
|
||||
echo 'AM_LDFLAGS ='; \
|
||||
echo 'BUILT_SOURCES ='; \
|
||||
echo 'include_HEADERS ='; \
|
||||
echo 'noinst_LTLIBRARIES ='; \
|
||||
echo 'lib_LTLIBRARIES ='; \
|
||||
echo 'EXTRA_LTLIBRARIES ='; \
|
||||
echo 'EXTRA_DIST ='; \
|
||||
echo 'CLEANFILES ='; \
|
||||
echo 'MOSTLYCLEANFILES ='; \
|
||||
}; \
|
||||
'$(SED)' -n '/^.. DO NOT REMOVE THIS LINE -- /,$$p' \
|
||||
'$(ltdl_mk)' \
|
||||
|'$(SED)' -e 's|libltdl_||; s|libltdl/||; s|: libltdl/|: |' \
|
||||
-e '/^[ ]*-I\$$(srcdir)\/libltdl -Ilibltdl \\/d' \
|
||||
-e 's|\$$(libltdl_|$$(|' \
|
||||
) |'$(SED)' -e '/^.. DO NOT REMOVE THIS LINE -- /d' \
|
||||
-e '1s,^\(.. Makefile.\)inc.*,\1am -- Process this file with automake to produce Makefile.in,' > '$@'
|
||||
$(AM_V_at)chmod a-w '$@'
|
||||
|
||||
## Document the make macros that are needed to build bootstrap-deps
|
||||
## dependencies when called from 'bootstrap' (developer's machine),
|
||||
## where the Makefile.am is fed to make in its raw format before
|
||||
## 'configure' has found the correct values (on the build machine).
|
||||
bootstrap_files = \
|
||||
$(lt_Makefile_am) \
|
||||
$(ltmain_sh) \
|
||||
$(ltversion_m4)
|
||||
|
||||
.PHONY: bootstrap-deps bootstrap-deps-prep
|
||||
bootstrap-deps: bootstrap-deps-prep
|
||||
$(MAKE) $(bootstrap_files)
|
||||
|
||||
bootstrap-deps-prep:
|
||||
## The following variables are substituted by 'bootstrap-dep-preps'
|
||||
@exit_cmd=:; \
|
||||
test -z '$(srcdir)' \
|
||||
&& echo "ERROR: don't call $(MAKE) with srcdir unset." \
|
||||
&& exit_cmd=exit; \
|
||||
test -z '$(PACKAGE)' \
|
||||
&& echo "ERROR: don't call $(MAKE) with PACKAGE unset." \
|
||||
&& exit_cmd=exit; \
|
||||
test -z '$(PACKAGE_BUGREPORT)' \
|
||||
&& echo "ERROR: don't call $(MAKE) with PACKAGE_BUGREPORT unset." \
|
||||
&& exit_cmd=exit; \
|
||||
test -z '$(PACKAGE_NAME)' \
|
||||
&& echo "ERROR: don't call $(MAKE) with PACKAGE_NAME unset." \
|
||||
&& exit_cmd=exit; \
|
||||
test -z '$(PACKAGE_URL)' \
|
||||
&& echo "ERROR: don't call $(MAKE) with PACKAGE_URL unset." \
|
||||
&& exit_cmd=exit; \
|
||||
test -z '$(SED)' \
|
||||
&& echo "ERROR: don't call $(MAKE) with SED unset." \
|
||||
&& exit_cmd=exit; \
|
||||
test -z '$(VERSION)' \
|
||||
&& echo "ERROR: don't call $(MAKE) with VERSION unset." \
|
||||
&& exit_cmd=exit; \
|
||||
$$exit_cmd 1
|
||||
$(AM_V_at)rm -f $(bootstrap_files)
|
||||
|
||||
## Unfortunately, all this bogeyness means that we have to manually
|
||||
## keep the generated files in libltdl up to date.
|
||||
LTDL_BOOTSTRAP_DEPS = \
|
||||
$(stamp_mk) \
|
||||
$(lt_aclocal_m4) \
|
||||
$(lt_config_h_in) \
|
||||
$(lt_configure)
|
||||
|
||||
all-local: $(LTDL_BOOTSTRAP_DEPS)
|
||||
|
||||
|
||||
## ---------------- ##
|
||||
## Libtool scripts. ##
|
||||
## ---------------- ##
|
||||
|
||||
abs_aux_dir = `$(lt__cd) '$(srcdir)/$(aux_dir)' && pwd`
|
||||
ltdl_ac_aux_dir = `$(SCRIPT_ENV) $(extract_trace) AC_CONFIG_AUX_DIR $(srcdir)/libltdl/configure.ac`
|
||||
|
||||
configure_edit = $(bootstrap_edit) \
|
||||
-e '/^\. /s|@auxscriptsdir\@|'$(abs_aux_dir)'|g' \
|
||||
-e 's|@aclocaldir\@|$(aclocaldir)|g' \
|
||||
-e 's|@aux_dir\@|$(aux_dir)|g' \
|
||||
-e 's|@datadir\@|$(datadir)|g' \
|
||||
-e 's|@EGREP\@|$(EGREP)|g' \
|
||||
-e 's|@FGREP\@|$(FGREP)|g' \
|
||||
-e 's|@GREP\@|$(GREP)|g' \
|
||||
-e 's|@host_triplet\@|$(host_triplet)|g' \
|
||||
-e 's|@LN_S\@|$(LN_S)|g' \
|
||||
-e "s|@ltdl_ac_aux_dir\@|$(ltdl_ac_aux_dir)|g" \
|
||||
-e 's|@macro_dir\@|$(macro_dir)|g' \
|
||||
-e 's|@pkgauxdir\@|$(pkgauxdir)|g' \
|
||||
-e 's|@pkgaux_files\@|$(pkgaux_scripts) $(pkgaux_data_files)|g' \
|
||||
-e 's|@pkgaux_install_files\@|$(pkgaux_install_files)|g' \
|
||||
-e 's|@pkgaux_parent_files\@|$(pkgaux_parent_files)|g' \
|
||||
-e 's|@pkgdatadir\@|$(pkgdatadir)|g' \
|
||||
-e 's|@pkgltdl_files\@|$(pkgltdl_files)|g' \
|
||||
-e 's|@pkgmacro_files\@|$(pkgmacro_files)|g' \
|
||||
-e 's|@prefix\@|$(prefix)|g' \
|
||||
-e 's|@SED\@|$(SED)|g' \
|
||||
-e 's|@srcdir\@|$(srcdir)|g'
|
||||
|
||||
# The libtool distributor and the standalone libtool script.
|
||||
bin_SCRIPTS = libtool
|
||||
|
||||
libtoolize: $(libtoolize_in) $(config_status)
|
||||
$(AM_V_at)rm -f '$@'
|
||||
$(AM_V_GEN)$(configure_edit) '$(libtoolize_in)' > '$@'
|
||||
$(AM_V_at)chmod a+x '$@'
|
||||
$(AM_V_at)chmod a-w '$@'
|
||||
|
||||
# We used to do this with a 'stamp-vcl' file, but non-gmake builds
|
||||
# would rerun configure on every invocation, so now we manually
|
||||
# check the version numbers from the build rule when necessary.
|
||||
libtool: $(ltmain_sh) $(config_status) $(dotversion)
|
||||
@$(rebuild); \
|
||||
if test -f '$@'; then \
|
||||
eval `'$(SED)' -n '/^package_revision=/p' '$@'`; \
|
||||
test "$$package_revision" = "$$revision" && rebuild=false; \
|
||||
fi; \
|
||||
for prereq in $?; do \
|
||||
case $$prereq in *.version);; *) rebuild=:;; esac; \
|
||||
done; \
|
||||
if $$rebuild; then \
|
||||
if test 0 = '$(AM_DEFAULT_VERBOSITY)' && test 1 != '$(V)'; \
|
||||
then echo " GEN " $@; \
|
||||
else echo '$(SHELL) $(top_builddir)/config.status "$@"'; fi; \
|
||||
cd '$(top_builddir)' && '$(SHELL)' ./config.status '$@'; \
|
||||
fi
|
||||
|
||||
|
||||
## -------- ##
|
||||
## Libltdl. ##
|
||||
## -------- ##
|
||||
|
||||
include libltdl/ltdl.mk
|
||||
|
||||
lt_aclocal_m4 = $(srcdir)/$(ltdl_dir)/aclocal.m4
|
||||
lt_config_h_in = $(srcdir)/$(ltdl_dir)/config-h.in
|
||||
lt_configure = $(srcdir)/$(ltdl_dir)/configure
|
||||
lt_configure_ac = $(srcdir)/$(ltdl_dir)/configure.ac
|
||||
stamp_mk = $(srcdir)/$(ltdl_dir)/stamp-mk
|
||||
|
||||
lt_obsolete_m4 = $(srcdir)/$(macro_dir)/lt~obsolete.m4
|
||||
|
||||
EXTRA_DIST += $(lt_aclocal_m4) \
|
||||
$(lt_configure) \
|
||||
$(lt_configure_ac) \
|
||||
$(lt_config_h_in) \
|
||||
$(lt_Makefile_am) \
|
||||
$(lt_Makefile_in) \
|
||||
$(lt_obsolete_m4) \
|
||||
$(stamp_mk)
|
||||
|
||||
$(lt_Makefile_in): $(lt_Makefile_am) $(lt_aclocal_m4)
|
||||
$(AM_V_GEN)cd '$(srcdir)/$(ltdl_dir)' && $(AUTOMAKE) Makefile
|
||||
|
||||
# Don't let unused scripts leak into the libltdl Makefile
|
||||
$(stamp_mk): $(lt_Makefile_in)
|
||||
$(AM_V_at)T='$(srcdir)/$(aux_dir)/Makefile.tmp'; \
|
||||
for p in $(srcdir)/$(aux_dir)/*; do \
|
||||
test -f "$$p" || continue; \
|
||||
f=`echo "$$p" | $(SED) 's|^$(srcdir)/$(aux_dir)/||'`; \
|
||||
case " $(pkgaux_scripts) ltmain.sh " in \
|
||||
*" $$f "*) ;; \
|
||||
*) '$(SED)' \
|
||||
-e 's|\(\$$([^)]*)/\)*'"$(ltdl_ac_aux_dir)/$$f"'\$$||' \
|
||||
-e 's|\(\$$([^)]*)/\)*'"$(ltdl_ac_aux_dir)/$$f"' ||' \
|
||||
-e '/^[ ]*\\$$/d' \
|
||||
'$(lt_Makefile_in)' > "$$T" \
|
||||
&& mv -f "$$T" '$(lt_Makefile_in)';; \
|
||||
esac; \
|
||||
done
|
||||
$(AM_V_GEN)echo stamp > '$@'
|
||||
|
||||
lt_aclocal_m4_deps = \
|
||||
$(lt_obsolete_m4) \
|
||||
$(ltversion_m4) \
|
||||
$(libtool_m4) \
|
||||
$(srcdir)/$(macro_dir)/ltargz.m4 \
|
||||
$(srcdir)/$(macro_dir)/ltdl.m4 \
|
||||
$(srcdir)/$(macro_dir)/ltoptions.m4 \
|
||||
$(srcdir)/$(macro_dir)/ltsugar.m4 \
|
||||
$(srcdir)/$(macro_dir)/m4.m4 \
|
||||
$(srcdir)/$(ltdl_dir)/configure.ac
|
||||
|
||||
lt_configure_deps = $(lt_aclocal_m4) $(lt_aclocal_m4_deps)
|
||||
|
||||
$(lt_aclocal_m4): $(lt_aclocal_m4_deps)
|
||||
$(AM_V_GEN)cd '$(srcdir)/$(ltdl_dir)' && $(ACLOCAL) -I ../m4
|
||||
|
||||
$(lt_configure): $(lt_configure_deps)
|
||||
$(AM_V_GEN)cd '$(srcdir)/$(ltdl_dir)' && $(AUTOCONF)
|
||||
|
||||
$(lt_config_h_in): $(lt_configure_deps)
|
||||
$(AM_V_GEN)cd '$(srcdir)/$(ltdl_dir)' && $(AUTOHEADER)
|
||||
$(AM_V_at)touch '$@'
|
||||
|
||||
|
||||
## -------------- ##
|
||||
## Documentation. ##
|
||||
## -------------- ##
|
||||
|
||||
doc_dir = $(srcdir)/doc
|
||||
|
||||
libtool_1 = $(doc_dir)/libtool.1
|
||||
libtoolize_1 = $(doc_dir)/libtoolize.1
|
||||
notes_texi = $(doc_dir)/notes.texi
|
||||
notes_txt = $(doc_dir)/notes.txt
|
||||
|
||||
EXTRA_DIST += $(doc_dir)/gendocs_template
|
||||
|
||||
# A bug in automake 1.11.1 (at least) prevents us from using:
|
||||
#
|
||||
# info_TEXINFOS = $(doc_dir)/libtool.texi
|
||||
#
|
||||
# Producing the following error, even though srcdir is implicitly set:
|
||||
# "cannot open < ./$(srcdir)/doc/libtool.texi: No such file or directory"
|
||||
info_TEXINFOS = doc/libtool.texi
|
||||
doc_libtool_TEXINFOS = $(doc_dir)/PLATFORMS $(doc_dir)/fdl.texi \
|
||||
$(notes_texi)
|
||||
EXTRA_DIST += $(notes_txt)
|
||||
## Workaround for a texinfo bug described here:
|
||||
## http://thread.gmane.org/gmane.comp.tex.texinfo.bugs/3930
|
||||
DISTCLEANFILES += libtool.dvi
|
||||
|
||||
all-local: $(notes_txt)
|
||||
|
||||
$(notes_txt): $(notes_texi)
|
||||
$(AM_V_GEN)$(MAKEINFO) -P '$(srcdir)/doc' --no-headers \
|
||||
$(MAKEINFOFLAGS) -o '$@' '$(notes_texi)'
|
||||
|
||||
dist_man1_MANS = $(libtool_1) $(libtoolize_1)
|
||||
MAINTAINERCLEANFILES += $(dist_man1_MANS)
|
||||
update_mans = \
|
||||
PATH=".$(PATH_SEPARATOR)$$PATH"; export PATH; \
|
||||
$(HELP2MAN) --output='$@'
|
||||
|
||||
# It's wrong to make distributed files (e.g. $(libtool_1)) rely on
|
||||
# files created in the build tree, so instead we regenerate the
|
||||
# manual pages if the sources for the build-tree files we want to
|
||||
# run have changed.
|
||||
$(libtool_1): $(ltmain_sh)
|
||||
$(AM_V_GEN)$(update_mans) --help-option=--help-all libtool
|
||||
$(libtoolize_1): $(libtoolize_in)
|
||||
$(AM_V_GEN)$(update_mans) libtoolize
|
||||
|
||||
|
||||
## ------------- ##
|
||||
## Installation. ##
|
||||
## ------------- ##
|
||||
|
||||
ltdldir = $(srcdir)/libltdl
|
||||
pkgauxdir = $(pkgdatadir)/build-aux
|
||||
|
||||
# The timestamps on these files must be preserved carefully so we install,
|
||||
# uninstall and set executable with custom rules here.
|
||||
pkgaux_parent_files = ltmain.sh
|
||||
pkgaux_install_files = config.guess config.sub install-sh
|
||||
pkgaux_data_files = $(pkgaux_parent_files)
|
||||
|
||||
# Everything that gets picked up by aclocal is automatically distributed,
|
||||
# this is the list of macro files we install on the user's system.
|
||||
pkgmacro_files = libtool.m4 ltargz.m4 ltdl.m4 ltoptions.m4 ltsugar.m4 \
|
||||
ltversion.m4 lt~obsolete.m4
|
||||
|
||||
## These are installed as a subdirectory of pkgdatadir so that
|
||||
## libtoolize --ltdl can find them later. Note that this list requires
|
||||
## specific order to avoid unnecessary re-autotooling after libtoolize run.
|
||||
pkgltdl_files = COPYING.LIB \
|
||||
Makefile.am \
|
||||
README \
|
||||
configure.ac \
|
||||
aclocal.m4 \
|
||||
Makefile.in \
|
||||
config-h.in \
|
||||
configure \
|
||||
libltdl/lt__alloc.h \
|
||||
libltdl/lt__argz_.h \
|
||||
libltdl/lt__dirent.h \
|
||||
libltdl/lt__glibc.h \
|
||||
libltdl/lt__private.h \
|
||||
libltdl/lt__strl.h \
|
||||
libltdl/lt_dlloader.h \
|
||||
libltdl/lt_error.h \
|
||||
libltdl/lt_system.h \
|
||||
libltdl/slist.h \
|
||||
loaders/dld_link.c \
|
||||
loaders/dlopen.c \
|
||||
loaders/dyld.c \
|
||||
loaders/load_add_on.c \
|
||||
loaders/loadlibrary.c \
|
||||
loaders/preopen.c \
|
||||
loaders/shl_load.c \
|
||||
lt__alloc.c \
|
||||
lt__argz.c \
|
||||
lt__dirent.c \
|
||||
lt__strl.c \
|
||||
lt_dlloader.c \
|
||||
lt_error.c \
|
||||
ltdl.c \
|
||||
ltdl.h \
|
||||
ltdl.mk \
|
||||
slist.c
|
||||
|
||||
install-data-local: $(lt_Makefile_in) install-scripts-local
|
||||
@$(NORMAL_INSTALL)
|
||||
## Don't install over the top of an old pkgdatadir
|
||||
-rm -rf '$(DESTDIR)$(pkgdatadir)'/*
|
||||
## First, put a copy of the libtool m4 macros in the aclocal dir
|
||||
@list='$(pkgmacro_files)'; for p in $$list; do \
|
||||
d=`echo "$(DESTDIR)$(aclocaldir)/$$p" |$(SED) 's|[^/]*$$||'`; \
|
||||
test -d "$$d" || $(mkinstalldirs) "$$d"; \
|
||||
echo " $(INSTALL_DATA) '$(srcdir)/$(macro_dir)/$$p' '$(DESTDIR)$(aclocaldir)/$$p'"; \
|
||||
$(INSTALL_DATA) "$(srcdir)/$(macro_dir)/$$p" "$(DESTDIR)$(aclocaldir)/$$p"; \
|
||||
done
|
||||
## install the helper scripts
|
||||
@list='$(pkgaux_scripts)' && \
|
||||
for p in $$list; do \
|
||||
d=`echo "$(DESTDIR)$(pkgauxdir)/$$p" |$(SED) 's|[^/]*$$||'`; \
|
||||
test -d "$$d" || $(mkinstalldirs) "$$d"; \
|
||||
echo " $(INSTALL_SCRIPT) '$(srcdir)/$(aux_dir)/$$p' '$(DESTDIR)$(pkgauxdir)/$$p'"; \
|
||||
$(INSTALL_SCRIPT) "$(srcdir)/$(aux_dir)/$$p" "$(DESTDIR)$(pkgauxdir)/$$p"; \
|
||||
done
|
||||
@list='$(pkgaux_data_files)' && for p in $$list; do \
|
||||
d=`echo "$(DESTDIR)$(pkgauxdir)/$$p" |$(SED) 's|[^/]*$$||'`; \
|
||||
test -d "$$d" || $(mkinstalldirs) "$$d"; \
|
||||
echo " $(INSTALL_DATA) '$(srcdir)/$(aux_dir)/$$p' '$(DESTDIR)$(pkgauxdir)/$$p'"; \
|
||||
$(INSTALL_DATA) "$(srcdir)/$(aux_dir)/$$p" "$(DESTDIR)$(pkgauxdir)/$$p"; \
|
||||
done
|
||||
## install the libltdl files
|
||||
@list='$(pkgltdl_files)' && for p in $$list; do \
|
||||
d=`echo "$(DESTDIR)$(pkgdatadir)/$$p" |$(SED) 's|[^/]*$$||'`; \
|
||||
test -d "$$d" || $(mkinstalldirs) "$$d"; \
|
||||
echo " $(INSTALL_DATA) '$(ltdldir)/$$p' '$(DESTDIR)$(pkgdatadir)/$$p'"; \
|
||||
$(INSTALL_DATA) "$(ltdldir)/$$p" "$(DESTDIR)$(pkgdatadir)/$$p"; \
|
||||
done
|
||||
chmod a+x '$(DESTDIR)$(pkgdatadir)/configure'
|
||||
|
||||
.PHONY: install-scripts-local
|
||||
install-scripts-local: $(lt_Makefile_in)
|
||||
## Inline helper-scripts for installed libtoolize script
|
||||
@p=`echo libtoolize |sed -e '$(transform)'`; \
|
||||
echo " $(SCRIPT_ENV) '$(inline_source)' libtoolize > '$(DESTDIR)$(bindir)/$$p'"; \
|
||||
d=`echo "$(DESTDIR)$(bindir)/$$p" |$(SED) 's|[^/]*$$||'`; \
|
||||
test -d "$$d" || $(mkinstalldirs) "$$d"; \
|
||||
$(SCRIPT_ENV) '$(inline_source)' libtoolize > "$(DESTDIR)$(bindir)/$$p"; \
|
||||
chmod a+x "$(DESTDIR)$(bindir)/$$p"
|
||||
|
||||
|
||||
## ------------- ##
|
||||
## Distribution. ##
|
||||
## ------------- ##
|
||||
|
||||
edit_readme_alpha = $(srcdir)/$(aux_dir)/edit-readme-alpha
|
||||
gitlog_to_changelog = $(srcdir)/$(aux_dir)/gitlog-to-changelog
|
||||
git_log_fix = $(srcdir)/$(aux_dir)/git-log-fix
|
||||
thanks_gen = $(srcdir)/$(aux_dir)/thanks-gen
|
||||
|
||||
dotserial = $(distdir)/.serial
|
||||
dotversion = $(top_srcdir)/.version
|
||||
tarball_version = $(distdir)/.tarball-version
|
||||
readme = $(distdir)/README
|
||||
changelog = $(distdir)/ChangeLog
|
||||
changelog_old = $(srcdir)/ChangeLog.old
|
||||
thanks = $(distdir)/THANKS
|
||||
no_thanks = $(srcdir)/NO-THANKS
|
||||
|
||||
# Generate ChangeLog using git log entries for as far back as
|
||||
# they are in good shape, appending manual records from earlier.
|
||||
changelog_start_date = 2011-01-01
|
||||
$(changelog): FORCE
|
||||
$(AM_V_GEN)if test -d '$(srcdir)/.git'; then \
|
||||
TZ=UTC $(gitlog_to_changelog) --amend=$(git_log_fix) \
|
||||
--ignore-matching=Omit-from-ChangeLog. \
|
||||
--format='%s%n%n%b%n' \
|
||||
--since=$(changelog_start_date) > '$@T'; \
|
||||
rm -f '$@'; mv '$@T' '$@'; \
|
||||
cat '$(changelog_old)' >> '$@'; \
|
||||
fi
|
||||
|
||||
# Sort in traditional ASCII order, regardless of the current locale;
|
||||
# otherwise we may get into trouble with distinct strings that the
|
||||
# current locale considers to be equal.
|
||||
ASSORT = LC_ALL=C sort
|
||||
|
||||
# Extract all lines up to the first one starting with "##".
|
||||
prologue = perl -ne '/^\#\#/ and exit; print' $(no_thanks)
|
||||
|
||||
# Generate THANKS using git log entries as far as possible, fixing
|
||||
# up ommisions and errors from NO-THANKS configuration.
|
||||
$(thanks): FORCE
|
||||
$(AM_V_GEN)if test -d '$(srcdir)/.git'; then \
|
||||
{ \
|
||||
$(prologue); echo; \
|
||||
{ perl -ne '/^$$/.../^$$/ and print' $(no_thanks) \
|
||||
| grep -v '^$$' | perl -pe 's/ +/\0/'; \
|
||||
{ sed -e '1,/\#\# /d' -e '/^\#\# /d' \
|
||||
-e 's|[ ][ ]*| |' < $(no_thanks) \
|
||||
| tr '\t' '\0'; \
|
||||
git log --pretty=format:'%aN%x00%aE'; \
|
||||
} | $(ASSORT) -u; \
|
||||
} | $(thanks_gen) \
|
||||
| LC_ALL=en_US.UTF-8 sort -f; \
|
||||
echo; \
|
||||
printf ';; %s\n' 'Local Variables:' 'coding: utf-8' End:; \
|
||||
} > '$@'; \
|
||||
fi
|
||||
|
||||
## Arrange so that .version appears only in the distribution
|
||||
## tarball, and never in a checked-out repository.
|
||||
EXTRA_DIST += $(dotversion)
|
||||
BUILT_SOURCES += $(dotversion)
|
||||
$(dotversion):
|
||||
$(AM_V_GEN)echo '$(VERSION)' > '$@T' && mv '$@T' '$@'
|
||||
|
||||
## Edit the README file for alpha releases.
|
||||
EXTRA_DIST += $(edit_readme_alpha)
|
||||
re_alpha_version = '\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*[-\.][-\.0-9a-z]*\)'
|
||||
$(readme): FORCE
|
||||
@if test -n "`expr $(VERSION) : $(re_alpha_version)`"; then \
|
||||
if test 0 = '$(AM_DEFAULT_VERBOSITY)' && test 1 != '$(V)'; \
|
||||
then echo " GEN " $@; \
|
||||
else echo "$(SHELL) $(edit_readme_alpha) $@"; fi; \
|
||||
$(SHELL) $(edit_readme_alpha) '$@'; \
|
||||
fi
|
||||
|
||||
git_commit_count = git log --pretty=oneline |wc -l |$(SED) 's|[ ]||g'
|
||||
|
||||
dist-hook: $(changelog) $(thanks) $(dotversion) $(readme)
|
||||
## Arrange so that .tarball-version appears only in the distribution
|
||||
## tarball, and never in a checked-out repository.
|
||||
echo '$(VERSION)' > $(tarball_version)
|
||||
## ...and similarly for .serial.
|
||||
$(git_commit_count) > $(dotserial)
|
||||
## Ensure aclocal has not wrongly picked up old macro definitions.
|
||||
$(no_bogus_macros)
|
||||
|
||||
distcheck-hook: syntax-check
|
||||
|
||||
uninstall-hook:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(pkgltdl_files)'; \
|
||||
for f in $$list; do \
|
||||
echo " rm -f '$(DESTDIR)$(pkgdatadir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \
|
||||
done
|
||||
@list='$(pkgaux_scripts) $(pkgaux_data_files)'; \
|
||||
for f in $$list; do \
|
||||
echo " rm -f '$(DESTDIR)$(pkgauxdir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(pkgauxdir)/$$f"; \
|
||||
done
|
||||
@for p in $(pkgmacro_files); do \
|
||||
f=`echo "$$p" |$(SED) 's|^.*/||'`; \
|
||||
echo " rm -f '$(DESTDIR)$(aclocaldir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(aclocaldir)/$$f"; \
|
||||
done
|
||||
@p=`echo libtoolize |sed -e '$(transform)'`; \
|
||||
echo " rm -f '$(DESTDIR)$(bindir)/$$p'"; \
|
||||
rm -f "$(DESTDIR)$(bindir)/$$p"
|
||||
|
||||
|
||||
## ----------- ##
|
||||
## Test suite. ##
|
||||
## ----------- ##
|
||||
|
||||
tests_dir = $(top_srcdir)/tests
|
||||
package_m4 = $(tests_dir)/package.m4
|
||||
testsuite = $(tests_dir)/testsuite
|
||||
|
||||
# The testsuite files are evaluated in the order given here. When
|
||||
# adding new tests, make sure cmdline_wrap.at stays at the end so
|
||||
# that it can check for previous failures and skip if necessary.
|
||||
TESTSUITE = tests/testsuite
|
||||
TESTSUITE_AT = tests/testsuite.at \
|
||||
tests/configure-funcs.at \
|
||||
tests/libtoolize.at \
|
||||
tests/libtool.at \
|
||||
tests/demo.at \
|
||||
tests/pic_flag.at \
|
||||
tests/with-pic.at \
|
||||
tests/cdemo.at \
|
||||
tests/convenience.at \
|
||||
tests/depdemo.at \
|
||||
tests/help.at \
|
||||
tests/duplicate_members.at \
|
||||
tests/duplicate_conv.at \
|
||||
tests/duplicate_deps.at \
|
||||
tests/flags.at \
|
||||
tests/inherited_flags.at \
|
||||
tests/link-order.at \
|
||||
tests/link-order2.at \
|
||||
tests/fail.at \
|
||||
tests/shlibpath.at \
|
||||
tests/runpath-in-lalib.at \
|
||||
tests/static.at \
|
||||
tests/export.at \
|
||||
tests/export-def.at \
|
||||
tests/search-path.at \
|
||||
tests/indirect_deps.at \
|
||||
tests/archive-in-archive.at \
|
||||
tests/exeext.at \
|
||||
tests/execute-mode.at \
|
||||
tests/bindir.at \
|
||||
tests/cwrapper.at \
|
||||
tests/deplib-in-subdir.at \
|
||||
tests/infer-tag.at \
|
||||
tests/localization.at \
|
||||
tests/nocase.at \
|
||||
tests/install.at \
|
||||
tests/versioning.at \
|
||||
tests/destdir.at \
|
||||
tests/old-m4-iface.at \
|
||||
tests/am-subdir.at \
|
||||
tests/lt_dlexit.at \
|
||||
tests/lt_dladvise.at \
|
||||
tests/lt_dlopen.at \
|
||||
tests/lt_dlopen_a.at \
|
||||
tests/lt_dlopenext.at \
|
||||
tests/ltdl-libdir.at \
|
||||
tests/ltdl-api.at \
|
||||
tests/dlloader-api.at \
|
||||
tests/loadlibrary.at \
|
||||
tests/lalib-syntax.at \
|
||||
tests/resident.at \
|
||||
tests/slist.at \
|
||||
tests/need_lib_prefix.at \
|
||||
tests/mdemo.at \
|
||||
tests/standalone.at \
|
||||
tests/subproject.at \
|
||||
tests/nonrecursive.at \
|
||||
tests/recursive.at \
|
||||
tests/tagdemo.at \
|
||||
tests/template.at \
|
||||
tests/ctor.at \
|
||||
tests/exceptions.at \
|
||||
tests/early-libtool.at \
|
||||
tests/no-executables.at \
|
||||
tests/deplibs-ident.at \
|
||||
tests/configure-iface.at \
|
||||
tests/f77demo.at \
|
||||
tests/fcdemo.at \
|
||||
tests/darwin.at \
|
||||
tests/dumpbin-symbols.at \
|
||||
tests/deplibs-mingw.at \
|
||||
tests/sysroot.at \
|
||||
tests/stresstest.at \
|
||||
tests/cmdline_wrap.at \
|
||||
$(NOTHING_ELSE)
|
||||
|
||||
EXTRA_DIST += $(testsuite) $(TESTSUITE_AT) $(package_m4)
|
||||
|
||||
# Be sure to reexport important environment variables:
|
||||
TESTS_ENVIRONMENT = MAKE="$(MAKE)" CC="$(CC)" CFLAGS="$(CFLAGS)" \
|
||||
CPP="$(CPP)" CPPFLAGS="$(CPPFLAGS)" LD="$(LD)" LDFLAGS="$(LDFLAGS)" \
|
||||
LIBS="$(LIBS)" LN_S="$(LN_S)" NM="$(NM)" RANLIB="$(RANLIB)" \
|
||||
AR="$(AR)" \
|
||||
EGREP="$(EGREP)" FGREP="$(FGREP)" GREP="$(GREP)" SED="$(SED)" \
|
||||
STRIP="$(STRIP)" lt_INSTALL="$(INSTALL)" \
|
||||
MANIFEST_TOOL="$(MANIFEST_TOOL)" \
|
||||
OBJEXT="$(OBJEXT)" EXEEXT="$(EXEEXT)" \
|
||||
SHELL="$(SHELL)" CONFIG_SHELL="$(SHELL)" \
|
||||
CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" CXXCPP="$(CXXCPP)" \
|
||||
F77="$(F77)" FFLAGS="$(FFLAGS)" \
|
||||
FC="$(FC)" FCFLAGS="$(FCFLAGS)" \
|
||||
GCJ="$(GCJ)" GCJFLAGS="$(GCJFLAGS)" \
|
||||
lt_cv_with_aix_soname="$(with_aix_soname)" \
|
||||
lt_cv_to_host_file_cmd="$(to_host_file_cmd)" \
|
||||
lt_cv_to_tool_file_cmd="$(to_tool_file_cmd)"
|
||||
|
||||
BUILDCHECK_ENVIRONMENT = _lt_pkgdatadir="$(abs_top_srcdir)" \
|
||||
LIBTOOLIZE="$(abs_top_builddir)/libtoolize" \
|
||||
LIBTOOL="$(abs_top_builddir)/libtool" \
|
||||
tst_aclocaldir="$(abs_top_srcdir)/m4"
|
||||
|
||||
INSTALLCHECK_ENVIRONMENT = \
|
||||
LIBTOOLIZE="$(bindir)/`echo libtoolize |$(SED) '$(program_transform_name)'`" \
|
||||
LIBTOOL="$(bindir)/`echo libtool |$(SED) '$(program_transform_name)'`" \
|
||||
LTDLINCL="-I$(includedir)" \
|
||||
LIBLTDL="$(libdir)/libltdl.la" \
|
||||
tst_aclocaldir="$(aclocaldir)"
|
||||
|
||||
$(testsuite): $(package_m4) $(TESTSUITE_AT) Makefile.am
|
||||
$(AM_V_GEN)$(AUTOTEST) -I '$(srcdir)' -I '$(srcdir)/tests' $(TESTSUITE_AT) -o '$@'
|
||||
|
||||
$(package_m4): $(dotversion) Makefile.am
|
||||
$(AM_V_GEN){ \
|
||||
echo '# Signature of the current package.'; \
|
||||
echo 'm4_define([AT_PACKAGE_NAME], [$(PACKAGE_NAME)])'; \
|
||||
echo 'm4_define([AT_PACKAGE_TARNAME], [$(PACKAGE_TARNAME)])'; \
|
||||
echo 'm4_define([AT_PACKAGE_VERSION], [$(PACKAGE_VERSION)])'; \
|
||||
echo 'm4_define([AT_PACKAGE_STRING], [$(PACKAGE_STRING)])'; \
|
||||
echo 'm4_define([AT_PACKAGE_BUGREPORT], [$(PACKAGE_BUGREPORT)])'; \
|
||||
echo 'm4_define([AT_PACKAGE_URL], [$(PACKAGE_URL)])'; \
|
||||
} > '$@'
|
||||
|
||||
tests/atconfig: $(config_status)
|
||||
$(AM_V_GEN)$(SHELL) '$(config_status)' '$@'
|
||||
|
||||
DISTCLEANFILES += tests/atconfig
|
||||
|
||||
CD_TESTDIR = abs_srcdir=`$(lt__cd) $(srcdir) && pwd`; cd tests
|
||||
|
||||
testsuite_deps = tests/atconfig $(srcdir)/$(TESTSUITE)
|
||||
testsuite_deps_uninstalled = $(testsuite_deps) libltdl/libltdlc.la \
|
||||
$(bin_SCRIPTS) $(LTDL_BOOTSTRAP_DEPS)
|
||||
|
||||
# Hook the test suite into the check rule
|
||||
check-local: $(testsuite_deps_uninstalled)
|
||||
$(AM_V_at)$(CD_TESTDIR); \
|
||||
CONFIG_SHELL='$(SHELL)' '$(SHELL)' "$$abs_srcdir/$(TESTSUITE)" \
|
||||
$(TESTS_ENVIRONMENT) $(BUILDCHECK_ENVIRONMENT) $(TESTSUITEFLAGS)
|
||||
|
||||
# Run the test suite on the *installed* tree.
|
||||
installcheck-local: $(testsuite_deps)
|
||||
$(AM_V_at)$(CD_TESTDIR); \
|
||||
CONFIG_SHELL='$(SHELL)' '$(SHELL)' "$$abs_srcdir/$(TESTSUITE)" \
|
||||
$(TESTS_ENVIRONMENT) $(INSTALLCHECK_ENVIRONMENT) $(TESTSUITEFLAGS) \
|
||||
AUTOTEST_PATH='$(exec_prefix)/bin'
|
||||
|
||||
.PHONY: check-noninteractive-old
|
||||
check-noninteractive-old:
|
||||
$(AM_V_at)'$(MAKE)' $(AM_MAKEFLAGS) check-TESTS TESTS='$(TESTS)'
|
||||
|
||||
# Run only noninteractive parts of the new testsuite.
|
||||
.PHONY: check-noninteractive-new
|
||||
check-noninteractive-new: $(testsuite_deps_uninstalled)
|
||||
$(AM_V_at)$(CD_TESTDIR); \
|
||||
CONFIG_SHELL='$(SHELL)' '$(SHELL)' "$$abs_srcdir/$(TESTSUITE)" \
|
||||
$(TESTS_ENVIRONMENT) $(BUILDCHECK_ENVIRONMENT) \
|
||||
-k '!interactive' INNER_TESTSUITEFLAGS=',!interactive' \
|
||||
$(TESTSUITEFLAGS)
|
||||
|
||||
# Run only interactive parts of the new testsuite.
|
||||
.PHONY: check-interactive
|
||||
check-interactive: $(testsuite_deps_uninstalled)
|
||||
$(AM_V_at)$(CD_TESTDIR); \
|
||||
CONFIG_SHELL='$(SHELL)' '$(SHELL)' "$$abs_srcdir/$(TESTSUITE)" \
|
||||
$(TESTS_ENVIRONMENT) $(BUILDCHECK_ENVIRONMENT) \
|
||||
-k interactive -k recursive INNER_TESTSUITEFLAGS=',interactive' \
|
||||
$(TESTSUITEFLAGS)
|
||||
|
||||
.PHONY: check-noninteractive
|
||||
check-noninteractive: check-noninteractive-old check-noninteractive-new
|
||||
|
||||
# We need to remove any file droppings left behind by testsuite
|
||||
clean-local:
|
||||
-$(CD_TESTDIR); \
|
||||
test -f "$$abs_srcdir/$(TESTSUITE)" && \
|
||||
'$(SHELL)' "$$abs_srcdir/$(TESTSUITE)" --clean
|
||||
|
||||
## An empty target to depend on when a rule needs to always run
|
||||
## whenever it is visited.
|
||||
FORCE:
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,261 +0,0 @@
|
||||
# GNU Libtool
|
||||
|
||||
1. Introduction
|
||||
===============
|
||||
|
||||
[GNU Libtool][libtool] is a generic library support script.
|
||||
[Libtool][] hides the complexity of using shared libraries behind a
|
||||
consistent, portable interface.
|
||||
|
||||
Libtool's home page is:
|
||||
|
||||
http://www.gnu.org/software/libtool/libtool.html
|
||||
|
||||
See the file [NEWS][] for a description of recent changes to Libtool.
|
||||
|
||||
Please note that you can build GNU Libtool from this directory using a
|
||||
vendor Make program as long as this is an official release tarball;
|
||||
otherwise you will need GNU Make for sane VPATH support. See the file
|
||||
[INSTALL][] for complete generic instructions on how to build and install
|
||||
Libtool. Also, see the file [doc/notes.txt][notes] for some platform-
|
||||
specific information.
|
||||
|
||||
See the info node (libtool)Tested Platforms. (or the file
|
||||
[doc/PLATFORMS][platforms]) for a list of platforms that Libtool already
|
||||
supports.
|
||||
|
||||
Please try it on all the platforms you have access to:
|
||||
|
||||
* If it builds and passes the test suite (`gmake check`), please send
|
||||
a short note to the [libtool mailing list][libtool list] with a
|
||||
subject line including the string `[PLATFORM]`, and containing the
|
||||
details from the end of `./libtool --help` in the body.
|
||||
* Otherwise, see _Reporting Bugs_ below for how to help us fix any
|
||||
problems you discover.
|
||||
|
||||
To use Libtool, add the new generic library building commands to your
|
||||
`Makefile`, `Makefile.in`, or `Makefile.am`. See the documentation for
|
||||
details.
|
||||
|
||||
[install]: http://git.savannah.gnu.org/cgit/libtool.git/tree/INSTALL
|
||||
[libtool]: http://www.gnu.org/s/libtool
|
||||
[libtool list]: mailto:libtool@gnu.org
|
||||
[news]: http://git.savannah.gnu.org/cgit/libtool.git/tree/NEWS
|
||||
[notes]: http://git.savannah.gnu.org/cgit/libtool.git/tree/doc/notes.texi
|
||||
[platforms]: http://git.savannah.gnu.org/cgit/libtool.git/tree/doc/PLATFORMS
|
||||
|
||||
|
||||
2. Reporting Bugs
|
||||
=================
|
||||
|
||||
If this distribution doesn't work for you, before you report the
|
||||
problem, at least try upgrading to the latest released version first,
|
||||
and see whether the issue persists. If you feel able, you can also
|
||||
check whether the issue has been fixed in the development sources for
|
||||
the next release (see _Obtaining the Latest Sources_ below).
|
||||
|
||||
Once you've determined that your bug is still not fixed in the latest
|
||||
version, please send a full report to the libtool [bug mailing list][],
|
||||
including:
|
||||
|
||||
1. the information from the end of the help message given by
|
||||
`./libtool --help`, and the verbose output of any failed tests
|
||||
(see _The Test Suites_ immediately below);
|
||||
2. complete instructions for how to reproduce your bug, along with
|
||||
the results you were expecting, and how they differ from what you
|
||||
actually see;
|
||||
3. a workaround or full fix for the bug, if you have it;
|
||||
4. a copy of `tests/testsuite.log` if you are experiencing failures
|
||||
in the Autotest testsuite.
|
||||
5. new test cases for the testsuite that demonstrate the bug are
|
||||
especially welcome, and will help to ensure that future releases
|
||||
don't reintroduce the problem - if you're not able to write a
|
||||
complete testsuite case, a simple standalone shell script is
|
||||
usually good enough to help us write a test for you.
|
||||
|
||||
If you have any other suggestions, or if you wish to port Libtool to a
|
||||
new platform, please send email to the [mailing list][libtool list].
|
||||
|
||||
Please note that if you send us an non-trivial code for inclusion in a
|
||||
future release, we may ask you for a copyright assignment (for brief
|
||||
details see the 'Copyright Assignment' section on our
|
||||
[Contributing][contribute] webpage.
|
||||
|
||||
[bug mailing list]: mailto:bug-libtool@gnu.org
|
||||
[contribute]: http://www.gnu.org/software/libtool/contribute.html
|
||||
|
||||
|
||||
3. The Test Suite
|
||||
=================
|
||||
|
||||
Libtool comes an integrated sets of tests to check that your build
|
||||
is sane. You can run like this, assuming that `gmake` refers to GNU
|
||||
make:
|
||||
|
||||
gmake check
|
||||
|
||||
The new, Autotest-driven testsuite is documented in:
|
||||
|
||||
info Autoconf 'testsuite Invocation'
|
||||
|
||||
but simple help may also be obtained through:
|
||||
|
||||
gmake check TESTSUITEFLAGS='--help'
|
||||
|
||||
For verbose output, add the flag '-v', for running only a subset of the
|
||||
independent tests, merely specify them by number or by keyword, both of
|
||||
which are displayed with the '--list' flag. For example, the 'libtool'
|
||||
keyword is used for the tests that exercise only this script. So it is
|
||||
possible to test an installed script, possibly from a different Libtool
|
||||
release, with:
|
||||
|
||||
gmake check \
|
||||
TESTSUITEFLAGS="-k libtool LIBTOOL=/path/to/libtool"
|
||||
|
||||
Some tests, like the one exercising `max_cmd_len` limits, make use of
|
||||
this to invoke the testsuite recursively on a subset of tests. For these
|
||||
tests, the variable `INNER_TESTSUITEFLAGS` may be used. It will be
|
||||
expanded right after the `-k libtool`, without separating whitespace, so
|
||||
that further limiting of the recursive set of tests is possible. For
|
||||
example, to run only the template tests within the `max_cmd_len`, use:
|
||||
|
||||
gmake check TESTSUITEFLAGS="-v -x -k max_cmd_len \
|
||||
INNER_TESTSUITEFLAGS=',template -v -x'"
|
||||
|
||||
If you wish to report test failures to the libtool list, you need to
|
||||
send the file `tests/testsuite.log` to the [bug mailing list][].
|
||||
|
||||
|
||||
4. Obtaining the Latest Sources
|
||||
===============================
|
||||
|
||||
* With the exception of ancient releases, all official GNU Libtool
|
||||
releases have a detached GPG signature file. With this you can verify
|
||||
that the corresponding file (i.e. without the `.sig` suffix) is the
|
||||
same file that was released by the owner of it's GPG key ID. First,
|
||||
be sure to download both the .sig file and the corresponding release,
|
||||
then run a command like this:
|
||||
|
||||
gpg --verify libtool-x.y.z.tar.gz.sig
|
||||
|
||||
If that command fails because you don't have the required public key,
|
||||
then run this command to import it:
|
||||
|
||||
gpg --keyserver keys.gnupg.net --recv-keys 2983D606
|
||||
|
||||
and then rerun the `gpg --verify` command.
|
||||
|
||||
* Official stable releases of GNU Libtool, along with these detached
|
||||
signature files are available from:
|
||||
|
||||
ftp://ftp.gnu.org/gnu/libtool
|
||||
|
||||
To reduce load on the main server, please use one of the mirrors
|
||||
listed at:
|
||||
|
||||
http://www.gnu.org/order/ftp.html
|
||||
|
||||
* Alpha quality pre-releases of GNU Libtool, also with detached
|
||||
signature files are available from:
|
||||
|
||||
ftp://alpha.gnu.org/gnu/libtool
|
||||
|
||||
and some of the mirrors listed at:
|
||||
|
||||
http://www.gnu.org/order/ftp.html
|
||||
|
||||
* The master libtool repository is stored in git.
|
||||
|
||||
If you are a member of the savannah group for GNU Libtool, a writable
|
||||
copy of the libtool repository can be obtained by:
|
||||
|
||||
git clone <savannah-user>@git.sv.gnu.org:/srv/git/libtool.git
|
||||
|
||||
If you are behind a firewall that blocks the git protocol, you may
|
||||
find it useful to use
|
||||
|
||||
git config --global url.http://git.sv.gnu.org/r/.insteadof \
|
||||
git://git.sv.gnu.org/
|
||||
|
||||
to force git to transparently rewrite all savannah git references to
|
||||
use http.
|
||||
|
||||
If you are not a member of the savannah group for GNU Libtool, you can
|
||||
still fetch a read-only copy with either:
|
||||
|
||||
git clone git://git.sv.gnu.org/libtool.git
|
||||
|
||||
or using the CVS pserver protocol:
|
||||
|
||||
cvs -d:pserver:anonymous@pserver.git.sv.gnu.org:/srv/git/libtool.git \
|
||||
co -d libtool HEAD
|
||||
|
||||
* Before you can build from git, you need to bootstrap. This requires:
|
||||
- Autoconf 2.64 or later
|
||||
- Automake 1.11.1 or later
|
||||
- Help2man 1.29 or later
|
||||
- Xz 4.999.8beta or later (from [tukaani.org](http://tukaani.org/xz))
|
||||
- Texinfo 4.8 or later
|
||||
- Any prerequisites of the above (such as m4, perl, tex)
|
||||
|
||||
Note that these bootstrapping dependencies are much stricter than
|
||||
those required to use a destributed release for your own packages.
|
||||
After installation, GNU Libtool is designed to work either standalone,
|
||||
or optionally with:
|
||||
- Autoconf 2.59 or later
|
||||
- Automake 1.9.6 or later
|
||||
|
||||
* The `bootstrap` script sets up the source directory for you to hack.
|
||||
|
||||
|
||||
5. Version Numbering
|
||||
====================
|
||||
|
||||
People have complained that they find the version numbering scheme under
|
||||
which libtool is released confusing... so we've changed it!
|
||||
|
||||
It works like this:
|
||||
|
||||
<major-number>.<minor-number>
|
||||
|
||||
Releases with a **major-number** less than 1 were not yet feature
|
||||
complete. Releases with a **major-number** of 1 used the old numbering
|
||||
scheme that everyone disliked so much. Releases with a **major-number**
|
||||
of 2 us the new scheme described here. If libtool ever undergoes a
|
||||
major rewrite or substantial restructuring, the **major-number** will be
|
||||
incremented again.
|
||||
|
||||
If we make a patch release to fix bugs in a stable release, we use a
|
||||
third number, so:
|
||||
|
||||
2.4.2
|
||||
|
||||
If we make an alpha quality prerelease, we use a fourth number for the
|
||||
number of changsets applied since the version it's based on:
|
||||
|
||||
2.4.2.418
|
||||
|
||||
And finally, if you build an unreleased version it will have a short git
|
||||
revision hash string in hexadecimal appended to all of that:
|
||||
|
||||
2.4.2.418.3-30eaa
|
||||
|
||||
--
|
||||
Copyright (C) 2004-2010, 2015-2019, 2021-2022 Free Software
|
||||
Foundation, Inc.
|
||||
|
||||
Written by Gary V. Vaughan, 2004
|
||||
|
||||
This file is part of GNU Libtool.
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
notice and this notice are preserved. This file is offered as-is,
|
||||
without warranty of any kind.
|
||||
|
||||
|
||||
Local Variables:
|
||||
mode: text
|
||||
fill-column: 72
|
||||
End:
|
||||
vim:tw=72
|
||||
@ -1,342 +0,0 @@
|
||||
These people have contributed to GNU Libtool. Some have reported problems,
|
||||
others have contributed improvements to the documentation and actual code.
|
||||
The particular contributions are described in the version control logs and
|
||||
ChangeLog files. If your name has been left out, if you'd rather not be
|
||||
listed, or if you'd prefer a different address be used, please send a
|
||||
note to the bug-report mailing list (as seen at end of e.g., libtool --help).
|
||||
|
||||
##
|
||||
aakropotkin alex.ameen.tx@gmail.com
|
||||
Akim Demaille akim@epita.fr
|
||||
Alan Hourihane alanh@fairlite.co.uk
|
||||
Alan Modra amodra@bigpond.net.au
|
||||
Alan W. Irwin irwin@beluga.phys.uvic.ca
|
||||
Albert Cheng acheng@ncsa.uiuc.edu
|
||||
Albert Chin-A-Young china@thewrittenword.com
|
||||
Alex Ameen alex.ameen.tx@gmail.com
|
||||
Alexander Hass alexander.hass@sap.com
|
||||
Alexander Shevchenko sav_ix@ukr.net
|
||||
Alexandre Duret-Lutz adl@gnu.org
|
||||
Alexei Sheplyakov varg@theor.jinr.ru
|
||||
Alex Potapenko opotapeno@gmail.com
|
||||
Alfred M. Szmidt ams@kemisten.nu
|
||||
Allan McRae allan@archlinux.org
|
||||
Allan Sandfeld Jensen snowwolf@one2one-networks.com
|
||||
Alon Bar-Lev alon.barlev@gmail.com
|
||||
Andreas Jaeger aj@suse.de
|
||||
Andreas Schiffler aschiffler@ferzkopp.net
|
||||
Andreas Schwab schwab@linux-m68k.org
|
||||
Andrew C. Feren aferen@CetaceanNetworks.com
|
||||
Andrew Suffield asuffield@debian.org
|
||||
Andrey Slepuhin pooh@msu.ru
|
||||
Aneesh Kumar K.V kvaneesh@hotmail.com
|
||||
Anthony Green green@redhat.com
|
||||
Archie Cobbs archie@whistle.com
|
||||
Arkadiusz Miśkiewicz arekm@maven.pl
|
||||
Arne Woerner woerner@mediabase-gmbh.de
|
||||
Assar Westerlund assar@sics.se
|
||||
Bart Van Assche bvanassche@acm.org
|
||||
Benjamin Reed ranger@befunk.com
|
||||
Bernhard Fischer spam.protected
|
||||
Bernhard Rosenkraenzer bero@redhat.de
|
||||
Bernhard Voelker mail@bernhard-voelker.de
|
||||
Bert Driehuis bert_driehuis@compuware.com
|
||||
Bert Wesarg bert.wesarg@googlemail.com
|
||||
Bob McElrath bob+libtool@mcelrath.org
|
||||
Boyd Lynn Gerber gerberb@zenez.com
|
||||
Brad brad@comstyle.com
|
||||
Brad Smith brad@comstyle.com
|
||||
Brent Leback brent.leback@st.com
|
||||
Brian Barrett brbarret@osl.iu.edu
|
||||
Brian W. Barrett bbarrett@lanl.gov
|
||||
Brice De Bruyne bricedb@gmail.com
|
||||
Brook Moses bmoses@google.com
|
||||
Brooks Moses bmoses@google.com
|
||||
Bruce Korb bkorb@gnu.org
|
||||
Bruno Haible bruno@clisp.org
|
||||
Camilo La Rota camilo.larota@ens-lyon.fr
|
||||
Carl D. Roth roth@cse.ucsc.edu
|
||||
Chad Cunningham ccunning@math.ohio-state.edu
|
||||
Chris Demetriou cgd@google.com
|
||||
Chris Lattner sabre@skylab.org
|
||||
Chris P. Ross cross@eng.us.uu.net
|
||||
Christiaan Welvaart cjw@daneel.dyndns.org
|
||||
Christian Biesinger cbiesinger@web.de
|
||||
Christian Cornelssen ccorn@cs.tu-berlin.de
|
||||
Christian Rössel christian.roessel@gmx.de
|
||||
Christoph Egger Christoph_Egger@gmx.de
|
||||
Christopher A. Knight chriskn@crt.com
|
||||
Christopher Hulbert cchgroupmail@gmail.com
|
||||
Christopher Pfisterer cp@chrisp.de
|
||||
Christoph Pfisterer cp@chrisp.de
|
||||
Craig Dooley xlnxminusx@gmail.com
|
||||
Craig Tierney Craig.Tierney@noaa.gov
|
||||
Cristophe Jarry christophe.jarry@ouvaton.org
|
||||
Dalibor Topic robilad@kaffe.org
|
||||
Daniel Harvey daniel@amristar.com.au
|
||||
Daniel Kobras kobras@linux.de
|
||||
Daniel Reed djr@redhat.com
|
||||
Daniel Richard G. skunk@iSKUNK.ORG
|
||||
Dan McMahill mcmahill@mtl.mit.edu
|
||||
Dan McNichol mcnichol@austin.ibm.com
|
||||
Dave Brolley brolley@redhat.com
|
||||
Dave Korn dave.korn.cygwin@googlemail.com
|
||||
Dave Vasilevsky thevas@mac.com
|
||||
Dave Yost Dave@Yost.com
|
||||
David 'Digit' Turner digit@google.com
|
||||
David Edelsohn dje.gcc@gmail.com
|
||||
David Heine dlheine@truffle.Stanford.EDU
|
||||
David Jones jones@mosaid.com
|
||||
Derek R. Price derek@ximbiot.com
|
||||
Dirk Mueller dmueller@suse.de
|
||||
DJ Delorie dj@delorie.com
|
||||
Donald Anderson dda@world.std.com
|
||||
Donald D. Anderson dda@sleepycat.com
|
||||
Donn Washburn n5xwb@comcast.net
|
||||
Doug Evans devans@casey.cygnus.com
|
||||
Ed Maste emaste@freebsd.org
|
||||
Edouard G. Parmelan Edouard.Parmelan@France.NCR.COM
|
||||
Edward M. Lee tailbert@yahoo.com
|
||||
Elizabeth Barham soggytrousers@yahoo.com
|
||||
Erez Zadok ezk@cs.columbia.edu
|
||||
Eric Bavier bavier@cray.com
|
||||
Eric Blake ebb9@byu.net
|
||||
Eric Estievenart eric@via.ecp.fr
|
||||
Eric Lindahl erik@theophys.kth.se
|
||||
Erik van Pienbroek erik-gnu@vanpienbroek.nl
|
||||
Ethan Mallove ethan.mallove@sun.com
|
||||
Fabian Groffen grobian@gentoo.org
|
||||
Frank Ch. Eigler fche@cygnus.com
|
||||
Fred Cox sailorfred@yahoo.com
|
||||
Fred Fish fnf@be.com
|
||||
Fredrik Estreen estreen@algonet.se
|
||||
Fritz Elfert felfert@to.com
|
||||
Gary Kumfert kumfert@llnl.gov
|
||||
Geoffrey Keating geoffk@apple.com
|
||||
George Bosilca bosilca@cs.utk.edu
|
||||
Gerald Pfeifer gerald@pfeifer.com
|
||||
Greg Eisenhauer eisen@cc.gatech.edu
|
||||
Guido Draheim guidod-2001q3@gmx.de
|
||||
Henning Nielsen Lund hnl_dk@amigaos.dk
|
||||
Hiroyuki Sato hiroysato@gmail.com
|
||||
H.J. Lu hjl@gnu.org
|
||||
Howard Chu hyc@highlandsun.com
|
||||
Ian Lance Taylor ian@cygnus.com
|
||||
Ingo Weinhold ingo_weinhold@gmx.de
|
||||
Jacob Meuser jakemsr@jakemsr.com
|
||||
Jakub Bogusz qboosh@pld-linux.org
|
||||
Jakub Jelinek jakub@redhat.com
|
||||
James E Wilson wilson@specifixinc.com
|
||||
James Su james.su@gmail.com
|
||||
Jan Engelhardt jengelh@inai.de
|
||||
Jan Kratochvil project-libtool@jankratochvil.net
|
||||
Jay Krell jay.krell@cornell.edu
|
||||
Jean-Frederic Clere jfrederic.clere@fujitsu-siemens.com
|
||||
Jeff Squyres jsquyres@cisco.com
|
||||
Jens Petersen petersen@redhat.com
|
||||
Jeremie LE HEN tataz@sitadelle.com
|
||||
Jeremy C. Reed reed@reedmedia.net
|
||||
Jeremy Huddleston Sequoia jeremyhu@macports.org
|
||||
Jim Meyering jim@meyering.net
|
||||
Jim Pick jim@kaffe.org
|
||||
Jim Tison jtison@us.ibm.com
|
||||
Jiro Takabatake jiro@din.or.jp
|
||||
Joakim Tjernlund joakim.tjernlund@transmode.se
|
||||
Joel N. Weber II devnull@gnu.org
|
||||
Joe Orton joe@manyfish.co.uk
|
||||
Joerg Sonnenberger joerg@netbsd.org
|
||||
John Bowler jbowler@acm.org
|
||||
John David Anglin dave.anglin@nrc-cnrc.gc.ca
|
||||
John R. Cary cary@txcorp.com
|
||||
John Wehle john@feith.com
|
||||
John Wolfe jlw@sco.com
|
||||
Jon Meredith jonm@alchemetrics.co.uk
|
||||
Joseph Beckenbach III jrb3@best.com
|
||||
Joseph Prostko joe.prostko@gmail.com
|
||||
Juergen Reuter reuter@t00pcx17094.desy.de
|
||||
Jürgen Reuter juergen.reuter@physik.uni-freiburg.de
|
||||
Justin Lecher jlec@gentoo.org
|
||||
Karl Berry karl@freefriends.org
|
||||
Kean Johnston jkj@sco.com
|
||||
Keith Packard keithp@keithp.com
|
||||
Ken Block block@zk3.dec.com
|
||||
Kenneth Albanowski kjahds@kjahds.com
|
||||
Kevin P. Fleming kpfleming@backtobasicsmgmt.com
|
||||
Kevin Ryde user42@zip.com.au
|
||||
Khem Raj raj.khem@gmail.com
|
||||
KO Myung-Hun komh78@gmail.com
|
||||
Kurt D. Zeilenga Kurt@OpenLDAP.Org
|
||||
Kurt Roeckx kurt@roeckx.be
|
||||
Lawrence Velázquez larryv@macports.org
|
||||
Leif Ekblad leif@rdos.net
|
||||
Lennart Poettering lennart@poettering.net
|
||||
Lionel Landwerlin llandwerlin@gmail.com
|
||||
Loren James Rittle rittle@latour.rsch.comm.mot.com
|
||||
Lucas Holt luke@foolishgames.com
|
||||
Maciej Helminiak dion2@wp.pl
|
||||
Maciej W. Rozycki macro@ds2.pg.gda.pl
|
||||
Mahesh Narayanamurthi mahesh.mach@gmail.com
|
||||
Makoto Ishisone ishisone@sra.co.jp
|
||||
Manfred Weichel Manfred.Weichel@pdb.siemens.de
|
||||
Manish Singh yosh@gimp.org
|
||||
Marcel Loose loose@astron.nl
|
||||
Marc Espie espie@nerim.net
|
||||
Marc Glisse marc.glisse@inria.fr
|
||||
Marc J. Fraioli fraioli@dg-rtp.dg.com
|
||||
Marcus Comstedt marcus@mc.pp.se
|
||||
Marius Vollmer mvo@zagadka.de
|
||||
Mark Kettenis kettenis@gnu.org
|
||||
Markus Duft markus.duft@salomon.at
|
||||
Markus F.X.J. Oberhumer markus@oberhumer.com
|
||||
Martin Doucha doucha@integri.cz
|
||||
Masahiro Nobori nobori@ss.titech.ac.jp
|
||||
Mats Rynge rynge@isi.edu
|
||||
Matthieu Herrb matthieu.herrb@laas.fr
|
||||
Matthijs Kooijman matthijs@stdin.nl
|
||||
Max Bowsher maxb@ukf.net
|
||||
Michael Forster email@michael-forster.de
|
||||
Michael Haubenwallner michael.haubenwallner@salomon.at
|
||||
Michael Matz matz@ifh.de
|
||||
Michael Pruett michael@68k.org
|
||||
Michael Schmitz mschmitz@iname.com
|
||||
Michael Tiemann tiemann@cygnus.com
|
||||
Micheal E. Faenza mfaenza@mitre.org
|
||||
Mike Frysinger vapier@gentoo.org
|
||||
Mike Gorchak lestat@i.com.ua
|
||||
Mike Miller mtmiller@ieee.org
|
||||
Mike Stump mrs@apple.com
|
||||
Mikhail Zabaluev mikhail.zabaluev@gmail.com
|
||||
Misty De Meo misty@brew.sh
|
||||
Mocha netbsd_alpha@yahoo.com
|
||||
Mo DeJong mdejong@redhat.com
|
||||
Morten Eriksen mortene@sim.no
|
||||
Mumit Khan khan@xraylith.wisc.edu
|
||||
Naofumi Yasufuku naofumi@yasufuku.net
|
||||
Nick Bowler nbowler@draconx.ca
|
||||
Nick Hudson nick@nthcliff.demon.co.uk
|
||||
Nick Rasmussen nick@jive.org
|
||||
NIIBE Yutaka gniibe@m17n.org
|
||||
Nix nix@esperi.org.uk
|
||||
Noah Misch noah@cs.caltech.edu
|
||||
Norihiro Tanaka noritnk@kcn.ne.jp
|
||||
Olaf Lenz olenz@fias.uni-frankfurt.de
|
||||
Olivier Blin olivier.blin@softathome.com
|
||||
Ollie Wild aaw@google.com
|
||||
Olly Betts olly@muscat.co.uk
|
||||
Ondřej Bílka neleai@seznam.cz
|
||||
Ozkan Sezer sezeroz@gmail.com
|
||||
Pádraig Brady P@draigBrady.com
|
||||
Paolo Bonzini bonzini@gnu.org
|
||||
Patrice Fromy patrice.fromy@u-psud.fr
|
||||
Patrick Welche prlw1@newn.cam.ac.uk
|
||||
Paul Berrevoets paul@swi.com
|
||||
Paul Biggar paul.biggar@gmail.com
|
||||
Paul Eggert eggert@cs.ucla.edu
|
||||
Paul Laight plaight@quantxautomation.co.uk
|
||||
Paul Seidler sepek@lavabit.com
|
||||
Paul Sokolovsky Paul.Sokolovsky@technologist.com
|
||||
Pavel (Pasha) Shamis shamisp@ornl.gov
|
||||
Pavel Raiskup praiskup@redhat.com
|
||||
Pavel Roskin pavel_roskin@geocities.com
|
||||
Paweł Daniluk pawel@bioexploratorium.pl
|
||||
Per Bothner per@bothner.com
|
||||
Peter Breitenlohner peb@mppmu.mpg.de
|
||||
Peter Eisentraut peter_e@gmx.net
|
||||
Peter Ekberg peda@axentia.se
|
||||
Peter Fritzsche peter.fritzsche@gmx.de
|
||||
Peter Jeremy peterjeremy@optushome.com.au
|
||||
Peter Johansson trojkan@gmail.com
|
||||
Peter Kjellerstedt peter.kjellerstedt@axis.com
|
||||
Peter Rosin peda@lysator.liu.se
|
||||
Philip Allison philip.allison@smoothwall.net
|
||||
Pierre Ossman ossman@ossman.lkpg.cendio.se
|
||||
Rainer Emrich r.emrich@de.tecosim.com
|
||||
Rainer Orth ro@CeBiTec.Uni-Bielefeld.DE
|
||||
Rainer Tammer tammer@tammer.net
|
||||
Raja R Harinath harinath@cs.umn.edu
|
||||
Ralf Menzel menzel@ls6.cs.uni-dortmund.de
|
||||
Ralph Schleicher rs@nunatak.allgaeu.org
|
||||
Reid Spencer reid@x10sys.com
|
||||
Reuben Thomas rrt@sc3d.org
|
||||
Richard B. Kreckel kreckel@ginac.de
|
||||
Richard Dawe rich@phekda.freeserve.co.uk
|
||||
Richard Moseley dickie.moseley@virgin.net
|
||||
Richard Palo richard.palo@baou.fr
|
||||
Richard Purdie rpurdie@rpsys.net
|
||||
Richard Sandiford richards@transitive.com
|
||||
Richard W.M. Jones rjones@redhat.com
|
||||
Rico Tzschichholz ricotz@ubuntu.com
|
||||
Robert Garron Robert.Garron@Access3000.net
|
||||
Robert Millan rmh@aybabtu.com
|
||||
Roberto Bagnara bagnara@cs.unipr.it
|
||||
Robert Ögren lists@roboros.com
|
||||
Robert Yang liezhi.yang@windriver.com
|
||||
Roger Cornelius rac@tenzing.org
|
||||
Roland Mainz roland.mainz@nrubsig.org
|
||||
Roumen Petrov bugtrack@roumenpetrov.info
|
||||
Rudolf Leitgeb r.leitgeb@x-pin.com
|
||||
Ryan Hill dirtyepic@gentoo.org
|
||||
Ryan Schmidt libtool@ryandesign.com
|
||||
Sam Thursfield ssssam@gmail.com
|
||||
Samuel Meder meder@mcs.anl.gov
|
||||
Samuel Thibault samuel.thibault@ens-lyon.org
|
||||
Sascha Schumann sascha@schumann.cx
|
||||
Scott McCreary scottmc2@gmail.com
|
||||
Sebastian Wilhelmi wilhelmi@ira.uka.de
|
||||
Simon Josefsson jas@extundo.com
|
||||
Stacey Marshall stacey.marshall@oracle.com
|
||||
Stas Maximov smaximov@ieee.org
|
||||
Stefan Nordhausen nordhaus@informatik.hu-berlin.de
|
||||
Stefan Sperling stsp@elego.de
|
||||
Stepan Kasal kasal@ucw.cz
|
||||
Stephane Conversy Stephane.Conversy@lri.fr
|
||||
Stephan Kulow coolo@kde.org
|
||||
Steve Ellcey sellcey@mips.com
|
||||
Steven M. Schultz sms@moe.2bsd.com
|
||||
Steve Price sprice@hiwaay.net
|
||||
Svante Signell srs@kth.se
|
||||
Sven Verdoolaege skimo@liacs.nl
|
||||
Syd Polk spolk@redhat.com
|
||||
Terry D. Dontje Terry.Dontje@Sun.COM
|
||||
Thorsten Glaser tg@66h.42h.de
|
||||
Tijl Coosemans tijl@FreeBSD.org
|
||||
Tilman Koschnick til@subnetz.org
|
||||
Tim Mooney mooney@dogbert.cc.ndsu.NoDak.edu
|
||||
Timothy Wall twall@oculustech.com
|
||||
Tim Rice tim@multitalents.net
|
||||
Tim Van Holder tim.van.holder@pandora.be
|
||||
Titus von Boxberg titus@v9g.de
|
||||
Tobias Stoeckmann tobias@stoeckmann.org
|
||||
Todd C. Miller Todd.Miller@courtesan.com
|
||||
Todd Vierling tv@duh.org
|
||||
Tod Milam tmilam@traclabs.com
|
||||
Tom Kacvinsky tjk@ams.org
|
||||
Tom Tromey tromey@cygnus.com
|
||||
Tony Wyatt wyattaw@optushome.com.au
|
||||
Tor Lillqvist tml@iki.fi
|
||||
Török Edwin edwintorok@gmail.com
|
||||
Toshio Kuratomi badger@prtr-13.ucsc.edu
|
||||
Ulrich Drepper drepper@ipd.info.uni-karlsruhe.de
|
||||
Utz-Uwe Haus haus@mail.math.uni-magdeburg.de
|
||||
Václav Haisman vhaisman@gmail.com
|
||||
Václav Zeman vhaisman@gmail.com
|
||||
Vadim vadim@olly.ru
|
||||
Vadim Zeitlin vz-libtool@zeitlins.org
|
||||
Vincent Lefevre vincent@vinc17.net
|
||||
Vincent Torri doursse@users.sf.net
|
||||
Vladimir Kushnir kushn@mail.kar.net
|
||||
Volker Christian voc@soft.uni-linz.ac.at
|
||||
Warren Dodge warren.l.dodge@Tektronix.com
|
||||
Wesley W. Terpstra terpstra@ito.tu-darmstadt.de
|
||||
Wilfredo Sanchez wsanchez@apple.com
|
||||
William M. Perry wmperry@aventail.com
|
||||
Xavier Pianet xavier@xingo.com
|
||||
Xin Li
|
||||
Xin LI d@delphij.net
|
||||
Yaakov Selkowitz yselkowitz@users.sourceforge.net
|
||||
Дилян Палаузов dilyan.palauzov@aegee.org
|
||||
Юрий Андреевич Пухальский pooh@cryptopro.ru
|
||||
|
||||
;; Local Variables:
|
||||
;; coding: utf-8
|
||||
;; End:
|
||||
@ -1,346 +0,0 @@
|
||||
GNU Libtool
|
||||
***********
|
||||
|
||||
1. In the near future
|
||||
=====================
|
||||
|
||||
1.1. libtool
|
||||
------------
|
||||
|
||||
* Rather than looking up the linker's hardcode characteristics in a
|
||||
table of shell code, use objdump or equivalent to probe a test program
|
||||
at configure time.
|
||||
|
||||
* Eliminate the warnings from autoconf -Wobsolete.
|
||||
|
||||
* Hook the various language dependencies into the autoconf _AC_LANG
|
||||
framework.
|
||||
|
||||
* Work out what to do when the dynamic linker loads needed dependencies.
|
||||
|
||||
* We could have an option to hardcode paths into libraries, as well as
|
||||
binaries: '... -Wl,-soname -Wl,/tmp/libtest.so.0 ...'. This is not
|
||||
possible on all platforms, and is in part obviated by the ability of
|
||||
linking libtool libraries specified with -lname, but it might still
|
||||
be desirable.
|
||||
|
||||
* Lists of exported symbols should be stored in the pseudo library
|
||||
so that the size of lt_preloaded_symbols can be reduced.
|
||||
|
||||
* Have some option to tell libtool not to include -L flags that point
|
||||
into a certain tree in the dependence list of an installed library.
|
||||
For example: -L-$top_builddir would let one link with libtool
|
||||
libraries in sibling subdirectories within a project, using the -L
|
||||
notation, without getting builddir pathnames ever mentioned in .la
|
||||
files that get installed.
|
||||
|
||||
* Eric Lemings <elemings@cyberia.lemings.com> writes:
|
||||
Because of a growing number of config scripts for packages in GNOME 1.2
|
||||
(e.g. glib-config, xml-config, orbit-config. etc), development of GNOME
|
||||
2.0 spawned a separate tool called pkg-config that allows all packages
|
||||
to use one tool rather than several different scripts to query compile
|
||||
flags, link flags, and other configuration data.
|
||||
|
||||
The functionality of pkg-config seems to me to have a lot of overlap
|
||||
with the goals of libtool. I was wondering if anyone had considered
|
||||
adding an eighth mode to libtool that just queries the installed
|
||||
library for the same information that pkg-config provides. Since
|
||||
most packages that use pkg-config also use libtool, I think this
|
||||
would be a good way to reduce maintainer and developer dependencies.
|
||||
|
||||
* Have libtoolize install 'install-sh' if a newer version is available,
|
||||
and/or Automake is not used.
|
||||
|
||||
* Allow to specify linking some dependent libraries statically and some
|
||||
dynamically, where possible.
|
||||
|
||||
* Improve support for C++ with templates.
|
||||
|
||||
* Audit file listing in libtool.m4.
|
||||
|
||||
* Fix deplibs_check_method=pass_all (which is wrong!) on GNU/Linux.
|
||||
|
||||
* Fix -dlopen "self" on AIX. Reported by Gary Kumfert <kumfert@llnl.gov>.
|
||||
|
||||
* Fix denial of service if using installed 'libtool' on a different mount point
|
||||
together with a compiler that does not understand '-c -o'.
|
||||
Reported by Marcin Siennicki.
|
||||
|
||||
* Look at better -no-undefined support, maybe along the idea of
|
||||
[support #103719] for CC.
|
||||
|
||||
|
||||
1.2. libltdl
|
||||
------------
|
||||
|
||||
* Change libltdl interface: add separate functions for function
|
||||
pointers. This will allow porting to systems where function pointers
|
||||
are incompatible with data pointer C-wise.
|
||||
|
||||
* Fix the following bugs in libltdl:
|
||||
- error reporting of tryall_dlopen():
|
||||
if the file actually doesn't exist (stat() fails or it wasn't dlpreopened)
|
||||
-> report 'file not found'
|
||||
if it cannot be loaded (e.g. due to missing dependencies)
|
||||
-> report dlerror
|
||||
open question: what error should be reported if all dlloaders fail
|
||||
or if a specific module type can only be loaded by one of them, how report its dlerror?
|
||||
Also report dlerror() for dlclose and dlsym if available
|
||||
- Make sure that the dependency_libs of a dlpreopened module won't be loaded.
|
||||
|
||||
- Fix mdemo failures on mingw.
|
||||
|
||||
- Fix the last memleak. Reported by Jeff Squyres <jsquyres@lam-mpi.org>.
|
||||
|
||||
- Fix LTDL_CONVENIENCE. Reported by Bob Friesenhahn
|
||||
and Patrick Welche <prlw1@newn.cam.ac.uk>.
|
||||
|
||||
|
||||
1.3. libtoolize
|
||||
---------------
|
||||
|
||||
* Rewrite the func_copy_* functions so that instead of forking 2 tar
|
||||
processes per copied file, a list of files to copy is built and all
|
||||
files copied with a single pair of tar processes.
|
||||
|
||||
* Write test case that adds libtool macros to aclocal.m4.
|
||||
|
||||
|
||||
2. In the future
|
||||
================
|
||||
|
||||
2.1. Documentation
|
||||
------------------
|
||||
|
||||
* Need to finalize the documentation, and give a specification of
|
||||
'.la' files so that people can depend on their format. This would be
|
||||
a good thing to put before the maintainance notes.
|
||||
|
||||
* Document the installed 'libtool' and its limitations clearly (maybe implement
|
||||
--disable-script-install as well). Or, even better, remove its limitations.
|
||||
|
||||
* Platform notes redo.
|
||||
|
||||
2.2. test suite
|
||||
---------------
|
||||
|
||||
* Rewrite the whole thing in Autotest. This will enable us to remove
|
||||
all the tests/*demo noise, and duplication; and thus speed up bootstrap
|
||||
and make writing new tests a whole lot more pleasant.
|
||||
|
||||
* We should include tests with reloadable objects in the testsuite.
|
||||
|
||||
* Write a test case for linkage with gnu ld scripts (per 2004-08-25 patch
|
||||
from Paolo Bonzini).
|
||||
|
||||
* Test everything:
|
||||
- cross compile
|
||||
- dirs with ~
|
||||
- multiple input files
|
||||
|
||||
2.3. libtool
|
||||
------------
|
||||
|
||||
* Fix cross-compiling.
|
||||
|
||||
* Fix threads.
|
||||
|
||||
* Support multilibbing.
|
||||
|
||||
* If not cross-compiling, have the static flag test run the resulting
|
||||
binary to make sure everything works.
|
||||
|
||||
* Another form of convenience library is to have undocumented utility
|
||||
libraries, where only the shared version is installed.
|
||||
|
||||
* We could use libtool object convenience libraries that resolve
|
||||
symbols to be included in a libtool archive. This would require some
|
||||
sort of -whole-archive option, as well.
|
||||
|
||||
* Currently, convenience libraries (.al) are built from .lo objects,
|
||||
except when --disable-shared. When we can build both shared and
|
||||
static libraries, we should probably create a .al out of .lo objects
|
||||
and also a .a out of .o objects. The .al would only be used to create
|
||||
shared libraries, whereas the .a would be used for creating static
|
||||
libraries and programs. We could also explicitly support 'empty'
|
||||
convenience libraries, that behave as macros that expand to a set of
|
||||
-Rs, -Ls and -ls switches.
|
||||
|
||||
* Audit use of object names so we can allow '$' not only within
|
||||
source file names. Necessary especially for java.
|
||||
|
||||
* We could introduce a mechanism to allow for soname rewriting, to
|
||||
ease multi-libc support. Installers could specify a prefix, suffix or
|
||||
sed command to modify the soname, and libtool would create the
|
||||
corresponding link. This would allow for rebuilding a library with
|
||||
the same version number, but depending on different versions of libc,
|
||||
for example. In the future, we might even have an option to encode
|
||||
the sonames of all dependencies of a library into its soname.
|
||||
|
||||
* Look again at a binary C libtool, or byte-compiled libtool to improve
|
||||
speed.
|
||||
|
||||
* Generate some "platform specific" shell functions with config.status,
|
||||
for example, there is no need to have the C source code for the
|
||||
wrapper script on non-windows platforms, this will make the generated
|
||||
libtool script smaller and easier to follow, maybe a little faster
|
||||
too?
|
||||
|
||||
* Audit the GCJ tag section in libtool.m4.
|
||||
|
||||
* Add caching mechanism. Look at 'libtool-cache' from Robert Ögren.
|
||||
|
||||
|
||||
2.4. libtool autoconf macros
|
||||
----------------------------
|
||||
|
||||
* Sort out the macro mess in libtool.m4. We've started this already
|
||||
by refactoring chunks into separate files, but I never did completely
|
||||
untangle the mess of macros imported from ltconfig.
|
||||
|
||||
* The definitions for LT_SYS_MODULE_EXT, LT_SYS_MODULE_PATH and
|
||||
LT_SYS_DLSEARCH_PATH should not rely on the _LT_SYS_DYNAMIC_LINKER
|
||||
macro. This involves moving the code that sets the variables
|
||||
library_names_spec, shlibpath_var and sys_lib_dlsearch_path_spec from
|
||||
into a separate macro, and AC_REQUIRING the newly extracted macro in the
|
||||
respective ltdl.m4 macros.
|
||||
|
||||
2.5. libtool automake integration
|
||||
---------------------------------
|
||||
|
||||
* Unify locks between libtool and compile.
|
||||
|
||||
* Fix relinking.
|
||||
|
||||
2.6. libltdl
|
||||
------------
|
||||
|
||||
* Finish the rewrite of the core libltdl. The loaders are fine, and
|
||||
the outlying code is now good. Ralf is starting to pick away at a lot
|
||||
of the remaining nasties already, but the code for finding .la/.so files
|
||||
and reading/loading them could use a lot more improvement.
|
||||
|
||||
* I think we could factor out a little path management support module
|
||||
from existing libltdl. This would be useful for M4 at least -- keeping
|
||||
track of FOO_PATH environment contents, searching for files in paths
|
||||
etc.
|
||||
|
||||
* Try to find a work-around for -[all-]static and libltdl on platforms
|
||||
that will fail to find dlopening functions in this case. Maybe
|
||||
creating an alternate libltdl that provides only for dlpreopening, or
|
||||
creating an additional static library to provide dummy implementations
|
||||
of the functions that can't be linked statically. This could hardly
|
||||
be made completely transparent, though.
|
||||
|
||||
* In conjunction with above, fix the failures on *BSD when linked to
|
||||
static libc. Reported by Guilhem Lavaux <guilhem@kaffe.org>.
|
||||
|
||||
* Add i18n strings to libltdl, ensuring that package developers can
|
||||
ignore any i18n when they libtoolize.
|
||||
|
||||
2.7. win32 support
|
||||
------------------
|
||||
|
||||
* Arrange that EXEEXT suffixes are stripped from wrapper script names
|
||||
only when needed, and that a timestamp file or a wrapper program is
|
||||
created with the EXEEXT suffix, so that 'make' doesn't build it every
|
||||
time.
|
||||
|
||||
* Figure out how to use data items in dlls with win32.
|
||||
The difficult part is compiling each object that will be linked with an
|
||||
import lib differently than if it will be linked with a static lib. This
|
||||
will almost definitely require that automake pass some hints about linkage
|
||||
in to each object compilation line.
|
||||
|
||||
* jeffdb@goodnet.com writes:
|
||||
all you need to do for mutually dependent .dll's is to create an implib from
|
||||
a .def file so it appears that we might need to detect and handle mutual
|
||||
dependencies specially on win32 =(O|
|
||||
|
||||
* QoI for file name and path conversion functions. Currently, these are
|
||||
implemented as MxN different functions; this has quadratic complexity. If
|
||||
possible, it would be preferred to implement then as M+N functions. However:
|
||||
http://lists.gnu.org/archive/html/libtool-patches/2010-08/msg00224.html
|
||||
The main issue is you don't know what the "native" (e.g. "central")
|
||||
path-type is; e.g. "from-X (to what?)" and "(from what?) to-Y". Right
|
||||
now there are only four "platforms" involved: *nix, mingw, msys, and
|
||||
cygwin. That's actually the break-even point, given the vagaries and
|
||||
optimizations involved in these particular four platforms.
|
||||
|
||||
We have exactly five basic file name conversion functions (not counting
|
||||
the wrappers that handle paths). For a non-quadratic M+N (from-X|to-Y)
|
||||
solution, we'd need, I think, the same number of conversion functions: brute
|
||||
force suggests nine (four to_*, four from_*, plus the noop), but then many
|
||||
of the from_* and to_* would actually BE noop.
|
||||
|
||||
I'm assuming here that the "central" path-type is implicitly some sort of
|
||||
unixish -- maybe cyg, maybe msys, maybe unix -- path-type. The issue is
|
||||
that each of the five conversion functions use a different TOOL to perform
|
||||
the conversion, with different syntax. So, trying to combine, e.g.
|
||||
msys_to_mingw
|
||||
cygwin_to_mingw
|
||||
unix_to_mingw
|
||||
into an all-encompassing "central_unixish_to_mingw" would require additional
|
||||
m4 magic to basically replace the guts depending on whether $build was msys,
|
||||
cygwin, or unix. Worse, you can't really do a set of
|
||||
{msys|cygwin|unix}_to_central_unixish that isn't simply a no-op -- because
|
||||
(A) they already are all unixish, and (B) what tool would you use? How would
|
||||
the later to_mingw function "know" how to covert this new representation to
|
||||
mingw. So, {msys|cygwin|unix}_to_central_unixish would simply be a no-op
|
||||
and central_unixish_to_mingw would still do all the work (with its guts
|
||||
customized based on $build).
|
||||
|
||||
For more reasonable cross environments (e.g. linux-gnu->some_embedded) I
|
||||
think you could probably work out a general M+N scheme, since most embedded
|
||||
$hosts aren't as strange as the win32 variants -- even VxWorks and INTEGRITY
|
||||
have basic, unix-like file systems (although INTEGRITY does have multiple
|
||||
roots). Aggressive use of the m4 function_replace machinery WOULD be
|
||||
appropriate for /these/ conversion functions. OTOH...(a) you can't run the
|
||||
$host apps on $build anyway, in these embedded situations. At best you'd use
|
||||
$TARGETSHELL and "run" them via a remote connection, and (b) they don't use
|
||||
the C wrapper!
|
||||
|
||||
So...I don't think it makes much difference *right now* in the amount of
|
||||
code required, or the number of functions implemented. At some point in the
|
||||
future we might want to generalize to an M+N scheme. For the existing win32
|
||||
$hosts, all of the funtionality would be on "one side" of the 2-step
|
||||
conversion; the "other side" would be noop. But we won't worry about the
|
||||
implicit quadratic complexity of the existing scheme for now.
|
||||
|
||||
3. Wish List
|
||||
============
|
||||
|
||||
* Maybe implement full support for other orthogonal library types
|
||||
(libhello_g, libhello_p, 64 vs 32-bit ABI's, etc). Make these types
|
||||
configurable.
|
||||
|
||||
* Perhaps the use of libltdl could be made cleaner by allowing
|
||||
registration of hook functions to call at various points. This would
|
||||
hopefully free the user from having to maintain a parallel module
|
||||
list with user data. This would likely involve being able to carry
|
||||
additional per user module data in the lt_dlmodule structure -- perhaps
|
||||
in the form of an associative array keyed by user name?
|
||||
|
||||
* Figure out how to make pkg-config aware of the information libtool
|
||||
knows about libraries and their dependencies, and send a patch.
|
||||
|
||||
* Generate a libtool.m4 from a bunch of individual files, one per
|
||||
platform, to make the job of a "platform maintainer" easier and make
|
||||
it easier to add new platforms.
|
||||
|
||||
--
|
||||
Copyright (C) 2004-2005, 2007-2008, 2011-2019, 2021-2022 Free Software
|
||||
Foundation, Inc.
|
||||
Written by Gary V. Vaughan, 2004
|
||||
|
||||
This file is part of GNU Libtool.
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
notice and this notice are preserved. This file is offered as-is,
|
||||
without warranty of any kind.
|
||||
|
||||
Local Variables:
|
||||
mode: text
|
||||
fill-column: 72
|
||||
End:
|
||||
1148
BUILD/libtool-2.4.7/aclocal.m4
vendored
1148
BUILD/libtool-2.4.7/aclocal.m4
vendored
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,346 +0,0 @@
|
||||
# This file was generated by Autom4te Tue Apr 9 10:00:21 UTC 2024.
|
||||
# It contains the lists of macros which have been traced.
|
||||
# It can be safely removed.
|
||||
|
||||
@request = (
|
||||
bless( [
|
||||
'0',
|
||||
1,
|
||||
[
|
||||
'/usr/share/autoconf'
|
||||
],
|
||||
[
|
||||
'/usr/share/autoconf/autoconf/autoconf.m4f',
|
||||
'-',
|
||||
'/usr/share/aclocal-1.16/internal/ac-config-macro-dirs.m4',
|
||||
'/usr/share/aclocal-1.16/amversion.m4',
|
||||
'/usr/share/aclocal-1.16/auxdir.m4',
|
||||
'/usr/share/aclocal-1.16/cond.m4',
|
||||
'/usr/share/aclocal-1.16/depend.m4',
|
||||
'/usr/share/aclocal-1.16/depout.m4',
|
||||
'/usr/share/aclocal-1.16/init.m4',
|
||||
'/usr/share/aclocal-1.16/install-sh.m4',
|
||||
'/usr/share/aclocal-1.16/lead-dot.m4',
|
||||
'/usr/share/aclocal-1.16/make.m4',
|
||||
'/usr/share/aclocal-1.16/missing.m4',
|
||||
'/usr/share/aclocal-1.16/options.m4',
|
||||
'/usr/share/aclocal-1.16/prog-cc-c-o.m4',
|
||||
'/usr/share/aclocal-1.16/runlog.m4',
|
||||
'/usr/share/aclocal-1.16/sanity.m4',
|
||||
'/usr/share/aclocal-1.16/silent.m4',
|
||||
'/usr/share/aclocal-1.16/strip.m4',
|
||||
'/usr/share/aclocal-1.16/substnot.m4',
|
||||
'/usr/share/aclocal-1.16/tar.m4',
|
||||
'm4/00gnulib.m4',
|
||||
'm4/autobuild.m4',
|
||||
'm4/gnulib-common.m4',
|
||||
'm4/gnulib-comp.m4',
|
||||
'm4/libtool.m4',
|
||||
'm4/ltargz.m4',
|
||||
'm4/ltdl.m4',
|
||||
'm4/ltoptions.m4',
|
||||
'm4/ltsugar.m4',
|
||||
'm4/ltversion.m4',
|
||||
'm4/lt~obsolete.m4',
|
||||
'm4/m4.m4',
|
||||
'm4/zzgnulib.m4',
|
||||
'configure.ac'
|
||||
],
|
||||
{
|
||||
'_LT_PROG_F77' => 1,
|
||||
'AC_LTDL_SHLIBEXT' => 1,
|
||||
'LT_AC_PROG_RC' => 1,
|
||||
'AC_LIBTOOL_LANG_RC_CONFIG' => 1,
|
||||
'LTDL_INIT' => 1,
|
||||
'AC_DISABLE_STATIC' => 1,
|
||||
'_m4_warn' => 1,
|
||||
'gl_ASSERT_NO_GNULIB_TESTS' => 1,
|
||||
'_AM_SET_OPTION' => 1,
|
||||
'_LT_LINKER_OPTION' => 1,
|
||||
'AC_LIBTOOL_CXX' => 1,
|
||||
'gl_CXX_ALLOW_WARNINGS' => 1,
|
||||
'AM_PROG_LIBTOOL' => 1,
|
||||
'AC_LIBLTDL_CONVENIENCE' => 1,
|
||||
'AC_PROG_NM' => 1,
|
||||
'_LT_COMPILER_OPTION' => 1,
|
||||
'AC_LIBTOOL_DLOPEN_SELF' => 1,
|
||||
'LT_FUNC_DLSYM_USCORE' => 1,
|
||||
'_LT_AC_FILE_LTDLL_C' => 1,
|
||||
'_LT_PATH_TOOL_PREFIX' => 1,
|
||||
'LT_LIB_DLLOAD' => 1,
|
||||
'm4_include' => 1,
|
||||
'AC_LIBTOOL_CONFIG' => 1,
|
||||
'AC_CONFIG_MACRO_DIR_TRACE' => 1,
|
||||
'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1,
|
||||
'GL_EARLY' => 1,
|
||||
'AC_LTDL_SYMBOL_USCORE' => 1,
|
||||
'GL_LIBOBJ' => 1,
|
||||
'AC_DEFUN' => 1,
|
||||
'AM_MAKE_INCLUDE' => 1,
|
||||
'AC_LIBTOOL_PROG_LD_SHLIBS' => 1,
|
||||
'AC_CHECK_LIBM' => 1,
|
||||
'AM_DISABLE_STATIC' => 1,
|
||||
'AM_SILENT_RULES' => 1,
|
||||
'_LT_LIBOBJ' => 1,
|
||||
'm4_pattern_allow' => 1,
|
||||
'AC_CONFIG_MACRO_DIR' => 1,
|
||||
'LT_FUNC_ARGZ' => 1,
|
||||
'gl_PROG_CC_C99' => 1,
|
||||
'_LT_PROG_CXX' => 1,
|
||||
'gl_COMPILER_PREPARE_CHECK_DECL' => 1,
|
||||
'_GL_MDA_DEFINES' => 1,
|
||||
'AC_DEFUN_ONCE' => 1,
|
||||
'gl_COMMON' => 1,
|
||||
'AC_LIB_LTDL' => 1,
|
||||
'_LT_WITH_SYSROOT' => 1,
|
||||
'_LT_PROG_FC' => 1,
|
||||
'AC_LIBTOOL_LINKER_OPTION' => 1,
|
||||
'AC_PROG_LIBTOOL' => 1,
|
||||
'gl_FEATURES_H' => 1,
|
||||
'GL_REPLACE_FUNCS' => 1,
|
||||
'LTOPTIONS_VERSION' => 1,
|
||||
'LT_OUTPUT' => 1,
|
||||
'_AM_CONFIG_MACRO_DIRS' => 1,
|
||||
'AM_PROG_NM' => 1,
|
||||
'GL_FILE_LIST' => 1,
|
||||
'AM_SET_LEADING_DOT' => 1,
|
||||
'AM_PROG_LD' => 1,
|
||||
'_LT_AC_LANG_F77' => 1,
|
||||
'AC_LTDL_PREOPEN' => 1,
|
||||
'LTSUGAR_VERSION' => 1,
|
||||
'AC_C_RESTRICT' => 1,
|
||||
'AC_LIBTOOL_SETUP' => 1,
|
||||
'gl_ZZGNULIB' => 1,
|
||||
'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
|
||||
'_LT_AC_CHECK_DLFCN' => 1,
|
||||
'_LT_AC_TAGVAR' => 1,
|
||||
'_LT_REQUIRED_DARWIN_CHECKS' => 1,
|
||||
'_LT_AC_LANG_CXX_CONFIG' => 1,
|
||||
'_LT_AC_TRY_DLOPEN_SELF' => 1,
|
||||
'LTDL_CONVENIENCE' => 1,
|
||||
'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1,
|
||||
'AC_LTDL_SHLIBPATH' => 1,
|
||||
'gl_CACHE_VAL_SILENT' => 1,
|
||||
'_LT_AC_LANG_CXX' => 1,
|
||||
'AC_PATH_MAGIC' => 1,
|
||||
'AC_LIBTOOL_WIN32_DLL' => 1,
|
||||
'gl_PROG_AR_RANLIB' => 1,
|
||||
'gl_00GNULIB' => 1,
|
||||
'AC_LIBTOOL_GCJ' => 1,
|
||||
'_LT_AC_LANG_F77_CONFIG' => 1,
|
||||
'_LT_PROG_ECHO_BACKSLASH' => 1,
|
||||
'AC_DISABLE_FAST_INSTALL' => 1,
|
||||
'_AC_AM_CONFIG_HEADER_HOOK' => 1,
|
||||
'AM_PROG_CC_C_O' => 1,
|
||||
'LT_SYS_DLOPEN_SELF' => 1,
|
||||
'include' => 1,
|
||||
'AC_LIBTOOL_PROG_COMPILER_PIC' => 1,
|
||||
'AM_RUN_LOG' => 1,
|
||||
'AC_LIBTOOL_SYS_LIB_STRIP' => 1,
|
||||
'gl_CONDITIONAL_HEADER' => 1,
|
||||
'gl_W' => 1,
|
||||
'AM_SUBST_NOTMAKE' => 1,
|
||||
'_LT_AC_LANG_GCJ' => 1,
|
||||
'_LT_DLL_DEF_P' => 1,
|
||||
'AC_LIBTOOL_OBJDIR' => 1,
|
||||
'AC_PROG_LD' => 1,
|
||||
'AC_LIBTOOL_DLOPEN' => 1,
|
||||
'gl_SILENT' => 1,
|
||||
'AM_AUX_DIR_EXPAND' => 1,
|
||||
'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1,
|
||||
'AC_PROG_LD_GNU' => 1,
|
||||
'gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR' => 1,
|
||||
'AM_INIT_AUTOMAKE' => 1,
|
||||
'GL_LIBSOURCES' => 1,
|
||||
'gl_ASSERT_NO_GNULIB_POSIXCHECK' => 1,
|
||||
'_LT_AC_TAGCONFIG' => 1,
|
||||
'AM_PROG_INSTALL_SH' => 1,
|
||||
'_LT_AC_LANG_GCJ_CONFIG' => 1,
|
||||
'gl_CC_ALLOW_WARNINGS' => 1,
|
||||
'AC_ENABLE_SHARED' => 1,
|
||||
'AU_DEFUN' => 1,
|
||||
'gl_CC_GNULIB_WARNINGS' => 1,
|
||||
'GL_MDA_DEFINES' => 1,
|
||||
'AC_LTDL_OBJDIR' => 1,
|
||||
'AC_PROG_GNU_M4' => 1,
|
||||
'AC_LIBTOOL_LANG_C_CONFIG' => 1,
|
||||
'_LT_CC_BASENAME' => 1,
|
||||
'LT_PROG_GCJ' => 1,
|
||||
'LT_WITH_LTDL' => 1,
|
||||
'_AM_IF_OPTION' => 1,
|
||||
'gl_MODULE_INDICATOR_INIT_VARIABLE' => 1,
|
||||
'm4_pattern_forbid' => 1,
|
||||
'_LT_AC_SYS_COMPILER' => 1,
|
||||
'LT_AC_PROG_SED' => 1,
|
||||
'_AC_PROG_LIBTOOL' => 1,
|
||||
'gl_BIGENDIAN' => 1,
|
||||
'AC_LTDL_DLLIB' => 1,
|
||||
'AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH' => 1,
|
||||
'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
|
||||
'LTVERSION_VERSION' => 1,
|
||||
'AM_ENABLE_STATIC' => 1,
|
||||
'_LT_AC_PROG_ECHO_BACKSLASH' => 1,
|
||||
'gl_MODULE_INDICATOR_FOR_TESTS' => 1,
|
||||
'AC_DISABLE_SHARED' => 1,
|
||||
'LT_CMD_MAX_LEN' => 1,
|
||||
'_AM_MANGLE_OPTION' => 1,
|
||||
'AC_ENABLE_FAST_INSTALL' => 1,
|
||||
'_LT_AC_LANG_RC_CONFIG' => 1,
|
||||
'_AM_SET_OPTIONS' => 1,
|
||||
'AC_LIBLTDL_INSTALLABLE' => 1,
|
||||
'GLtests_LIBOBJ' => 1,
|
||||
'LTOBSOLETE_VERSION' => 1,
|
||||
'_LTDL_SETUP' => 1,
|
||||
'_LT_LINKER_BOILERPLATE' => 1,
|
||||
'_LT_AC_LANG_C_CONFIG' => 1,
|
||||
'AM_SANITY_CHECK' => 1,
|
||||
'AC_LIBTOOL_LANG_GCJ_CONFIG' => 1,
|
||||
'AM_ENABLE_SHARED' => 1,
|
||||
'AC_LIBTOOL_PROG_CC_C_O' => 1,
|
||||
'AC_DEPLIBS_CHECK_METHOD' => 1,
|
||||
'_AM_SUBST_NOTMAKE' => 1,
|
||||
'LT_PATH_LD' => 1,
|
||||
'_LT_AC_LOCK' => 1,
|
||||
'LT_LIB_M' => 1,
|
||||
'AC_LTDL_SYSSEARCHPATH' => 1,
|
||||
'LT_SUPPORTED_TAG' => 1,
|
||||
'LT_SYS_DLSEARCH_PATH' => 1,
|
||||
'AC_PROG_LD_RELOAD_FLAG' => 1,
|
||||
'AC_PROG_EGREP' => 1,
|
||||
'_AM_DEPENDENCIES' => 1,
|
||||
'LT_SYS_MODULE_PATH' => 1,
|
||||
'AC_LIBTOOL_F77' => 1,
|
||||
'_AM_AUTOCONF_VERSION' => 1,
|
||||
'AC_ENABLE_STATIC' => 1,
|
||||
'AC_PATH_TOOL_PREFIX' => 1,
|
||||
'_LT_PROG_LTMAIN' => 1,
|
||||
'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1,
|
||||
'LT_PROG_GO' => 1,
|
||||
'GLtests_LIBSOURCES' => 1,
|
||||
'AB_INIT' => 1,
|
||||
'AM_DISABLE_SHARED' => 1,
|
||||
'LT_AC_PROG_GCJ' => 1,
|
||||
'_AM_PROG_CC_C_O' => 1,
|
||||
'_LT_AC_SHELL_INIT' => 1,
|
||||
'_LT_AC_SYS_LIBPATH_AIX' => 1,
|
||||
'AM_SET_DEPDIR' => 1,
|
||||
'gl_MODULE_INDICATOR' => 1,
|
||||
'GL_INIT' => 1,
|
||||
'AC_LIBTOOL_LANG_F77_CONFIG' => 1,
|
||||
'LT_SYS_MODULE_EXT' => 1,
|
||||
'_LT_PREPARE_SED_QUOTE_VARS' => 1,
|
||||
'AC_LTDL_SYS_DLOPEN_DEPLIBS' => 1,
|
||||
'AC_LTDL_ENABLE_INSTALL' => 1,
|
||||
'LT_LANG' => 1,
|
||||
'AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE' => 1,
|
||||
'LT_CONFIG_LTDL_DIR' => 1,
|
||||
'LT_AC_PROG_EGREP' => 1,
|
||||
'AC_LIBTOOL_COMPILER_OPTION' => 1,
|
||||
'_AM_PROG_TAR' => 1,
|
||||
'LT_SYS_SYMBOL_USCORE' => 1,
|
||||
'_LT_COMPILER_BOILERPLATE' => 1,
|
||||
'LT_PATH_NM' => 1,
|
||||
'_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
|
||||
'AC_WITH_LTDL' => 1,
|
||||
'gl_COMPILER_CLANG' => 1,
|
||||
'LT_SYS_DLOPEN_DEPLIBS' => 1,
|
||||
'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1,
|
||||
'gl_CONDITIONAL' => 1,
|
||||
'gl_MODULE_INDICATOR_SET_VARIABLE' => 1,
|
||||
'_LT_AC_PROG_CXXCPP' => 1,
|
||||
'gl_COMMON_BODY' => 1,
|
||||
'AM_AUTOMAKE_VERSION' => 1,
|
||||
'AC_LIBTOOL_FC' => 1,
|
||||
'AC_LIBTOOL_RC' => 1,
|
||||
'AC_LIBTOOL_POSTDEP_PREDEP' => 1,
|
||||
'AM_MISSING_HAS_RUN' => 1,
|
||||
'AC_LTDL_DLSYM_USCORE' => 1,
|
||||
'AM_CONDITIONAL' => 1,
|
||||
'AC_LIBTOOL_LANG_CXX_CONFIG' => 1,
|
||||
'GLtests_REPLACE_FUNCS' => 1,
|
||||
'AM_DEP_TRACK' => 1,
|
||||
'LT_INIT' => 1,
|
||||
'AM_PROG_INSTALL_STRIP' => 1,
|
||||
'LT_PROG_RC' => 1,
|
||||
'AM_MISSING_PROG' => 1,
|
||||
'LTDL_INSTALLABLE' => 1,
|
||||
'AC_LIBTOOL_PICMODE' => 1,
|
||||
'gl_MODULE_INDICATOR_SET_VARIABLE_AUX' => 1
|
||||
}
|
||||
], 'Autom4te::Request' ),
|
||||
bless( [
|
||||
'1',
|
||||
1,
|
||||
[
|
||||
'/usr/share/autoconf'
|
||||
],
|
||||
[
|
||||
'/usr/share/autoconf/autoconf/autoconf.m4f',
|
||||
'aclocal.m4',
|
||||
'configure.ac'
|
||||
],
|
||||
{
|
||||
'AM_MAINTAINER_MODE' => 1,
|
||||
'AM_PROG_AR' => 1,
|
||||
'AC_FC_PP_DEFINE' => 1,
|
||||
'_m4_warn' => 1,
|
||||
'm4_pattern_forbid' => 1,
|
||||
'AC_REQUIRE_AUX_FILE' => 1,
|
||||
'AC_SUBST_TRACE' => 1,
|
||||
'LT_CONFIG_LTDL_DIR' => 1,
|
||||
'AM_PATH_GUILE' => 1,
|
||||
'AC_FC_SRCEXT' => 1,
|
||||
'AM_ENABLE_MULTILIB' => 1,
|
||||
'AC_CONFIG_AUX_DIR' => 1,
|
||||
'AM_MAKEFILE_INCLUDE' => 1,
|
||||
'AM_PROG_LIBTOOL' => 1,
|
||||
'AM_XGETTEXT_OPTION' => 1,
|
||||
'_AM_COND_ENDIF' => 1,
|
||||
'AM_PROG_CXX_C_O' => 1,
|
||||
'AC_CONFIG_SUBDIRS' => 1,
|
||||
'm4_sinclude' => 1,
|
||||
'AM_PROG_CC_C_O' => 1,
|
||||
'AC_CONFIG_FILES' => 1,
|
||||
'AM_EXTRA_RECURSIVE_TARGETS' => 1,
|
||||
'AC_CONFIG_LINKS' => 1,
|
||||
'AC_CANONICAL_SYSTEM' => 1,
|
||||
'include' => 1,
|
||||
'm4_include' => 1,
|
||||
'AC_FC_FREEFORM' => 1,
|
||||
'_AM_COND_ELSE' => 1,
|
||||
'AM_PROG_MKDIR_P' => 1,
|
||||
'AC_CONFIG_HEADERS' => 1,
|
||||
'AC_SUBST' => 1,
|
||||
'_AM_COND_IF' => 1,
|
||||
'AC_INIT' => 1,
|
||||
'AM_AUTOMAKE_VERSION' => 1,
|
||||
'AM_SILENT_RULES' => 1,
|
||||
'_AM_SUBST_NOTMAKE' => 1,
|
||||
'AM_PROG_FC_C_O' => 1,
|
||||
'AC_FC_PP_SRCEXT' => 1,
|
||||
'AC_CONFIG_LIBOBJ_DIR' => 1,
|
||||
'AM_CONDITIONAL' => 1,
|
||||
'AC_CANONICAL_HOST' => 1,
|
||||
'm4_pattern_allow' => 1,
|
||||
'LT_SUPPORTED_TAG' => 1,
|
||||
'AM_PROG_MOC' => 1,
|
||||
'sinclude' => 1,
|
||||
'AC_DEFINE_TRACE_LITERAL' => 1,
|
||||
'AM_NLS' => 1,
|
||||
'LT_INIT' => 1,
|
||||
'_LT_AC_TAGCONFIG' => 1,
|
||||
'AM_PROG_F77_C_O' => 1,
|
||||
'AM_GNU_GETTEXT' => 1,
|
||||
'_AM_MAKEFILE_INCLUDE' => 1,
|
||||
'AC_LIBSOURCE' => 1,
|
||||
'AC_PROG_LIBTOOL' => 1,
|
||||
'AH_OUTPUT' => 1,
|
||||
'AM_INIT_AUTOMAKE' => 1,
|
||||
'AM_POT_TOOLS' => 1,
|
||||
'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
|
||||
'AC_CANONICAL_TARGET' => 1,
|
||||
'AC_CANONICAL_BUILD' => 1
|
||||
}
|
||||
], 'Autom4te::Request' )
|
||||
);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,408 +0,0 @@
|
||||
# bootstrap.conf (GNU Libtool) version 2014-11-18
|
||||
#
|
||||
# Copyright (C) 2010-2019, 2021-2022 Free Software Foundation, Inc.
|
||||
# Written by Gary V. Vaughan, 2010
|
||||
|
||||
# This is free software; see the source for copying conditions. There is NO
|
||||
# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
# GNU Libtool 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.
|
||||
#
|
||||
# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy
|
||||
# can be downloaded from http://www.gnu.org/licenses/gpl.html,
|
||||
# or obtained by writing to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
|
||||
## -------------------------------- ##
|
||||
## User overrideable command paths. ##
|
||||
## -------------------------------- ##
|
||||
|
||||
: "${MAKE=make}"
|
||||
|
||||
export MAKE
|
||||
|
||||
|
||||
|
||||
## -------------- ##
|
||||
## Configuration. ##
|
||||
## -------------- ##
|
||||
|
||||
# File that should exist in the top directory of a checked out hierarchy,
|
||||
# but not in a distribution tarball.
|
||||
checkout_only_file=HACKING
|
||||
|
||||
# List of programs (and minimum versions) required to bootstrap, maintain
|
||||
# and release Libtool.
|
||||
buildreq="
|
||||
help2man 1.29 http://www.gnu.org/s/help2man
|
||||
make 3.81 http://www.gnu.org/s/make
|
||||
makeinfo 4.8 http://www.gnu.org/s/texinfo
|
||||
xz 4.999.8beta http://tukaani.org/xz
|
||||
"
|
||||
|
||||
# Instructions on how to install packages in $buildreq.
|
||||
buildreq_readme=HACKING
|
||||
|
||||
# Non-default gnulib directories.
|
||||
local_gl_path=gl:gl-mod/bootstrap
|
||||
|
||||
# We don't need the whole copy of gnulib.
|
||||
gnulib_clone_since=2019-02-19
|
||||
|
||||
# Additional gnulib-tool options to use.
|
||||
gnulib_tool_options=$gnulib_tool_options"
|
||||
--avoid=dummy
|
||||
--libtool
|
||||
--macro-prefix=GL
|
||||
--with-tests --tests-base=gnulib-tests
|
||||
"
|
||||
|
||||
# gnulib modules used by this package.
|
||||
gnulib_modules='
|
||||
announce-gen
|
||||
bootstrap
|
||||
do-release-commit-and-tag
|
||||
extract-trace
|
||||
gendocs
|
||||
git-version-gen
|
||||
gitlog-to-changelog
|
||||
gnu-web-doc-update
|
||||
gnupload
|
||||
inline-source
|
||||
maintainer-makefile
|
||||
options-parser
|
||||
readme-release
|
||||
update-copyright
|
||||
'
|
||||
|
||||
gnulib_git_submodules='
|
||||
gl-mod/bootstrap
|
||||
'
|
||||
|
||||
# Extra gnulib files that are not in modules, which override files of
|
||||
# the same name installed by other bootstrap tools.
|
||||
gnulib_non_module_files=$gnulib_non_module_files'
|
||||
doc/COPYINGv2
|
||||
doc/fdl.texi
|
||||
'
|
||||
|
||||
# What ignore files to maintain.
|
||||
vc_ignore=.gitignore
|
||||
|
||||
# Running the installed 'libtoolize' will trash the local (newer) libtool.m4
|
||||
# among others. Don't use ':', since autoreconf can't exec it!
|
||||
LIBTOOLIZE=true
|
||||
|
||||
# List of file droppings from old releases of Libtool.
|
||||
libtool_obsolete_files="
|
||||
acinclude.m4
|
||||
argz.c
|
||||
libltdl/config.h
|
||||
lt__dirent.c
|
||||
lt__strl.c
|
||||
"
|
||||
|
||||
|
||||
## ------------------- ##
|
||||
## Override functions. ##
|
||||
## ------------------- ##
|
||||
|
||||
# func_autopoint
|
||||
# --------------
|
||||
# Libtool does not use autopoint.
|
||||
func_autopoint ()
|
||||
{
|
||||
$debug_cmd
|
||||
}
|
||||
|
||||
|
||||
# func_libtoolize
|
||||
# ---------------
|
||||
# Libtoolize is part of Libtool!
|
||||
func_libtoolize ()
|
||||
{
|
||||
$debug_cmd
|
||||
}
|
||||
|
||||
|
||||
|
||||
## ---------------------------- ##
|
||||
## Libtool bootstrap functions. ##
|
||||
## ---------------------------- ##
|
||||
|
||||
# libtool_prep
|
||||
# ------------
|
||||
# Libtool bootstrap initialisation after successful option parse and
|
||||
# validation.
|
||||
libtool_prep ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
# initial clean-up of checked out tree
|
||||
find . -depth \( -name autom4te.cache -o -name libtool \) -print \
|
||||
| grep -v '{arch}' \
|
||||
| xargs rm -rf
|
||||
|
||||
# remove obsolete file droppings from old Libtool versions
|
||||
for file in $libtool_obsolete_files; do
|
||||
rm -f $file
|
||||
done
|
||||
}
|
||||
func_add_hook func_prep libtool_prep
|
||||
|
||||
|
||||
# libtool_add_libltdl_copying
|
||||
# ---------------------------
|
||||
# Use the canonical COPYING.LESSERv2 from gnulib.
|
||||
libtool_add_libltdl_copying ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
func_gnulib_tool_copy_file doc/COPYING.LESSERv2 libltdl/COPYING.LIB
|
||||
}
|
||||
func_add_hook func_gnulib_tool libtool_add_libltdl_copying
|
||||
|
||||
|
||||
# libtool_build_prerequisites
|
||||
# ---------------------------
|
||||
# Libtool generates some files that are required before any autotools
|
||||
# can be run successfully.
|
||||
libtool_build_prerequisites ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
$require_build_aux
|
||||
$require_ltdl_dir
|
||||
$require_macro_dir
|
||||
$require_package
|
||||
$require_package_bugreport
|
||||
$require_package_name
|
||||
$require_package_url
|
||||
$require_package_version
|
||||
|
||||
# Whip up a dirty Makefile:
|
||||
makes='Makefile.am libltdl/ltdl.mk'
|
||||
rm -f Makefile
|
||||
{
|
||||
echo "aux_dir = $build_aux"
|
||||
echo "ltdl_dir = $ltdl_dir"
|
||||
echo "macro_dir = $macro_dir"
|
||||
|
||||
# The following allow us to tie bootstrap-deps output verbosity
|
||||
# into the bootstrap --verbose option:
|
||||
echo 'AM_V_GEN = $(am__v_GEN_$(V))'
|
||||
echo 'am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))'
|
||||
echo 'am__v_GEN_0 = @echo " GEN " $@;'
|
||||
echo 'AM_V_at = $(am__v_at_$(V))'
|
||||
echo 'am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))'
|
||||
echo 'am__v_at_0 = @'
|
||||
|
||||
$SED '/^if /,/^endif$/d;/^else$/,/^endif$/d;/^include /d' $makes
|
||||
} > Makefile
|
||||
|
||||
# Building distributed files from configure is bad for automake, so we
|
||||
# generate them here, and have Makefile rules to keep them up to date.
|
||||
func_show_eval "$MAKE bootstrap-deps \
|
||||
AM_DEFAULT_VERBOSITY=0 `$opt_verbose && echo V=1` \
|
||||
PACKAGE='$package' PACKAGE_BUGREPORT='$package_bugreport' \
|
||||
PACKAGE_NAME='$package_name' PACKAGE_URL='$package_url' \
|
||||
SED='$SED' srcdir=. VERSION='$package_version'"
|
||||
status=$?
|
||||
|
||||
rm -f Makefile
|
||||
test 0 -eq "$status" ||exit $EXIT_FAILURE
|
||||
}
|
||||
func_add_hook func_gnulib_tool libtool_build_prerequisites
|
||||
|
||||
|
||||
# libtool_autoreconf_libltdl
|
||||
# --------------------------
|
||||
# Libtldl directory needs to be autoreconfed too.
|
||||
libtool_autoreconf_libltdl ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
# Also bootstrap libltdl ready for installation.
|
||||
func_autoreconf libltdl
|
||||
}
|
||||
func_add_hook func_reconfigure libtool_autoreconf_libltdl
|
||||
|
||||
|
||||
# libtool_readme_release_package_substitutions
|
||||
# --------------------------------------------
|
||||
# Show our own package details instead of generic strings.
|
||||
libtool_readme_release_package_substitutions ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
$require_build_aux
|
||||
$require_package
|
||||
|
||||
my_readme=README-release
|
||||
|
||||
test -f "$my_readme" \
|
||||
|| func_fatal_error "error: '$my_readme' does not exist"
|
||||
|
||||
# Perform substitutions to a temporary file
|
||||
$SED -e "\
|
||||
s|\@PACKAGE\@|$package|g
|
||||
" "$my_readme" > "${my_readme}T" \
|
||||
&& mv "${my_readme}T" "$my_readme"
|
||||
}
|
||||
func_add_hook func_fini libtool_readme_release_package_substitutions
|
||||
|
||||
|
||||
# libtool_fudge_timestamps
|
||||
# ------------------------
|
||||
# Autoheader valiantly tries to prevent needless reconfigurations by
|
||||
# not changing the timestamp of config-h.in unless the file contents
|
||||
# are updated. Unfortunately config-h.in depends on aclocal.m4, which
|
||||
# *is* updated, so running 'libtoolize --ltdl=. && configure && make'
|
||||
# causes autoheader to be called... undesireable for users that do not
|
||||
# have it! Fudge the timestamp to prevent that:
|
||||
libtool_fudge_timestamps ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
sleep 2 && touch libltdl/config-h.in
|
||||
}
|
||||
func_add_hook func_fini libtool_fudge_timestamps
|
||||
|
||||
|
||||
# libtool_cleanup
|
||||
# ---------------
|
||||
libtool_cleanup ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
# These files can cause an infinite configure loop if left behind.
|
||||
rm -f Makefile libltdl/Makefile libtool vcl.tmp
|
||||
}
|
||||
func_add_hook func_fini libtool_cleanup
|
||||
|
||||
|
||||
# libtool_check_for_bogus_macros
|
||||
# ------------------------------
|
||||
# Try to catch the case where 'aclocal' pulls installed libtool macro
|
||||
# file contents from another version of libtool into the current package
|
||||
# 'aclocal.m4'.
|
||||
libtool_check_for_bogus_macros ()
|
||||
{
|
||||
$debug_cmd
|
||||
$require_build_aux
|
||||
$build_aux/no-bogus-m4-defines || exit 1
|
||||
}
|
||||
func_add_hook func_fini libtool_check_for_bogus_macros
|
||||
|
||||
|
||||
# libtool_cleanup_empty_dirs
|
||||
# --------------------------
|
||||
# Gnulib leaves behind a few files we don't need.
|
||||
libtool_cleanup_empty_dirs ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
my_gnulib_source=${source_base:-'lib'}
|
||||
|
||||
if test -d "$my_gnulib_source"; then
|
||||
rm -f "$my_gnulib_source/.gitignore" "$my_gnulib_source/Makefile.am" || exit 1
|
||||
rmdir "$my_gnulib_source" || exit 1
|
||||
fi
|
||||
}
|
||||
func_add_hook func_fini libtool_cleanup_empty_dirs
|
||||
|
||||
|
||||
|
||||
## -------------------- ##
|
||||
## Resource management. ##
|
||||
## -------------------- ##
|
||||
|
||||
# require_ltdl_dir
|
||||
# ----------------
|
||||
# Extract libtool's ltdl directory from configure.ac.
|
||||
require_ltdl_dir=func_require_ltdl_dir
|
||||
func_require_ltdl_dir ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
$require_configure_ac
|
||||
|
||||
func_extract_trace LT_CONFIG_LTDL_DIR
|
||||
|
||||
save_ifs=$IFS
|
||||
IFS=:
|
||||
set dummy $func_extract_trace_result
|
||||
IFS=$save_ifs
|
||||
shift
|
||||
|
||||
ltdl_dir=$1
|
||||
func_check_configuration ltdl_dir \
|
||||
"LT_CONFIG_LTDL_DIR([name of your libltdl directory])"
|
||||
|
||||
func_verbose "ltdl_dir='$ltdl_dir'"
|
||||
|
||||
require_ltdl_dir=:
|
||||
}
|
||||
|
||||
|
||||
# require_package_url
|
||||
# -------------------
|
||||
# Ensure that package_url has a sensible default.
|
||||
require_package_url=libtool_require_package_url
|
||||
libtool_require_package_url ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
$require_configure_ac
|
||||
|
||||
func_extract_trace AC_INIT
|
||||
|
||||
save_IFS=$IFS
|
||||
IFS=:
|
||||
set dummy $func_extract_trace_result
|
||||
IFS=$save_IFS
|
||||
shift
|
||||
|
||||
test -n "$package_url " || package_url=$5
|
||||
test -n "$package_url" || {
|
||||
# How to extract the parameters for 'make bootstrap-deps' from
|
||||
# configure.ac. This is very specific to the way Libtool's
|
||||
# configure.ac layout.
|
||||
sed_extract_package_url='s|#.*$||; s|^dnl .*$||; s| dnl .*$||;
|
||||
/AC_SUBST([[]*PACKAGE_URL/{
|
||||
s|.*AC_SUBST([[ ]*PACKAGE_URL[] ]*,[[ ]*|package_url="|
|
||||
s|[]) ]*$|"|
|
||||
p
|
||||
}'
|
||||
|
||||
# Extract package_url setting from configure.ac.
|
||||
eval `$SED -n "$sed_extract_package_url" < configure.ac`
|
||||
}
|
||||
|
||||
test -n "$package_url" \
|
||||
|| func_fatal_error "unable to determine 'package_url' from '$configure_ac'."
|
||||
|
||||
func_verbose "package_url='$package_url'"
|
||||
|
||||
require_package_url=:
|
||||
}
|
||||
|
||||
|
||||
# Local variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "# bootstrap.conf (GNU Libtool) version "
|
||||
# time-stamp-format: "%:y-%02m-%02d"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
||||
@ -1,587 +0,0 @@
|
||||
#!/bin/sh
|
||||
#! -*-perl-*-
|
||||
|
||||
# Generate a release announcement message.
|
||||
|
||||
# Copyright (C) 2002-2022 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Written by Jim Meyering
|
||||
|
||||
# This is a prologue that allows to run a perl script as an executable
|
||||
# on systems that are compliant to a POSIX version before POSIX:2017.
|
||||
# On such systems, the usual invocation of an executable through execlp()
|
||||
# or execvp() fails with ENOEXEC if it is a script that does not start
|
||||
# with a #! line. The script interpreter mentioned in the #! line has
|
||||
# to be /bin/sh, because on GuixSD systems that is the only program that
|
||||
# has a fixed file name. The second line is essential for perl and is
|
||||
# also useful for editing this file in Emacs. The next two lines below
|
||||
# are valid code in both sh and perl. When executed by sh, they re-execute
|
||||
# the script through the perl program found in $PATH. The '-x' option
|
||||
# is essential as well; without it, perl would re-execute the script
|
||||
# through /bin/sh. When executed by perl, the next two lines are a no-op.
|
||||
eval 'exec perl -wSx "$0" "$@"'
|
||||
if 0;
|
||||
|
||||
my $VERSION = '2022-01-27 18:48'; # UTC
|
||||
# The definition above must lie within the first 8 lines in order
|
||||
# for the Emacs time-stamp write hook (at end) to update it.
|
||||
# If you change this file with Emacs, please let the write hook
|
||||
# do its job. Otherwise, update this string manually.
|
||||
|
||||
my $copyright_year = '2022';
|
||||
|
||||
use strict;
|
||||
use Getopt::Long;
|
||||
use POSIX qw(strftime);
|
||||
|
||||
(my $ME = $0) =~ s|.*/||;
|
||||
|
||||
my %valid_release_types = map {$_ => 1} qw (alpha beta stable);
|
||||
my @archive_suffixes = qw (tar.gz tar.bz2 tar.lz tar.lzma tar.xz);
|
||||
my $srcdir = '.';
|
||||
|
||||
sub usage ($)
|
||||
{
|
||||
my ($exit_code) = @_;
|
||||
my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
|
||||
if ($exit_code != 0)
|
||||
{
|
||||
print $STREAM "Try '$ME --help' for more information.\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
my @types = sort keys %valid_release_types;
|
||||
print $STREAM <<EOF;
|
||||
Usage: $ME [OPTIONS]
|
||||
Generate an announcement message. Run this from builddir.
|
||||
|
||||
OPTIONS:
|
||||
|
||||
These options must be specified:
|
||||
|
||||
--release-type=TYPE TYPE must be one of @types
|
||||
--package-name=PACKAGE_NAME
|
||||
--previous-version=VER
|
||||
--current-version=VER
|
||||
--gpg-key-id=ID The GnuPG ID of the key used to sign the tarballs
|
||||
--url-directory=URL_DIR
|
||||
|
||||
The following are optional:
|
||||
|
||||
--news=NEWS_FILE include the NEWS section about this release
|
||||
from this NEWS_FILE; accumulates.
|
||||
--srcdir=DIR where to find the NEWS_FILEs (default: $srcdir)
|
||||
--bootstrap-tools=TOOL_LIST a comma-separated list of tools, e.g.,
|
||||
autoconf,automake,bison,gnulib
|
||||
--gnulib-version=VERSION report VERSION as the gnulib version, where
|
||||
VERSION is the result of running git describe
|
||||
in the gnulib source directory.
|
||||
required if gnulib is in TOOL_LIST.
|
||||
--no-print-checksums do not emit SHA1 or SHA256 checksums
|
||||
--archive-suffix=SUF add SUF to the list of archive suffixes
|
||||
--mail-headers=HEADERS a space-separated list of mail headers, e.g.,
|
||||
To: x\@example.com Cc: y-announce\@example.com,...
|
||||
|
||||
--help display this help and exit
|
||||
--version output version information and exit
|
||||
|
||||
EOF
|
||||
}
|
||||
exit $exit_code;
|
||||
}
|
||||
|
||||
|
||||
=item C<%size> = C<sizes (@file)>
|
||||
|
||||
Compute the sizes of the C<@file> and return them as a hash. Return
|
||||
C<undef> if one of the computation failed.
|
||||
|
||||
=cut
|
||||
|
||||
sub sizes (@)
|
||||
{
|
||||
my (@file) = @_;
|
||||
|
||||
my $fail = 0;
|
||||
my %res;
|
||||
foreach my $f (@file)
|
||||
{
|
||||
my $cmd = "du -h $f";
|
||||
my $t = `$cmd`;
|
||||
# FIXME-someday: give a better diagnostic, a la $PROCESS_STATUS
|
||||
$@
|
||||
and (warn "command failed: '$cmd'\n"), $fail = 1;
|
||||
chomp $t;
|
||||
$t =~ s/^\s*([\d.]+[MkK]).*/${1}B/;
|
||||
$res{$f} = $t;
|
||||
}
|
||||
return $fail ? undef : %res;
|
||||
}
|
||||
|
||||
=item C<print_locations ($title, \@url, \%size, @file)
|
||||
|
||||
Print a section C<$title> dedicated to the list of <@file>, which
|
||||
sizes are stored in C<%size>, and which are available from the C<@url>.
|
||||
|
||||
=cut
|
||||
|
||||
sub print_locations ($\@\%@)
|
||||
{
|
||||
my ($title, $url, $size, @file) = @_;
|
||||
print "Here are the $title:\n";
|
||||
foreach my $url (@{$url})
|
||||
{
|
||||
for my $file (@file)
|
||||
{
|
||||
print " $url/$file";
|
||||
print " (", $$size{$file}, ")"
|
||||
if exists $$size{$file};
|
||||
print "\n";
|
||||
}
|
||||
}
|
||||
print "\n";
|
||||
}
|
||||
|
||||
=item C<print_checksums (@file)
|
||||
|
||||
Print the SHA1 and SHA256 signature section for each C<@file>.
|
||||
|
||||
=cut
|
||||
|
||||
sub print_checksums (@)
|
||||
{
|
||||
my (@file) = @_;
|
||||
|
||||
print "Here are the SHA1 and SHA256 checksums:\n";
|
||||
print "\n";
|
||||
|
||||
use Digest::file qw(digest_file_hex digest_file_base64);
|
||||
|
||||
foreach my $f (@file)
|
||||
{
|
||||
print digest_file_hex($f, "SHA-1"), " $f\n";
|
||||
print digest_file_base64($f, "SHA-256"), " $f\n";
|
||||
}
|
||||
print "\nThe SHA256 checksum is base64 encoded, instead of the\n";
|
||||
print "hexadecimal encoding that most checksum tools default to.\n\n";
|
||||
}
|
||||
|
||||
=item C<print_news_deltas ($news_file, $prev_version, $curr_version)
|
||||
|
||||
Print the section of the NEWS file C<$news_file> addressing changes
|
||||
between versions C<$prev_version> and C<$curr_version>.
|
||||
|
||||
=cut
|
||||
|
||||
sub print_news_deltas ($$$)
|
||||
{
|
||||
my ($news_file, $prev_version, $curr_version) = @_;
|
||||
|
||||
my $news_name = $news_file;
|
||||
$news_name =~ s|^\Q$srcdir\E/||;
|
||||
|
||||
print "\n$news_name\n\n";
|
||||
|
||||
# Print all lines from $news_file, starting with the first one
|
||||
# that mentions $curr_version up to but not including
|
||||
# the first occurrence of $prev_version.
|
||||
my $in_items;
|
||||
|
||||
my $re_prefix = qr/(?:\* )?(?:Noteworthy c|Major c|C)(?i:hanges)/;
|
||||
|
||||
my $found_news;
|
||||
open NEWS, '<', $news_file
|
||||
or die "$ME: $news_file: cannot open for reading: $!\n";
|
||||
while (defined (my $line = <NEWS>))
|
||||
{
|
||||
if ( ! $in_items)
|
||||
{
|
||||
# Match lines like these:
|
||||
# * Major changes in release 5.0.1:
|
||||
# * Noteworthy changes in release 6.6 (2006-11-22) [stable]
|
||||
$line =~ /^$re_prefix.*(?:[^\d.]|$)\Q$curr_version\E(?:[^\d.]|$)/o
|
||||
or next;
|
||||
$in_items = 1;
|
||||
print $line;
|
||||
}
|
||||
else
|
||||
{
|
||||
# This regexp must not match version numbers in NEWS items.
|
||||
# For example, they might well say "introduced in 4.5.5",
|
||||
# and we don't want that to match.
|
||||
$line =~ /^$re_prefix.*(?:[^\d.]|$)\Q$prev_version\E(?:[^\d.]|$)/o
|
||||
and last;
|
||||
print $line;
|
||||
$line =~ /\S/
|
||||
and $found_news = 1;
|
||||
}
|
||||
}
|
||||
close NEWS;
|
||||
|
||||
$in_items
|
||||
or die "$ME: $news_file: no matching lines for '$curr_version'\n";
|
||||
$found_news
|
||||
or die "$ME: $news_file: no news item found for '$curr_version'\n";
|
||||
}
|
||||
|
||||
sub print_changelog_deltas ($$)
|
||||
{
|
||||
my ($package_name, $prev_version) = @_;
|
||||
|
||||
# Print new ChangeLog entries.
|
||||
|
||||
# First find all CVS-controlled ChangeLog files.
|
||||
use File::Find;
|
||||
my @changelog;
|
||||
find ({wanted => sub {$_ eq 'ChangeLog' && -d 'CVS'
|
||||
and push @changelog, $File::Find::name}},
|
||||
'.');
|
||||
|
||||
# If there are no ChangeLog files, we're done.
|
||||
@changelog
|
||||
or return;
|
||||
my %changelog = map {$_ => 1} @changelog;
|
||||
|
||||
# Reorder the list of files so that if there are ChangeLog
|
||||
# files in the specified directories, they're listed first,
|
||||
# in this order:
|
||||
my @dir = qw ( . src lib m4 config doc );
|
||||
|
||||
# A typical @changelog array might look like this:
|
||||
# ./ChangeLog
|
||||
# ./po/ChangeLog
|
||||
# ./m4/ChangeLog
|
||||
# ./lib/ChangeLog
|
||||
# ./doc/ChangeLog
|
||||
# ./config/ChangeLog
|
||||
my @reordered;
|
||||
foreach my $d (@dir)
|
||||
{
|
||||
my $dot_slash = $d eq '.' ? $d : "./$d";
|
||||
my $target = "$dot_slash/ChangeLog";
|
||||
delete $changelog{$target}
|
||||
and push @reordered, $target;
|
||||
}
|
||||
|
||||
# Append any remaining ChangeLog files.
|
||||
push @reordered, sort keys %changelog;
|
||||
|
||||
# Remove leading './'.
|
||||
@reordered = map { s!^\./!!; $_ } @reordered;
|
||||
|
||||
print "\nChangeLog entries:\n\n";
|
||||
# print join ("\n", @reordered), "\n";
|
||||
|
||||
$prev_version =~ s/\./_/g;
|
||||
my $prev_cvs_tag = "\U$package_name\E-$prev_version";
|
||||
|
||||
my $cmd = "cvs -n diff -u -r$prev_cvs_tag -rHEAD @reordered";
|
||||
open DIFF, '-|', $cmd
|
||||
or die "$ME: cannot run '$cmd': $!\n";
|
||||
# Print two types of lines, making minor changes:
|
||||
# Lines starting with '+++ ', e.g.,
|
||||
# +++ ChangeLog 22 Feb 2003 16:52:51 -0000 1.247
|
||||
# and those starting with '+'.
|
||||
# Don't print the others.
|
||||
my $prev_printed_line_empty = 1;
|
||||
while (defined (my $line = <DIFF>))
|
||||
{
|
||||
if ($line =~ /^\+\+\+ /)
|
||||
{
|
||||
my $separator = "*"x70 ."\n";
|
||||
$line =~ s///;
|
||||
$line =~ s/\s.*//;
|
||||
$prev_printed_line_empty
|
||||
or print "\n";
|
||||
print $separator, $line, $separator;
|
||||
}
|
||||
elsif ($line =~ /^\+/)
|
||||
{
|
||||
$line =~ s///;
|
||||
print $line;
|
||||
$prev_printed_line_empty = ($line =~ /^$/);
|
||||
}
|
||||
}
|
||||
close DIFF;
|
||||
|
||||
# The exit code should be 1.
|
||||
# Allow in case there are no modified ChangeLog entries.
|
||||
$? == 256 || $? == 128
|
||||
or warn "warning: '$cmd' had unexpected exit code or signal ($?)\n";
|
||||
}
|
||||
|
||||
sub get_tool_versions ($$)
|
||||
{
|
||||
my ($tool_list, $gnulib_version) = @_;
|
||||
@$tool_list
|
||||
or return ();
|
||||
|
||||
my $fail;
|
||||
my @tool_version_pair;
|
||||
foreach my $t (@$tool_list)
|
||||
{
|
||||
if ($t eq 'gnulib')
|
||||
{
|
||||
push @tool_version_pair, ucfirst $t . ' ' . $gnulib_version;
|
||||
next;
|
||||
}
|
||||
# Assume that the last "word" on the first line of
|
||||
# 'tool --version' output is the version string.
|
||||
my ($first_line, undef) = split ("\n", `$t --version`);
|
||||
if ($first_line =~ /.* (\d[\w.-]+)$/)
|
||||
{
|
||||
$t = ucfirst $t;
|
||||
push @tool_version_pair, "$t $1";
|
||||
}
|
||||
else
|
||||
{
|
||||
defined $first_line
|
||||
and $first_line = '';
|
||||
warn "$t: unexpected --version output\n:$first_line";
|
||||
$fail = 1;
|
||||
}
|
||||
}
|
||||
|
||||
$fail
|
||||
and exit 1;
|
||||
|
||||
return @tool_version_pair;
|
||||
}
|
||||
|
||||
{
|
||||
# Use the C locale so that, for instance, "du" does not
|
||||
# print "1,2" instead of "1.2", which would confuse our regexps.
|
||||
$ENV{LC_ALL} = "C";
|
||||
|
||||
my $mail_headers;
|
||||
my $release_type;
|
||||
my $package_name;
|
||||
my $prev_version;
|
||||
my $curr_version;
|
||||
my $gpg_key_id;
|
||||
my @url_dir_list;
|
||||
my @news_file;
|
||||
my $bootstrap_tools;
|
||||
my $gnulib_version;
|
||||
my $print_checksums_p = 1;
|
||||
|
||||
# Reformat the warnings before displaying them.
|
||||
local $SIG{__WARN__} = sub
|
||||
{
|
||||
my ($msg) = @_;
|
||||
# Warnings from GetOptions.
|
||||
$msg =~ s/Option (\w)/option --$1/;
|
||||
warn "$ME: $msg";
|
||||
};
|
||||
|
||||
GetOptions
|
||||
(
|
||||
'mail-headers=s' => \$mail_headers,
|
||||
'release-type=s' => \$release_type,
|
||||
'package-name=s' => \$package_name,
|
||||
'previous-version=s' => \$prev_version,
|
||||
'current-version=s' => \$curr_version,
|
||||
'gpg-key-id=s' => \$gpg_key_id,
|
||||
'url-directory=s' => \@url_dir_list,
|
||||
'news=s' => \@news_file,
|
||||
'srcdir=s' => \$srcdir,
|
||||
'bootstrap-tools=s' => \$bootstrap_tools,
|
||||
'gnulib-version=s' => \$gnulib_version,
|
||||
'print-checksums!' => \$print_checksums_p,
|
||||
'archive-suffix=s' => \@archive_suffixes,
|
||||
|
||||
help => sub { usage 0 },
|
||||
version =>
|
||||
sub
|
||||
{
|
||||
print "$ME version $VERSION\n";
|
||||
print "Copyright (C) $copyright_year Free Software Foundation, Inc.\n";
|
||||
print "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.\n"
|
||||
. "This is free software: you are free to change and redistribute it.\n"
|
||||
. "There is NO WARRANTY, to the extent permitted by law.\n";
|
||||
print "\n";
|
||||
my $author = "Jim Meyering";
|
||||
print "Written by $author.\n";
|
||||
exit
|
||||
},
|
||||
) or usage 1;
|
||||
|
||||
my $fail = 0;
|
||||
# Ensure that each required option is specified.
|
||||
$release_type
|
||||
or (warn "release type not specified\n"), $fail = 1;
|
||||
$package_name
|
||||
or (warn "package name not specified\n"), $fail = 1;
|
||||
$prev_version
|
||||
or (warn "previous version string not specified\n"), $fail = 1;
|
||||
$curr_version
|
||||
or (warn "current version string not specified\n"), $fail = 1;
|
||||
$gpg_key_id
|
||||
or (warn "GnuPG key ID not specified\n"), $fail = 1;
|
||||
@url_dir_list
|
||||
or (warn "URL directory name(s) not specified\n"), $fail = 1;
|
||||
|
||||
my @tool_list = split ',', $bootstrap_tools
|
||||
if $bootstrap_tools;
|
||||
|
||||
grep (/^gnulib$/, @tool_list) ^ defined $gnulib_version
|
||||
and (warn "when specifying gnulib as a tool, you must also specify\n"
|
||||
. "--gnulib-version=V, where V is the result of running git describe\n"
|
||||
. "in the gnulib source directory.\n"), $fail = 1;
|
||||
|
||||
!$release_type || exists $valid_release_types{$release_type}
|
||||
or (warn "'$release_type': invalid release type\n"), $fail = 1;
|
||||
|
||||
@ARGV
|
||||
and (warn "too many arguments:\n", join ("\n", @ARGV), "\n"),
|
||||
$fail = 1;
|
||||
$fail
|
||||
and usage 1;
|
||||
|
||||
my $my_distdir = "$package_name-$curr_version";
|
||||
|
||||
my $xd = "$package_name-$prev_version-$curr_version.xdelta";
|
||||
|
||||
my @candidates = map { "$my_distdir.$_" } @archive_suffixes;
|
||||
my @tarballs = grep {-f $_} @candidates;
|
||||
|
||||
@tarballs
|
||||
or die "$ME: none of " . join(', ', @candidates) . " were found\n";
|
||||
my @sizable = @tarballs;
|
||||
-f $xd
|
||||
and push @sizable, $xd;
|
||||
my %size = sizes (@sizable);
|
||||
%size
|
||||
or exit 1;
|
||||
|
||||
my $headers = '';
|
||||
if (defined $mail_headers)
|
||||
{
|
||||
($headers = $mail_headers) =~ s/\s+(\S+:)/\n$1/g;
|
||||
$headers .= "\n";
|
||||
}
|
||||
|
||||
# The markup is escaped as <\# so that when this script is sent by
|
||||
# mail (or part of a diff), Gnus is not triggered.
|
||||
print <<EOF;
|
||||
|
||||
${headers}Subject: $my_distdir released [$release_type]
|
||||
|
||||
<\#secure method=pgpmime mode=sign>
|
||||
|
||||
Libtoolers!
|
||||
|
||||
The Libtool Team is pleased to announce the release of $package_name $curr_version.
|
||||
|
||||
GNU Libtool hides the complexity of using shared libraries behind a
|
||||
consistent, portable interface. GNU Libtool ships with GNU libltdl, which
|
||||
hides the complexity of loading dynamic runtime libraries (modules)
|
||||
behind a consistent, portable interface.
|
||||
|
||||
EOF
|
||||
|
||||
if (@url_dir_list == 1 && @tarballs == 1)
|
||||
{
|
||||
# When there's only one tarball and one URL, use a more concise form.
|
||||
my $m = "$url_dir_list[0]/$tarballs[0]";
|
||||
print "Here are the compressed sources and a GPG detached signature[*]:\n"
|
||||
. " $m\n"
|
||||
. " $m.sig\n\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
print_locations ("compressed sources", @url_dir_list, %size, @tarballs);
|
||||
-f $xd
|
||||
and print_locations ("xdelta diffs (useful? if so, "
|
||||
. "please tell bug-gnulib\@gnu.org)",
|
||||
@url_dir_list, %size, $xd);
|
||||
my @sig_files = map { "$_.sig" } @tarballs;
|
||||
print_locations ("GPG detached signatures[*]", @url_dir_list, %size,
|
||||
@sig_files);
|
||||
}
|
||||
|
||||
if ($url_dir_list[0] =~ "gnu\.org")
|
||||
{
|
||||
print "Use a mirror for higher download bandwidth:\n";
|
||||
if (@tarballs == 1 && $url_dir_list[0] =~ m!https://ftp\.gnu\.org/gnu/!)
|
||||
{
|
||||
(my $m = "$url_dir_list[0]/$tarballs[0]")
|
||||
=~ s!https://ftp\.gnu\.org/gnu/!https://ftpmirror\.gnu\.org/!;
|
||||
print " $m\n"
|
||||
. " $m.sig\n\n";
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
print " https://www.gnu.org/order/ftp.html\n\n";
|
||||
}
|
||||
}
|
||||
|
||||
$print_checksums_p
|
||||
and print_checksums (@sizable);
|
||||
|
||||
print <<EOF;
|
||||
[*] Use a .sig file to verify that the corresponding file (without the
|
||||
.sig suffix) is intact. First, be sure to download both the .sig file
|
||||
and the corresponding tarball. Then, run a command like this:
|
||||
|
||||
gpg --verify $tarballs[0].sig
|
||||
|
||||
If that command fails because you don't have the required public key,
|
||||
then run this command to import it:
|
||||
|
||||
gpg --keyserver keys.gnupg.net --recv-keys $gpg_key_id
|
||||
|
||||
and rerun the 'gpg --verify' command.
|
||||
EOF
|
||||
|
||||
my @tool_versions = get_tool_versions (\@tool_list, $gnulib_version);
|
||||
@tool_versions
|
||||
and print "\nThis release was bootstrapped with the following tools:",
|
||||
join ('', map {"\n $_"} @tool_versions), "\n";
|
||||
|
||||
print_news_deltas ($_, $prev_version, $curr_version)
|
||||
foreach @news_file;
|
||||
|
||||
$release_type eq 'stable'
|
||||
or print_changelog_deltas ($package_name, $prev_version);
|
||||
|
||||
print <<EOF;
|
||||
|
||||
Enjoy!
|
||||
EOF
|
||||
|
||||
exit 0;
|
||||
}
|
||||
|
||||
### Setup "GNU" style for perl-mode and cperl-mode.
|
||||
## Local Variables:
|
||||
## mode: perl
|
||||
## perl-indent-level: 2
|
||||
## perl-continued-statement-offset: 2
|
||||
## perl-continued-brace-offset: 0
|
||||
## perl-brace-offset: 0
|
||||
## perl-brace-imaginary-offset: 0
|
||||
## perl-label-offset: -2
|
||||
## perl-extra-newline-before-brace: t
|
||||
## perl-merge-trailing-else: nil
|
||||
## eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
## time-stamp-line-limit: 50
|
||||
## time-stamp-start: "my $VERSION = '"
|
||||
## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
|
||||
## time-stamp-time-zone: "UTC0"
|
||||
## time-stamp-end: "'; # UTC"
|
||||
## End:
|
||||
@ -1,348 +0,0 @@
|
||||
#! /bin/sh
|
||||
# Wrapper for compilers which do not understand '-c -o'.
|
||||
|
||||
scriptversion=2018-03-07.03; # UTC
|
||||
|
||||
# Copyright (C) 1999-2022 Free Software Foundation, Inc.
|
||||
# Written by Tom Tromey <tromey@cygnus.com>.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# This file is maintained in Automake, please report
|
||||
# bugs to <bug-automake@gnu.org> or send patches to
|
||||
# <automake-patches@gnu.org>.
|
||||
|
||||
nl='
|
||||
'
|
||||
|
||||
# We need space, tab and new line, in precisely that order. Quoting is
|
||||
# there to prevent tools from complaining about whitespace usage.
|
||||
IFS=" "" $nl"
|
||||
|
||||
file_conv=
|
||||
|
||||
# func_file_conv build_file lazy
|
||||
# Convert a $build file to $host form and store it in $file
|
||||
# Currently only supports Windows hosts. If the determined conversion
|
||||
# type is listed in (the comma separated) LAZY, no conversion will
|
||||
# take place.
|
||||
func_file_conv ()
|
||||
{
|
||||
file=$1
|
||||
case $file in
|
||||
/ | /[!/]*) # absolute file, and not a UNC file
|
||||
if test -z "$file_conv"; then
|
||||
# lazily determine how to convert abs files
|
||||
case `uname -s` in
|
||||
MINGW*)
|
||||
file_conv=mingw
|
||||
;;
|
||||
CYGWIN* | MSYS*)
|
||||
file_conv=cygwin
|
||||
;;
|
||||
*)
|
||||
file_conv=wine
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
case $file_conv/,$2, in
|
||||
*,$file_conv,*)
|
||||
;;
|
||||
mingw/*)
|
||||
file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
|
||||
;;
|
||||
cygwin/* | msys/*)
|
||||
file=`cygpath -m "$file" || echo "$file"`
|
||||
;;
|
||||
wine/*)
|
||||
file=`winepath -w "$file" || echo "$file"`
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# func_cl_dashL linkdir
|
||||
# Make cl look for libraries in LINKDIR
|
||||
func_cl_dashL ()
|
||||
{
|
||||
func_file_conv "$1"
|
||||
if test -z "$lib_path"; then
|
||||
lib_path=$file
|
||||
else
|
||||
lib_path="$lib_path;$file"
|
||||
fi
|
||||
linker_opts="$linker_opts -LIBPATH:$file"
|
||||
}
|
||||
|
||||
# func_cl_dashl library
|
||||
# Do a library search-path lookup for cl
|
||||
func_cl_dashl ()
|
||||
{
|
||||
lib=$1
|
||||
found=no
|
||||
save_IFS=$IFS
|
||||
IFS=';'
|
||||
for dir in $lib_path $LIB
|
||||
do
|
||||
IFS=$save_IFS
|
||||
if $shared && test -f "$dir/$lib.dll.lib"; then
|
||||
found=yes
|
||||
lib=$dir/$lib.dll.lib
|
||||
break
|
||||
fi
|
||||
if test -f "$dir/$lib.lib"; then
|
||||
found=yes
|
||||
lib=$dir/$lib.lib
|
||||
break
|
||||
fi
|
||||
if test -f "$dir/lib$lib.a"; then
|
||||
found=yes
|
||||
lib=$dir/lib$lib.a
|
||||
break
|
||||
fi
|
||||
done
|
||||
IFS=$save_IFS
|
||||
|
||||
if test "$found" != yes; then
|
||||
lib=$lib.lib
|
||||
fi
|
||||
}
|
||||
|
||||
# func_cl_wrapper cl arg...
|
||||
# Adjust compile command to suit cl
|
||||
func_cl_wrapper ()
|
||||
{
|
||||
# Assume a capable shell
|
||||
lib_path=
|
||||
shared=:
|
||||
linker_opts=
|
||||
for arg
|
||||
do
|
||||
if test -n "$eat"; then
|
||||
eat=
|
||||
else
|
||||
case $1 in
|
||||
-o)
|
||||
# configure might choose to run compile as 'compile cc -o foo foo.c'.
|
||||
eat=1
|
||||
case $2 in
|
||||
*.o | *.[oO][bB][jJ])
|
||||
func_file_conv "$2"
|
||||
set x "$@" -Fo"$file"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
func_file_conv "$2"
|
||||
set x "$@" -Fe"$file"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
-I)
|
||||
eat=1
|
||||
func_file_conv "$2" mingw
|
||||
set x "$@" -I"$file"
|
||||
shift
|
||||
;;
|
||||
-I*)
|
||||
func_file_conv "${1#-I}" mingw
|
||||
set x "$@" -I"$file"
|
||||
shift
|
||||
;;
|
||||
-l)
|
||||
eat=1
|
||||
func_cl_dashl "$2"
|
||||
set x "$@" "$lib"
|
||||
shift
|
||||
;;
|
||||
-l*)
|
||||
func_cl_dashl "${1#-l}"
|
||||
set x "$@" "$lib"
|
||||
shift
|
||||
;;
|
||||
-L)
|
||||
eat=1
|
||||
func_cl_dashL "$2"
|
||||
;;
|
||||
-L*)
|
||||
func_cl_dashL "${1#-L}"
|
||||
;;
|
||||
-static)
|
||||
shared=false
|
||||
;;
|
||||
-Wl,*)
|
||||
arg=${1#-Wl,}
|
||||
save_ifs="$IFS"; IFS=','
|
||||
for flag in $arg; do
|
||||
IFS="$save_ifs"
|
||||
linker_opts="$linker_opts $flag"
|
||||
done
|
||||
IFS="$save_ifs"
|
||||
;;
|
||||
-Xlinker)
|
||||
eat=1
|
||||
linker_opts="$linker_opts $2"
|
||||
;;
|
||||
-*)
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
|
||||
func_file_conv "$1"
|
||||
set x "$@" -Tp"$file"
|
||||
shift
|
||||
;;
|
||||
*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
|
||||
func_file_conv "$1" mingw
|
||||
set x "$@" "$file"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
shift
|
||||
done
|
||||
if test -n "$linker_opts"; then
|
||||
linker_opts="-link$linker_opts"
|
||||
fi
|
||||
exec "$@" $linker_opts
|
||||
exit 1
|
||||
}
|
||||
|
||||
eat=
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No command. Try '$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: compile [--help] [--version] PROGRAM [ARGS]
|
||||
|
||||
Wrapper for compilers which do not understand '-c -o'.
|
||||
Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
|
||||
arguments, and rename the output as expected.
|
||||
|
||||
If you are trying to build a whole package this is not the
|
||||
right script to run: please start by reading the file 'INSTALL'.
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
exit $?
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "compile $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
|
||||
icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
|
||||
func_cl_wrapper "$@" # Doesn't return...
|
||||
;;
|
||||
esac
|
||||
|
||||
ofile=
|
||||
cfile=
|
||||
|
||||
for arg
|
||||
do
|
||||
if test -n "$eat"; then
|
||||
eat=
|
||||
else
|
||||
case $1 in
|
||||
-o)
|
||||
# configure might choose to run compile as 'compile cc -o foo foo.c'.
|
||||
# So we strip '-o arg' only if arg is an object.
|
||||
eat=1
|
||||
case $2 in
|
||||
*.o | *.obj)
|
||||
ofile=$2
|
||||
;;
|
||||
*)
|
||||
set x "$@" -o "$2"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*.c)
|
||||
cfile=$1
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
if test -z "$ofile" || test -z "$cfile"; then
|
||||
# If no '-o' option was seen then we might have been invoked from a
|
||||
# pattern rule where we don't need one. That is ok -- this is a
|
||||
# normal compilation that the losing compiler can handle. If no
|
||||
# '.c' file was seen then we are probably linking. That is also
|
||||
# ok.
|
||||
exec "$@"
|
||||
fi
|
||||
|
||||
# Name of file we expect compiler to create.
|
||||
cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
|
||||
|
||||
# Create the lock directory.
|
||||
# Note: use '[/\\:.-]' here to ensure that we don't use the same name
|
||||
# that we are using for the .o file. Also, base the name on the expected
|
||||
# object file name, since that is what matters with a parallel build.
|
||||
lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
|
||||
while true; do
|
||||
if mkdir "$lockdir" >/dev/null 2>&1; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
# FIXME: race condition here if user kills between mkdir and trap.
|
||||
trap "rmdir '$lockdir'; exit 1" 1 2 15
|
||||
|
||||
# Run the compile.
|
||||
"$@"
|
||||
ret=$?
|
||||
|
||||
if test -f "$cofile"; then
|
||||
test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
|
||||
elif test -f "${cofile}bj"; then
|
||||
test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
|
||||
fi
|
||||
|
||||
rmdir "$lockdir"
|
||||
exit $ret
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
1757
BUILD/libtool-2.4.7/build-aux/config.guess
vendored
1757
BUILD/libtool-2.4.7/build-aux/config.guess
vendored
File diff suppressed because it is too large
Load Diff
1891
BUILD/libtool-2.4.7/build-aux/config.sub
vendored
1891
BUILD/libtool-2.4.7/build-aux/config.sub
vendored
File diff suppressed because it is too large
Load Diff
@ -1,790 +0,0 @@
|
||||
#! /bin/sh
|
||||
# depcomp - compile a program generating dependencies as side-effects
|
||||
|
||||
scriptversion=2018-03-07.03; # UTC
|
||||
|
||||
# Copyright (C) 1999-2022 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No command. Try '$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
|
||||
|
||||
Run PROGRAMS ARGS to compile a file, generating dependencies
|
||||
as side-effects.
|
||||
|
||||
Environment variables:
|
||||
depmode Dependency tracking mode.
|
||||
source Source file read by 'PROGRAMS ARGS'.
|
||||
object Object file output by 'PROGRAMS ARGS'.
|
||||
DEPDIR directory where to store dependencies.
|
||||
depfile Dependency file to output.
|
||||
tmpdepfile Temporary file to use when outputting dependencies.
|
||||
libtool Whether libtool is used (yes/no).
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
exit $?
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "depcomp $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
esac
|
||||
|
||||
# Get the directory component of the given path, and save it in the
|
||||
# global variables '$dir'. Note that this directory component will
|
||||
# be either empty or ending with a '/' character. This is deliberate.
|
||||
set_dir_from ()
|
||||
{
|
||||
case $1 in
|
||||
*/*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
|
||||
*) dir=;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Get the suffix-stripped basename of the given path, and save it the
|
||||
# global variable '$base'.
|
||||
set_base_from ()
|
||||
{
|
||||
base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
|
||||
}
|
||||
|
||||
# If no dependency file was actually created by the compiler invocation,
|
||||
# we still have to create a dummy depfile, to avoid errors with the
|
||||
# Makefile "include basename.Plo" scheme.
|
||||
make_dummy_depfile ()
|
||||
{
|
||||
echo "#dummy" > "$depfile"
|
||||
}
|
||||
|
||||
# Factor out some common post-processing of the generated depfile.
|
||||
# Requires the auxiliary global variable '$tmpdepfile' to be set.
|
||||
aix_post_process_depfile ()
|
||||
{
|
||||
# If the compiler actually managed to produce a dependency file,
|
||||
# post-process it.
|
||||
if test -f "$tmpdepfile"; then
|
||||
# Each line is of the form 'foo.o: dependency.h'.
|
||||
# Do two passes, one to just change these to
|
||||
# $object: dependency.h
|
||||
# and one to simply output
|
||||
# dependency.h:
|
||||
# which is needed to avoid the deleted-header problem.
|
||||
{ sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
|
||||
sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
|
||||
} > "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
else
|
||||
make_dummy_depfile
|
||||
fi
|
||||
}
|
||||
|
||||
# A tabulation character.
|
||||
tab=' '
|
||||
# A newline character.
|
||||
nl='
|
||||
'
|
||||
# Character ranges might be problematic outside the C locale.
|
||||
# These definitions help.
|
||||
upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
||||
lower=abcdefghijklmnopqrstuvwxyz
|
||||
alpha=${upper}${lower}
|
||||
|
||||
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
|
||||
echo "depcomp: Variables source, object and depmode must be set" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
|
||||
depfile=${depfile-`echo "$object" |
|
||||
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
|
||||
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
|
||||
|
||||
rm -f "$tmpdepfile"
|
||||
|
||||
# Avoid interferences from the environment.
|
||||
gccflag= dashmflag=
|
||||
|
||||
# Some modes work just like other modes, but use different flags. We
|
||||
# parameterize here, but still list the modes in the big case below,
|
||||
# to make depend.m4 easier to write. Note that we *cannot* use a case
|
||||
# here, because this file can only contain one case statement.
|
||||
if test "$depmode" = hp; then
|
||||
# HP compiler uses -M and no extra arg.
|
||||
gccflag=-M
|
||||
depmode=gcc
|
||||
fi
|
||||
|
||||
if test "$depmode" = dashXmstdout; then
|
||||
# This is just like dashmstdout with a different argument.
|
||||
dashmflag=-xM
|
||||
depmode=dashmstdout
|
||||
fi
|
||||
|
||||
cygpath_u="cygpath -u -f -"
|
||||
if test "$depmode" = msvcmsys; then
|
||||
# This is just like msvisualcpp but w/o cygpath translation.
|
||||
# Just convert the backslash-escaped backslashes to single forward
|
||||
# slashes to satisfy depend.m4
|
||||
cygpath_u='sed s,\\\\,/,g'
|
||||
depmode=msvisualcpp
|
||||
fi
|
||||
|
||||
if test "$depmode" = msvc7msys; then
|
||||
# This is just like msvc7 but w/o cygpath translation.
|
||||
# Just convert the backslash-escaped backslashes to single forward
|
||||
# slashes to satisfy depend.m4
|
||||
cygpath_u='sed s,\\\\,/,g'
|
||||
depmode=msvc7
|
||||
fi
|
||||
|
||||
if test "$depmode" = xlc; then
|
||||
# IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
|
||||
gccflag=-qmakedep=gcc,-MF
|
||||
depmode=gcc
|
||||
fi
|
||||
|
||||
case "$depmode" in
|
||||
gcc3)
|
||||
## gcc 3 implements dependency tracking that does exactly what
|
||||
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
|
||||
## it if -MD -MP comes after the -MF stuff. Hmm.
|
||||
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
|
||||
## the command line argument order; so add the flags where they
|
||||
## appear in depend2.am. Note that the slowdown incurred here
|
||||
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
|
||||
*) set fnord "$@" "$arg" ;;
|
||||
esac
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
done
|
||||
"$@"
|
||||
stat=$?
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
mv "$tmpdepfile" "$depfile"
|
||||
;;
|
||||
|
||||
gcc)
|
||||
## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
|
||||
## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
|
||||
## (see the conditional assignment to $gccflag above).
|
||||
## There are various ways to get dependency output from gcc. Here's
|
||||
## why we pick this rather obscure method:
|
||||
## - Don't want to use -MD because we'd like the dependencies to end
|
||||
## up in a subdir. Having to rename by hand is ugly.
|
||||
## (We might end up doing this anyway to support other compilers.)
|
||||
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
|
||||
## -MM, not -M (despite what the docs say). Also, it might not be
|
||||
## supported by the other compilers which use the 'gcc' depmode.
|
||||
## - Using -M directly means running the compiler twice (even worse
|
||||
## than renaming).
|
||||
if test -z "$gccflag"; then
|
||||
gccflag=-MD,
|
||||
fi
|
||||
"$@" -Wp,"$gccflag$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
# The second -e expression handles DOS-style file names with drive
|
||||
# letters.
|
||||
sed -e 's/^[^:]*: / /' \
|
||||
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
|
||||
## This next piece of magic avoids the "deleted header file" problem.
|
||||
## The problem is that when a header file which appears in a .P file
|
||||
## is deleted, the dependency causes make to die (because there is
|
||||
## typically no way to rebuild the header). We avoid this by adding
|
||||
## dummy dependencies for each header file. Too bad gcc doesn't do
|
||||
## this for us directly.
|
||||
## Some versions of gcc put a space before the ':'. On the theory
|
||||
## that the space means something, we add a space to the output as
|
||||
## well. hp depmode also adds that space, but also prefixes the VPATH
|
||||
## to the object. Take care to not repeat it in the output.
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
tr ' ' "$nl" < "$tmpdepfile" \
|
||||
| sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
|
||||
| sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
hp)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
sgi)
|
||||
if test "$libtool" = yes; then
|
||||
"$@" "-Wp,-MDupdate,$tmpdepfile"
|
||||
else
|
||||
"$@" -MDupdate "$tmpdepfile"
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
|
||||
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
|
||||
echo "$object : \\" > "$depfile"
|
||||
# Clip off the initial element (the dependent). Don't try to be
|
||||
# clever and replace this with sed code, as IRIX sed won't handle
|
||||
# lines with more than a fixed number of characters (4096 in
|
||||
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
|
||||
# the IRIX cc adds comments like '#:fec' to the end of the
|
||||
# dependency line.
|
||||
tr ' ' "$nl" < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
|
||||
| tr "$nl" ' ' >> "$depfile"
|
||||
echo >> "$depfile"
|
||||
# The second pass generates a dummy entry for each header file.
|
||||
tr ' ' "$nl" < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
|
||||
>> "$depfile"
|
||||
else
|
||||
make_dummy_depfile
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
xlc)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
aix)
|
||||
# The C for AIX Compiler uses -M and outputs the dependencies
|
||||
# in a .u file. In older versions, this file always lives in the
|
||||
# current directory. Also, the AIX compiler puts '$object:' at the
|
||||
# start of each line; $object doesn't have directory information.
|
||||
# Version 6 uses the directory in both cases.
|
||||
set_dir_from "$object"
|
||||
set_base_from "$object"
|
||||
if test "$libtool" = yes; then
|
||||
tmpdepfile1=$dir$base.u
|
||||
tmpdepfile2=$base.u
|
||||
tmpdepfile3=$dir.libs/$base.u
|
||||
"$@" -Wc,-M
|
||||
else
|
||||
tmpdepfile1=$dir$base.u
|
||||
tmpdepfile2=$dir$base.u
|
||||
tmpdepfile3=$dir$base.u
|
||||
"$@" -M
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
aix_post_process_depfile
|
||||
;;
|
||||
|
||||
tcc)
|
||||
# tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
|
||||
# FIXME: That version still under development at the moment of writing.
|
||||
# Make that this statement remains true also for stable, released
|
||||
# versions.
|
||||
# It will wrap lines (doesn't matter whether long or short) with a
|
||||
# trailing '\', as in:
|
||||
#
|
||||
# foo.o : \
|
||||
# foo.c \
|
||||
# foo.h \
|
||||
#
|
||||
# It will put a trailing '\' even on the last line, and will use leading
|
||||
# spaces rather than leading tabs (at least since its commit 0394caf7
|
||||
# "Emit spaces for -MD").
|
||||
"$@" -MD -MF "$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
# Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
|
||||
# We have to change lines of the first kind to '$object: \'.
|
||||
sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
|
||||
# And for each line of the second kind, we have to emit a 'dep.h:'
|
||||
# dummy dependency, to avoid the deleted-header problem.
|
||||
sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
## The order of this option in the case statement is important, since the
|
||||
## shell code in configure will try each of these formats in the order
|
||||
## listed in this file. A plain '-MD' option would be understood by many
|
||||
## compilers, so we must ensure this comes after the gcc and icc options.
|
||||
pgcc)
|
||||
# Portland's C compiler understands '-MD'.
|
||||
# Will always output deps to 'file.d' where file is the root name of the
|
||||
# source file under compilation, even if file resides in a subdirectory.
|
||||
# The object file name does not affect the name of the '.d' file.
|
||||
# pgcc 10.2 will output
|
||||
# foo.o: sub/foo.c sub/foo.h
|
||||
# and will wrap long lines using '\' :
|
||||
# foo.o: sub/foo.c ... \
|
||||
# sub/foo.h ... \
|
||||
# ...
|
||||
set_dir_from "$object"
|
||||
# Use the source, not the object, to determine the base name, since
|
||||
# that's sadly what pgcc will do too.
|
||||
set_base_from "$source"
|
||||
tmpdepfile=$base.d
|
||||
|
||||
# For projects that build the same source file twice into different object
|
||||
# files, the pgcc approach of using the *source* file root name can cause
|
||||
# problems in parallel builds. Use a locking strategy to avoid stomping on
|
||||
# the same $tmpdepfile.
|
||||
lockdir=$base.d-lock
|
||||
trap "
|
||||
echo '$0: caught signal, cleaning up...' >&2
|
||||
rmdir '$lockdir'
|
||||
exit 1
|
||||
" 1 2 13 15
|
||||
numtries=100
|
||||
i=$numtries
|
||||
while test $i -gt 0; do
|
||||
# mkdir is a portable test-and-set.
|
||||
if mkdir "$lockdir" 2>/dev/null; then
|
||||
# This process acquired the lock.
|
||||
"$@" -MD
|
||||
stat=$?
|
||||
# Release the lock.
|
||||
rmdir "$lockdir"
|
||||
break
|
||||
else
|
||||
# If the lock is being held by a different process, wait
|
||||
# until the winning process is done or we timeout.
|
||||
while test -d "$lockdir" && test $i -gt 0; do
|
||||
sleep 1
|
||||
i=`expr $i - 1`
|
||||
done
|
||||
fi
|
||||
i=`expr $i - 1`
|
||||
done
|
||||
trap - 1 2 13 15
|
||||
if test $i -le 0; then
|
||||
echo "$0: failed to acquire lock after $numtries attempts" >&2
|
||||
echo "$0: check lockdir '$lockdir'" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
# Each line is of the form `foo.o: dependent.h',
|
||||
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
|
||||
# Do two passes, one to just change these to
|
||||
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
|
||||
# Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
# correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
|
||||
| sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
hp2)
|
||||
# The "hp" stanza above does not work with aCC (C++) and HP's ia64
|
||||
# compilers, which have integrated preprocessors. The correct option
|
||||
# to use with these is +Maked; it writes dependencies to a file named
|
||||
# 'foo.d', which lands next to the object file, wherever that
|
||||
# happens to be.
|
||||
# Much of this is similar to the tru64 case; see comments there.
|
||||
set_dir_from "$object"
|
||||
set_base_from "$object"
|
||||
if test "$libtool" = yes; then
|
||||
tmpdepfile1=$dir$base.d
|
||||
tmpdepfile2=$dir.libs/$base.d
|
||||
"$@" -Wc,+Maked
|
||||
else
|
||||
tmpdepfile1=$dir$base.d
|
||||
tmpdepfile2=$dir$base.d
|
||||
"$@" +Maked
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
if test -f "$tmpdepfile"; then
|
||||
sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
|
||||
# Add 'dependent.h:' lines.
|
||||
sed -ne '2,${
|
||||
s/^ *//
|
||||
s/ \\*$//
|
||||
s/$/:/
|
||||
p
|
||||
}' "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
make_dummy_depfile
|
||||
fi
|
||||
rm -f "$tmpdepfile" "$tmpdepfile2"
|
||||
;;
|
||||
|
||||
tru64)
|
||||
# The Tru64 compiler uses -MD to generate dependencies as a side
|
||||
# effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
|
||||
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
|
||||
# dependencies in 'foo.d' instead, so we check for that too.
|
||||
# Subdirectories are respected.
|
||||
set_dir_from "$object"
|
||||
set_base_from "$object"
|
||||
|
||||
if test "$libtool" = yes; then
|
||||
# Libtool generates 2 separate objects for the 2 libraries. These
|
||||
# two compilations output dependencies in $dir.libs/$base.o.d and
|
||||
# in $dir$base.o.d. We have to check for both files, because
|
||||
# one of the two compilations can be disabled. We should prefer
|
||||
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
|
||||
# automatically cleaned when .libs/ is deleted, while ignoring
|
||||
# the former would cause a distcleancheck panic.
|
||||
tmpdepfile1=$dir$base.o.d # libtool 1.5
|
||||
tmpdepfile2=$dir.libs/$base.o.d # Likewise.
|
||||
tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504
|
||||
"$@" -Wc,-MD
|
||||
else
|
||||
tmpdepfile1=$dir$base.d
|
||||
tmpdepfile2=$dir$base.d
|
||||
tmpdepfile3=$dir$base.d
|
||||
"$@" -MD
|
||||
fi
|
||||
|
||||
stat=$?
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
# Same post-processing that is required for AIX mode.
|
||||
aix_post_process_depfile
|
||||
;;
|
||||
|
||||
msvc7)
|
||||
if test "$libtool" = yes; then
|
||||
showIncludes=-Wc,-showIncludes
|
||||
else
|
||||
showIncludes=-showIncludes
|
||||
fi
|
||||
"$@" $showIncludes > "$tmpdepfile"
|
||||
stat=$?
|
||||
grep -v '^Note: including file: ' "$tmpdepfile"
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
# The first sed program below extracts the file names and escapes
|
||||
# backslashes for cygpath. The second sed program outputs the file
|
||||
# name when reading, but also accumulates all include files in the
|
||||
# hold buffer in order to output them again at the end. This only
|
||||
# works with sed implementations that can handle large buffers.
|
||||
sed < "$tmpdepfile" -n '
|
||||
/^Note: including file: *\(.*\)/ {
|
||||
s//\1/
|
||||
s/\\/\\\\/g
|
||||
p
|
||||
}' | $cygpath_u | sort -u | sed -n '
|
||||
s/ /\\ /g
|
||||
s/\(.*\)/'"$tab"'\1 \\/p
|
||||
s/.\(.*\) \\/\1:/
|
||||
H
|
||||
$ {
|
||||
s/.*/'"$tab"'/
|
||||
G
|
||||
p
|
||||
}' >> "$depfile"
|
||||
echo >> "$depfile" # make sure the fragment doesn't end with a backslash
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvc7msys)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
#nosideeffect)
|
||||
# This comment above is used by automake to tell side-effect
|
||||
# dependency tracking mechanisms from slower ones.
|
||||
|
||||
dashmstdout)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout, regardless of -o.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
# Remove '-o $object'.
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
test -z "$dashmflag" && dashmflag=-M
|
||||
# Require at least two characters before searching for ':'
|
||||
# in the target name. This is to cope with DOS-style filenames:
|
||||
# a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
|
||||
"$@" $dashmflag |
|
||||
sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
# Some versions of the HPUX 10.20 sed can't process this sed invocation
|
||||
# correctly. Breaking it into two sed invocations is a workaround.
|
||||
tr ' ' "$nl" < "$tmpdepfile" \
|
||||
| sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
|
||||
| sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
dashXmstdout)
|
||||
# This case only exists to satisfy depend.m4. It is never actually
|
||||
# run, as this mode is specially recognized in the preamble.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
makedepend)
|
||||
"$@" || exit $?
|
||||
# Remove any Libtool call
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
# X makedepend
|
||||
shift
|
||||
cleared=no eat=no
|
||||
for arg
|
||||
do
|
||||
case $cleared in
|
||||
no)
|
||||
set ""; shift
|
||||
cleared=yes ;;
|
||||
esac
|
||||
if test $eat = yes; then
|
||||
eat=no
|
||||
continue
|
||||
fi
|
||||
case "$arg" in
|
||||
-D*|-I*)
|
||||
set fnord "$@" "$arg"; shift ;;
|
||||
# Strip any option that makedepend may not understand. Remove
|
||||
# the object too, otherwise makedepend will parse it as a source file.
|
||||
-arch)
|
||||
eat=yes ;;
|
||||
-*|$object)
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"; shift ;;
|
||||
esac
|
||||
done
|
||||
obj_suffix=`echo "$object" | sed 's/^.*\././'`
|
||||
touch "$tmpdepfile"
|
||||
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
|
||||
rm -f "$depfile"
|
||||
# makedepend may prepend the VPATH from the source file name to the object.
|
||||
# No need to regex-escape $object, excess matching of '.' is harmless.
|
||||
sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
|
||||
# Some versions of the HPUX 10.20 sed can't process the last invocation
|
||||
# correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed '1,2d' "$tmpdepfile" \
|
||||
| tr ' ' "$nl" \
|
||||
| sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
|
||||
| sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile" "$tmpdepfile".bak
|
||||
;;
|
||||
|
||||
cpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
# Remove '-o $object'.
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
"$@" -E \
|
||||
| sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
|
||||
-e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
|
||||
| sed '$ s: \\$::' > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
cat < "$tmpdepfile" >> "$depfile"
|
||||
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvisualcpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case "$arg" in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
|
||||
set fnord "$@"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
"$@" -E 2>/dev/null |
|
||||
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
|
||||
echo "$tab" >> "$depfile"
|
||||
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvcmsys)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
none)
|
||||
exec "$@"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Unknown depmode $depmode" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
@ -1,180 +0,0 @@
|
||||
#!/bin/sh
|
||||
# In a git/autoconf/automake-enabled project with a NEWS file and a version-
|
||||
# controlled .prev-version file, automate the procedure by which we record
|
||||
# the date, release-type and version string in the NEWS file. That commit
|
||||
# will serve to identify the release, so apply a signed tag to it as well.
|
||||
VERSION=2018-03-07.03 # UTC
|
||||
|
||||
# Make sure we've evaluated scripts we depend on.
|
||||
test -z "$progpath" && . `echo "$0" |${SED-sed} 's|[^/]*$||'`/funclib.sh
|
||||
|
||||
# Note: this is a bash script (could be zsh or dash)
|
||||
|
||||
# Copyright (C) 2009-2022 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# Written by Jim Meyering
|
||||
|
||||
ME=$(basename "$0")
|
||||
warn() { printf '%s: %s\n' "$ME" "$*" >&2; }
|
||||
die() { warn "$*"; exit 1; }
|
||||
|
||||
help()
|
||||
{
|
||||
cat <<EOF
|
||||
Usage: $ME [OPTION...] VERSION RELEASE_TYPE
|
||||
|
||||
Run this script from top_srcdir to perform the final pre-release NEWS
|
||||
update in which the date, release-type and version string are
|
||||
recorded. Commit that result with a log entry marking the release,
|
||||
and apply a signed tag. Run it from your project's top-level
|
||||
directory.
|
||||
|
||||
Requirements:
|
||||
- you use git for version-control
|
||||
- a version-controlled .prev-version file
|
||||
- a NEWS file, with line 3 identical to this:
|
||||
$noteworthy_stub
|
||||
|
||||
Options:
|
||||
--branch=BRANCH set release branch (default: $branch)
|
||||
-C, --builddir=DIR location of (configured) Makefile (default: $builddir)
|
||||
--help print this help, then exit
|
||||
--version print version number, then exit
|
||||
|
||||
EXAMPLE:
|
||||
To update NEWS and tag the beta 8.1 release of coreutils, I would run this:
|
||||
|
||||
$ME 8.1 beta
|
||||
|
||||
Report bugs and patches to <bug-gnulib@gnu.org>.
|
||||
EOF
|
||||
exit
|
||||
}
|
||||
|
||||
version()
|
||||
{
|
||||
year=$(echo "$VERSION" | sed 's/[^0-9].*//')
|
||||
cat <<EOF
|
||||
$ME $VERSION
|
||||
Copyright (C) $year Free Software Foundation, Inc,
|
||||
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
|
||||
This is free software: you are free to change and redistribute it.
|
||||
There is NO WARRANTY, to the extent permitted by law.
|
||||
EOF
|
||||
exit
|
||||
}
|
||||
|
||||
## ------ ##
|
||||
## Main. ##
|
||||
## ------ ##
|
||||
|
||||
# Constants.
|
||||
noteworthy='* Noteworthy changes in release'
|
||||
noteworthy_stub="$noteworthy ?.? (????-??-??) [?]"
|
||||
|
||||
# Variables.
|
||||
branch=$(git branch | sed -ne '/^\* /{s///;p;q;}')
|
||||
builddir=.
|
||||
|
||||
while test $# != 0
|
||||
do
|
||||
# Handle --option=value by splitting apart and putting back on argv.
|
||||
case $1 in
|
||||
--*=*)
|
||||
opt=$(echo "$1" | sed -e 's/=.*//')
|
||||
val=$(echo "$1" | sed -e 's/[^=]*=//')
|
||||
shift
|
||||
set dummy "$opt" "$val" "$@"; shift
|
||||
;;
|
||||
esac
|
||||
|
||||
case $1 in
|
||||
--help|--version) ${1#--};;
|
||||
--branch) shift; branch=$1; shift ;;
|
||||
-C|--builddir) shift; builddir=$1; shift ;;
|
||||
--*) die "unrecognized option: $1";;
|
||||
*) break;;
|
||||
esac
|
||||
done
|
||||
|
||||
test $# = 2 \
|
||||
|| die "Usage: $ME [OPTION...] VERSION TYPE"
|
||||
|
||||
ver=$1
|
||||
type=$2
|
||||
|
||||
|
||||
## ---------------------- ##
|
||||
## First, sanity checks. ##
|
||||
## ---------------------- ##
|
||||
|
||||
# Verify that $ver looks like a version number, and...
|
||||
echo "$ver"|grep -E '^[0-9][0-9.]*[0-9]$' > /dev/null \
|
||||
|| die "invalid version: $ver"
|
||||
prev_ver=$(cat .prev-version) \
|
||||
|| die 'failed to determine previous version number from .prev-version'
|
||||
|
||||
# Verify that $ver is sensible (> .prev-version).
|
||||
func_lt_ver "$prev_ver" "$ver" \
|
||||
|| die "invalid version: $ver (<= $prev_ver)"
|
||||
|
||||
case $type in
|
||||
alpha|beta|stable) ;;
|
||||
*) die "invalid release type: $type";;
|
||||
esac
|
||||
|
||||
# No local modifications allowed.
|
||||
case $(git diff-index --name-only HEAD) in
|
||||
'') ;;
|
||||
*) die 'this tree is dirty; commit your changes first';;
|
||||
esac
|
||||
|
||||
# Ensure the current branch name is correct:
|
||||
curr_br=$(git rev-parse --symbolic-full-name HEAD)
|
||||
test "$curr_br" = "refs/heads/$branch" || die not on branch $branch
|
||||
|
||||
# Extract package name from Makefile.
|
||||
Makefile=$builddir/Makefile
|
||||
pkg=$(sed -n 's/^PACKAGE = \(.*\)/\1/p' "$Makefile") \
|
||||
|| die "failed to determine package name from $Makefile"
|
||||
|
||||
# Check that line 3 of NEWS is the stub line about to be replaced.
|
||||
test "$(sed -n 3p NEWS)" = "$noteworthy_stub" \
|
||||
|| die "line 3 of NEWS must be exactly '$noteworthy_stub'"
|
||||
|
||||
## --------------- ##
|
||||
## Then, changes. ##
|
||||
## --------------- ##
|
||||
|
||||
# Update NEWS to have today's date, plus desired version number and $type.
|
||||
perl -MPOSIX -ni -e 'my $today = strftime "%F", localtime time;' \
|
||||
-e 'my ($type, $ver) = qw('"$type $ver"');' \
|
||||
-e 'my $pfx = "'"$noteworthy"'";' \
|
||||
-e 'print $.==3 ? "$pfx $ver ($today) [$type]\n" : $_' \
|
||||
NEWS || die 'failed to update NEWS'
|
||||
|
||||
printf "version $ver\n\n* NEWS: Record release date.\n" \
|
||||
| git commit -F - -a || die 'git commit failed'
|
||||
git tag -s -m "$pkg $ver" v$ver HEAD || die 'git tag failed'
|
||||
|
||||
# Local variables:
|
||||
# indent-tabs-mode: nil
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "VERSION="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: " # UTC"
|
||||
# End:
|
||||
@ -1,96 +0,0 @@
|
||||
#! /bin/sh
|
||||
|
||||
# edit-readme-alpha - edit README file for alpha releases
|
||||
# Copyright (C) 2010-2019, 2021-2022 Free Software Foundation, Inc.
|
||||
# Written by Gary V. Vaughan, 2010
|
||||
#
|
||||
# This file is part of GNU Libtool.
|
||||
#
|
||||
# GNU Libtool 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.
|
||||
#
|
||||
# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy
|
||||
# can be downloaded from http://www.gnu.org/licenses/gpl.html,
|
||||
# or obtained by writing to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
####
|
||||
|
||||
# We used to maintain separate (but extremely similiar!) README and
|
||||
# README.alpha files, and had 'make dist' include the right one in a
|
||||
# distribution based on the contests of '$(VERSION)'.
|
||||
#
|
||||
# Now, we have 'make dist' call this script to tweak the first paragraph
|
||||
# of README in situ, to be more suitable for an alpha quality release.
|
||||
|
||||
EXIT_SUCCESS=0
|
||||
EXIT_FAILURE=1
|
||||
|
||||
# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
|
||||
# is ksh but when the shell is invoked as "sh" and the current value of
|
||||
# the _XPG environment variable is not equal to 1 (one), the special
|
||||
# positional parameter $0, within a function call, is the name of the
|
||||
# function.
|
||||
progpath=$0
|
||||
|
||||
# The name of this program:
|
||||
progname=`echo "$progpath" |sed 's|^.*/||'`
|
||||
|
||||
|
||||
# func_fatal_error ARG...
|
||||
# -----------------------
|
||||
# Echo program name prefixed message to standard error, and exit.
|
||||
func_fatal_error ()
|
||||
{
|
||||
echo "$progname: $*" >&2
|
||||
exit $EXIT_FAILURE
|
||||
}
|
||||
|
||||
|
||||
for file in "$@"; do
|
||||
# Assume that read-only README indicates that we are running inside
|
||||
# the latter part of a 'make distcheck'.
|
||||
test -w "$file" || {
|
||||
echo "$progname: not editing non-writeable '$file' (distcheck?)" >&2
|
||||
continue
|
||||
}
|
||||
|
||||
# Did we already in-place edited this file?
|
||||
matched=`sed -n -e '/^This is an alpha testing release/,/a consistent, portable interface\.$/p' $file \
|
||||
|wc -l |sed 's|^ *||'`
|
||||
test 3 = "$matched" && {
|
||||
echo "$progname: $file already edited" >&2
|
||||
continue
|
||||
}
|
||||
|
||||
# Make sure the paragraph we are matching has not been edited since
|
||||
# this script was written.
|
||||
matched=`sed -n -e '/^\[GNU Libtool\]\[libtool\] is/,/^consistent, portable interface\.$/p' $file \
|
||||
|wc -l |sed 's|^ *||'`
|
||||
test 3 = "$matched" \
|
||||
|| func_fatal_error "$file format has changed, please fix '$0'"
|
||||
|
||||
# Don't leave file droppings.
|
||||
trap 'x=$?; rm $file.T; exit $x' 1 2 13 15
|
||||
|
||||
# Edit the first paragraph to be suitable for an alpha release.
|
||||
sed '/^\[GNU Libtool\]\[libtool\] is/,/^consistent, portable interface\.$/c\
|
||||
This is an alpha testing release of [GNU Libtool][libtool], a generic\
|
||||
library support script. [Libtool][] hides the complexity of using shared\
|
||||
libraries behind a consistent, portable interface.' $file > $file.T
|
||||
|
||||
# Diagnose redirection failure.
|
||||
test -f "$file.T" || func_fatal_error "Unable to write $file.T"
|
||||
|
||||
# Overwrite the original file with our edited version.
|
||||
mv $file.T $file || func_fatal_error "Unable to edit $file"
|
||||
done
|
||||
|
||||
exit $EXIT_SUCCESS
|
||||
@ -1,486 +0,0 @@
|
||||
#! /bin/sh
|
||||
|
||||
# Extract macro arguments from autotools input with GNU M4.
|
||||
# Written by Gary V. Vaughan, 2010
|
||||
#
|
||||
# This is free software. There is NO warranty; not even for
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
# Copyright (C) 2010-2019, 2021 Bootstrap Authors
|
||||
#
|
||||
# This file is dual licensed under the terms of the MIT license
|
||||
# <https://opensource.org/license/MIT>, and GPL version 2 or later
|
||||
# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
|
||||
# these licenses when using or redistributing this software or any of
|
||||
# the files within it. See the URLs above, or the file `LICENSE`
|
||||
# included in the Bootstrap distribution for the full license texts.
|
||||
|
||||
# Please report bugs or propose patches to:
|
||||
# <https://github.com/gnulib-modules/bootstrap/issues>
|
||||
|
||||
# Make sure we've evaluated scripts we depend on.
|
||||
test -z "$progpath" && . `echo "$0" |${SED-sed} 's|[^/]*$||'`/funclib.sh
|
||||
test extract-trace = "$progname" && . `echo "$0" |${SED-sed} 's|[^/]*$||'`/options-parser
|
||||
|
||||
# Set a version string.
|
||||
scriptversion=2019-02-19.15; # UTC
|
||||
|
||||
|
||||
## ------ ##
|
||||
## Usage. ##
|
||||
## ------ ##
|
||||
|
||||
# Run './extract-trace --help' for help with using this script from the
|
||||
# command line.
|
||||
#
|
||||
# Or source first 'options-parser' and then this file into your own
|
||||
# scripts in order to make use of the function and variable framework
|
||||
# they define, and also to avoid the overhead of forking to run this
|
||||
# script in its own process on every call.
|
||||
|
||||
|
||||
|
||||
## ----------------- ##
|
||||
## Helper functions. ##
|
||||
## ----------------- ##
|
||||
|
||||
# This section contains the helper functions used by the rest of
|
||||
# 'extract-trace'.
|
||||
|
||||
|
||||
# func_autoconf_configure MAYBE-CONFIGURE-FILE
|
||||
# --------------------------------------------
|
||||
# Ensure that MAYBE-CONFIGURE-FILE is the name of a file in the current
|
||||
# directory that contains an uncommented call to AC_INIT.
|
||||
func_autoconf_configure ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
_G_sed_no_comment='
|
||||
s|#.*$||
|
||||
s|^dnl .*$||
|
||||
s| dnl .*$||'
|
||||
_G_ac_init=
|
||||
|
||||
# If we were passed a genuine file, make sure it calls AC_INIT.
|
||||
test -f "$1" \
|
||||
&& _G_ac_init=`$SED "$_G_sed_no_comment" "$1" |$GREP AC_INIT`
|
||||
|
||||
# Otherwise it is not a genuine Autoconf input file.
|
||||
test -n "$_G_ac_init"
|
||||
_G_status=$?
|
||||
|
||||
test 0 -ne "$_G_status" \
|
||||
&& func_verbose "'$1' not using Autoconf"
|
||||
|
||||
(exit $_G_status)
|
||||
}
|
||||
|
||||
|
||||
# func_tool_version_output CMD [FATAL-ERROR-MSG]
|
||||
# ----------------------------------------------
|
||||
# Attempt to run 'CMD --version', discarding errors. The output can be
|
||||
# ignored by redirecting stdout, and this function used simply to test
|
||||
# whether the command exists and exits normally when passed a
|
||||
# '--version' argument.
|
||||
# When FATAL-ERROR-MSG is given, then this function will display the
|
||||
# message and exit if running 'CMD --version' returns a non-zero exit
|
||||
# status.
|
||||
func_tool_version_output ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
_G_cmd=$1
|
||||
_G_fatal_error_msg=$2
|
||||
|
||||
# Some tools, like 'git2cl' produce thousands of lines of output
|
||||
# unless stdin is /dev/null - in that case we want to return
|
||||
# successfully without saving all of that output. Other tools,
|
||||
# such as 'help2man' exit with a non-zero status when stdin comes
|
||||
# from /dev/null, so we re-execute without /dev/null if that
|
||||
# happens. This means that occasionally, the output from both calls
|
||||
# ends up in the result, but the alternative would be to discard the
|
||||
# output from one call, and hope the other produces something useful.
|
||||
{ $_G_cmd --version </dev/null || $_G_cmd --version; } 2>/dev/null
|
||||
_G_status=$?
|
||||
|
||||
test 0 -ne "$_G_status" && test -n "$_G_fatal_error_msg" \
|
||||
&& func_fatal_error "$_G_fatal_error_msg"
|
||||
|
||||
(exit $_G_status)
|
||||
}
|
||||
|
||||
|
||||
# func_tool_version_number CMD [FATAL-ERROR-MSG]
|
||||
# ----------------------------------------------
|
||||
# Pass arguments to func_tool_version_output, but set
|
||||
# $func_tool_version_number_result to the last dot delimited digit string
|
||||
# on the first line of output.
|
||||
func_tool_version_number ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
_G_verout=`func_tool_version_output "$@"`
|
||||
_G_status=$?
|
||||
|
||||
# A version number starts with a digit following a space on the first
|
||||
# line of output from `--version`.
|
||||
_G_verout=`echo "$_G_verout" |sed 1q`
|
||||
if test -n "$_G_verout"; then
|
||||
_G_vernum=`expr "$_G_verout" : '.* \([0-9][^ ]*\)'`
|
||||
fi
|
||||
|
||||
if test -n "$_G_vernum"; then
|
||||
printf '%s\n' "$_G_vernum"
|
||||
else
|
||||
printf '%s\n' "$_G_verout"
|
||||
fi
|
||||
|
||||
(exit $_G_status)
|
||||
}
|
||||
|
||||
|
||||
# func_find_tool ENVVAR NAMES...
|
||||
# ------------------------------
|
||||
# Search for a required program. Use the value of ENVVAR, if set,
|
||||
# otherwise find the first of the NAMES that can be run (i.e.,
|
||||
# supports --version). If found, set ENVVAR to the program name,
|
||||
# die otherwise.
|
||||
func_find_tool ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
_G_find_tool_envvar=$1
|
||||
shift
|
||||
_G_find_tool_names=$@
|
||||
eval "_G_find_tool_res=\$$_G_find_tool_envvar"
|
||||
if test -n "$_G_find_tool_res"; then
|
||||
_G_find_tool_error_prefix="\$$find_tool_envvar: "
|
||||
else
|
||||
_G_find_tool_res=
|
||||
_G_bestver=
|
||||
for _G_prog
|
||||
do
|
||||
_G_find_tool_save_IFS=$IFS
|
||||
IFS=${PATH_SEPARATOR-:}
|
||||
for _G_dir in $PATH; do
|
||||
IFS=$_G_find_tool_save_IFS
|
||||
_G_progpath=$_G_dir/$_G_prog
|
||||
test -r "$_G_progpath" && {
|
||||
_G_curver=`func_tool_version_number $_G_progpath`
|
||||
case $_G_bestver,$_G_curver in
|
||||
,)
|
||||
# first non--version responsive prog sticks!
|
||||
test -n "$_G_progpath" || _G_find_tool_res=$_G_progpath
|
||||
;;
|
||||
,*)
|
||||
# first --version responsive prog beats non--version responsive!
|
||||
_G_find_tool_res=$_G_progpath
|
||||
_G_bestver=$_G_curver
|
||||
;;
|
||||
*,*)
|
||||
# another --version responsive prog must be newer to beat previous one!
|
||||
test "x$_G_curver" = "x$_G_bestver" \
|
||||
|| func_lt_ver "$_G_curver" "$_G_bestver" \
|
||||
|| {
|
||||
_G_find_tool_res=$_G_progpath
|
||||
_G_bestver=$_G_curver
|
||||
}
|
||||
;;
|
||||
esac
|
||||
}
|
||||
done
|
||||
IFS=$_G_find_tool_save_IFS
|
||||
done
|
||||
fi
|
||||
if test -n "$_G_find_tool_res"; then
|
||||
func_tool_version_number >/dev/null $_G_find_tool_res "\
|
||||
${_G_find_tool_error_prefix}Cannot run '$_G_find_tool_res --version'"
|
||||
|
||||
# Make sure the result is exported to the environment for children
|
||||
# to use.
|
||||
eval "$_G_find_tool_envvar=\$_G_find_tool_res"
|
||||
eval "export $_G_find_tool_envvar"
|
||||
else
|
||||
func_error "\
|
||||
One of these is required:
|
||||
$_G_find_tool_names"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
|
||||
## -------------------- ##
|
||||
## Resource management. ##
|
||||
## -------------------- ##
|
||||
|
||||
# This section contains definitions for functions that each ensure a
|
||||
# particular resource (a file, or a non-empty configuration variable for
|
||||
# example) is available, and if appropriate to extract default values
|
||||
# from pertinent package files. Where a variable already has a non-
|
||||
# empty value (as set by the package's 'bootstrap.conf'), that value is
|
||||
# used in preference to deriving the default. Call them using their
|
||||
# associated 'require_*' variable to ensure that they are executed, at
|
||||
# most, once.
|
||||
#
|
||||
# It's entirely deliberate that calling these functions can set
|
||||
# variables that don't obey the namespace limitations obeyed by the rest
|
||||
# of this file, in order that that they be as useful as possible to
|
||||
# callers.
|
||||
|
||||
|
||||
# require_configure_ac
|
||||
# --------------------
|
||||
# Ensure that there is a 'configure.ac' or 'configure.in' file in the
|
||||
# current directory that contains an uncommented call to AC_INIT, and
|
||||
# that '$configure_ac' contains its name.
|
||||
require_configure_ac=func_require_configure_ac
|
||||
func_require_configure_ac ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
test -z "$configure_ac" \
|
||||
&& func_autoconf_configure configure.ac && configure_ac=configure.ac
|
||||
test -z "$configure_ac" \
|
||||
&& func_autoconf_configure configure.in && configure_ac=configure.in
|
||||
test -z "$configure_ac" \
|
||||
|| func_verbose "found '$configure_ac'"
|
||||
|
||||
require_configure_ac=:
|
||||
}
|
||||
|
||||
|
||||
# require_gnu_m4
|
||||
# --------------
|
||||
# Search for GNU M4, and export it in $M4.
|
||||
require_gnu_m4=func_require_gnu_m4
|
||||
func_require_gnu_m4 ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
test -n "$M4" || {
|
||||
# Find the first m4 binary that responds to --version.
|
||||
func_find_tool M4 gm4 gnum4 m4
|
||||
}
|
||||
|
||||
test -n "$M4" || func_fatal_error "\
|
||||
Please install GNU M4, or 'export M4=/path/to/gnu/m4'."
|
||||
|
||||
func_verbose "export M4='$M4'"
|
||||
|
||||
# Make sure the search result is visible to subshells
|
||||
export M4
|
||||
|
||||
require_gnu_m4=:
|
||||
}
|
||||
|
||||
|
||||
## --------------- ##
|
||||
## Core functions. ##
|
||||
## --------------- ##
|
||||
|
||||
# This section contains the high level functions used when calling this
|
||||
# file as a script. 'func_extract_trace' is probably the only one that you
|
||||
# won't want to replace if you source this file into your own script.
|
||||
|
||||
|
||||
# func_extract_trace MACRO_NAMES [FILENAME]...
|
||||
# --------------------------------------------
|
||||
# set '$func_extract_trace_result' to a colon delimited list of arguments
|
||||
# to any of the comma separated list of MACRO_NAMES in FILENAME. If no
|
||||
# FILENAME is given, then '$configure_ac' is assumed.
|
||||
func_extract_trace ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
$require_configure_ac
|
||||
$require_gnu_m4
|
||||
|
||||
_G_m4_traces=`$ECHO "--trace=$1" |$SED 's%,% --trace=%g'`
|
||||
_G_re_macros=`$ECHO "($1)" |$SED 's%,%|%g'`
|
||||
_G_macros="$1"; shift
|
||||
test $# -gt 0 || {
|
||||
set dummy $configure_ac
|
||||
shift
|
||||
}
|
||||
|
||||
# Generate an error if the first file is missing
|
||||
<"$1"
|
||||
|
||||
# Sadly, we can't use 'autom4te' tracing to extract macro arguments,
|
||||
# because it complains about things we want to ignore at bootstrap
|
||||
# time - like missing m4_include files; AC_PREREQ being newer than
|
||||
# the installed autoconf; and returns nothing when tracing
|
||||
# 'AM_INIT_AUTOMAKE' when aclocal hasn't been generated yet.
|
||||
#
|
||||
# The following tries to emulate a less persnickety version of (and
|
||||
# due to not having to wait for Perl startup on every invocation,
|
||||
# it's probably faster too):
|
||||
#
|
||||
# autom4te --language=Autoconf --trace=$my_macro:\$% "$@"
|
||||
#
|
||||
# First we give a minimal set of macro declarations to M4 to prime
|
||||
# it for reading Autoconf macros, while still providing some of the
|
||||
# functionality generally used at m4-time to supply dynamic
|
||||
# arguments to Autocof functions, but without following
|
||||
# 'm4_s?include' files.
|
||||
_G_mini='
|
||||
dnl Initialisation.
|
||||
m4_changequote([,])
|
||||
m4_define([m4_copy], [m4_define([$2], m4_defn([$1]))])
|
||||
m4_define([m4_rename], [m4_copy([$1], [$2])m4_undefine([$1])])
|
||||
|
||||
dnl Replace macros which may abort m4 with a no-op variant.
|
||||
m4_pushdef([m4_assert])
|
||||
m4_pushdef([m4_exit])
|
||||
m4_pushdef([m4_fatal])
|
||||
m4_pushdef([m4_m4exit])
|
||||
|
||||
dnl Replace macros that might break stderr of m4.
|
||||
m4_pushdef([m4_errprint])
|
||||
m4_pushdef([m4_errprintn])
|
||||
m4_pushdef([m4_include])
|
||||
m4_pushdef([m4_warn])
|
||||
|
||||
dnl Avoid side-effects of tracing by extract-trace.
|
||||
m4_pushdef([m4_maketemp])
|
||||
m4_pushdef([m4_mkstemp])
|
||||
|
||||
dnl TODO: reasons for this
|
||||
m4_pushdef([m4_dnl])
|
||||
m4_pushdef([m4_m4wrap])
|
||||
|
||||
dnl Copy and rename macros not handled by "m4 --prefix".
|
||||
m4_define([dnl], [m4_builtin([dnl])])
|
||||
m4_copy([m4_define], [m4_defun])
|
||||
m4_rename([m4_ifelse], [m4_if])
|
||||
m4_rename([m4_patsubst], [m4_bpatsubst])
|
||||
m4_rename([m4_regexp], [m4_bregexp])
|
||||
|
||||
dnl "m4sugar.mini" - useful m4-time macros for dynamic arguments.
|
||||
dnl If we discover packages that need more m4 macros defined in
|
||||
dnl order to bootstrap correctly, add them here:
|
||||
m4_define([m4_bmatch],
|
||||
[m4_if([$#], 0, [], [$#], 1, [], [$#], 2, [$2],
|
||||
[m4_if(m4_bregexp([$1], [$2]), -1,
|
||||
[$0([$1], m4_shift3($@))], [$3])])])
|
||||
m4_define([m4_ifndef], [m4_ifdef([$1], [$3], [$2])])
|
||||
m4_define([m4_ifset],
|
||||
[m4_ifdef([$1], [m4_ifval(m4_defn([$1]), [$2], [$3])], [$3])])
|
||||
m4_define([m4_require], [$1])
|
||||
m4_define([m4_shift3], [m4_shift(m4shift(m4shift($@)))])
|
||||
|
||||
dnl "autoconf.mini" - things from autoconf macros we care about.
|
||||
m4_copy([m4_defun], [AC_DEFUN])
|
||||
|
||||
dnl Dummy definitions for the macros we want to trace.
|
||||
dnl AM_INIT_AUTOMAKE at least produces no trace without this.
|
||||
'
|
||||
|
||||
_G_save=$IFS
|
||||
IFS=,
|
||||
for _G_macro in $_G_macros; do
|
||||
IFS=$_G_save
|
||||
func_append _G_mini "AC_DEFUN([$_G_macro])$nl"
|
||||
done
|
||||
IFS=$_G_save
|
||||
|
||||
# We discard M4's stdout, but the M4 trace output from reading our
|
||||
# "autoconf.mini" followed by any other files passed to this
|
||||
# function is then scanned by sed to transform it into a colon
|
||||
# delimited argument list assigned to a shell variable.
|
||||
_G_transform='s|#.*$||; s|^dnl .*$||; s| dnl .*$||;'
|
||||
|
||||
# Unfortunately, alternation in regexp addresses doesn't work in at
|
||||
# least BSD (and hence Mac OS X) sed, so we have to append a capture
|
||||
# and print block for each traced macro to the sed transform script.
|
||||
_G_save=$IFS
|
||||
IFS=,
|
||||
for _G_macro in $_G_macros; do
|
||||
IFS=$_G_save
|
||||
func_append _G_transform '
|
||||
/^m4trace: -1- '"$_G_macro"'/ {
|
||||
s|^m4trace: -1- '"$_G_macro"'[([]*||
|
||||
s|], [[]|:|g
|
||||
s|[])]*$|:|
|
||||
s|\(.\):$|\1|
|
||||
p
|
||||
}'
|
||||
done
|
||||
IFS=$_G_save
|
||||
|
||||
# Save the command pipeline results for further use by callers of
|
||||
# this function.
|
||||
func_extract_trace_result=`$ECHO "$_G_mini" \
|
||||
|$M4 -daq --prefix $_G_m4_traces - "$@" 2>&1 1>/dev/null \
|
||||
|$SED -n -e "$_G_transform"`
|
||||
}
|
||||
|
||||
|
||||
# func_extract_trace_first MACRO_NAMES [FILENAME]...
|
||||
# --------------------------------------------------
|
||||
# Exactly like func_extract_trace, except that only the first argument
|
||||
# to the first invocation of one of the comma separated MACRO_NAMES is
|
||||
# returned in '$func_extract_trace_first_result'.
|
||||
func_extract_trace_first ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
func_extract_trace ${1+"$@"}
|
||||
func_extract_trace_first_result=`$ECHO "$func_extract_trace_result" \
|
||||
|$SED -e 's|:.*$||g' -e 1q`
|
||||
}
|
||||
|
||||
|
||||
# func_main [ARG]...
|
||||
# ------------------
|
||||
func_main ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
# Configuration.
|
||||
usage='$progname MACRO_NAME FILE [...]'
|
||||
|
||||
long_help_message='
|
||||
The first argument to this program is the name of an autotools macro
|
||||
whose arguments you want to extract by examining the files listed in the
|
||||
remaining arguments using the same tool that Autoconf and Automake use,
|
||||
GNU M4.
|
||||
|
||||
The arguments are returned separated by colons, with each traced call
|
||||
on a separate line.'
|
||||
|
||||
# Option processing.
|
||||
func_options "$@"
|
||||
eval set dummy "$func_options_result"; shift
|
||||
|
||||
# Validate remaining non-option arguments.
|
||||
test $# -gt 1 \
|
||||
|| func_fatal_help "not enough arguments"
|
||||
|
||||
# Pass non-option arguments to extraction function.
|
||||
func_extract_trace "$@"
|
||||
|
||||
# Display results.
|
||||
test -n "$func_extract_trace_result" \
|
||||
&& $ECHO "$func_extract_trace_result"
|
||||
|
||||
# The End.
|
||||
exit $EXIT_SUCCESS
|
||||
}
|
||||
|
||||
|
||||
## --------------------------- ##
|
||||
## Actually perform the trace. ##
|
||||
## --------------------------- ##
|
||||
|
||||
# Only call 'func_main' if this script was called directly.
|
||||
test extract-trace = "$progname" && func_main "$@"
|
||||
|
||||
# Local variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-pattern: "50/scriptversion=%:y-%02m-%02d.%02H; # UTC"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# End:
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,510 +0,0 @@
|
||||
#!/bin/sh -e
|
||||
# gendocs.sh -- generate a GNU manual in many formats. This script is
|
||||
# mentioned in maintain.texi. See the help message below for usage details.
|
||||
|
||||
scriptversion=2022-01-01.00
|
||||
|
||||
# Copyright 2003-2022 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Original author: Mohit Agarwal.
|
||||
# Send bug reports and any other correspondence to bug-gnulib@gnu.org.
|
||||
#
|
||||
# The latest version of this script, and the companion template, is
|
||||
# available from the Gnulib repository:
|
||||
#
|
||||
# https://git.savannah.gnu.org/cgit/gnulib.git/tree/build-aux/gendocs.sh
|
||||
# https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template
|
||||
|
||||
# TODO:
|
||||
# - image importing was only implemented for HTML generated by
|
||||
# makeinfo. But it should be simple enough to adjust.
|
||||
# - images are not imported in the source tarball. All the needed
|
||||
# formats (PDF, PNG, etc.) should be included.
|
||||
|
||||
prog=`basename "$0"`
|
||||
srcdir=`pwd`
|
||||
|
||||
scripturl="https://git.savannah.gnu.org/cgit/gnulib.git/plain/build-aux/gendocs.sh"
|
||||
templateurl="https://git.savannah.gnu.org/cgit/gnulib.git/plain/doc/gendocs_template"
|
||||
|
||||
: ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="}
|
||||
: ${MAKEINFO="makeinfo"}
|
||||
: ${TEXI2DVI="texi2dvi"}
|
||||
: ${DOCBOOK2HTML="docbook2html"}
|
||||
: ${DOCBOOK2PDF="docbook2pdf"}
|
||||
: ${DOCBOOK2TXT="docbook2txt"}
|
||||
: ${GENDOCS_TEMPLATE_DIR="."}
|
||||
: ${PERL='perl'}
|
||||
: ${TEXI2HTML="texi2html"}
|
||||
unset CDPATH
|
||||
unset use_texi2html
|
||||
|
||||
MANUAL_TITLE=
|
||||
PACKAGE=
|
||||
EMAIL=webmasters@gnu.org # please override with --email
|
||||
commonarg= # passed to all makeinfo/texi2html invcations.
|
||||
dirargs= # passed to all tools (-I dir).
|
||||
dirs= # -I directories.
|
||||
htmlarg="--css-ref=https://www.gnu.org/software/gnulib/manual.css -c TOP_NODE_UP_URL=/manual"
|
||||
default_htmlarg=true
|
||||
infoarg=--no-split
|
||||
generate_ascii=true
|
||||
generate_html=true
|
||||
generate_info=true
|
||||
generate_tex=true
|
||||
outdir=manual
|
||||
source_extra=
|
||||
split=node
|
||||
srcfile=
|
||||
texarg="-t @finalout"
|
||||
|
||||
version="gendocs.sh $scriptversion
|
||||
|
||||
Copyright 2022 Free Software Foundation, Inc.
|
||||
There is NO warranty. You may redistribute this software
|
||||
under the terms of the GNU General Public License.
|
||||
For more information about these matters, see the files named COPYING."
|
||||
|
||||
usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE
|
||||
|
||||
Generate output in various formats from PACKAGE.texinfo (or .texi or
|
||||
.txi) source. See the GNU Maintainers document for a more extensive
|
||||
discussion:
|
||||
https://www.gnu.org/prep/maintain_toc.html
|
||||
|
||||
Options:
|
||||
--email ADR use ADR as contact in generated web pages; always give this.
|
||||
|
||||
-s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi}
|
||||
-o OUTDIR write files into OUTDIR, instead of manual/.
|
||||
-I DIR append DIR to the Texinfo search path.
|
||||
--common ARG pass ARG in all invocations.
|
||||
--html ARG pass ARG to makeinfo or texi2html for HTML targets,
|
||||
instead of '$htmlarg'.
|
||||
--info ARG pass ARG to makeinfo for Info, instead of --no-split.
|
||||
--no-ascii skip generating the plain text output.
|
||||
--no-html skip generating the html output.
|
||||
--no-info skip generating the info output.
|
||||
--no-tex skip generating the dvi and pdf output.
|
||||
--source ARG include ARG in tar archive of sources.
|
||||
--split HOW make split HTML by node, section, chapter; default node.
|
||||
--tex ARG pass ARG to texi2dvi for DVI and PDF, instead of -t @finalout.
|
||||
|
||||
--texi2html use texi2html to make HTML target, with all split versions.
|
||||
--docbook convert through DocBook too (xml, txt, html, pdf).
|
||||
|
||||
--help display this help and exit successfully.
|
||||
--version display version information and exit successfully.
|
||||
|
||||
Simple example: $prog --email bug-gnu-emacs@gnu.org emacs \"GNU Emacs Manual\"
|
||||
|
||||
Typical sequence:
|
||||
cd PACKAGESOURCE/doc
|
||||
wget \"$scripturl\"
|
||||
wget \"$templateurl\"
|
||||
$prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\"
|
||||
|
||||
Output will be in a new subdirectory \"manual\" (by default;
|
||||
use -o OUTDIR to override). Move all the new files into your web CVS
|
||||
tree, as explained in the Web Pages node of maintain.texi.
|
||||
|
||||
Please use the --email ADDRESS option so your own bug-reporting
|
||||
address will be used in the generated HTML pages.
|
||||
|
||||
MANUAL-TITLE is included as part of the HTML <title> of the overall
|
||||
manual/index.html file. It should include the name of the package being
|
||||
documented. manual/index.html is created by substitution from the file
|
||||
$GENDOCS_TEMPLATE_DIR/gendocs_template. (Feel free to modify the
|
||||
generic template for your own purposes.)
|
||||
|
||||
If you have several manuals, you'll need to run this script several
|
||||
times with different MANUAL values, specifying a different output
|
||||
directory with -o each time. Then write (by hand) an overall index.html
|
||||
with links to them all.
|
||||
|
||||
If a manual's Texinfo sources are spread across several directories,
|
||||
first copy or symlink all Texinfo sources into a single directory.
|
||||
(Part of the script's work is to make a tar.gz of the sources.)
|
||||
|
||||
As implied above, by default monolithic Info files are generated.
|
||||
If you want split Info, or other Info options, use --info to override.
|
||||
|
||||
You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML,
|
||||
and PERL to control the programs that get executed, and
|
||||
GENDOCS_TEMPLATE_DIR to control where the gendocs_template file is
|
||||
looked for. With --docbook, the environment variables DOCBOOK2HTML,
|
||||
DOCBOOK2PDF, and DOCBOOK2TXT are also consulted.
|
||||
|
||||
By default, makeinfo and texi2dvi are run in the default (English)
|
||||
locale, since that's the language of most Texinfo manuals. If you
|
||||
happen to have a non-English manual and non-English web site, see the
|
||||
SETLANG setting in the source.
|
||||
|
||||
Email bug reports or enhancement requests to bug-gnulib@gnu.org.
|
||||
"
|
||||
|
||||
while test $# -gt 0; do
|
||||
case $1 in
|
||||
-s) shift; srcfile=$1;;
|
||||
-o) shift; outdir=$1;;
|
||||
-I) shift; dirargs="$dirargs -I '$1'"; dirs="$dirs $1";;
|
||||
--common) shift; commonarg=$1;;
|
||||
--docbook) docbook=yes;;
|
||||
--email) shift; EMAIL=$1;;
|
||||
--html) shift; default_htmlarg=false; htmlarg=$1;;
|
||||
--info) shift; infoarg=$1;;
|
||||
--no-ascii) generate_ascii=false;;
|
||||
--no-html) generate_ascii=false;;
|
||||
--no-info) generate_info=false;;
|
||||
--no-tex) generate_tex=false;;
|
||||
--source) shift; source_extra=$1;;
|
||||
--split) shift; split=$1;;
|
||||
--tex) shift; texarg=$1;;
|
||||
--texi2html) use_texi2html=1;;
|
||||
|
||||
--help) echo "$usage"; exit 0;;
|
||||
--version) echo "$version"; exit 0;;
|
||||
-*)
|
||||
echo "$0: Unknown option \`$1'." >&2
|
||||
echo "$0: Try \`--help' for more information." >&2
|
||||
exit 1;;
|
||||
*)
|
||||
if test -z "$PACKAGE"; then
|
||||
PACKAGE=$1
|
||||
elif test -z "$MANUAL_TITLE"; then
|
||||
MANUAL_TITLE=$1
|
||||
else
|
||||
echo "$0: extra non-option argument \`$1'." >&2
|
||||
exit 1
|
||||
fi;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
# makeinfo uses the dirargs, but texi2dvi doesn't.
|
||||
commonarg=" $dirargs $commonarg"
|
||||
|
||||
# For most of the following, the base name is just $PACKAGE
|
||||
base=$PACKAGE
|
||||
|
||||
if $default_htmlarg && test -n "$use_texi2html"; then
|
||||
# The legacy texi2html doesn't support TOP_NODE_UP_URL
|
||||
htmlarg="--css-ref=https://www.gnu.org/software/gnulib/manual.css"
|
||||
fi
|
||||
|
||||
if test -n "$srcfile"; then
|
||||
# but here, we use the basename of $srcfile
|
||||
base=`basename "$srcfile"`
|
||||
case $base in
|
||||
*.txi|*.texi|*.texinfo) base=`echo "$base"|sed 's/\.[texinfo]*$//'`;;
|
||||
esac
|
||||
PACKAGE=$base
|
||||
elif test -s "$srcdir/$PACKAGE.texinfo"; then
|
||||
srcfile=$srcdir/$PACKAGE.texinfo
|
||||
elif test -s "$srcdir/$PACKAGE.texi"; then
|
||||
srcfile=$srcdir/$PACKAGE.texi
|
||||
elif test -s "$srcdir/$PACKAGE.txi"; then
|
||||
srcfile=$srcdir/$PACKAGE.txi
|
||||
else
|
||||
echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then
|
||||
echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2
|
||||
echo "$0: it is available from $templateurl." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Function to return size of $1 in something resembling kilobytes.
|
||||
calcsize()
|
||||
{
|
||||
size=`ls -ksl $1 | awk '{print $1}'`
|
||||
echo $size
|
||||
}
|
||||
|
||||
# copy_images OUTDIR HTML-FILE...
|
||||
# -------------------------------
|
||||
# Copy all the images needed by the HTML-FILEs into OUTDIR.
|
||||
# Look for them in . and the -I directories; this is simpler than what
|
||||
# makeinfo supports with -I, but hopefully it will suffice.
|
||||
copy_images()
|
||||
{
|
||||
local odir
|
||||
odir=$1
|
||||
shift
|
||||
$PERL -n -e "
|
||||
BEGIN {
|
||||
\$me = '$prog';
|
||||
\$odir = '$odir';
|
||||
@dirs = qw(. $dirs);
|
||||
}
|
||||
" -e '
|
||||
/<img src="(.*?)"/g && ++$need{$1};
|
||||
|
||||
END {
|
||||
#print "$me: @{[keys %need]}\n"; # for debugging, show images found.
|
||||
FILE: for my $f (keys %need) {
|
||||
for my $d (@dirs) {
|
||||
if (-f "$d/$f") {
|
||||
use File::Basename;
|
||||
my $dest = dirname ("$odir/$f");
|
||||
#
|
||||
use File::Path;
|
||||
-d $dest || mkpath ($dest)
|
||||
|| die "$me: cannot mkdir $dest: $!\n";
|
||||
#
|
||||
use File::Copy;
|
||||
copy ("$d/$f", $dest)
|
||||
|| die "$me: cannot copy $d/$f to $dest: $!\n";
|
||||
next FILE;
|
||||
}
|
||||
}
|
||||
die "$me: $ARGV: cannot find image $f\n";
|
||||
}
|
||||
}
|
||||
' -- "$@" || exit 1
|
||||
}
|
||||
|
||||
case $outdir in
|
||||
/*) abs_outdir=$outdir;;
|
||||
*) abs_outdir=$srcdir/$outdir;;
|
||||
esac
|
||||
|
||||
echo "Making output for $srcfile"
|
||||
echo " in `pwd`"
|
||||
mkdir -p "$outdir/"
|
||||
|
||||
#
|
||||
if $generate_info; then
|
||||
cmd="$SETLANG $MAKEINFO -o $PACKAGE.info $commonarg $infoarg \"$srcfile\""
|
||||
echo "Generating info... ($cmd)"
|
||||
rm -f $PACKAGE.info* # get rid of any strays
|
||||
eval "$cmd"
|
||||
tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info*
|
||||
ls -l "$outdir/$PACKAGE.info.tar.gz"
|
||||
info_tgz_size=`calcsize "$outdir/$PACKAGE.info.tar.gz"`
|
||||
# do not mv the info files, there's no point in having them available
|
||||
# separately on the web.
|
||||
fi # end info
|
||||
|
||||
#
|
||||
if $generate_tex; then
|
||||
cmd="$SETLANG $TEXI2DVI $dirargs $texarg \"$srcfile\""
|
||||
printf "\nGenerating dvi... ($cmd)\n"
|
||||
eval "$cmd"
|
||||
# compress/finish dvi:
|
||||
gzip -f -9 $PACKAGE.dvi
|
||||
dvi_gz_size=`calcsize $PACKAGE.dvi.gz`
|
||||
mv $PACKAGE.dvi.gz "$outdir/"
|
||||
ls -l "$outdir/$PACKAGE.dvi.gz"
|
||||
|
||||
cmd="$SETLANG $TEXI2DVI --pdf $dirargs $texarg \"$srcfile\""
|
||||
printf "\nGenerating pdf... ($cmd)\n"
|
||||
eval "$cmd"
|
||||
pdf_size=`calcsize $PACKAGE.pdf`
|
||||
mv $PACKAGE.pdf "$outdir/"
|
||||
ls -l "$outdir/$PACKAGE.pdf"
|
||||
fi # end tex (dvi + pdf)
|
||||
|
||||
#
|
||||
if $generate_ascii; then
|
||||
opt="-o $PACKAGE.txt --no-split --no-headers $commonarg"
|
||||
cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
|
||||
printf "\nGenerating ascii... ($cmd)\n"
|
||||
eval "$cmd"
|
||||
ascii_size=`calcsize $PACKAGE.txt`
|
||||
gzip -f -9 -c $PACKAGE.txt >"$outdir/$PACKAGE.txt.gz"
|
||||
ascii_gz_size=`calcsize "$outdir/$PACKAGE.txt.gz"`
|
||||
mv $PACKAGE.txt "$outdir/"
|
||||
ls -l "$outdir/$PACKAGE.txt" "$outdir/$PACKAGE.txt.gz"
|
||||
fi
|
||||
|
||||
#
|
||||
|
||||
if $generate_html; then
|
||||
# Split HTML at level $1. Used for texi2html.
|
||||
html_split()
|
||||
{
|
||||
opt="--split=$1 --node-files $commonarg $htmlarg"
|
||||
cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\""
|
||||
printf "\nGenerating html by $1... ($cmd)\n"
|
||||
eval "$cmd"
|
||||
split_html_dir=$PACKAGE.html
|
||||
(
|
||||
cd ${split_html_dir} || exit 1
|
||||
ln -sf ${PACKAGE}.html index.html
|
||||
tar -czf "$abs_outdir/${PACKAGE}.html_$1.tar.gz" -- *.html
|
||||
)
|
||||
eval html_$1_tgz_size=`calcsize "$outdir/${PACKAGE}.html_$1.tar.gz"`
|
||||
rm -f "$outdir"/html_$1/*.html
|
||||
mkdir -p "$outdir/html_$1/"
|
||||
mv ${split_html_dir}/*.html "$outdir/html_$1/"
|
||||
rmdir ${split_html_dir}
|
||||
}
|
||||
|
||||
if test -z "$use_texi2html"; then
|
||||
opt="--no-split --html -o $PACKAGE.html $commonarg $htmlarg"
|
||||
cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
|
||||
printf "\nGenerating monolithic html... ($cmd)\n"
|
||||
rm -rf $PACKAGE.html # in case a directory is left over
|
||||
eval "$cmd"
|
||||
html_mono_size=`calcsize $PACKAGE.html`
|
||||
gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz"
|
||||
html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"`
|
||||
copy_images "$outdir/" $PACKAGE.html
|
||||
mv $PACKAGE.html "$outdir/"
|
||||
ls -l "$outdir/$PACKAGE.html" "$outdir/$PACKAGE.html.gz"
|
||||
|
||||
# Before Texinfo 5.0, makeinfo did not accept a --split=HOW option,
|
||||
# it just always split by node. So if we're splitting by node anyway,
|
||||
# leave it out.
|
||||
if test "x$split" = xnode; then
|
||||
split_arg=
|
||||
else
|
||||
split_arg=--split=$split
|
||||
fi
|
||||
#
|
||||
opt="--html -o $PACKAGE.html $split_arg $commonarg $htmlarg"
|
||||
cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
|
||||
printf "\nGenerating html by $split... ($cmd)\n"
|
||||
eval "$cmd"
|
||||
split_html_dir=$PACKAGE.html
|
||||
copy_images $split_html_dir/ $split_html_dir/*.html
|
||||
(
|
||||
cd $split_html_dir || exit 1
|
||||
tar -czf "$abs_outdir/$PACKAGE.html_$split.tar.gz" -- *
|
||||
)
|
||||
eval \
|
||||
html_${split}_tgz_size=`calcsize "$outdir/$PACKAGE.html_$split.tar.gz"`
|
||||
rm -rf "$outdir/html_$split/"
|
||||
mv $split_html_dir "$outdir/html_$split/"
|
||||
du -s "$outdir/html_$split/"
|
||||
ls -l "$outdir/$PACKAGE.html_$split.tar.gz"
|
||||
|
||||
else # use texi2html:
|
||||
opt="--output $PACKAGE.html $commonarg $htmlarg"
|
||||
cmd="$SETLANG $TEXI2HTML $opt \"$srcfile\""
|
||||
printf "\nGenerating monolithic html with texi2html... ($cmd)\n"
|
||||
rm -rf $PACKAGE.html # in case a directory is left over
|
||||
eval "$cmd"
|
||||
html_mono_size=`calcsize $PACKAGE.html`
|
||||
gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz"
|
||||
html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"`
|
||||
mv $PACKAGE.html "$outdir/"
|
||||
|
||||
html_split node
|
||||
html_split chapter
|
||||
html_split section
|
||||
fi
|
||||
fi # end html
|
||||
|
||||
#
|
||||
printf "\nMaking .tar.gz for sources...\n"
|
||||
d=`dirname $srcfile`
|
||||
(
|
||||
cd "$d"
|
||||
srcfiles=`ls -d *.texinfo *.texi *.txi *.eps $source_extra 2>/dev/null` || true
|
||||
tar czfh "$abs_outdir/$PACKAGE.texi.tar.gz" $srcfiles
|
||||
ls -l "$abs_outdir/$PACKAGE.texi.tar.gz"
|
||||
)
|
||||
texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"`
|
||||
|
||||
#
|
||||
# Do everything again through docbook.
|
||||
if test -n "$docbook"; then
|
||||
opt="-o - --docbook $commonarg"
|
||||
cmd="$SETLANG $MAKEINFO $opt \"$srcfile\" >${srcdir}/$PACKAGE-db.xml"
|
||||
printf "\nGenerating docbook XML... ($cmd)\n"
|
||||
eval "$cmd"
|
||||
docbook_xml_size=`calcsize $PACKAGE-db.xml`
|
||||
gzip -f -9 -c $PACKAGE-db.xml >"$outdir/$PACKAGE-db.xml.gz"
|
||||
docbook_xml_gz_size=`calcsize "$outdir/$PACKAGE-db.xml.gz"`
|
||||
mv $PACKAGE-db.xml "$outdir/"
|
||||
|
||||
split_html_db_dir=html_node_db
|
||||
opt="$commonarg -o $split_html_db_dir"
|
||||
cmd="$DOCBOOK2HTML $opt \"${outdir}/$PACKAGE-db.xml\""
|
||||
printf "\nGenerating docbook HTML... ($cmd)\n"
|
||||
eval "$cmd"
|
||||
(
|
||||
cd ${split_html_db_dir} || exit 1
|
||||
tar -czf "$abs_outdir/${PACKAGE}.html_node_db.tar.gz" -- *.html
|
||||
)
|
||||
html_node_db_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node_db.tar.gz"`
|
||||
rm -f "$outdir"/html_node_db/*.html
|
||||
mkdir -p "$outdir/html_node_db"
|
||||
mv ${split_html_db_dir}/*.html "$outdir/html_node_db/"
|
||||
rmdir ${split_html_db_dir}
|
||||
|
||||
cmd="$DOCBOOK2TXT \"${outdir}/$PACKAGE-db.xml\""
|
||||
printf "\nGenerating docbook ASCII... ($cmd)\n"
|
||||
eval "$cmd"
|
||||
docbook_ascii_size=`calcsize $PACKAGE-db.txt`
|
||||
mv $PACKAGE-db.txt "$outdir/"
|
||||
|
||||
cmd="$DOCBOOK2PDF \"${outdir}/$PACKAGE-db.xml\""
|
||||
printf "\nGenerating docbook PDF... ($cmd)\n"
|
||||
eval "$cmd"
|
||||
docbook_pdf_size=`calcsize $PACKAGE-db.pdf`
|
||||
mv $PACKAGE-db.pdf "$outdir/"
|
||||
fi
|
||||
|
||||
#
|
||||
printf "\nMaking index.html for $PACKAGE...\n"
|
||||
if test -z "$use_texi2html"; then
|
||||
CONDS="/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\
|
||||
/%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d"
|
||||
else
|
||||
# should take account of --split here.
|
||||
CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d"
|
||||
fi
|
||||
|
||||
curdate=`$SETLANG date '+%B %d, %Y'`
|
||||
sed \
|
||||
-e "s!%%TITLE%%!$MANUAL_TITLE!g" \
|
||||
-e "s!%%EMAIL%%!$EMAIL!g" \
|
||||
-e "s!%%PACKAGE%%!$PACKAGE!g" \
|
||||
-e "s!%%DATE%%!$curdate!g" \
|
||||
-e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \
|
||||
-e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \
|
||||
-e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \
|
||||
-e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \
|
||||
-e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \
|
||||
-e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \
|
||||
-e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \
|
||||
-e "s!%%PDF_SIZE%%!$pdf_size!g" \
|
||||
-e "s!%%ASCII_SIZE%%!$ascii_size!g" \
|
||||
-e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \
|
||||
-e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \
|
||||
-e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \
|
||||
-e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \
|
||||
-e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \
|
||||
-e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \
|
||||
-e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \
|
||||
-e "s,%%SCRIPTURL%%,$scripturl,g" \
|
||||
-e "s!%%SCRIPTNAME%%!$prog!g" \
|
||||
-e "$CONDS" \
|
||||
$GENDOCS_TEMPLATE_DIR/gendocs_template >"$outdir/index.html"
|
||||
|
||||
echo "Done, see $outdir/ subdirectory for new files."
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
||||
@ -1,227 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Print a version string.
|
||||
scriptversion=2022-01-27.18; # UTC
|
||||
|
||||
# Copyright (C) 2007-2022 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# This script is derived from GIT-VERSION-GEN from GIT: https://git-scm.com/.
|
||||
# It may be run two ways:
|
||||
# - from a git repository in which the "git describe" command below
|
||||
# produces useful output (thus requiring at least one signed tag)
|
||||
# - from a non-git-repo directory containing a .tarball-version file, which
|
||||
# presumes this script is invoked like "./git-version-gen .tarball-version".
|
||||
|
||||
# In order to use intra-version strings in your project, you will need two
|
||||
# separate generated version string files:
|
||||
#
|
||||
# .tarball-version - present only in a distribution tarball, and not in
|
||||
# a checked-out repository. Created with contents that were learned at
|
||||
# the last time autoconf was run, and used by git-version-gen. Must not
|
||||
# be present in either $(srcdir) or $(builddir) for git-version-gen to
|
||||
# give accurate answers during normal development with a checked out tree,
|
||||
# but must be present in a tarball when there is no version control system.
|
||||
# Therefore, it cannot be used in any dependencies. GNUmakefile has
|
||||
# hooks to force a reconfigure at distribution time to get the value
|
||||
# correct, without penalizing normal development with extra reconfigures.
|
||||
#
|
||||
# .version - present in a checked-out repository and in a distribution
|
||||
# tarball. Usable in dependencies, particularly for files that don't
|
||||
# want to depend on config.h but do want to track version changes.
|
||||
# Delete this file prior to any autoconf run where you want to rebuild
|
||||
# files to pick up a version string change; and leave it stale to
|
||||
# minimize rebuild time after unrelated changes to configure sources.
|
||||
#
|
||||
# As with any generated file in a VC'd directory, you should add
|
||||
# /.version to .gitignore, so that you don't accidentally commit it.
|
||||
# .tarball-version is never generated in a VC'd directory, so needn't
|
||||
# be listed there.
|
||||
#
|
||||
# Use the following line in your configure.ac, so that $(VERSION) will
|
||||
# automatically be up-to-date each time configure is run (and note that
|
||||
# since configure.ac no longer includes a version string, Makefile rules
|
||||
# should not depend on configure.ac for version updates).
|
||||
#
|
||||
# AC_INIT([GNU project],
|
||||
# m4_esyscmd([build-aux/git-version-gen .tarball-version]),
|
||||
# [bug-project@example])
|
||||
#
|
||||
# Then use the following lines in your Makefile.am, so that .version
|
||||
# will be present for dependencies, and so that .version and
|
||||
# .tarball-version will exist in distribution tarballs.
|
||||
#
|
||||
# EXTRA_DIST = $(top_srcdir)/.version
|
||||
# BUILT_SOURCES = $(top_srcdir)/.version
|
||||
# $(top_srcdir)/.version:
|
||||
# echo '$(VERSION)' > $@-t
|
||||
# mv $@-t $@
|
||||
# dist-hook:
|
||||
# echo '$(VERSION)' > $(distdir)/.tarball-version
|
||||
|
||||
|
||||
me=$0
|
||||
|
||||
year=`expr "$scriptversion" : '\([^-]*\)'`
|
||||
version="git-version-gen $scriptversion
|
||||
|
||||
Copyright (C) ${year} Free Software Foundation, Inc.
|
||||
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
|
||||
This is free software: you are free to change and redistribute it.
|
||||
There is NO WARRANTY, to the extent permitted by law."
|
||||
|
||||
usage="\
|
||||
Usage: $me [OPTION]... \$srcdir/.tarball-version [TAG-NORMALIZATION-SED-SCRIPT]
|
||||
Print a version string.
|
||||
|
||||
Options:
|
||||
|
||||
--prefix PREFIX prefix of git tags (default 'v')
|
||||
--fallback VERSION
|
||||
fallback version to use if \"git --version\" fails
|
||||
|
||||
--help display this help and exit
|
||||
--version output version information and exit
|
||||
|
||||
Running without arguments will suffice in most cases."
|
||||
|
||||
prefix=v
|
||||
fallback=
|
||||
|
||||
while test $# -gt 0; do
|
||||
case $1 in
|
||||
--help) echo "$usage"; exit 0;;
|
||||
--version) echo "$version"; exit 0;;
|
||||
--prefix) shift; prefix=${1?};;
|
||||
--fallback) shift; fallback=${1?};;
|
||||
-*)
|
||||
echo "$0: Unknown option '$1'." >&2
|
||||
echo "$0: Try '--help' for more information." >&2
|
||||
exit 1;;
|
||||
*)
|
||||
if test "x$tarball_version_file" = x; then
|
||||
tarball_version_file="$1"
|
||||
elif test "x$tag_sed_script" = x; then
|
||||
tag_sed_script="$1"
|
||||
else
|
||||
echo "$0: extra non-option argument '$1'." >&2
|
||||
exit 1
|
||||
fi;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if test "x$tarball_version_file" = x; then
|
||||
echo "$usage"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
tag_sed_script="${tag_sed_script:-s/x/x/}"
|
||||
|
||||
nl='
|
||||
'
|
||||
|
||||
# Avoid meddling by environment variable of the same name.
|
||||
v=
|
||||
v_from_git=
|
||||
|
||||
# First see if there is a tarball-only version file.
|
||||
# then try "git describe", then default.
|
||||
if test -f $tarball_version_file
|
||||
then
|
||||
v=`cat $tarball_version_file` || v=
|
||||
case $v in
|
||||
*$nl*) v= ;; # reject multi-line output
|
||||
esac
|
||||
test "x$v" = x \
|
||||
&& echo "$0: WARNING: $tarball_version_file is damaged" 1>&2
|
||||
fi
|
||||
|
||||
if test "x$v" != x
|
||||
then
|
||||
: # use $v
|
||||
# Otherwise, if there is at least one git commit involving the working
|
||||
# directory, and "git describe" output looks sensible, use that to
|
||||
# derive a version string.
|
||||
elif test "`git log -1 --pretty=format:x . 2>&1`" = x \
|
||||
&& v=`git describe --abbrev=4 --match="$prefix*" HEAD 2>/dev/null \
|
||||
|| git describe --abbrev=4 HEAD 2>/dev/null` \
|
||||
&& v=`printf '%s\n' "$v" | sed "$tag_sed_script"` \
|
||||
&& case $v in
|
||||
$prefix[0-9]*) ;;
|
||||
*) (exit 1) ;;
|
||||
esac
|
||||
then
|
||||
# Is this a new git that lists number of commits since the last
|
||||
# tag or the previous older version that did not?
|
||||
# Newer: v6.10-77-g0f8faeb
|
||||
# Older: v6.10-g0f8faeb
|
||||
vprefix=`expr "X$v" : 'X\(.*\)-g[^-]*$'` || vprefix=$v
|
||||
case $vprefix in
|
||||
*-*) : git describe is probably okay three part flavor ;;
|
||||
*)
|
||||
: git describe is older two part flavor
|
||||
# Recreate the number of commits and rewrite such that the
|
||||
# result is the same as if we were using the newer version
|
||||
# of git describe.
|
||||
vtag=`echo "$v" | sed 's/-.*//'`
|
||||
commit_list=`git rev-list "$vtag"..HEAD 2>/dev/null` \
|
||||
|| { commit_list=failed;
|
||||
echo "$0: WARNING: git rev-list failed" 1>&2; }
|
||||
numcommits=`echo "$commit_list" | wc -l`
|
||||
v=`echo "$v" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`;
|
||||
test "$commit_list" = failed && v=UNKNOWN
|
||||
;;
|
||||
esac
|
||||
|
||||
# Change the penultimate "-" to ".", for version-comparing tools.
|
||||
# Remove the "g" to save a byte.
|
||||
v=`echo "$v" | sed 's/-\([^-]*\)-g\([^-]*\)$/.\1-\2/'`;
|
||||
v_from_git=1
|
||||
elif test "x$fallback" = x || git --version >/dev/null 2>&1; then
|
||||
v=UNKNOWN
|
||||
else
|
||||
v=$fallback
|
||||
fi
|
||||
|
||||
v=`echo "$v" |sed "s/^$prefix//"`
|
||||
|
||||
# Test whether to append the "-dirty" suffix only if the version
|
||||
# string we're using came from git. I.e., skip the test if it's "UNKNOWN"
|
||||
# or if it came from .tarball-version.
|
||||
if test "x$v_from_git" != x; then
|
||||
# Don't declare a version "dirty" merely because a timestamp has changed.
|
||||
git update-index --refresh > /dev/null 2>&1
|
||||
|
||||
dirty=`exec 2>/dev/null;git diff-index --name-only HEAD` || dirty=
|
||||
case "$dirty" in
|
||||
'') ;;
|
||||
*) # Append the suffix only if there isn't one already.
|
||||
case $v in
|
||||
*-dirty) ;;
|
||||
*) v="$v-dirty" ;;
|
||||
esac ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Omit the trailing newline, so that m4_esyscmd can use the result directly.
|
||||
printf %s "$v"
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
@ -1,213 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Run this after each non-alpha release, to update the web documentation at
|
||||
# https://www.gnu.org/software/$pkg/manual/
|
||||
|
||||
VERSION=2022-01-27.18; # UTC
|
||||
|
||||
# Copyright (C) 2009-2022 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
ME=$(basename "$0")
|
||||
warn() { printf '%s: %s\n' "$ME" "$*" >&2; }
|
||||
die() { warn "$*"; exit 1; }
|
||||
|
||||
help()
|
||||
{
|
||||
cat <<EOF
|
||||
Usage: $ME
|
||||
|
||||
Run this script from top_srcdir (no arguments) after each non-alpha
|
||||
release, to update the web documentation at
|
||||
https://www.gnu.org/software/\$pkg/manual/
|
||||
|
||||
This script assumes you're using git for revision control, and
|
||||
requires a .prev-version file as well as a Makefile, from which it
|
||||
extracts the version number and package name, respectively. Also, it
|
||||
assumes all documentation is in the doc/ sub-directory.
|
||||
|
||||
Options:
|
||||
-C, --builddir=DIR location of (configured) Makefile (default: .)
|
||||
-n, --dry-run don't actually commit anything
|
||||
-m, --mirror remove out of date files from document server
|
||||
-u, --user the name of the CVS user on Savannah
|
||||
--help print this help, then exit
|
||||
--version print version number, then exit
|
||||
|
||||
Report bugs and patches to <bug-gnulib@gnu.org>.
|
||||
EOF
|
||||
exit
|
||||
}
|
||||
|
||||
version()
|
||||
{
|
||||
year=$(echo "$VERSION" | sed 's/[^0-9].*//')
|
||||
cat <<EOF
|
||||
$ME $VERSION
|
||||
Copyright (C) $year Free Software Foundation, Inc,
|
||||
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
|
||||
This is free software: you are free to change and redistribute it.
|
||||
There is NO WARRANTY, to the extent permitted by law.
|
||||
EOF
|
||||
exit
|
||||
}
|
||||
|
||||
# find_tool ENVVAR NAMES...
|
||||
# -------------------------
|
||||
# Search for a required program. Use the value of ENVVAR, if set,
|
||||
# otherwise find the first of the NAMES that can be run (i.e.,
|
||||
# supports --version). If found, set ENVVAR to the program name,
|
||||
# die otherwise.
|
||||
#
|
||||
# FIXME: code duplication, see also bootstrap.
|
||||
find_tool ()
|
||||
{
|
||||
find_tool_envvar=$1
|
||||
shift
|
||||
find_tool_names=$@
|
||||
eval "find_tool_res=\$$find_tool_envvar"
|
||||
if test x"$find_tool_res" = x; then
|
||||
for i
|
||||
do
|
||||
if ($i --version </dev/null) >/dev/null 2>&1; then
|
||||
find_tool_res=$i
|
||||
break
|
||||
fi
|
||||
done
|
||||
else
|
||||
find_tool_error_prefix="\$$find_tool_envvar: "
|
||||
fi
|
||||
test x"$find_tool_res" != x \
|
||||
|| die "one of these is required: $find_tool_names"
|
||||
($find_tool_res --version </dev/null) >/dev/null 2>&1 \
|
||||
|| die "${find_tool_error_prefix}cannot run $find_tool_res --version"
|
||||
eval "$find_tool_envvar=\$find_tool_res"
|
||||
eval "export $find_tool_envvar"
|
||||
}
|
||||
|
||||
## ------ ##
|
||||
## Main. ##
|
||||
## ------ ##
|
||||
|
||||
# Requirements: everything required to bootstrap your package, plus
|
||||
# these.
|
||||
find_tool CVS cvs
|
||||
find_tool GIT git
|
||||
find_tool RSYNC rsync
|
||||
find_tool XARGS gxargs xargs
|
||||
|
||||
builddir=.
|
||||
dryrun=
|
||||
rm_stale='echo'
|
||||
cvs_user="$USER"
|
||||
while test $# != 0
|
||||
do
|
||||
# Handle --option=value by splitting apart and putting back on argv.
|
||||
case $1 in
|
||||
--*=*)
|
||||
opt=$(echo "$1" | sed -e 's/=.*//')
|
||||
val=$(echo "$1" | sed -e 's/[^=]*=//')
|
||||
shift
|
||||
set dummy "$opt" "$val" "$@"; shift
|
||||
;;
|
||||
esac
|
||||
|
||||
case $1 in
|
||||
--help|--version) ${1#--};;
|
||||
-C|--builddir) shift; builddir=$1; shift ;;
|
||||
-n|--dry-run) dryrun=echo; shift;;
|
||||
-m|--mirror) rm_stale=''; shift;;
|
||||
-u|--user) shift; cvs_user=$1; shift ;;
|
||||
--*) die "unrecognized option: $1";;
|
||||
*) break;;
|
||||
esac
|
||||
done
|
||||
|
||||
test $# = 0 \
|
||||
|| die "too many arguments"
|
||||
|
||||
prev=.prev-version
|
||||
version=$(cat $prev) || die "no $prev file?"
|
||||
pkg=$(sed -n 's/^PACKAGE = \(.*\)/\1/p' $builddir/Makefile) \
|
||||
|| die "no Makefile?"
|
||||
tmp_branch=web-doc-$version-$$
|
||||
current_branch=$($GIT branch | sed -ne '/^\* /{s///;p;q;}')
|
||||
|
||||
cleanup()
|
||||
{
|
||||
__st=$?
|
||||
$dryrun rm -rf "$tmp"
|
||||
$GIT checkout "$current_branch"
|
||||
$GIT submodule update --recursive
|
||||
$GIT branch -d $tmp_branch
|
||||
exit $__st
|
||||
}
|
||||
trap cleanup 0
|
||||
trap 'exit $?' 1 2 13 15
|
||||
|
||||
# We must build using sources for which --version reports the
|
||||
# just-released version number, not some string like 7.6.18-20761.
|
||||
# That version string propagates into all documentation.
|
||||
set -e
|
||||
$GIT checkout -b $tmp_branch v$version
|
||||
$GIT submodule update --recursive
|
||||
./bootstrap
|
||||
srcdir=$(pwd)
|
||||
cd "$builddir"
|
||||
builddir=$(pwd)
|
||||
./config.status --recheck
|
||||
./config.status
|
||||
make
|
||||
make web-manual
|
||||
cd "$srcdir"
|
||||
set +e
|
||||
|
||||
tmp=$(mktemp -d web-doc-update.XXXXXX) || exit 1
|
||||
( cd $tmp \
|
||||
&& $CVS -d $cvs_user@cvs.sv.gnu.org:/webcvs/$pkg co $pkg )
|
||||
$RSYNC -avP "$builddir"/doc/manual/ $tmp/$pkg/manual
|
||||
|
||||
(
|
||||
cd $tmp/$pkg/manual
|
||||
|
||||
# Add all the files. This is simpler than trying to add only the
|
||||
# new ones because of new directories
|
||||
# First add non empty dirs individually
|
||||
find . -name CVS -prune -o -type d \! -empty -print \
|
||||
| $XARGS -n1 --no-run-if-empty -- $dryrun $CVS add -ko
|
||||
# Now add all files
|
||||
find . -name CVS -prune -o -type f -print \
|
||||
| $XARGS --no-run-if-empty -- $dryrun $CVS add -ko
|
||||
|
||||
# Report/Remove stale files
|
||||
# excluding doc server specific files like CVS/* and .symlinks
|
||||
if test -n "$rm_stale"; then
|
||||
echo 'Consider the --mirror option if all of the manual is generated,' >&2
|
||||
echo 'which will run `cvs remove` to remove stale files.' >&2
|
||||
fi
|
||||
{ find . \( -name CVS -o -type f -name '.*' \) -prune -o -type f -print
|
||||
(cd "$builddir"/doc/manual/ && find . -type f -print | sed p)
|
||||
} | sort | uniq -u \
|
||||
| $XARGS --no-run-if-empty -- ${rm_stale:-$dryrun} $CVS remove -f
|
||||
|
||||
$dryrun $CVS ci -m $version
|
||||
)
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "VERSION="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
@ -1,480 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Sign files and upload them.
|
||||
|
||||
scriptversion=2022-01-27.18; # UTC
|
||||
|
||||
# Copyright (C) 2004-2022 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# Originally written by Alexandre Duret-Lutz <adl@gnu.org>.
|
||||
# The master copy of this file is maintained in the gnulib Git repository.
|
||||
# Please send bug reports and feature requests to bug-gnulib@gnu.org.
|
||||
|
||||
set -e
|
||||
|
||||
GPG=gpg
|
||||
# Choose the proper version of gpg, so as to avoid a
|
||||
# "gpg-agent is not available in this session" error
|
||||
# when gpg-agent is version 2 but gpg is still version 1.
|
||||
# FIXME-2020: remove, once all major distros ship gpg version 2 as /usr/bin/gpg
|
||||
gpg_agent_version=`(gpg-agent --version) 2>/dev/null | sed -e '2,$d' -e 's/^[^0-9]*//'`
|
||||
case "$gpg_agent_version" in
|
||||
2.*)
|
||||
gpg_version=`(gpg --version) 2>/dev/null | sed -e '2,$d' -e 's/^[^0-9]*//'`
|
||||
case "$gpg_version" in
|
||||
1.*)
|
||||
if (type gpg2) >/dev/null 2>/dev/null; then
|
||||
# gpg2 is present.
|
||||
GPG=gpg2
|
||||
else
|
||||
# gpg2 is missing. Ubuntu users should install the package 'gnupg2'.
|
||||
echo "WARNING: Using 'gpg', which is too old. You should install 'gpg2'." 1>&2
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
GPG="${GPG} --batch --no-tty"
|
||||
conffile=.gnuploadrc
|
||||
to=
|
||||
dry_run=false
|
||||
replace=
|
||||
symlink_files=
|
||||
delete_files=
|
||||
delete_symlinks=
|
||||
collect_var=
|
||||
dbg=
|
||||
nl='
|
||||
'
|
||||
|
||||
usage="Usage: $0 [OPTION]... [CMD] FILE... [[CMD] FILE...]
|
||||
|
||||
Sign all FILES, and process them at the destinations specified with --to.
|
||||
If CMD is not given, it defaults to uploading. See examples below.
|
||||
|
||||
Commands:
|
||||
--delete delete FILES from destination
|
||||
--symlink create symbolic links
|
||||
--rmsymlink remove symbolic links
|
||||
-- treat the remaining arguments as files to upload
|
||||
|
||||
Options:
|
||||
--to DEST specify a destination DEST for FILES
|
||||
(multiple --to options are allowed)
|
||||
--user NAME sign with key NAME
|
||||
--replace allow replacements of existing files
|
||||
--symlink-regex[=EXPR] use sed script EXPR to compute symbolic link names
|
||||
-n, --dry-run do nothing, show what would have been done
|
||||
(including the constructed directive file)
|
||||
--version output version information and exit
|
||||
-h, --help print this help text and exit
|
||||
|
||||
If --symlink-regex is given without EXPR, then the link target name
|
||||
is created by replacing the version information with '-latest', e.g.:
|
||||
foo-1.3.4.tar.gz -> foo-latest.tar.gz
|
||||
|
||||
Recognized destinations are:
|
||||
alpha.gnu.org:DIRECTORY
|
||||
savannah.gnu.org:DIRECTORY
|
||||
savannah.nongnu.org:DIRECTORY
|
||||
ftp.gnu.org:DIRECTORY
|
||||
build directive files and upload files by FTP
|
||||
download.gnu.org.ua:{alpha|ftp}/DIRECTORY
|
||||
build directive files and upload files by SFTP
|
||||
[user@]host:DIRECTORY upload files with scp
|
||||
|
||||
Options and commands are applied in order. If the file $conffile exists
|
||||
in the current working directory, its contents are prepended to the
|
||||
actual command line options. Use this to keep your defaults. Comments
|
||||
(#) and empty lines in $conffile are allowed.
|
||||
|
||||
<https://www.gnu.org/prep/maintain/html_node/Automated-FTP-Uploads.html>
|
||||
gives some further background.
|
||||
|
||||
Examples:
|
||||
1. Upload foobar-1.0.tar.gz to ftp.gnu.org:
|
||||
gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz
|
||||
|
||||
2. Upload foobar-1.0.tar.gz and foobar-1.0.tar.xz to ftp.gnu.org:
|
||||
gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz foobar-1.0.tar.xz
|
||||
|
||||
3. Same as above, and also create symbolic links to foobar-latest.tar.*:
|
||||
gnupload --to ftp.gnu.org:foobar \\
|
||||
--symlink-regex \\
|
||||
foobar-1.0.tar.gz foobar-1.0.tar.xz
|
||||
|
||||
4. Create a symbolic link foobar-latest.tar.gz -> foobar-1.0.tar.gz
|
||||
and likewise for the corresponding .sig file:
|
||||
gnupload --to ftp.gnu.org:foobar \\
|
||||
--symlink foobar-1.0.tar.gz foobar-latest.tar.gz \\
|
||||
foobar-1.0.tar.gz.sig foobar-latest.tar.gz.sig
|
||||
or (equivalent):
|
||||
gnupload --to ftp.gnu.org:foobar \\
|
||||
--symlink foobar-1.0.tar.gz foobar-latest.tar.gz \\
|
||||
--symlink foobar-1.0.tar.gz.sig foobar-latest.tar.gz.sig
|
||||
|
||||
5. Upload foobar-0.9.90.tar.gz to two sites:
|
||||
gnupload --to alpha.gnu.org:foobar \\
|
||||
--to sources.redhat.com:~ftp/pub/foobar \\
|
||||
foobar-0.9.90.tar.gz
|
||||
|
||||
6. Delete oopsbar-0.9.91.tar.gz and upload foobar-0.9.91.tar.gz
|
||||
(the -- terminates the list of files to delete):
|
||||
gnupload --to alpha.gnu.org:foobar \\
|
||||
--to sources.redhat.com:~ftp/pub/foobar \\
|
||||
--delete oopsbar-0.9.91.tar.gz \\
|
||||
-- foobar-0.9.91.tar.gz
|
||||
|
||||
gnupload executes a program ncftpput to do the transfers; if you don't
|
||||
happen to have an ncftp package installed, the ncftpput-ftp script in
|
||||
the build-aux/ directory of the gnulib package
|
||||
(https://savannah.gnu.org/projects/gnulib) may serve as a replacement.
|
||||
|
||||
Send patches and bug reports to <bug-gnulib@gnu.org>."
|
||||
|
||||
copyright_year=`echo "$scriptversion" | sed -e 's/[^0-9].*//'`
|
||||
copyright="Copyright (C) ${copyright_year} Free Software Foundation, Inc.
|
||||
License GPLv2+: GNU GPL version 2 or later <https://gnu.org/licenses/gpl.html>.
|
||||
This is free software: you are free to change and redistribute it.
|
||||
There is NO WARRANTY, to the extent permitted by law."
|
||||
|
||||
# Read local configuration file
|
||||
if test -r "$conffile"; then
|
||||
echo "$0: Reading configuration file $conffile"
|
||||
conf=`sed 's/#.*$//;/^$/d' "$conffile" | tr "\015$nl" ' '`
|
||||
eval set x "$conf \"\$@\""
|
||||
shift
|
||||
fi
|
||||
|
||||
while test -n "$1"; do
|
||||
case $1 in
|
||||
-*)
|
||||
collect_var=
|
||||
case $1 in
|
||||
-h | --help)
|
||||
echo "$usage"
|
||||
exit $?
|
||||
;;
|
||||
--to)
|
||||
if test -z "$2"; then
|
||||
echo "$0: Missing argument for --to" 1>&2
|
||||
exit 1
|
||||
elif echo "$2" | grep 'ftp-upload\.gnu\.org' >/dev/null; then
|
||||
echo "$0: Use ftp.gnu.org:PKGNAME or alpha.gnu.org:PKGNAME" >&2
|
||||
echo "$0: for the destination, not ftp-upload.gnu.org (which" >&2
|
||||
echo "$0: is used for direct ftp uploads, not with gnupload)." >&2
|
||||
echo "$0: See --help and its examples if need be." >&2
|
||||
exit 1
|
||||
else
|
||||
to="$to $2"
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
--user)
|
||||
if test -z "$2"; then
|
||||
echo "$0: Missing argument for --user" 1>&2
|
||||
exit 1
|
||||
else
|
||||
GPG="$GPG --local-user $2"
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
--delete)
|
||||
collect_var=delete_files
|
||||
;;
|
||||
--replace)
|
||||
replace="replace: true"
|
||||
;;
|
||||
--rmsymlink)
|
||||
collect_var=delete_symlinks
|
||||
;;
|
||||
--symlink-regex=*)
|
||||
symlink_expr=`expr "$1" : '[^=]*=\(.*\)'`
|
||||
;;
|
||||
--symlink-regex)
|
||||
symlink_expr='s|-[0-9][0-9\.]*\(-[0-9][0-9]*\)\{0,1\}\.|-latest.|'
|
||||
;;
|
||||
--symlink)
|
||||
collect_var=symlink_files
|
||||
;;
|
||||
-n | --dry-run)
|
||||
dry_run=:
|
||||
;;
|
||||
--version)
|
||||
echo "gnupload $scriptversion"
|
||||
echo "$copyright"
|
||||
exit 0
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
break
|
||||
;;
|
||||
-*)
|
||||
echo "$0: Unknown option '$1', try '$0 --help'" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
if test -z "$collect_var"; then
|
||||
break
|
||||
else
|
||||
eval "$collect_var=\"\$$collect_var $1\""
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
dprint()
|
||||
{
|
||||
echo "Running $* ..."
|
||||
}
|
||||
|
||||
if $dry_run; then
|
||||
dbg=dprint
|
||||
fi
|
||||
|
||||
if test -z "$to"; then
|
||||
echo "$0: Missing destination sites" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test -n "$symlink_files"; then
|
||||
x=`echo "$symlink_files" | sed 's/[^ ]//g;s/ //g'`
|
||||
if test -n "$x"; then
|
||||
echo "$0: Odd number of symlink arguments" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if test $# = 0; then
|
||||
if test -z "${symlink_files}${delete_files}${delete_symlinks}"; then
|
||||
echo "$0: No file to upload" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
# Make sure all files exist. We don't want to ask
|
||||
# for the passphrase if the script will fail.
|
||||
for file
|
||||
do
|
||||
if test ! -f $file; then
|
||||
echo "$0: Cannot find '$file'" 1>&2
|
||||
exit 1
|
||||
elif test -n "$symlink_expr"; then
|
||||
linkname=`echo $file | sed "$symlink_expr"`
|
||||
if test -z "$linkname"; then
|
||||
echo "$0: symlink expression produces empty results" >&2
|
||||
exit 1
|
||||
elif test "$linkname" = $file; then
|
||||
echo "$0: symlink expression does not alter file name" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# Make sure passphrase is not exported in the environment.
|
||||
unset passphrase
|
||||
unset passphrase_fd_0
|
||||
GNUPGHOME=${GNUPGHOME:-$HOME/.gnupg}
|
||||
|
||||
# Reset PATH to be sure that echo is a built-in. We will later use
|
||||
# 'echo $passphrase' to output the passphrase, so it is important that
|
||||
# it is a built-in (third-party programs tend to appear in 'ps'
|
||||
# listings with their arguments...).
|
||||
# Remember this script runs with 'set -e', so if echo is not built-in
|
||||
# it will exit now.
|
||||
if $dry_run || grep -q "^use-agent" $GNUPGHOME/gpg.conf; then :; else
|
||||
PATH=/empty echo -n "Enter GPG passphrase: "
|
||||
stty -echo
|
||||
read -r passphrase
|
||||
stty echo
|
||||
echo
|
||||
passphrase_fd_0="--passphrase-fd 0"
|
||||
fi
|
||||
|
||||
if test $# -ne 0; then
|
||||
for file
|
||||
do
|
||||
echo "Signing $file ..."
|
||||
rm -f $file.sig
|
||||
echo "$passphrase" | $dbg $GPG $passphrase_fd_0 -ba -o $file.sig $file
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
# mkdirective DESTDIR BASE FILE STMT
|
||||
# Arguments: See upload, below
|
||||
mkdirective ()
|
||||
{
|
||||
stmt="$4"
|
||||
if test -n "$3"; then
|
||||
stmt="
|
||||
filename: $3$stmt"
|
||||
fi
|
||||
|
||||
cat >${2}.directive<<EOF
|
||||
version: 1.2
|
||||
directory: $1
|
||||
comment: gnupload v. $scriptversion$stmt
|
||||
EOF
|
||||
if $dry_run; then
|
||||
echo "File ${2}.directive:"
|
||||
cat ${2}.directive
|
||||
echo "File ${2}.directive:" | sed 's/./-/g'
|
||||
fi
|
||||
}
|
||||
|
||||
mksymlink ()
|
||||
{
|
||||
while test $# -ne 0
|
||||
do
|
||||
echo "symlink: $1 $2"
|
||||
shift
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
# upload DEST DESTDIR BASE FILE STMT FILES
|
||||
# Arguments:
|
||||
# DEST Destination site;
|
||||
# DESTDIR Destination directory;
|
||||
# BASE Base name for the directive file;
|
||||
# FILE Name of the file to distribute (may be empty);
|
||||
# STMT Additional statements for the directive file;
|
||||
# FILES List of files to upload.
|
||||
upload ()
|
||||
{
|
||||
dest=$1
|
||||
destdir=$2
|
||||
base=$3
|
||||
file=$4
|
||||
stmt=$5
|
||||
files=$6
|
||||
|
||||
rm -f $base.directive $base.directive.asc
|
||||
case $dest in
|
||||
alpha.gnu.org:*)
|
||||
mkdirective "$destdir" "$base" "$file" "$stmt"
|
||||
echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive
|
||||
$dbg ncftpput ftp-upload.gnu.org /incoming/alpha $files $base.directive.asc
|
||||
;;
|
||||
ftp.gnu.org:*)
|
||||
mkdirective "$destdir" "$base" "$file" "$stmt"
|
||||
echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive
|
||||
$dbg ncftpput ftp-upload.gnu.org /incoming/ftp $files $base.directive.asc
|
||||
;;
|
||||
savannah.gnu.org:*)
|
||||
if test -z "$files"; then
|
||||
echo "$0: warning: standalone directives not applicable for $dest" >&2
|
||||
fi
|
||||
$dbg ncftpput savannah.gnu.org /incoming/savannah/$destdir $files
|
||||
;;
|
||||
savannah.nongnu.org:*)
|
||||
if test -z "$files"; then
|
||||
echo "$0: warning: standalone directives not applicable for $dest" >&2
|
||||
fi
|
||||
$dbg ncftpput savannah.nongnu.org /incoming/savannah/$destdir $files
|
||||
;;
|
||||
download.gnu.org.ua:alpha/*|download.gnu.org.ua:ftp/*)
|
||||
destdir_p1=`echo "$destdir" | sed 's,^[^/]*/,,'`
|
||||
destdir_topdir=`echo "$destdir" | sed 's,/.*,,'`
|
||||
mkdirective "$destdir_p1" "$base" "$file" "$stmt"
|
||||
echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive
|
||||
for f in $files $base.directive.asc
|
||||
do
|
||||
echo put $f
|
||||
done | $dbg sftp -b - puszcza.gnu.org.ua:/incoming/$destdir_topdir
|
||||
;;
|
||||
/*)
|
||||
dest_host=`echo "$dest" | sed 's,:.*,,'`
|
||||
mkdirective "$destdir" "$base" "$file" "$stmt"
|
||||
echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive
|
||||
$dbg cp $files $base.directive.asc $dest_host
|
||||
;;
|
||||
*)
|
||||
if test -z "$files"; then
|
||||
echo "$0: warning: standalone directives not applicable for $dest" >&2
|
||||
fi
|
||||
$dbg scp $files $dest
|
||||
;;
|
||||
esac
|
||||
rm -f $base.directive $base.directive.asc
|
||||
}
|
||||
|
||||
#####
|
||||
# Process any standalone directives
|
||||
stmt=
|
||||
if test -n "$symlink_files"; then
|
||||
stmt="$stmt
|
||||
`mksymlink $symlink_files`"
|
||||
fi
|
||||
|
||||
for file in $delete_files
|
||||
do
|
||||
stmt="$stmt
|
||||
archive: $file"
|
||||
done
|
||||
|
||||
for file in $delete_symlinks
|
||||
do
|
||||
stmt="$stmt
|
||||
rmsymlink: $file"
|
||||
done
|
||||
|
||||
if test -n "$stmt"; then
|
||||
for dest in $to
|
||||
do
|
||||
destdir=`echo $dest | sed 's/[^:]*://'`
|
||||
upload "$dest" "$destdir" "`hostname`-$$" "" "$stmt"
|
||||
done
|
||||
fi
|
||||
|
||||
# Process actual uploads
|
||||
for dest in $to
|
||||
do
|
||||
for file
|
||||
do
|
||||
echo "Uploading $file to $dest ..."
|
||||
stmt=
|
||||
#
|
||||
# allowing file replacement is all or nothing.
|
||||
if test -n "$replace"; then stmt="$stmt
|
||||
$replace"
|
||||
fi
|
||||
#
|
||||
files="$file $file.sig"
|
||||
destdir=`echo $dest | sed 's/[^:]*://'`
|
||||
if test -n "$symlink_expr"; then
|
||||
linkname=`echo $file | sed "$symlink_expr"`
|
||||
stmt="$stmt
|
||||
symlink: $file $linkname
|
||||
symlink: $file.sig $linkname.sig"
|
||||
fi
|
||||
upload "$dest" "$destdir" "$file" "$file" "$stmt" "$files"
|
||||
done
|
||||
done
|
||||
|
||||
exit 0
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
@ -1,159 +0,0 @@
|
||||
#! /bin/sh
|
||||
|
||||
# Output the contents of a shell script with sourced files inlined.
|
||||
# Written by Gary V. Vaughan, 2012
|
||||
|
||||
# This is free software. There is NO warranty; not even for
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
# Copyright (C) 2012-2019, 2021 Bootstrap Authors
|
||||
#
|
||||
# This file is dual licensed under the terms of the MIT license
|
||||
# <https://opensource.org/license/MIT>, and GPL version 2 or later
|
||||
# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
|
||||
# these licenses when using or redistributing this software or any of
|
||||
# the files within it. See the URLs above, or the file `LICENSE`
|
||||
# included in the Bootstrap distribution for the full license texts.
|
||||
|
||||
# Please report bugs or propose patches to:
|
||||
# <https://github.com/gnulib-modules/bootstrap/issues>
|
||||
|
||||
# Source required external libraries:
|
||||
. `echo "$0" |${SED-sed} 's|[^/]*$||'`"funclib.sh"
|
||||
. `echo "$0" |${SED-sed} 's|[^/]*$||'`"options-parser"
|
||||
|
||||
# Set a version string for *this* script.
|
||||
scriptversion=2019-02-19.15; # UTC
|
||||
|
||||
|
||||
## ------ ##
|
||||
## Usage. ##
|
||||
## ------ ##
|
||||
|
||||
# Run 'build-aux/inline-source --help' for help with using this script
|
||||
# from the command line.
|
||||
|
||||
# Recursively scan through a FILE passed on the command line, replacing
|
||||
# either of the following:
|
||||
# . "relative/file"
|
||||
# . `echo "$0" |edit`"relative/file"
|
||||
# with the contents of the referenced files.
|
||||
|
||||
|
||||
## ---------------- ##
|
||||
## Options parsing. ##
|
||||
## ---------------- ##
|
||||
|
||||
usage='$progpath [OPTION]... FILE'
|
||||
|
||||
# Short help message in response to '-h'.
|
||||
usage_message='Options:
|
||||
--debug enable verbose shell tracing
|
||||
--version print version information and exit
|
||||
-h, --help print help message and exit
|
||||
'
|
||||
|
||||
long_help_message="\
|
||||
Report bugs to <bug-libtool@gnu.org>
|
||||
General help using GNU software: <http://www.gnu.org/gethelp/>."
|
||||
|
||||
func_options ${1+"$@"}
|
||||
eval set dummy "$func_options_result"; shift
|
||||
|
||||
|
||||
## -------------------- ##
|
||||
## Resource management. ##
|
||||
## -------------------- ##
|
||||
|
||||
# require_AWK
|
||||
# -----------
|
||||
# Search for a "not hopeless" awk.
|
||||
require_AWK=func_require_AWK
|
||||
func_require_AWK ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
test -n "$AWK" || {
|
||||
# Find the first executable in the list.
|
||||
for _G_prog in gawk mawk nawk awk
|
||||
do
|
||||
require_AWK_IFS=$IFS
|
||||
IFS=${PATH_SEPARATOR-:}
|
||||
for _G_dir in $PATH
|
||||
do
|
||||
IFS=$require_AWK_IFS
|
||||
if test -f "$_G_dir/$_G_prog" && test -x "$_G_dir/$_G_prog"
|
||||
then
|
||||
AWK=$_G_dir/$_G_prog
|
||||
break 2
|
||||
fi
|
||||
done
|
||||
IFS=$require_AWK_IFS
|
||||
done
|
||||
}
|
||||
|
||||
test -n "$AWK" || func_fatal_error "\
|
||||
Please install GNU Awk, or 'export AWK=/path/to/gnu/awk'."
|
||||
|
||||
func_verbose "found '$AWK'."
|
||||
|
||||
require_AWK=:
|
||||
}
|
||||
|
||||
|
||||
## --------------- ##
|
||||
## Core functions. ##
|
||||
## --------------- ##
|
||||
|
||||
# func_include LINE
|
||||
# -----------------
|
||||
# Output the contents of file included by LINE.
|
||||
func_include ()
|
||||
{
|
||||
$require_AWK
|
||||
|
||||
test -f "$1" \
|
||||
|| func_fatal_error "file '$1' not found"
|
||||
|
||||
_G_scriptdir=`echo "$1" |$SED 's|[^/]*$||'`
|
||||
test -n "$_G_scriptdir" || _G_scriptdir="./"
|
||||
|
||||
$AWK '
|
||||
BEGIN { magic = '${_RECURSE_MAGIC-0}'; }
|
||||
|
||||
/^#!/ && magic == 0 {
|
||||
print $0;
|
||||
print "## DO NOT EDIT - This file generated from '$1'";
|
||||
print "## by '$progname' v'$scriptversion'";
|
||||
magic++;
|
||||
next;
|
||||
}
|
||||
|
||||
/^\. ['\''"].*['\''"]$/ {
|
||||
file = substr ($2, 2, length ($2) -2);
|
||||
system (sprintf ("env _RECURSE_MAGIC=%d '$progpath' %s", magic, file));
|
||||
next;
|
||||
}
|
||||
|
||||
/^\. `echo [^`]*`['\''"][^'\''"]*['\''"]$/ {
|
||||
tail = substr ($0, match ($0, /`['\''"]/));
|
||||
file = substr (tail, 3, length (tail) -3);
|
||||
system (sprintf ("env _RECURSE_MAGIC=%d '$progpath' '"$_G_scriptdir"'%s", magic, file));
|
||||
next;
|
||||
}
|
||||
|
||||
{ print; }
|
||||
' < "$1"
|
||||
}
|
||||
|
||||
func_include "$1"
|
||||
|
||||
exit 0
|
||||
|
||||
# Local variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# End:
|
||||
@ -1,541 +0,0 @@
|
||||
#!/bin/sh
|
||||
# install - install a program, script, or datafile
|
||||
|
||||
scriptversion=2020-11-14.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.
|
||||
|
||||
tab=' '
|
||||
nl='
|
||||
'
|
||||
IFS=" $tab$nl"
|
||||
|
||||
# Set DOITPROG to "echo" to test this script.
|
||||
|
||||
doit=${DOITPROG-}
|
||||
doit_exec=${doit:-exec}
|
||||
|
||||
# Put in absolute file names if you don't have them in your path;
|
||||
# or use environment vars.
|
||||
|
||||
chgrpprog=${CHGRPPROG-chgrp}
|
||||
chmodprog=${CHMODPROG-chmod}
|
||||
chownprog=${CHOWNPROG-chown}
|
||||
cmpprog=${CMPPROG-cmp}
|
||||
cpprog=${CPPROG-cp}
|
||||
mkdirprog=${MKDIRPROG-mkdir}
|
||||
mvprog=${MVPROG-mv}
|
||||
rmprog=${RMPROG-rm}
|
||||
stripprog=${STRIPPROG-strip}
|
||||
|
||||
posix_mkdir=
|
||||
|
||||
# Desired mode of installed file.
|
||||
mode=0755
|
||||
|
||||
# Create dirs (including intermediate dirs) using mode 755.
|
||||
# This is like GNU 'install' as of coreutils 8.32 (2020).
|
||||
mkdir_umask=22
|
||||
|
||||
backupsuffix=
|
||||
chgrpcmd=
|
||||
chmodcmd=$chmodprog
|
||||
chowncmd=
|
||||
mvcmd=$mvprog
|
||||
rmcmd="$rmprog -f"
|
||||
stripcmd=
|
||||
|
||||
src=
|
||||
dst=
|
||||
dir_arg=
|
||||
dst_arg=
|
||||
|
||||
copy_on_change=false
|
||||
is_target_a_directory=possibly
|
||||
|
||||
usage="\
|
||||
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
|
||||
or: $0 [OPTION]... SRCFILES... DIRECTORY
|
||||
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
|
||||
or: $0 [OPTION]... -d DIRECTORIES...
|
||||
|
||||
In the 1st form, copy SRCFILE to DSTFILE.
|
||||
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
|
||||
In the 4th, create DIRECTORIES.
|
||||
|
||||
Options:
|
||||
--help display this help and exit.
|
||||
--version display version info and exit.
|
||||
|
||||
-c (ignored)
|
||||
-C install only if different (preserve 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.
|
||||
-p pass -p to $cpprog.
|
||||
-s $stripprog installed files.
|
||||
-S SUFFIX attempt to back up existing files, with suffix SUFFIX.
|
||||
-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
|
||||
|
||||
By default, rm is invoked with -f; when overridden with RMPROG,
|
||||
it's up to you to specify -f if you want it.
|
||||
|
||||
If -S is not specified, no backups are attempted.
|
||||
|
||||
Email bug reports to bug-automake@gnu.org.
|
||||
Automake home page: https://www.gnu.org/software/automake/
|
||||
"
|
||||
|
||||
while test $# -ne 0; do
|
||||
case $1 in
|
||||
-c) ;;
|
||||
|
||||
-C) copy_on_change=true;;
|
||||
|
||||
-d) dir_arg=true;;
|
||||
|
||||
-g) chgrpcmd="$chgrpprog $2"
|
||||
shift;;
|
||||
|
||||
--help) echo "$usage"; exit $?;;
|
||||
|
||||
-m) mode=$2
|
||||
case $mode in
|
||||
*' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
|
||||
echo "$0: invalid mode: $mode" >&2
|
||||
exit 1;;
|
||||
esac
|
||||
shift;;
|
||||
|
||||
-o) chowncmd="$chownprog $2"
|
||||
shift;;
|
||||
|
||||
-p) cpprog="$cpprog -p";;
|
||||
|
||||
-s) stripcmd=$stripprog;;
|
||||
|
||||
-S) backupsuffix="$2"
|
||||
shift;;
|
||||
|
||||
-t)
|
||||
is_target_a_directory=always
|
||||
dst_arg=$2
|
||||
# Protect names problematic for 'test' and other utilities.
|
||||
case $dst_arg in
|
||||
-* | [=\(\)!]) dst_arg=./$dst_arg;;
|
||||
esac
|
||||
shift;;
|
||||
|
||||
-T) is_target_a_directory=never;;
|
||||
|
||||
--version) echo "$0 $scriptversion"; exit $?;;
|
||||
|
||||
--) shift
|
||||
break;;
|
||||
|
||||
-*) echo "$0: invalid option: $1" >&2
|
||||
exit 1;;
|
||||
|
||||
*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
# We allow the use of options -d and -T together, by making -d
|
||||
# take the precedence; this is for compatibility with GNU install.
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
if test -n "$dst_arg"; then
|
||||
echo "$0: target directory not allowed when installing a directory." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
|
||||
# When -d is used, all remaining arguments are directories to create.
|
||||
# When -t is used, the destination is already specified.
|
||||
# Otherwise, the last argument is the destination. Remove it from $@.
|
||||
for arg
|
||||
do
|
||||
if test -n "$dst_arg"; then
|
||||
# $@ is not empty: it contains at least $arg.
|
||||
set fnord "$@" "$dst_arg"
|
||||
shift # fnord
|
||||
fi
|
||||
shift # arg
|
||||
dst_arg=$arg
|
||||
# Protect names problematic for 'test' and other utilities.
|
||||
case $dst_arg in
|
||||
-* | [=\(\)!]) dst_arg=./$dst_arg;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
|
||||
if test $# -eq 0; then
|
||||
if test -z "$dir_arg"; then
|
||||
echo "$0: no input file specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
# It's OK to call 'install-sh -d' without argument.
|
||||
# This can happen when creating conditional directories.
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if test -z "$dir_arg"; then
|
||||
if test $# -gt 1 || test "$is_target_a_directory" = always; then
|
||||
if test ! -d "$dst_arg"; then
|
||||
echo "$0: $dst_arg: Is not a directory." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test -z "$dir_arg"; then
|
||||
do_exit='(exit $ret); exit $ret'
|
||||
trap "ret=129; $do_exit" 1
|
||||
trap "ret=130; $do_exit" 2
|
||||
trap "ret=141; $do_exit" 13
|
||||
trap "ret=143; $do_exit" 15
|
||||
|
||||
# Set umask so as not to create temps with too-generous modes.
|
||||
# However, 'strip' requires both read and write access to temps.
|
||||
case $mode in
|
||||
# Optimize common cases.
|
||||
*644) cp_umask=133;;
|
||||
*755) cp_umask=22;;
|
||||
|
||||
*[0-7])
|
||||
if test -z "$stripcmd"; then
|
||||
u_plus_rw=
|
||||
else
|
||||
u_plus_rw='% 200'
|
||||
fi
|
||||
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
|
||||
*)
|
||||
if test -z "$stripcmd"; then
|
||||
u_plus_rw=
|
||||
else
|
||||
u_plus_rw=,u+rw
|
||||
fi
|
||||
cp_umask=$mode$u_plus_rw;;
|
||||
esac
|
||||
fi
|
||||
|
||||
for src
|
||||
do
|
||||
# Protect names problematic for 'test' and other utilities.
|
||||
case $src in
|
||||
-* | [=\(\)!]) src=./$src;;
|
||||
esac
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
dst=$src
|
||||
dstdir=$dst
|
||||
test -d "$dstdir"
|
||||
dstdir_status=$?
|
||||
# Don't chown directories that already exist.
|
||||
if test $dstdir_status = 0; then
|
||||
chowncmd=""
|
||||
fi
|
||||
else
|
||||
|
||||
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
||||
# might cause directories to be created, which would be especially bad
|
||||
# if $src (and thus $dsttmp) contains '*'.
|
||||
if test ! -f "$src" && test ! -d "$src"; then
|
||||
echo "$0: $src does not exist." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test -z "$dst_arg"; then
|
||||
echo "$0: no destination specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
dst=$dst_arg
|
||||
|
||||
# If destination is a directory, append the input filename.
|
||||
if test -d "$dst"; then
|
||||
if test "$is_target_a_directory" = never; then
|
||||
echo "$0: $dst_arg: Is a directory" >&2
|
||||
exit 1
|
||||
fi
|
||||
dstdir=$dst
|
||||
dstbase=`basename "$src"`
|
||||
case $dst in
|
||||
*/) dst=$dst$dstbase;;
|
||||
*) dst=$dst/$dstbase;;
|
||||
esac
|
||||
dstdir_status=0
|
||||
else
|
||||
dstdir=`dirname "$dst"`
|
||||
test -d "$dstdir"
|
||||
dstdir_status=$?
|
||||
fi
|
||||
fi
|
||||
|
||||
case $dstdir in
|
||||
*/) dstdirslash=$dstdir;;
|
||||
*) dstdirslash=$dstdir/;;
|
||||
esac
|
||||
|
||||
obsolete_mkdir_used=false
|
||||
|
||||
if test $dstdir_status != 0; then
|
||||
case $posix_mkdir in
|
||||
'')
|
||||
# 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
|
||||
# The $RANDOM variable is not portable (e.g., dash). Use it
|
||||
# here however when possible just to lower collision chance.
|
||||
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
|
||||
|
||||
trap '
|
||||
ret=$?
|
||||
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
|
||||
exit $ret
|
||||
' 0
|
||||
|
||||
# Because "mkdir -p" follows existing symlinks and we likely work
|
||||
# directly in world-writeable /tmp, make sure that the '$tmpdir'
|
||||
# directory is successfully created first before we actually test
|
||||
# 'mkdir -p'.
|
||||
if (umask $mkdir_umask &&
|
||||
$mkdirprog $mkdir_mode "$tmpdir" &&
|
||||
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
|
||||
then
|
||||
if test -z "$dir_arg" || {
|
||||
# Check for POSIX incompatibilities with -m.
|
||||
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
||||
# other-writable bit of parent directory when it shouldn't.
|
||||
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
||||
test_tmpdir="$tmpdir/a"
|
||||
ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
|
||||
case $ls_ld_tmpdir in
|
||||
d????-?r-*) different_mode=700;;
|
||||
d????-?--*) different_mode=755;;
|
||||
*) false;;
|
||||
esac &&
|
||||
$mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
|
||||
ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
|
||||
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
||||
}
|
||||
}
|
||||
then posix_mkdir=:
|
||||
fi
|
||||
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
|
||||
else
|
||||
# Remove any dirs left behind by ancient mkdir implementations.
|
||||
rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
|
||||
fi
|
||||
trap '' 0;;
|
||||
esac
|
||||
|
||||
if
|
||||
$posix_mkdir && (
|
||||
umask $mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
|
||||
)
|
||||
then :
|
||||
else
|
||||
|
||||
# mkdir does not conform to POSIX,
|
||||
# or it failed possibly due to a race condition. Create the
|
||||
# directory the slow way, step by step, checking for races as we go.
|
||||
|
||||
case $dstdir in
|
||||
/*) prefix='/';;
|
||||
[-=\(\)!]*) prefix='./';;
|
||||
*) prefix='';;
|
||||
esac
|
||||
|
||||
oIFS=$IFS
|
||||
IFS=/
|
||||
set -f
|
||||
set fnord $dstdir
|
||||
shift
|
||||
set +f
|
||||
IFS=$oIFS
|
||||
|
||||
prefixes=
|
||||
|
||||
for d
|
||||
do
|
||||
test X"$d" = X && continue
|
||||
|
||||
prefix=$prefix$d
|
||||
if test -d "$prefix"; then
|
||||
prefixes=
|
||||
else
|
||||
if $posix_mkdir; then
|
||||
(umask $mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
|
||||
# Don't fail if two instances are running concurrently.
|
||||
test -d "$prefix" || exit 1
|
||||
else
|
||||
case $prefix in
|
||||
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
|
||||
*) qprefix=$prefix;;
|
||||
esac
|
||||
prefixes="$prefixes '$qprefix'"
|
||||
fi
|
||||
fi
|
||||
prefix=$prefix/
|
||||
done
|
||||
|
||||
if test -n "$prefixes"; then
|
||||
# Don't fail if two instances are running concurrently.
|
||||
(umask $mkdir_umask &&
|
||||
eval "\$doit_exec \$mkdirprog $prefixes") ||
|
||||
test -d "$dstdir" || exit 1
|
||||
obsolete_mkdir_used=true
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
|
||||
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
|
||||
{ test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
|
||||
test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
|
||||
else
|
||||
|
||||
# Make a couple of temp file names in the proper directory.
|
||||
dsttmp=${dstdirslash}_inst.$$_
|
||||
rmtmp=${dstdirslash}_rm.$$_
|
||||
|
||||
# Trap to clean up those temp files at exit.
|
||||
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
||||
|
||||
# Copy the file name to the temp name.
|
||||
(umask $cp_umask &&
|
||||
{ test -z "$stripcmd" || {
|
||||
# Create $dsttmp read-write so that cp doesn't create it read-only,
|
||||
# which would cause strip to fail.
|
||||
if test -z "$doit"; then
|
||||
: >"$dsttmp" # No need to fork-exec 'touch'.
|
||||
else
|
||||
$doit touch "$dsttmp"
|
||||
fi
|
||||
}
|
||||
} &&
|
||||
$doit_exec $cpprog "$src" "$dsttmp") &&
|
||||
|
||||
# and set any options; do chmod last to preserve setuid bits.
|
||||
#
|
||||
# If any of these fail, we abort the whole thing. If we want to
|
||||
# ignore errors from any of these, just make sure not to ignore
|
||||
# errors from the above "$doit $cpprog $src $dsttmp" command.
|
||||
#
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
|
||||
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
|
||||
{ test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
|
||||
{ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
|
||||
|
||||
# If -C, don't bother to copy if it wouldn't change the file.
|
||||
if $copy_on_change &&
|
||||
old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
|
||||
new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
|
||||
set -f &&
|
||||
set X $old && old=:$2:$4:$5:$6 &&
|
||||
set X $new && new=:$2:$4:$5:$6 &&
|
||||
set +f &&
|
||||
test "$old" = "$new" &&
|
||||
$cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
|
||||
then
|
||||
rm -f "$dsttmp"
|
||||
else
|
||||
# If $backupsuffix is set, and the file being installed
|
||||
# already exists, attempt a backup. Don't worry if it fails,
|
||||
# e.g., if mv doesn't support -f.
|
||||
if test -n "$backupsuffix" && test -f "$dst"; then
|
||||
$doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
|
||||
fi
|
||||
|
||||
# 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 "$dst" 2>/dev/null ||
|
||||
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
|
||||
{ $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
|
||||
} ||
|
||||
{ echo "$0: cannot unlink or rename $dst" >&2
|
||||
(exit 1); exit 1
|
||||
}
|
||||
} &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
$doit $mvcmd "$dsttmp" "$dst"
|
||||
}
|
||||
fi || exit 1
|
||||
|
||||
trap '' 0
|
||||
fi
|
||||
done
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,228 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Get modification time of a file or directory and pretty-print it.
|
||||
|
||||
scriptversion=2018-03-07.03; # UTC
|
||||
|
||||
# Copyright (C) 1995-2022 Free Software Foundation, Inc.
|
||||
# written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# This file is maintained in Automake, please report
|
||||
# bugs to <bug-automake@gnu.org> or send patches to
|
||||
# <automake-patches@gnu.org>.
|
||||
|
||||
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
|
||||
fi
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No file. Try '$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: mdate-sh [--help] [--version] FILE
|
||||
|
||||
Pretty-print the modification day of FILE, in the format:
|
||||
1 January 1970
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
exit $?
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "mdate-sh $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
esac
|
||||
|
||||
error ()
|
||||
{
|
||||
echo "$0: $1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
# Prevent date giving response in another language.
|
||||
LANG=C
|
||||
export LANG
|
||||
LC_ALL=C
|
||||
export LC_ALL
|
||||
LC_TIME=C
|
||||
export LC_TIME
|
||||
|
||||
# Use UTC to get reproducible result.
|
||||
TZ=UTC0
|
||||
export TZ
|
||||
|
||||
# GNU ls changes its time format in response to the TIME_STYLE
|
||||
# variable. Since we cannot assume 'unset' works, revert this
|
||||
# variable to its documented default.
|
||||
if test "${TIME_STYLE+set}" = set; then
|
||||
TIME_STYLE=posix-long-iso
|
||||
export TIME_STYLE
|
||||
fi
|
||||
|
||||
save_arg1=$1
|
||||
|
||||
# Find out how to get the extended ls output of a file or directory.
|
||||
if ls -L /dev/null 1>/dev/null 2>&1; then
|
||||
ls_command='ls -L -l -d'
|
||||
else
|
||||
ls_command='ls -l -d'
|
||||
fi
|
||||
# Avoid user/group names that might have spaces, when possible.
|
||||
if ls -n /dev/null 1>/dev/null 2>&1; then
|
||||
ls_command="$ls_command -n"
|
||||
fi
|
||||
|
||||
# A 'ls -l' line looks as follows on OS/2.
|
||||
# drwxrwx--- 0 Aug 11 2001 foo
|
||||
# This differs from Unix, which adds ownership information.
|
||||
# drwxrwx--- 2 root root 4096 Aug 11 2001 foo
|
||||
#
|
||||
# To find the date, we split the line on spaces and iterate on words
|
||||
# until we find a month. This cannot work with files whose owner is a
|
||||
# user named "Jan", or "Feb", etc. However, it's unlikely that '/'
|
||||
# will be owned by a user whose name is a month. So we first look at
|
||||
# the extended ls output of the root directory to decide how many
|
||||
# words should be skipped to get the date.
|
||||
|
||||
# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below.
|
||||
set x`$ls_command /`
|
||||
|
||||
# Find which argument is the month.
|
||||
month=
|
||||
command=
|
||||
until test $month
|
||||
do
|
||||
test $# -gt 0 || error "failed parsing '$ls_command /' output"
|
||||
shift
|
||||
# Add another shift to the command.
|
||||
command="$command shift;"
|
||||
case $1 in
|
||||
Jan) month=January; nummonth=1;;
|
||||
Feb) month=February; nummonth=2;;
|
||||
Mar) month=March; nummonth=3;;
|
||||
Apr) month=April; nummonth=4;;
|
||||
May) month=May; nummonth=5;;
|
||||
Jun) month=June; nummonth=6;;
|
||||
Jul) month=July; nummonth=7;;
|
||||
Aug) month=August; nummonth=8;;
|
||||
Sep) month=September; nummonth=9;;
|
||||
Oct) month=October; nummonth=10;;
|
||||
Nov) month=November; nummonth=11;;
|
||||
Dec) month=December; nummonth=12;;
|
||||
esac
|
||||
done
|
||||
|
||||
test -n "$month" || error "failed parsing '$ls_command /' output"
|
||||
|
||||
# Get the extended ls output of the file or directory.
|
||||
set dummy x`eval "$ls_command \"\\\$save_arg1\""`
|
||||
|
||||
# Remove all preceding arguments
|
||||
eval $command
|
||||
|
||||
# Because of the dummy argument above, month is in $2.
|
||||
#
|
||||
# On a POSIX system, we should have
|
||||
#
|
||||
# $# = 5
|
||||
# $1 = file size
|
||||
# $2 = month
|
||||
# $3 = day
|
||||
# $4 = year or time
|
||||
# $5 = filename
|
||||
#
|
||||
# On Darwin 7.7.0 and 7.6.0, we have
|
||||
#
|
||||
# $# = 4
|
||||
# $1 = day
|
||||
# $2 = month
|
||||
# $3 = year or time
|
||||
# $4 = filename
|
||||
|
||||
# Get the month.
|
||||
case $2 in
|
||||
Jan) month=January; nummonth=1;;
|
||||
Feb) month=February; nummonth=2;;
|
||||
Mar) month=March; nummonth=3;;
|
||||
Apr) month=April; nummonth=4;;
|
||||
May) month=May; nummonth=5;;
|
||||
Jun) month=June; nummonth=6;;
|
||||
Jul) month=July; nummonth=7;;
|
||||
Aug) month=August; nummonth=8;;
|
||||
Sep) month=September; nummonth=9;;
|
||||
Oct) month=October; nummonth=10;;
|
||||
Nov) month=November; nummonth=11;;
|
||||
Dec) month=December; nummonth=12;;
|
||||
esac
|
||||
|
||||
case $3 in
|
||||
???*) day=$1;;
|
||||
*) day=$3; shift;;
|
||||
esac
|
||||
|
||||
# Here we have to deal with the problem that the ls output gives either
|
||||
# the time of day or the year.
|
||||
case $3 in
|
||||
*:*) set `date`; eval year=\$$#
|
||||
case $2 in
|
||||
Jan) nummonthtod=1;;
|
||||
Feb) nummonthtod=2;;
|
||||
Mar) nummonthtod=3;;
|
||||
Apr) nummonthtod=4;;
|
||||
May) nummonthtod=5;;
|
||||
Jun) nummonthtod=6;;
|
||||
Jul) nummonthtod=7;;
|
||||
Aug) nummonthtod=8;;
|
||||
Sep) nummonthtod=9;;
|
||||
Oct) nummonthtod=10;;
|
||||
Nov) nummonthtod=11;;
|
||||
Dec) nummonthtod=12;;
|
||||
esac
|
||||
# For the first six month of the year the time notation can also
|
||||
# be used for files modified in the last year.
|
||||
if (expr $nummonth \> $nummonthtod) > /dev/null;
|
||||
then
|
||||
year=`expr $year - 1`
|
||||
fi;;
|
||||
*) year=$3;;
|
||||
esac
|
||||
|
||||
# The result.
|
||||
echo $day $month $year
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
@ -1,215 +0,0 @@
|
||||
#! /bin/sh
|
||||
# Common wrapper for a few potentially missing GNU programs.
|
||||
|
||||
scriptversion=2018-03-07.03; # UTC
|
||||
|
||||
# Copyright (C) 1996-2020 Free Software Foundation, Inc.
|
||||
# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
if test $# -eq 0; then
|
||||
echo 1>&2 "Try '$0 --help' for more information"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case $1 in
|
||||
|
||||
--is-lightweight)
|
||||
# Used by our autoconf macros to check whether the available missing
|
||||
# script is modern enough.
|
||||
exit 0
|
||||
;;
|
||||
|
||||
--run)
|
||||
# Back-compat with the calling convention used by older automake.
|
||||
shift
|
||||
;;
|
||||
|
||||
-h|--h|--he|--hel|--help)
|
||||
echo "\
|
||||
$0 [OPTION]... PROGRAM [ARGUMENT]...
|
||||
|
||||
Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
|
||||
to PROGRAM being missing or too old.
|
||||
|
||||
Options:
|
||||
-h, --help display this help and exit
|
||||
-v, --version output version information and exit
|
||||
|
||||
Supported PROGRAM values:
|
||||
aclocal autoconf autoheader autom4te automake makeinfo
|
||||
bison yacc flex lex help2man
|
||||
|
||||
Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
|
||||
'g' are ignored when checking the name.
|
||||
|
||||
Send bug reports to <bug-automake@gnu.org>."
|
||||
exit $?
|
||||
;;
|
||||
|
||||
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
|
||||
echo "missing $scriptversion (GNU Automake)"
|
||||
exit $?
|
||||
;;
|
||||
|
||||
-*)
|
||||
echo 1>&2 "$0: unknown '$1' option"
|
||||
echo 1>&2 "Try '$0 --help' for more information"
|
||||
exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
# Run the given program, remember its exit status.
|
||||
"$@"; st=$?
|
||||
|
||||
# If it succeeded, we are done.
|
||||
test $st -eq 0 && exit 0
|
||||
|
||||
# Also exit now if we it failed (or wasn't found), and '--version' was
|
||||
# passed; such an option is passed most likely to detect whether the
|
||||
# program is present and works.
|
||||
case $2 in --version|--help) exit $st;; esac
|
||||
|
||||
# Exit code 63 means version mismatch. This often happens when the user
|
||||
# tries to use an ancient version of a tool on a file that requires a
|
||||
# minimum version.
|
||||
if test $st -eq 63; then
|
||||
msg="probably too old"
|
||||
elif test $st -eq 127; then
|
||||
# Program was missing.
|
||||
msg="missing on your system"
|
||||
else
|
||||
# Program was found and executed, but failed. Give up.
|
||||
exit $st
|
||||
fi
|
||||
|
||||
perl_URL=https://www.perl.org/
|
||||
flex_URL=https://github.com/westes/flex
|
||||
gnu_software_URL=https://www.gnu.org/software
|
||||
|
||||
program_details ()
|
||||
{
|
||||
case $1 in
|
||||
aclocal|automake)
|
||||
echo "The '$1' program is part of the GNU Automake package:"
|
||||
echo "<$gnu_software_URL/automake>"
|
||||
echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
|
||||
echo "<$gnu_software_URL/autoconf>"
|
||||
echo "<$gnu_software_URL/m4/>"
|
||||
echo "<$perl_URL>"
|
||||
;;
|
||||
autoconf|autom4te|autoheader)
|
||||
echo "The '$1' program is part of the GNU Autoconf package:"
|
||||
echo "<$gnu_software_URL/autoconf/>"
|
||||
echo "It also requires GNU m4 and Perl in order to run:"
|
||||
echo "<$gnu_software_URL/m4/>"
|
||||
echo "<$perl_URL>"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
give_advice ()
|
||||
{
|
||||
# Normalize program name to check for.
|
||||
normalized_program=`echo "$1" | sed '
|
||||
s/^gnu-//; t
|
||||
s/^gnu//; t
|
||||
s/^g//; t'`
|
||||
|
||||
printf '%s\n' "'$1' is $msg."
|
||||
|
||||
configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
|
||||
case $normalized_program in
|
||||
autoconf*)
|
||||
echo "You should only need it if you modified 'configure.ac',"
|
||||
echo "or m4 files included by it."
|
||||
program_details 'autoconf'
|
||||
;;
|
||||
autoheader*)
|
||||
echo "You should only need it if you modified 'acconfig.h' or"
|
||||
echo "$configure_deps."
|
||||
program_details 'autoheader'
|
||||
;;
|
||||
automake*)
|
||||
echo "You should only need it if you modified 'Makefile.am' or"
|
||||
echo "$configure_deps."
|
||||
program_details 'automake'
|
||||
;;
|
||||
aclocal*)
|
||||
echo "You should only need it if you modified 'acinclude.m4' or"
|
||||
echo "$configure_deps."
|
||||
program_details 'aclocal'
|
||||
;;
|
||||
autom4te*)
|
||||
echo "You might have modified some maintainer files that require"
|
||||
echo "the 'autom4te' program to be rebuilt."
|
||||
program_details 'autom4te'
|
||||
;;
|
||||
bison*|yacc*)
|
||||
echo "You should only need it if you modified a '.y' file."
|
||||
echo "You may want to install the GNU Bison package:"
|
||||
echo "<$gnu_software_URL/bison/>"
|
||||
;;
|
||||
lex*|flex*)
|
||||
echo "You should only need it if you modified a '.l' file."
|
||||
echo "You may want to install the Fast Lexical Analyzer package:"
|
||||
echo "<$flex_URL>"
|
||||
;;
|
||||
help2man*)
|
||||
echo "You should only need it if you modified a dependency" \
|
||||
"of a man page."
|
||||
echo "You may want to install the GNU Help2man package:"
|
||||
echo "<$gnu_software_URL/help2man/>"
|
||||
;;
|
||||
makeinfo*)
|
||||
echo "You should only need it if you modified a '.texi' file, or"
|
||||
echo "any other file indirectly affecting the aspect of the manual."
|
||||
echo "You might want to install the Texinfo package:"
|
||||
echo "<$gnu_software_URL/texinfo/>"
|
||||
echo "The spurious makeinfo call might also be the consequence of"
|
||||
echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
|
||||
echo "want to install GNU make:"
|
||||
echo "<$gnu_software_URL/make/>"
|
||||
;;
|
||||
*)
|
||||
echo "You might have modified some files without having the proper"
|
||||
echo "tools for further handling them. Check the 'README' file, it"
|
||||
echo "often tells you about the needed prerequisites for installing"
|
||||
echo "this package. You may also peek at any GNU archive site, in"
|
||||
echo "case some other package contains this missing '$1' program."
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
give_advice "$1" | sed -e '1s/^/WARNING: /' \
|
||||
-e '2,$s/^/ /' >&2
|
||||
|
||||
# Propagate the correct exit status (expected to be 127 for a program
|
||||
# not found, 63 for a program that failed due to version mismatch).
|
||||
exit $st
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
@ -1,61 +0,0 @@
|
||||
#! /bin/sh
|
||||
|
||||
# no-bogus-m4-defines - detect wrong m4 definitions
|
||||
# -------------------------------------------------
|
||||
# Try to catch the case where 'aclocal' pulls installed libtool
|
||||
# macro file contents from another version of libtool into the
|
||||
# current package 'aclocal.m4'. Currently used by 'make dist'
|
||||
# and by ./bootstrap (bootstrap.conf).
|
||||
#
|
||||
# Copyright (C) 2015-2019, 2021-2022 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is part of GNU Libtool.
|
||||
#
|
||||
# GNU Libtool 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.
|
||||
#
|
||||
# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy
|
||||
# can be downloaded from http://www.gnu.org/licenses/gpl.html,
|
||||
# or obtained by writing to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
# Please report bugs or propose patches to bug-libtool@gnu.org.
|
||||
|
||||
. `echo "$0" |${SED-sed} 's|[^/]*$||'`/funclib.sh
|
||||
# source this for "GNU m4" detection methods
|
||||
. `echo "$0" |${SED-sed} 's|[^/]*$||'`/extract-trace
|
||||
|
||||
$require_gnu_m4
|
||||
|
||||
bogus_macros='LT_INIT AC_PROG_LIBTOOL AM_PROG_LIBTOOL'
|
||||
|
||||
bogus_macros_grep=''
|
||||
for macro in $bogus_macros; do
|
||||
func_append bogus_macros_grep "/$macro/p;"
|
||||
done
|
||||
|
||||
clean_false_alarms="pushdef(\`AC_BEFORE', \`')"
|
||||
|
||||
bogus_macros_check_output=`$ECHO "$clean_false_alarms" \
|
||||
|$M4 - aclocal.m4 libltdl/aclocal.m4 \
|
||||
|$SED -n "$bogus_macros_grep"`
|
||||
|
||||
exit_val=0
|
||||
for macro in $bogus_macros; do
|
||||
case $bogus_macros_check_output in
|
||||
*$macro*)
|
||||
func_error "Bogus $macro macro definition in an aclocal.m4 file"
|
||||
exit_val=1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
exit $exit_val
|
||||
@ -1,685 +0,0 @@
|
||||
#! /bin/sh
|
||||
|
||||
# A portable, pluggable option parser for Bourne shell.
|
||||
# Written by Gary V. Vaughan, 2010
|
||||
|
||||
# This is free software. There is NO warranty; not even for
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
# Copyright (C) 2010-2019, 2021 Bootstrap Authors
|
||||
#
|
||||
# This file is dual licensed under the terms of the MIT license
|
||||
# <https://opensource.org/license/MIT>, and GPL version 2 or later
|
||||
# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
|
||||
# these licenses when using or redistributing this software or any of
|
||||
# the files within it. See the URLs above, or the file `LICENSE`
|
||||
# included in the Bootstrap distribution for the full license texts.
|
||||
|
||||
# Please report bugs or propose patches to:
|
||||
# <https://github.com/gnulib-modules/bootstrap/issues>
|
||||
|
||||
# Set a version string for this script.
|
||||
scriptversion=2019-02-19.15; # UTC
|
||||
|
||||
|
||||
## ------ ##
|
||||
## Usage. ##
|
||||
## ------ ##
|
||||
|
||||
# This file is a library for parsing options in your shell scripts along
|
||||
# with assorted other useful supporting features that you can make use
|
||||
# of too.
|
||||
#
|
||||
# For the simplest scripts you might need only:
|
||||
#
|
||||
# #!/bin/sh
|
||||
# . relative/path/to/funclib.sh
|
||||
# . relative/path/to/options-parser
|
||||
# scriptversion=1.0
|
||||
# func_options ${1+"$@"}
|
||||
# eval set dummy "$func_options_result"; shift
|
||||
# ...rest of your script...
|
||||
#
|
||||
# In order for the '--version' option to work, you will need to have a
|
||||
# suitably formatted comment like the one at the top of this file
|
||||
# starting with '# Written by ' and ending with '# Copyright'.
|
||||
#
|
||||
# For '-h' and '--help' to work, you will also need a one line
|
||||
# description of your script's purpose in a comment directly above the
|
||||
# '# Written by ' line, like the one at the top of this file.
|
||||
#
|
||||
# The default options also support '--debug', which will turn on shell
|
||||
# execution tracing (see the comment above debug_cmd below for another
|
||||
# use), and '--verbose' and the func_verbose function to allow your script
|
||||
# to display verbose messages only when your user has specified
|
||||
# '--verbose'.
|
||||
#
|
||||
# After sourcing this file, you can plug in processing for additional
|
||||
# options by amending the variables from the 'Configuration' section
|
||||
# below, and following the instructions in the 'Option parsing'
|
||||
# section further down.
|
||||
|
||||
## -------------- ##
|
||||
## Configuration. ##
|
||||
## -------------- ##
|
||||
|
||||
# You should override these variables in your script after sourcing this
|
||||
# file so that they reflect the customisations you have added to the
|
||||
# option parser.
|
||||
|
||||
# The usage line for option parsing errors and the start of '-h' and
|
||||
# '--help' output messages. You can embed shell variables for delayed
|
||||
# expansion at the time the message is displayed, but you will need to
|
||||
# quote other shell meta-characters carefully to prevent them being
|
||||
# expanded when the contents are evaled.
|
||||
usage='$progpath [OPTION]...'
|
||||
|
||||
# Short help message in response to '-h' and '--help'. Add to this or
|
||||
# override it after sourcing this library to reflect the full set of
|
||||
# options your script accepts.
|
||||
usage_message="\
|
||||
--debug enable verbose shell tracing
|
||||
-W, --warnings=CATEGORY
|
||||
report the warnings falling in CATEGORY [all]
|
||||
-v, --verbose verbosely report processing
|
||||
--version print version information and exit
|
||||
-h, --help print short or long help message and exit
|
||||
"
|
||||
|
||||
# Additional text appended to 'usage_message' in response to '--help'.
|
||||
long_help_message="
|
||||
Warning categories include:
|
||||
'all' show all warnings
|
||||
'none' turn off all the warnings
|
||||
'error' warnings are treated as fatal errors"
|
||||
|
||||
# Help message printed before fatal option parsing errors.
|
||||
fatal_help="Try '\$progname --help' for more information."
|
||||
|
||||
|
||||
|
||||
## ------------------------- ##
|
||||
## Hook function management. ##
|
||||
## ------------------------- ##
|
||||
|
||||
# This section contains functions for adding, removing, and running hooks
|
||||
# in the main code. A hook is just a list of function names that can be
|
||||
# run in order later on.
|
||||
|
||||
# func_hookable FUNC_NAME
|
||||
# -----------------------
|
||||
# Declare that FUNC_NAME will run hooks added with
|
||||
# 'func_add_hook FUNC_NAME ...'.
|
||||
func_hookable ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
func_append hookable_fns " $1"
|
||||
}
|
||||
|
||||
|
||||
# func_add_hook FUNC_NAME HOOK_FUNC
|
||||
# ---------------------------------
|
||||
# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must
|
||||
# first have been declared "hookable" by a call to 'func_hookable'.
|
||||
func_add_hook ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
case " $hookable_fns " in
|
||||
*" $1 "*) ;;
|
||||
*) func_fatal_error "'$1' does not accept hook functions." ;;
|
||||
esac
|
||||
|
||||
eval func_append ${1}_hooks '" $2"'
|
||||
}
|
||||
|
||||
|
||||
# func_remove_hook FUNC_NAME HOOK_FUNC
|
||||
# ------------------------------------
|
||||
# Remove HOOK_FUNC from the list of hook functions to be called by
|
||||
# FUNC_NAME.
|
||||
func_remove_hook ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
|
||||
}
|
||||
|
||||
|
||||
# func_propagate_result FUNC_NAME_A FUNC_NAME_B
|
||||
# ---------------------------------------------
|
||||
# If the *_result variable of FUNC_NAME_A _is set_, assign its value to
|
||||
# *_result variable of FUNC_NAME_B.
|
||||
func_propagate_result ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
func_propagate_result_result=:
|
||||
if eval "test \"\${${1}_result+set}\" = set"
|
||||
then
|
||||
eval "${2}_result=\$${1}_result"
|
||||
else
|
||||
func_propagate_result_result=false
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
# func_run_hooks FUNC_NAME [ARG]...
|
||||
# ---------------------------------
|
||||
# Run all hook functions registered to FUNC_NAME.
|
||||
# It's assumed that the list of hook functions contains nothing more
|
||||
# than a whitespace-delimited list of legal shell function names, and
|
||||
# no effort is wasted trying to catch shell meta-characters or preserve
|
||||
# whitespace.
|
||||
func_run_hooks ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
case " $hookable_fns " in
|
||||
*" $1 "*) ;;
|
||||
*) func_fatal_error "'$1' does not support hook functions." ;;
|
||||
esac
|
||||
|
||||
eval _G_hook_fns=\$$1_hooks; shift
|
||||
|
||||
for _G_hook in $_G_hook_fns; do
|
||||
func_unset "${_G_hook}_result"
|
||||
eval $_G_hook '${1+"$@"}'
|
||||
func_propagate_result $_G_hook func_run_hooks
|
||||
if $func_propagate_result_result; then
|
||||
eval set dummy "$func_run_hooks_result"; shift
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
|
||||
## --------------- ##
|
||||
## Option parsing. ##
|
||||
## --------------- ##
|
||||
|
||||
# In order to add your own option parsing hooks, you must accept the
|
||||
# full positional parameter list from your hook function. You may remove
|
||||
# or edit any options that you action, and then pass back the remaining
|
||||
# unprocessed options in '<hooked_function_name>_result', escaped
|
||||
# suitably for 'eval'.
|
||||
#
|
||||
# The '<hooked_function_name>_result' variable is automatically unset
|
||||
# before your hook gets called; for best performance, only set the
|
||||
# *_result variable when necessary (i.e. don't call the 'func_quote'
|
||||
# function unnecessarily because it can be an expensive operation on some
|
||||
# machines).
|
||||
#
|
||||
# Like this:
|
||||
#
|
||||
# my_options_prep ()
|
||||
# {
|
||||
# $debug_cmd
|
||||
#
|
||||
# # Extend the existing usage message.
|
||||
# usage_message=$usage_message'
|
||||
# -s, --silent don'\''t print informational messages
|
||||
# '
|
||||
# # No change in '$@' (ignored completely by this hook). Leave
|
||||
# # my_options_prep_result variable intact.
|
||||
# }
|
||||
# func_add_hook func_options_prep my_options_prep
|
||||
#
|
||||
#
|
||||
# my_silent_option ()
|
||||
# {
|
||||
# $debug_cmd
|
||||
#
|
||||
# args_changed=false
|
||||
#
|
||||
# # Note that, for efficiency, we parse as many options as we can
|
||||
# # recognise in a loop before passing the remainder back to the
|
||||
# # caller on the first unrecognised argument we encounter.
|
||||
# while test $# -gt 0; do
|
||||
# opt=$1; shift
|
||||
# case $opt in
|
||||
# --silent|-s) opt_silent=:
|
||||
# args_changed=:
|
||||
# ;;
|
||||
# # Separate non-argument short options:
|
||||
# -s*) func_split_short_opt "$_G_opt"
|
||||
# set dummy "$func_split_short_opt_name" \
|
||||
# "-$func_split_short_opt_arg" ${1+"$@"}
|
||||
# shift
|
||||
# args_changed=:
|
||||
# ;;
|
||||
# *) # Make sure the first unrecognised option "$_G_opt"
|
||||
# # is added back to "$@" in case we need it later,
|
||||
# # if $args_changed was set to 'true'.
|
||||
# set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
|
||||
# esac
|
||||
# done
|
||||
#
|
||||
# # Only call 'func_quote' here if we processed at least one argument.
|
||||
# if $args_changed; then
|
||||
# func_quote eval ${1+"$@"}
|
||||
# my_silent_option_result=$func_quote_result
|
||||
# fi
|
||||
# }
|
||||
# func_add_hook func_parse_options my_silent_option
|
||||
#
|
||||
#
|
||||
# my_option_validation ()
|
||||
# {
|
||||
# $debug_cmd
|
||||
#
|
||||
# $opt_silent && $opt_verbose && func_fatal_help "\
|
||||
# '--silent' and '--verbose' options are mutually exclusive."
|
||||
# }
|
||||
# func_add_hook func_validate_options my_option_validation
|
||||
#
|
||||
# You'll also need to manually amend $usage_message to reflect the extra
|
||||
# options you parse. It's preferable to append if you can, so that
|
||||
# multiple option parsing hooks can be added safely.
|
||||
|
||||
|
||||
# func_options_finish [ARG]...
|
||||
# ----------------------------
|
||||
# Finishing the option parse loop (call 'func_options' hooks ATM).
|
||||
func_options_finish ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
func_run_hooks func_options ${1+"$@"}
|
||||
func_propagate_result func_run_hooks func_options_finish
|
||||
}
|
||||
|
||||
|
||||
# func_options [ARG]...
|
||||
# ---------------------
|
||||
# All the functions called inside func_options are hookable. See the
|
||||
# individual implementations for details.
|
||||
func_hookable func_options
|
||||
func_options ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
_G_options_quoted=false
|
||||
|
||||
for my_func in options_prep parse_options validate_options options_finish
|
||||
do
|
||||
func_unset func_${my_func}_result
|
||||
func_unset func_run_hooks_result
|
||||
eval func_$my_func '${1+"$@"}'
|
||||
func_propagate_result func_$my_func func_options
|
||||
if $func_propagate_result_result; then
|
||||
eval set dummy "$func_options_result"; shift
|
||||
_G_options_quoted=:
|
||||
fi
|
||||
done
|
||||
|
||||
$_G_options_quoted || {
|
||||
# As we (func_options) are top-level options-parser function and
|
||||
# nobody quoted "$@" for us yet, we need to do it explicitly for
|
||||
# caller.
|
||||
func_quote eval ${1+"$@"}
|
||||
func_options_result=$func_quote_result
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# func_options_prep [ARG]...
|
||||
# --------------------------
|
||||
# All initialisations required before starting the option parse loop.
|
||||
# Note that when calling hook functions, we pass through the list of
|
||||
# positional parameters. If a hook function modifies that list, and
|
||||
# needs to propagate that back to rest of this script, then the complete
|
||||
# modified list must be put in 'func_run_hooks_result' before returning.
|
||||
func_hookable func_options_prep
|
||||
func_options_prep ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
# Option defaults:
|
||||
opt_verbose=false
|
||||
opt_warning_types=
|
||||
|
||||
func_run_hooks func_options_prep ${1+"$@"}
|
||||
func_propagate_result func_run_hooks func_options_prep
|
||||
}
|
||||
|
||||
|
||||
# func_parse_options [ARG]...
|
||||
# ---------------------------
|
||||
# The main option parsing loop.
|
||||
func_hookable func_parse_options
|
||||
func_parse_options ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
_G_parse_options_requote=false
|
||||
# this just eases exit handling
|
||||
while test $# -gt 0; do
|
||||
# Defer to hook functions for initial option parsing, so they
|
||||
# get priority in the event of reusing an option name.
|
||||
func_run_hooks func_parse_options ${1+"$@"}
|
||||
func_propagate_result func_run_hooks func_parse_options
|
||||
if $func_propagate_result_result; then
|
||||
eval set dummy "$func_parse_options_result"; shift
|
||||
# Even though we may have changed "$@", we passed the "$@" array
|
||||
# down into the hook and it quoted it for us (because we are in
|
||||
# this if-branch). No need to quote it again.
|
||||
_G_parse_options_requote=false
|
||||
fi
|
||||
|
||||
# Break out of the loop if we already parsed every option.
|
||||
test $# -gt 0 || break
|
||||
|
||||
# We expect that one of the options parsed in this function matches
|
||||
# and thus we remove _G_opt from "$@" and need to re-quote.
|
||||
_G_match_parse_options=:
|
||||
_G_opt=$1
|
||||
shift
|
||||
case $_G_opt in
|
||||
--debug|-x) debug_cmd='set -x'
|
||||
func_echo "enabling shell trace mode" >&2
|
||||
$debug_cmd
|
||||
;;
|
||||
|
||||
--no-warnings|--no-warning|--no-warn)
|
||||
set dummy --warnings none ${1+"$@"}
|
||||
shift
|
||||
;;
|
||||
|
||||
--warnings|--warning|-W)
|
||||
if test $# = 0 && func_missing_arg $_G_opt; then
|
||||
_G_parse_options_requote=:
|
||||
break
|
||||
fi
|
||||
case " $warning_categories $1" in
|
||||
*" $1 "*)
|
||||
# trailing space prevents matching last $1 above
|
||||
func_append_uniq opt_warning_types " $1"
|
||||
;;
|
||||
*all)
|
||||
opt_warning_types=$warning_categories
|
||||
;;
|
||||
*none)
|
||||
opt_warning_types=none
|
||||
warning_func=:
|
||||
;;
|
||||
*error)
|
||||
opt_warning_types=$warning_categories
|
||||
warning_func=func_fatal_error
|
||||
;;
|
||||
*)
|
||||
func_fatal_error \
|
||||
"unsupported warning category: '$1'"
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
;;
|
||||
|
||||
--verbose|-v) opt_verbose=: ;;
|
||||
--version) func_version ;;
|
||||
-\?|-h) func_usage ;;
|
||||
--help) func_help ;;
|
||||
|
||||
# Separate optargs to long options (plugins may need this):
|
||||
--*=*) func_split_equals "$_G_opt"
|
||||
set dummy "$func_split_equals_lhs" \
|
||||
"$func_split_equals_rhs" ${1+"$@"}
|
||||
shift
|
||||
;;
|
||||
|
||||
# Separate optargs to short options:
|
||||
-W*)
|
||||
func_split_short_opt "$_G_opt"
|
||||
set dummy "$func_split_short_opt_name" \
|
||||
"$func_split_short_opt_arg" ${1+"$@"}
|
||||
shift
|
||||
;;
|
||||
|
||||
# Separate non-argument short options:
|
||||
-\?*|-h*|-v*|-x*)
|
||||
func_split_short_opt "$_G_opt"
|
||||
set dummy "$func_split_short_opt_name" \
|
||||
"-$func_split_short_opt_arg" ${1+"$@"}
|
||||
shift
|
||||
;;
|
||||
|
||||
--) _G_parse_options_requote=: ; break ;;
|
||||
-*) func_fatal_help "unrecognised option: '$_G_opt'" ;;
|
||||
*) set dummy "$_G_opt" ${1+"$@"}; shift
|
||||
_G_match_parse_options=false
|
||||
break
|
||||
;;
|
||||
esac
|
||||
|
||||
if $_G_match_parse_options; then
|
||||
_G_parse_options_requote=:
|
||||
fi
|
||||
done
|
||||
|
||||
if $_G_parse_options_requote; then
|
||||
# save modified positional parameters for caller
|
||||
func_quote eval ${1+"$@"}
|
||||
func_parse_options_result=$func_quote_result
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
# func_validate_options [ARG]...
|
||||
# ------------------------------
|
||||
# Perform any sanity checks on option settings and/or unconsumed
|
||||
# arguments.
|
||||
func_hookable func_validate_options
|
||||
func_validate_options ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
# Display all warnings if -W was not given.
|
||||
test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
|
||||
|
||||
func_run_hooks func_validate_options ${1+"$@"}
|
||||
func_propagate_result func_run_hooks func_validate_options
|
||||
|
||||
# Bail if the options were screwed!
|
||||
$exit_cmd $EXIT_FAILURE
|
||||
}
|
||||
|
||||
|
||||
|
||||
## ----------------- ##
|
||||
## Helper functions. ##
|
||||
## ----------------- ##
|
||||
|
||||
# This section contains the helper functions used by the rest of the
|
||||
# hookable option parser framework in ascii-betical order.
|
||||
|
||||
|
||||
# func_fatal_help ARG...
|
||||
# ----------------------
|
||||
# Echo program name prefixed message to standard error, followed by
|
||||
# a help hint, and exit.
|
||||
func_fatal_help ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
eval \$ECHO \""Usage: $usage"\"
|
||||
eval \$ECHO \""$fatal_help"\"
|
||||
func_error ${1+"$@"}
|
||||
exit $EXIT_FAILURE
|
||||
}
|
||||
|
||||
|
||||
# func_help
|
||||
# ---------
|
||||
# Echo long help message to standard output and exit.
|
||||
func_help ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
func_usage_message
|
||||
$ECHO "$long_help_message"
|
||||
exit 0
|
||||
}
|
||||
|
||||
|
||||
# func_missing_arg ARGNAME
|
||||
# ------------------------
|
||||
# Echo program name prefixed message to standard error and set global
|
||||
# exit_cmd.
|
||||
func_missing_arg ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
func_error "Missing argument for '$1'."
|
||||
exit_cmd=exit
|
||||
}
|
||||
|
||||
|
||||
# func_split_equals STRING
|
||||
# ------------------------
|
||||
# Set func_split_equals_lhs and func_split_equals_rhs shell variables
|
||||
# after splitting STRING at the '=' sign.
|
||||
test -z "$_G_HAVE_XSI_OPS" \
|
||||
&& (eval 'x=a/b/c;
|
||||
test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
|
||||
&& _G_HAVE_XSI_OPS=yes
|
||||
|
||||
if test yes = "$_G_HAVE_XSI_OPS"
|
||||
then
|
||||
# This is an XSI compatible shell, allowing a faster implementation...
|
||||
eval 'func_split_equals ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
func_split_equals_lhs=${1%%=*}
|
||||
func_split_equals_rhs=${1#*=}
|
||||
if test "x$func_split_equals_lhs" = "x$1"; then
|
||||
func_split_equals_rhs=
|
||||
fi
|
||||
}'
|
||||
else
|
||||
# ...otherwise fall back to using expr, which is often a shell builtin.
|
||||
func_split_equals ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
|
||||
func_split_equals_rhs=
|
||||
test "x$func_split_equals_lhs=" = "x$1" \
|
||||
|| func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
|
||||
}
|
||||
fi #func_split_equals
|
||||
|
||||
|
||||
# func_split_short_opt SHORTOPT
|
||||
# -----------------------------
|
||||
# Set func_split_short_opt_name and func_split_short_opt_arg shell
|
||||
# variables after splitting SHORTOPT after the 2nd character.
|
||||
if test yes = "$_G_HAVE_XSI_OPS"
|
||||
then
|
||||
# This is an XSI compatible shell, allowing a faster implementation...
|
||||
eval 'func_split_short_opt ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
func_split_short_opt_arg=${1#??}
|
||||
func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
|
||||
}'
|
||||
else
|
||||
# ...otherwise fall back to using expr, which is often a shell builtin.
|
||||
func_split_short_opt ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'`
|
||||
func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
|
||||
}
|
||||
fi #func_split_short_opt
|
||||
|
||||
|
||||
# func_usage
|
||||
# ----------
|
||||
# Echo short help message to standard output and exit.
|
||||
func_usage ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
func_usage_message
|
||||
$ECHO "Run '$progname --help |${PAGER-more}' for full usage"
|
||||
exit 0
|
||||
}
|
||||
|
||||
|
||||
# func_usage_message
|
||||
# ------------------
|
||||
# Echo short help message to standard output.
|
||||
func_usage_message ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
eval \$ECHO \""Usage: $usage"\"
|
||||
echo
|
||||
$SED -n 's|^# ||
|
||||
/^Written by/{
|
||||
x;p;x
|
||||
}
|
||||
h
|
||||
/^Written by/q' < "$progpath"
|
||||
echo
|
||||
eval \$ECHO \""$usage_message"\"
|
||||
}
|
||||
|
||||
|
||||
# func_version
|
||||
# ------------
|
||||
# Echo version message to standard output and exit.
|
||||
# The version message is extracted from the calling file's header
|
||||
# comments, with leading '# ' stripped:
|
||||
# 1. First display the progname and version
|
||||
# 2. Followed by the header comment line matching /^# Written by /
|
||||
# 3. Then a blank line followed by the first following line matching
|
||||
# /^# Copyright /
|
||||
# 4. Immediately followed by any lines between the previous matches,
|
||||
# except lines preceding the intervening completely blank line.
|
||||
# For example, see the header comments of this file.
|
||||
func_version ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
printf '%s\n' "$progname $scriptversion"
|
||||
$SED -n '
|
||||
/^# Written by /!b
|
||||
s|^# ||; p; n
|
||||
|
||||
:fwd2blnk
|
||||
/./ {
|
||||
n
|
||||
b fwd2blnk
|
||||
}
|
||||
p; n
|
||||
|
||||
:holdwrnt
|
||||
s|^# ||
|
||||
s|^# *$||
|
||||
/^Copyright /!{
|
||||
/./H
|
||||
n
|
||||
b holdwrnt
|
||||
}
|
||||
|
||||
s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
|
||||
G
|
||||
s|\(\n\)\n*|\1|g
|
||||
p; q' < "$progpath"
|
||||
|
||||
exit $?
|
||||
}
|
||||
|
||||
|
||||
# Local variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# End:
|
||||
@ -1,150 +0,0 @@
|
||||
#! /bin/sh
|
||||
# test-driver - basic testsuite driver script.
|
||||
|
||||
scriptversion=2018-03-07.03; # UTC
|
||||
|
||||
# Copyright (C) 2011-2020 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# This file is maintained in Automake, please report
|
||||
# bugs to <bug-automake@gnu.org> or send patches to
|
||||
# <automake-patches@gnu.org>.
|
||||
|
||||
# Make unconditional expansion of undefined variables an error. This
|
||||
# helps a lot in preventing typo-related bugs.
|
||||
set -u
|
||||
|
||||
usage_error ()
|
||||
{
|
||||
echo "$0: $*" >&2
|
||||
print_usage >&2
|
||||
exit 2
|
||||
}
|
||||
|
||||
print_usage ()
|
||||
{
|
||||
cat <<END
|
||||
Usage:
|
||||
test-driver --test-name NAME --log-file PATH --trs-file PATH
|
||||
[--expect-failure {yes|no}] [--color-tests {yes|no}]
|
||||
[--enable-hard-errors {yes|no}] [--]
|
||||
TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
|
||||
|
||||
The '--test-name', '--log-file' and '--trs-file' options are mandatory.
|
||||
See the GNU Automake documentation for information.
|
||||
END
|
||||
}
|
||||
|
||||
test_name= # Used for reporting.
|
||||
log_file= # Where to save the output of the test script.
|
||||
trs_file= # Where to save the metadata of the test run.
|
||||
expect_failure=no
|
||||
color_tests=no
|
||||
enable_hard_errors=yes
|
||||
while test $# -gt 0; do
|
||||
case $1 in
|
||||
--help) print_usage; exit $?;;
|
||||
--version) echo "test-driver $scriptversion"; exit $?;;
|
||||
--test-name) test_name=$2; shift;;
|
||||
--log-file) log_file=$2; shift;;
|
||||
--trs-file) trs_file=$2; shift;;
|
||||
--color-tests) color_tests=$2; shift;;
|
||||
--expect-failure) expect_failure=$2; shift;;
|
||||
--enable-hard-errors) enable_hard_errors=$2; shift;;
|
||||
--) shift; break;;
|
||||
-*) usage_error "invalid option: '$1'";;
|
||||
*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
missing_opts=
|
||||
test x"$test_name" = x && missing_opts="$missing_opts --test-name"
|
||||
test x"$log_file" = x && missing_opts="$missing_opts --log-file"
|
||||
test x"$trs_file" = x && missing_opts="$missing_opts --trs-file"
|
||||
if test x"$missing_opts" != x; then
|
||||
usage_error "the following mandatory options are missing:$missing_opts"
|
||||
fi
|
||||
|
||||
if test $# -eq 0; then
|
||||
usage_error "missing argument"
|
||||
fi
|
||||
|
||||
if test $color_tests = yes; then
|
||||
# Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
|
||||
red='[0;31m' # Red.
|
||||
grn='[0;32m' # Green.
|
||||
lgn='[1;32m' # Light green.
|
||||
blu='[1;34m' # Blue.
|
||||
mgn='[0;35m' # Magenta.
|
||||
std='[m' # No color.
|
||||
else
|
||||
red= grn= lgn= blu= mgn= std=
|
||||
fi
|
||||
|
||||
do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
|
||||
trap "st=129; $do_exit" 1
|
||||
trap "st=130; $do_exit" 2
|
||||
trap "st=141; $do_exit" 13
|
||||
trap "st=143; $do_exit" 15
|
||||
|
||||
# Test script is run here.
|
||||
"$@" >$log_file 2>&1
|
||||
estatus=$?
|
||||
|
||||
if test $enable_hard_errors = no && test $estatus -eq 99; then
|
||||
tweaked_estatus=1
|
||||
else
|
||||
tweaked_estatus=$estatus
|
||||
fi
|
||||
|
||||
case $tweaked_estatus:$expect_failure in
|
||||
0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
|
||||
0:*) col=$grn res=PASS recheck=no gcopy=no;;
|
||||
77:*) col=$blu res=SKIP recheck=no gcopy=yes;;
|
||||
99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;;
|
||||
*:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;;
|
||||
*:*) col=$red res=FAIL recheck=yes gcopy=yes;;
|
||||
esac
|
||||
|
||||
# Report the test outcome and exit status in the logs, so that one can
|
||||
# know whether the test passed or failed simply by looking at the '.log'
|
||||
# file, without the need of also peaking into the corresponding '.trs'
|
||||
# file (automake bug#11814).
|
||||
echo "$res $test_name (exit status: $estatus)" >>$log_file
|
||||
|
||||
# Report outcome to console.
|
||||
echo "${col}${res}${std}: $test_name"
|
||||
|
||||
# Register the test result, and other relevant metadata.
|
||||
echo ":test-result: $res" > $trs_file
|
||||
echo ":global-test-result: $res" >> $trs_file
|
||||
echo ":recheck: $recheck" >> $trs_file
|
||||
echo ":copy-in-global-log: $gcopy" >> $trs_file
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,302 +0,0 @@
|
||||
#!/bin/sh
|
||||
#! -*-perl-*-
|
||||
|
||||
# Update an FSF copyright year list to include the current year.
|
||||
|
||||
# Copyright (C) 2009-2022 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Written by Jim Meyering and Joel E. Denny
|
||||
|
||||
# This script updates an FSF copyright year list to include the current year.
|
||||
# Usage: update-copyright [FILE...]
|
||||
#
|
||||
# The arguments to this script should be names of files that contain
|
||||
# copyright statements to be updated. The copyright holder's name
|
||||
# defaults to "Free Software Foundation, Inc." but may be changed to
|
||||
# any other name by using the "UPDATE_COPYRIGHT_HOLDER" environment
|
||||
# variable.
|
||||
#
|
||||
# For example, you might wish to use the update-copyright target rule
|
||||
# in maint.mk from gnulib's maintainer-makefile module.
|
||||
#
|
||||
# Iff a copyright statement is recognized in a file and the final
|
||||
# year is not the current year, then the statement is updated for the
|
||||
# new year and it is reformatted to:
|
||||
#
|
||||
# 1. Fit within 72 columns.
|
||||
# 2. Convert 2-digit years to 4-digit years by prepending "19".
|
||||
# 3. Expand copyright year intervals. (See "Environment variables"
|
||||
# below.)
|
||||
#
|
||||
# A warning is printed for every file for which no copyright
|
||||
# statement is recognized.
|
||||
#
|
||||
# Each file's copyright statement must be formatted correctly in
|
||||
# order to be recognized. For example, each of these is fine:
|
||||
#
|
||||
# Copyright @copyright{} 1990-2005, 2007-2009 Free Software
|
||||
# Foundation, Inc.
|
||||
#
|
||||
# # Copyright (C) 1990-2005, 2007-2009 Free Software
|
||||
# # Foundation, Inc.
|
||||
#
|
||||
# /*
|
||||
# * Copyright © 90,2005,2007-2009
|
||||
# * Free Software Foundation, Inc.
|
||||
# */
|
||||
#
|
||||
# However, the following format is not recognized because the line
|
||||
# prefix changes after the first line:
|
||||
#
|
||||
# ## Copyright (C) 1990-2005, 2007-2009 Free Software
|
||||
# # Foundation, Inc.
|
||||
#
|
||||
# However, any correctly formatted copyright statement following
|
||||
# a non-matching copyright statements would be recognized.
|
||||
#
|
||||
# The exact conditions that a file's copyright statement must meet
|
||||
# to be recognized are:
|
||||
#
|
||||
# 1. It is the first copyright statement that meets all of the
|
||||
# following conditions. Subsequent copyright statements are
|
||||
# ignored.
|
||||
# 2. Its format is "Copyright (C)", then a list of copyright years,
|
||||
# and then the name of the copyright holder.
|
||||
# 3. The "(C)" takes one of the following forms or is omitted
|
||||
# entirely:
|
||||
#
|
||||
# A. (C)
|
||||
# B. (c)
|
||||
# C. @copyright{}
|
||||
# D. ©
|
||||
# E. ©
|
||||
#
|
||||
# 4. The "Copyright" appears at the beginning of a line, except that it
|
||||
# may be prefixed by any sequence (e.g., a comment) of no more than
|
||||
# 5 characters -- including white space.
|
||||
# 5. Iff such a prefix is present, the same prefix appears at the
|
||||
# beginning of each remaining line within the FSF copyright
|
||||
# statement. There is one exception in order to support C-style
|
||||
# comments: if the first line's prefix contains nothing but
|
||||
# whitespace surrounding a "/*", then the prefix for all subsequent
|
||||
# lines is the same as the first line's prefix except with each of
|
||||
# "/" and possibly "*" replaced by a " ". The replacement of "*"
|
||||
# by " " is consistent throughout all subsequent lines.
|
||||
# 6. Blank lines, even if preceded by the prefix, do not appear
|
||||
# within the FSF copyright statement.
|
||||
# 7. Each copyright year is 2 or 4 digits, and years are separated by
|
||||
# commas, "-", or "--". Whitespace may appear after commas.
|
||||
#
|
||||
# Environment variables:
|
||||
#
|
||||
# 1. If UPDATE_COPYRIGHT_FORCE=1, a recognized FSF copyright statement
|
||||
# is reformatted even if it does not need updating for the new
|
||||
# year. If unset or set to 0, only updated FSF copyright
|
||||
# statements are reformatted.
|
||||
# 2. If UPDATE_COPYRIGHT_USE_INTERVALS=1, every series of consecutive
|
||||
# copyright years (such as 90, 1991, 1992-2007, 2008) in a
|
||||
# reformatted FSF copyright statement is collapsed to a single
|
||||
# interval (such as 1990-2008). If unset or set to 0, all existing
|
||||
# copyright year intervals in a reformatted FSF copyright statement
|
||||
# are expanded instead.
|
||||
# If UPDATE_COPYRIGHT_USE_INTERVALS=2, convert a sequence with gaps
|
||||
# to the minimal containing range. For example, convert
|
||||
# 2000, 2004-2007, 2009 to 2000-2009.
|
||||
# 3. For testing purposes, you can set the assumed current year in
|
||||
# UPDATE_COPYRIGHT_YEAR.
|
||||
# 4. The default maximum line length for a copyright line is 72.
|
||||
# Set UPDATE_COPYRIGHT_MAX_LINE_LENGTH to use a different length.
|
||||
# 5. Set UPDATE_COPYRIGHT_HOLDER if the copyright holder is other
|
||||
# than "Free Software Foundation, Inc.".
|
||||
|
||||
# This is a prologue that allows to run a perl script as an executable
|
||||
# on systems that are compliant to a POSIX version before POSIX:2017.
|
||||
# On such systems, the usual invocation of an executable through execlp()
|
||||
# or execvp() fails with ENOEXEC if it is a script that does not start
|
||||
# with a #! line. The script interpreter mentioned in the #! line has
|
||||
# to be /bin/sh, because on GuixSD systems that is the only program that
|
||||
# has a fixed file name. The second line is essential for perl and is
|
||||
# also useful for editing this file in Emacs. The next two lines below
|
||||
# are valid code in both sh and perl. When executed by sh, they re-execute
|
||||
# the script through the perl program found in $PATH. The '-x' option
|
||||
# is essential as well; without it, perl would re-execute the script
|
||||
# through /bin/sh. When executed by perl, the next two lines are a no-op.
|
||||
eval 'exec perl -wSx -0777 -pi "$0" "$@"'
|
||||
if 0;
|
||||
|
||||
my $VERSION = '2020-04-04.15:07'; # UTC
|
||||
# The definition above must lie within the first 8 lines in order
|
||||
# for the Emacs time-stamp write hook (at end) to update it.
|
||||
# If you change this file with Emacs, please let the write hook
|
||||
# do its job. Otherwise, update this string manually.
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
my $copyright_re = 'Copyright';
|
||||
my $circle_c_re = '(?:\([cC]\)|@copyright\{}|\\\\\(co|©|©)';
|
||||
my $holder = $ENV{UPDATE_COPYRIGHT_HOLDER};
|
||||
$holder ||= 'Free Software Foundation, Inc.';
|
||||
my $prefix_max = 5;
|
||||
my $margin = $ENV{UPDATE_COPYRIGHT_MAX_LINE_LENGTH};
|
||||
!$margin || $margin !~ m/^\d+$/
|
||||
and $margin = 72;
|
||||
|
||||
my $tab_width = 8;
|
||||
|
||||
my $this_year = $ENV{UPDATE_COPYRIGHT_YEAR};
|
||||
if (!$this_year || $this_year !~ m/^\d{4}$/)
|
||||
{
|
||||
my ($sec, $min, $hour, $mday, $month, $year) = localtime (time ());
|
||||
$this_year = $year + 1900;
|
||||
}
|
||||
|
||||
# Unless the file consistently uses "\r\n" as the EOL, use "\n" instead.
|
||||
my $eol = /(?:^|[^\r])\n/ ? "\n" : "\r\n";
|
||||
|
||||
my $leading;
|
||||
my $prefix;
|
||||
my $ws_re;
|
||||
my $stmt_re;
|
||||
while (/(^|\n)(.{0,$prefix_max})$copyright_re/g)
|
||||
{
|
||||
$leading = "$1$2";
|
||||
$prefix = $2;
|
||||
if ($prefix =~ /^(\s*\/)\*(\s*)$/)
|
||||
{
|
||||
$prefix =~ s,/, ,;
|
||||
my $prefix_ws = $prefix;
|
||||
$prefix_ws =~ s/\*/ /; # Only whitespace.
|
||||
if (/\G(?:[^*\n]|\*[^\/\n])*\*?\n$prefix_ws/)
|
||||
{
|
||||
$prefix = $prefix_ws;
|
||||
}
|
||||
}
|
||||
$ws_re = '[ \t\r\f]'; # \s without \n
|
||||
$ws_re =
|
||||
"(?:$ws_re*(?:$ws_re|\\n" . quotemeta($prefix) . ")$ws_re*)";
|
||||
my $holder_re = $holder;
|
||||
$holder_re =~ s/\s/$ws_re/g;
|
||||
my $stmt_remainder_re =
|
||||
"(?:$ws_re$circle_c_re)?"
|
||||
. "$ws_re(?:(?:\\d\\d)?\\d\\d(?:,$ws_re?|--?))*"
|
||||
. "((?:\\d\\d)?\\d\\d)$ws_re$holder_re";
|
||||
if (/\G$stmt_remainder_re/)
|
||||
{
|
||||
$stmt_re =
|
||||
quotemeta($leading) . "($copyright_re$stmt_remainder_re)";
|
||||
last;
|
||||
}
|
||||
}
|
||||
if (defined $stmt_re)
|
||||
{
|
||||
/$stmt_re/ or die; # Should never die.
|
||||
my $stmt = $1;
|
||||
my $final_year_orig = $2;
|
||||
|
||||
# Handle two-digit year numbers like "98" and "99".
|
||||
my $final_year = $final_year_orig;
|
||||
$final_year <= 99
|
||||
and $final_year += 1900;
|
||||
|
||||
if ($final_year != $this_year)
|
||||
{
|
||||
# Update the year.
|
||||
$stmt =~ s/\b$final_year_orig\b/$final_year, $this_year/;
|
||||
}
|
||||
if ($final_year != $this_year || $ENV{'UPDATE_COPYRIGHT_FORCE'})
|
||||
{
|
||||
# Normalize all whitespace including newline-prefix sequences.
|
||||
$stmt =~ s/$ws_re/ /g;
|
||||
|
||||
# Put spaces after commas.
|
||||
$stmt =~ s/, ?/, /g;
|
||||
|
||||
# Convert 2-digit to 4-digit years.
|
||||
$stmt =~ s/(\b\d\d\b)/19$1/g;
|
||||
|
||||
# Make the use of intervals consistent.
|
||||
if (!$ENV{UPDATE_COPYRIGHT_USE_INTERVALS})
|
||||
{
|
||||
$stmt =~ s/(\d{4})--?(\d{4})/join(', ', $1..$2)/eg;
|
||||
}
|
||||
else
|
||||
{
|
||||
my $ndash = $ARGV =~ /\.tex(i(nfo)?)?$/ ? "--" : "-";
|
||||
|
||||
$stmt =~
|
||||
s/
|
||||
(\d{4})
|
||||
(?:
|
||||
(,\ |--?)
|
||||
((??{
|
||||
if ($2 ne ', ') { '\d{4}'; }
|
||||
elsif (!$3) { $1 + 1; }
|
||||
else { $3 + 1; }
|
||||
}))
|
||||
)+
|
||||
/$1$ndash$3/gx;
|
||||
|
||||
# When it's 2, emit a single range encompassing all year numbers.
|
||||
$ENV{UPDATE_COPYRIGHT_USE_INTERVALS} == 2
|
||||
and $stmt =~ s/\b(\d{4})\b.*\b(\d{4})\b/$1$ndash$2/;
|
||||
}
|
||||
|
||||
# Format within margin.
|
||||
my $stmt_wrapped;
|
||||
my $text_margin = $margin - length($prefix);
|
||||
if ($prefix =~ /^(\t+)/)
|
||||
{
|
||||
$text_margin -= length($1) * ($tab_width - 1);
|
||||
}
|
||||
while (length $stmt)
|
||||
{
|
||||
if (($stmt =~ s/^(.{1,$text_margin})(?: |$)//)
|
||||
|| ($stmt =~ s/^([\S]+)(?: |$)//))
|
||||
{
|
||||
my $line = $1;
|
||||
$stmt_wrapped .= $stmt_wrapped ? "$eol$prefix" : $leading;
|
||||
$stmt_wrapped .= $line;
|
||||
}
|
||||
else
|
||||
{
|
||||
# Should be unreachable, but we don't want an infinite
|
||||
# loop if it can be reached.
|
||||
die;
|
||||
}
|
||||
}
|
||||
|
||||
# Replace the old copyright statement.
|
||||
s/$stmt_re/$stmt_wrapped/;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
print STDERR "$ARGV: warning: copyright statement not found\n";
|
||||
}
|
||||
|
||||
# Hey Emacs!
|
||||
# Local variables:
|
||||
# coding: utf-8
|
||||
# mode: perl
|
||||
# indent-tabs-mode: nil
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-line-limit: 200
|
||||
# time-stamp-start: "my $VERSION = '"
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H:%02M"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "'; # UTC"
|
||||
# End:
|
||||
@ -1,240 +0,0 @@
|
||||
#!/bin/sh
|
||||
#! -*-perl-*-
|
||||
|
||||
# Detect instances of "if (p) free (p);".
|
||||
# Likewise "if (p != 0)", "if (0 != p)", or with NULL; and with braces.
|
||||
|
||||
# Copyright (C) 2008-2022 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Written by Jim Meyering
|
||||
|
||||
# This is a prologue that allows to run a perl script as an executable
|
||||
# on systems that are compliant to a POSIX version before POSIX:2017.
|
||||
# On such systems, the usual invocation of an executable through execlp()
|
||||
# or execvp() fails with ENOEXEC if it is a script that does not start
|
||||
# with a #! line. The script interpreter mentioned in the #! line has
|
||||
# to be /bin/sh, because on GuixSD systems that is the only program that
|
||||
# has a fixed file name. The second line is essential for perl and is
|
||||
# also useful for editing this file in Emacs. The next two lines below
|
||||
# are valid code in both sh and perl. When executed by sh, they re-execute
|
||||
# the script through the perl program found in $PATH. The '-x' option
|
||||
# is essential as well; without it, perl would re-execute the script
|
||||
# through /bin/sh. When executed by perl, the next two lines are a no-op.
|
||||
eval 'exec perl -wSx "$0" "$@"'
|
||||
if 0;
|
||||
|
||||
my $VERSION = '2022-01-27 18:51'; # UTC
|
||||
# The definition above must lie within the first 8 lines in order
|
||||
# for the Emacs time-stamp write hook (at end) to update it.
|
||||
# If you change this file with Emacs, please let the write hook
|
||||
# do its job. Otherwise, update this string manually.
|
||||
|
||||
my $copyright_year = '2022';
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Getopt::Long;
|
||||
|
||||
(my $ME = $0) =~ s|.*/||;
|
||||
|
||||
# use File::Coda; # https://meyering.net/code/Coda/
|
||||
END {
|
||||
defined fileno STDOUT or return;
|
||||
close STDOUT and return;
|
||||
warn "$ME: failed to close standard output: $!\n";
|
||||
$? ||= 1;
|
||||
}
|
||||
|
||||
sub usage ($)
|
||||
{
|
||||
my ($exit_code) = @_;
|
||||
my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
|
||||
if ($exit_code != 0)
|
||||
{
|
||||
print $STREAM "Try '$ME --help' for more information.\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
print $STREAM <<EOF;
|
||||
Usage: $ME [OPTIONS] FILE...
|
||||
|
||||
Detect any instance in FILE of a useless "if" test before a free call, e.g.,
|
||||
"if (p) free (p);". Any such test may be safely removed without affecting
|
||||
the semantics of the C code in FILE. Use --name=FOO --name=BAR to also
|
||||
detect free-like functions named FOO and BAR.
|
||||
|
||||
OPTIONS:
|
||||
|
||||
--list print only the name of each matching FILE (\\0-terminated)
|
||||
--name=N add name N to the list of \'free\'-like functions to detect;
|
||||
may be repeated
|
||||
|
||||
--help display this help and exit
|
||||
--version output version information and exit
|
||||
|
||||
Exit status:
|
||||
|
||||
0 one or more matches
|
||||
1 no match
|
||||
2 an error
|
||||
|
||||
EXAMPLE:
|
||||
|
||||
For example, this command prints all removable "if" tests before "free"
|
||||
and "kfree" calls in the linux kernel sources:
|
||||
|
||||
git ls-files -z |xargs -0 $ME --name=kfree
|
||||
|
||||
EOF
|
||||
}
|
||||
exit $exit_code;
|
||||
}
|
||||
|
||||
sub is_NULL ($)
|
||||
{
|
||||
my ($expr) = @_;
|
||||
return ($expr eq 'NULL' || $expr eq '0');
|
||||
}
|
||||
|
||||
{
|
||||
sub EXIT_MATCH {0}
|
||||
sub EXIT_NO_MATCH {1}
|
||||
sub EXIT_ERROR {2}
|
||||
my $err = EXIT_NO_MATCH;
|
||||
|
||||
my $list;
|
||||
my @name = qw(free);
|
||||
GetOptions
|
||||
(
|
||||
help => sub { usage 0 },
|
||||
version =>
|
||||
sub
|
||||
{
|
||||
print "$ME version $VERSION\n";
|
||||
print "Copyright (C) $copyright_year Free Software Foundation, Inc.\n";
|
||||
print "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.\n"
|
||||
. "This is free software: you are free to change and redistribute it.\n"
|
||||
. "There is NO WARRANTY, to the extent permitted by law.\n";
|
||||
print "\n";
|
||||
my $author = "Jim Meyering";
|
||||
print "Written by $author.\n";
|
||||
exit
|
||||
},
|
||||
list => \$list,
|
||||
'name=s@' => \@name,
|
||||
) or usage 1;
|
||||
|
||||
# Make sure we have the right number of non-option arguments.
|
||||
# Always tell the user why we fail.
|
||||
@ARGV < 1
|
||||
and (warn "$ME: missing FILE argument\n"), usage EXIT_ERROR;
|
||||
|
||||
my $or = join '|', @name;
|
||||
my $regexp = qr/(?:$or)/;
|
||||
|
||||
# Set the input record separator.
|
||||
# Note: this makes it impractical to print line numbers.
|
||||
$/ = '"';
|
||||
|
||||
my $found_match = 0;
|
||||
FILE:
|
||||
foreach my $file (@ARGV)
|
||||
{
|
||||
open FH, '<', $file
|
||||
or (warn "$ME: can't open '$file' for reading: $!\n"),
|
||||
$err = EXIT_ERROR, next;
|
||||
while (defined (my $line = <FH>))
|
||||
{
|
||||
# Skip non-matching lines early to save time
|
||||
$line =~ /\bif\b/
|
||||
or next;
|
||||
while ($line =~
|
||||
/\b(if\s*\(\s*([^)]+?)(?:\s*!=\s*([^)]+?))?\s*\)
|
||||
# 1 2 3
|
||||
(?: \s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;|
|
||||
\s*\{\s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;\s*\}))/sxg)
|
||||
{
|
||||
my $all = $1;
|
||||
my ($lhs, $rhs) = ($2, $3);
|
||||
my ($free_opnd, $braced_free_opnd) = ($4, $5);
|
||||
my $non_NULL;
|
||||
if (!defined $rhs) { $non_NULL = $lhs }
|
||||
elsif (is_NULL $rhs) { $non_NULL = $lhs }
|
||||
elsif (is_NULL $lhs) { $non_NULL = $rhs }
|
||||
else { next }
|
||||
|
||||
# Compare the non-NULL part of the "if" expression and the
|
||||
# free'd expression, without regard to white space.
|
||||
$non_NULL =~ tr/ \t//d;
|
||||
my $e2 = defined $free_opnd ? $free_opnd : $braced_free_opnd;
|
||||
$e2 =~ tr/ \t//d;
|
||||
if ($non_NULL eq $e2)
|
||||
{
|
||||
$found_match = 1;
|
||||
$list
|
||||
and (print "$file\0"), next FILE;
|
||||
print "$file: $all\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
continue
|
||||
{
|
||||
close FH;
|
||||
}
|
||||
|
||||
$found_match && $err == EXIT_NO_MATCH
|
||||
and $err = EXIT_MATCH;
|
||||
|
||||
exit $err;
|
||||
}
|
||||
|
||||
my $foo = <<'EOF';
|
||||
# The above is to *find* them.
|
||||
# This adjusts them, removing the unnecessary "if (p)" part.
|
||||
|
||||
# FIXME: do something like this as an option (doesn't do braces):
|
||||
free=xfree
|
||||
git grep -l -z "$free *(" \
|
||||
| xargs -0 useless-if-before-free -l --name="$free" \
|
||||
| xargs -0 perl -0x3b -pi -e \
|
||||
's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s+('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\)\s*;)/$2/s'
|
||||
|
||||
# Use the following to remove redundant uses of kfree inside braces.
|
||||
# Note that -0777 puts perl in slurp-whole-file mode;
|
||||
# but we have plenty of memory, these days...
|
||||
free=kfree
|
||||
git grep -l -z "$free *(" \
|
||||
| xargs -0 useless-if-before-free -l --name="$free" \
|
||||
| xargs -0 perl -0777 -pi -e \
|
||||
's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s*\{\s*('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\);)\s*\}[^\n]*$/$2/gms'
|
||||
|
||||
Be careful that the result of the above transformation is valid.
|
||||
If the matched string is followed by "else", then obviously, it won't be.
|
||||
|
||||
When modifying files, refuse to process anything other than a regular file.
|
||||
EOF
|
||||
|
||||
## Local Variables:
|
||||
## mode: perl
|
||||
## indent-tabs-mode: nil
|
||||
## eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
## time-stamp-line-limit: 50
|
||||
## time-stamp-start: "my $VERSION = '"
|
||||
## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
|
||||
## time-stamp-time-zone: "UTC0"
|
||||
## time-stamp-end: "'; # UTC"
|
||||
## End:
|
||||
@ -1,113 +0,0 @@
|
||||
#!/bin/sh
|
||||
# List version-controlled file names.
|
||||
|
||||
# Print a version string.
|
||||
scriptversion=2018-03-07.03; # UTC
|
||||
|
||||
# Copyright (C) 2006-2022 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
# List the specified version-controlled files.
|
||||
# With no argument, list them all. With a single DIRECTORY argument,
|
||||
# list the version-controlled files in that directory.
|
||||
|
||||
# If there's an argument, it must be a single, "."-relative directory name.
|
||||
# cvsu is part of the cvsutils package: https://www.red-bean.com/cvsutils/
|
||||
|
||||
postprocess=
|
||||
case $1 in
|
||||
--help) cat <<EOF
|
||||
Usage: $0 [-C SRCDIR] [DIR...]
|
||||
|
||||
Output a list of version-controlled files in DIR (default .), relative to
|
||||
SRCDIR (default .). SRCDIR must be the top directory of a checkout.
|
||||
|
||||
Options:
|
||||
--help print this help, then exit
|
||||
--version print version number, then exit
|
||||
-C SRCDIR change directory to SRCDIR before generating list
|
||||
|
||||
Report bugs and patches to <bug-gnulib@gnu.org>.
|
||||
EOF
|
||||
exit ;;
|
||||
|
||||
--version)
|
||||
year=`echo "$scriptversion" | sed 's/[^0-9].*//'`
|
||||
cat <<EOF
|
||||
vc-list-files $scriptversion
|
||||
Copyright (C) $year Free Software Foundation, Inc,
|
||||
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
|
||||
This is free software: you are free to change and redistribute it.
|
||||
There is NO WARRANTY, to the extent permitted by law.
|
||||
EOF
|
||||
exit ;;
|
||||
|
||||
-C)
|
||||
test "$2" = . || postprocess="| sed 's|^|$2/|'"
|
||||
cd "$2" || exit 1
|
||||
shift; shift ;;
|
||||
esac
|
||||
|
||||
test $# = 0 && set .
|
||||
|
||||
for dir
|
||||
do
|
||||
if test -d .git || test -f .git; then
|
||||
test "x$dir" = x. \
|
||||
&& dir= sed_esc= \
|
||||
|| { dir="$dir/"; sed_esc=`echo "$dir"|env sed 's,\([\\/]\),\\\\\1,g'`; }
|
||||
# Ignore git symlinks - either they point into the tree, in which case
|
||||
# we don't need to visit the target twice, or they point somewhere
|
||||
# else (often into a submodule), in which case the content does not
|
||||
# belong to this package.
|
||||
eval exec git ls-tree -r 'HEAD:"$dir"' \
|
||||
\| sed -n '"s/^100[^ ]*./$sed_esc/p"' $postprocess
|
||||
elif test -d .hg; then
|
||||
eval exec hg locate '"$dir/*"' $postprocess
|
||||
elif test -d .bzr; then
|
||||
test "$postprocess" = '' && postprocess="| sed 's|^\./||'"
|
||||
eval exec bzr ls -R --versioned '"$dir"' $postprocess
|
||||
elif test -d CVS; then
|
||||
test "$postprocess" = '' && postprocess="| sed 's|^\./||'"
|
||||
if test -x build-aux/cvsu; then
|
||||
eval build-aux/cvsu --find --types=AFGM '"$dir"' $postprocess
|
||||
elif (cvsu --help) >/dev/null 2>&1; then
|
||||
eval cvsu --find --types=AFGM '"$dir"' $postprocess
|
||||
else
|
||||
eval awk -F/ \''{ \
|
||||
if (!$1 && $3 !~ /^-/) { \
|
||||
f=FILENAME; \
|
||||
if (f ~ /CVS\/Entries$/) \
|
||||
f = substr(f, 1, length(f)-11); \
|
||||
print f $2; \
|
||||
}}'\'' \
|
||||
`find "$dir" -name Entries -print` /dev/null' $postprocess
|
||||
fi
|
||||
elif test -d .svn; then
|
||||
eval exec svn list -R '"$dir"' $postprocess
|
||||
else
|
||||
echo "$0: Failed to determine type of version control used in `pwd`" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
@ -1,274 +0,0 @@
|
||||
# cfg.mk -- Configuration for maintainer-makefile
|
||||
#
|
||||
# Copyright (c) 2011-2019, 2021-2022 Free Software Foundation, Inc.
|
||||
# Written by Gary V. Vaughan, 2011
|
||||
#
|
||||
# This file is part of GNU Libtool.
|
||||
#
|
||||
# GNU Libtool 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.
|
||||
#
|
||||
# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy
|
||||
# can be downlodad from http://www.gnu.org/licenses/gpl.html,
|
||||
# or obtained by writing to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Boston, # MA 02111-1301, USA.
|
||||
|
||||
update-copyright-env := UPDATE_COPYRIGHT_FORCE=1 UPDATE_COPYRIGHT_USE_INTERVALS=1
|
||||
|
||||
# Set format of NEWS
|
||||
old_NEWS_hash := 694e28388e83b832b0d7614e305b107e
|
||||
|
||||
manual_title = Portable Dynamic Shared Object Management
|
||||
|
||||
# Set the release announcement email addresses, maint.mk will email the
|
||||
# translation-project instead of autotools-announce otherwise.
|
||||
ifeq ($(RELEASE_TYPE),stable)
|
||||
announcement_Cc_ = autotools-announce@gnu.org
|
||||
else
|
||||
announcement_Cc_ = autotools-announce@gnu.org, $(PACKAGE_BUGREPORT)
|
||||
endif
|
||||
|
||||
# Don't syntax check the mail subdirectory.
|
||||
VC_LIST_ALWAYS_EXCLUDE_REGEX = ^mail/
|
||||
|
||||
local-checks-to-fix = \
|
||||
sc_require_config_h \
|
||||
sc_require_config_h_first
|
||||
|
||||
local-checks-to-skip = \
|
||||
$(local-checks-to-fix) \
|
||||
sc_GPL_version \
|
||||
sc_cast_of_x_alloc_return_value \
|
||||
sc_prohibit_always-defined_macros \
|
||||
sc_prohibit_always_true_header_tests \
|
||||
sc_prohibit_strncpy \
|
||||
sc_trailing_blank \
|
||||
sc_unmarked_diagnostics
|
||||
|
||||
# GPL_version: checks for GPLv3, which we don't use
|
||||
# cast_of_x_alloc_return_value:
|
||||
# We support C++ compilation, which does require casting here.
|
||||
# prohibit_always-defined_macros:
|
||||
# we have our own argz and dirent, which use the same macros but
|
||||
# are not always-defined in our case.
|
||||
# prohibit_always_true_header_tests:
|
||||
# we have our own argz and dirent, which are not *always* true,
|
||||
# so the guards cannot be removed in our case.
|
||||
# prohibit_strncpy:
|
||||
# what's so bad about strncpy anyway?
|
||||
# trailing_blank: flags valid rfc3676 separators
|
||||
# unmarked_diagnostics: libtool isn't internationalized
|
||||
|
||||
|
||||
# Check for correct usage of $cc_basename in libtool.m4.
|
||||
sc_libtool_m4_cc_basename:
|
||||
@$(SED) -n "/case \\\$$cc_basename in/,/esac/ { \
|
||||
/^[ ]*[a-zA-Z][a-zA-Z0-9+]*[^*][ ]*)/p; \
|
||||
}" '$(srcdir)/$(macro_dir)/libtool.m4' | grep . && { \
|
||||
msg="\$$cc_basename matches should include a trailing '*'." \
|
||||
$(_sc_say_and_exit) } || :
|
||||
|
||||
# Check for old-style `quoting'.
|
||||
exclude_file_name_regexp--sc_old_style_quoting = (^bootstrap|^cfg.mk|\.texi)$$
|
||||
sc_old_style_quoting:
|
||||
@prohibit="^[^\`]*[^=]\`[^'\`]*[a-zA-Z0-9][^'\`]*'[^\`]*[^\\\`]$$" \
|
||||
halt="quote 'like this' not \`like this' in comments and output" \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Check for uses of Xsed without corresponding echo "X
|
||||
exclude_file_name_regexp--sc_prohibit_Xsed_without_X = ^cfg.mk$$
|
||||
sc_prohibit_Xsed_without_X:
|
||||
@files=$$($(VC_LIST_EXCEPT)); \
|
||||
if test -n "$$files"; then \
|
||||
grep -nE '\$$Xsed' $$files | grep -vE '(func_echo_all|\$$ECHO) \\*"X' && { \
|
||||
msg="occurrences of '\$$Xsed' without '\$$ECHO "\""X' on the same line" \
|
||||
$(_sc_say_and_exit) } || :; \
|
||||
else :; \
|
||||
fi || :
|
||||
|
||||
# Use a consistent dirname and basename idiom.
|
||||
sc_prohibit_bare_basename:
|
||||
@prohibit='\|[ ]*\$$(base|dir)name' \
|
||||
halt='use '\''|$$SED "$$basename"'\'' instead of '\''|$$basename'\' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
sc_prohibit_basename_with_dollar_sed:
|
||||
@prohibit='(base|dir)name="?(\$$SED|sed)[ "]' \
|
||||
halt='use '\''basename='\''s|^.*/||'\'' instead of '\''basename="$$SED...' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Check for using '[' instead of 'test'.
|
||||
exclude_file_name_regexp--sc_prohibit_bracket_as_test = ^cfg.mk$$
|
||||
sc_prohibit_bracket_as_test:
|
||||
@prohibit='if[ ]+\[' \
|
||||
halt="use 'if test' instead of 'if ['" \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# : ${foo=`bar`} is not perfectly portable (see Shellology in autoconf's manual)
|
||||
exclude_file_name_regexp--sc_prohibit_command_in_subst = ^cfg.mk$$
|
||||
sc_prohibit_command_in_subst:
|
||||
@prohibit='\$$\{[^`}]*`[^`]*`[^}]*}' \
|
||||
halt='do not use `command` in $${ } substitution`' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Check for quotes within backquotes within quotes "`"bar"`"
|
||||
exclude_file_name_regexp--sc_prohibit_nested_quotes = ^cfg.mk$$
|
||||
sc_prohibit_nested_quotes:
|
||||
@prohibit='"[^`"]*`[^"`]*"[^"`]*".*`[^`"]*"' \
|
||||
halt='found nested double quotes' \
|
||||
$(_sc_search_regexp_or_exclude)
|
||||
|
||||
# Commas in filenames are quite common, so using them routinely for sed is
|
||||
# asking for trouble!
|
||||
sc_prohibit_sed_s_comma:
|
||||
@explicit='($$SED|sed)[ ]+(-e[ ]+)?['\''"]?s,' \
|
||||
implicit='['\''";][ ]*s,[^,]*,[^,]*,g?['\''";]' \
|
||||
literal='^[ ]*s,[^,]*,[^,]*,g?['\''";]?$$' \
|
||||
prohibit='('$$implicit'|'$$explicit'|'$$literal')' \
|
||||
halt='found use of comma separator in sed substitution' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Check for using shift after set dummy (same or following line).
|
||||
exclude_file_name_regexp--sc_prohibit_set_dummy_without_shift = ^cfg.mk$$
|
||||
sc_prohibit_set_dummy_without_shift:
|
||||
@files=$$($(VC_LIST_EXCEPT)); \
|
||||
if test -n "$$files"; then \
|
||||
grep -nE '(set dummy|shift)' $$files | \
|
||||
$(SED) -n "/set[ ][ ]*dummy/{ \
|
||||
/set.*dummy.*;.*shift/d; \
|
||||
N; \
|
||||
/\n.*shift/D; \
|
||||
p; \
|
||||
}" | grep -n . && { \
|
||||
msg="use 'shift' after 'set dummy'" \
|
||||
$(_sc_say_and_exit) } || :; \
|
||||
else :; \
|
||||
fi || :
|
||||
|
||||
# Check for using set -- instead of set dummy
|
||||
exclude_file_name_regexp--sc_prohibit_set_minus_minus = ^cfg.mk$$
|
||||
sc_prohibit_set_minus_minus:
|
||||
@prohibit='set[ ]+--[ ]+' \
|
||||
halt="use 'set dummy ...' instead of 'set -- ...'" \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Make sure there is no spurious whitespace before trailing semi-colons
|
||||
sc_prohibit_space_semicolon:
|
||||
@prohibit='[^ ][ ]+;[ ]*((do|done|elif|else|then)[ ]*)?$$' \
|
||||
halt='found spurious whitespace before trailing semi-colon' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Check for using test X"... instead of test "X...
|
||||
exclude_file_name_regexp--sc_prohibit_test_X = ^cfg.mk$$
|
||||
sc_prohibit_test_X:
|
||||
@prohibit='test[ ]+(![ ])?(-.[ ]+)?[Xx]["'\'']' \
|
||||
halt='use '\''test "X..."'\'' instead of '\''test X"'\' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Check for bad binary operators.
|
||||
sc_prohibit_test_binary_operators:
|
||||
@prohibit='if[ ]+["'\'']?\$$[^ ]+[ ]+(=|-[lg][te]|-eq|-ne)' \
|
||||
halt="Use 'if test \$$something =' instead of 'if \$$something ='" \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Check for using test $... instead of test "$...
|
||||
exclude_file_name_regexp--sc_prohibit_test_dollar = ^cfg.mk$$
|
||||
sc_prohibit_test_dollar:
|
||||
@prohibit='test[ ]+(![ ])?(-.[ ]+)?X?\$$[^?#]' \
|
||||
exclude='test \$${[A-Za-z_][A-Za-z0-9_]+\+y}' \
|
||||
halt='use '\''test "$$..."'\'' instead of '\''test $$'\' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Never use test -e.
|
||||
exclude_file_name_regexp--sc_prohibit_test_minus_e = ^cfg.mk$$
|
||||
sc_prohibit_test_minus_e:
|
||||
@prohibit='test[ ]+(![ ])?-e' \
|
||||
halt="use 'test -f' instead of 'test -e'" \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Check for bad unary operators.
|
||||
sc_prohibit_test_unary_operators:
|
||||
@prohibit='if[ ]+-[a-z]' \
|
||||
halt="use 'if test -X' instead of 'if -X'" \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Don't add noisy characters on the front of the left operand of a test
|
||||
# to prevent arguments being passed inadvertently (e.g. LHS is '-z'),
|
||||
# when the other operand is a constant -- just swap them, and remove the
|
||||
# spurious leading 'x'.
|
||||
sc_prohibit_test_const_follows_var:
|
||||
@var='[ ]+"[^$$"]*\$$[0-9A-Za-z_][^"]*"' \
|
||||
op='[ ]+(!?=|-[lgn][et]|-eq)' \
|
||||
const='[ ]+[^-$$][^$$; ]*' \
|
||||
prohibit='test'$$var$$op$$const'[ ]*(&&|\|\||;|\\?$$)' \
|
||||
halt='use '\''test a = "$$b"'\'' instead of '\''test "x$$b" = xa'\' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Check for opening brace on next line in shell function definition.
|
||||
exclude_file_name_regexp--sc_require_function_nl_brace = (^HACKING|\.[ch]|\.texi)$$
|
||||
sc_require_function_nl_brace:
|
||||
@for file in $$($(VC_LIST_EXCEPT)); do \
|
||||
$(SED) -n "/^func_[^ ]*[ ]*(/{ \
|
||||
N; \
|
||||
/^func_[^ ]* ()\n{$$/d; \
|
||||
p; \
|
||||
}" $$file | grep -E . && { \
|
||||
msg="found malformed function_definition in $$file" \
|
||||
$(_sc_say_and_exit) } || :; \
|
||||
done
|
||||
|
||||
sc_trailing_blank-non-rfc3676:
|
||||
@prohibit='([^-][^-][ ][ ]*|^[ ][ ]*)$$' \
|
||||
halt='found trailing blank(s)' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Avoid useless quotes around assignments with no shell metacharacters.
|
||||
# Backtick and dollar expansions are not resplit on the RHS of an
|
||||
# assignment, so those metachars are not listed in the prohibit regex,
|
||||
# although @ is listed, since it most likely indicates that something
|
||||
# will be spliced in before the shell executes, and it may need to be
|
||||
# quoted if it contains any metacharacters after splicing.
|
||||
define _sc_search_regexp_or_exclude
|
||||
files=$$($(VC_LIST_EXCEPT)); \
|
||||
if test -n "$$files"; then \
|
||||
grep -nE "$$prohibit" $$files | grep -v '## exclude from $@' \
|
||||
&& { msg="$$halt" $(_sc_say_and_exit) } || :; \
|
||||
else :; \
|
||||
fi || :;
|
||||
endef
|
||||
|
||||
exclude_file_name_regexp--sc_useless_braces_in_variable_derefs = \
|
||||
test-funclib-quote.sh$$
|
||||
sc_useless_braces_in_variable_derefs:
|
||||
@prohibit='\$${[0-9A-Za-z_]+}[^0-9A-Za-z_]' \
|
||||
halt='found spurious braces around variable dereference' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
sc_useless_quotes_in_assignment:
|
||||
@prohibit='^[ ]*[A-Za-z_][A-Za-z0-9_]*="[^ !#&()*;<>?@~^{|}]*"$$' \
|
||||
halt='found spurious quotes around assignment value' \
|
||||
$(_sc_search_regexp_or_exclude)
|
||||
|
||||
# Avoid useless quotes around case arguments such as:
|
||||
# case "$foo" in ...
|
||||
exclude_file_name_regexp--sc_useless_quotes_in_case = ^cfg.mk$$
|
||||
sc_useless_quotes_in_case:
|
||||
@prohibit='case "[^ "]*"[ ][ ]*in' \
|
||||
halt='found spurious quotes around case argument' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# List syntax-check exempted files.
|
||||
exclude_file_name_regexp--sc_prohibit_strcmp = \
|
||||
^doc/libtool.texi$$
|
||||
exclude_file_name_regexp--sc_prohibit_test_minus_ao = \
|
||||
^m4/libtool.m4$$
|
||||
exclude_file_name_regexp--sc_space_tab = (\.diff|test-funclib-quote.sh)$$
|
||||
exclude_file_name_regexp--sc_trailing_blank-non-rfc3676 = \.diff$$
|
||||
@ -1,637 +0,0 @@
|
||||
/* config-h.in. Generated from configure.ac by autoheader. */
|
||||
|
||||
/* Define to 1 if you have the `argz_add' function. */
|
||||
#undef HAVE_ARGZ_ADD
|
||||
|
||||
/* Define to 1 if you have the `argz_append' function. */
|
||||
#undef HAVE_ARGZ_APPEND
|
||||
|
||||
/* Define to 1 if you have the `argz_count' function. */
|
||||
#undef HAVE_ARGZ_COUNT
|
||||
|
||||
/* Define to 1 if you have the `argz_create_sep' function. */
|
||||
#undef HAVE_ARGZ_CREATE_SEP
|
||||
|
||||
/* Define to 1 if you have the <argz.h> header file. */
|
||||
#undef HAVE_ARGZ_H
|
||||
|
||||
/* Define to 1 if you have the `argz_insert' function. */
|
||||
#undef HAVE_ARGZ_INSERT
|
||||
|
||||
/* Define to 1 if you have the `argz_next' function. */
|
||||
#undef HAVE_ARGZ_NEXT
|
||||
|
||||
/* Define to 1 if you have the `argz_stringify' function. */
|
||||
#undef HAVE_ARGZ_STRINGIFY
|
||||
|
||||
/* Define to 1 if you have the `closedir' function. */
|
||||
#undef HAVE_CLOSEDIR
|
||||
|
||||
/* Define to 1 if you have the declaration of `cygwin_conv_path', and to 0 if
|
||||
you don't. */
|
||||
#undef HAVE_DECL_CYGWIN_CONV_PATH
|
||||
|
||||
/* Define to 1 if you have the <dirent.h> header file. */
|
||||
#undef HAVE_DIRENT_H
|
||||
|
||||
/* Define if you have the GNU dld library. */
|
||||
#undef HAVE_DLD
|
||||
|
||||
/* Define to 1 if you have the <dld.h> header file. */
|
||||
#undef HAVE_DLD_H
|
||||
|
||||
/* Define to 1 if you have the `dlerror' function. */
|
||||
#undef HAVE_DLERROR
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#undef HAVE_DLFCN_H
|
||||
|
||||
/* Define to 1 if you have the <dl.h> header file. */
|
||||
#undef HAVE_DL_H
|
||||
|
||||
/* Define if you have the _dyld_func_lookup function. */
|
||||
#undef HAVE_DYLD
|
||||
|
||||
/* Define to 1 if the system has the type `error_t'. */
|
||||
#undef HAVE_ERROR_T
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* Define if you have the libdl library or equivalent. */
|
||||
#undef HAVE_LIBDL
|
||||
|
||||
/* Define if libdlloader will be built on this platform */
|
||||
#undef HAVE_LIBDLLOADER
|
||||
|
||||
/* Define to 1 if you have the <mach-o/dyld.h> header file. */
|
||||
#undef HAVE_MACH_O_DYLD_H
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
/* Define to 1 if you have the `opendir' function. */
|
||||
#undef HAVE_OPENDIR
|
||||
|
||||
/* Define if libtool can extract symbol lists from object files. */
|
||||
#undef HAVE_PRELOADED_SYMBOLS
|
||||
|
||||
/* Define to 1 if you have the `readdir' function. */
|
||||
#undef HAVE_READDIR
|
||||
|
||||
/* Define if you have the shl_load function. */
|
||||
#undef HAVE_SHL_LOAD
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define to 1 if you have the `strlcat' function. */
|
||||
#undef HAVE_STRLCAT
|
||||
|
||||
/* Define to 1 if you have the `strlcpy' function. */
|
||||
#undef HAVE_STRLCPY
|
||||
|
||||
/* Define to 1 if you have the <sys/dl.h> header file. */
|
||||
#undef HAVE_SYS_DL_H
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* This value is set to 1 to indicate that the system argz facility works */
|
||||
#undef HAVE_WORKING_ARGZ
|
||||
|
||||
/* Define if the OS needs help to load dependent libraries for dlopen(). */
|
||||
#undef LTDL_DLOPEN_DEPLIBS
|
||||
|
||||
/* Define to the system default library search path. */
|
||||
#undef LT_DLSEARCH_PATH
|
||||
|
||||
/* The archive extension */
|
||||
#undef LT_LIBEXT
|
||||
|
||||
/* The archive prefix */
|
||||
#undef LT_LIBPREFIX
|
||||
|
||||
/* Define to the extension used for runtime loadable modules, say, ".so". */
|
||||
#undef LT_MODULE_EXT
|
||||
|
||||
/* Define to the name of the environment variable that determines the run-time
|
||||
module search path. */
|
||||
#undef LT_MODULE_PATH_VAR
|
||||
|
||||
/* Define to the sub-directory where libtool stores uninstalled libraries. */
|
||||
#undef LT_OBJDIR
|
||||
|
||||
/* Define to the shared library suffix, say, ".dylib". */
|
||||
#undef LT_SHARED_EXT
|
||||
|
||||
/* Define to the shared archive member specification, say "(shr.o)". */
|
||||
#undef LT_SHARED_LIB_MEMBER
|
||||
|
||||
/* Define if dlsym() requires a leading underscore in symbol names. */
|
||||
#undef NEED_USCORE
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#undef PACKAGE_NAME
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#undef PACKAGE_STRING
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#undef PACKAGE_TARNAME
|
||||
|
||||
/* Define to the home page for this package. */
|
||||
#undef PACKAGE_URL
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
/* True if the compiler says it groks GNU C version MAJOR.MINOR. */
|
||||
#if defined __GNUC__ && defined __GNUC_MINOR__
|
||||
# define _GL_GNUC_PREREQ(major, minor) \
|
||||
((major) < __GNUC__ + ((minor) <= __GNUC_MINOR__))
|
||||
#else
|
||||
# define _GL_GNUC_PREREQ(major, minor) 0
|
||||
#endif
|
||||
|
||||
|
||||
/* The _Noreturn keyword of C11. */
|
||||
#ifndef _Noreturn
|
||||
# if (defined __cplusplus \
|
||||
&& ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \
|
||||
|| (defined _MSC_VER && 1900 <= _MSC_VER)) \
|
||||
&& 0)
|
||||
/* [[noreturn]] is not practically usable, because with it the syntax
|
||||
extern _Noreturn void func (...);
|
||||
would not be valid; such a declaration would only be valid with 'extern'
|
||||
and '_Noreturn' swapped, or without the 'extern' keyword. However, some
|
||||
AIX system header files and several gnulib header files use precisely
|
||||
this syntax with 'extern'. */
|
||||
# define _Noreturn [[noreturn]]
|
||||
# elif ((!defined __cplusplus || defined __clang__) \
|
||||
&& (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \
|
||||
|| (!defined __STRICT_ANSI__ \
|
||||
&& (_GL_GNUC_PREREQ (4, 7) \
|
||||
|| (defined __apple_build_version__ \
|
||||
? 6000000 <= __apple_build_version__ \
|
||||
: 3 < __clang_major__ + (5 <= __clang_minor__))))))
|
||||
/* _Noreturn works as-is. */
|
||||
# elif _GL_GNUC_PREREQ (2, 8) || defined __clang__ || 0x5110 <= __SUNPRO_C
|
||||
# define _Noreturn __attribute__ ((__noreturn__))
|
||||
# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0)
|
||||
# define _Noreturn __declspec (noreturn)
|
||||
# else
|
||||
# define _Noreturn
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Define so that glibc/gnulib argp.h does not typedef error_t. */
|
||||
#undef __error_t_defined
|
||||
|
||||
/* The _GL_ASYNC_SAFE marker should be attached to functions that are
|
||||
signal handlers (for signals other than SIGABRT, SIGPIPE) or can be
|
||||
invoked from such signal handlers. Such functions have some restrictions:
|
||||
* All functions that it calls should be marked _GL_ASYNC_SAFE as well,
|
||||
or should be listed as async-signal-safe in POSIX
|
||||
<https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04>
|
||||
section 2.4.3. Note that malloc(), sprintf(), and fwrite(), in
|
||||
particular, are NOT async-signal-safe.
|
||||
* All memory locations (variables and struct fields) that these functions
|
||||
access must be marked 'volatile'. This holds for both read and write
|
||||
accesses. Otherwise the compiler might optimize away stores to and
|
||||
reads from such locations that occur in the program, depending on its
|
||||
data flow analysis. For example, when the program contains a loop
|
||||
that is intended to inspect a variable set from within a signal handler
|
||||
while (!signal_occurred)
|
||||
;
|
||||
the compiler is allowed to transform this into an endless loop if the
|
||||
variable 'signal_occurred' is not declared 'volatile'.
|
||||
Additionally, recall that:
|
||||
* A signal handler should not modify errno (except if it is a handler
|
||||
for a fatal signal and ends by raising the same signal again, thus
|
||||
provoking the termination of the process). If it invokes a function
|
||||
that may clobber errno, it needs to save and restore the value of
|
||||
errno. */
|
||||
#define _GL_ASYNC_SAFE
|
||||
|
||||
|
||||
/* Attributes. */
|
||||
#if (defined __has_attribute \
|
||||
&& (!defined __clang_minor__ \
|
||||
|| 3 < __clang_major__ + (5 <= __clang_minor__)))
|
||||
# define _GL_HAS_ATTRIBUTE(attr) __has_attribute (__##attr##__)
|
||||
#else
|
||||
# define _GL_HAS_ATTRIBUTE(attr) _GL_ATTR_##attr
|
||||
# define _GL_ATTR_alloc_size _GL_GNUC_PREREQ (4, 3)
|
||||
# define _GL_ATTR_always_inline _GL_GNUC_PREREQ (3, 2)
|
||||
# define _GL_ATTR_artificial _GL_GNUC_PREREQ (4, 3)
|
||||
# define _GL_ATTR_cold _GL_GNUC_PREREQ (4, 3)
|
||||
# define _GL_ATTR_const _GL_GNUC_PREREQ (2, 95)
|
||||
# define _GL_ATTR_deprecated _GL_GNUC_PREREQ (3, 1)
|
||||
# define _GL_ATTR_diagnose_if 0
|
||||
# define _GL_ATTR_error _GL_GNUC_PREREQ (4, 3)
|
||||
# define _GL_ATTR_externally_visible _GL_GNUC_PREREQ (4, 1)
|
||||
# define _GL_ATTR_fallthrough _GL_GNUC_PREREQ (7, 0)
|
||||
# define _GL_ATTR_format _GL_GNUC_PREREQ (2, 7)
|
||||
# define _GL_ATTR_leaf _GL_GNUC_PREREQ (4, 6)
|
||||
# define _GL_ATTR_malloc _GL_GNUC_PREREQ (3, 0)
|
||||
# ifdef _ICC
|
||||
# define _GL_ATTR_may_alias 0
|
||||
# else
|
||||
# define _GL_ATTR_may_alias _GL_GNUC_PREREQ (3, 3)
|
||||
# endif
|
||||
# define _GL_ATTR_noinline _GL_GNUC_PREREQ (3, 1)
|
||||
# define _GL_ATTR_nonnull _GL_GNUC_PREREQ (3, 3)
|
||||
# define _GL_ATTR_nonstring _GL_GNUC_PREREQ (8, 0)
|
||||
# define _GL_ATTR_nothrow _GL_GNUC_PREREQ (3, 3)
|
||||
# define _GL_ATTR_packed _GL_GNUC_PREREQ (2, 7)
|
||||
# define _GL_ATTR_pure _GL_GNUC_PREREQ (2, 96)
|
||||
# define _GL_ATTR_returns_nonnull _GL_GNUC_PREREQ (4, 9)
|
||||
# define _GL_ATTR_sentinel _GL_GNUC_PREREQ (4, 0)
|
||||
# define _GL_ATTR_unused _GL_GNUC_PREREQ (2, 7)
|
||||
# define _GL_ATTR_warn_unused_result _GL_GNUC_PREREQ (3, 4)
|
||||
#endif
|
||||
|
||||
#ifdef __has_c_attribute
|
||||
# define _GL_HAS_C_ATTRIBUTE(attr) __has_c_attribute (__##attr##__)
|
||||
#else
|
||||
# define _GL_HAS_C_ATTRIBUTE(attr) 0
|
||||
#endif
|
||||
|
||||
|
||||
/* _GL_ATTRIBUTE_ALLOC_SIZE ((N)) declares that the Nth argument of the function
|
||||
is the size of the returned memory block.
|
||||
_GL_ATTRIBUTE_ALLOC_SIZE ((M, N)) declares that the Mth argument multiplied
|
||||
by the Nth argument of the function is the size of the returned memory block.
|
||||
*/
|
||||
/* Applies to: function, pointer to function, function types. */
|
||||
#if _GL_HAS_ATTRIBUTE (alloc_size)
|
||||
# define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_ALLOC_SIZE(args)
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_ALWAYS_INLINE tells that the compiler should always inline the
|
||||
function and report an error if it cannot do so. */
|
||||
/* Applies to: function. */
|
||||
#if _GL_HAS_ATTRIBUTE (always_inline)
|
||||
# define _GL_ATTRIBUTE_ALWAYS_INLINE __attribute__ ((__always_inline__))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_ALWAYS_INLINE
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_ARTIFICIAL declares that the function is not important to show
|
||||
in stack traces when debugging. The compiler should omit the function from
|
||||
stack traces. */
|
||||
/* Applies to: function. */
|
||||
#if _GL_HAS_ATTRIBUTE (artificial)
|
||||
# define _GL_ATTRIBUTE_ARTIFICIAL __attribute__ ((__artificial__))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_ARTIFICIAL
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_COLD declares that the function is rarely executed. */
|
||||
/* Applies to: functions. */
|
||||
/* Avoid __attribute__ ((cold)) on MinGW; see thread starting at
|
||||
<https://lists.gnu.org/r/emacs-devel/2019-04/msg01152.html>.
|
||||
Also, Oracle Studio 12.6 requires 'cold' not '__cold__'. */
|
||||
#if _GL_HAS_ATTRIBUTE (cold) && !defined __MINGW32__
|
||||
# ifndef __SUNPRO_C
|
||||
# define _GL_ATTRIBUTE_COLD __attribute__ ((__cold__))
|
||||
# else
|
||||
# define _GL_ATTRIBUTE_COLD __attribute__ ((cold))
|
||||
# endif
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_COLD
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_CONST declares that it is OK for a compiler to omit duplicate
|
||||
calls to the function with the same arguments.
|
||||
This attribute is safe for a function that neither depends on nor affects
|
||||
observable state, and always returns exactly once - e.g., does not loop
|
||||
forever, and does not call longjmp.
|
||||
(This attribute is stricter than _GL_ATTRIBUTE_PURE.) */
|
||||
/* Applies to: functions. */
|
||||
#if _GL_HAS_ATTRIBUTE (const)
|
||||
# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_CONST
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
|
||||
that can be freed by passing them as the Ith argument to the
|
||||
function F.
|
||||
_GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that
|
||||
can be freed via 'free'; it can be used only after declaring 'free'. */
|
||||
/* Applies to: functions. Cannot be used on inline functions. */
|
||||
#if _GL_GNUC_PREREQ (11, 0)
|
||||
# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i)))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_DEALLOC(f, i)
|
||||
#endif
|
||||
/* If gnulib's <string.h> or <wchar.h> has already defined this macro, continue
|
||||
to use this earlier definition, since <stdlib.h> may not have been included
|
||||
yet. */
|
||||
#ifndef _GL_ATTRIBUTE_DEALLOC_FREE
|
||||
# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1)
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_DEPRECATED: Declares that an entity is deprecated.
|
||||
The compiler may warn if the entity is used. */
|
||||
/* Applies to:
|
||||
- function, variable,
|
||||
- struct, union, struct/union member,
|
||||
- enumeration, enumeration item,
|
||||
- typedef,
|
||||
in C++ also: namespace, class, template specialization. */
|
||||
#if _GL_HAS_C_ATTRIBUTE (deprecated)
|
||||
# define _GL_ATTRIBUTE_DEPRECATED [[__deprecated__]]
|
||||
#elif _GL_HAS_ATTRIBUTE (deprecated)
|
||||
# define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_DEPRECATED
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_ERROR(msg) requests an error if a function is called and
|
||||
the function call is not optimized away.
|
||||
_GL_ATTRIBUTE_WARNING(msg) requests a warning if a function is called and
|
||||
the function call is not optimized away. */
|
||||
/* Applies to: functions. */
|
||||
#if _GL_HAS_ATTRIBUTE (error)
|
||||
# define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__error__ (msg)))
|
||||
# define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__warning__ (msg)))
|
||||
#elif _GL_HAS_ATTRIBUTE (diagnose_if)
|
||||
# define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__diagnose_if__ (1, msg, "error")))
|
||||
# define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__diagnose_if__ (1, msg, "warning")))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_ERROR(msg)
|
||||
# define _GL_ATTRIBUTE_WARNING(msg)
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_EXTERNALLY_VISIBLE declares that the entity should remain
|
||||
visible to debuggers etc., even with '-fwhole-program'. */
|
||||
/* Applies to: functions, variables. */
|
||||
#if _GL_HAS_ATTRIBUTE (externally_visible)
|
||||
# define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((externally_visible))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_FALLTHROUGH declares that it is not a programming mistake if
|
||||
the control flow falls through to the immediately following 'case' or
|
||||
'default' label. The compiler should not warn in this case. */
|
||||
/* Applies to: Empty statement (;), inside a 'switch' statement. */
|
||||
/* Always expands to something. */
|
||||
#if _GL_HAS_C_ATTRIBUTE (fallthrough)
|
||||
# define _GL_ATTRIBUTE_FALLTHROUGH [[__fallthrough__]]
|
||||
#elif _GL_HAS_ATTRIBUTE (fallthrough)
|
||||
# define _GL_ATTRIBUTE_FALLTHROUGH __attribute__ ((__fallthrough__))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_FALLTHROUGH ((void) 0)
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_FORMAT ((ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK))
|
||||
declares that the STRING-INDEXth function argument is a format string of
|
||||
style ARCHETYPE, which is one of:
|
||||
printf, gnu_printf
|
||||
scanf, gnu_scanf,
|
||||
strftime, gnu_strftime,
|
||||
strfmon,
|
||||
or the same thing prefixed and suffixed with '__'.
|
||||
If FIRST-TO-CHECK is not 0, arguments starting at FIRST-TO_CHECK
|
||||
are suitable for the format string. */
|
||||
/* Applies to: functions. */
|
||||
#if _GL_HAS_ATTRIBUTE (format)
|
||||
# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_FORMAT(spec)
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_LEAF declares that if the function is called from some other
|
||||
compilation unit, it executes code from that unit only by return or by
|
||||
exception handling. This declaration lets the compiler optimize that unit
|
||||
more aggressively. */
|
||||
/* Applies to: functions. */
|
||||
#if _GL_HAS_ATTRIBUTE (leaf)
|
||||
# define _GL_ATTRIBUTE_LEAF __attribute__ ((__leaf__))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_LEAF
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly
|
||||
allocated memory. */
|
||||
/* Applies to: functions. */
|
||||
#if _GL_HAS_ATTRIBUTE (malloc)
|
||||
# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_MALLOC
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_MAY_ALIAS declares that pointers to the type may point to the
|
||||
same storage as pointers to other types. Thus this declaration disables
|
||||
strict aliasing optimization. */
|
||||
/* Applies to: types. */
|
||||
/* Oracle Studio 12.6 mishandles may_alias despite __has_attribute OK. */
|
||||
#if _GL_HAS_ATTRIBUTE (may_alias) && !defined __SUNPRO_C
|
||||
# define _GL_ATTRIBUTE_MAY_ALIAS __attribute__ ((__may_alias__))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_MAY_ALIAS
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_MAYBE_UNUSED declares that it is not a programming mistake if
|
||||
the entity is not used. The compiler should not warn if the entity is not
|
||||
used. */
|
||||
/* Applies to:
|
||||
- function, variable,
|
||||
- struct, union, struct/union member,
|
||||
- enumeration, enumeration item,
|
||||
- typedef,
|
||||
in C++ also: class. */
|
||||
/* In C++ and C2x, this is spelled [[__maybe_unused__]].
|
||||
GCC's syntax is __attribute__ ((__unused__)).
|
||||
clang supports both syntaxes. */
|
||||
#if _GL_HAS_C_ATTRIBUTE (maybe_unused)
|
||||
# define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]]
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_UNUSED
|
||||
#endif
|
||||
/* Alternative spelling of this macro, for convenience. */
|
||||
#define _GL_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED
|
||||
/* Earlier spellings of this macro. */
|
||||
#define _UNUSED_PARAMETER_ _GL_ATTRIBUTE_MAYBE_UNUSED
|
||||
|
||||
/* _GL_ATTRIBUTE_NODISCARD declares that the caller of the function should not
|
||||
discard the return value. The compiler may warn if the caller does not use
|
||||
the return value, unless the caller uses something like ignore_value. */
|
||||
/* Applies to: function, enumeration, class. */
|
||||
#if _GL_HAS_C_ATTRIBUTE (nodiscard)
|
||||
# define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]]
|
||||
#elif _GL_HAS_ATTRIBUTE (warn_unused_result)
|
||||
# define _GL_ATTRIBUTE_NODISCARD __attribute__ ((__warn_unused_result__))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_NODISCARD
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_NOINLINE tells that the compiler should not inline the
|
||||
function. */
|
||||
/* Applies to: functions. */
|
||||
#if _GL_HAS_ATTRIBUTE (noinline)
|
||||
# define _GL_ATTRIBUTE_NOINLINE __attribute__ ((__noinline__))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_NOINLINE
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_NONNULL ((N1, N2,...)) declares that the arguments N1, N2,...
|
||||
must not be NULL.
|
||||
_GL_ATTRIBUTE_NONNULL () declares that all pointer arguments must not be
|
||||
null. */
|
||||
/* Applies to: functions. */
|
||||
#if _GL_HAS_ATTRIBUTE (nonnull)
|
||||
# define _GL_ATTRIBUTE_NONNULL(args) __attribute__ ((__nonnull__ args))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_NONNULL(args)
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_NONSTRING declares that the contents of a character array is
|
||||
not meant to be NUL-terminated. */
|
||||
/* Applies to: struct/union members and variables that are arrays of element
|
||||
type '[[un]signed] char'. */
|
||||
#if _GL_HAS_ATTRIBUTE (nonstring)
|
||||
# define _GL_ATTRIBUTE_NONSTRING __attribute__ ((__nonstring__))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_NONSTRING
|
||||
#endif
|
||||
|
||||
/* There is no _GL_ATTRIBUTE_NORETURN; use _Noreturn instead. */
|
||||
|
||||
/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions.
|
||||
*/
|
||||
/* Applies to: functions. */
|
||||
#if _GL_HAS_ATTRIBUTE (nothrow) && !defined __cplusplus
|
||||
# define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_NOTHROW
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_PACKED declares:
|
||||
For struct members: The member has the smallest possible alignment.
|
||||
For struct, union, class: All members have the smallest possible alignment,
|
||||
minimizing the memory required. */
|
||||
/* Applies to: struct members, struct, union,
|
||||
in C++ also: class. */
|
||||
#if _GL_HAS_ATTRIBUTE (packed)
|
||||
# define _GL_ATTRIBUTE_PACKED __attribute__ ((__packed__))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_PACKED
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_PURE declares that It is OK for a compiler to omit duplicate
|
||||
calls to the function with the same arguments if observable state is not
|
||||
changed between calls.
|
||||
This attribute is safe for a function that does not affect
|
||||
observable state, and always returns exactly once.
|
||||
(This attribute is looser than _GL_ATTRIBUTE_CONST.) */
|
||||
/* Applies to: functions. */
|
||||
#if _GL_HAS_ATTRIBUTE (pure)
|
||||
# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_PURE
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_RETURNS_NONNULL declares that the function's return value is
|
||||
a non-NULL pointer. */
|
||||
/* Applies to: functions. */
|
||||
#if _GL_HAS_ATTRIBUTE (returns_nonnull)
|
||||
# define _GL_ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_RETURNS_NONNULL
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_SENTINEL(pos) declares that the variadic function expects a
|
||||
trailing NULL argument.
|
||||
_GL_ATTRIBUTE_SENTINEL () - The last argument is NULL (requires C99).
|
||||
_GL_ATTRIBUTE_SENTINEL ((N)) - The (N+1)st argument from the end is NULL. */
|
||||
/* Applies to: functions. */
|
||||
#if _GL_HAS_ATTRIBUTE (sentinel)
|
||||
# define _GL_ATTRIBUTE_SENTINEL(pos) __attribute__ ((__sentinel__ pos))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_SENTINEL(pos)
|
||||
#endif
|
||||
|
||||
/* A helper macro. Don't use it directly. */
|
||||
#if _GL_HAS_ATTRIBUTE (unused)
|
||||
# define _GL_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
|
||||
#else
|
||||
# define _GL_ATTRIBUTE_UNUSED
|
||||
#endif
|
||||
|
||||
|
||||
/* _GL_UNUSED_LABEL; declares that it is not a programming mistake if the
|
||||
immediately preceding label is not used. The compiler should not warn
|
||||
if the label is not used. */
|
||||
/* Applies to: label (both in C and C++). */
|
||||
/* Note that g++ < 4.5 does not support the '__attribute__ ((__unused__)) ;'
|
||||
syntax. But clang does. */
|
||||
#if !(defined __cplusplus && !_GL_GNUC_PREREQ (4, 5)) || defined __clang__
|
||||
# define _GL_UNUSED_LABEL _GL_ATTRIBUTE_UNUSED
|
||||
#else
|
||||
# define _GL_UNUSED_LABEL
|
||||
#endif
|
||||
|
||||
|
||||
/* Define to a type to use for 'error_t' if it is not otherwise available. */
|
||||
#undef error_t
|
||||
|
||||
/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
|
||||
the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
|
||||
earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
|
||||
__APPLE__ && __MACH__ test for Mac OS X.
|
||||
__APPLE_CC__ tests for the Apple compiler and its version.
|
||||
__STDC_VERSION__ tests for the C99 mode. */
|
||||
#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
|
||||
# define __GNUC_STDC_INLINE__ 1
|
||||
#endif
|
||||
|
||||
/* _GL_CMP (n1, n2) performs a three-valued comparison on n1 vs. n2, where
|
||||
n1 and n2 are expressions without side effects, that evaluate to real
|
||||
numbers (excluding NaN).
|
||||
It returns
|
||||
1 if n1 > n2
|
||||
0 if n1 == n2
|
||||
-1 if n1 < n2
|
||||
The naïve code (n1 > n2 ? 1 : n1 < n2 ? -1 : 0) produces a conditional
|
||||
jump with nearly all GCC versions up to GCC 10.
|
||||
This variant (n1 < n2 ? -1 : n1 > n2) produces a conditional with many
|
||||
GCC versions up to GCC 9.
|
||||
The better code (n1 > n2) - (n1 < n2) from Hacker's Delight § 2-9
|
||||
avoids conditional jumps in all GCC versions >= 3.4. */
|
||||
#define _GL_CMP(n1, n2) (((n1) > (n2)) - ((n1) < (n2)))
|
||||
|
||||
33382
BUILD/libtool-2.4.7/configure
vendored
33382
BUILD/libtool-2.4.7/configure
vendored
File diff suppressed because it is too large
Load Diff
@ -1,186 +0,0 @@
|
||||
# Process this file with autoconf to create configure. -*- autoconf -*-
|
||||
|
||||
# Copyright (C) 2001, 2004-2005, 2008, 2010-2019, 2021-2022 Free
|
||||
# Software Foundation, Inc.
|
||||
# Written by Gary V. Vaughan, 2001
|
||||
#
|
||||
# This file is part of GNU Libtool.
|
||||
#
|
||||
# GNU Libtool 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.
|
||||
#
|
||||
# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy
|
||||
# can be downloaded from http://www.gnu.org/licenses/gpl.html,
|
||||
# or obtained by writing to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
####
|
||||
|
||||
|
||||
AC_PREREQ(2.64)
|
||||
dnl Oldest automake required for bootstrap is below in AM_INIT_AUTOMAKE.
|
||||
|
||||
|
||||
## ------------------------ ##
|
||||
## Autoconf initialisation. ##
|
||||
## ------------------------ ##
|
||||
AC_INIT([GNU Libtool],
|
||||
m4_esyscmd([build-aux/git-version-gen .tarball-version]),
|
||||
[bug-libtool@gnu.org])
|
||||
m4_ifndef([AC_PACKAGE_URL],
|
||||
[AC_SUBST([PACKAGE_URL], [http://www.gnu.org/s/libtool/])])
|
||||
|
||||
# Remove this when a released Autoconf is capable of bootstrapping
|
||||
# Libtool without it (probably after autoconf-2.70).
|
||||
m4_ifndef([AC_CONFIG_MACRO_DIRS],
|
||||
[m4_define([AC_CONFIG_MACRO_DIRS], m4_defn([AC_CONFIG_MACRO_DIR]))])
|
||||
|
||||
# Since we already declare these directories in this file, save those
|
||||
# choices, and push the results into Makefile.am to avoid declaring
|
||||
# them in two places making renames error prone, and where copies
|
||||
# might get out of sync.
|
||||
m4_define([AC_CONFIG_AUX_DIR],
|
||||
m4_defn([AC_CONFIG_AUX_DIR])[AC_SUBST([aux_dir], [$1])])
|
||||
m4_define([LT_CONFIG_LTDL_DIR],
|
||||
m4_defn([LT_CONFIG_LTDL_DIR])[AC_SUBST([ltdl_dir], [$1])])
|
||||
m4_define([AC_CONFIG_MACRO_DIRS],
|
||||
m4_defn([AC_CONFIG_MACRO_DIRS])[AC_SUBST([macro_dir], [$1])])
|
||||
|
||||
AC_CONFIG_HEADERS([config.h:config-h.in])
|
||||
AC_CONFIG_SRCDIR([libtoolize.in])
|
||||
LT_CONFIG_LTDL_DIR([libltdl], [nonrecursive])
|
||||
AC_CONFIG_AUX_DIR([build-aux])
|
||||
AC_CONFIG_MACRO_DIRS([m4])
|
||||
AC_CONFIG_LIBOBJ_DIR([libltdl])
|
||||
|
||||
package_revision=`$SHELL $ac_aux_dir/git-version-gen .tarball-version`
|
||||
AC_SUBST([package_revision])
|
||||
|
||||
## ------------------------ ##
|
||||
## Autotest initialisation. ##
|
||||
## ------------------------ ##
|
||||
|
||||
AC_CONFIG_TESTDIR([tests])
|
||||
AC_SUBST([AUTOM4TE], [${AUTOM4TE=autom4te}])
|
||||
AC_SUBST([AUTOTEST], ['$(AUTOM4TE) --language=autotest'])
|
||||
|
||||
|
||||
## ---------------------------------------- ##
|
||||
## Display a configure time version banner. ##
|
||||
## ---------------------------------------- ##
|
||||
|
||||
# This is a sanity check so we can see what version is used in bug reports.
|
||||
AS_BOX([Configuring AC_PACKAGE_TARNAME AC_PACKAGE_VERSION])
|
||||
echo
|
||||
|
||||
|
||||
## ------------ ##
|
||||
## Shell tools. ##
|
||||
## ------------ ##
|
||||
|
||||
AC_PROG_GNU_M4
|
||||
|
||||
|
||||
## ------------------------ ##
|
||||
## Automake Initialisation. ##
|
||||
## ------------------------ ##
|
||||
|
||||
dnl These are bootstrap requirements! Once built, libtool may work with
|
||||
dnl much older releases of autoconf and automake. See release notes.
|
||||
dnl 1.11 is needed for color-tests, 1.11.1 fixes a security issue.
|
||||
AM_INIT_AUTOMAKE([1.11.1 gnu subdir-objects dist-xz])
|
||||
AM_SILENT_RULES([yes])
|
||||
|
||||
|
||||
## ------------------------- ##
|
||||
## Autobuild initialisation. ##
|
||||
## ------------------------- ##
|
||||
|
||||
# You can set autobuild_mode at configure time to specify a "unique"
|
||||
# string for this build.
|
||||
: ${autobuild_mode=default}
|
||||
AB_VERSION='AC_PACKAGE_VERSION'
|
||||
AB_INIT([$autobuild_mode])
|
||||
|
||||
|
||||
dnl Make sure config.status is regenerated when the version timestamp changes
|
||||
AC_SUBST([CONFIG_STATUS_DEPENDENCIES], ['$(top_srcdir)/.version'])
|
||||
|
||||
|
||||
## ------------------------------- ##
|
||||
## Libtool specific configuration. ##
|
||||
## ------------------------------- ##
|
||||
|
||||
AC_SUBST([aclocaldir], ["\$(datadir)/aclocal"])
|
||||
AC_SUBST([pkgdatadir], ["\$(datadir)/$PACKAGE"])
|
||||
|
||||
AC_ARG_ENABLE(ltdl-install,
|
||||
[AS_HELP_STRING([--disable-ltdl-install], [do not install libltdl])])
|
||||
if test set != "${enable_ltdl_install+set}"; then
|
||||
enable_ltdl_install=yes
|
||||
fi
|
||||
|
||||
# The list of scripts required to build libltdl, and which need to be
|
||||
# installed by libtoolize --ltdl, and consequently need to be placed in
|
||||
# $pkgdatadir by our make install rule.
|
||||
pkgaux_scripts="compile config.guess config.sub depcomp install-sh missing"
|
||||
AC_SUBST([pkgaux_scripts])
|
||||
|
||||
|
||||
## ---------------- ##
|
||||
## compiler checks. ##
|
||||
## ---------------- ##
|
||||
|
||||
# Need to be sure that we have a working C compiler, otherwise even with
|
||||
# a good C compiler: if the following C++ tests fail, the whole libtool
|
||||
# build fails!
|
||||
AC_PROG_CC
|
||||
GL_EARLY
|
||||
AM_PROG_CC_C_O
|
||||
AC_PROG_CPP
|
||||
|
||||
## ----------------------- ##
|
||||
## Libtool initialisation. ##
|
||||
## ----------------------- ##
|
||||
LT_INIT([dlopen win32-dll])
|
||||
_LT_SET_OPTION([LTDL_INIT], [nonrecursive])
|
||||
_LTDL_SETUP
|
||||
|
||||
# Enable all the language support we can
|
||||
LT_LANG(C++)
|
||||
LT_LANG(Fortran 77)
|
||||
LT_LANG(Fortran)
|
||||
LT_LANG(Go)
|
||||
LT_LANG(Java)
|
||||
LT_LANG(Windows Resource)
|
||||
|
||||
# Ensure the correct file name (and path) conversion function
|
||||
# is available to the test suite.
|
||||
AC_SUBST([to_host_file_cmd])dnl
|
||||
AC_SUBST([to_tool_file_cmd])dnl
|
||||
|
||||
# Propagate --with-aix-soname option to the testsuite.
|
||||
AC_SUBST([with_aix_soname])dnl
|
||||
|
||||
## ---------------------- ##
|
||||
## Gnulib initialisation. ##
|
||||
## ---------------------- ##
|
||||
GL_INIT
|
||||
|
||||
## ------------- ##
|
||||
## Documentation ##
|
||||
## ------------- ##
|
||||
AM_MISSING_PROG([HELP2MAN], [help2man])
|
||||
|
||||
## -------- ##
|
||||
## Outputs. ##
|
||||
## -------- ##
|
||||
AC_CONFIG_FILES([Makefile gnulib-tests/Makefile])
|
||||
AC_OUTPUT
|
||||
@ -1,162 +0,0 @@
|
||||
-------------------------------------------------------
|
||||
canonical host name compiler libtool results
|
||||
(tools versions) release
|
||||
-------------------------------------------------------
|
||||
alpha-dec-osf5.1 cc 1.3e ok (1.910)
|
||||
alpha-dec-osf4.0f gcc 1.3e ok (1.910)
|
||||
alpha-dec-osf4.0f cc 1.3e ok (1.910)
|
||||
alpha-dec-osf3.2 gcc 0.8 ok
|
||||
alpha-dec-osf3.2 cc 0.8 ok
|
||||
alpha-dec-osf2.1 gcc 1.2f NS
|
||||
alpha*-unknown-linux-gnu gcc 1.3b ok
|
||||
(egcs-1.1.2, GNU ld 2.9.1.0.23)
|
||||
hppa2.0w-hp-hpux11.00 cc 1.2f ok
|
||||
hppa2.0-hp-hpux10.20 cc 1.3.2 ok
|
||||
hppa1.1-hp-hpux10.20 gcc 1.2f ok
|
||||
hppa1.1-hp-hpux10.20 cc 1.3c ok (1.821)
|
||||
hppa1.1-hp-hpux10.10 gcc 1.2f ok
|
||||
hppa1.1-hp-hpux10.10 cc 1.2f ok
|
||||
hppa1.1-hp-hpux9.07 gcc 1.2f ok
|
||||
hppa1.1-hp-hpux9.07 cc 1.2f ok
|
||||
hppa1.1-hp-hpux9.05 gcc 1.2f ok
|
||||
hppa1.1-hp-hpux9.05 cc 1.2f ok
|
||||
hppa1.1-hp-hpux9.01 gcc 1.2f ok
|
||||
hppa1.1-hp-hpux9.01 cc 1.2f ok
|
||||
i*86-*-beos gcc 1.2f ok
|
||||
i*86-*-bsdi4.0.1 gcc 1.3c ok
|
||||
(gcc-2.7.2.1)
|
||||
i*86-*-bsdi4.0 gcc 1.2f ok
|
||||
i*86-*-bsdi3.1 gcc 1.2e NS
|
||||
i*86-*-bsdi3.0 gcc 1.2e NS
|
||||
i*86-*-bsdi2.1 gcc 1.2e NS
|
||||
i*86-pc-cygwin gcc 1.3b NS
|
||||
(egcs-1.1 stock b20.1 compiler)
|
||||
i*86-*-dguxR4.20MU01 gcc 1.2 ok
|
||||
i*86-*-freebsd4.3 gcc 1.3e ok (1.912)
|
||||
i*86-*-freebsdelf4.0 gcc 1.3c ok
|
||||
(egcs-1.1.2)
|
||||
i*86-*-freebsdelf3.2 gcc 1.3c ok
|
||||
(gcc-2.7.2.1)
|
||||
i*86-*-freebsdelf3.1 gcc 1.3c ok
|
||||
(gcc-2.7.2.1)
|
||||
i*86-*-freebsdelf3.0 gcc 1.3c ok
|
||||
i*86-*-freebsd3.0 gcc 1.2e ok
|
||||
i*86-*-freebsd2.2.8 gcc 1.3c ok
|
||||
(gcc-2.7.2.1)
|
||||
i*86-*-freebsd2.2.6 gcc 1.3b ok
|
||||
(egcs-1.1 & gcc-2.7.2.1, native ld)
|
||||
i*86-*-freebsd2.1.5 gcc 0.5 ok
|
||||
i*86-*-netbsd1.5 gcc 1.3e ok (1.901)
|
||||
(egcs-1.1.2)
|
||||
i*86-*-netbsd1.4 gcc 1.3c ok
|
||||
(egcs-1.1.1)
|
||||
i*86-*-netbsd1.4.3A gcc 1.3e ok (1.901)
|
||||
i*86-*-netbsd1.3.3 gcc 1.3c ok
|
||||
(gcc-2.7.2.2+myc2)
|
||||
i*86-*-netbsd1.3.2 gcc 1.2e ok
|
||||
i*86-*-netbsd1.3I gcc 1.2e ok
|
||||
(egcs 1.1?)
|
||||
i*86-*-netbsd1.2 gcc 0.9g ok
|
||||
i*86-*-linux-gnu gcc 1.3e ok (1.901)
|
||||
(Red Hat 7.0, gcc "2.96")
|
||||
i*86-*-linux-gnu gcc 1.3e ok (1.911)
|
||||
(SuSE 7.0, gcc 2.95.2)
|
||||
i*86-*-linux-gnulibc1 gcc 1.2f ok
|
||||
i*86-*-openbsd2.5 gcc 1.3c ok
|
||||
(gcc-2.8.1)
|
||||
i*86-*-openbsd2.4 gcc 1.3c ok
|
||||
(gcc-2.8.1)
|
||||
i*86-*-solaris2.7 gcc 1.3b ok
|
||||
(egcs-1.1.2, native ld)
|
||||
i*86-*-solaris2.6 gcc 1.2f ok
|
||||
i*86-*-solaris2.5.1 gcc 1.2f ok
|
||||
i*86-ncr-sysv4.3.03 gcc 1.2f ok
|
||||
i*86-ncr-sysv4.3.03 cc 1.2e ok
|
||||
(cc -Hnocopyr)
|
||||
i*86-pc-sco3.2v5.0.5 cc 1.3c ok
|
||||
i*86-pc-sco3.2v5.0.5 gcc 1.3c ok
|
||||
(gcc 95q4c)
|
||||
i*86-pc-sco3.2v5.0.5 gcc 1.3c ok
|
||||
(egcs-1.1.2)
|
||||
i*86-sco-sysv5uw7.1.1 gcc 1.3e ok (1.901)
|
||||
(gcc-2.95.2, SCO linker)
|
||||
i*86-UnixWare7.1.0-sysv5 cc 1.3c ok
|
||||
i*86-UnixWare7.1.0-sysv5 gcc 1.3c ok
|
||||
(egcs-1.1.1)
|
||||
m68k-next-nextstep3 gcc 1.2f NS
|
||||
m68k-sun-sunos4.1.1 gcc 1.2f NS
|
||||
(gcc-2.5.7)
|
||||
m88k-dg-dguxR4.12TMU01 gcc 1.2 ok
|
||||
m88k-motorola-sysv4 gcc 1.3 ok
|
||||
(egcs-1.1.2)
|
||||
mips-sgi-irix6.5 gcc 1.2f ok
|
||||
(gcc-2.8.1)
|
||||
mips-sgi-irix6.4 gcc 1.2f ok
|
||||
mips-sgi-irix6.3 gcc 1.3b ok
|
||||
(egcs-1.1.2, native ld)
|
||||
mips-sgi-irix6.3 cc 1.3b ok
|
||||
(cc 7.0)
|
||||
mips-sgi-irix6.2 gcc 1.2f ok
|
||||
mips-sgi-irix6.2 cc 0.9 ok
|
||||
mips-sgi-irix5.3 gcc 1.2f ok
|
||||
(egcs-1.1.1)
|
||||
mips-sgi-irix5.3 gcc 1.2f NS
|
||||
(gcc-2.6.3)
|
||||
mips-sgi-irix5.3 cc 0.8 ok
|
||||
mips-sgi-irix5.2 gcc 1.3b ok
|
||||
(egcs-1.1.2, native ld)
|
||||
mips-sgi-irix5.2 cc 1.3b ok
|
||||
(cc 3.18)
|
||||
mips-sni-sysv4 cc 1.3.5 ok
|
||||
(Siemens C-compiler)
|
||||
mips-sni-sysv4 gcc 1.3.5 ok
|
||||
(gcc-2.7.2.3, GNU assembler 2.8.1, native ld)
|
||||
mipsel-unknown-openbsd2.1 gcc 1.0 ok
|
||||
powerpc-apple-darwin6.4 gcc 1.5 ok
|
||||
(apple dev tools released 12/2002)
|
||||
powerpc-ibm-aix4.3.1.0 gcc 1.2f ok
|
||||
(egcs-1.1.1)
|
||||
powerpc-ibm-aix4.2.1.0 gcc 1.2f ok
|
||||
(egcs-1.1.1)
|
||||
powerpc-ibm-aix4.1.5.0 gcc 1.2f ok
|
||||
(egcs-1.1.1)
|
||||
powerpc-ibm-aix4.1.5.0 gcc 1.2f NS
|
||||
(gcc-2.8.1)
|
||||
powerpc-ibm-aix4.1.4.0 gcc 1.0 ok
|
||||
powerpc-ibm-aix4.1.4.0 xlc 1.0i ok
|
||||
rs6000-ibm-aix4.1.5.0 gcc 1.2f ok
|
||||
(gcc-2.7.2)
|
||||
rs6000-ibm-aix4.1.4.0 gcc 1.2f ok
|
||||
(gcc-2.7.2)
|
||||
rs6000-ibm-aix3.2.5 gcc 1.0i ok
|
||||
rs6000-ibm-aix3.2.5 xlc 1.0i ok
|
||||
sparc-sun-solaris2.8 gcc 1.3e ok (1.913)
|
||||
(gcc-2.95.3 & native ld)
|
||||
sparc-sun-solaris2.7 gcc 1.3e ok (1.913)
|
||||
(gcc-2.95.3 & native ld)
|
||||
sparc-sun-solaris2.6 gcc 1.3e ok (1.913)
|
||||
(gcc-2.95.3 & native ld)
|
||||
sparc-sun-solaris2.5.1 gcc 1.3e ok (1.911)
|
||||
sparc-sun-solaris2.5 gcc 1.3b ok
|
||||
(egcs-1.1.2, GNU ld 2.9.1 & native ld)
|
||||
sparc-sun-solaris2.5 cc 1.3b ok
|
||||
(SC 3.0.1)
|
||||
sparc-sun-solaris2.4 gcc 1.0a ok
|
||||
sparc-sun-solaris2.4 cc 1.0a ok
|
||||
sparc-sun-solaris2.3 gcc 1.2f ok
|
||||
sparc-sun-sunos4.1.4 gcc 1.2f ok
|
||||
sparc-sun-sunos4.1.4 cc 1.0f ok
|
||||
sparc-sun-sunos4.1.3_U1 gcc 1.2f ok
|
||||
sparc-sun-sunos4.1.3C gcc 1.2f ok
|
||||
sparc-sun-sunos4.1.3 gcc 1.3b ok
|
||||
(egcs-1.1.2, GNU ld 2.9.1 & native ld)
|
||||
sparc-sun-sunos4.1.3 cc 1.3b ok
|
||||
sparc-unknown-bsdi4.0 gcc 1.2c ok
|
||||
sparc-unknown-linux-gnulibc1 gcc 1.2f ok
|
||||
sparc-unknown-linux-gnu gcc 1.3b ok
|
||||
(egcs-1.1.2, GNU ld 2.9.1.0.23)
|
||||
sparc64-unknown-linux-gnu gcc 1.2f ok
|
||||
|
||||
Notes:
|
||||
- "ok" means "all tests passed".
|
||||
- "NS" means "Not Shared", but OK for static libraries
|
||||
@ -1,505 +0,0 @@
|
||||
@c The GNU Free Documentation License.
|
||||
@center Version 1.3, 3 November 2008
|
||||
|
||||
@c This file is intended to be included within another document,
|
||||
@c hence no sectioning command or @node.
|
||||
|
||||
@display
|
||||
Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
|
||||
@uref{https://fsf.org/}
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
@end display
|
||||
|
||||
@enumerate 0
|
||||
@item
|
||||
PREAMBLE
|
||||
|
||||
The purpose of this License is to make a manual, textbook, or other
|
||||
functional and useful document @dfn{free} in the sense of freedom: to
|
||||
assure everyone the effective freedom to copy and redistribute it,
|
||||
with or without modifying it, either commercially or noncommercially.
|
||||
Secondarily, this License preserves for the author and publisher a way
|
||||
to get credit for their work, while not being considered responsible
|
||||
for modifications made by others.
|
||||
|
||||
This License is a kind of ``copyleft'', which means that derivative
|
||||
works of the document must themselves be free in the same sense. It
|
||||
complements the GNU General Public License, which is a copyleft
|
||||
license designed for free software.
|
||||
|
||||
We have designed this License in order to use it for manuals for free
|
||||
software, because free software needs free documentation: a free
|
||||
program should come with manuals providing the same freedoms that the
|
||||
software does. But this License is not limited to software manuals;
|
||||
it can be used for any textual work, regardless of subject matter or
|
||||
whether it is published as a printed book. We recommend this License
|
||||
principally for works whose purpose is instruction or reference.
|
||||
|
||||
@item
|
||||
APPLICABILITY AND DEFINITIONS
|
||||
|
||||
This License applies to any manual or other work, in any medium, that
|
||||
contains a notice placed by the copyright holder saying it can be
|
||||
distributed under the terms of this License. Such a notice grants a
|
||||
world-wide, royalty-free license, unlimited in duration, to use that
|
||||
work under the conditions stated herein. The ``Document'', below,
|
||||
refers to any such manual or work. Any member of the public is a
|
||||
licensee, and is addressed as ``you''. You accept the license if you
|
||||
copy, modify or distribute the work in a way requiring permission
|
||||
under copyright law.
|
||||
|
||||
A ``Modified Version'' of the Document means any work containing the
|
||||
Document or a portion of it, either copied verbatim, or with
|
||||
modifications and/or translated into another language.
|
||||
|
||||
A ``Secondary Section'' is a named appendix or a front-matter section
|
||||
of the Document that deals exclusively with the relationship of the
|
||||
publishers or authors of the Document to the Document's overall
|
||||
subject (or to related matters) and contains nothing that could fall
|
||||
directly within that overall subject. (Thus, if the Document is in
|
||||
part a textbook of mathematics, a Secondary Section may not explain
|
||||
any mathematics.) The relationship could be a matter of historical
|
||||
connection with the subject or with related matters, or of legal,
|
||||
commercial, philosophical, ethical or political position regarding
|
||||
them.
|
||||
|
||||
The ``Invariant Sections'' are certain Secondary Sections whose titles
|
||||
are designated, as being those of Invariant Sections, in the notice
|
||||
that says that the Document is released under this License. If a
|
||||
section does not fit the above definition of Secondary then it is not
|
||||
allowed to be designated as Invariant. The Document may contain zero
|
||||
Invariant Sections. If the Document does not identify any Invariant
|
||||
Sections then there are none.
|
||||
|
||||
The ``Cover Texts'' are certain short passages of text that are listed,
|
||||
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
|
||||
the Document is released under this License. A Front-Cover Text may
|
||||
be at most 5 words, and a Back-Cover Text may be at most 25 words.
|
||||
|
||||
A ``Transparent'' copy of the Document means a machine-readable copy,
|
||||
represented in a format whose specification is available to the
|
||||
general public, that is suitable for revising the document
|
||||
straightforwardly with generic text editors or (for images composed of
|
||||
pixels) generic paint programs or (for drawings) some widely available
|
||||
drawing editor, and that is suitable for input to text formatters or
|
||||
for automatic translation to a variety of formats suitable for input
|
||||
to text formatters. A copy made in an otherwise Transparent file
|
||||
format whose markup, or absence of markup, has been arranged to thwart
|
||||
or discourage subsequent modification by readers is not Transparent.
|
||||
An image format is not Transparent if used for any substantial amount
|
||||
of text. A copy that is not ``Transparent'' is called ``Opaque''.
|
||||
|
||||
Examples of suitable formats for Transparent copies include plain
|
||||
ASCII without markup, Texinfo input format, La@TeX{} input
|
||||
format, SGML or XML using a publicly available
|
||||
DTD, and standard-conforming simple HTML,
|
||||
PostScript or PDF designed for human modification. Examples
|
||||
of transparent image formats include PNG, XCF and
|
||||
JPG@. Opaque formats include proprietary formats that can be
|
||||
read and edited only by proprietary word processors, SGML or
|
||||
XML for which the DTD and/or processing tools are
|
||||
not generally available, and the machine-generated HTML,
|
||||
PostScript or PDF produced by some word processors for
|
||||
output purposes only.
|
||||
|
||||
The ``Title Page'' means, for a printed book, the title page itself,
|
||||
plus such following pages as are needed to hold, legibly, the material
|
||||
this License requires to appear in the title page. For works in
|
||||
formats which do not have any title page as such, ``Title Page'' means
|
||||
the text near the most prominent appearance of the work's title,
|
||||
preceding the beginning of the body of the text.
|
||||
|
||||
The ``publisher'' means any person or entity that distributes copies
|
||||
of the Document to the public.
|
||||
|
||||
A section ``Entitled XYZ'' means a named subunit of the Document whose
|
||||
title either is precisely XYZ or contains XYZ in parentheses following
|
||||
text that translates XYZ in another language. (Here XYZ stands for a
|
||||
specific section name mentioned below, such as ``Acknowledgements'',
|
||||
``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
|
||||
of such a section when you modify the Document means that it remains a
|
||||
section ``Entitled XYZ'' according to this definition.
|
||||
|
||||
The Document may include Warranty Disclaimers next to the notice which
|
||||
states that this License applies to the Document. These Warranty
|
||||
Disclaimers are considered to be included by reference in this
|
||||
License, but only as regards disclaiming warranties: any other
|
||||
implication that these Warranty Disclaimers may have is void and has
|
||||
no effect on the meaning of this License.
|
||||
|
||||
@item
|
||||
VERBATIM COPYING
|
||||
|
||||
You may copy and distribute the Document in any medium, either
|
||||
commercially or noncommercially, provided that this License, the
|
||||
copyright notices, and the license notice saying this License applies
|
||||
to the Document are reproduced in all copies, and that you add no other
|
||||
conditions whatsoever to those of this License. You may not use
|
||||
technical measures to obstruct or control the reading or further
|
||||
copying of the copies you make or distribute. However, you may accept
|
||||
compensation in exchange for copies. If you distribute a large enough
|
||||
number of copies you must also follow the conditions in section 3.
|
||||
|
||||
You may also lend copies, under the same conditions stated above, and
|
||||
you may publicly display copies.
|
||||
|
||||
@item
|
||||
COPYING IN QUANTITY
|
||||
|
||||
If you publish printed copies (or copies in media that commonly have
|
||||
printed covers) of the Document, numbering more than 100, and the
|
||||
Document's license notice requires Cover Texts, you must enclose the
|
||||
copies in covers that carry, clearly and legibly, all these Cover
|
||||
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
|
||||
the back cover. Both covers must also clearly and legibly identify
|
||||
you as the publisher of these copies. The front cover must present
|
||||
the full title with all words of the title equally prominent and
|
||||
visible. You may add other material on the covers in addition.
|
||||
Copying with changes limited to the covers, as long as they preserve
|
||||
the title of the Document and satisfy these conditions, can be treated
|
||||
as verbatim copying in other respects.
|
||||
|
||||
If the required texts for either cover are too voluminous to fit
|
||||
legibly, you should put the first ones listed (as many as fit
|
||||
reasonably) on the actual cover, and continue the rest onto adjacent
|
||||
pages.
|
||||
|
||||
If you publish or distribute Opaque copies of the Document numbering
|
||||
more than 100, you must either include a machine-readable Transparent
|
||||
copy along with each Opaque copy, or state in or with each Opaque copy
|
||||
a computer-network location from which the general network-using
|
||||
public has access to download using public-standard network protocols
|
||||
a complete Transparent copy of the Document, free of added material.
|
||||
If you use the latter option, you must take reasonably prudent steps,
|
||||
when you begin distribution of Opaque copies in quantity, to ensure
|
||||
that this Transparent copy will remain thus accessible at the stated
|
||||
location until at least one year after the last time you distribute an
|
||||
Opaque copy (directly or through your agents or retailers) of that
|
||||
edition to the public.
|
||||
|
||||
It is requested, but not required, that you contact the authors of the
|
||||
Document well before redistributing any large number of copies, to give
|
||||
them a chance to provide you with an updated version of the Document.
|
||||
|
||||
@item
|
||||
MODIFICATIONS
|
||||
|
||||
You may copy and distribute a Modified Version of the Document under
|
||||
the conditions of sections 2 and 3 above, provided that you release
|
||||
the Modified Version under precisely this License, with the Modified
|
||||
Version filling the role of the Document, thus licensing distribution
|
||||
and modification of the Modified Version to whoever possesses a copy
|
||||
of it. In addition, you must do these things in the Modified Version:
|
||||
|
||||
@enumerate A
|
||||
@item
|
||||
Use in the Title Page (and on the covers, if any) a title distinct
|
||||
from that of the Document, and from those of previous versions
|
||||
(which should, if there were any, be listed in the History section
|
||||
of the Document). You may use the same title as a previous version
|
||||
if the original publisher of that version gives permission.
|
||||
|
||||
@item
|
||||
List on the Title Page, as authors, one or more persons or entities
|
||||
responsible for authorship of the modifications in the Modified
|
||||
Version, together with at least five of the principal authors of the
|
||||
Document (all of its principal authors, if it has fewer than five),
|
||||
unless they release you from this requirement.
|
||||
|
||||
@item
|
||||
State on the Title page the name of the publisher of the
|
||||
Modified Version, as the publisher.
|
||||
|
||||
@item
|
||||
Preserve all the copyright notices of the Document.
|
||||
|
||||
@item
|
||||
Add an appropriate copyright notice for your modifications
|
||||
adjacent to the other copyright notices.
|
||||
|
||||
@item
|
||||
Include, immediately after the copyright notices, a license notice
|
||||
giving the public permission to use the Modified Version under the
|
||||
terms of this License, in the form shown in the Addendum below.
|
||||
|
||||
@item
|
||||
Preserve in that license notice the full lists of Invariant Sections
|
||||
and required Cover Texts given in the Document's license notice.
|
||||
|
||||
@item
|
||||
Include an unaltered copy of this License.
|
||||
|
||||
@item
|
||||
Preserve the section Entitled ``History'', Preserve its Title, and add
|
||||
to it an item stating at least the title, year, new authors, and
|
||||
publisher of the Modified Version as given on the Title Page. If
|
||||
there is no section Entitled ``History'' in the Document, create one
|
||||
stating the title, year, authors, and publisher of the Document as
|
||||
given on its Title Page, then add an item describing the Modified
|
||||
Version as stated in the previous sentence.
|
||||
|
||||
@item
|
||||
Preserve the network location, if any, given in the Document for
|
||||
public access to a Transparent copy of the Document, and likewise
|
||||
the network locations given in the Document for previous versions
|
||||
it was based on. These may be placed in the ``History'' section.
|
||||
You may omit a network location for a work that was published at
|
||||
least four years before the Document itself, or if the original
|
||||
publisher of the version it refers to gives permission.
|
||||
|
||||
@item
|
||||
For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
|
||||
the Title of the section, and preserve in the section all the
|
||||
substance and tone of each of the contributor acknowledgements and/or
|
||||
dedications given therein.
|
||||
|
||||
@item
|
||||
Preserve all the Invariant Sections of the Document,
|
||||
unaltered in their text and in their titles. Section numbers
|
||||
or the equivalent are not considered part of the section titles.
|
||||
|
||||
@item
|
||||
Delete any section Entitled ``Endorsements''. Such a section
|
||||
may not be included in the Modified Version.
|
||||
|
||||
@item
|
||||
Do not retitle any existing section to be Entitled ``Endorsements'' or
|
||||
to conflict in title with any Invariant Section.
|
||||
|
||||
@item
|
||||
Preserve any Warranty Disclaimers.
|
||||
@end enumerate
|
||||
|
||||
If the Modified Version includes new front-matter sections or
|
||||
appendices that qualify as Secondary Sections and contain no material
|
||||
copied from the Document, you may at your option designate some or all
|
||||
of these sections as invariant. To do this, add their titles to the
|
||||
list of Invariant Sections in the Modified Version's license notice.
|
||||
These titles must be distinct from any other section titles.
|
||||
|
||||
You may add a section Entitled ``Endorsements'', provided it contains
|
||||
nothing but endorsements of your Modified Version by various
|
||||
parties---for example, statements of peer review or that the text has
|
||||
been approved by an organization as the authoritative definition of a
|
||||
standard.
|
||||
|
||||
You may add a passage of up to five words as a Front-Cover Text, and a
|
||||
passage of up to 25 words as a Back-Cover Text, to the end of the list
|
||||
of Cover Texts in the Modified Version. Only one passage of
|
||||
Front-Cover Text and one of Back-Cover Text may be added by (or
|
||||
through arrangements made by) any one entity. If the Document already
|
||||
includes a cover text for the same cover, previously added by you or
|
||||
by arrangement made by the same entity you are acting on behalf of,
|
||||
you may not add another; but you may replace the old one, on explicit
|
||||
permission from the previous publisher that added the old one.
|
||||
|
||||
The author(s) and publisher(s) of the Document do not by this License
|
||||
give permission to use their names for publicity for or to assert or
|
||||
imply endorsement of any Modified Version.
|
||||
|
||||
@item
|
||||
COMBINING DOCUMENTS
|
||||
|
||||
You may combine the Document with other documents released under this
|
||||
License, under the terms defined in section 4 above for modified
|
||||
versions, provided that you include in the combination all of the
|
||||
Invariant Sections of all of the original documents, unmodified, and
|
||||
list them all as Invariant Sections of your combined work in its
|
||||
license notice, and that you preserve all their Warranty Disclaimers.
|
||||
|
||||
The combined work need only contain one copy of this License, and
|
||||
multiple identical Invariant Sections may be replaced with a single
|
||||
copy. If there are multiple Invariant Sections with the same name but
|
||||
different contents, make the title of each such section unique by
|
||||
adding at the end of it, in parentheses, the name of the original
|
||||
author or publisher of that section if known, or else a unique number.
|
||||
Make the same adjustment to the section titles in the list of
|
||||
Invariant Sections in the license notice of the combined work.
|
||||
|
||||
In the combination, you must combine any sections Entitled ``History''
|
||||
in the various original documents, forming one section Entitled
|
||||
``History''; likewise combine any sections Entitled ``Acknowledgements'',
|
||||
and any sections Entitled ``Dedications''. You must delete all
|
||||
sections Entitled ``Endorsements.''
|
||||
|
||||
@item
|
||||
COLLECTIONS OF DOCUMENTS
|
||||
|
||||
You may make a collection consisting of the Document and other documents
|
||||
released under this License, and replace the individual copies of this
|
||||
License in the various documents with a single copy that is included in
|
||||
the collection, provided that you follow the rules of this License for
|
||||
verbatim copying of each of the documents in all other respects.
|
||||
|
||||
You may extract a single document from such a collection, and distribute
|
||||
it individually under this License, provided you insert a copy of this
|
||||
License into the extracted document, and follow this License in all
|
||||
other respects regarding verbatim copying of that document.
|
||||
|
||||
@item
|
||||
AGGREGATION WITH INDEPENDENT WORKS
|
||||
|
||||
A compilation of the Document or its derivatives with other separate
|
||||
and independent documents or works, in or on a volume of a storage or
|
||||
distribution medium, is called an ``aggregate'' if the copyright
|
||||
resulting from the compilation is not used to limit the legal rights
|
||||
of the compilation's users beyond what the individual works permit.
|
||||
When the Document is included in an aggregate, this License does not
|
||||
apply to the other works in the aggregate which are not themselves
|
||||
derivative works of the Document.
|
||||
|
||||
If the Cover Text requirement of section 3 is applicable to these
|
||||
copies of the Document, then if the Document is less than one half of
|
||||
the entire aggregate, the Document's Cover Texts may be placed on
|
||||
covers that bracket the Document within the aggregate, or the
|
||||
electronic equivalent of covers if the Document is in electronic form.
|
||||
Otherwise they must appear on printed covers that bracket the whole
|
||||
aggregate.
|
||||
|
||||
@item
|
||||
TRANSLATION
|
||||
|
||||
Translation is considered a kind of modification, so you may
|
||||
distribute translations of the Document under the terms of section 4.
|
||||
Replacing Invariant Sections with translations requires special
|
||||
permission from their copyright holders, but you may include
|
||||
translations of some or all Invariant Sections in addition to the
|
||||
original versions of these Invariant Sections. You may include a
|
||||
translation of this License, and all the license notices in the
|
||||
Document, and any Warranty Disclaimers, provided that you also include
|
||||
the original English version of this License and the original versions
|
||||
of those notices and disclaimers. In case of a disagreement between
|
||||
the translation and the original version of this License or a notice
|
||||
or disclaimer, the original version will prevail.
|
||||
|
||||
If a section in the Document is Entitled ``Acknowledgements'',
|
||||
``Dedications'', or ``History'', the requirement (section 4) to Preserve
|
||||
its Title (section 1) will typically require changing the actual
|
||||
title.
|
||||
|
||||
@item
|
||||
TERMINATION
|
||||
|
||||
You may not copy, modify, sublicense, or distribute the Document
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense, or distribute it is void, and
|
||||
will automatically terminate your rights under this License.
|
||||
|
||||
However, if you cease all violation of this License, then your license
|
||||
from a particular copyright holder is reinstated (a) provisionally,
|
||||
unless and until the copyright holder explicitly and finally
|
||||
terminates your license, and (b) permanently, if the copyright holder
|
||||
fails to notify you of the violation by some reasonable means prior to
|
||||
60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, receipt of a copy of some or all of the same material does
|
||||
not give you any rights to use it.
|
||||
|
||||
@item
|
||||
FUTURE REVISIONS OF THIS LICENSE
|
||||
|
||||
The Free Software Foundation may publish new, revised versions
|
||||
of the GNU Free Documentation 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. See
|
||||
@uref{https://www.gnu.org/licenses/}.
|
||||
|
||||
Each version of the License is given a distinguishing version number.
|
||||
If the Document specifies that a particular numbered version of this
|
||||
License ``or any later version'' applies to it, you have the option of
|
||||
following the terms and conditions either of that specified version or
|
||||
of any later version that has been published (not as a draft) by the
|
||||
Free Software Foundation. If the Document does not specify a version
|
||||
number of this License, you may choose any version ever published (not
|
||||
as a draft) by the Free Software Foundation. If the Document
|
||||
specifies that a proxy can decide which future versions of this
|
||||
License can be used, that proxy's public statement of acceptance of a
|
||||
version permanently authorizes you to choose that version for the
|
||||
Document.
|
||||
|
||||
@item
|
||||
RELICENSING
|
||||
|
||||
``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any
|
||||
World Wide Web server that publishes copyrightable works and also
|
||||
provides prominent facilities for anybody to edit those works. A
|
||||
public wiki that anybody can edit is an example of such a server. A
|
||||
``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the
|
||||
site means any set of copyrightable works thus published on the MMC
|
||||
site.
|
||||
|
||||
``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0
|
||||
license published by Creative Commons Corporation, a not-for-profit
|
||||
corporation with a principal place of business in San Francisco,
|
||||
California, as well as future copyleft versions of that license
|
||||
published by that same organization.
|
||||
|
||||
``Incorporate'' means to publish or republish a Document, in whole or
|
||||
in part, as part of another Document.
|
||||
|
||||
An MMC is ``eligible for relicensing'' if it is licensed under this
|
||||
License, and if all works that were first published under this License
|
||||
somewhere other than this MMC, and subsequently incorporated in whole
|
||||
or in part into the MMC, (1) had no cover texts or invariant sections,
|
||||
and (2) were thus incorporated prior to November 1, 2008.
|
||||
|
||||
The operator of an MMC Site may republish an MMC contained in the site
|
||||
under CC-BY-SA on the same site at any time before August 1, 2009,
|
||||
provided the MMC is eligible for relicensing.
|
||||
|
||||
@end enumerate
|
||||
|
||||
@page
|
||||
@heading ADDENDUM: How to use this License for your documents
|
||||
|
||||
To use this License in a document you have written, include a copy of
|
||||
the License in the document and put the following copyright and
|
||||
license notices just after the title page:
|
||||
|
||||
@smallexample
|
||||
@group
|
||||
Copyright (C) @var{year} @var{your name}.
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
under the terms of the GNU Free Documentation License, Version 1.3
|
||||
or any later version published by the Free Software Foundation;
|
||||
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
|
||||
Texts. A copy of the license is included in the section entitled ``GNU
|
||||
Free Documentation License''.
|
||||
@end group
|
||||
@end smallexample
|
||||
|
||||
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
|
||||
replace the ``with@dots{}Texts.''@: line with this:
|
||||
|
||||
@smallexample
|
||||
@group
|
||||
with the Invariant Sections being @var{list their titles}, with
|
||||
the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
|
||||
being @var{list}.
|
||||
@end group
|
||||
@end smallexample
|
||||
|
||||
If you have Invariant Sections without Cover Texts, or some other
|
||||
combination of the three, merge those two alternatives to suit the
|
||||
situation.
|
||||
|
||||
If your document contains nontrivial examples of program code, we
|
||||
recommend releasing these examples in parallel under your choice of
|
||||
free software license, such as the GNU General Public License,
|
||||
to permit their use in free software.
|
||||
|
||||
@c Local Variables:
|
||||
@c ispell-local-pdict: "ispell-dict"
|
||||
@c End:
|
||||
@ -1,101 +0,0 @@
|
||||
<!--#include virtual="/server/header.html" -->
|
||||
<!-- Parent-Version: 1.78 -->
|
||||
|
||||
<!--
|
||||
Copyright (C) 2006-2022 Free Software Foundation, Inc.
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
notice and this notice are preserved. This file is offered as-is,
|
||||
without any warranty.
|
||||
-->
|
||||
|
||||
<title>%%TITLE%% - GNU Project - Free Software Foundation</title>
|
||||
<!--#include virtual="/server/banner.html" -->
|
||||
<h2>%%TITLE%%</h2>
|
||||
|
||||
<address>Free Software Foundation</address>
|
||||
<address>last updated %%DATE%%</address>
|
||||
|
||||
<p>This manual (%%PACKAGE%%) is available in the following formats:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="%%PACKAGE%%.html">HTML
|
||||
(%%HTML_MONO_SIZE%%K bytes)</a> - entirely on one web page.</li>
|
||||
<li><a href="html_node/index.html">HTML</a> - with one web page per
|
||||
node.</li>
|
||||
%%IF HTML_SECTION%%
|
||||
<li><a href="html_section/index.html">HTML</a> - with one web page per
|
||||
section.</li>
|
||||
%%ENDIF HTML_SECTION%%
|
||||
%%IF HTML_CHAPTER%%
|
||||
<li><a href="html_chapter/index.html">HTML</a> - with one web page per
|
||||
chapter.</li>
|
||||
%%ENDIF HTML_CHAPTER%%
|
||||
<li><a href="%%PACKAGE%%.html.gz">HTML compressed
|
||||
(%%HTML_MONO_GZ_SIZE%%K gzipped characters)</a> - entirely on
|
||||
one web page.</li>
|
||||
<li><a href="%%PACKAGE%%.html_node.tar.gz">HTML compressed
|
||||
(%%HTML_NODE_TGZ_SIZE%%K gzipped tar file)</a> -
|
||||
with one web page per node.</li>
|
||||
%%IF HTML_SECTION%%
|
||||
<li><a href="%%PACKAGE%%.html_section.tar.gz">HTML compressed
|
||||
(%%HTML_SECTION_TGZ_SIZE%%K gzipped tar file)</a> -
|
||||
with one web page per section.</li>
|
||||
%%ENDIF HTML_SECTION%%
|
||||
%%IF HTML_CHAPTER%%
|
||||
<li><a href="%%PACKAGE%%.html_chapter.tar.gz">HTML compressed
|
||||
(%%HTML_CHAPTER_TGZ_SIZE%%K gzipped tar file)</a> -
|
||||
with one web page per chapter.</li>
|
||||
%%ENDIF HTML_CHAPTER%%
|
||||
<li><a href="%%PACKAGE%%.info.tar.gz">Info document
|
||||
(%%INFO_TGZ_SIZE%%K bytes gzipped tar file)</a>.</li>
|
||||
<li><a href="%%PACKAGE%%.txt">ASCII text
|
||||
(%%ASCII_SIZE%%K bytes)</a>.</li>
|
||||
<li><a href="%%PACKAGE%%.txt.gz">ASCII text compressed
|
||||
(%%ASCII_GZ_SIZE%%K bytes gzipped)</a>.</li>
|
||||
<li><a href="%%PACKAGE%%.dvi.gz">TeX dvi file
|
||||
(%%DVI_GZ_SIZE%%K bytes gzipped)</a>.</li>
|
||||
<li><a href="%%PACKAGE%%.pdf">PDF file
|
||||
(%%PDF_SIZE%%K bytes)</a>.</li>
|
||||
<li><a href="%%PACKAGE%%.texi.tar.gz">Texinfo source
|
||||
(%%TEXI_TGZ_SIZE%%K bytes gzipped tar file).</a></li>
|
||||
</ul>
|
||||
|
||||
<p>You can <a href="https://shop.fsf.org/">buy printed copies of
|
||||
some manuals</a> (among other items) from the Free Software Foundation;
|
||||
this helps support FSF activities.</p>
|
||||
|
||||
<p>(This page generated by the <a href="%%SCRIPTURL%%">%%SCRIPTNAME%%
|
||||
script</a>.)</p>
|
||||
|
||||
<!-- If needed, change the copyright block at the bottom. In general,
|
||||
all pages on the GNU web server should have the section about
|
||||
verbatim copying. Please do NOT remove this without talking
|
||||
with the webmasters first.
|
||||
Please make sure the copyright date is consistent with the document
|
||||
and that it is like this: "2001, 2002", not this: "2001-2002". -->
|
||||
</div><!-- for id="content", starts in the include above -->
|
||||
<!--#include virtual="/server/footer.html" -->
|
||||
<div id="footer">
|
||||
<div class="unprintable">
|
||||
|
||||
<p>Please send general FSF & GNU inquiries to
|
||||
<a href="mailto:gnu@gnu.org"><gnu@gnu.org></a>.
|
||||
There are also <a href="/contact/">other ways to contact</a>
|
||||
the FSF. Broken links and other corrections or suggestions can be sent
|
||||
to <a href="mailto:%%EMAIL%%"><%%EMAIL%%></a>.</p>
|
||||
</div>
|
||||
|
||||
<p>Copyright © 2022 Free Software Foundation, Inc.</p>
|
||||
|
||||
<p>This page is licensed under a <a rel="license"
|
||||
href="https://creativecommons.org/licenses/by-nd/3.0/us/">Creative
|
||||
Commons Attribution-NoDerivs 3.0 United States License</a>.</p>
|
||||
|
||||
<!--#include virtual="/server/bottom-notes.html" -->
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,123 +0,0 @@
|
||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.48.1.
|
||||
.TH LIBTOOL "1" "March 2022" "GNU libtool 2.4.7" "User Commands"
|
||||
.SH NAME
|
||||
libtool \- manual page for libtool 2.4.7
|
||||
.SH SYNOPSIS
|
||||
.B libtool
|
||||
[\fI\,OPTION\/\fR]... [\fI\,MODE-ARG\/\fR]...
|
||||
.SH DESCRIPTION
|
||||
Provide generalized library\-building support services.
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
\fB\-\-config\fR
|
||||
show all configuration variables
|
||||
.TP
|
||||
\fB\-\-debug\fR
|
||||
enable verbose shell tracing
|
||||
.TP
|
||||
\fB\-n\fR, \fB\-\-dry\-run\fR
|
||||
display commands without modifying any files
|
||||
.TP
|
||||
\fB\-\-features\fR
|
||||
display basic configuration information and exit
|
||||
.TP
|
||||
\fB\-\-mode\fR=\fI\,MODE\/\fR
|
||||
use operation mode MODE
|
||||
.TP
|
||||
\fB\-\-no\-warnings\fR
|
||||
equivalent to '\-Wnone'
|
||||
.TP
|
||||
\fB\-\-preserve\-dup\-deps\fR
|
||||
don't remove duplicate dependency libraries
|
||||
.TP
|
||||
\fB\-\-quiet\fR, \fB\-\-silent\fR
|
||||
don't print informational messages
|
||||
.TP
|
||||
\fB\-\-tag\fR=\fI\,TAG\/\fR
|
||||
use configuration variables from tag TAG
|
||||
.TP
|
||||
\fB\-v\fR, \fB\-\-verbose\fR
|
||||
print more informational messages than default
|
||||
.TP
|
||||
\fB\-\-version\fR
|
||||
print version information
|
||||
.TP
|
||||
\fB\-W\fR, \fB\-\-warnings\fR=\fI\,CATEGORY\/\fR
|
||||
report the warnings falling in CATEGORY [all]
|
||||
.TP
|
||||
\fB\-h\fR, \fB\-\-help\fR, \fB\-\-help\-all\fR
|
||||
print short, long, or detailed help message
|
||||
.SS "Warning categories include:"
|
||||
.TP
|
||||
\&'all'
|
||||
show all warnings
|
||||
.TP
|
||||
\&'none'
|
||||
turn off all the warnings
|
||||
.TP
|
||||
\&'error'
|
||||
warnings are treated as fatal errors
|
||||
.PP
|
||||
MODE must be one of the following:
|
||||
.TP
|
||||
clean
|
||||
remove files from the build directory
|
||||
.TP
|
||||
compile
|
||||
compile a source file into a libtool object
|
||||
.TP
|
||||
execute
|
||||
automatically set library path, then run a program
|
||||
.TP
|
||||
finish
|
||||
complete the installation of libtool libraries
|
||||
.TP
|
||||
install
|
||||
install libraries or executables
|
||||
.TP
|
||||
link
|
||||
create a library or an executable
|
||||
.TP
|
||||
uninstall
|
||||
remove libraries from an installed directory
|
||||
.PP
|
||||
MODE\-ARGS vary depending on the MODE. When passed as first option,
|
||||
\&'\-\-mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
|
||||
.PP
|
||||
GNU libtool home page: <http://www.gnu.org/software/libtool/>.
|
||||
.PP
|
||||
When reporting a bug, please describe a test case to reproduce it and
|
||||
include the following information:
|
||||
.TP
|
||||
host\-triplet:
|
||||
x86_64\-pc\-linux\-gnu
|
||||
.TP
|
||||
shell:
|
||||
\fI\,/bin/bash\/\fP
|
||||
.TP
|
||||
compiler:
|
||||
gcc
|
||||
.IP
|
||||
compiler flags: \fB\-g\fR \fB\-O2\fR
|
||||
linker: \fI\,/usr/bin/ld\/\fP \fB\-m\fR elf_x86_64 (gnu? yes)
|
||||
version: libtool (GNU libtool) 2.4.7
|
||||
automake: automake (GNU automake) 1.16.3
|
||||
autoconf: autoconf (GNU Autoconf) 2.69
|
||||
.SH AUTHOR
|
||||
Written by Gordon Matzigkeit, 1996
|
||||
.SH "REPORTING BUGS"
|
||||
Report bugs to <bug\-libtool@gnu.org>.
|
||||
.SH COPYRIGHT
|
||||
Copyright \(co 2014 Free Software Foundation, Inc.
|
||||
.SH "SEE ALSO"
|
||||
The full documentation for
|
||||
.B libtool
|
||||
is maintained as a Texinfo manual. If the
|
||||
.B info
|
||||
and
|
||||
.B libtool
|
||||
programs are properly installed at your site, the command
|
||||
.IP
|
||||
.B info libtool
|
||||
.PP
|
||||
should give you access to the complete manual.
|
||||
@ -1,143 +0,0 @@
|
||||
This is libtool.info, produced by makeinfo version 6.7 from
|
||||
libtool.texi.
|
||||
|
||||
This manual is for GNU Libtool (version 2.4.7, 17 March 2022).
|
||||
|
||||
Copyright (C) 1996-2019, 2021-2022 Free Software Foundation, Inc.
|
||||
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
under the terms of the GNU Free Documentation License, Version 1.3 or
|
||||
any later version published by the Free Software Foundation; with no
|
||||
Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
|
||||
Texts. A copy of the license is included in the section entitled "GNU
|
||||
Free Documentation License".
|
||||
INFO-DIR-SECTION Software development
|
||||
START-INFO-DIR-ENTRY
|
||||
* Libtool: (libtool). Generic shared library support script.
|
||||
END-INFO-DIR-ENTRY
|
||||
|
||||
INFO-DIR-SECTION Individual utilities
|
||||
START-INFO-DIR-ENTRY
|
||||
* libtool-invocation: (libtool)Invoking libtool. Running the 'libtool' script.
|
||||
* libtoolize: (libtool)Invoking libtoolize. Adding libtool support.
|
||||
END-INFO-DIR-ENTRY
|
||||
|
||||
|
||||
Indirect:
|
||||
libtool.info-1: 972
|
||||
libtool.info-2: 314554
|
||||
|
||||
Tag Table:
|
||||
(Indirect)
|
||||
Node: Top972
|
||||
Node: Introduction8165
|
||||
Node: Motivation9971
|
||||
Node: Issues11291
|
||||
Node: Other implementations12769
|
||||
Node: Postmortem13312
|
||||
Node: Libtool paradigm14932
|
||||
Node: Using libtool15877
|
||||
Node: Creating object files17980
|
||||
Node: Linking libraries21716
|
||||
Ref: Linking libraries-Footnote-125525
|
||||
Node: Linking executables25666
|
||||
Ref: Linking executables-Footnote-130917
|
||||
Ref: Linking executables-Footnote-231210
|
||||
Node: Wrapper executables31291
|
||||
Node: Debugging executables33519
|
||||
Node: Installing libraries36333
|
||||
Ref: Installing libraries-Footnote-139495
|
||||
Node: Installing executables39566
|
||||
Node: Static libraries40418
|
||||
Node: Invoking libtool43696
|
||||
Node: Compile mode49352
|
||||
Node: Link mode52313
|
||||
Node: Execute mode62050
|
||||
Node: Install mode62830
|
||||
Node: Finish mode65201
|
||||
Node: Uninstall mode66063
|
||||
Node: Clean mode66504
|
||||
Node: Integrating libtool66963
|
||||
Node: Autoconf macros69793
|
||||
Node: Makefile rules73636
|
||||
Node: Using Automake74739
|
||||
Ref: Using Automake-Footnote-177610
|
||||
Node: Configuring78010
|
||||
Node: LT_INIT79244
|
||||
Ref: LT_INIT-Footnote-196612
|
||||
Node: Configure notes96865
|
||||
Node: Distributing100126
|
||||
Node: Invoking libtoolize101043
|
||||
Node: Autoconf and LTLIBOBJS107225
|
||||
Node: Static-only libraries107969
|
||||
Ref: Static-only libraries-Footnote-1109282
|
||||
Node: Other languages109391
|
||||
Node: C++ libraries110090
|
||||
Node: Tags111513
|
||||
Node: Versioning112926
|
||||
Node: Interfaces114294
|
||||
Node: Libtool versioning114927
|
||||
Node: Updating version info117140
|
||||
Node: Release numbers120171
|
||||
Node: Library tips122008
|
||||
Node: C header files124813
|
||||
Ref: C header files-Footnote-1128468
|
||||
Node: Inter-library dependencies128677
|
||||
Node: Dlopened modules131378
|
||||
Node: Building modules133265
|
||||
Node: Dlpreopening134466
|
||||
Node: Linking with dlopened modules140105
|
||||
Node: Finding the dlname145035
|
||||
Ref: Finding the dlname-Footnote-1146351
|
||||
Node: Dlopen issues146404
|
||||
Node: Using libltdl147445
|
||||
Node: Libltdl interface149277
|
||||
Ref: Libltdl interface-Footnote-1162878
|
||||
Node: Modules for libltdl163172
|
||||
Node: Thread Safety in libltdl165698
|
||||
Node: User defined module data166711
|
||||
Node: Module loaders for libltdl174197
|
||||
Ref: Module loaders for libltdl-Footnote-1183463
|
||||
Node: Distributing libltdl183569
|
||||
Ref: Distributing libltdl-Footnote-1197338
|
||||
Ref: Distributing libltdl-Footnote-2197634
|
||||
Node: Trace interface197784
|
||||
Node: FAQ198619
|
||||
Node: Stripped link flags198957
|
||||
Node: Troubleshooting200402
|
||||
Node: Libtool test suite200925
|
||||
Node: Test descriptions201694
|
||||
Node: When tests fail214075
|
||||
Node: Reporting bugs215078
|
||||
Node: Maintaining216696
|
||||
Node: New ports217439
|
||||
Node: Information sources218132
|
||||
Node: Porting inter-library dependencies220589
|
||||
Node: Tested platforms223305
|
||||
Node: Platform quirks231735
|
||||
Node: References232916
|
||||
Node: Compilers233766
|
||||
Ref: Compilers-Footnote-1235344
|
||||
Node: Reloadable objects235660
|
||||
Node: Multiple dependencies236019
|
||||
Node: Archivers236913
|
||||
Node: Cross compiling237502
|
||||
Node: File name conversion243486
|
||||
Node: File Name Conversion Failure246440
|
||||
Node: Native MinGW File Name Conversion247689
|
||||
Node: Cygwin/Windows File Name Conversion249250
|
||||
Node: Unix/Windows File Name Conversion250621
|
||||
Node: LT_CYGPATH251387
|
||||
Node: Cygwin to MinGW Cross254630
|
||||
Node: Windows DLLs258927
|
||||
Node: libtool script contents266202
|
||||
Node: Cheap tricks286562
|
||||
Node: GNU Free Documentation License288425
|
||||
Node: Combined Index314554
|
||||
|
||||
End Tag Table
|
||||
|
||||
|
||||
Local Variables:
|
||||
coding: utf-8
|
||||
End:
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -1,127 +0,0 @@
|
||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.48.1.
|
||||
.TH LIBTOOLIZE "1" "March 2022" "GNU libtool 2.4.7" "User Commands"
|
||||
.SH NAME
|
||||
libtoolize \- manual page for libtoolize 2.4.7
|
||||
.SH SYNOPSIS
|
||||
.B libtoolize
|
||||
[\fI\,OPTION\/\fR]...
|
||||
.SH DESCRIPTION
|
||||
Prepare a package to use libtool.
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
\fB\-c\fR, \fB\-\-copy\fR
|
||||
copy files rather than symlinking them
|
||||
.TP
|
||||
\fB\-\-debug\fR
|
||||
enable verbose shell tracing
|
||||
.TP
|
||||
\fB\-n\fR, \fB\-\-dry\-run\fR
|
||||
print commands rather than running them
|
||||
.TP
|
||||
\fB\-f\fR, \fB\-\-force\fR
|
||||
replace existing files
|
||||
.TP
|
||||
\fB\-i\fR, \fB\-\-install\fR
|
||||
copy missing auxiliary files
|
||||
.TP
|
||||
\fB\-\-ltdl\fR[=\fI\,DIR\/\fR]
|
||||
install libltdl sources [default: libltdl]
|
||||
.TP
|
||||
\fB\-\-no\-warnings\fR
|
||||
equivalent to '\-Wnone'
|
||||
.TP
|
||||
\fB\-\-nonrecursive\fR
|
||||
prepare ltdl for non\-recursive make
|
||||
.TP
|
||||
\fB\-q\fR, \fB\-\-quiet\fR
|
||||
work silently
|
||||
.TP
|
||||
\fB\-\-recursive\fR
|
||||
prepare ltdl for recursive make
|
||||
.TP
|
||||
\fB\-\-subproject\fR
|
||||
prepare ltdl to configure and build independently
|
||||
.TP
|
||||
\fB\-v\fR, \fB\-\-verbose\fR
|
||||
verbosely report processing
|
||||
.TP
|
||||
\fB\-\-version\fR
|
||||
print version information and exit
|
||||
.TP
|
||||
\fB\-W\fR, \fB\-\-warnings\fR=\fI\,CATEGORY\/\fR
|
||||
report the warnings falling in CATEGORY [all]
|
||||
.TP
|
||||
\fB\-h\fR, \fB\-\-help\fR
|
||||
print short or long help message
|
||||
.SS "Warning categories include:"
|
||||
.TP
|
||||
\&'all'
|
||||
show all warnings
|
||||
.TP
|
||||
\&'none'
|
||||
turn off all the warnings
|
||||
.TP
|
||||
\&'error'
|
||||
warnings are treated as fatal errors
|
||||
.TP
|
||||
\&'environment'
|
||||
show warnings about LIBTOOLIZE_OPTIONS content
|
||||
.TP
|
||||
\&'file'
|
||||
show warnings about file copying and linking
|
||||
.PP
|
||||
The following space or comma delimited options can be passed to libtoolize
|
||||
via the environment variable LIBTOOLIZE_OPTIONS, unknown environment
|
||||
options are ignored:
|
||||
.TP
|
||||
\fB\-\-debug\fR
|
||||
enable verbose shell tracing
|
||||
.TP
|
||||
\fB\-\-no\-warnings\fR
|
||||
don't display warning messages
|
||||
.TP
|
||||
\fB\-\-quiet\fR
|
||||
work silently
|
||||
.TP
|
||||
\fB\-\-verbose\fR
|
||||
verbosely report processing
|
||||
.PP
|
||||
You must 'cd' to the top directory of your package before you run
|
||||
\&'libtoolize'.
|
||||
.PP
|
||||
When reporting a bug, please describe a test case to reproduce it and
|
||||
include the following information:
|
||||
.TP
|
||||
host\-triplet:
|
||||
x86_64\-pc\-linux\-gnu
|
||||
.TP
|
||||
version:
|
||||
libtoolize (GNU libtool) 2.4.7
|
||||
.TP
|
||||
automake:
|
||||
automake (GNU automake) 1.16.3
|
||||
.TP
|
||||
autoconf:
|
||||
autoconf (GNU Autoconf) 2.69
|
||||
.SH AUTHOR
|
||||
Written by Gary V. Vaughan <gary@gnu.org>, 2003
|
||||
.SH "REPORTING BUGS"
|
||||
Report bugs to <bug\-libtool@gnu.org>.
|
||||
.br
|
||||
GNU libtool home page: <http://www.gnu.org/software/libtool/>.
|
||||
.br
|
||||
General help using GNU software: <http://www.gnu.org/gethelp/>.
|
||||
.SH COPYRIGHT
|
||||
Copyright \(co 2022 Free Software Foundation, Inc.
|
||||
.SH "SEE ALSO"
|
||||
The full documentation for
|
||||
.B libtoolize
|
||||
is maintained as a Texinfo manual. If the
|
||||
.B info
|
||||
and
|
||||
.B libtoolize
|
||||
programs are properly installed at your site, the command
|
||||
.IP
|
||||
.B info libtoolize
|
||||
.PP
|
||||
should give you access to the complete manual.
|
||||
@ -1,79 +0,0 @@
|
||||
@itemize
|
||||
|
||||
@item
|
||||
You currently need GNU make to build the Libtool package itself.
|
||||
|
||||
@item
|
||||
On AIX there are two different styles of shared linking, one where symbols
|
||||
are bound at link-time and one where symbols are bound at runtime only,
|
||||
similar to ELF@. In case of doubt use @code{LDFLAGS=-Wl,-brtl} for the latter style.
|
||||
|
||||
@item
|
||||
On AIX, native tools are to be preferred over binutils; especially for C++ code,
|
||||
if using the AIX Toolbox GCC 4.0 and binutils, configure with
|
||||
@code{AR=/usr/bin/ar LD=/usr/bin/ld NM='/usr/bin/nm -B'}.
|
||||
|
||||
@item
|
||||
On AIX, the @command{/bin/sh} is very slow due to its inefficient handling
|
||||
of here-documents. A modern shell is preferable:
|
||||
@example
|
||||
CONFIG_SHELL=/bin/bash; export $CONFIG_SHELL
|
||||
$CONFIG_SHELL ./configure [...]
|
||||
@end example
|
||||
|
||||
@item
|
||||
For C++ code with templates, it may be necessary to specify the way the compiler
|
||||
will generate the instantiations. For Portland pgCC version5, use
|
||||
@code{CXX='pgCC --one_instantiation_per_object'} and avoid parallel @command{make}.
|
||||
|
||||
@item
|
||||
On Darwin, for C++ code with templates you need two level shared libraries.
|
||||
Libtool builds these by default if @env{MACOSX_DEPLOYMENT_TARGET} is set to
|
||||
10.3 or later at @command{configure} time. See @url{rdar://problem/4135857}
|
||||
for more information on this issue.
|
||||
|
||||
@c @item
|
||||
@c FreeBSD @command{make} does not conform to @sc{posix} in its handling
|
||||
@c of file modification times, which causes it to loop while building libtool.
|
||||
@c Consider using a different @command{such} as GNU make instead.
|
||||
|
||||
@item
|
||||
The default shell on UNICOS 9, a ksh 88e variant, is too buggy to
|
||||
correctly execute the libtool script. Users are advised to install a
|
||||
modern shell such as GNU bash.
|
||||
|
||||
@item
|
||||
Some HP-UX @command{sed} programs are horribly broken, and cannot handle
|
||||
libtool's requirements, so users may report unusual problems. There
|
||||
is no workaround except to install a working @command{sed} (such as GNU sed)
|
||||
on these systems.
|
||||
|
||||
@item
|
||||
The vendor-distributed NCR MP-RAS @command{cc} programs emits copyright
|
||||
on standard error that confuse tests on size of @file{conftest.err}. The
|
||||
workaround is to specify @env{CC} when run configure with
|
||||
@code{CC='cc -Hnocopyr'}.
|
||||
|
||||
@item
|
||||
Any earlier DG/UX system with ELF executables, such as R3.10 or
|
||||
R4.10, is also likely to work, but hasn't been explicitly tested.
|
||||
|
||||
@item
|
||||
On Reliant Unix libtool has only been tested with the Siemens C-compiler
|
||||
and an old version of @command{gcc} provided by Marco Walther.
|
||||
|
||||
@item
|
||||
@file{libtool.m4}, @file{ltdl.m4} and the @file{configure.ac} files are marked
|
||||
to use autoconf-mode, which is distributed with GNU Emacs 21, Autoconf itself,
|
||||
and all recent releases of XEmacs.
|
||||
|
||||
@item
|
||||
When building on some GNU/Linux systems for multilib targets @command{libtool}
|
||||
sometimes guesses the wrong paths that the linker and dynamic linker search by
|
||||
default. If this occurs for the dynamic library path, you may use the
|
||||
@code{LT_SYS_LIBRARY_PATH} environment variable to adjust. Otherwise, at
|
||||
@command{configure} time you may override libtool's guesses by setting the
|
||||
@command{autoconf} cache variables @code{lt_cv_sys_lib_search_path_spec} and
|
||||
@code{lt_cv_sys_lib_dlsearch_path_spec} respectively.
|
||||
|
||||
@end itemize
|
||||
@ -1,60 +0,0 @@
|
||||
* You currently need GNU make to build the Libtool package itself.
|
||||
|
||||
* On AIX there are two different styles of shared linking, one where
|
||||
symbols are bound at link-time and one where symbols are bound at
|
||||
runtime only, similar to ELF. In case of doubt use
|
||||
'LDFLAGS=-Wl,-brtl' for the latter style.
|
||||
|
||||
* On AIX, native tools are to be preferred over binutils; especially
|
||||
for C++ code, if using the AIX Toolbox GCC 4.0 and binutils,
|
||||
configure with 'AR=/usr/bin/ar LD=/usr/bin/ld NM='/usr/bin/nm -B''.
|
||||
|
||||
* On AIX, the '/bin/sh' is very slow due to its inefficient handling
|
||||
of here-documents. A modern shell is preferable:
|
||||
CONFIG_SHELL=/bin/bash; export $CONFIG_SHELL
|
||||
$CONFIG_SHELL ./configure [...]
|
||||
|
||||
* For C++ code with templates, it may be necessary to specify the way
|
||||
the compiler will generate the instantiations. For Portland pgCC
|
||||
version5, use 'CXX='pgCC --one_instantiation_per_object'' and avoid
|
||||
parallel 'make'.
|
||||
|
||||
* On Darwin, for C++ code with templates you need two level shared
|
||||
libraries. Libtool builds these by default if
|
||||
'MACOSX_DEPLOYMENT_TARGET' is set to 10.3 or later at 'configure'
|
||||
time. See <rdar://problem/4135857> for more information on this
|
||||
issue.
|
||||
|
||||
* The default shell on UNICOS 9, a ksh 88e variant, is too buggy to
|
||||
correctly execute the libtool script. Users are advised to install
|
||||
a modern shell such as GNU bash.
|
||||
|
||||
* Some HP-UX 'sed' programs are horribly broken, and cannot handle
|
||||
libtool's requirements, so users may report unusual problems.
|
||||
There is no workaround except to install a working 'sed' (such as
|
||||
GNU sed) on these systems.
|
||||
|
||||
* The vendor-distributed NCR MP-RAS 'cc' programs emits copyright on
|
||||
standard error that confuse tests on size of 'conftest.err'. The
|
||||
workaround is to specify 'CC' when run configure with 'CC='cc
|
||||
-Hnocopyr''.
|
||||
|
||||
* Any earlier DG/UX system with ELF executables, such as R3.10 or
|
||||
R4.10, is also likely to work, but hasn't been explicitly tested.
|
||||
|
||||
* On Reliant Unix libtool has only been tested with the Siemens
|
||||
C-compiler and an old version of 'gcc' provided by Marco Walther.
|
||||
|
||||
* 'libtool.m4', 'ltdl.m4' and the 'configure.ac' files are marked to
|
||||
use autoconf-mode, which is distributed with GNU Emacs 21, Autoconf
|
||||
itself, and all recent releases of XEmacs.
|
||||
|
||||
* When building on some GNU/Linux systems for multilib targets
|
||||
'libtool' sometimes guesses the wrong paths that the linker and
|
||||
dynamic linker search by default. If this occurs for the dynamic
|
||||
library path, you may use the 'LT_SYS_LIBRARY_PATH' environment
|
||||
variable to adjust. Otherwise, at 'configure' time you may
|
||||
override libtool's guesses by setting the 'autoconf' cache
|
||||
variables 'lt_cv_sys_lib_search_path_spec' and
|
||||
'lt_cv_sys_lib_dlsearch_path_spec' respectively.
|
||||
|
||||
@ -1,4 +0,0 @@
|
||||
@set UPDATED 17 March 2022
|
||||
@set UPDATED-MONTH March 2022
|
||||
@set EDITION 2.4.7
|
||||
@set VERSION 2.4.7
|
||||
@ -1,4 +0,0 @@
|
||||
@set UPDATED 17 March 2022
|
||||
@set UPDATED-MONTH March 2022
|
||||
@set EDITION 2.4.7
|
||||
@set VERSION 2.4.7
|
||||
@ -1,132 +0,0 @@
|
||||
## DO NOT EDIT! GENERATED AUTOMATICALLY!
|
||||
## Process this file with automake to produce Makefile.in.
|
||||
# Copyright (C) 2002-2022 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This file 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 file. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception to the GNU General Public License,
|
||||
# this file may be distributed as part of a program that
|
||||
# contains a configuration script generated by Autoconf, under
|
||||
# the same distribution terms as the rest of that program.
|
||||
#
|
||||
# Generated by gnulib-tool.
|
||||
|
||||
AUTOMAKE_OPTIONS = 1.11 foreign
|
||||
|
||||
SUBDIRS = .
|
||||
TESTS =
|
||||
XFAIL_TESTS =
|
||||
TESTS_ENVIRONMENT =
|
||||
noinst_PROGRAMS =
|
||||
check_PROGRAMS =
|
||||
EXTRA_PROGRAMS =
|
||||
noinst_HEADERS =
|
||||
noinst_LIBRARIES =
|
||||
EXTRA_DIST =
|
||||
BUILT_SOURCES =
|
||||
SUFFIXES =
|
||||
MOSTLYCLEANFILES = core *.stackdump
|
||||
MOSTLYCLEANDIRS =
|
||||
CLEANFILES =
|
||||
DISTCLEANFILES =
|
||||
MAINTAINERCLEANFILES =
|
||||
|
||||
CFLAGS = @GL_CFLAG_ALLOW_WARNINGS@ $(GL_CFLAG_GNULIB_WARNINGS) @CFLAGS@
|
||||
CXXFLAGS = @GL_CXXFLAG_ALLOW_WARNINGS@ @CXXFLAGS@
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-D@GLtests_WITNESS@=1 \
|
||||
-I. -I$(srcdir) \
|
||||
-I.. -I$(srcdir)/.. \
|
||||
-I../lib -I$(srcdir)/../lib
|
||||
|
||||
LDADD = ../lib/libgnu.la
|
||||
|
||||
TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' srcdir='$(srcdir)'
|
||||
|
||||
## begin gnulib module all-shells-tests
|
||||
|
||||
TESTS_ENVIRONMENT += \
|
||||
abs_aux_dir='$(abs_aux_dir)' \
|
||||
abs_srcdir='$(abs_srcdir)'
|
||||
EXTRA_DIST += test-all-shells.sh
|
||||
|
||||
## end gnulib module all-shells-tests
|
||||
|
||||
## begin gnulib module funclib.sh-tests
|
||||
|
||||
TESTS += \
|
||||
test-funclib-quote.sh
|
||||
EXTRA_DIST += test-funclib-quote.sh
|
||||
|
||||
## end gnulib module funclib.sh-tests
|
||||
|
||||
## begin gnulib module options-parser-tests
|
||||
|
||||
TESTS += \
|
||||
test-option-parser.sh
|
||||
EXTRA_DIST += test-option-parser.sh test-option-parser-helper
|
||||
|
||||
## end gnulib module options-parser-tests
|
||||
|
||||
## begin gnulib module test-framework-sh-tests
|
||||
|
||||
TESTS += test-init.sh
|
||||
EXTRA_DIST += init.sh
|
||||
EXTRA_DIST += test-init.sh
|
||||
|
||||
## end gnulib module test-framework-sh-tests
|
||||
|
||||
## begin gnulib module update-copyright-tests
|
||||
|
||||
TESTS += test-update-copyright.sh
|
||||
TESTS_ENVIRONMENT += abs_aux_dir='$(abs_aux_dir)'
|
||||
EXTRA_DIST += test-update-copyright.sh
|
||||
|
||||
## end gnulib module update-copyright-tests
|
||||
|
||||
## begin gnulib module vc-list-files-tests
|
||||
|
||||
TESTS += test-vc-list-files-git.sh
|
||||
TESTS += test-vc-list-files-cvs.sh
|
||||
TESTS_ENVIRONMENT += abs_aux_dir='$(abs_aux_dir)'
|
||||
EXTRA_DIST += test-vc-list-files-git.sh test-vc-list-files-cvs.sh
|
||||
|
||||
## end gnulib module vc-list-files-tests
|
||||
|
||||
all: all-notice
|
||||
all-notice:
|
||||
@echo '## ---------------------------------------------------- ##'
|
||||
@echo '## ------------------- Gnulib tests ------------------- ##'
|
||||
@echo '## You can ignore compiler warnings in this directory. ##'
|
||||
@echo '## ---------------------------------------------------- ##'
|
||||
|
||||
check-am: check-notice
|
||||
check-notice:
|
||||
@echo '## ---------------------------------------------------------------------- ##'
|
||||
@echo '## ---------------------------- Gnulib tests ---------------------------- ##'
|
||||
@echo '## Please report test failures in this directory to <bug-gnulib@gnu.org>. ##'
|
||||
@echo '## ---------------------------------------------------------------------- ##'
|
||||
|
||||
# Clean up after Solaris cc.
|
||||
clean-local:
|
||||
rm -rf SunWS_cache
|
||||
|
||||
mostlyclean-local: mostlyclean-generic
|
||||
@for dir in '' $(MOSTLYCLEANDIRS); do \
|
||||
if test -n "$$dir" && test -d $$dir; then \
|
||||
echo "rmdir $$dir"; rmdir $$dir; \
|
||||
fi; \
|
||||
done; \
|
||||
:
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,700 +0,0 @@
|
||||
# source this file; set up for tests
|
||||
|
||||
# Copyright (C) 2009-2022 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# Using this file in a test
|
||||
# =========================
|
||||
#
|
||||
# The typical skeleton of a test looks like this:
|
||||
#
|
||||
# #!/bin/sh
|
||||
# . "${srcdir=.}/init.sh"; path_prepend_ .
|
||||
# Execute some commands.
|
||||
# Note that these commands are executed in a subdirectory, therefore you
|
||||
# need to prepend "../" to relative filenames in the build directory.
|
||||
# Note that the "path_prepend_ ." is useful only if the body of your
|
||||
# test invokes programs residing in the initial directory.
|
||||
# For example, if the programs you want to test are in src/, and this test
|
||||
# script is named tests/test-1, then you would use "path_prepend_ ../src",
|
||||
# or perhaps export PATH='$(abs_top_builddir)/src$(PATH_SEPARATOR)'"$$PATH"
|
||||
# to all tests via automake's TESTS_ENVIRONMENT.
|
||||
# Set the exit code 0 for success, 77 for skipped, or 1 or other for failure.
|
||||
# Use the skip_ and fail_ functions to print a diagnostic and then exit
|
||||
# with the corresponding exit code.
|
||||
# Exit $?
|
||||
|
||||
# Executing a test that uses this file
|
||||
# ====================================
|
||||
#
|
||||
# Running a single test:
|
||||
# $ make check TESTS=test-foo.sh
|
||||
#
|
||||
# Running a single test, with verbose output:
|
||||
# $ make check TESTS=test-foo.sh VERBOSE=yes
|
||||
#
|
||||
# Running a single test, keeping the temporary directory:
|
||||
# $ make check TESTS=test-foo.sh KEEP=yes
|
||||
#
|
||||
# Running a single test, with single-stepping:
|
||||
# 1. Go into a sub-shell:
|
||||
# $ bash
|
||||
# 2. Set relevant environment variables from TESTS_ENVIRONMENT in the
|
||||
# Makefile:
|
||||
# $ export srcdir=../../tests # this is an example
|
||||
# 3. Execute the commands from the test, copy&pasting them one by one:
|
||||
# $ . "$srcdir/init.sh"; path_prepend_ .
|
||||
# ...
|
||||
# 4. Finally
|
||||
# $ exit
|
||||
|
||||
# =============================================================================
|
||||
# Elementary diagnostics
|
||||
|
||||
ME_=`expr "./$0" : '.*/\(.*\)$'`
|
||||
|
||||
# Prepare PATH_SEPARATOR.
|
||||
# The user is always right.
|
||||
if test "${PATH_SEPARATOR+set}" != set; then
|
||||
# Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
|
||||
# contains only /bin. Note that ksh looks also at the FPATH variable,
|
||||
# so we have to set that as well for the test.
|
||||
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
|
||||
|
||||
# We use a trap below for cleanup. This requires us to go through
|
||||
# hoops to get the right exit status transported through the handler.
|
||||
# So use 'Exit STATUS' instead of 'exit STATUS' inside of the tests.
|
||||
# Turn off errexit here so that we don't trip the bug with OSF1/Tru64
|
||||
# sh inside this function.
|
||||
Exit () { set +e; (exit $1); exit $1; }
|
||||
|
||||
# Print warnings (e.g., about skipped and failed tests) to this file number.
|
||||
# Override by defining to say, 9, in init.cfg, and putting say,
|
||||
# export ...ENVVAR_SETTINGS...; $(SHELL) 9>&2
|
||||
# in the definition of TESTS_ENVIRONMENT in your tests/Makefile.am file.
|
||||
# This is useful when using automake's parallel tests mode, to print
|
||||
# the reason for skip/failure to console, rather than to the .log files.
|
||||
: ${stderr_fileno_=2}
|
||||
|
||||
# Note that correct expansion of "$*" depends on IFS starting with ' '.
|
||||
# Always write the full diagnostic to stderr.
|
||||
# When stderr_fileno_ is not 2, also emit the first line of the
|
||||
# diagnostic to that file descriptor.
|
||||
warn_ ()
|
||||
{
|
||||
# If IFS does not start with ' ', set it and emit the warning in a subshell.
|
||||
case $IFS in
|
||||
' '*) printf '%s\n' "$*" >&2
|
||||
test $stderr_fileno_ = 2 \
|
||||
|| { printf '%s\n' "$*" | sed 1q >&$stderr_fileno_ ; } ;;
|
||||
*) (IFS=' '; warn_ "$@");;
|
||||
esac
|
||||
}
|
||||
fail_ () { warn_ "$ME_: failed test: $@"; Exit 1; }
|
||||
skip_ () { warn_ "$ME_: skipped test: $@"; Exit 77; }
|
||||
fatal_ () { warn_ "$ME_: hard error: $@"; Exit 99; }
|
||||
framework_failure_ () { warn_ "$ME_: set-up failure: $@"; Exit 99; }
|
||||
|
||||
# =============================================================================
|
||||
# Ensure the shell supports modern syntax.
|
||||
|
||||
# Sanitize this shell to POSIX mode, if possible.
|
||||
DUALCASE=1; export DUALCASE
|
||||
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
|
||||
emulate sh
|
||||
NULLCMD=:
|
||||
alias -g '${1+"$@"}'='"$@"'
|
||||
setopt NO_GLOB_SUBST
|
||||
else
|
||||
case `(set -o) 2>/dev/null` in
|
||||
*posix*) set -o posix ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# We require $(...) support unconditionally.
|
||||
# We require that the printf built-in work correctly regarding octal escapes;
|
||||
# this eliminates /bin/sh on AIX 7.2.
|
||||
# We require non-surprising "local" semantics (this eliminates dash).
|
||||
# This takes the admittedly draconian step of eliminating dash, because the
|
||||
# assignment tab=$(printf '\t') works fine, yet preceding it with "local "
|
||||
# transforms it into an assignment that sets the variable to the empty string.
|
||||
# That is too counter-intuitive, and can lead to subtle run-time malfunction.
|
||||
# The example below is less subtle in that with dash, it evokes the run-time
|
||||
# exception "dash: 1: local: 1: bad variable name".
|
||||
# We require a few additional shell features only when $EXEEXT is nonempty,
|
||||
# in order to support automatic $EXEEXT emulation:
|
||||
# - hyphen-containing alias names
|
||||
# - we prefer to use ${var#...} substitution, rather than having
|
||||
# to work around lack of support for that feature.
|
||||
# The following code attempts to find a shell with support for these features.
|
||||
# If the current shell passes the test, we're done. Otherwise, test other
|
||||
# shells until we find one that passes. If one is found, re-exec it.
|
||||
# If no acceptable shell is found, skip the current test.
|
||||
#
|
||||
# The "...set -x; P=1 true 2>err..." test is to disqualify any shell that
|
||||
# emits "P=1" into err, as /bin/sh from SunOS 5.11 and OpenBSD 4.7 do.
|
||||
#
|
||||
# Use "9" to indicate success (rather than 0), in case some shell acts
|
||||
# like Solaris 10's /bin/sh but exits successfully instead of with status 2.
|
||||
|
||||
# Eval this code in a subshell to determine a shell's suitability.
|
||||
# 10 - passes all tests; ok to use
|
||||
# 9 - ok, but enabling "set -x" corrupts app stderr; prefer higher score
|
||||
# ? - not ok
|
||||
gl_shell_test_script_='
|
||||
test $(echo y) = y || exit 1
|
||||
LC_ALL=en_US.UTF-8 printf "\\351" 2>/dev/null \
|
||||
| LC_ALL=C tr "\\351" x | LC_ALL=C grep "^x$" > /dev/null \
|
||||
|| exit 1
|
||||
printf "\\351" 2>/dev/null \
|
||||
| LC_ALL=C tr "\\351" x | LC_ALL=C grep "^x$" > /dev/null \
|
||||
|| exit 1
|
||||
f_local_() { local v=1; }; f_local_ || exit 1
|
||||
f_dash_local_fail_() { local t=$(printf " 1"); }; f_dash_local_fail_
|
||||
score_=10
|
||||
if test "$VERBOSE" = yes; then
|
||||
test -n "$( (exec 3>&1; set -x; P=1 true 2>&3) 2> /dev/null)" && score_=9
|
||||
fi
|
||||
test -z "$EXEEXT" && exit $score_
|
||||
shopt -s expand_aliases
|
||||
alias a-b="echo zoo"
|
||||
v=abx
|
||||
test ${v%x} = ab \
|
||||
&& test ${v#a} = bx \
|
||||
&& test $(a-b) = zoo \
|
||||
&& exit $score_
|
||||
'
|
||||
|
||||
if test "x$1" = "x--no-reexec"; then
|
||||
shift
|
||||
else
|
||||
# Assume a working shell. Export to subshells (setup_ needs this).
|
||||
gl_set_x_corrupts_stderr_=false
|
||||
export gl_set_x_corrupts_stderr_
|
||||
|
||||
# Record the first marginally acceptable shell.
|
||||
marginal_=
|
||||
|
||||
# Search for a shell that meets our requirements.
|
||||
for re_shell_ in __current__ "${CONFIG_SHELL:-no_shell}" \
|
||||
/bin/sh bash dash zsh pdksh fail
|
||||
do
|
||||
test "$re_shell_" = no_shell && continue
|
||||
|
||||
# If we've made it all the way to the sentinel, "fail" without
|
||||
# finding even a marginal shell, skip this test.
|
||||
if test "$re_shell_" = fail; then
|
||||
test -z "$marginal_" && skip_ failed to find an adequate shell
|
||||
re_shell_=$marginal_
|
||||
break
|
||||
fi
|
||||
|
||||
# When testing the current shell, simply "eval" the test code.
|
||||
# Otherwise, run it via $re_shell_ -c ...
|
||||
if test "$re_shell_" = __current__; then
|
||||
# 'eval'ing this code makes Solaris 10's /bin/sh exit with
|
||||
# $? set to 2. It does not evaluate any of the code after the
|
||||
# "unexpected" first '('. Thus, we must run it in a subshell.
|
||||
( eval "$gl_shell_test_script_" ) > /dev/null 2>&1
|
||||
else
|
||||
"$re_shell_" -c "$gl_shell_test_script_" 2>/dev/null
|
||||
fi
|
||||
|
||||
st_=$?
|
||||
|
||||
# $re_shell_ works just fine. Use it.
|
||||
if test $st_ = 10; then
|
||||
gl_set_x_corrupts_stderr_=false
|
||||
break
|
||||
fi
|
||||
|
||||
# If this is our first marginally acceptable shell, remember it.
|
||||
if test "$st_:$marginal_" = 9: ; then
|
||||
marginal_="$re_shell_"
|
||||
gl_set_x_corrupts_stderr_=true
|
||||
fi
|
||||
done
|
||||
|
||||
if test "$re_shell_" != __current__; then
|
||||
# Found a usable shell. Preserve -v and -x.
|
||||
case $- in
|
||||
*v*x* | *x*v*) opts_=-vx ;;
|
||||
*v*) opts_=-v ;;
|
||||
*x*) opts_=-x ;;
|
||||
*) opts_= ;;
|
||||
esac
|
||||
re_shell=$re_shell_
|
||||
export re_shell
|
||||
exec "$re_shell_" $opts_ "$0" --no-reexec "$@"
|
||||
echo "$ME_: exec failed" 1>&2
|
||||
exit 127
|
||||
fi
|
||||
fi
|
||||
|
||||
# =============================================================================
|
||||
# Ensure the shell behaves reasonably.
|
||||
|
||||
# If this is bash, turn off all aliases.
|
||||
test -n "$BASH_VERSION" && unalias -a
|
||||
|
||||
# Note that when supporting $EXEEXT (transparently mapping from PROG_NAME to
|
||||
# PROG_NAME.exe), we want to support hyphen-containing names like test-acos.
|
||||
# That is part of the shell-selection test above. Why use aliases rather
|
||||
# than functions? Because support for hyphen-containing aliases is more
|
||||
# widespread than that for hyphen-containing function names.
|
||||
test -n "$EXEEXT" && test -n "$BASH_VERSION" && shopt -s expand_aliases
|
||||
|
||||
# =============================================================================
|
||||
# Creating a temporary directory (needed by the core test framework)
|
||||
|
||||
# Create a temporary directory, much like mktemp -d does.
|
||||
# Written by Jim Meyering.
|
||||
#
|
||||
# Usage: mktempd_ /tmp phoey.XXXXXXXXXX
|
||||
#
|
||||
# First, try to use the mktemp program.
|
||||
# Failing that, we'll roll our own mktemp-like function:
|
||||
# - try to get random bytes from /dev/urandom
|
||||
# - failing that, generate output from a combination of quickly-varying
|
||||
# sources and gzip. Ignore non-varying gzip header, and extract
|
||||
# "random" bits from there.
|
||||
# - given those bits, map to file-name bytes using tr, and try to create
|
||||
# the desired directory.
|
||||
# - make only $MAX_TRIES_ attempts
|
||||
|
||||
# Helper function. Print $N pseudo-random bytes from a-zA-Z0-9.
|
||||
rand_bytes_ ()
|
||||
{
|
||||
n_=$1
|
||||
|
||||
# Maybe try openssl rand -base64 $n_prime_|tr '+/=\012' abcd first?
|
||||
# But if they have openssl, they probably have mktemp, too.
|
||||
|
||||
chars_=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
|
||||
dev_rand_=/dev/urandom
|
||||
if test -r "$dev_rand_"; then
|
||||
# Note: 256-length($chars_) == 194; 3 copies of $chars_ is 186 + 8 = 194.
|
||||
dd ibs=$n_ count=1 if=$dev_rand_ 2>/dev/null \
|
||||
| LC_ALL=C tr -c $chars_ 01234567$chars_$chars_$chars_
|
||||
return
|
||||
fi
|
||||
|
||||
n_plus_50_=`expr $n_ + 50`
|
||||
cmds_='date; date +%N; free; who -a; w; ps auxww; ps -ef'
|
||||
data_=` (eval "$cmds_") 2>&1 | gzip `
|
||||
|
||||
# Ensure that $data_ has length at least 50+$n_
|
||||
while :; do
|
||||
len_=`echo "$data_"|wc -c`
|
||||
test $n_plus_50_ -le $len_ && break;
|
||||
data_=` (echo "$data_"; eval "$cmds_") 2>&1 | gzip `
|
||||
done
|
||||
|
||||
echo "$data_" \
|
||||
| dd bs=1 skip=50 count=$n_ 2>/dev/null \
|
||||
| LC_ALL=C tr -c $chars_ 01234567$chars_$chars_$chars_
|
||||
}
|
||||
|
||||
mktempd_ ()
|
||||
{
|
||||
case $# in
|
||||
2);;
|
||||
*) fail_ "Usage: mktempd_ DIR TEMPLATE";;
|
||||
esac
|
||||
|
||||
destdir_=$1
|
||||
template_=$2
|
||||
|
||||
MAX_TRIES_=4
|
||||
|
||||
# Disallow any trailing slash on specified destdir:
|
||||
# it would subvert the post-mktemp "case"-based destdir test.
|
||||
case $destdir_ in
|
||||
/ | //) destdir_slash_=$destdir;;
|
||||
*/) fail_ "invalid destination dir: remove trailing slash(es)";;
|
||||
*) destdir_slash_=$destdir_/;;
|
||||
esac
|
||||
|
||||
case $template_ in
|
||||
*XXXX) ;;
|
||||
*) fail_ \
|
||||
"invalid template: $template_ (must have a suffix of at least 4 X's)";;
|
||||
esac
|
||||
|
||||
# First, try to use mktemp.
|
||||
d=`unset TMPDIR; { mktemp -d -t -p "$destdir_" "$template_"; } 2>/dev/null` &&
|
||||
|
||||
# The resulting name must be in the specified directory.
|
||||
case $d in "$destdir_slash_"*) :;; *) false;; esac &&
|
||||
|
||||
# It must have created the directory.
|
||||
test -d "$d" &&
|
||||
|
||||
# It must have 0700 permissions. Handle sticky "S" bits.
|
||||
perms=`ls -dgo "$d" 2>/dev/null` &&
|
||||
case $perms in drwx--[-S]---*) :;; *) false;; esac && {
|
||||
echo "$d"
|
||||
return
|
||||
}
|
||||
|
||||
# If we reach this point, we'll have to create a directory manually.
|
||||
|
||||
# Get a copy of the template without its suffix of X's.
|
||||
base_template_=`echo "$template_"|sed 's/XX*$//'`
|
||||
|
||||
# Calculate how many X's we've just removed.
|
||||
template_length_=`echo "$template_" | wc -c`
|
||||
nx_=`echo "$base_template_" | wc -c`
|
||||
nx_=`expr $template_length_ - $nx_`
|
||||
|
||||
err_=
|
||||
i_=1
|
||||
while :; do
|
||||
X_=`rand_bytes_ $nx_`
|
||||
candidate_dir_="$destdir_slash_$base_template_$X_"
|
||||
err_=`mkdir -m 0700 "$candidate_dir_" 2>&1` \
|
||||
&& { echo "$candidate_dir_"; return; }
|
||||
test $MAX_TRIES_ -le $i_ && break;
|
||||
i_=`expr $i_ + 1`
|
||||
done
|
||||
fail_ "$err_"
|
||||
}
|
||||
|
||||
# =============================================================================
|
||||
# Core test framework
|
||||
|
||||
# An arbitrary prefix to help distinguish test directories.
|
||||
testdir_prefix_ () { printf gt; }
|
||||
|
||||
# Set up the environment for the test to run in.
|
||||
setup_ ()
|
||||
{
|
||||
if test "$VERBOSE" = yes; then
|
||||
# Test whether set -x may cause the selected shell to corrupt an
|
||||
# application's stderr. Many do, including zsh-4.3.10 and the /bin/sh
|
||||
# from SunOS 5.11, OpenBSD 4.7 and Irix 6.5.
|
||||
# If enabling verbose output this way would cause trouble, simply
|
||||
# issue a warning and refrain.
|
||||
if $gl_set_x_corrupts_stderr_; then
|
||||
warn_ "using SHELL=$SHELL with 'set -x' corrupts stderr"
|
||||
else
|
||||
set -x
|
||||
fi
|
||||
fi
|
||||
|
||||
initial_cwd_=$PWD
|
||||
|
||||
# Create and enter the temporary directory.
|
||||
pfx_=`testdir_prefix_`
|
||||
test_dir_=`mktempd_ "$initial_cwd_" "$pfx_-$ME_.XXXX"` \
|
||||
|| fail_ "failed to create temporary directory in $initial_cwd_"
|
||||
cd "$test_dir_" || fail_ "failed to cd to temporary directory"
|
||||
# Set variables srcdir, builddir, for the convenience of the test.
|
||||
case $srcdir in
|
||||
/* | ?:*) ;;
|
||||
*) srcdir="../$srcdir" ;;
|
||||
esac
|
||||
builddir=".."
|
||||
export srcdir builddir
|
||||
|
||||
# As autoconf-generated configure scripts do, ensure that IFS
|
||||
# is defined initially, so that saving and restoring $IFS works.
|
||||
gl_init_sh_nl_='
|
||||
'
|
||||
IFS=" "" $gl_init_sh_nl_"
|
||||
|
||||
# This trap statement, along with a trap on 0 below, ensure that the
|
||||
# temporary directory, $test_dir_, is removed upon exit as well as
|
||||
# upon receipt of any of the listed signals.
|
||||
for sig_ in 1 2 3 13 15; do
|
||||
eval "trap 'Exit $(expr $sig_ + 128)' $sig_"
|
||||
done
|
||||
|
||||
# Remove relative and non-accessible directories from PATH, including '.'
|
||||
# and Zero-length entries.
|
||||
saved_IFS="$IFS"
|
||||
IFS=:
|
||||
new_PATH=
|
||||
sep_=
|
||||
for dir in $PATH; do
|
||||
case "$dir" in
|
||||
/*) test -d "$dir/." || continue
|
||||
new_PATH="${new_PATH}${sep_}${dir}"
|
||||
sep_=':';;
|
||||
esac
|
||||
done
|
||||
IFS="$saved_IFS"
|
||||
PATH="$new_PATH"
|
||||
export PATH
|
||||
}
|
||||
|
||||
# This is a stub function that is run upon trap (upon regular exit and
|
||||
# interrupt). Override it with a per-test function, e.g., to unmount
|
||||
# a partition, or to undo any other global state changes.
|
||||
cleanup_ () { :; }
|
||||
|
||||
# Run the user-overridable cleanup_ function, remove the temporary
|
||||
# directory and exit with the incoming value of $?.
|
||||
remove_tmp_ ()
|
||||
{
|
||||
__st=$?
|
||||
cleanup_
|
||||
if test "$KEEP" = yes; then
|
||||
echo "Not removing temporary directory $test_dir_"
|
||||
else
|
||||
# cd out of the directory we're about to remove
|
||||
cd "$initial_cwd_" || cd / || cd /tmp
|
||||
chmod -R u+rwx "$test_dir_"
|
||||
# If removal fails and exit status was to be 0, then change it to 1.
|
||||
rm -rf "$test_dir_" || { test $__st = 0 && __st=1; }
|
||||
fi
|
||||
exit $__st
|
||||
}
|
||||
|
||||
# =============================================================================
|
||||
# Prepending directories to PATH
|
||||
|
||||
# Given a directory name, DIR, if every entry in it that matches *.exe
|
||||
# contains only the specified bytes (see the case stmt below), then print
|
||||
# a space-separated list of those names and return 0. Otherwise, don't
|
||||
# print anything and return 1. Naming constraints apply also to DIR.
|
||||
find_exe_basenames_ ()
|
||||
{
|
||||
feb_dir_=$1
|
||||
feb_fail_=0
|
||||
feb_result_=
|
||||
feb_sp_=
|
||||
for feb_file_ in $feb_dir_/*.exe; do
|
||||
# If there was no *.exe file, or there existed a file named "*.exe" that
|
||||
# was deleted between the above glob expansion and the existence test
|
||||
# below, just skip it.
|
||||
test "x$feb_file_" = "x$feb_dir_/*.exe" && test ! -f "$feb_file_" \
|
||||
&& continue
|
||||
# Exempt [.exe, since we can't create a function by that name, yet
|
||||
# we can't invoke [ by PATH search anyways due to shell builtins.
|
||||
test "x$feb_file_" = "x$feb_dir_/[.exe" && continue
|
||||
case $feb_file_ in
|
||||
*[!-a-zA-Z/0-9_.+]*) feb_fail_=1; break;;
|
||||
*) # Remove leading file name components as well as the .exe suffix.
|
||||
feb_file_=${feb_file_##*/}
|
||||
feb_file_=${feb_file_%.exe}
|
||||
feb_result_="$feb_result_$feb_sp_$feb_file_";;
|
||||
esac
|
||||
feb_sp_=' '
|
||||
done
|
||||
test $feb_fail_ = 0 && printf %s "$feb_result_"
|
||||
return $feb_fail_
|
||||
}
|
||||
|
||||
# Consider the files in directory, $1.
|
||||
# For each file name of the form PROG.exe, create an alias named
|
||||
# PROG that simply invokes PROG.exe, then return 0. If any selected
|
||||
# file name or the directory name, $1, contains an unexpected character,
|
||||
# define no alias and return 1.
|
||||
create_exe_shims_ ()
|
||||
{
|
||||
case $EXEEXT in
|
||||
'') return 0 ;;
|
||||
.exe) ;;
|
||||
*) echo "$0: unexpected \$EXEEXT value: $EXEEXT" 1>&2; return 1 ;;
|
||||
esac
|
||||
|
||||
base_names_=`find_exe_basenames_ $1` \
|
||||
|| { echo "$0 (exe_shim): skipping directory: $1" 1>&2; return 0; }
|
||||
|
||||
if test -n "$base_names_"; then
|
||||
for base_ in $base_names_; do
|
||||
alias "$base_"="$base_$EXEEXT"
|
||||
done
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# Use this function to prepend to PATH an absolute name for each
|
||||
# specified, possibly-$initial_cwd_-relative, directory.
|
||||
path_prepend_ ()
|
||||
{
|
||||
while test $# != 0; do
|
||||
path_dir_=$1
|
||||
case $path_dir_ in
|
||||
'') fail_ "invalid path dir: '$1'";;
|
||||
/* | ?:*) abs_path_dir_=$path_dir_;;
|
||||
*) abs_path_dir_=$initial_cwd_/$path_dir_;;
|
||||
esac
|
||||
case $abs_path_dir_ in
|
||||
*$PATH_SEPARATOR*) fail_ "invalid path dir: '$abs_path_dir_'";;
|
||||
esac
|
||||
PATH="$abs_path_dir_$PATH_SEPARATOR$PATH"
|
||||
|
||||
# Create an alias, FOO, for each FOO.exe in this directory.
|
||||
create_exe_shims_ "$abs_path_dir_" \
|
||||
|| fail_ "something failed (above): $abs_path_dir_"
|
||||
shift
|
||||
done
|
||||
export PATH
|
||||
}
|
||||
|
||||
# =============================================================================
|
||||
# Convenience environment variables for the tests
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
# Enable glibc's malloc-perturbing option.
|
||||
# This is useful for exposing code that depends on the fact that
|
||||
# malloc-related functions often return memory that is mostly zeroed.
|
||||
# If you have the time and cycles, use valgrind to do an even better job.
|
||||
: ${MALLOC_PERTURB_=87}
|
||||
export MALLOC_PERTURB_
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
# The interpreter for Bourne-shell scripts.
|
||||
# No special standards compatibility requirements.
|
||||
# Some environments, such as Android, don't have /bin/sh.
|
||||
if test -f /bin/sh$EXEEXT; then
|
||||
BOURNE_SHELL=/bin/sh
|
||||
else
|
||||
BOURNE_SHELL=sh
|
||||
fi
|
||||
|
||||
# =============================================================================
|
||||
# Convenience functions for the tests
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Return value checking
|
||||
|
||||
# This is used to simplify checking of the return value
|
||||
# which is useful when ensuring a command fails as desired.
|
||||
# I.e., just doing `command ... &&fail=1` will not catch
|
||||
# a segfault in command for example. With this helper you
|
||||
# instead check an explicit exit code like
|
||||
# returns_ 1 command ... || fail
|
||||
returns_ () {
|
||||
# Disable tracing so it doesn't interfere with stderr of the wrapped command
|
||||
{ set +x; } 2>/dev/null
|
||||
|
||||
local exp_exit="$1"
|
||||
shift
|
||||
"$@"
|
||||
test $? -eq $exp_exit && ret_=0 || ret_=1
|
||||
|
||||
if test "$VERBOSE" = yes && test "$gl_set_x_corrupts_stderr_" = false; then
|
||||
set -x
|
||||
fi
|
||||
{ return $ret_; } 2>/dev/null
|
||||
}
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Text file comparison
|
||||
|
||||
# Emit a header similar to that from diff -u; Print the simulated "diff"
|
||||
# command so that the order of arguments is clear. Don't bother with @@ lines.
|
||||
emit_diff_u_header_ ()
|
||||
{
|
||||
printf '%s\n' "diff -u $*" \
|
||||
"--- $1 1970-01-01" \
|
||||
"+++ $2 1970-01-01"
|
||||
}
|
||||
|
||||
# Arrange not to let diff or cmp operate on /dev/null,
|
||||
# since on some systems (at least OSF/1 5.1), that doesn't work.
|
||||
# When there are not two arguments, or no argument is /dev/null, return 2.
|
||||
# When one argument is /dev/null and the other is not empty,
|
||||
# cat the nonempty file to stderr and return 1.
|
||||
# Otherwise, return 0.
|
||||
compare_dev_null_ ()
|
||||
{
|
||||
test $# = 2 || return 2
|
||||
|
||||
if test "x$1" = x/dev/null; then
|
||||
test -s "$2" || return 0
|
||||
emit_diff_u_header_ "$@"; sed 's/^/+/' "$2"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if test "x$2" = x/dev/null; then
|
||||
test -s "$1" || return 0
|
||||
emit_diff_u_header_ "$@"; sed 's/^/-/' "$1"
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 2
|
||||
}
|
||||
|
||||
for diff_opt_ in -u -U3 -c '' no; do
|
||||
test "$diff_opt_" != no &&
|
||||
diff_out_=`exec 2>/dev/null; diff $diff_opt_ "$0" "$0" < /dev/null` &&
|
||||
break
|
||||
done
|
||||
if test "$diff_opt_" != no; then
|
||||
if test -z "$diff_out_"; then
|
||||
compare_ () { diff $diff_opt_ "$@"; }
|
||||
else
|
||||
compare_ ()
|
||||
{
|
||||
# If no differences were found, AIX and HP-UX 'diff' produce output
|
||||
# like "No differences encountered". Hide this output.
|
||||
diff $diff_opt_ "$@" > diff.out
|
||||
diff_status_=$?
|
||||
test $diff_status_ -eq 0 || cat diff.out || diff_status_=2
|
||||
rm -f diff.out || diff_status_=2
|
||||
return $diff_status_
|
||||
}
|
||||
fi
|
||||
elif cmp -s /dev/null /dev/null 2>/dev/null; then
|
||||
compare_ () { cmp -s "$@"; }
|
||||
else
|
||||
compare_ () { cmp "$@"; }
|
||||
fi
|
||||
|
||||
# Usage: compare EXPECTED ACTUAL
|
||||
#
|
||||
# Given compare_dev_null_'s preprocessing, defer to compare_ if 2 or more.
|
||||
# Otherwise, propagate $? to caller: any diffs have already been printed.
|
||||
compare ()
|
||||
{
|
||||
# This looks like it can be factored to use a simple "case $?"
|
||||
# after unchecked compare_dev_null_ invocation, but that would
|
||||
# fail in a "set -e" environment.
|
||||
if compare_dev_null_ "$@"; then
|
||||
return 0
|
||||
else
|
||||
case $? in
|
||||
1) return 1;;
|
||||
*) compare_ "$@";;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
# If you want to override the testdir_prefix_ function,
|
||||
# or to add more utility functions, use this file.
|
||||
test -f "$srcdir/init.cfg" \
|
||||
&& . "$srcdir/init.cfg"
|
||||
|
||||
# =============================================================================
|
||||
# Set up the environment for the test to run in.
|
||||
|
||||
setup_ "$@"
|
||||
# This trap is here, rather than in the setup_ function, because some
|
||||
# shells run the exit trap at shell function exit, rather than script exit.
|
||||
trap remove_tmp_ 0
|
||||
@ -1,103 +0,0 @@
|
||||
#! /bin/sh
|
||||
|
||||
# Unit test helper.
|
||||
|
||||
# This is free software. There is NO warranty; not even for
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
# Copyright (C) 2015-2019, 2021 Bootstrap Authors
|
||||
#
|
||||
# This file is dual licensed under the terms of the MIT license
|
||||
# <https://opensource.org/license/MIT>, and GPL version 2 or later
|
||||
# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
|
||||
# these licenses when using or redistributing this software or any of
|
||||
# the files within it. See the URLs above, or the file `LICENSE`
|
||||
# included in the Bootstrap distribution for the full license texts.
|
||||
|
||||
# Please report bugs or propose patches to:
|
||||
# <https://github.com/gnulib-modules/bootstrap/issues>
|
||||
|
||||
|
||||
# This shell snippet (when sourced) tries to find as many /bin/sh compatible
|
||||
# shells as possible on tested box -- and then re-executes the calling script
|
||||
# in all of them. At the end, the default shell (/bin/sh usually) is also
|
||||
# tested.
|
||||
#
|
||||
# To write compatible test-case, you usually need only those lines:
|
||||
#
|
||||
# #! /bin/sh
|
||||
#
|
||||
# all_shells_script=$0
|
||||
# . "$abs_srcdir/test-all-shells.sh"
|
||||
#
|
||||
# your_check && all_shells_error "failed your_check"
|
||||
#
|
||||
# $all_shells_exit_cmd
|
||||
|
||||
|
||||
# List of shells we try to check in.
|
||||
: ${GL_ALL_SHELLS='ash bash dash ksh ksh88 mksh zsh busybox'}
|
||||
|
||||
# List of directories to search for the shell interpreter.
|
||||
: ${GL_ALL_SHELLS_DIRS='/bin /sbin'}
|
||||
|
||||
# List of shell emulations to test with BusyBox.
|
||||
: ${GL_ALL_SHELLS_BBE='sh ash'}
|
||||
|
||||
. "$abs_aux_dir"/funclib.sh || exit 1
|
||||
|
||||
all_shells_exit_cmd=:
|
||||
|
||||
: ${all_shells_script=false}
|
||||
|
||||
|
||||
all_shells_error ()
|
||||
{
|
||||
$ECHO "error: $*" >&2
|
||||
all_shells_exit_cmd=false
|
||||
}
|
||||
|
||||
|
||||
__notify_shell ()
|
||||
{
|
||||
$ECHO "== running in '$*' ==" >&2
|
||||
}
|
||||
|
||||
|
||||
__reexec_in_all_shells ()
|
||||
{
|
||||
for _G_dir in $GL_ALL_SHELLS_DIRS
|
||||
do
|
||||
for _G_shell in $GL_ALL_SHELLS
|
||||
do
|
||||
_G_abs_shell=$_G_dir/$_G_shell
|
||||
test -f "$_G_abs_shell" || continue
|
||||
|
||||
case $_G_abs_shell in
|
||||
*busybox)
|
||||
for _G_bbe in $GL_ALL_SHELLS_BBE
|
||||
do
|
||||
_G_full_bb="$_G_abs_shell $_G_bbe"
|
||||
__notify_shell "$_G_full_bb"
|
||||
__GL_ALL_SHELLS_SHELL="$_G_full_bb" \
|
||||
"$_G_abs_shell" "$_G_bbe" "$all_shells_script" ${1+"$@"} \
|
||||
|| all_shells_error "can't run in $_G_bbe"
|
||||
done
|
||||
;;
|
||||
*)
|
||||
__notify_shell "$_G_abs_shell"
|
||||
__GL_ALL_SHELLS_SHELL="$_G_abs_shell" \
|
||||
"$_G_abs_shell" "$all_shells_script" ${1+"$@"} \
|
||||
|| all_shells_error "can't run in $_G_abs_shell"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
test x = "x$__GL_ALL_SHELLS_SHELL" \
|
||||
&& __reexec_in_all_shells ${1+"$@"} \
|
||||
&& __notify_shell "default shell"
|
||||
|
||||
:
|
||||
@ -1,183 +0,0 @@
|
||||
#! /bin/sh
|
||||
|
||||
# Unit tests for funclib.sh
|
||||
|
||||
# This is free software. There is NO warranty; not even for
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
# Copyright (C) 2015-2019, 2021 Bootstrap Authors
|
||||
#
|
||||
# This file is dual licensed under the terms of the MIT license
|
||||
# <https://opensource.org/license/MIT>, and GPL version 2 or later
|
||||
# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
|
||||
# these licenses when using or redistributing this software or any of
|
||||
# the files within it. See the URLs above, or the file `LICENSE`
|
||||
# included in the Bootstrap distribution for the full license texts.
|
||||
|
||||
# Please report bugs or propose patches to:
|
||||
# <https://github.com/gnulib-modules/bootstrap/issues>
|
||||
|
||||
|
||||
all_shells_script=$0
|
||||
. "$abs_srcdir/test-all-shells.sh" || exit 1
|
||||
|
||||
|
||||
_compare_or_error ()
|
||||
{
|
||||
_G_msg="$1: strings differ:
|
||||
a: $2
|
||||
b: $3"
|
||||
test "$2" = "$3" || all_shells_error "$_G_msg"
|
||||
}
|
||||
|
||||
|
||||
dump_args ()
|
||||
{
|
||||
dump_args_result=
|
||||
_separator=
|
||||
for arg
|
||||
do
|
||||
func_append dump_args_result "$_separator$arg"
|
||||
_separator=' '
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
# test_q_eval DESC ARGs...
|
||||
# ------------------------
|
||||
# Apply 'func_quote eval' on ARGs and eval the result. The eval-ed result must
|
||||
# 100% match the original ARGs.
|
||||
test_q_eval ()
|
||||
{
|
||||
description="$1" ; shift
|
||||
|
||||
dump_args ${1+"$@"}
|
||||
original=$dump_args_result
|
||||
|
||||
$ECHO "~> func_quote eval: $description: $original"
|
||||
|
||||
# Pretty implementation
|
||||
func_quote eval,pretty ${1+"$@"} \
|
||||
|| all_shells_error "can't pretty func_quote args '$*'"
|
||||
eval "set dummy $func_quote_result" ; shift
|
||||
dump_args ${1+"$@"}
|
||||
pretty=$dump_args_result
|
||||
|
||||
# Fast implementation (if available)
|
||||
func_quote eval ${1+"$@"} || all_shells_error "can't fast func_quote args '$*'"
|
||||
eval "set dummy $func_quote_result" ; shift
|
||||
dump_args ${1+"$@"}
|
||||
fast=$dump_args_result
|
||||
|
||||
_compare_or_error "$description (pretty)" "$original" "$pretty"
|
||||
_compare_or_error "$description (fast)" "$original" "$fast"
|
||||
}
|
||||
|
||||
|
||||
# test_q_arg_eval DESC ARG
|
||||
# ------------------------
|
||||
# Apply 'func_quote_arg eval' on ARG and eval the result. Echo-ed result within
|
||||
# eval must match original echo-ed ARG.
|
||||
test_q_arg_eval ()
|
||||
{
|
||||
description=$1
|
||||
original=$2
|
||||
original_echo=`$ECHO "$original"`
|
||||
|
||||
$ECHO "~> func_quote_arg eval: $description: $original_echo"
|
||||
|
||||
func_quote_arg pretty,unquoted "$original" \
|
||||
|| all_shells_error "can't quote_arg: $original"
|
||||
pretty=$func_quote_arg_result
|
||||
pretty_unquoted=$func_quote_arg_unquoted_result
|
||||
pretty_echo=`eval '$ECHO '"$pretty"` \
|
||||
|| all_shells_error "can't eval: $pretty"
|
||||
|
||||
pretty_unquoted_echo=`eval '$ECHO '"\"$pretty_unquoted\""` \
|
||||
|| all_shells_error "can't eval: $pretty"
|
||||
|
||||
# Fast implementation.
|
||||
func_quote_arg eval "$original"
|
||||
fast=$func_quote_arg_result
|
||||
fast_echo=`eval '$ECHO '"$fast"` || all_shells_error "can't eval: $pretty"
|
||||
|
||||
_compare_or_error "$description (pretty)" \
|
||||
"$original_echo" "$pretty_echo"
|
||||
_compare_or_error "$description (pretty_unquoted)" \
|
||||
"$original_echo" "$pretty_unquoted_echo"
|
||||
_compare_or_error "$description (fast)" \
|
||||
"$original_echo" "$fast_echo"
|
||||
}
|
||||
|
||||
|
||||
# test_q_expand DESC EXP_RESULT ARG
|
||||
# ---------------------------------
|
||||
# Test that 'func_quote expand' works fine --> all shell special characters are
|
||||
# quoted except '$' -- while all variables are expanded.
|
||||
test_q_expand ()
|
||||
{
|
||||
description=$1 ; shift
|
||||
exp_result=$1 ; shift
|
||||
|
||||
dump_args ${1+"$@"}
|
||||
$ECHO "~> func_quote expand: $description: $dump_args_result"
|
||||
|
||||
func_quote expand ${1+"$@"}
|
||||
eval "set dummy $func_quote_result" ; shift
|
||||
dump_args ${1+"$@"}
|
||||
|
||||
_compare_or_error "$description (expand)" "$exp_result" "$dump_args_result"
|
||||
}
|
||||
|
||||
|
||||
## ============== ##
|
||||
## Start testing! ##
|
||||
## ============== ##
|
||||
|
||||
aaa=aaa ; bbb=bbb ; ccc=ccc ; ddd=ddd
|
||||
|
||||
# Needed for later testing of globbing.
|
||||
touch fltestA fltestB
|
||||
|
||||
test_q_eval basic a b c
|
||||
# TODO: Intentionally not checking newline here yet, it never worked.
|
||||
test_q_eval spaces 'space space' 'tab tab'
|
||||
test_q_eval empty_arg '' '' ''
|
||||
test_q_eval globs '*' '.*' '[a-zA-Z0-9_]' '?' '~'
|
||||
test_q_eval variables '$aaa' '${bbb}' '"${ccc} $ddd"'
|
||||
test_q_eval exclamation-mark '$!' '!$' '!'
|
||||
test_q_eval tilde '"~"'
|
||||
test_q_eval single-quotes "'a'" "'"'$bbb'"'"
|
||||
test_q_eval shell-vars '$1' '$@' '$*' 'ending$'
|
||||
test_q_eval complicated-cmd grep b '>' /noperm '<' /noperm
|
||||
|
||||
test_q_arg_eval basic a
|
||||
test_q_arg_eval single-quotes "'''"
|
||||
test_q_arg_eval double-quotes '"""'
|
||||
test_q_arg_eval tilde '~'
|
||||
test_q_arg_eval ampersand '&'
|
||||
test_q_arg_eval pipe '|'
|
||||
test_q_arg_eval questionmark 'fltest?'
|
||||
test_q_arg_eval glob-bracket 'fltest[A-Z]'
|
||||
test_q_arg_eval space 'space space'
|
||||
test_q_arg_eval tab 'tab tab'
|
||||
test_q_arg_eval '`command`' '`false command`'
|
||||
test_q_arg_eval '$(command)' '$(false command)'
|
||||
test_q_arg_eval semicolon '; false'
|
||||
test_q_arg_eval vars '$aaa ${bbb} "${ccc} $ddd"'
|
||||
test_q_arg_eval if-then-else 'if false; then false; else false; fi'
|
||||
test_q_arg_eval file-redirect 'echo a > /no-perm 2> /no-perm'
|
||||
test_q_arg_eval case-stmt 'case $empty in "") false;; a) broken ;; esac'
|
||||
test_q_arg_eval comment 'unexistent #'
|
||||
test_q_arg_eval func 'func () { } # syntax error'
|
||||
|
||||
test_q_expand basic 'a b c aaa d' a b c '$aaa' d
|
||||
test_q_expand double-quotes '" " " "bbb"' '"' '" "' '"$bbb"'
|
||||
test_q_expand spaces ' ccc' ' ' ' ' '${ccc}'
|
||||
# Note the *no expected space* here!
|
||||
test_q_expand non-existent '' '$empty' '${empty}'
|
||||
test_q_expand non-existent-2 '"" ""' '"$empty"' '"${empty}"'
|
||||
# TODO: Intentionally not checking '$(cmd)' yet.
|
||||
test_q_expand '`command`' '`aaa bbb`' '`$aaa $empty${bbb}`'
|
||||
|
||||
$all_shells_exit_cmd && rm -rf fltest*
|
||||
@ -1,74 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Unit tests for init.sh
|
||||
# Copyright (C) 2011-2022 Free Software Foundation, Inc.
|
||||
# This file is part of the GNUlib Library.
|
||||
#
|
||||
# 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 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||
|
||||
: ${srcdir=.}
|
||||
. "$srcdir/init.sh"; path_prepend_ .
|
||||
|
||||
fail=0
|
||||
|
||||
test_compare()
|
||||
{
|
||||
touch empty || fail=1
|
||||
echo xyz > in || fail=1
|
||||
|
||||
compare /dev/null /dev/null >out 2>err || fail=1
|
||||
test -s out && fail_ "out not empty: $(cat out)"
|
||||
# "err" should be empty, too, but has "set -x" output when VERBOSE=yes
|
||||
case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac
|
||||
|
||||
compare /dev/null empty >out 2>err || fail=1
|
||||
test -s out && fail_ "out not empty: $(cat out)"
|
||||
case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac
|
||||
|
||||
compare in in >out 2>err || fail=1
|
||||
test -s out && fail_ "out not empty: $(cat out)"
|
||||
case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac
|
||||
|
||||
compare /dev/null in >out 2>err && fail=1
|
||||
cat <<\EOF > exp
|
||||
diff -u /dev/null in
|
||||
--- /dev/null 1970-01-01
|
||||
+++ in 1970-01-01
|
||||
+xyz
|
||||
EOF
|
||||
compare exp out || fail=1
|
||||
case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac
|
||||
|
||||
compare empty in >out 2>err && fail=1
|
||||
# Compare against expected output only if compare is using diff -u.
|
||||
if grep @ out >/dev/null; then
|
||||
# Remove the TAB-date suffix on each --- and +++ line,
|
||||
# for both the expected and the actual output files.
|
||||
# Also remove the @@ line, since Solaris 5.10 and GNU diff formats differ:
|
||||
# -@@ -0,0 +1 @@
|
||||
# +@@ -1,0 +1,1 @@
|
||||
# Also, remove space after leading '+', since AIX 7.1 diff outputs a space.
|
||||
sed 's/ .*//;/^@@/d;s/^+ /+/' out > k && mv k out
|
||||
cat <<\EOF > exp
|
||||
--- empty
|
||||
+++ in
|
||||
+xyz
|
||||
EOF
|
||||
compare exp out || fail=1
|
||||
fi
|
||||
case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac
|
||||
}
|
||||
|
||||
test_compare
|
||||
|
||||
Exit $fail
|
||||
@ -1,200 +0,0 @@
|
||||
#! /bin/sh
|
||||
|
||||
# Unit tests for funclib.sh
|
||||
|
||||
# This is free software. There is NO warranty; not even for
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
# Copyright (C) 2015-2019, 2021 Bootstrap Authors
|
||||
#
|
||||
# This file is dual licensed under the terms of the MIT license
|
||||
# <https://opensource.org/license/MIT>, and GPL version 2 or later
|
||||
# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
|
||||
# these licenses when using or redistributing this software or any of
|
||||
# the files within it. See the URLs above, or the file `LICENSE`
|
||||
# included in the Bootstrap distribution for the full license texts.
|
||||
|
||||
# Please report bugs or propose patches to:
|
||||
# <https://github.com/gnulib-modules/bootstrap/issues>
|
||||
|
||||
. "$abs_aux_dir"/funclib.sh || exit 1
|
||||
. "$abs_aux_dir"/options-parser || exit 1
|
||||
|
||||
set -e
|
||||
|
||||
scriptversion='test-version'
|
||||
|
||||
func_help ()
|
||||
{
|
||||
$ECHO "HELP"
|
||||
exit 0
|
||||
}
|
||||
|
||||
|
||||
# Make sure that setting <func_name>_result has no effect if we return non-zero
|
||||
# return value.
|
||||
test_prep_do_nothing ()
|
||||
{
|
||||
:
|
||||
}
|
||||
func_add_hook func_options_prep test_prep_do_nothing
|
||||
|
||||
|
||||
test_prep_shortcuts ()
|
||||
{
|
||||
debug_on=
|
||||
test x--debug = "x$1" && debug_on=--debug && shift
|
||||
|
||||
case $1 in
|
||||
short|shortc|shortcu|shortcut)
|
||||
shift
|
||||
func_quote eval --test SHORTCUT $debug_on ${1+"$@"}
|
||||
test_prep_shortcuts_result=$func_quote_result
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
}
|
||||
func_add_hook func_options_prep test_prep_shortcuts
|
||||
|
||||
|
||||
test_parse_split_short ()
|
||||
{
|
||||
while test $# -gt 0
|
||||
do
|
||||
_G_opt=$1 ; shift
|
||||
case $_G_opt in
|
||||
-t?*)
|
||||
func_split_short_opt "$_G_opt"
|
||||
set dummy "$func_split_short_opt_name" \
|
||||
"$func_split_short_opt_arg" ${1+"$@"}
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set dummy "$_G_opt" ${1+"$@"} ; shift
|
||||
;;
|
||||
esac
|
||||
break
|
||||
done
|
||||
|
||||
func_quote eval ${1+"$@"}
|
||||
test_parse_split_short_result=$func_quote_result
|
||||
}
|
||||
func_add_hook func_parse_options test_parse_split_short
|
||||
|
||||
|
||||
test_parse_subst_equal_signs ()
|
||||
{
|
||||
_G_opt=$1 ; shift
|
||||
case $_G_opt in
|
||||
--*=*)
|
||||
func_split_equals "$_G_opt"
|
||||
set dummy "$func_split_equals_lhs" \
|
||||
"$func_split_equals_rhs" ${1+"$@"}
|
||||
shift
|
||||
func_quote eval ${1+"$@"}
|
||||
test_parse_subst_equal_signs_result=$func_quote_result
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
}
|
||||
func_add_hook func_parse_options test_parse_subst_equal_signs
|
||||
|
||||
|
||||
test_parse_do_nothing ()
|
||||
{
|
||||
:
|
||||
}
|
||||
func_add_hook func_parse_options test_parse_do_nothing
|
||||
|
||||
|
||||
test_parse_eat_test ()
|
||||
{
|
||||
_t_parse_match=false
|
||||
_G_opt=$1 ; shift
|
||||
case $_G_opt in
|
||||
--test|-t)
|
||||
_t_parse_match=:
|
||||
if test $# = 0; then
|
||||
func_missing_arg $_G_opt
|
||||
else
|
||||
opt_test=$1
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if $_t_parse_match; then
|
||||
func_quote eval ${1+"$@"}
|
||||
test_parse_eat_test_result=$func_quote_result
|
||||
fi
|
||||
}
|
||||
func_add_hook func_parse_options test_parse_eat_test
|
||||
|
||||
|
||||
test_validate_do_nothing ()
|
||||
{
|
||||
:
|
||||
}
|
||||
func_add_hook func_validate_options test_validate_do_nothing
|
||||
|
||||
|
||||
test_validate_eat_sth ()
|
||||
{
|
||||
if test validate_out = "$1"; then
|
||||
shift
|
||||
func_quote eval ${1+"$@"}
|
||||
test_validate_eat_sth_result=$func_quote_result
|
||||
fi
|
||||
}
|
||||
func_add_hook func_validate_options test_validate_eat_sth
|
||||
|
||||
|
||||
unset_test_opt ()
|
||||
{
|
||||
case $# in
|
||||
0)
|
||||
$ECHO UNSET_TEST
|
||||
;;
|
||||
1)
|
||||
$ECHO "ONE_ARG $*"
|
||||
;;
|
||||
2)
|
||||
case $1 in
|
||||
eval)
|
||||
eval "$2"
|
||||
exit $?
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
3)
|
||||
$ECHO THREE_ARGS
|
||||
;;
|
||||
*)
|
||||
$ECHO MORE_ARGS
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
func_options ${1+"$@"}
|
||||
eval set dummy "$func_options_result"; shift
|
||||
|
||||
case ${opt_test-unset} in
|
||||
'')
|
||||
$ECHO "EMPTY_TEST"
|
||||
;;
|
||||
unset)
|
||||
unset_test_opt ${1+"$@"}
|
||||
;;
|
||||
false)
|
||||
$ECHO "FALSE_TEST"
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
$ECHO $opt_test
|
||||
;;
|
||||
esac
|
||||
|
||||
:
|
||||
@ -1,131 +0,0 @@
|
||||
#! /bin/sh
|
||||
|
||||
# Unit tests for option-parser
|
||||
|
||||
# This is free software. There is NO warranty; not even for
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
# Copyright (C) 2015-2019, 2021 Bootstrap Authors
|
||||
#
|
||||
# This file is dual licensed under the terms of the MIT license
|
||||
# <https://opensource.org/license/MIT>, and GPL version 2 or later
|
||||
# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
|
||||
# these licenses when using or redistributing this software or any of
|
||||
# the files within it. See the URLs above, or the file `LICENSE`
|
||||
# included in the Bootstrap distribution for the full license texts.
|
||||
|
||||
# Please report bugs or propose patches to:
|
||||
# <https://github.com/gnulib-modules/bootstrap/issues>
|
||||
|
||||
all_shells_script=$0
|
||||
. "$abs_srcdir/test-all-shells.sh"
|
||||
|
||||
. "$abs_aux_dir"/options-parser || exit 1
|
||||
|
||||
helper="$__GL_ALL_SHELLS_SHELL $abs_srcdir/test-option-parser-helper"
|
||||
|
||||
check_output_inner ()
|
||||
{
|
||||
exp_output=$1 ; shift
|
||||
exp_retval=$1 ; shift
|
||||
|
||||
func_quote pretty ${1+"$@"}
|
||||
$ECHO "[[ output check ]] args: $func_quote_result"
|
||||
|
||||
output=`$helper ${1+"$@"} 2>/dev/null`
|
||||
rc=$?
|
||||
test "$rc" -eq "$exp_retval" \
|
||||
|| all_shells_error "unexpected exit status $rc $exp_retval"
|
||||
|
||||
if test "$exp_output" = "$output"
|
||||
then
|
||||
:
|
||||
else
|
||||
$ECHO "expected:"
|
||||
$ECHO "$exp_output"
|
||||
$ECHO "given:"
|
||||
$ECHO "$output"
|
||||
all_shells_error "unexpected output"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
check_output ()
|
||||
{
|
||||
_co_exp_output=$1 ; shift
|
||||
_co_exp_retval=$1 ; shift
|
||||
check_output_inner "$_co_exp_output" "$_co_exp_retval" ${1+"$@"}
|
||||
check_output_inner "$_co_exp_output" "$_co_exp_retval" --debug ${1+"$@"}
|
||||
}
|
||||
|
||||
|
||||
check_retval ()
|
||||
{
|
||||
exp_retval=$1 ; shift
|
||||
func_quote pretty ${1+"$@"}
|
||||
$ECHO "[[ retval check ]] args: $func_quote_result"
|
||||
$helper ${1+"$@"} >/dev/null 2>/dev/null
|
||||
rc=$?
|
||||
test "$rc" -eq "$exp_retval" \
|
||||
|| all_shells_error "unexpected retval $rc (should be $exp_retval)"
|
||||
}
|
||||
|
||||
|
||||
grep_output ()
|
||||
{
|
||||
grep_for=$1 ; shift
|
||||
exp_retval=$1 ; shift
|
||||
|
||||
func_quote pretty ${1+"$@"}
|
||||
$ECHO "[[ grep for '$grep_for' ]] args: $func_quote_result"
|
||||
|
||||
output=`$helper ${1+"$@"} 2>/dev/null`
|
||||
rc=$?
|
||||
case $output in
|
||||
*$grep_for*) : ;;
|
||||
*) all_shells_error "$grep_for is not in stdout $output" ;;
|
||||
esac
|
||||
|
||||
test "$rc" -eq "$exp_retval" \
|
||||
|| all_shells_error "unexpected retval $rc (should be $exp_retval)"
|
||||
}
|
||||
|
||||
|
||||
check_output HELP 0 --help
|
||||
check_output HELP 0 --test jej --help
|
||||
check_output HELP 0 --test=jej --help
|
||||
check_output HELP 0 --test= --help
|
||||
|
||||
check_output EMPTY_TEST 0 --test=
|
||||
check_output EMPTY_TEST 0 -t ''
|
||||
check_output EMPTY_TEST 0 --test ''
|
||||
check_output FALSE_TEST 1 --test=false
|
||||
check_output FALSE_TEST 1 -tfalse
|
||||
check_output FALSE_TEST 1 -t false
|
||||
check_output UNSET_TEST 0
|
||||
check_output 'ONE_ARG a' 0 a
|
||||
check_output THREE_ARGS 0 a b c
|
||||
check_output MORE_ARGS 0 a b c d
|
||||
|
||||
check_output SHORTCUT 0 short
|
||||
check_output SHORTCUT 0 shortcut
|
||||
check_output HELP 0 short --help
|
||||
|
||||
check_output eval 4 eval 'echo eval ; exit 4'
|
||||
check_output eval 4 validate_out eval 'echo eval ; exit 4'
|
||||
|
||||
# No argument.
|
||||
check_retval 1 --test
|
||||
check_retval 1 --not-existent
|
||||
check_retval 1 short --not-existent
|
||||
|
||||
grep_output test-version 0 --version
|
||||
grep_output test-version 0 --version --whatever
|
||||
grep_output test-version 0 --debug --version
|
||||
|
||||
# TODO: Shouldn't this code be able to parse multiple occurrences of
|
||||
# single option (IOW, hooks should be called in loop..)?
|
||||
# check_output FALSE_TEST 1 short --test false
|
||||
# check_output FALSE_TEST 1 --test a --test false
|
||||
|
||||
$all_shells_exit_cmd
|
||||
@ -1,561 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Test suite for update-copyright.
|
||||
# Copyright (C) 2009-2022 Free Software Foundation, Inc.
|
||||
# This file is part of the GNUlib Library.
|
||||
#
|
||||
# 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 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
diffout=`diff -u /dev/null /dev/null 2>&1`
|
||||
if test x"$diffout" = x"" && test $? -eq 0; then
|
||||
compare() { diff -u "$@"; }
|
||||
else
|
||||
compare() { cmp "$@"; }
|
||||
fi
|
||||
|
||||
# Ensure the update-copyright program gets found.
|
||||
PATH=$abs_aux_dir:$PATH
|
||||
export PATH
|
||||
|
||||
TMP_BASE=update-copyright.test
|
||||
trap 'rm -f $TMP_BASE*' 0 1 2 3 15
|
||||
|
||||
## --------------------------------- ##
|
||||
## Skip if user does not have perl. ##
|
||||
## --------------------------------- ##
|
||||
|
||||
TMP=$TMP_BASE
|
||||
s=$TMP-script
|
||||
cat <<\EOF > $s
|
||||
#!/bin/sh
|
||||
#! -*-perl-*-
|
||||
# This is a prologue that allows to run a perl script as an executable
|
||||
# on systems that are compliant to a POSIX version before POSIX:2017.
|
||||
# On such systems, the usual invocation of an executable through execlp()
|
||||
# or execvp() fails with ENOEXEC if it is a script that does not start
|
||||
# with a #! line. The script interpreter mentioned in the #! line has
|
||||
# to be /bin/sh, because on GuixSD systems that is the only program that
|
||||
# has a fixed file name. The second line is essential for perl and is
|
||||
# also useful for editing this file in Emacs. The next two lines below
|
||||
# are valid code in both sh and perl. When executed by sh, they re-execute
|
||||
# the script through the perl program found in $PATH. The '-x' option
|
||||
# is essential as well; without it, perl would re-execute the script
|
||||
# through /bin/sh. When executed by perl, the next two lines are a no-op.
|
||||
eval 'exec perl -wSx -pi "$0" "$@"'
|
||||
if 0;
|
||||
|
||||
s/a/b/
|
||||
EOF
|
||||
chmod a+x $s
|
||||
echo a > $TMP-in
|
||||
./$s $TMP-in 2>/dev/null && test b = "`cat $TMP-in 2>/dev/null`" ||
|
||||
{
|
||||
printf '%s\n' "$0: skipping this test;" \
|
||||
'your system has insufficient support for Perl' 1>&2
|
||||
exit 77
|
||||
}
|
||||
|
||||
# Skip this test if Perl is too old. FIXME: 5.8.0 is just a guess.
|
||||
# We have a report that 5.6.1 is inadequate and that 5.8.0 works.
|
||||
perl -e 'require 5.8.0' || {
|
||||
echo '$0: skipping this test; Perl version is too old' 1>&2
|
||||
exit 77
|
||||
}
|
||||
|
||||
# Do not let a different envvar setting perturb results.
|
||||
UPDATE_COPYRIGHT_MAX_LINE_LENGTH=72
|
||||
export UPDATE_COPYRIGHT_MAX_LINE_LENGTH
|
||||
|
||||
## ----------------------------- ##
|
||||
## Examples from documentation. ##
|
||||
## ----------------------------- ##
|
||||
|
||||
TMP=$TMP_BASE-ex
|
||||
cat > $TMP.1 <<EOF
|
||||
Copyright @copyright{} 1990-2005, 2007-2009 Free Software
|
||||
Foundation, Inc.
|
||||
EOF
|
||||
cat > $TMP.2 <<EOF
|
||||
# Copyright (C) 1990-2005, 2007-2009 Free Software
|
||||
# Foundation, Inc.
|
||||
EOF
|
||||
cat > $TMP.3 <<EOF
|
||||
/*
|
||||
* Copyright © 90,2005,2007-2009
|
||||
* Free Software Foundation, Inc.
|
||||
*/
|
||||
EOF
|
||||
cat > $TMP.4 <<EOF
|
||||
## Copyright (C) 1990-2005, 2007-2009 Free Software
|
||||
# Foundation, Inc.
|
||||
EOF
|
||||
cat > $TMP.5 <<EOF
|
||||
Copyright (C) 1990-2005, 2007-2009 Acme, Inc.
|
||||
EOF
|
||||
cat > $TMP.6 <<EOF
|
||||
## Copyright (C) 1990-2005, 2007-2009 Free Software
|
||||
# Foundation, Inc.
|
||||
|
||||
Copyright (C) 1990-2005, 2007-2009 Free Software Foundation,
|
||||
Inc.
|
||||
EOF
|
||||
cat > $TMP.7 <<EOF
|
||||
Copyright (C) 1990-2005, 2007-2009 Acme, Inc.
|
||||
|
||||
# Copyright (C) 1990-2005, 2007-2009 Free Software
|
||||
# Foundation, Inc.
|
||||
EOF
|
||||
|
||||
UPDATE_COPYRIGHT_YEAR=2009 \
|
||||
update-copyright $TMP.? 1> $TMP-stdout 2> $TMP-stderr
|
||||
compare /dev/null $TMP-stdout || exit 1
|
||||
compare - $TMP-stderr <<EOF || exit 1
|
||||
$TMP.4: warning: copyright statement not found
|
||||
$TMP.5: warning: copyright statement not found
|
||||
EOF
|
||||
compare - $TMP.1 <<EOF || exit 1
|
||||
Copyright @copyright{} 1990-2005, 2007-2009 Free Software
|
||||
Foundation, Inc.
|
||||
EOF
|
||||
compare - $TMP.2 <<EOF || exit 1
|
||||
# Copyright (C) 1990-2005, 2007-2009 Free Software
|
||||
# Foundation, Inc.
|
||||
EOF
|
||||
compare - $TMP.3 <<EOF || exit 1
|
||||
/*
|
||||
* Copyright © 90,2005,2007-2009
|
||||
* Free Software Foundation, Inc.
|
||||
*/
|
||||
EOF
|
||||
compare - $TMP.4 <<EOF || exit 1
|
||||
## Copyright (C) 1990-2005, 2007-2009 Free Software
|
||||
# Foundation, Inc.
|
||||
EOF
|
||||
compare - $TMP.5 <<EOF || exit 1
|
||||
Copyright (C) 1990-2005, 2007-2009 Acme, Inc.
|
||||
EOF
|
||||
compare - $TMP.6 <<EOF || exit 1
|
||||
## Copyright (C) 1990-2005, 2007-2009 Free Software
|
||||
# Foundation, Inc.
|
||||
|
||||
Copyright (C) 1990-2005, 2007-2009 Free Software Foundation,
|
||||
Inc.
|
||||
EOF
|
||||
compare - $TMP.7 <<EOF || exit 1
|
||||
Copyright (C) 1990-2005, 2007-2009 Acme, Inc.
|
||||
|
||||
# Copyright (C) 1990-2005, 2007-2009 Free Software
|
||||
# Foundation, Inc.
|
||||
EOF
|
||||
|
||||
UPDATE_COPYRIGHT_YEAR=2010 UPDATE_COPYRIGHT_USE_INTERVALS=1 \
|
||||
update-copyright $TMP.? 1> $TMP-stdout 2> $TMP-stderr
|
||||
compare /dev/null $TMP-stdout || exit 1
|
||||
compare - $TMP-stderr <<EOF || exit 1
|
||||
$TMP.4: warning: copyright statement not found
|
||||
$TMP.5: warning: copyright statement not found
|
||||
EOF
|
||||
compare - $TMP.1 <<EOF || exit 1
|
||||
Copyright @copyright{} 1990-2005, 2007-2010 Free Software Foundation,
|
||||
Inc.
|
||||
EOF
|
||||
compare - $TMP.2 <<EOF || exit 1
|
||||
# Copyright (C) 1990-2005, 2007-2010 Free Software Foundation, Inc.
|
||||
EOF
|
||||
compare - $TMP.3 <<EOF || exit 1
|
||||
/*
|
||||
* Copyright © 1990, 2005, 2007-2010 Free Software Foundation, Inc.
|
||||
*/
|
||||
EOF
|
||||
compare - $TMP.4 <<EOF || exit 1
|
||||
## Copyright (C) 1990-2005, 2007-2009 Free Software
|
||||
# Foundation, Inc.
|
||||
EOF
|
||||
compare - $TMP.5 <<EOF || exit 1
|
||||
Copyright (C) 1990-2005, 2007-2009 Acme, Inc.
|
||||
EOF
|
||||
compare - $TMP.6 <<EOF || exit 1
|
||||
## Copyright (C) 1990-2005, 2007-2009 Free Software
|
||||
# Foundation, Inc.
|
||||
|
||||
Copyright (C) 1990-2005, 2007-2010 Free Software Foundation, Inc.
|
||||
EOF
|
||||
compare - $TMP.7 <<EOF || exit 1
|
||||
Copyright (C) 1990-2005, 2007-2009 Acme, Inc.
|
||||
|
||||
# Copyright (C) 1990-2005, 2007-2010 Free Software Foundation, Inc.
|
||||
EOF
|
||||
|
||||
UPDATE_COPYRIGHT_YEAR=2010 UPDATE_COPYRIGHT_FORCE=1 \
|
||||
update-copyright $TMP.? 1> $TMP-stdout 2> $TMP-stderr
|
||||
compare /dev/null $TMP-stdout || exit 1
|
||||
compare - $TMP-stderr <<EOF || exit 1
|
||||
$TMP.4: warning: copyright statement not found
|
||||
$TMP.5: warning: copyright statement not found
|
||||
EOF
|
||||
compare - $TMP.1 <<EOF || exit 1
|
||||
Copyright @copyright{} 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
|
||||
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
|
||||
Free Software Foundation, Inc.
|
||||
EOF
|
||||
compare - $TMP.2 <<EOF || exit 1
|
||||
# Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
||||
# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010 Free
|
||||
# Software Foundation, Inc.
|
||||
EOF
|
||||
compare - $TMP.3 <<EOF || exit 1
|
||||
/*
|
||||
* Copyright © 1990, 2005, 2007, 2008, 2009, 2010 Free Software
|
||||
* Foundation, Inc.
|
||||
*/
|
||||
EOF
|
||||
compare - $TMP.4 <<EOF || exit 1
|
||||
## Copyright (C) 1990-2005, 2007-2009 Free Software
|
||||
# Foundation, Inc.
|
||||
EOF
|
||||
compare - $TMP.5 <<EOF || exit 1
|
||||
Copyright (C) 1990-2005, 2007-2009 Acme, Inc.
|
||||
EOF
|
||||
compare - $TMP.6 <<EOF || exit 1
|
||||
## Copyright (C) 1990-2005, 2007-2009 Free Software
|
||||
# Foundation, Inc.
|
||||
|
||||
Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
||||
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010 Free
|
||||
Software Foundation, Inc.
|
||||
EOF
|
||||
compare - $TMP.7 <<EOF || exit 1
|
||||
Copyright (C) 1990-2005, 2007-2009 Acme, Inc.
|
||||
|
||||
# Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
||||
# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010 Free
|
||||
# Software Foundation, Inc.
|
||||
EOF
|
||||
|
||||
rm $TMP*
|
||||
|
||||
## -------------- ##
|
||||
## Current year. ##
|
||||
## -------------- ##
|
||||
|
||||
TMP=$TMP_BASE-current-year
|
||||
YEAR=`date +%Y`
|
||||
cat > $TMP <<EOF
|
||||
'\" Copyright (C) 2006
|
||||
'\" Free Software Foundation,
|
||||
'\" Inc.
|
||||
EOF
|
||||
update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
|
||||
compare /dev/null $TMP-stdout || exit 1
|
||||
compare /dev/null $TMP-stderr || exit 1
|
||||
compare - $TMP <<EOF || exit 1
|
||||
'\" Copyright (C) 2006, $YEAR Free Software Foundation, Inc.
|
||||
EOF
|
||||
UPDATE_COPYRIGHT_USE_INTERVALS=1 \
|
||||
update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
|
||||
compare /dev/null $TMP-stdout || exit 1
|
||||
compare /dev/null $TMP-stderr || exit 1
|
||||
compare - $TMP <<EOF || exit 1
|
||||
'\" Copyright (C) 2006, $YEAR Free Software Foundation, Inc.
|
||||
EOF
|
||||
rm $TMP*
|
||||
|
||||
## ------------------ ##
|
||||
## Surrounding text. ##
|
||||
## ------------------ ##
|
||||
|
||||
TMP=$TMP_BASE-surrounding-text
|
||||
cat > $TMP <<EOF
|
||||
Undisturbed text.
|
||||
dnl Undisturbed text.
|
||||
dnl Copyright (C) 89
|
||||
dnl Free Software Foundation, Inc.
|
||||
dnl Undisturbed text.
|
||||
EOF
|
||||
UPDATE_COPYRIGHT_YEAR=2010 \
|
||||
update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
|
||||
compare /dev/null $TMP-stdout || exit 1
|
||||
compare /dev/null $TMP-stderr || exit 1
|
||||
compare - $TMP <<EOF || exit 1
|
||||
Undisturbed text.
|
||||
dnl Undisturbed text.
|
||||
dnl Copyright (C) 1989, 2010 Free Software Foundation, Inc.
|
||||
dnl Undisturbed text.
|
||||
EOF
|
||||
rm $TMP*
|
||||
|
||||
## --------------- ##
|
||||
## Widest prefix. ##
|
||||
## --------------- ##
|
||||
|
||||
TMP=$TMP_BASE-widest-prefix
|
||||
cat > $TMP <<EOF
|
||||
#### Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985,
|
||||
#### 1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
|
||||
#### 2008 Free Software Foundation, Inc.
|
||||
EOF
|
||||
UPDATE_COPYRIGHT_YEAR=2010 \
|
||||
update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
|
||||
compare /dev/null $TMP-stdout || exit 1
|
||||
compare /dev/null $TMP-stderr || exit 1
|
||||
compare - $TMP <<EOF || exit 1
|
||||
#### Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984,
|
||||
#### 1985, 1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
||||
#### 2006, 2007, 2008, 2010 Free Software Foundation, Inc.
|
||||
EOF
|
||||
UPDATE_COPYRIGHT_YEAR=2011 UPDATE_COPYRIGHT_USE_INTERVALS=1 \
|
||||
update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
|
||||
compare /dev/null $TMP-stdout || exit 1
|
||||
compare /dev/null $TMP-stderr || exit 1
|
||||
compare - $TMP <<EOF || exit 1
|
||||
#### Copyright (C) 1976-1988, 1999-2008, 2010-2011 Free Software
|
||||
#### Foundation, Inc.
|
||||
EOF
|
||||
rm $TMP*
|
||||
|
||||
## ------------------- ##
|
||||
## Prefix too large. ##
|
||||
## ------------------- ##
|
||||
|
||||
TMP=$TMP_BASE-prefix-too-large
|
||||
cat > $TMP <<EOF
|
||||
#### Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985,
|
||||
#### 1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
|
||||
#### 2008 Free Software Foundation, Inc.
|
||||
EOF
|
||||
UPDATE_COPYRIGHT_YEAR=2010 \
|
||||
update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
|
||||
compare /dev/null $TMP-stdout || exit 1
|
||||
compare - $TMP-stderr <<EOF || exit 1
|
||||
$TMP: warning: copyright statement not found
|
||||
EOF
|
||||
compare - $TMP <<EOF || exit 1
|
||||
#### Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985,
|
||||
#### 1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
|
||||
#### 2008 Free Software Foundation, Inc.
|
||||
EOF
|
||||
rm $TMP*
|
||||
|
||||
## ------------- ##
|
||||
## Blank lines. ##
|
||||
## ------------- ##
|
||||
|
||||
TMP=$TMP_BASE-blank-lines
|
||||
cat > $TMP <<EOF
|
||||
#Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985,
|
||||
#
|
||||
#1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
|
||||
#2008 Free Software Foundation, Inc.
|
||||
|
||||
Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985,
|
||||
|
||||
1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
|
||||
2008 Free Software Foundation, Inc.
|
||||
EOF
|
||||
UPDATE_COPYRIGHT_YEAR=2010 \
|
||||
update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
|
||||
compare /dev/null $TMP-stdout || exit 1
|
||||
compare - $TMP-stderr <<EOF || exit 1
|
||||
$TMP: warning: copyright statement not found
|
||||
EOF
|
||||
compare - $TMP <<EOF || exit 1
|
||||
#Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985,
|
||||
#
|
||||
#1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
|
||||
#2008 Free Software Foundation, Inc.
|
||||
|
||||
Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985,
|
||||
|
||||
1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
|
||||
2008 Free Software Foundation, Inc.
|
||||
EOF
|
||||
rm $TMP*
|
||||
|
||||
## -------------- ##
|
||||
## Leading tabs. ##
|
||||
## -------------- ##
|
||||
|
||||
TMP=$TMP_BASE-leading-tabs
|
||||
cat > $TMP <<EOF
|
||||
Copyright (C) 87, 88, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 98,
|
||||
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free
|
||||
Software Foundation, Inc.
|
||||
EOF
|
||||
UPDATE_COPYRIGHT_YEAR=2010 \
|
||||
update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
|
||||
compare /dev/null $TMP-stdout || exit 1
|
||||
compare /dev/null $TMP-stderr || exit 1
|
||||
compare - $TMP <<EOF || exit 1
|
||||
Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996,
|
||||
1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
|
||||
2007, 2008, 2009, 2010 Free Software Foundation, Inc.
|
||||
EOF
|
||||
UPDATE_COPYRIGHT_YEAR=2011 UPDATE_COPYRIGHT_USE_INTERVALS=1 \
|
||||
update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
|
||||
compare /dev/null $TMP-stdout || exit 1
|
||||
compare /dev/null $TMP-stderr || exit 1
|
||||
compare - $TMP <<EOF || exit 1
|
||||
Copyright (C) 1987-1988, 1991-2011 Free Software Foundation,
|
||||
Inc.
|
||||
EOF
|
||||
rm $TMP*
|
||||
|
||||
## -------------------- ##
|
||||
## Unusual whitespace. ##
|
||||
## -------------------- ##
|
||||
|
||||
TMP=$TMP_BASE-unusual-ws
|
||||
cat > $TMP <<EOF
|
||||
# Copyright (C) 87-88, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
|
||||
# 98, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
|
||||
# 2009 Free Software Foundation, Inc.
|
||||
EOF
|
||||
UPDATE_COPYRIGHT_YEAR=2010 \
|
||||
update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
|
||||
compare /dev/null $TMP-stdout || exit 1
|
||||
compare /dev/null $TMP-stderr || exit 1
|
||||
compare - $TMP <<EOF || exit 1
|
||||
# Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994,
|
||||
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
|
||||
# 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
|
||||
# Foundation, Inc.
|
||||
EOF
|
||||
UPDATE_COPYRIGHT_YEAR=2011 UPDATE_COPYRIGHT_USE_INTERVALS=1 \
|
||||
update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
|
||||
compare /dev/null $TMP-stdout || exit 1
|
||||
compare /dev/null $TMP-stderr || exit 1
|
||||
compare - $TMP <<EOF || exit 1
|
||||
# Copyright (C) 1987-1988, 1991-2011 Free Software
|
||||
# Foundation, Inc.
|
||||
EOF
|
||||
UPDATE_COPYRIGHT_YEAR=2011 UPDATE_COPYRIGHT_USE_INTERVALS=2 \
|
||||
UPDATE_COPYRIGHT_FORCE=1 update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
|
||||
compare /dev/null $TMP-stdout || exit 1
|
||||
compare /dev/null $TMP-stderr || exit 1
|
||||
compare - $TMP <<EOF || exit 1
|
||||
# Copyright (C) 1987-2011 Free Software Foundation, Inc.
|
||||
EOF
|
||||
rm $TMP*
|
||||
|
||||
## --------- ##
|
||||
## DOS EOL. ##
|
||||
## --------- ##
|
||||
|
||||
TMP=$TMP_BASE-dos-eol
|
||||
tr @ '\015' > $TMP <<\EOF
|
||||
Rem Copyright (C) 87, 88, 1991, 1992, 1993, 1994, 1995, 1996, 1997,@
|
||||
Rem 98, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,@
|
||||
Rem 2009 Free Software Foundation, Inc.@
|
||||
EOF
|
||||
UPDATE_COPYRIGHT_YEAR=2010 \
|
||||
update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
|
||||
compare /dev/null $TMP-stdout || exit 1
|
||||
compare /dev/null $TMP-stderr || exit 1
|
||||
tr @ '\015' > $TMP-exp <<\EOF
|
||||
Rem Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997,@
|
||||
Rem 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,@
|
||||
Rem 2009, 2010 Free Software Foundation, Inc.@
|
||||
EOF
|
||||
compare $TMP-exp $TMP || exit 1
|
||||
rm $TMP*
|
||||
|
||||
## --------------- ##
|
||||
## Omitted "(C)". ##
|
||||
## --------------- ##
|
||||
|
||||
TMP=$TMP_BASE-omitted-circle-c
|
||||
cat > $TMP <<EOF
|
||||
Copyright 87, 88, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
|
||||
98, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
|
||||
2009 Free Software Foundation, Inc.
|
||||
EOF
|
||||
UPDATE_COPYRIGHT_YEAR=2010 \
|
||||
update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
|
||||
compare /dev/null $TMP-stdout || exit 1
|
||||
compare /dev/null $TMP-stderr || exit 1
|
||||
compare - $TMP <<EOF || exit 1
|
||||
Copyright 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
||||
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
||||
Free Software Foundation, Inc.
|
||||
EOF
|
||||
rm $TMP*
|
||||
|
||||
## ------------------ ##
|
||||
## C-style comments. ##
|
||||
## ------------------ ##
|
||||
|
||||
TMP=$TMP_BASE-c-style-comments
|
||||
cat > $TMP.star <<EOF
|
||||
/* Copyright 87, 88, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
|
||||
* 98, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
|
||||
* 2009 Free Software Foundation, Inc. */
|
||||
EOF
|
||||
cat > $TMP.space <<EOF
|
||||
/*Copyright 87, 88, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
|
||||
98, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
|
||||
2009 Free Software Foundation, Inc. */
|
||||
EOF
|
||||
cat > $TMP.single-line <<EOF
|
||||
/* Copyright 87, 1991, 1992 Free Software Foundation, Inc. */
|
||||
EOF
|
||||
cat > $TMP.single-line-wrapped <<EOF
|
||||
/* Copyright 1988, 1991, 1992, 1993 Free Software Foundation, Inc. */
|
||||
EOF
|
||||
cat > $TMP.extra-text-star <<EOF
|
||||
/* Copyright 1987, 1988, 1991, 1992 Free Software Foundation, Inc. End
|
||||
* More comments. */
|
||||
EOF
|
||||
cat > $TMP.extra-text-space <<EOF
|
||||
/* Copyright 1987, 1988, 1991, 1992 Free Software Foundation, Inc. ***
|
||||
* End of comments. */
|
||||
EOF
|
||||
cat > $TMP.two-digit-final-is-substr-of-first <<EOF
|
||||
/* Copyright 1991, 99 Free Software Foundation, Inc. */
|
||||
EOF
|
||||
UPDATE_COPYRIGHT_YEAR=2010 \
|
||||
update-copyright $TMP.* 1> $TMP-stdout 2> $TMP-stderr
|
||||
compare /dev/null $TMP-stdout || exit 1
|
||||
compare /dev/null $TMP-stderr || exit 1
|
||||
compare - $TMP.star <<EOF || exit 1
|
||||
/* Copyright 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
|
||||
* 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
|
||||
* 2009, 2010 Free Software Foundation, Inc. */
|
||||
EOF
|
||||
compare - $TMP.space <<EOF || exit 1
|
||||
/*Copyright 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
|
||||
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
|
||||
2009, 2010 Free Software Foundation, Inc. */
|
||||
EOF
|
||||
compare - $TMP.single-line <<EOF || exit 1
|
||||
/* Copyright 1987, 1991, 1992, 2010 Free Software Foundation, Inc. */
|
||||
EOF
|
||||
compare - $TMP.single-line-wrapped <<EOF || exit 1
|
||||
/* Copyright 1988, 1991, 1992, 1993, 2010 Free Software Foundation,
|
||||
* Inc. */
|
||||
EOF
|
||||
compare - $TMP.extra-text-star <<EOF || exit 1
|
||||
/* Copyright 1987, 1988, 1991, 1992, 2010 Free Software Foundation,
|
||||
* Inc. End
|
||||
* More comments. */
|
||||
EOF
|
||||
compare - $TMP.extra-text-space <<EOF || exit 1
|
||||
/* Copyright 1987, 1988, 1991, 1992, 2010 Free Software Foundation,
|
||||
Inc. ***
|
||||
* End of comments. */
|
||||
EOF
|
||||
compare - $TMP.two-digit-final-is-substr-of-first <<EOF || exit 1
|
||||
/* Copyright 1991, 1999, 2010 Free Software Foundation, Inc. */
|
||||
EOF
|
||||
rm $TMP*
|
||||
|
||||
exit 0
|
||||
@ -1,53 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Unit tests for vc-list-files
|
||||
# Copyright (C) 2008-2022 Free Software Foundation, Inc.
|
||||
# This file is part of the GNUlib Library.
|
||||
#
|
||||
# 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 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||
|
||||
: ${srcdir=.}
|
||||
. "$srcdir/init.sh"; path_prepend_ .
|
||||
|
||||
tmpdir=vc-cvs
|
||||
repo=`pwd`/$tmpdir/repo
|
||||
|
||||
fail=0
|
||||
for i in with-cvsu without; do
|
||||
# On the first iteration, test using cvsu, if it's in your path.
|
||||
# On the second iteration, ensure that cvsu fails, so we'll
|
||||
# exercise the awk-using code.
|
||||
if test $i = without; then
|
||||
printf '%s\n' '#!/bin/sh' 'exit 1' > cvsu
|
||||
chmod a+x cvsu
|
||||
PATH=`pwd`:$PATH
|
||||
export PATH
|
||||
fi
|
||||
ok=0
|
||||
mkdir $tmpdir && cd $tmpdir &&
|
||||
# without cvs, skip the test
|
||||
{ ( cvs -Q -d "$repo" init ) > /dev/null 2>&1 \
|
||||
|| skip_ "cvs not found in PATH"; } &&
|
||||
mkdir w && cd w &&
|
||||
mkdir d &&
|
||||
touch d/a b c &&
|
||||
cvs -Q -d "$repo" import -m imp m M M0 &&
|
||||
cvs -Q -d "$repo" co m && cd m &&
|
||||
printf '%s\n' b c d/a > expected &&
|
||||
$BOURNE_SHELL "$abs_aux_dir/vc-list-files" | sort > actual &&
|
||||
compare expected actual &&
|
||||
ok=1
|
||||
test $ok = 0 && fail=1
|
||||
done
|
||||
|
||||
Exit $fail
|
||||
@ -1,42 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Unit tests for vc-list-files
|
||||
# Copyright (C) 2008-2022 Free Software Foundation, Inc.
|
||||
# This file is part of the GNUlib Library.
|
||||
#
|
||||
# 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 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||
|
||||
: ${srcdir=.}
|
||||
. "$srcdir/init.sh"; path_prepend_ .
|
||||
|
||||
tmpdir=vc-git-$$
|
||||
GIT_DIR= GIT_WORK_TREE=; unset GIT_DIR GIT_WORK_TREE
|
||||
|
||||
fail=1
|
||||
mkdir $tmpdir && cd $tmpdir &&
|
||||
# without git, skip the test
|
||||
# The double use of 'exit' is needed for the reference to $? inside the trap.
|
||||
{ ( git init -q ) > /dev/null 2>&1 \
|
||||
|| skip_ "git not found in PATH"; } &&
|
||||
mkdir d &&
|
||||
touch d/a b c &&
|
||||
git config user.email "you@example.com" &&
|
||||
git config user.name "Your Name" &&
|
||||
git add . > /dev/null &&
|
||||
git commit -q -a -m log &&
|
||||
printf '%s\n' b c d/a > expected &&
|
||||
$BOURNE_SHELL "$abs_aux_dir/vc-list-files" > actual &&
|
||||
compare expected actual &&
|
||||
fail=0
|
||||
|
||||
Exit $fail
|
||||
@ -1,502 +0,0 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 2.1, February 1999
|
||||
|
||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
[This is the first released version of the Lesser GPL. It also counts
|
||||
as the successor of the GNU Library Public License, version 2, hence
|
||||
the version number 2.1.]
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
Licenses are intended to guarantee your freedom to share and change
|
||||
free software--to make sure the software is free for all its users.
|
||||
|
||||
This license, the Lesser General Public License, applies to some
|
||||
specially designated software packages--typically libraries--of the
|
||||
Free Software Foundation and other authors who decide to use it. You
|
||||
can use it too, but we suggest you first think carefully about whether
|
||||
this license or the ordinary General Public License is the better
|
||||
strategy to use in any particular case, based on the explanations below.
|
||||
|
||||
When we speak of free software, we are referring to freedom of use,
|
||||
not price. Our General Public Licenses are designed to make sure that
|
||||
you have the freedom to distribute copies of free software (and charge
|
||||
for this service if you wish); that you receive source code or can get
|
||||
it if you want it; that you can change the software and use pieces of
|
||||
it in new free programs; and that you are informed that you can do
|
||||
these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
distributors to deny you these rights or to ask you to surrender these
|
||||
rights. These restrictions translate to certain responsibilities for
|
||||
you if you distribute copies of the library or if you modify it.
|
||||
|
||||
For example, if you distribute copies of the library, whether gratis
|
||||
or for a fee, you must give the recipients all the rights that we gave
|
||||
you. You must make sure that they, too, receive or can get the source
|
||||
code. If you link other code with the library, you must provide
|
||||
complete object files to the recipients, so that they can relink them
|
||||
with the library after making changes to the library and recompiling
|
||||
it. And you must show them these terms so they know their rights.
|
||||
|
||||
We protect your rights with a two-step method: (1) we copyright the
|
||||
library, and (2) we offer you this license, which gives you legal
|
||||
permission to copy, distribute and/or modify the library.
|
||||
|
||||
To protect each distributor, we want to make it very clear that
|
||||
there is no warranty for the free library. Also, if the library is
|
||||
modified by someone else and passed on, the recipients should know
|
||||
that what they have is not the original version, so that the original
|
||||
author's reputation will not be affected by problems that might be
|
||||
introduced by others.
|
||||
|
||||
Finally, software patents pose a constant threat to the existence of
|
||||
any free program. We wish to make sure that a company cannot
|
||||
effectively restrict the users of a free program by obtaining a
|
||||
restrictive license from a patent holder. Therefore, we insist that
|
||||
any patent license obtained for a version of the library must be
|
||||
consistent with the full freedom of use specified in this license.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the
|
||||
ordinary GNU General Public License. This license, the GNU Lesser
|
||||
General Public License, applies to certain designated libraries, and
|
||||
is quite different from the ordinary General Public License. We use
|
||||
this license for certain libraries in order to permit linking those
|
||||
libraries into non-free programs.
|
||||
|
||||
When a program is linked with a library, whether statically or using
|
||||
a shared library, the combination of the two is legally speaking a
|
||||
combined work, a derivative of the original library. The ordinary
|
||||
General Public License therefore permits such linking only if the
|
||||
entire combination fits its criteria of freedom. The Lesser General
|
||||
Public License permits more lax criteria for linking other code with
|
||||
the library.
|
||||
|
||||
We call this license the "Lesser" General Public License because it
|
||||
does Less to protect the user's freedom than the ordinary General
|
||||
Public License. It also provides other free software developers Less
|
||||
of an advantage over competing non-free programs. These disadvantages
|
||||
are the reason we use the ordinary General Public License for many
|
||||
libraries. However, the Lesser license provides advantages in certain
|
||||
special circumstances.
|
||||
|
||||
For example, on rare occasions, there may be a special need to
|
||||
encourage the widest possible use of a certain library, so that it becomes
|
||||
a de-facto standard. To achieve this, non-free programs must be
|
||||
allowed to use the library. A more frequent case is that a free
|
||||
library does the same job as widely used non-free libraries. In this
|
||||
case, there is little to gain by limiting the free library to free
|
||||
software only, so we use the Lesser General Public License.
|
||||
|
||||
In other cases, permission to use a particular library in non-free
|
||||
programs enables a greater number of people to use a large body of
|
||||
free software. For example, permission to use the GNU C Library in
|
||||
non-free programs enables many more people to use the whole GNU
|
||||
operating system, as well as its variant, the GNU/Linux operating
|
||||
system.
|
||||
|
||||
Although the Lesser General Public License is Less protective of the
|
||||
users' freedom, it does ensure that the user of a program that is
|
||||
linked with the Library has the freedom and the wherewithal to run
|
||||
that program using a modified version of the Library.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow. Pay close attention to the difference between a
|
||||
"work based on the library" and a "work that uses the library". The
|
||||
former contains code derived from the library, whereas the latter must
|
||||
be combined with the library in order to run.
|
||||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library or other
|
||||
program which contains a notice placed by the copyright holder or
|
||||
other authorized party saying it may be distributed under the terms of
|
||||
this Lesser General Public License (also called "this License").
|
||||
Each licensee is addressed as "you".
|
||||
|
||||
A "library" means a collection of software functions and/or data
|
||||
prepared so as to be conveniently linked with application programs
|
||||
(which use some of those functions and data) to form executables.
|
||||
|
||||
The "Library", below, refers to any such software library or work
|
||||
which has been distributed under these terms. A "work based on the
|
||||
Library" means either the Library or any derivative work under
|
||||
copyright law: that is to say, a work containing the Library or a
|
||||
portion of it, either verbatim or with modifications and/or translated
|
||||
straightforwardly into another language. (Hereinafter, translation is
|
||||
included without limitation in the term "modification".)
|
||||
|
||||
"Source code" for a work means the preferred form of the work for
|
||||
making modifications to it. For a library, complete source code means
|
||||
all the source code for all modules it contains, plus any associated
|
||||
interface definition files, plus the scripts used to control compilation
|
||||
and installation of the library.
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running a program using the Library is not restricted, and output from
|
||||
such a program is covered only if its contents constitute a work based
|
||||
on the Library (independent of the use of the Library in a tool for
|
||||
writing it). Whether that is true depends on what the Library does
|
||||
and what the program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library's
|
||||
complete source code as you receive it, in any medium, provided that
|
||||
you conspicuously and appropriately publish on each copy an
|
||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||
all the notices that refer to this License and to the absence of any
|
||||
warranty; and distribute a copy of this License along with the
|
||||
Library.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy,
|
||||
and you may at your option offer warranty protection in exchange for a
|
||||
fee.
|
||||
|
||||
2. You may modify your copy or copies of the Library or any portion
|
||||
of it, thus forming a work based on the Library, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) The modified work must itself be a software library.
|
||||
|
||||
b) You must cause the files modified to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
c) You must cause the whole of the work to be licensed at no
|
||||
charge to all third parties under the terms of this License.
|
||||
|
||||
d) If a facility in the modified Library refers to a function or a
|
||||
table of data to be supplied by an application program that uses
|
||||
the facility, other than as an argument passed when the facility
|
||||
is invoked, then you must make a good faith effort to ensure that,
|
||||
in the event an application does not supply such function or
|
||||
table, the facility still operates, and performs whatever part of
|
||||
its purpose remains meaningful.
|
||||
|
||||
(For example, a function in a library to compute square roots has
|
||||
a purpose that is entirely well-defined independent of the
|
||||
application. Therefore, Subsection 2d requires that any
|
||||
application-supplied function or table used by this function must
|
||||
be optional: if the application does not supply it, the square
|
||||
root function must still compute square roots.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Library,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Library, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Library.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Library
|
||||
with the Library (or with a work based on the Library) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||
License instead of this License to a given copy of the Library. To do
|
||||
this, you must alter all the notices that refer to this License, so
|
||||
that they refer to the ordinary GNU General Public License, version 2,
|
||||
instead of to this License. (If a newer version than version 2 of the
|
||||
ordinary GNU General Public License has appeared, then you can specify
|
||||
that version instead if you wish.) Do not make any other change in
|
||||
these notices.
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for
|
||||
that copy, so the ordinary GNU General Public License applies to all
|
||||
subsequent copies and derivative works made from that copy.
|
||||
|
||||
This option is useful when you wish to copy part of the code of
|
||||
the Library into a program that is not a library.
|
||||
|
||||
4. You may copy and distribute the Library (or a portion or
|
||||
derivative of it, under Section 2) in object code or executable form
|
||||
under the terms of Sections 1 and 2 above provided that you accompany
|
||||
it with the complete corresponding machine-readable source code, which
|
||||
must be distributed under the terms of Sections 1 and 2 above on a
|
||||
medium customarily used for software interchange.
|
||||
|
||||
If distribution of object code is made by offering access to copy
|
||||
from a designated place, then offering equivalent access to copy the
|
||||
source code from the same place satisfies the requirement to
|
||||
distribute the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the
|
||||
Library, but is designed to work with the Library by being compiled or
|
||||
linked with it, is called a "work that uses the Library". Such a
|
||||
work, in isolation, is not a derivative work of the Library, and
|
||||
therefore falls outside the scope of this License.
|
||||
|
||||
However, linking a "work that uses the Library" with the Library
|
||||
creates an executable that is a derivative of the Library (because it
|
||||
contains portions of the Library), rather than a "work that uses the
|
||||
library". The executable is therefore covered by this License.
|
||||
Section 6 states terms for distribution of such executables.
|
||||
|
||||
When a "work that uses the Library" uses material from a header file
|
||||
that is part of the Library, the object code for the work may be a
|
||||
derivative work of the Library even though the source code is not.
|
||||
Whether this is true is especially significant if the work can be
|
||||
linked without the Library, or if the work is itself a library. The
|
||||
threshold for this to be true is not precisely defined by law.
|
||||
|
||||
If such an object file uses only numerical parameters, data
|
||||
structure layouts and accessors, and small macros and small inline
|
||||
functions (ten lines or less in length), then the use of the object
|
||||
file is unrestricted, regardless of whether it is legally a derivative
|
||||
work. (Executables containing this object code plus portions of the
|
||||
Library will still fall under Section 6.)
|
||||
|
||||
Otherwise, if the work is a derivative of the Library, you may
|
||||
distribute the object code for the work under the terms of Section 6.
|
||||
Any executables containing that work also fall under Section 6,
|
||||
whether or not they are linked directly with the Library itself.
|
||||
|
||||
6. As an exception to the Sections above, you may also combine or
|
||||
link a "work that uses the Library" with the Library to produce a
|
||||
work containing portions of the Library, and distribute that work
|
||||
under terms of your choice, provided that the terms permit
|
||||
modification of the work for the customer's own use and reverse
|
||||
engineering for debugging such modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the
|
||||
Library is used in it and that the Library and its use are covered by
|
||||
this License. You must supply a copy of this License. If the work
|
||||
during execution displays copyright notices, you must include the
|
||||
copyright notice for the Library among them, as well as a reference
|
||||
directing the user to the copy of this License. Also, you must do one
|
||||
of these things:
|
||||
|
||||
a) Accompany the work with the complete corresponding
|
||||
machine-readable source code for the Library including whatever
|
||||
changes were used in the work (which must be distributed under
|
||||
Sections 1 and 2 above); and, if the work is an executable linked
|
||||
with the Library, with the complete machine-readable "work that
|
||||
uses the Library", as object code and/or source code, so that the
|
||||
user can modify the Library and then relink to produce a modified
|
||||
executable containing the modified Library. (It is understood
|
||||
that the user who changes the contents of definitions files in the
|
||||
Library will not necessarily be able to recompile the application
|
||||
to use the modified definitions.)
|
||||
|
||||
b) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (1) uses at run time a
|
||||
copy of the library already present on the user's computer system,
|
||||
rather than copying library functions into the executable, and (2)
|
||||
will operate properly with a modified version of the library, if
|
||||
the user installs one, as long as the modified version is
|
||||
interface-compatible with the version that the work was made with.
|
||||
|
||||
c) Accompany the work with a written offer, valid for at
|
||||
least three years, to give the same user the materials
|
||||
specified in Subsection 6a, above, for a charge no more
|
||||
than the cost of performing this distribution.
|
||||
|
||||
d) If distribution of the work is made by offering access to copy
|
||||
from a designated place, offer equivalent access to copy the above
|
||||
specified materials from the same place.
|
||||
|
||||
e) Verify that the user has already received a copy of these
|
||||
materials or that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the "work that uses the
|
||||
Library" must include any data and utility programs needed for
|
||||
reproducing the executable from it. However, as a special exception,
|
||||
the materials to be distributed need not include anything that is
|
||||
normally distributed (in either source or binary form) with the major
|
||||
components (compiler, kernel, and so on) of the operating system on
|
||||
which the executable runs, unless that component itself accompanies
|
||||
the executable.
|
||||
|
||||
It may happen that this requirement contradicts the license
|
||||
restrictions of other proprietary libraries that do not normally
|
||||
accompany the operating system. Such a contradiction means you cannot
|
||||
use both them and the Library together in an executable that you
|
||||
distribute.
|
||||
|
||||
7. You may place library facilities that are a work based on the
|
||||
Library side-by-side in a single library together with other library
|
||||
facilities not covered by this License, and distribute such a combined
|
||||
library, provided that the separate distribution of the work based on
|
||||
the Library and of the other library facilities is otherwise
|
||||
permitted, and provided that you do these two things:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work
|
||||
based on the Library, uncombined with any other library
|
||||
facilities. This must be distributed under the terms of the
|
||||
Sections above.
|
||||
|
||||
b) Give prominent notice with the combined library of the fact
|
||||
that part of it is a work based on the Library, and explaining
|
||||
where to find the accompanying uncombined form of the same work.
|
||||
|
||||
8. You may not copy, modify, sublicense, link with, or distribute
|
||||
the Library except as expressly provided under this License. Any
|
||||
attempt otherwise to copy, modify, sublicense, link with, or
|
||||
distribute the Library is void, and will automatically terminate your
|
||||
rights under this License. However, parties who have received copies,
|
||||
or rights, from you under this License will not have their licenses
|
||||
terminated so long as such parties remain in full compliance.
|
||||
|
||||
9. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Library or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Library (or any work based on the
|
||||
Library), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Library or works based on it.
|
||||
|
||||
10. Each time you redistribute the Library (or any work based on the
|
||||
Library), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute, link with or modify the Library
|
||||
subject to these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties with
|
||||
this License.
|
||||
|
||||
11. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Library at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Library by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Library.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply,
|
||||
and the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
12. If the distribution and/or use of the Library is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Library under this License may add
|
||||
an explicit geographical distribution limitation excluding those countries,
|
||||
so that distribution is permitted only in or among countries not thus
|
||||
excluded. In such case, this License incorporates the limitation as if
|
||||
written in the body of this License.
|
||||
|
||||
13. The Free Software Foundation may publish revised and/or new
|
||||
versions of the Lesser General Public License from time to time.
|
||||
Such new versions will be similar in spirit to the present version,
|
||||
but may differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Library
|
||||
specifies a version number of this License which applies to it and
|
||||
"any later version", you have the option of following the terms and
|
||||
conditions either of that version or of any later version published by
|
||||
the Free Software Foundation. If the Library does not specify a
|
||||
license version number, you may choose any version ever published by
|
||||
the Free Software Foundation.
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free
|
||||
programs whose distribution conditions are incompatible with these,
|
||||
write to the author to ask for permission. For software which is
|
||||
copyrighted by the Free Software Foundation, write to the Free
|
||||
Software Foundation; we sometimes make exceptions for this. Our
|
||||
decision will be guided by the two goals of preserving the free status
|
||||
of all derivatives of our free software and of promoting the sharing
|
||||
and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
||||
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
||||
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
||||
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
||||
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest
|
||||
possible use to the public, we recommend making it free software that
|
||||
everyone can redistribute and change. You can do so by permitting
|
||||
redistribution under these terms (or, alternatively, under the terms of the
|
||||
ordinary General Public License).
|
||||
|
||||
To apply these terms, attach the following notices to the library. It is
|
||||
safest to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least the
|
||||
"copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the library's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1990
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
@ -1,159 +0,0 @@
|
||||
## ltdl.mk -- includable Makefile snippet
|
||||
##
|
||||
## Copyright (C) 2003-2005, 2007, 2011-2019, 2021-2022 Free Software
|
||||
## Foundation, Inc.
|
||||
## Written by Gary V. Vaughan, 2003
|
||||
##
|
||||
## NOTE: The canonical source of this file is maintained with the
|
||||
## GNU Libtool package. Report bugs to bug-libtool@gnu.org.
|
||||
##
|
||||
## GNU Libltdl is free software; you can redistribute it and/or
|
||||
## modify it under the terms of the GNU Lesser General Public
|
||||
## License as published by the Free Software Foundation; either
|
||||
## version 2 of the License, or (at your option) any later version.
|
||||
##
|
||||
## As a special exception to the GNU Lesser General Public License,
|
||||
## if you distribute this file as part of a program or library that
|
||||
## is built using GNU libtool, you may include this file under the
|
||||
## same distribution terms that you use for the rest of that program.
|
||||
##
|
||||
## GNU Libltdl is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU Lesser General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU LesserGeneral Public
|
||||
## License along with GNU Libltdl; see the file COPYING.LIB. If not, a
|
||||
## copy can be downloaded from http://www.gnu.org/licenses/lgpl.html,
|
||||
## or obtained by writing to the Free Software Foundation, Inc.,
|
||||
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#####
|
||||
|
||||
ACLOCAL_AMFLAGS = -I ../m4
|
||||
AUTOMAKE_OPTIONS = foreign
|
||||
AM_CPPFLAGS =
|
||||
AM_LDFLAGS =
|
||||
BUILT_SOURCES =
|
||||
include_HEADERS =
|
||||
noinst_LTLIBRARIES =
|
||||
lib_LTLIBRARIES =
|
||||
EXTRA_LTLIBRARIES =
|
||||
EXTRA_DIST =
|
||||
CLEANFILES =
|
||||
MOSTLYCLEANFILES =
|
||||
|
||||
# -I$(srcdir) is needed for user that built libltdl with a sub-Automake
|
||||
# (not as a sub-package!) using 'nostdinc':
|
||||
AM_CPPFLAGS += -DLT_CONFIG_H='<$(LT_CONFIG_H)>' \
|
||||
-DLTDL -I. -I$(srcdir) -Ilibltdl \
|
||||
-I$(srcdir)/libltdl
|
||||
AM_LDFLAGS += -no-undefined
|
||||
LTDL_VERSION_INFO = -version-info 10:2:3
|
||||
|
||||
noinst_LTLIBRARIES += $(LT_DLLOADERS)
|
||||
|
||||
if INSTALL_LTDL
|
||||
ltdlincludedir = $(includedir)/libltdl
|
||||
ltdlinclude_HEADERS = libltdl/lt_system.h \
|
||||
libltdl/lt_error.h \
|
||||
libltdl/lt_dlloader.h
|
||||
include_HEADERS += ltdl.h
|
||||
lib_LTLIBRARIES += libltdl.la
|
||||
endif
|
||||
|
||||
if CONVENIENCE_LTDL
|
||||
noinst_LTLIBRARIES += libltdlc.la
|
||||
endif
|
||||
|
||||
libltdl_la_SOURCES = libltdl/lt__alloc.h \
|
||||
libltdl/lt__dirent.h \
|
||||
libltdl/lt__glibc.h \
|
||||
libltdl/lt__private.h \
|
||||
libltdl/lt__strl.h \
|
||||
libltdl/lt_dlloader.h \
|
||||
libltdl/lt_error.h \
|
||||
libltdl/lt_system.h \
|
||||
libltdl/slist.h \
|
||||
loaders/preopen.c \
|
||||
lt__alloc.c \
|
||||
lt_dlloader.c \
|
||||
lt_error.c \
|
||||
ltdl.c \
|
||||
ltdl.h \
|
||||
slist.c
|
||||
|
||||
EXTRA_DIST += lt__dirent.c \
|
||||
lt__strl.c
|
||||
|
||||
libltdl_la_CPPFLAGS = -DLTDLOPEN=$(LTDLOPEN) $(AM_CPPFLAGS)
|
||||
libltdl_la_LDFLAGS = $(AM_LDFLAGS) $(LTDL_VERSION_INFO) $(LT_DLPREOPEN)
|
||||
libltdl_la_LIBADD = $(LTLIBOBJS)
|
||||
libltdl_la_DEPENDENCIES = $(LT_DLLOADERS) $(LTLIBOBJS)
|
||||
|
||||
libltdlc_la_SOURCES = $(libltdl_la_SOURCES)
|
||||
libltdlc_la_CPPFLAGS = -DLTDLOPEN=$(LTDLOPEN)c $(AM_CPPFLAGS)
|
||||
libltdlc_la_LDFLAGS = $(AM_LDFLAGS) $(LT_DLPREOPEN)
|
||||
libltdlc_la_LIBADD = $(libltdl_la_LIBADD)
|
||||
libltdlc_la_DEPENDENCIES= $(libltdl_la_DEPENDENCIES)
|
||||
|
||||
## The loaders are preopened by libltdl, itself always built from
|
||||
## pic-objects (either as a shared library, or a convenience library),
|
||||
## so the loaders themselves must be made from pic-objects too. We
|
||||
## use convenience libraries for that purpose:
|
||||
EXTRA_LTLIBRARIES += dlopen.la \
|
||||
dld_link.la \
|
||||
dyld.la \
|
||||
load_add_on.la \
|
||||
loadlibrary.la \
|
||||
shl_load.la
|
||||
|
||||
dlopen_la_SOURCES = loaders/dlopen.c
|
||||
dlopen_la_LDFLAGS = -module -avoid-version
|
||||
dlopen_la_LIBADD = $(LIBADD_DLOPEN)
|
||||
|
||||
dld_link_la_SOURCES = loaders/dld_link.c
|
||||
dld_link_la_LDFLAGS = -module -avoid-version
|
||||
dld_link_la_LIBADD = -ldld
|
||||
|
||||
dyld_la_SOURCES = loaders/dyld.c
|
||||
dyld_la_LDFLAGS = -module -avoid-version
|
||||
|
||||
load_add_on_la_SOURCES = loaders/load_add_on.c
|
||||
load_add_on_la_LDFLAGS = -module -avoid-version
|
||||
|
||||
loadlibrary_la_SOURCES = loaders/loadlibrary.c
|
||||
loadlibrary_la_LDFLAGS = -module -avoid-version
|
||||
|
||||
shl_load_la_SOURCES = loaders/shl_load.c
|
||||
shl_load_la_LDFLAGS = -module -avoid-version
|
||||
shl_load_la_LIBADD = $(LIBADD_SHL_LOAD)
|
||||
|
||||
## Make sure these will be cleaned even when they're not built by default:
|
||||
CLEANFILES += libltdl.la \
|
||||
libltdlc.la \
|
||||
libdlloader.la
|
||||
|
||||
## Automake-1.9.6 doesn't clean subdir AC_LIBOBJ compiled objects
|
||||
## automatically:
|
||||
CLEANFILES += $(LIBOBJS) $(LTLIBOBJS)
|
||||
|
||||
EXTRA_DIST += COPYING.LIB \
|
||||
README
|
||||
|
||||
## --------------------------- ##
|
||||
## Gnulib Makefile.am snippets ##
|
||||
## --------------------------- ##
|
||||
|
||||
BUILT_SOURCES += libltdl/$(LT_ARGZ_H)
|
||||
EXTRA_DIST += libltdl/lt__argz_.h \
|
||||
lt__argz.c
|
||||
|
||||
# We need the following in order to create an <argz.h> when the system
|
||||
# doesn't have one that works with the given compiler.
|
||||
all-local $(lib_OBJECTS): $(LT_ARGZ_H)
|
||||
libltdl/lt__argz.h: libltdl/lt__argz_.h
|
||||
$(AM_V_at)$(mkinstalldirs) . libltdl
|
||||
$(AM_V_GEN)cp $(srcdir)/libltdl/lt__argz_.h $@-t
|
||||
$(AM_V_at)mv $@-t $@
|
||||
MOSTLYCLEANFILES += libltdl/lt__argz.h \
|
||||
libltdl/lt__argz.h-t
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,21 +0,0 @@
|
||||
This is GNU libltdl, a system independent dlopen wrapper for GNU libtool.
|
||||
|
||||
It supports the following dlopen interfaces:
|
||||
* dlopen (POSIX)
|
||||
* shl_load (HP-UX)
|
||||
* LoadLibrary (Win16 and Win32)
|
||||
* load_add_on (BeOS)
|
||||
* GNU DLD (emulates dynamic linking for static libraries)
|
||||
* dyld (darwin/Mac OS X)
|
||||
* libtool's dlpreopen
|
||||
--
|
||||
Copyright (C) 1999, 2003, 2011-2019, 2021-2022 Free Software
|
||||
Foundation, Inc.
|
||||
Written by Thomas Tanner, 1999
|
||||
|
||||
This file is part of GNU Libtool.
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
notice and this notice are preserved. This file is offered as-is,
|
||||
without warranty of any kind.
|
||||
1139
BUILD/libtool-2.4.7/libltdl/aclocal.m4
vendored
1139
BUILD/libtool-2.4.7/libltdl/aclocal.m4
vendored
File diff suppressed because it is too large
Load Diff
@ -1,180 +0,0 @@
|
||||
/* config-h.in. Generated from configure.ac by autoheader. */
|
||||
|
||||
/* Define to 1 if you have the `argz_add' function. */
|
||||
#undef HAVE_ARGZ_ADD
|
||||
|
||||
/* Define to 1 if you have the `argz_append' function. */
|
||||
#undef HAVE_ARGZ_APPEND
|
||||
|
||||
/* Define to 1 if you have the `argz_count' function. */
|
||||
#undef HAVE_ARGZ_COUNT
|
||||
|
||||
/* Define to 1 if you have the `argz_create_sep' function. */
|
||||
#undef HAVE_ARGZ_CREATE_SEP
|
||||
|
||||
/* Define to 1 if you have the <argz.h> header file. */
|
||||
#undef HAVE_ARGZ_H
|
||||
|
||||
/* Define to 1 if you have the `argz_insert' function. */
|
||||
#undef HAVE_ARGZ_INSERT
|
||||
|
||||
/* Define to 1 if you have the `argz_next' function. */
|
||||
#undef HAVE_ARGZ_NEXT
|
||||
|
||||
/* Define to 1 if you have the `argz_stringify' function. */
|
||||
#undef HAVE_ARGZ_STRINGIFY
|
||||
|
||||
/* Define to 1 if you have the `closedir' function. */
|
||||
#undef HAVE_CLOSEDIR
|
||||
|
||||
/* Define to 1 if you have the declaration of `cygwin_conv_path', and to 0 if
|
||||
you don't. */
|
||||
#undef HAVE_DECL_CYGWIN_CONV_PATH
|
||||
|
||||
/* Define to 1 if you have the <dirent.h> header file. */
|
||||
#undef HAVE_DIRENT_H
|
||||
|
||||
/* Define if you have the GNU dld library. */
|
||||
#undef HAVE_DLD
|
||||
|
||||
/* Define to 1 if you have the <dld.h> header file. */
|
||||
#undef HAVE_DLD_H
|
||||
|
||||
/* Define to 1 if you have the `dlerror' function. */
|
||||
#undef HAVE_DLERROR
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#undef HAVE_DLFCN_H
|
||||
|
||||
/* Define to 1 if you have the <dl.h> header file. */
|
||||
#undef HAVE_DL_H
|
||||
|
||||
/* Define if you have the _dyld_func_lookup function. */
|
||||
#undef HAVE_DYLD
|
||||
|
||||
/* Define to 1 if the system has the type `error_t'. */
|
||||
#undef HAVE_ERROR_T
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* Define if you have the libdl library or equivalent. */
|
||||
#undef HAVE_LIBDL
|
||||
|
||||
/* Define if libdlloader will be built on this platform */
|
||||
#undef HAVE_LIBDLLOADER
|
||||
|
||||
/* Define to 1 if you have the <mach-o/dyld.h> header file. */
|
||||
#undef HAVE_MACH_O_DYLD_H
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
/* Define to 1 if you have the `opendir' function. */
|
||||
#undef HAVE_OPENDIR
|
||||
|
||||
/* Define if libtool can extract symbol lists from object files. */
|
||||
#undef HAVE_PRELOADED_SYMBOLS
|
||||
|
||||
/* Define to 1 if you have the `readdir' function. */
|
||||
#undef HAVE_READDIR
|
||||
|
||||
/* Define if you have the shl_load function. */
|
||||
#undef HAVE_SHL_LOAD
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define to 1 if you have the `strlcat' function. */
|
||||
#undef HAVE_STRLCAT
|
||||
|
||||
/* Define to 1 if you have the `strlcpy' function. */
|
||||
#undef HAVE_STRLCPY
|
||||
|
||||
/* Define to 1 if you have the <sys/dl.h> header file. */
|
||||
#undef HAVE_SYS_DL_H
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* This value is set to 1 to indicate that the system argz facility works */
|
||||
#undef HAVE_WORKING_ARGZ
|
||||
|
||||
/* Define if the OS needs help to load dependent libraries for dlopen(). */
|
||||
#undef LTDL_DLOPEN_DEPLIBS
|
||||
|
||||
/* Define to the system default library search path. */
|
||||
#undef LT_DLSEARCH_PATH
|
||||
|
||||
/* The archive extension */
|
||||
#undef LT_LIBEXT
|
||||
|
||||
/* The archive prefix */
|
||||
#undef LT_LIBPREFIX
|
||||
|
||||
/* Define to the extension used for runtime loadable modules, say, ".so". */
|
||||
#undef LT_MODULE_EXT
|
||||
|
||||
/* Define to the name of the environment variable that determines the run-time
|
||||
module search path. */
|
||||
#undef LT_MODULE_PATH_VAR
|
||||
|
||||
/* Define to the sub-directory where libtool stores uninstalled libraries. */
|
||||
#undef LT_OBJDIR
|
||||
|
||||
/* Define to the shared library suffix, say, ".dylib". */
|
||||
#undef LT_SHARED_EXT
|
||||
|
||||
/* Define to the shared archive member specification, say "(shr.o)". */
|
||||
#undef LT_SHARED_LIB_MEMBER
|
||||
|
||||
/* Define if dlsym() requires a leading underscore in symbol names. */
|
||||
#undef NEED_USCORE
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#undef PACKAGE_NAME
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#undef PACKAGE_STRING
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#undef PACKAGE_TARNAME
|
||||
|
||||
/* Define to the home page for this package. */
|
||||
#undef PACKAGE_URL
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
/* Define so that glibc/gnulib argp.h does not typedef error_t. */
|
||||
#undef __error_t_defined
|
||||
|
||||
/* Define to a type to use for 'error_t' if it is not otherwise available. */
|
||||
#undef error_t
|
||||
15659
BUILD/libtool-2.4.7/libltdl/configure
vendored
15659
BUILD/libtool-2.4.7/libltdl/configure
vendored
File diff suppressed because it is too large
Load Diff
@ -1,76 +0,0 @@
|
||||
# Process this file with autoconf to create configure. -*- autoconf -*-
|
||||
#
|
||||
# Copyright (C) 2004-2005, 2007-2008, 2011-2019, 2021-2022 Free
|
||||
# Software Foundation, Inc.
|
||||
# Written by Gary V. Vaughan, 2004
|
||||
#
|
||||
# NOTE: The canonical source of this file is maintained with the
|
||||
# GNU Libtool package. Report bugs to bug-libtool@gnu.org.
|
||||
#
|
||||
# GNU Libltdl is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
# License as published by the Free Software Foundation; either
|
||||
# version 2 of the License, or (at your option) any later version.
|
||||
#
|
||||
# As a special exception to the GNU Lesser General Public License,
|
||||
# if you distribute this file as part of a program or library that
|
||||
# is built using GNU libtool, you may include this file under the
|
||||
# same distribution terms that you use for the rest of that program.
|
||||
#
|
||||
# GNU Libltdl is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU LesserGeneral Public
|
||||
# License along with GNU Libltdl; see the file COPYING.LIB. If not, a
|
||||
# copy can be downloaded from http://www.gnu.org/licenses/lgpl.html,
|
||||
# or obtained by writing to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
####
|
||||
|
||||
# This configure.ac is not used at all by the libtool bootstrap, but
|
||||
# is copied to the ltdl subdirectory if you libtoolize --ltdl your own
|
||||
# project. Adding LT_WITH_LTDL to your project configure.ac will then
|
||||
# configure this directory if your user doesn't want to use the installed
|
||||
# libltdl.
|
||||
|
||||
AC_PREREQ(2.59)dnl We use AS_HELP_STRING
|
||||
|
||||
|
||||
## ------------------------ ##
|
||||
## Autoconf initialisation. ##
|
||||
## ------------------------ ##
|
||||
AC_INIT([libltdl], [2.4.3a], [bug-libtool@gnu.org])
|
||||
AC_CONFIG_HEADERS([config.h:config-h.in])
|
||||
AC_CONFIG_SRCDIR([ltdl.c])
|
||||
AC_CONFIG_AUX_DIR([../build-aux])
|
||||
LT_CONFIG_LTDL_DIR([.]) # I am me!
|
||||
|
||||
|
||||
## ------------------------ ##
|
||||
## Automake Initialisation. ##
|
||||
## ------------------------ ##
|
||||
|
||||
AM_INIT_AUTOMAKE([gnu subdir-objects])
|
||||
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
||||
|
||||
|
||||
## ------------------------------- ##
|
||||
## Libtool specific configuration. ##
|
||||
## ------------------------------- ##
|
||||
pkgdatadir='$datadir'"/$PACKAGE"
|
||||
|
||||
|
||||
## ----------------------- ##
|
||||
## Libtool initialisation. ##
|
||||
## ----------------------- ##
|
||||
LT_INIT([dlopen win32-dll])
|
||||
_LTDL_SETUP
|
||||
|
||||
|
||||
## -------- ##
|
||||
## Outputs. ##
|
||||
## -------- ##
|
||||
AC_CONFIG_FILES([Makefile])
|
||||
AC_OUTPUT
|
||||
@ -1,59 +0,0 @@
|
||||
/* lt__alloc.h -- internal memory management interface
|
||||
|
||||
Copyright (C) 2004, 2011-2019, 2021-2022 Free Software Foundation,
|
||||
Inc.
|
||||
Written by Gary V. Vaughan, 2004
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the
|
||||
GNU Libtool package. Report bugs to bug-libtool@gnu.org.
|
||||
|
||||
GNU Libltdl is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
As a special exception to the GNU Lesser General Public License,
|
||||
if you distribute this file as part of a program or library that
|
||||
is built using GNU Libtool, you may include this file under the
|
||||
same distribution terms that you use for the rest of that program.
|
||||
|
||||
GNU Libltdl is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with GNU Libltdl; see the file COPYING.LIB. If not, a
|
||||
copy can be downloaded from http://www.gnu.org/licenses/lgpl.html,
|
||||
or obtained by writing to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#if !defined LT__ALLOC_H
|
||||
#define LT__ALLOC_H 1
|
||||
|
||||
#include "lt_system.h"
|
||||
|
||||
LT_BEGIN_C_DECLS
|
||||
|
||||
#define MALLOC(tp, n) (tp*) lt__malloc((n) * sizeof(tp))
|
||||
#define REALLOC(tp, mem, n) (tp*) lt__realloc((mem), (n) * sizeof(tp))
|
||||
#define FREE(mem) LT_STMT_START { \
|
||||
free (mem); mem = NULL; } LT_STMT_END
|
||||
#define MEMREASSIGN(p, q) LT_STMT_START { \
|
||||
if ((p) != (q)) { free (p); (p) = (q); (q) = 0; } \
|
||||
} LT_STMT_END
|
||||
|
||||
/* If set, this function is called when memory allocation has failed. */
|
||||
LT_SCOPE void (*lt__alloc_die) (void);
|
||||
|
||||
LT_SCOPE void *lt__malloc (size_t n);
|
||||
LT_SCOPE void *lt__zalloc (size_t n);
|
||||
LT_SCOPE void *lt__realloc (void *mem, size_t n);
|
||||
LT_SCOPE void *lt__memdup (void const *mem, size_t n);
|
||||
|
||||
LT_SCOPE char *lt__strdup (const char *string);
|
||||
|
||||
LT_END_C_DECLS
|
||||
|
||||
#endif /*!defined LT__ALLOC_H*/
|
||||
@ -1,69 +0,0 @@
|
||||
/* lt__argz.h -- internal argz interface for non-glibc systems
|
||||
|
||||
Copyright (C) 2004, 2007-2008, 2011-2019, 2021-2022 Free Software
|
||||
Foundation, Inc.
|
||||
Written by Gary V. Vaughan, 2004
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the
|
||||
GNU Libtool package. Report bugs to bug-libtool@gnu.org.
|
||||
|
||||
GNU Libltdl is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
As a special exception to the GNU Lesser General Public License,
|
||||
if you distribute this file as part of a program or library that
|
||||
is built using GNU Libtool, you may include this file under the
|
||||
same distribution terms that you use for the rest of that program.
|
||||
|
||||
GNU Libltdl is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with GNU Libltdl; see the file COPYING.LIB. If not, a
|
||||
copy can be downloaded from http://www.gnu.org/licenses/lgpl.html,
|
||||
or obtained by writing to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#if !defined LT__ARGZ_H
|
||||
#define LT__ARGZ_H 1
|
||||
|
||||
#include <stdlib.h>
|
||||
#define __need_error_t
|
||||
#include <errno.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#if defined LTDL
|
||||
# include "lt__glibc.h"
|
||||
# include "lt_system.h"
|
||||
#else
|
||||
# define LT_SCOPE
|
||||
#endif
|
||||
|
||||
#if defined __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
LT_SCOPE error_t argz_append (char **pargz, size_t *pargz_len,
|
||||
const char *buf, size_t buf_len);
|
||||
LT_SCOPE error_t argz_create_sep(const char *str, int delim,
|
||||
char **pargz, size_t *pargz_len);
|
||||
LT_SCOPE error_t argz_insert (char **pargz, size_t *pargz_len,
|
||||
char *before, const char *entry);
|
||||
LT_SCOPE char * argz_next (char *argz, size_t argz_len,
|
||||
const char *entry);
|
||||
LT_SCOPE void argz_stringify (char *argz, size_t argz_len, int sep);
|
||||
|
||||
#if defined __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#if !defined LTDL
|
||||
# undef LT_SCOPE
|
||||
#endif
|
||||
|
||||
#endif /*!defined LT__ARGZ_H*/
|
||||
@ -1,88 +0,0 @@
|
||||
/* lt__dirent.h -- internal directory entry scanning interface
|
||||
|
||||
Copyright (C) 2001, 2004, 2006, 2011-2019, 2021-2022 Free Software
|
||||
Foundation, Inc.
|
||||
Written by Bob Friesenhahn, 2001
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the
|
||||
GNU Libtool package. Report bugs to bug-libtool@gnu.org.
|
||||
|
||||
GNU Libltdl is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
As a special exception to the GNU Lesser General Public License,
|
||||
if you distribute this file as part of a program or library that
|
||||
is built using GNU Libtool, you may include this file under the
|
||||
same distribution terms that you use for the rest of that program.
|
||||
|
||||
GNU Libltdl is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with GNU Libltdl; see the file COPYING.LIB. If not, a
|
||||
copy can be downloaded from http://www.gnu.org/licenses/lgpl.html,
|
||||
or obtained by writing to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#if !defined LT__DIRENT_H
|
||||
#define LT__DIRENT_H 1
|
||||
|
||||
#if defined LT_CONFIG_H
|
||||
# include LT_CONFIG_H
|
||||
#else
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include "lt_system.h"
|
||||
|
||||
#ifdef HAVE_DIRENT_H
|
||||
/* We have a fully operational dirent subsystem. */
|
||||
# include <dirent.h>
|
||||
# define D_NAMLEN(dirent) (strlen((dirent)->d_name))
|
||||
|
||||
#elif defined __WINDOWS__
|
||||
/* Use some wrapper code to emulate dirent on windows.. */
|
||||
# define WINDOWS_DIRENT_EMULATION 1
|
||||
|
||||
# include <windows.h>
|
||||
|
||||
# define D_NAMLEN(dirent) (strlen((dirent)->d_name))
|
||||
# define dirent lt__dirent
|
||||
# define DIR lt__DIR
|
||||
# define opendir lt__opendir
|
||||
# define readdir lt__readdir
|
||||
# define closedir lt__closedir
|
||||
|
||||
LT_BEGIN_C_DECLS
|
||||
|
||||
struct dirent
|
||||
{
|
||||
char d_name[LT_FILENAME_MAX];
|
||||
int d_namlen;
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
HANDLE hSearch;
|
||||
WIN32_FIND_DATA Win32FindData;
|
||||
BOOL firsttime;
|
||||
struct dirent file_info;
|
||||
} DIR;
|
||||
|
||||
|
||||
LT_SCOPE DIR * opendir (const char *path);
|
||||
LT_SCOPE struct dirent *readdir (DIR *entry);
|
||||
LT_SCOPE void closedir (DIR *entry);
|
||||
|
||||
LT_END_C_DECLS
|
||||
|
||||
#else /* !defined __WINDOWS__*/
|
||||
ERROR - cannot find dirent
|
||||
#endif /*!defined __WINDOWS__*/
|
||||
|
||||
#endif /*!defined LT__DIRENT_H*/
|
||||
@ -1,89 +0,0 @@
|
||||
/* lt__glibc.h -- support for non glibc environments
|
||||
|
||||
Copyright (C) 2004, 2006-2007, 2011-2019, 2021-2022 Free Software
|
||||
Foundation, Inc.
|
||||
Written by Gary V. Vaughan, 2004
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the
|
||||
GNU Libtool package. Report bugs to bug-libtool@gnu.org.
|
||||
|
||||
GNU Libltdl is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
As a special exception to the GNU Lesser General Public License,
|
||||
if you distribute this file as part of a program or library that
|
||||
is built using GNU Libtool, you may include this file under the
|
||||
same distribution terms that you use for the rest of that program.
|
||||
|
||||
GNU Libltdl is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with GNU Libltdl; see the file COPYING.LIB. If not, a
|
||||
copy can be downloaded from http://www.gnu.org/licenses/lgpl.html,
|
||||
or obtained by writing to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#if !defined LT__GLIBC_H
|
||||
#define LT__GLIBC_H 1
|
||||
|
||||
#if defined LT_CONFIG_H
|
||||
# include LT_CONFIG_H
|
||||
#else
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if !defined HAVE_ARGZ_H || !defined HAVE_WORKING_ARGZ
|
||||
/* Redefine any glibc symbols we reimplement to import the
|
||||
implementations into our lt__ namespace so we don't ever
|
||||
clash with the system library if our clients use argz_*
|
||||
from there in addition to libltdl. */
|
||||
# undef argz_append
|
||||
# define argz_append lt__argz_append
|
||||
# undef argz_create_sep
|
||||
# define argz_create_sep lt__argz_create_sep
|
||||
# undef argz_insert
|
||||
# define argz_insert lt__argz_insert
|
||||
# undef argz_next
|
||||
# define argz_next lt__argz_next
|
||||
# undef argz_stringify
|
||||
# define argz_stringify lt__argz_stringify
|
||||
|
||||
# include <lt__argz.h>
|
||||
|
||||
#else
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <argz.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /*!defined HAVE_ARGZ_H || !defined HAVE_WORKING_ARGZ*/
|
||||
|
||||
# define slist_concat lt__slist_concat
|
||||
# define slist_cons lt__slist_cons
|
||||
# define slist_delete lt__slist_delete
|
||||
# define slist_remove lt__slist_remove
|
||||
# define slist_reverse lt__slist_reverse
|
||||
# define slist_sort lt__slist_sort
|
||||
# define slist_tail lt__slist_tail
|
||||
# define slist_nth lt__slist_nth
|
||||
# define slist_find lt__slist_find
|
||||
# define slist_length lt__slist_length
|
||||
# define slist_foreach lt__slist_foreach
|
||||
# define slist_box lt__slist_box
|
||||
# define slist_unbox lt__slist_unbox
|
||||
|
||||
#include <slist.h>
|
||||
|
||||
#endif /*!defined LT__GLIBC_H*/
|
||||
@ -1,150 +0,0 @@
|
||||
/* lt__private.h -- internal apis for libltdl
|
||||
|
||||
Copyright (C) 2004-2008, 2011-2019, 2021-2022 Free Software
|
||||
Foundation, Inc.
|
||||
Written by Gary V. Vaughan, 2004
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the
|
||||
GNU Libtool package. Report bugs to bug-libtool@gnu.org.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
As a special exception to the GNU Lesser General Public License,
|
||||
if you distribute this file as part of a program or library that
|
||||
is built using GNU libtool, you may include this file under the
|
||||
same distribution terms that you use for the rest of that program.
|
||||
|
||||
GNU Libltdl is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with GNU Libltdl; see the file COPYING.LIB. If not, a
|
||||
copy con be downloaded from http://www.gnu.org/licenses/lgpl.html,
|
||||
or obtained by writing to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#if !defined LT__PRIVATE_H
|
||||
#define LT__PRIVATE_H 1
|
||||
|
||||
#if defined LT_CONFIG_H
|
||||
# include LT_CONFIG_H
|
||||
#else
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
|
||||
#if defined HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
/* Import internal interfaces... */
|
||||
#include "lt__alloc.h"
|
||||
#include "lt__dirent.h"
|
||||
#include "lt__strl.h"
|
||||
#include "lt__glibc.h"
|
||||
|
||||
/* ...and all exported interfaces. */
|
||||
#include "ltdl.h"
|
||||
|
||||
#if defined WITH_DMALLOC
|
||||
# include <dmalloc.h>
|
||||
#endif
|
||||
|
||||
/* DLL building support on win32 hosts; mostly to workaround their
|
||||
ridiculous implementation of data symbol exporting. */
|
||||
#ifndef LT_GLOBAL_DATA
|
||||
# if defined __WINDOWS__ || defined __CYGWIN__
|
||||
# if defined DLL_EXPORT /* defined by libtool (if required) */
|
||||
# define LT_GLOBAL_DATA __declspec(dllexport)
|
||||
# endif
|
||||
# endif
|
||||
# ifndef LT_GLOBAL_DATA
|
||||
# define LT_GLOBAL_DATA /* static linking or !__WINDOWS__ */
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef __attribute__
|
||||
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
|
||||
# define __attribute__(x)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef LT__UNUSED
|
||||
# define LT__UNUSED __attribute__ ((__unused__))
|
||||
#endif
|
||||
|
||||
|
||||
LT_BEGIN_C_DECLS
|
||||
|
||||
#if !defined errno
|
||||
extern int errno;
|
||||
#endif
|
||||
|
||||
LT_SCOPE void lt__alloc_die_callback (void);
|
||||
|
||||
|
||||
/* For readability: */
|
||||
#define STRNEQ(s1, s2) (strcmp((s1), (s2)) != 0)
|
||||
#define STREQ(s1, s2) (strcmp((s1), (s2)) == 0)
|
||||
|
||||
|
||||
|
||||
/* --- OPAQUE STRUCTURES DECLARED IN LTDL.H --- */
|
||||
|
||||
/* This type is used for the array of interface data sets in each handler. */
|
||||
typedef struct {
|
||||
lt_dlinterface_id key;
|
||||
void * data;
|
||||
} lt_interface_data;
|
||||
|
||||
struct lt__handle {
|
||||
lt_dlhandle next;
|
||||
const lt_dlvtable * vtable; /* dlopening interface */
|
||||
lt_dlinfo info; /* user visible fields */
|
||||
int depcount; /* number of dependencies */
|
||||
lt_dlhandle * deplibs; /* dependencies */
|
||||
lt_module module; /* system module handle */
|
||||
void * system; /* system specific data */
|
||||
lt_interface_data * interface_data; /* per caller associated data */
|
||||
int flags; /* various boolean stats */
|
||||
};
|
||||
|
||||
struct lt__advise {
|
||||
unsigned int try_ext:1; /* try system library extensions. */
|
||||
unsigned int is_resident:1; /* module can't be unloaded. */
|
||||
unsigned int is_symglobal:1; /* module symbols can satisfy
|
||||
subsequently loaded modules. */
|
||||
unsigned int is_symlocal:1; /* module symbols are only available
|
||||
locally. */
|
||||
unsigned int try_preload_only:1;/* only preloaded modules will be tried. */
|
||||
};
|
||||
|
||||
/* --- ERROR HANDLING --- */
|
||||
|
||||
/* Extract the diagnostic strings from the error table macro in the same
|
||||
order as the enumerated indices in lt_error.h. */
|
||||
|
||||
#define LT__STRERROR(name) lt__error_string(LT_CONC(LT_ERROR_,name))
|
||||
|
||||
#define LT__GETERROR(lvalue) (lvalue) = lt__get_last_error()
|
||||
#define LT__SETERRORSTR(errormsg) lt__set_last_error(errormsg)
|
||||
#define LT__SETERROR(errorcode) LT__SETERRORSTR(LT__STRERROR(errorcode))
|
||||
|
||||
LT_SCOPE const char *lt__error_string (int errorcode);
|
||||
LT_SCOPE const char *lt__get_last_error (void);
|
||||
LT_SCOPE const char *lt__set_last_error (const char *errormsg);
|
||||
|
||||
LT_END_C_DECLS
|
||||
|
||||
#endif /*!defined LT__PRIVATE_H*/
|
||||
@ -1,54 +0,0 @@
|
||||
/* lt__strl.h -- size-bounded string copying and concatenation
|
||||
|
||||
Copyright (C) 2004, 2006, 2011-2019, 2021-2022 Free Software
|
||||
Foundation, Inc.
|
||||
Written by Bob Friesenhahn, 2004
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the
|
||||
GNU Libtool package. Report bugs to bug-libtool@gnu.org.
|
||||
|
||||
GNU Libltdl is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
As a special exception to the GNU Lesser General Public License,
|
||||
if you distribute this file as part of a program or library that
|
||||
is built using GNU Libtool, you may include this file under the
|
||||
same distribution terms that you use for the rest of that program.
|
||||
|
||||
GNU Libltdl is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with GNU Libltdl; see the file COPYING.LIB. If not, a
|
||||
copy can be downloaded from http://www.gnu.org/licenses/lgpl.html,
|
||||
or obtained by writing to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#if !defined LT__STRL_H
|
||||
#define LT__STRL_H 1
|
||||
|
||||
#if defined LT_CONFIG_H
|
||||
# include LT_CONFIG_H
|
||||
#else
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
#include "lt_system.h"
|
||||
|
||||
#if !defined HAVE_STRLCAT
|
||||
# define strlcat(dst,src,dstsize) lt_strlcat(dst,src,dstsize)
|
||||
LT_SCOPE size_t lt_strlcat(char *dst, const char *src, const size_t dstsize);
|
||||
#endif /* !defined HAVE_STRLCAT */
|
||||
|
||||
#if !defined HAVE_STRLCPY
|
||||
# define strlcpy(dst,src,dstsize) lt_strlcpy(dst,src,dstsize)
|
||||
LT_SCOPE size_t lt_strlcpy(char *dst, const char *src, const size_t dstsize);
|
||||
#endif /* !defined HAVE_STRLCPY */
|
||||
|
||||
#endif /*!defined LT__STRL_H*/
|
||||
@ -1,91 +0,0 @@
|
||||
/* lt_dlloader.h -- dynamic library loader interface
|
||||
|
||||
Copyright (C) 2004, 2007-2008, 2011-2019, 2021-2022 Free Software
|
||||
Foundation, Inc.
|
||||
Written by Gary V. Vaughan, 2004
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the
|
||||
GNU Libtool package. Report bugs to bug-libtool@gnu.org.
|
||||
|
||||
GNU Libltdl is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
As a special exception to the GNU Lesser General Public License,
|
||||
if you distribute this file as part of a program or library that
|
||||
is built using GNU Libtool, you may include this file under the
|
||||
same distribution terms that you use for the rest of that program.
|
||||
|
||||
GNU Libltdl is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with GNU Libltdl; see the file COPYING.LIB. If not, a
|
||||
copy can be downloaded from http://www.gnu.org/licenses/lgpl.html,
|
||||
or obtained by writing to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#if !defined LT_DLLOADER_H
|
||||
#define LT_DLLOADER_H 1
|
||||
|
||||
#include <libltdl/lt_system.h>
|
||||
|
||||
LT_BEGIN_C_DECLS
|
||||
|
||||
typedef void * lt_dlloader;
|
||||
typedef void * lt_module;
|
||||
typedef void * lt_user_data;
|
||||
typedef struct lt__advise * lt_dladvise;
|
||||
|
||||
/* Function pointer types for module loader vtable entries: */
|
||||
typedef lt_module lt_module_open (lt_user_data data,
|
||||
const char *filename,
|
||||
lt_dladvise advise);
|
||||
typedef int lt_module_close (lt_user_data data,
|
||||
lt_module module);
|
||||
typedef void * lt_find_sym (lt_user_data data, lt_module module,
|
||||
const char *symbolname);
|
||||
typedef int lt_dlloader_init (lt_user_data data);
|
||||
typedef int lt_dlloader_exit (lt_user_data data);
|
||||
|
||||
/* Default priority is LT_DLLOADER_PREPEND if none is explicitly given. */
|
||||
typedef enum {
|
||||
LT_DLLOADER_PREPEND = 0, LT_DLLOADER_APPEND
|
||||
} lt_dlloader_priority;
|
||||
|
||||
/* This structure defines a module loader, as populated by the get_vtable
|
||||
entry point of each loader. */
|
||||
typedef struct {
|
||||
const char * name;
|
||||
const char * sym_prefix;
|
||||
lt_module_open * module_open;
|
||||
lt_module_close * module_close;
|
||||
lt_find_sym * find_sym;
|
||||
lt_dlloader_init * dlloader_init;
|
||||
lt_dlloader_exit * dlloader_exit;
|
||||
lt_user_data dlloader_data;
|
||||
lt_dlloader_priority priority;
|
||||
} lt_dlvtable;
|
||||
|
||||
LT_SCOPE int lt_dlloader_add (const lt_dlvtable *vtable);
|
||||
LT_SCOPE lt_dlloader lt_dlloader_next (const lt_dlloader loader);
|
||||
|
||||
LT_SCOPE lt_dlvtable * lt_dlloader_remove (const char *name);
|
||||
LT_SCOPE const lt_dlvtable *lt_dlloader_find (const char *name);
|
||||
LT_SCOPE const lt_dlvtable *lt_dlloader_get (lt_dlloader loader);
|
||||
|
||||
|
||||
/* Type of a function to get a loader's vtable: */
|
||||
typedef const lt_dlvtable *lt_get_vtable (lt_user_data data);
|
||||
|
||||
#ifdef LT_DEBUG_LOADERS
|
||||
LT_SCOPE void lt_dlloader_dump (void);
|
||||
#endif
|
||||
|
||||
LT_END_C_DECLS
|
||||
|
||||
#endif /*!defined LT_DLLOADER_H*/
|
||||
@ -1,86 +0,0 @@
|
||||
/* lt_error.h -- error propagation interface
|
||||
|
||||
Copyright (C) 1999-2001, 2004, 2007, 2011-2019, 2021-2022 Free
|
||||
Software Foundation, Inc.
|
||||
Written by Thomas Tanner, 1999
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the
|
||||
GNU Libtool package. Report bugs to bug-libtool@gnu.org.
|
||||
|
||||
GNU Libltdl is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
As a special exception to the GNU Lesser General Public License,
|
||||
if you distribute this file as part of a program or library that
|
||||
is built using GNU Libtool, you may include this file under the
|
||||
same distribution terms that you use for the rest of that program.
|
||||
|
||||
GNU Libltdl is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with GNU Libltdl; see the file COPYING.LIB. If not, a
|
||||
copy can be downloaded from http://www.gnu.org/licenses/lgpl.html,
|
||||
or obtained by writing to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
/* Only include this header file once. */
|
||||
#if !defined LT_ERROR_H
|
||||
#define LT_ERROR_H 1
|
||||
|
||||
#include <libltdl/lt_system.h>
|
||||
|
||||
LT_BEGIN_C_DECLS
|
||||
|
||||
/* Defining error strings alongside their symbolic names in a macro in
|
||||
this way allows us to expand the macro in different contexts with
|
||||
confidence that the enumeration of symbolic names will map correctly
|
||||
onto the table of error strings. \0 is appended to the strings to
|
||||
expilicitely initialize the string terminator. */
|
||||
#define lt_dlerror_table \
|
||||
LT_ERROR(UNKNOWN, "unknown error\0") \
|
||||
LT_ERROR(DLOPEN_NOT_SUPPORTED, "dlopen support not available\0") \
|
||||
LT_ERROR(INVALID_LOADER, "invalid loader\0") \
|
||||
LT_ERROR(INIT_LOADER, "loader initialization failed\0") \
|
||||
LT_ERROR(REMOVE_LOADER, "loader removal failed\0") \
|
||||
LT_ERROR(FILE_NOT_FOUND, "file not found\0") \
|
||||
LT_ERROR(DEPLIB_NOT_FOUND, "dependency library not found\0") \
|
||||
LT_ERROR(NO_SYMBOLS, "no symbols defined\0") \
|
||||
LT_ERROR(CANNOT_OPEN, "can't open the module\0") \
|
||||
LT_ERROR(CANNOT_CLOSE, "can't close the module\0") \
|
||||
LT_ERROR(SYMBOL_NOT_FOUND, "symbol not found\0") \
|
||||
LT_ERROR(NO_MEMORY, "not enough memory\0") \
|
||||
LT_ERROR(INVALID_HANDLE, "invalid module handle\0") \
|
||||
LT_ERROR(BUFFER_OVERFLOW, "internal buffer overflow\0") \
|
||||
LT_ERROR(INVALID_ERRORCODE, "invalid errorcode\0") \
|
||||
LT_ERROR(SHUTDOWN, "library already shutdown\0") \
|
||||
LT_ERROR(CLOSE_RESIDENT_MODULE, "can't close resident module\0") \
|
||||
LT_ERROR(INVALID_MUTEX_ARGS, "internal error (code withdrawn)\0")\
|
||||
LT_ERROR(INVALID_POSITION, "invalid search path insert position\0")\
|
||||
LT_ERROR(CONFLICTING_FLAGS, "symbol visibility can be global or local\0")
|
||||
|
||||
/* Enumerate the symbolic error names. */
|
||||
enum {
|
||||
#define LT_ERROR(name, diagnostic) LT_CONC(LT_ERROR_, name),
|
||||
lt_dlerror_table
|
||||
#undef LT_ERROR
|
||||
|
||||
LT_ERROR_MAX
|
||||
};
|
||||
|
||||
/* Should be max of the error string lengths above (plus one for C++) */
|
||||
#define LT_ERROR_LEN_MAX (41)
|
||||
|
||||
/* These functions are only useful from inside custom module loaders. */
|
||||
LT_SCOPE int lt_dladderror (const char *diagnostic);
|
||||
LT_SCOPE int lt_dlseterror (int errorcode);
|
||||
|
||||
|
||||
LT_END_C_DECLS
|
||||
|
||||
#endif /*!defined LT_ERROR_H*/
|
||||
@ -1,167 +0,0 @@
|
||||
/* lt_system.h -- system portability abstraction layer
|
||||
|
||||
Copyright (C) 2004, 2007, 2010-2019, 2021-2022 Free Software
|
||||
Foundation, Inc.
|
||||
Written by Gary V. Vaughan, 2004
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the
|
||||
GNU Libtool package. Report bugs to bug-libtool@gnu.org.
|
||||
|
||||
GNU Libltdl is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
As a special exception to the GNU Lesser General Public License,
|
||||
if you distribute this file as part of a program or library that
|
||||
is built using GNU Libtool, you may include this file under the
|
||||
same distribution terms that you use for the rest of that program.
|
||||
|
||||
GNU Libltdl is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with GNU Libltdl; see the file COPYING.LIB. If not, a
|
||||
copy can be downloaded from http://www.gnu.org/licenses/lgpl.html,
|
||||
or obtained by writing to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#if !defined LT_SYSTEM_H
|
||||
#define LT_SYSTEM_H 1
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
/* Some systems do not define EXIT_*, even with STDC_HEADERS. */
|
||||
#if !defined EXIT_SUCCESS
|
||||
# define EXIT_SUCCESS 0
|
||||
#endif
|
||||
#if !defined EXIT_FAILURE
|
||||
# define EXIT_FAILURE 1
|
||||
#endif
|
||||
|
||||
/* Just pick a big number... */
|
||||
#define LT_FILENAME_MAX 2048
|
||||
|
||||
|
||||
/* Saves on those hard to debug '\0' typos.... */
|
||||
#define LT_EOS_CHAR '\0'
|
||||
|
||||
/* LTDL_BEGIN_C_DECLS should be used at the beginning of your declarations,
|
||||
so that C++ compilers don't mangle their names. Use LTDL_END_C_DECLS at
|
||||
the end of C declarations. */
|
||||
#if defined __cplusplus
|
||||
# define LT_BEGIN_C_DECLS extern "C" {
|
||||
# define LT_END_C_DECLS }
|
||||
#else
|
||||
# define LT_BEGIN_C_DECLS /* empty */
|
||||
# define LT_END_C_DECLS /* empty */
|
||||
#endif
|
||||
|
||||
/* LT_STMT_START/END are used to create macros that expand to a
|
||||
a single compound statement in a portable way. */
|
||||
#if defined __GNUC__ && !defined __STRICT_ANSI__ && !defined __cplusplus
|
||||
# define LT_STMT_START (void)(
|
||||
# define LT_STMT_END )
|
||||
#else
|
||||
# if (defined sun || defined __sun__)
|
||||
# define LT_STMT_START if (1)
|
||||
# define LT_STMT_END else (void)0
|
||||
# else
|
||||
# define LT_STMT_START do
|
||||
# define LT_STMT_END while (0)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
|
||||
#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
|
||||
/* DATA imports from DLLs on WIN32 can't be const, because runtime
|
||||
relocations are performed -- see ld's documentation on pseudo-relocs. */
|
||||
# define LT_DLSYM_CONST
|
||||
#elif defined __osf__
|
||||
/* This system does not cope well with relocations in const data. */
|
||||
# define LT_DLSYM_CONST
|
||||
#else
|
||||
# define LT_DLSYM_CONST const
|
||||
#endif
|
||||
|
||||
/* Canonicalise Windows and Cygwin recognition macros.
|
||||
To match the values set by recent Cygwin compilers, make sure that if
|
||||
__CYGWIN__ is defined (after canonicalisation), __WINDOWS__ is NOT! */
|
||||
#if defined __CYGWIN32__ && !defined __CYGWIN__
|
||||
# define __CYGWIN__ __CYGWIN32__
|
||||
#endif
|
||||
#if defined __CYGWIN__
|
||||
# if defined __WINDOWS__
|
||||
# undef __WINDOWS__
|
||||
# endif
|
||||
#elif defined _WIN32
|
||||
# define __WINDOWS__ _WIN32
|
||||
#elif defined WIN32
|
||||
# define __WINDOWS__ WIN32
|
||||
#endif
|
||||
#if defined __CYGWIN__ && defined __WINDOWS__
|
||||
# undef __WINDOWS__
|
||||
#endif
|
||||
|
||||
|
||||
/* DLL building support on win32 hosts; mostly to workaround their
|
||||
ridiculous implementation of data symbol exporting. */
|
||||
#if !defined LT_SCOPE
|
||||
# if defined __WINDOWS__ || defined __CYGWIN__
|
||||
# if defined DLL_EXPORT /* defined by libtool (if required) */
|
||||
# define LT_SCOPE extern __declspec(dllexport)
|
||||
# endif
|
||||
# if defined LIBLTDL_DLL_IMPORT /* define if linking with this dll */
|
||||
/* note: cygwin/mingw compilers can rely instead on auto-import */
|
||||
# define LT_SCOPE extern __declspec(dllimport)
|
||||
# endif
|
||||
# endif
|
||||
# if !defined LT_SCOPE /* static linking or !__WINDOWS__ */
|
||||
# define LT_SCOPE extern
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined __WINDOWS__
|
||||
/* LT_DIRSEP_CHAR is accepted *in addition* to '/' as a directory
|
||||
separator when it is set. */
|
||||
# define LT_DIRSEP_CHAR '\\'
|
||||
# define LT_PATHSEP_CHAR ';'
|
||||
#else
|
||||
# define LT_PATHSEP_CHAR ':'
|
||||
#endif
|
||||
|
||||
#if defined _MSC_VER /* Visual Studio */
|
||||
# define R_OK 4
|
||||
#endif
|
||||
|
||||
/* fopen() mode flags for reading a text file */
|
||||
#undef LT_READTEXT_MODE
|
||||
#if defined __WINDOWS__ || defined __CYGWIN__
|
||||
# define LT_READTEXT_MODE "rt"
|
||||
#else
|
||||
# define LT_READTEXT_MODE "r"
|
||||
#endif
|
||||
|
||||
/* The extra indirection to the LT__STR and LT__CONC macros is required so
|
||||
that if the arguments to LT_STR() (or LT_CONC()) are themselves macros,
|
||||
they will be expanded before being quoted. */
|
||||
#ifndef LT_STR
|
||||
# define LT__STR(arg) #arg
|
||||
# define LT_STR(arg) LT__STR(arg)
|
||||
#endif
|
||||
|
||||
#ifndef LT_CONC
|
||||
# define LT__CONC(a, b) a##b
|
||||
# define LT_CONC(a, b) LT__CONC(a, b)
|
||||
#endif
|
||||
#ifndef LT_CONC3
|
||||
# define LT__CONC3(a, b, c) a##b##c
|
||||
# define LT_CONC3(a, b, c) LT__CONC3(a, b, c)
|
||||
#endif
|
||||
|
||||
#endif /*!defined LT_SYSTEM_H*/
|
||||
@ -1,97 +0,0 @@
|
||||
/* slist.h -- generalised singly linked lists
|
||||
|
||||
Copyright (C) 2000, 2004, 2009, 2011-2019, 2021-2022 Free Software
|
||||
Foundation, Inc.
|
||||
Written by Gary V. Vaughan, 2000
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the
|
||||
GNU Libtool package. Report bugs to bug-libtool@gnu.org.
|
||||
|
||||
GNU Libltdl is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
As a special exception to the GNU Lesser General Public License,
|
||||
if you distribute this file as part of a program or library that
|
||||
is built using GNU Libtool, you may include this file under the
|
||||
same distribution terms that you use for the rest of that program.
|
||||
|
||||
GNU Libltdl is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with GNU Libltdl; see the file COPYING.LIB. If not, a
|
||||
copy can be downloaded from http://www.gnu.org/licenses/lgpl.html,
|
||||
or obtained by writing to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
/* A generalised list. This is deliberately transparent so that you
|
||||
can make the NEXT field of all your chained data structures first,
|
||||
and then cast them to '(SList *)' so that they can be manipulated
|
||||
by this API.
|
||||
|
||||
Alternatively, you can generate raw SList elements using slist_new(),
|
||||
and put the element data in the USERDATA field. Either way you
|
||||
get to manage the memory involved by yourself.
|
||||
*/
|
||||
|
||||
#if !defined SLIST_H
|
||||
#define SLIST_H 1
|
||||
|
||||
#if defined LTDL
|
||||
# include <libltdl/lt__glibc.h>
|
||||
# include <libltdl/lt_system.h>
|
||||
#else
|
||||
# define LT_SCOPE
|
||||
#endif
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#if defined __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct slist {
|
||||
struct slist *next; /* chain forward pointer*/
|
||||
const void *userdata; /* for boxed 'SList' item */
|
||||
} SList;
|
||||
|
||||
typedef void * SListCallback (SList *item, void *userdata);
|
||||
typedef int SListCompare (const SList *item1, const SList *item2,
|
||||
void *userdata);
|
||||
|
||||
LT_SCOPE SList *slist_concat (SList *head, SList *tail);
|
||||
LT_SCOPE SList *slist_cons (SList *item, SList *slist);
|
||||
|
||||
LT_SCOPE SList *slist_delete (SList *slist, void (*delete_fct) (void *item));
|
||||
LT_SCOPE SList *slist_remove (SList **phead, SListCallback *find,
|
||||
void *matchdata);
|
||||
LT_SCOPE SList *slist_reverse (SList *slist);
|
||||
LT_SCOPE SList *slist_sort (SList *slist, SListCompare *compare,
|
||||
void *userdata);
|
||||
|
||||
LT_SCOPE SList *slist_tail (SList *slist);
|
||||
LT_SCOPE SList *slist_nth (SList *slist, size_t n);
|
||||
LT_SCOPE void * slist_find (SList *slist, SListCallback *find,
|
||||
void *matchdata);
|
||||
LT_SCOPE size_t slist_length (SList *slist);
|
||||
|
||||
LT_SCOPE void * slist_foreach (SList *slist, SListCallback *foreach,
|
||||
void *userdata);
|
||||
|
||||
LT_SCOPE SList *slist_box (const void *userdata);
|
||||
LT_SCOPE void * slist_unbox (SList *item);
|
||||
|
||||
#if defined __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#if !defined LTDL
|
||||
# undef LT_SCOPE
|
||||
#endif
|
||||
|
||||
#endif /*!defined SLIST_H*/
|
||||
@ -1,158 +0,0 @@
|
||||
/* loader-dld_link.c -- dynamic linking with dld
|
||||
|
||||
Copyright (C) 1998-2000, 2004, 2006-2008, 2011-2019, 2021-2022 Free
|
||||
Software Foundation, Inc.
|
||||
Written by Thomas Tanner, 1998
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the
|
||||
GNU Libtool package. Report bugs to bug-libtool@gnu.org.
|
||||
|
||||
GNU Libltdl is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
As a special exception to the GNU Lesser General Public License,
|
||||
if you distribute this file as part of a program or library that
|
||||
is built using GNU Libtool, you may include this file under the
|
||||
same distribution terms that you use for the rest of that program.
|
||||
|
||||
GNU Libltdl is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with GNU Libltdl; see the file COPYING.LIB. If not, a
|
||||
copy can be downloaded from http://www.gnu.org/licenses/lgpl.html,
|
||||
or obtained by writing to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include "lt__private.h"
|
||||
#include "lt_dlloader.h"
|
||||
|
||||
/* Use the preprocessor to rename non-static symbols to avoid namespace
|
||||
collisions when the loader code is statically linked into libltdl.
|
||||
Use the "<module_name>_LTX_" prefix so that the symbol addresses can
|
||||
be fetched from the preloaded symbol list by lt_dlsym(): */
|
||||
#define get_vtable dld_link_LTX_get_vtable
|
||||
|
||||
LT_BEGIN_C_DECLS
|
||||
LT_SCOPE lt_dlvtable *get_vtable (lt_user_data loader_data);
|
||||
LT_END_C_DECLS
|
||||
|
||||
|
||||
/* Boilerplate code to set up the vtable for hooking this loader into
|
||||
libltdl's loader list: */
|
||||
static int vl_exit (lt_user_data loader_data);
|
||||
static lt_module vm_open (lt_user_data loader_data, const char *filename,
|
||||
lt_dladvise advise);
|
||||
static int vm_close (lt_user_data loader_data, lt_module module);
|
||||
static void * vm_sym (lt_user_data loader_data, lt_module module,
|
||||
const char *symbolname);
|
||||
|
||||
static lt_dlvtable *vtable = 0;
|
||||
|
||||
/* Return the vtable for this loader, only the name and sym_prefix
|
||||
attributes (plus the virtual function implementations, obviously)
|
||||
change between loaders. */
|
||||
lt_dlvtable *
|
||||
get_vtable (lt_user_data loader_data)
|
||||
{
|
||||
if (!vtable)
|
||||
{
|
||||
vtable = lt__zalloc (sizeof *vtable);
|
||||
}
|
||||
|
||||
if (vtable && !vtable->name)
|
||||
{
|
||||
vtable->name = "lt_dld_link";
|
||||
vtable->module_open = vm_open;
|
||||
vtable->module_close = vm_close;
|
||||
vtable->find_sym = vm_sym;
|
||||
vtable->dlloader_exit = vl_exit;
|
||||
vtable->dlloader_data = loader_data;
|
||||
vtable->priority = LT_DLLOADER_APPEND;
|
||||
}
|
||||
|
||||
if (vtable && (vtable->dlloader_data != loader_data))
|
||||
{
|
||||
LT__SETERROR (INIT_LOADER);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return vtable;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* --- IMPLEMENTATION --- */
|
||||
|
||||
|
||||
#if defined HAVE_DLD_H
|
||||
# include <dld.h>
|
||||
#endif
|
||||
|
||||
/* A function called through the vtable when this loader is no
|
||||
longer needed by the application. */
|
||||
static int
|
||||
vl_exit (lt_user_data loader_data LT__UNUSED)
|
||||
{
|
||||
vtable = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* A function called through the vtable to open a module with this
|
||||
loader. Returns an opaque representation of the newly opened
|
||||
module for processing with this loader's other vtable functions. */
|
||||
static lt_module
|
||||
vm_open (lt_user_data loader_data LT__UNUSED, const char *filename,
|
||||
lt_dladvise advise LT__UNUSED)
|
||||
{
|
||||
lt_module module = lt__strdup (filename);
|
||||
|
||||
if (module && dld_link (filename) != 0)
|
||||
{
|
||||
LT__SETERROR (CANNOT_OPEN);
|
||||
FREE (module);
|
||||
}
|
||||
|
||||
return module;
|
||||
}
|
||||
|
||||
/* A function called through the vtable when a particular module
|
||||
should be unloaded. */
|
||||
static int
|
||||
vm_close (lt_user_data loader_data LT__UNUSED, lt_module module)
|
||||
{
|
||||
int errors = 0;
|
||||
|
||||
if (dld_unlink_by_file ((char*)(module), 1) != 0)
|
||||
{
|
||||
LT__SETERROR (CANNOT_CLOSE);
|
||||
++errors;
|
||||
}
|
||||
else
|
||||
{
|
||||
FREE (module);
|
||||
}
|
||||
|
||||
return errors;
|
||||
}
|
||||
|
||||
/* A function called through the vtable to get the address of
|
||||
a symbol loaded from a particular module. */
|
||||
static void *
|
||||
vm_sym (lt_user_data loader_data LT__UNUSED, lt_module module LT__UNUSED,
|
||||
const char *name)
|
||||
{
|
||||
void *address = dld_get_func (name);
|
||||
|
||||
if (!address)
|
||||
{
|
||||
LT__SETERROR (SYMBOL_NOT_FOUND);
|
||||
}
|
||||
|
||||
return address;
|
||||
}
|
||||
@ -1,275 +0,0 @@
|
||||
/* loader-dlopen.c -- dynamic linking with dlopen/dlsym
|
||||
|
||||
Copyright (C) 1998-2000, 2004, 2006-2008, 2011-2019, 2021-2022 Free
|
||||
Software Foundation, Inc.
|
||||
Written by Thomas Tanner, 1998
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the
|
||||
GNU Libtool package. Report bugs to bug-libtool@gnu.org.
|
||||
|
||||
GNU Libltdl is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
As a special exception to the GNU Lesser General Public License,
|
||||
if you distribute this file as part of a program or library that
|
||||
is built using GNU Libtool, you may include this file under the
|
||||
same distribution terms that you use for the rest of that program.
|
||||
|
||||
GNU Libltdl is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with GNU Libltdl; see the file COPYING.LIB. If not, a
|
||||
copy can be downloaded from http://www.gnu.org/licenses/lgpl.html,
|
||||
or obtained by writing to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include "lt__private.h"
|
||||
#include "lt_dlloader.h"
|
||||
|
||||
/* Use the preprocessor to rename non-static symbols to avoid namespace
|
||||
collisions when the loader code is statically linked into libltdl.
|
||||
Use the "<module_name>_LTX_" prefix so that the symbol addresses can
|
||||
be fetched from the preloaded symbol list by lt_dlsym(): */
|
||||
#define get_vtable dlopen_LTX_get_vtable
|
||||
|
||||
LT_BEGIN_C_DECLS
|
||||
LT_SCOPE lt_dlvtable *get_vtable (lt_user_data loader_data);
|
||||
LT_END_C_DECLS
|
||||
|
||||
|
||||
/* Boilerplate code to set up the vtable for hooking this loader into
|
||||
libltdl's loader list: */
|
||||
static int vl_exit (lt_user_data loader_data);
|
||||
static lt_module vm_open (lt_user_data loader_data, const char *filename,
|
||||
lt_dladvise advise);
|
||||
static int vm_close (lt_user_data loader_data, lt_module module);
|
||||
static void * vm_sym (lt_user_data loader_data, lt_module module,
|
||||
const char *symbolname);
|
||||
|
||||
static lt_dlvtable *vtable = 0;
|
||||
|
||||
/* Return the vtable for this loader, only the name and sym_prefix
|
||||
attributes (plus the virtual function implementations, obviously)
|
||||
change between loaders. */
|
||||
lt_dlvtable *
|
||||
get_vtable (lt_user_data loader_data)
|
||||
{
|
||||
if (!vtable)
|
||||
{
|
||||
vtable = (lt_dlvtable *) lt__zalloc (sizeof *vtable);
|
||||
}
|
||||
|
||||
if (vtable && !vtable->name)
|
||||
{
|
||||
vtable->name = "lt_dlopen";
|
||||
#if defined DLSYM_USCORE
|
||||
vtable->sym_prefix = "_";
|
||||
#endif
|
||||
vtable->module_open = vm_open;
|
||||
vtable->module_close = vm_close;
|
||||
vtable->find_sym = vm_sym;
|
||||
vtable->dlloader_exit = vl_exit;
|
||||
vtable->dlloader_data = loader_data;
|
||||
vtable->priority = LT_DLLOADER_PREPEND;
|
||||
}
|
||||
|
||||
if (vtable && (vtable->dlloader_data != loader_data))
|
||||
{
|
||||
LT__SETERROR (INIT_LOADER);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return vtable;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* --- IMPLEMENTATION --- */
|
||||
|
||||
|
||||
#if defined HAVE_DLFCN_H
|
||||
# include <dlfcn.h>
|
||||
#endif
|
||||
|
||||
#if defined HAVE_SYS_DL_H
|
||||
# include <sys/dl.h>
|
||||
#endif
|
||||
|
||||
|
||||
/* We may have to define LT_LAZY_OR_NOW in the command line if we
|
||||
find out it does not work in some platform. */
|
||||
#if !defined LT_LAZY_OR_NOW
|
||||
# if defined RTLD_LAZY
|
||||
# define LT_LAZY_OR_NOW RTLD_LAZY
|
||||
# else
|
||||
# if defined DL_LAZY
|
||||
# define LT_LAZY_OR_NOW DL_LAZY
|
||||
# endif
|
||||
# endif /* !RTLD_LAZY */
|
||||
#endif
|
||||
#if !defined LT_LAZY_OR_NOW
|
||||
# if defined RTLD_NOW
|
||||
# define LT_LAZY_OR_NOW RTLD_NOW
|
||||
# else
|
||||
# if defined DL_NOW
|
||||
# define LT_LAZY_OR_NOW DL_NOW
|
||||
# endif
|
||||
# endif /* !RTLD_NOW */
|
||||
#endif
|
||||
#if !defined LT_LAZY_OR_NOW
|
||||
# define LT_LAZY_OR_NOW 0
|
||||
#endif /* !LT_LAZY_OR_NOW */
|
||||
|
||||
/* We only support local and global symbols from modules for loaders
|
||||
that provide such a thing, otherwise the system default is used. */
|
||||
#if !defined RTLD_GLOBAL
|
||||
# if defined DL_GLOBAL
|
||||
# define RTLD_GLOBAL DL_GLOBAL
|
||||
# endif
|
||||
#endif /* !RTLD_GLOBAL */
|
||||
#if !defined RTLD_LOCAL
|
||||
# if defined DL_LOCAL
|
||||
# define RTLD_LOCAL DL_LOCAL
|
||||
# endif
|
||||
#endif /* !RTLD_LOCAL */
|
||||
|
||||
#if defined HAVE_DLERROR
|
||||
# define DLERROR(arg) dlerror ()
|
||||
#else
|
||||
# define DLERROR(arg) LT__STRERROR (arg)
|
||||
#endif
|
||||
|
||||
#define DL__SETERROR(errorcode) \
|
||||
LT__SETERRORSTR (DLERROR (errorcode))
|
||||
|
||||
|
||||
/* A function called through the vtable when this loader is no
|
||||
longer needed by the application. */
|
||||
static int
|
||||
vl_exit (lt_user_data loader_data LT__UNUSED)
|
||||
{
|
||||
vtable = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* A function called through the vtable to open a module with this
|
||||
loader. Returns an opaque representation of the newly opened
|
||||
module for processing with this loader's other vtable functions. */
|
||||
static lt_module
|
||||
vm_open (lt_user_data loader_data LT__UNUSED, const char *filename,
|
||||
lt_dladvise advise)
|
||||
{
|
||||
int module_flags = LT_LAZY_OR_NOW;
|
||||
lt_module module;
|
||||
#ifdef RTLD_MEMBER
|
||||
int len = LT_STRLEN (filename);
|
||||
#endif
|
||||
|
||||
if (advise)
|
||||
{
|
||||
#ifdef RTLD_GLOBAL
|
||||
/* If there is some means of asking for global symbol resolution,
|
||||
do so. */
|
||||
if (advise->is_symglobal)
|
||||
module_flags |= RTLD_GLOBAL;
|
||||
#else
|
||||
/* Otherwise, reset that bit so the caller can tell it wasn't
|
||||
acted on. */
|
||||
advise->is_symglobal = 0;
|
||||
#endif
|
||||
|
||||
/* And similarly for local only symbol resolution. */
|
||||
#ifdef RTLD_LOCAL
|
||||
if (advise->is_symlocal)
|
||||
module_flags |= RTLD_LOCAL;
|
||||
#else
|
||||
advise->is_symlocal = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef RTLD_MEMBER /* AIX */
|
||||
if (len >= 4) /* at least "l(m)" */
|
||||
{
|
||||
/* Advise loading an archive member only if the filename really
|
||||
contains both the opening and closing parent, and a member. */
|
||||
if (filename[len-1] == ')')
|
||||
{
|
||||
const char *opening = strrchr(filename, '(');
|
||||
if (opening && opening < (filename+len-2) && strchr(opening+1, '/') == NULL)
|
||||
module_flags |= RTLD_MEMBER;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
module = dlopen (filename, module_flags);
|
||||
|
||||
#if defined RTLD_MEMBER && defined LT_SHARED_LIB_MEMBER
|
||||
if (!module && len && !(module_flags & RTLD_MEMBER) && errno == ENOEXEC)
|
||||
{
|
||||
/* Loading without a member specified failed with "Exec format error".
|
||||
So the file is there, but either has wrong bitwidth, or is an
|
||||
archive eventually containing the default shared archive member.
|
||||
Retry with default member, getting same error in worst case. */
|
||||
const char *member = LT_SHARED_LIB_MEMBER;
|
||||
|
||||
char *attempt = MALLOC (char, len + strlen (member) + 1);
|
||||
if (!attempt)
|
||||
{
|
||||
LT__SETERROR (NO_MEMORY);
|
||||
return module;
|
||||
}
|
||||
|
||||
sprintf (attempt, "%s%s", filename, member);
|
||||
module = vm_open (loader_data, attempt, advise);
|
||||
FREE (attempt);
|
||||
return module;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!module)
|
||||
{
|
||||
DL__SETERROR (CANNOT_OPEN);
|
||||
}
|
||||
|
||||
return module;
|
||||
}
|
||||
|
||||
|
||||
/* A function called through the vtable when a particular module
|
||||
should be unloaded. */
|
||||
static int
|
||||
vm_close (lt_user_data loader_data LT__UNUSED, lt_module module)
|
||||
{
|
||||
int errors = 0;
|
||||
|
||||
if (dlclose (module) != 0)
|
||||
{
|
||||
DL__SETERROR (CANNOT_CLOSE);
|
||||
++errors;
|
||||
}
|
||||
|
||||
return errors;
|
||||
}
|
||||
|
||||
|
||||
/* A function called through the vtable to get the address of
|
||||
a symbol loaded from a particular module. */
|
||||
static void *
|
||||
vm_sym (lt_user_data loader_data LT__UNUSED, lt_module module, const char *name)
|
||||
{
|
||||
void *address = dlsym (module, name);
|
||||
|
||||
if (!address)
|
||||
{
|
||||
DL__SETERROR (SYMBOL_NOT_FOUND);
|
||||
}
|
||||
|
||||
return address;
|
||||
}
|
||||
@ -1,511 +0,0 @@
|
||||
/* loader-dyld.c -- dynamic linking on darwin and OS X
|
||||
|
||||
Copyright (C) 1998-2000, 2004, 2006-2008, 2011-2019, 2021-2022 Free
|
||||
Software Foundation, Inc.
|
||||
Written by Peter O'Gorman, 1998
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the
|
||||
GNU Libtool package. Report bugs to bug-libtool@gnu.org.
|
||||
|
||||
GNU Libltdl is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
As a special exception to the GNU Lesser General Public License,
|
||||
if you distribute this file as part of a program or library that
|
||||
is built using GNU Libtool, you may include this file under the
|
||||
same distribution terms that you use for the rest of that program.
|
||||
|
||||
GNU Libltdl is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with GNU Libltdl; see the file COPYING.LIB. If not, a
|
||||
copy can be downloaded from http://www.gnu.org/licenses/lgpl.html,
|
||||
or obtained by writing to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include "lt__private.h"
|
||||
#include "lt_dlloader.h"
|
||||
|
||||
/* Use the preprocessor to rename non-static symbols to avoid namespace
|
||||
collisions when the loader code is statically linked into libltdl.
|
||||
Use the "<module_name>_LTX_" prefix so that the symbol addresses can
|
||||
be fetched from the preloaded symbol list by lt_dlsym(): */
|
||||
#define get_vtable dyld_LTX_get_vtable
|
||||
|
||||
LT_BEGIN_C_DECLS
|
||||
LT_SCOPE lt_dlvtable *get_vtable (lt_user_data loader_data);
|
||||
LT_END_C_DECLS
|
||||
|
||||
|
||||
/* Boilerplate code to set up the vtable for hooking this loader into
|
||||
libltdl's loader list: */
|
||||
static int vl_init (lt_user_data loader_data);
|
||||
static int vl_exit (lt_user_data loader_data);
|
||||
static lt_module vm_open (lt_user_data loader_data, const char *filename,
|
||||
lt_dladvise advise);
|
||||
static int vm_close (lt_user_data loader_data, lt_module module);
|
||||
static void * vm_sym (lt_user_data loader_data, lt_module module,
|
||||
const char *symbolname);
|
||||
|
||||
static lt_dlvtable *vtable = 0;
|
||||
|
||||
/* Return the vtable for this loader, only the name and sym_prefix
|
||||
attributes (plus the virtual function implementations, obviously)
|
||||
change between loaders. */
|
||||
lt_dlvtable *
|
||||
get_vtable (lt_user_data loader_data)
|
||||
{
|
||||
if (!vtable)
|
||||
{
|
||||
vtable = lt__zalloc (sizeof *vtable);
|
||||
}
|
||||
|
||||
if (vtable && !vtable->name)
|
||||
{
|
||||
vtable->name = "lt_dyld";
|
||||
vtable->sym_prefix = "_";
|
||||
vtable->dlloader_init = vl_init;
|
||||
vtable->module_open = vm_open;
|
||||
vtable->module_close = vm_close;
|
||||
vtable->find_sym = vm_sym;
|
||||
vtable->dlloader_exit = vl_exit;
|
||||
vtable->dlloader_data = loader_data;
|
||||
vtable->priority = LT_DLLOADER_APPEND;
|
||||
}
|
||||
|
||||
if (vtable && (vtable->dlloader_data != loader_data))
|
||||
{
|
||||
LT__SETERROR (INIT_LOADER);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return vtable;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* --- IMPLEMENTATION --- */
|
||||
|
||||
|
||||
#if defined HAVE_MACH_O_DYLD_H
|
||||
# if !defined __APPLE_CC__ && !defined __MWERKS__ && !defined __private_extern__
|
||||
/* Is this correct? Does it still function properly? */
|
||||
# define __private_extern__ extern
|
||||
# endif
|
||||
# include <mach-o/dyld.h>
|
||||
#endif
|
||||
|
||||
#include <mach-o/getsect.h>
|
||||
|
||||
/* We have to put some stuff here that isn't in older dyld.h files */
|
||||
#if !defined ENUM_DYLD_BOOL
|
||||
# define ENUM_DYLD_BOOL
|
||||
# undef FALSE
|
||||
# undef TRUE
|
||||
enum DYLD_BOOL {
|
||||
FALSE,
|
||||
TRUE
|
||||
};
|
||||
#endif
|
||||
#if !defined LC_REQ_DYLD
|
||||
# define LC_REQ_DYLD 0x80000000
|
||||
#endif
|
||||
#if !defined LC_LOAD_WEAK_DYLIB
|
||||
# define LC_LOAD_WEAK_DYLIB (0x18 | LC_REQ_DYLD)
|
||||
#endif
|
||||
|
||||
#if !defined NSADDIMAGE_OPTION_NONE
|
||||
# define NSADDIMAGE_OPTION_NONE 0x0
|
||||
#endif
|
||||
#if !defined NSADDIMAGE_OPTION_RETURN_ON_ERROR
|
||||
# define NSADDIMAGE_OPTION_RETURN_ON_ERROR 0x1
|
||||
#endif
|
||||
#if !defined NSADDIMAGE_OPTION_WITH_SEARCHING
|
||||
# define NSADDIMAGE_OPTION_WITH_SEARCHING 0x2
|
||||
#endif
|
||||
#if !defined NSADDIMAGE_OPTION_RETURN_ONLY_IF_LOADED
|
||||
# define NSADDIMAGE_OPTION_RETURN_ONLY_IF_LOADED 0x4
|
||||
#endif
|
||||
#if !defined NSADDIMAGE_OPTION_MATCH_FILENAME_BY_INSTALLNAME
|
||||
# define NSADDIMAGE_OPTION_MATCH_FILENAME_BY_INSTALLNAME 0x8
|
||||
#endif
|
||||
|
||||
#if !defined NSLOOKUPSYMBOLINIMAGE_OPTION_BIND
|
||||
# define NSLOOKUPSYMBOLINIMAGE_OPTION_BIND 0x0
|
||||
#endif
|
||||
#if !defined NSLOOKUPSYMBOLINIMAGE_OPTION_BIND_NOW
|
||||
# define NSLOOKUPSYMBOLINIMAGE_OPTION_BIND_NOW 0x1
|
||||
#endif
|
||||
#if !defined NSLOOKUPSYMBOLINIMAGE_OPTION_BIND_FULLY
|
||||
# define NSLOOKUPSYMBOLINIMAGE_OPTION_BIND_FULLY 0x2
|
||||
#endif
|
||||
#if !defined NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR
|
||||
# define NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR 0x4
|
||||
#endif
|
||||
|
||||
#define LT__SYMLOOKUP_OPTS (NSLOOKUPSYMBOLINIMAGE_OPTION_BIND_NOW \
|
||||
| NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR)
|
||||
|
||||
#if defined __BIG_ENDIAN__
|
||||
# define LT__MAGIC MH_MAGIC
|
||||
#else
|
||||
# define LT__MAGIC MH_CIGAM
|
||||
#endif
|
||||
|
||||
#define DYLD__SETMYERROR(errmsg) LT__SETERRORSTR (dylderror (errmsg))
|
||||
#define DYLD__SETERROR(errcode) DYLD__SETMYERROR (LT__STRERROR (errcode))
|
||||
|
||||
typedef struct mach_header mach_header;
|
||||
typedef struct dylib_command dylib_command;
|
||||
|
||||
static const char *dylderror (const char *errmsg);
|
||||
static const mach_header *lt__nsmodule_get_header (NSModule module);
|
||||
static const char *lt__header_get_instnam (const mach_header *mh);
|
||||
static const mach_header *lt__match_loadedlib (const char *name);
|
||||
static NSSymbol lt__linkedlib_symbol (const char *symname, const mach_header *mh);
|
||||
|
||||
static const mach_header *(*lt__addimage) (const char *image_name,
|
||||
unsigned long options) = 0;
|
||||
static NSSymbol (*lt__image_symbol) (const mach_header *image,
|
||||
const char *symbolName,
|
||||
unsigned long options) = 0;
|
||||
static enum DYLD_BOOL (*lt__image_symbol_p) (const mach_header *image,
|
||||
const char *symbolName) = 0;
|
||||
static enum DYLD_BOOL (*lt__module_export) (NSModule module) = 0;
|
||||
|
||||
static int dyld_cannot_close = 0;
|
||||
|
||||
|
||||
/* A function called through the vtable when this loader is no
|
||||
longer needed by the application. */
|
||||
static int
|
||||
vl_exit (lt_user_data loader_data LT__UNUSED)
|
||||
{
|
||||
vtable = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* A function called through the vtable to initialise this loader. */
|
||||
static int
|
||||
vl_init (lt_user_data loader_data)
|
||||
{
|
||||
int errors = 0;
|
||||
|
||||
if (! dyld_cannot_close)
|
||||
{
|
||||
if (!_dyld_present ())
|
||||
{
|
||||
++errors;
|
||||
}
|
||||
else
|
||||
{
|
||||
(void) _dyld_func_lookup ("__dyld_NSAddImage",
|
||||
(unsigned long*) <__addimage);
|
||||
(void) _dyld_func_lookup ("__dyld_NSLookupSymbolInImage",
|
||||
(unsigned long*)<__image_symbol);
|
||||
(void) _dyld_func_lookup ("__dyld_NSIsSymbolNameDefinedInImage",
|
||||
(unsigned long*) <__image_symbol_p);
|
||||
(void) _dyld_func_lookup ("__dyld_NSMakePrivateModulePublic",
|
||||
(unsigned long*) <__module_export);
|
||||
dyld_cannot_close = lt_dladderror ("can't close a dylib");
|
||||
}
|
||||
}
|
||||
|
||||
return errors;
|
||||
}
|
||||
|
||||
|
||||
/* A function called through the vtable to open a module with this
|
||||
loader. Returns an opaque representation of the newly opened
|
||||
module for processing with this loader's other vtable functions. */
|
||||
static lt_module
|
||||
vm_open (lt_user_data loader_data, const char *filename,
|
||||
lt_dladvise advise LT__UNUSED)
|
||||
{
|
||||
lt_module module = 0;
|
||||
NSObjectFileImage ofi = 0;
|
||||
|
||||
if (!filename)
|
||||
{
|
||||
return (lt_module) -1;
|
||||
}
|
||||
|
||||
switch (NSCreateObjectFileImageFromFile (filename, &ofi))
|
||||
{
|
||||
case NSObjectFileImageSuccess:
|
||||
module = NSLinkModule (ofi, filename, NSLINKMODULE_OPTION_RETURN_ON_ERROR
|
||||
| NSLINKMODULE_OPTION_PRIVATE
|
||||
| NSLINKMODULE_OPTION_BINDNOW);
|
||||
NSDestroyObjectFileImage (ofi);
|
||||
|
||||
if (module)
|
||||
{
|
||||
lt__module_export (module);
|
||||
}
|
||||
break;
|
||||
|
||||
case NSObjectFileImageInappropriateFile:
|
||||
if (lt__image_symbol_p && lt__image_symbol)
|
||||
{
|
||||
module = (lt_module) lt__addimage(filename,
|
||||
NSADDIMAGE_OPTION_RETURN_ON_ERROR);
|
||||
}
|
||||
break;
|
||||
|
||||
case NSObjectFileImageFailure:
|
||||
case NSObjectFileImageArch:
|
||||
case NSObjectFileImageFormat:
|
||||
case NSObjectFileImageAccess:
|
||||
/*NOWORK*/
|
||||
break;
|
||||
}
|
||||
|
||||
if (!module)
|
||||
{
|
||||
DYLD__SETERROR (CANNOT_OPEN);
|
||||
}
|
||||
|
||||
return module;
|
||||
}
|
||||
|
||||
|
||||
/* A function called through the vtable when a particular module
|
||||
should be unloaded. */
|
||||
static int
|
||||
vm_close (lt_user_data loader_data, lt_module module)
|
||||
{
|
||||
int errors = 0;
|
||||
|
||||
if (module != (lt_module) -1)
|
||||
{
|
||||
const mach_header *mh = (const mach_header *) module;
|
||||
int flags = 0;
|
||||
if (mh->magic == LT__MAGIC)
|
||||
{
|
||||
lt_dlseterror (dyld_cannot_close);
|
||||
++errors;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Currently, if a module contains c++ static destructors and it
|
||||
is unloaded, we get a segfault in atexit(), due to compiler and
|
||||
dynamic loader differences of opinion, this works around that. */
|
||||
if ((const struct section *) NULL !=
|
||||
getsectbynamefromheader (lt__nsmodule_get_header (module),
|
||||
"__DATA", "__mod_term_func"))
|
||||
{
|
||||
flags |= NSUNLINKMODULE_OPTION_KEEP_MEMORY_MAPPED;
|
||||
}
|
||||
#if defined __ppc__
|
||||
flags |= NSUNLINKMODULE_OPTION_RESET_LAZY_REFERENCES;
|
||||
#endif
|
||||
if (!NSUnLinkModule (module, flags))
|
||||
{
|
||||
DYLD__SETERROR (CANNOT_CLOSE);
|
||||
++errors;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return errors;
|
||||
}
|
||||
|
||||
/* A function called through the vtable to get the address of
|
||||
a symbol loaded from a particular module. */
|
||||
static void *
|
||||
vm_sym (lt_user_data loader_data, lt_module module, const char *name)
|
||||
{
|
||||
NSSymbol *nssym = 0;
|
||||
const mach_header *mh = (const mach_header *) module;
|
||||
char saveError[256] = "Symbol not found";
|
||||
|
||||
if (module == (lt_module) -1)
|
||||
{
|
||||
void *address, *unused;
|
||||
_dyld_lookup_and_bind (name, (unsigned long*) &address, &unused);
|
||||
return address;
|
||||
}
|
||||
|
||||
if (mh->magic == LT__MAGIC)
|
||||
{
|
||||
if (lt__image_symbol_p && lt__image_symbol)
|
||||
{
|
||||
if (lt__image_symbol_p (mh, name))
|
||||
{
|
||||
nssym = lt__image_symbol (mh, name, LT__SYMLOOKUP_OPTS);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
nssym = NSLookupSymbolInModule (module, name);
|
||||
}
|
||||
|
||||
if (!nssym)
|
||||
{
|
||||
strlcpy (saveError, dylderror (LT__STRERROR (SYMBOL_NOT_FOUND)), 255);
|
||||
saveError[255] = 0;
|
||||
if (!mh)
|
||||
{
|
||||
mh = (mach_header *)lt__nsmodule_get_header (module);
|
||||
}
|
||||
nssym = lt__linkedlib_symbol (name, mh);
|
||||
}
|
||||
|
||||
if (!nssym)
|
||||
{
|
||||
LT__SETERRORSTR (saveError);
|
||||
}
|
||||
|
||||
return nssym ? NSAddressOfSymbol (nssym) : 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* --- HELPER FUNCTIONS --- */
|
||||
|
||||
|
||||
/* Return the dyld error string, or the passed in error string if none. */
|
||||
static const char *
|
||||
dylderror (const char *errmsg)
|
||||
{
|
||||
NSLinkEditErrors ler;
|
||||
int lerno;
|
||||
const char *file;
|
||||
const char *errstr;
|
||||
|
||||
NSLinkEditError (&ler, &lerno, &file, &errstr);
|
||||
|
||||
if (! (errstr && *errstr))
|
||||
{
|
||||
errstr = errmsg;
|
||||
}
|
||||
|
||||
return errstr;
|
||||
}
|
||||
|
||||
/* There should probably be an apple dyld api for this. */
|
||||
static const mach_header *
|
||||
lt__nsmodule_get_header (NSModule module)
|
||||
{
|
||||
int i = _dyld_image_count();
|
||||
const char *modname = NSNameOfModule (module);
|
||||
const mach_header *mh = 0;
|
||||
|
||||
if (!modname)
|
||||
return NULL;
|
||||
|
||||
while (i > 0)
|
||||
{
|
||||
--i;
|
||||
if (strneq (_dyld_get_image_name (i), modname))
|
||||
{
|
||||
mh = _dyld_get_image_header (i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return mh;
|
||||
}
|
||||
|
||||
/* NSAddImage is also used to get the loaded image, but it only works if
|
||||
the lib is installed, for uninstalled libs we need to check the
|
||||
install_names against each other. Note that this is still broken if
|
||||
DYLD_IMAGE_SUFFIX is set and a different lib was loaded as a result. */
|
||||
static const char *
|
||||
lt__header_get_instnam (const mach_header *mh)
|
||||
{
|
||||
unsigned long offset = sizeof(mach_header);
|
||||
const char* result = 0;
|
||||
int j;
|
||||
|
||||
for (j = 0; j < mh->ncmds; j++)
|
||||
{
|
||||
struct load_command *lc;
|
||||
|
||||
lc = (struct load_command*) (((unsigned long) mh) + offset);
|
||||
if (LC_ID_DYLIB == lc->cmd)
|
||||
{
|
||||
result=(char*)(((dylib_command*) lc)->dylib.name.offset +
|
||||
(unsigned long) lc);
|
||||
}
|
||||
offset += lc->cmdsize;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static const mach_header *
|
||||
lt__match_loadedlib (const char *name)
|
||||
{
|
||||
const mach_header *mh = 0;
|
||||
int i = _dyld_image_count();
|
||||
|
||||
while (i > 0)
|
||||
{
|
||||
const char *id;
|
||||
|
||||
--i;
|
||||
id = lt__header_get_instnam (_dyld_get_image_header (i));
|
||||
if (id && strneq (id, name))
|
||||
{
|
||||
mh = _dyld_get_image_header (i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return mh;
|
||||
}
|
||||
|
||||
/* Safe to assume our mh is good. */
|
||||
static NSSymbol
|
||||
lt__linkedlib_symbol (const char *symname, const mach_header *mh)
|
||||
{
|
||||
NSSymbol symbol = 0;
|
||||
|
||||
if (lt__image_symbol && NSIsSymbolNameDefined (symname))
|
||||
{
|
||||
unsigned long offset = sizeof(mach_header);
|
||||
struct load_command *lc;
|
||||
int j;
|
||||
|
||||
for (j = 0; j < mh->ncmds; j++)
|
||||
{
|
||||
lc = (struct load_command*) (((unsigned long) mh) + offset);
|
||||
if ((LC_LOAD_DYLIB == lc->cmd) || (LC_LOAD_WEAK_DYLIB == lc->cmd))
|
||||
{
|
||||
unsigned long base = ((dylib_command *) lc)->dylib.name.offset;
|
||||
char *name = (char *) (base + (unsigned long) lc);
|
||||
const mach_header *mh1 = lt__match_loadedlib (name);
|
||||
|
||||
if (!mh1)
|
||||
{
|
||||
/* Maybe NSAddImage can find it */
|
||||
mh1 = lt__addimage (name,
|
||||
NSADDIMAGE_OPTION_RETURN_ONLY_IF_LOADED
|
||||
| NSADDIMAGE_OPTION_WITH_SEARCHING
|
||||
| NSADDIMAGE_OPTION_RETURN_ON_ERROR);
|
||||
}
|
||||
|
||||
if (mh1)
|
||||
{
|
||||
symbol = lt__image_symbol (mh1, symname, LT__SYMLOOKUP_OPTS);
|
||||
if (symbol)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
offset += lc->cmdsize;
|
||||
}
|
||||
}
|
||||
|
||||
return symbol;
|
||||
}
|
||||
@ -1,167 +0,0 @@
|
||||
/* loader-load_add_on.c -- dynamic linking for BeOS
|
||||
|
||||
Copyright (C) 1998-2000, 2004, 2006-2008, 2011-2019, 2021-2022 Free
|
||||
Software Foundation, Inc.
|
||||
Written by Thomas Tanner, 1998
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the
|
||||
GNU Libtool package. Report bugs to bug-libtool@gnu.org.
|
||||
|
||||
GNU Libltdl is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
As a special exception to the GNU Lesser General Public License,
|
||||
if you distribute this file as part of a program or library that
|
||||
is built using GNU Libtool, you may include this file under the
|
||||
same distribution terms that you use for the rest of that program.
|
||||
|
||||
GNU Libltdl is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with GNU Libltdl; see the file COPYING.LIB. If not, a
|
||||
copy can be downloaded from http://www.gnu.org/licenses/lgpl.html,
|
||||
or obtained by writing to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include "lt__private.h"
|
||||
#include "lt_dlloader.h"
|
||||
|
||||
/* Use the preprocessor to rename non-static symbols to avoid namespace
|
||||
collisions when the loader code is statically linked into libltdl.
|
||||
Use the "<module_name>_LTX_" prefix so that the symbol addresses can
|
||||
be fetched from the preloaded symbol list by lt_dlsym(): */
|
||||
#define get_vtable load_add_on_LTX_get_vtable
|
||||
|
||||
LT_BEGIN_C_DECLS
|
||||
LT_SCOPE lt_dlvtable *get_vtable (lt_user_data loader_data);
|
||||
LT_END_C_DECLS
|
||||
|
||||
|
||||
/* Boilerplate code to set up the vtable for hooking this loader into
|
||||
libltdl's loader list: */
|
||||
static int vl_exit (lt_user_data loader_data);
|
||||
static lt_module vm_open (lt_user_data loader_data, const char *filename,
|
||||
lt_dladvise advise);
|
||||
static int vm_close (lt_user_data loader_data, lt_module module);
|
||||
static void * vm_sym (lt_user_data loader_data, lt_module module,
|
||||
const char *symbolname);
|
||||
|
||||
static lt_dlvtable *vtable = 0;
|
||||
|
||||
/* Return the vtable for this loader, only the name and sym_prefix
|
||||
attributes (plus the virtual function implementations, obviously)
|
||||
change between loaders. */
|
||||
lt_dlvtable *
|
||||
get_vtable (lt_user_data loader_data)
|
||||
{
|
||||
if (!vtable)
|
||||
{
|
||||
vtable = lt__zalloc (sizeof *vtable);
|
||||
}
|
||||
|
||||
if (vtable && !vtable->name)
|
||||
{
|
||||
vtable->name = "lt_load_add_on";
|
||||
vtable->module_open = vm_open;
|
||||
vtable->module_close = vm_close;
|
||||
vtable->find_sym = vm_sym;
|
||||
vtable->dlloader_exit = vl_exit;
|
||||
vtable->dlloader_data = loader_data;
|
||||
vtable->priority = LT_DLLOADER_APPEND;
|
||||
}
|
||||
|
||||
if (vtable && (vtable->dlloader_data != loader_data))
|
||||
{
|
||||
LT__SETERROR (INIT_LOADER);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return vtable;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* --- IMPLEMENTATION --- */
|
||||
|
||||
|
||||
#include <kernel/image.h>
|
||||
|
||||
/* A function called through the vtable when this loader is no
|
||||
longer needed by the application. */
|
||||
static int
|
||||
vl_exit (lt_user_data loader_data LT__UNUSED)
|
||||
{
|
||||
vtable = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* A function called through the vtable to open a module with this
|
||||
loader. Returns an opaque representation of the newly opened
|
||||
module for processing with this loader's other vtable functions. */
|
||||
static lt_module
|
||||
vm_open (lt_user_data loader_data LT__UNUSED, const char *filename,
|
||||
lt_dladvise advise LT__UNUSED)
|
||||
{
|
||||
image_id image = 0;
|
||||
|
||||
if (filename)
|
||||
{
|
||||
image = load_add_on (filename);
|
||||
}
|
||||
else
|
||||
{
|
||||
image_info info;
|
||||
int32 cookie = 0;
|
||||
if (get_next_image_info (0, &cookie, &info) == B_OK)
|
||||
image = load_add_on (info.name);
|
||||
}
|
||||
|
||||
if (image <= 0)
|
||||
{
|
||||
LT__SETERROR (CANNOT_OPEN);
|
||||
image = 0;
|
||||
}
|
||||
|
||||
return (lt_module) image;
|
||||
}
|
||||
|
||||
|
||||
/* A function called through the vtable when a particular module
|
||||
should be unloaded. */
|
||||
static int
|
||||
vm_close (lt_user_data loader_data LT__UNUSED, lt_module module)
|
||||
{
|
||||
int errors = 0;
|
||||
|
||||
if (unload_add_on ((image_id) module) != B_OK)
|
||||
{
|
||||
LT__SETERROR (CANNOT_CLOSE);
|
||||
++errors;
|
||||
}
|
||||
|
||||
return errors;
|
||||
}
|
||||
|
||||
|
||||
/* A function called through the vtable to get the address of
|
||||
a symbol loaded from a particular module. */
|
||||
static void *
|
||||
vm_sym (lt_user_data loader_data LT__UNUSED, lt_module module, const char *name)
|
||||
{
|
||||
void *address = 0;
|
||||
image_id image = (image_id) module;
|
||||
|
||||
if (get_image_symbol (image, name, B_SYMBOL_TYPE_ANY, address) != B_OK)
|
||||
{
|
||||
LT__SETERROR (SYMBOL_NOT_FOUND);
|
||||
address = 0;
|
||||
}
|
||||
|
||||
return address;
|
||||
}
|
||||
@ -1,369 +0,0 @@
|
||||
/* loader-loadlibrary.c -- dynamic linking for Win32
|
||||
|
||||
Copyright (C) 1998-2000, 2004-2008, 2010-2019, 2021-2022 Free
|
||||
Software Foundation, Inc.
|
||||
Written by Thomas Tanner, 1998
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the
|
||||
GNU Libtool package. Report bugs to bug-libtool@gnu.org.
|
||||
|
||||
GNU Libltdl is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
As a special exception to the GNU Lesser General Public License,
|
||||
if you distribute this file as part of a program or library that
|
||||
is built using GNU Libtool, you may include this file under the
|
||||
same distribution terms that you use for the rest of that program.
|
||||
|
||||
GNU Libltdl is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with GNU Libltdl; see the file COPYING.LIB. If not, a
|
||||
copy can be downloaded from http://www.gnu.org/licenses/lgpl.html,
|
||||
or obtained by writing to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include "lt__private.h"
|
||||
#include "lt_dlloader.h"
|
||||
|
||||
#if defined __CYGWIN__
|
||||
# include <sys/cygwin.h>
|
||||
#endif
|
||||
|
||||
/* Use the preprocessor to rename non-static symbols to avoid namespace
|
||||
collisions when the loader code is statically linked into libltdl.
|
||||
Use the "<module_name>_LTX_" prefix so that the symbol addresses can
|
||||
be fetched from the preloaded symbol list by lt_dlsym(): */
|
||||
#define get_vtable loadlibrary_LTX_get_vtable
|
||||
|
||||
LT_BEGIN_C_DECLS
|
||||
LT_SCOPE lt_dlvtable *get_vtable (lt_user_data loader_data);
|
||||
LT_END_C_DECLS
|
||||
|
||||
|
||||
/* Boilerplate code to set up the vtable for hooking this loader into
|
||||
libltdl's loader list: */
|
||||
static int vl_exit (lt_user_data loader_data);
|
||||
static lt_module vm_open (lt_user_data loader_data, const char *filename,
|
||||
lt_dladvise advise);
|
||||
static int vm_close (lt_user_data loader_data, lt_module module);
|
||||
static void * vm_sym (lt_user_data loader_data, lt_module module,
|
||||
const char *symbolname);
|
||||
|
||||
static lt_dlinterface_id iface_id = 0;
|
||||
static lt_dlvtable *vtable = 0;
|
||||
|
||||
/* Return the vtable for this loader, only the name and sym_prefix
|
||||
attributes (plus the virtual function implementations, obviously)
|
||||
change between loaders. */
|
||||
lt_dlvtable *
|
||||
get_vtable (lt_user_data loader_data)
|
||||
{
|
||||
if (!vtable)
|
||||
{
|
||||
vtable = (lt_dlvtable *) lt__zalloc (sizeof *vtable);
|
||||
iface_id = lt_dlinterface_register ("ltdl loadlibrary", NULL);
|
||||
}
|
||||
|
||||
if (vtable && !vtable->name)
|
||||
{
|
||||
vtable->name = "lt_loadlibrary";
|
||||
vtable->module_open = vm_open;
|
||||
vtable->module_close = vm_close;
|
||||
vtable->find_sym = vm_sym;
|
||||
vtable->dlloader_exit = vl_exit;
|
||||
vtable->dlloader_data = loader_data;
|
||||
vtable->priority = LT_DLLOADER_APPEND;
|
||||
}
|
||||
|
||||
if (vtable && (vtable->dlloader_data != loader_data))
|
||||
{
|
||||
LT__SETERROR (INIT_LOADER);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return vtable;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* --- IMPLEMENTATION --- */
|
||||
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#define LOCALFREE(mem) LT_STMT_START { \
|
||||
if (mem) { LocalFree ((void *)mem); mem = NULL; } } LT_STMT_END
|
||||
#define LOADLIB__SETERROR(errmsg) LT__SETERRORSTR (loadlibraryerror (errmsg))
|
||||
#define LOADLIB_SETERROR(errcode) LOADLIB__SETERROR (LT__STRERROR (errcode))
|
||||
|
||||
static const char *loadlibraryerror (const char *default_errmsg);
|
||||
static DWORD WINAPI wrap_getthreaderrormode (void);
|
||||
static DWORD WINAPI fallback_getthreaderrormode (void);
|
||||
static BOOL WINAPI wrap_setthreaderrormode (DWORD mode, DWORD *oldmode);
|
||||
static BOOL WINAPI fallback_setthreaderrormode (DWORD mode, DWORD *oldmode);
|
||||
|
||||
typedef DWORD (WINAPI getthreaderrormode_type) (void);
|
||||
typedef BOOL (WINAPI setthreaderrormode_type) (DWORD, DWORD *);
|
||||
|
||||
static getthreaderrormode_type *getthreaderrormode = wrap_getthreaderrormode;
|
||||
static setthreaderrormode_type *setthreaderrormode = wrap_setthreaderrormode;
|
||||
static char *error_message = 0;
|
||||
|
||||
|
||||
/* A function called through the vtable when this loader is no
|
||||
longer needed by the application. */
|
||||
static int
|
||||
vl_exit (lt_user_data loader_data LT__UNUSED)
|
||||
{
|
||||
vtable = NULL;
|
||||
LOCALFREE (error_message);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* A function called through the vtable to open a module with this
|
||||
loader. Returns an opaque representation of the newly opened
|
||||
module for processing with this loader's other vtable functions. */
|
||||
static lt_module
|
||||
vm_open (lt_user_data loader_data LT__UNUSED, const char *filename,
|
||||
lt_dladvise advise LT__UNUSED)
|
||||
{
|
||||
lt_module module = 0;
|
||||
char *ext;
|
||||
char wpath[MAX_PATH];
|
||||
size_t len;
|
||||
|
||||
if (!filename)
|
||||
{
|
||||
/* Get the name of main module */
|
||||
*wpath = 0;
|
||||
GetModuleFileName (NULL, wpath, sizeof (wpath));
|
||||
filename = wpath;
|
||||
}
|
||||
else
|
||||
{
|
||||
len = LT_STRLEN (filename);
|
||||
|
||||
if (len >= MAX_PATH)
|
||||
{
|
||||
LT__SETERROR (CANNOT_OPEN);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if HAVE_DECL_CYGWIN_CONV_PATH
|
||||
if (cygwin_conv_path (CCP_POSIX_TO_WIN_A, filename, wpath, MAX_PATH))
|
||||
{
|
||||
LT__SETERROR (CANNOT_OPEN);
|
||||
return 0;
|
||||
}
|
||||
len = 0;
|
||||
#elif defined __CYGWIN__
|
||||
cygwin_conv_to_full_win32_path (filename, wpath);
|
||||
len = 0;
|
||||
#else
|
||||
strcpy(wpath, filename);
|
||||
#endif
|
||||
|
||||
ext = strrchr (wpath, '.');
|
||||
if (!ext)
|
||||
{
|
||||
/* Append a '.' to stop Windows from adding an
|
||||
implicit '.dll' extension. */
|
||||
if (!len)
|
||||
len = strlen (wpath);
|
||||
|
||||
if (len + 1 >= MAX_PATH)
|
||||
{
|
||||
LT__SETERROR (CANNOT_OPEN);
|
||||
return 0;
|
||||
}
|
||||
|
||||
wpath[len] = '.';
|
||||
wpath[len+1] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
/* Silence dialog from LoadLibrary on some failures. */
|
||||
DWORD errormode = getthreaderrormode ();
|
||||
DWORD last_error;
|
||||
|
||||
setthreaderrormode (errormode | SEM_FAILCRITICALERRORS, NULL);
|
||||
|
||||
module = LoadLibrary (wpath);
|
||||
|
||||
/* Restore the error mode. */
|
||||
last_error = GetLastError ();
|
||||
setthreaderrormode (errormode, NULL);
|
||||
SetLastError (last_error);
|
||||
}
|
||||
|
||||
/* libltdl expects this function to fail if it is unable
|
||||
to physically load the library. Sadly, LoadLibrary
|
||||
will search the loaded libraries for a match and return
|
||||
one of them if the path search load fails.
|
||||
|
||||
We check whether LoadLibrary is returning a handle to
|
||||
an already loaded module, and simulate failure if we
|
||||
find one. */
|
||||
{
|
||||
lt_dlhandle cur = 0;
|
||||
|
||||
while ((cur = lt_dlhandle_iterate (iface_id, cur)))
|
||||
{
|
||||
if (!cur->module)
|
||||
{
|
||||
cur = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (cur->module == module)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!module)
|
||||
LOADLIB_SETERROR (CANNOT_OPEN);
|
||||
else if (cur)
|
||||
{
|
||||
LT__SETERROR (CANNOT_OPEN);
|
||||
module = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return module;
|
||||
}
|
||||
|
||||
|
||||
/* A function called through the vtable when a particular module
|
||||
should be unloaded. */
|
||||
static int
|
||||
vm_close (lt_user_data loader_data LT__UNUSED, lt_module module)
|
||||
{
|
||||
int errors = 0;
|
||||
|
||||
if (FreeLibrary ((HMODULE) module) == 0)
|
||||
{
|
||||
LOADLIB_SETERROR (CANNOT_CLOSE);
|
||||
++errors;
|
||||
}
|
||||
|
||||
return errors;
|
||||
}
|
||||
|
||||
|
||||
/* A function called through the vtable to get the address of
|
||||
a symbol loaded from a particular module. */
|
||||
static void *
|
||||
vm_sym (lt_user_data loader_data LT__UNUSED, lt_module module, const char *name)
|
||||
{
|
||||
void *address = (void *) GetProcAddress ((HMODULE) module, name);
|
||||
|
||||
if (!address)
|
||||
{
|
||||
LOADLIB_SETERROR (SYMBOL_NOT_FOUND);
|
||||
}
|
||||
|
||||
return address;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* --- HELPER FUNCTIONS --- */
|
||||
|
||||
|
||||
/* Return the windows error message, or the passed in error message on
|
||||
failure. */
|
||||
static const char *
|
||||
loadlibraryerror (const char *default_errmsg)
|
||||
{
|
||||
size_t len;
|
||||
LOCALFREE (error_message);
|
||||
|
||||
FormatMessageA (FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
||||
FORMAT_MESSAGE_FROM_SYSTEM |
|
||||
FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||
NULL,
|
||||
GetLastError (),
|
||||
0,
|
||||
(char *) &error_message,
|
||||
0, NULL);
|
||||
|
||||
/* Remove trailing CRNL */
|
||||
len = LT_STRLEN (error_message);
|
||||
if (len && error_message[len - 1] == '\n')
|
||||
error_message[--len] = LT_EOS_CHAR;
|
||||
if (len && error_message[len - 1] == '\r')
|
||||
error_message[--len] = LT_EOS_CHAR;
|
||||
|
||||
return len ? error_message : default_errmsg;
|
||||
}
|
||||
|
||||
/* A function called through the getthreaderrormode variable that checks
|
||||
if the system supports GetThreadErrorMode (or GetErrorMode) and arranges
|
||||
for it or a fallback implementation to be called directly in the future.
|
||||
The selected version is then called. */
|
||||
static DWORD WINAPI
|
||||
wrap_getthreaderrormode (void)
|
||||
{
|
||||
HMODULE kernel32 = GetModuleHandleA ("kernel32.dll");
|
||||
getthreaderrormode
|
||||
= (getthreaderrormode_type *) GetProcAddress (kernel32,
|
||||
"GetThreadErrorMode");
|
||||
if (!getthreaderrormode)
|
||||
getthreaderrormode
|
||||
= (getthreaderrormode_type *) GetProcAddress (kernel32,
|
||||
"GetErrorMode");
|
||||
if (!getthreaderrormode)
|
||||
getthreaderrormode = fallback_getthreaderrormode;
|
||||
return getthreaderrormode ();
|
||||
}
|
||||
|
||||
/* A function called through the getthreaderrormode variable for cases
|
||||
where the system does not support GetThreadErrorMode or GetErrorMode */
|
||||
static DWORD WINAPI
|
||||
fallback_getthreaderrormode (void)
|
||||
{
|
||||
/* Prior to Windows Vista, the only way to get the current error
|
||||
mode was to set a new one. In our case, we are setting a new
|
||||
error mode right after "getting" it while ignoring the error
|
||||
mode in effect when setting the new error mode, so that's
|
||||
fairly ok. */
|
||||
return (DWORD) SetErrorMode (SEM_FAILCRITICALERRORS);
|
||||
}
|
||||
|
||||
/* A function called through the setthreaderrormode variable that checks
|
||||
if the system supports SetThreadErrorMode and arranges for it or a
|
||||
fallback implementation to be called directly in the future.
|
||||
The selected version is then called. */
|
||||
static BOOL WINAPI
|
||||
wrap_setthreaderrormode (DWORD mode, DWORD *oldmode)
|
||||
{
|
||||
HMODULE kernel32 = GetModuleHandleA ("kernel32.dll");
|
||||
setthreaderrormode
|
||||
= (setthreaderrormode_type *) GetProcAddress (kernel32,
|
||||
"SetThreadErrorMode");
|
||||
if (!setthreaderrormode)
|
||||
setthreaderrormode = fallback_setthreaderrormode;
|
||||
return setthreaderrormode (mode, oldmode);
|
||||
}
|
||||
|
||||
/* A function called through the setthreaderrormode variable for cases
|
||||
where the system does not support SetThreadErrorMode. */
|
||||
static BOOL WINAPI
|
||||
fallback_setthreaderrormode (DWORD mode, DWORD *oldmode)
|
||||
{
|
||||
/* Prior to Windows 7, there was no way to set the thread local error
|
||||
mode, so set the process global error mode instead. */
|
||||
DWORD old = (DWORD) SetErrorMode (mode);
|
||||
if (oldmode)
|
||||
*oldmode = old;
|
||||
return TRUE;
|
||||
}
|
||||
@ -1,387 +0,0 @@
|
||||
/* loader-preopen.c -- emulate dynamic linking using preloaded_symbols
|
||||
|
||||
Copyright (C) 1998-2000, 2004, 2006-2008, 2011-2019, 2021-2022 Free
|
||||
Software Foundation, Inc.
|
||||
Written by Thomas Tanner, 1998
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the
|
||||
GNU Libtool package. Report bugs to bug-libtool@gnu.org.
|
||||
|
||||
GNU Libltdl is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
As a special exception to the GNU Lesser General Public License,
|
||||
if you distribute this file as part of a program or library that
|
||||
is built using GNU Libtool, you may include this file under the
|
||||
same distribution terms that you use for the rest of that program.
|
||||
|
||||
GNU Libltdl is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with GNU Libltdl; see the file COPYING.LIB. If not, a
|
||||
copy can be downloaded from http://www.gnu.org/licenses/lgpl.html,
|
||||
or obtained by writing to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include "lt__private.h"
|
||||
#include "lt_dlloader.h"
|
||||
|
||||
/* Use the preprocessor to rename non-static symbols to avoid namespace
|
||||
collisions when the loader code is statically linked into libltdl.
|
||||
Use the "<module_name>_LTX_" prefix so that the symbol addresses can
|
||||
be fetched from the preloaded symbol list by lt_dlsym(): */
|
||||
#define get_vtable preopen_LTX_get_vtable
|
||||
|
||||
LT_BEGIN_C_DECLS
|
||||
LT_SCOPE lt_dlvtable *get_vtable (lt_user_data loader_data);
|
||||
LT_END_C_DECLS
|
||||
|
||||
|
||||
/* Boilerplate code to set up the vtable for hooking this loader into
|
||||
libltdl's loader list: */
|
||||
static int vl_init (lt_user_data loader_data);
|
||||
static int vl_exit (lt_user_data loader_data);
|
||||
static lt_module vm_open (lt_user_data loader_data, const char *filename,
|
||||
lt_dladvise advise);
|
||||
static int vm_close (lt_user_data loader_data, lt_module module);
|
||||
static void * vm_sym (lt_user_data loader_data, lt_module module,
|
||||
const char *symbolname);
|
||||
|
||||
static lt_dlvtable *vtable = 0;
|
||||
|
||||
/* Return the vtable for this loader, only the name and sym_prefix
|
||||
attributes (plus the virtual function implementations, obviously)
|
||||
change between loaders. */
|
||||
lt_dlvtable *
|
||||
get_vtable (lt_user_data loader_data)
|
||||
{
|
||||
if (!vtable)
|
||||
{
|
||||
vtable = (lt_dlvtable *) lt__zalloc (sizeof *vtable);
|
||||
}
|
||||
|
||||
if (vtable && !vtable->name)
|
||||
{
|
||||
vtable->name = "lt_preopen";
|
||||
vtable->sym_prefix = 0;
|
||||
vtable->module_open = vm_open;
|
||||
vtable->module_close = vm_close;
|
||||
vtable->find_sym = vm_sym;
|
||||
vtable->dlloader_init = vl_init;
|
||||
vtable->dlloader_exit = vl_exit;
|
||||
vtable->dlloader_data = loader_data;
|
||||
vtable->priority = LT_DLLOADER_PREPEND;
|
||||
}
|
||||
|
||||
if (vtable && (vtable->dlloader_data != loader_data))
|
||||
{
|
||||
LT__SETERROR (INIT_LOADER);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return vtable;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* --- IMPLEMENTATION --- */
|
||||
|
||||
|
||||
/* Wrapper type to chain together symbol lists of various origins. */
|
||||
typedef struct symlist_chain
|
||||
{
|
||||
struct symlist_chain *next;
|
||||
const lt_dlsymlist *symlist;
|
||||
} symlist_chain;
|
||||
|
||||
|
||||
static int add_symlist (const lt_dlsymlist *symlist);
|
||||
static int free_symlists (void);
|
||||
|
||||
/* The start of the symbol lists chain. */
|
||||
static symlist_chain *preloaded_symlists = 0;
|
||||
|
||||
/* A symbol list preloaded before lt_init() was called. */
|
||||
static const lt_dlsymlist *default_preloaded_symbols = 0;
|
||||
|
||||
|
||||
/* A function called through the vtable to initialise this loader. */
|
||||
static int
|
||||
vl_init (lt_user_data loader_data LT__UNUSED)
|
||||
{
|
||||
int errors = 0;
|
||||
|
||||
preloaded_symlists = 0;
|
||||
if (default_preloaded_symbols)
|
||||
{
|
||||
errors = lt_dlpreload (default_preloaded_symbols);
|
||||
}
|
||||
|
||||
return errors;
|
||||
}
|
||||
|
||||
|
||||
/* A function called through the vtable when this loader is no
|
||||
longer needed by the application. */
|
||||
static int
|
||||
vl_exit (lt_user_data loader_data LT__UNUSED)
|
||||
{
|
||||
vtable = NULL;
|
||||
free_symlists ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* A function called through the vtable to open a module with this
|
||||
loader. Returns an opaque representation of the newly opened
|
||||
module for processing with this loader's other vtable functions. */
|
||||
static lt_module
|
||||
vm_open (lt_user_data loader_data LT__UNUSED, const char *filename,
|
||||
lt_dladvise advise LT__UNUSED)
|
||||
{
|
||||
symlist_chain *lists;
|
||||
lt_module module = 0;
|
||||
|
||||
if (!preloaded_symlists)
|
||||
{
|
||||
LT__SETERROR (NO_SYMBOLS);
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Can't use NULL as the reflective symbol header, as NULL is
|
||||
used to mark the end of the entire symbol list. Self-dlpreopened
|
||||
symbols follow this magic number, chosen to be an unlikely
|
||||
clash with a real module name. */
|
||||
if (!filename)
|
||||
{
|
||||
filename = "@PROGRAM@";
|
||||
}
|
||||
|
||||
for (lists = preloaded_symlists; lists; lists = lists->next)
|
||||
{
|
||||
const lt_dlsymlist *symbol;
|
||||
for (symbol= lists->symlist; symbol->name; ++symbol)
|
||||
{
|
||||
if (!symbol->address && STREQ (symbol->name, filename))
|
||||
{
|
||||
/* If the next symbol's name and address is 0, it means
|
||||
the module just contains the originator and no symbols.
|
||||
In this case we pretend that we never saw the module and
|
||||
hope that some other loader will be able to load the module
|
||||
and have access to its symbols */
|
||||
const lt_dlsymlist *next_symbol = symbol +1;
|
||||
if (next_symbol->address && next_symbol->name)
|
||||
{
|
||||
module = (lt_module) lists->symlist;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LT__SETERROR (FILE_NOT_FOUND);
|
||||
|
||||
done:
|
||||
return module;
|
||||
}
|
||||
|
||||
|
||||
/* A function called through the vtable when a particular module
|
||||
should be unloaded. */
|
||||
static int
|
||||
vm_close (lt_user_data loader_data LT__UNUSED, lt_module module LT__UNUSED)
|
||||
{
|
||||
/* Just to silence gcc -Wall */
|
||||
module = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* A function called through the vtable to get the address of
|
||||
a symbol loaded from a particular module. */
|
||||
static void *
|
||||
vm_sym (lt_user_data loader_data LT__UNUSED, lt_module module, const char *name)
|
||||
{
|
||||
lt_dlsymlist *symbol = (lt_dlsymlist*) module;
|
||||
|
||||
if (symbol[1].name && STREQ (symbol[1].name, "@INIT@"))
|
||||
{
|
||||
symbol++; /* Skip optional init entry. */
|
||||
}
|
||||
|
||||
symbol +=2; /* Skip header (originator then libname). */
|
||||
|
||||
while (symbol->name)
|
||||
{
|
||||
if (STREQ (symbol->name, name))
|
||||
{
|
||||
return symbol->address;
|
||||
}
|
||||
|
||||
++symbol;
|
||||
}
|
||||
|
||||
LT__SETERROR (SYMBOL_NOT_FOUND);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* --- HELPER FUNCTIONS --- */
|
||||
|
||||
|
||||
/* The symbol lists themselves are not allocated from the heap, but
|
||||
we can unhook them and free up the chain of links between them. */
|
||||
static int
|
||||
free_symlists (void)
|
||||
{
|
||||
symlist_chain *lists;
|
||||
|
||||
lists = preloaded_symlists;
|
||||
while (lists)
|
||||
{
|
||||
symlist_chain *next = lists->next;
|
||||
FREE (lists);
|
||||
lists = next;
|
||||
}
|
||||
preloaded_symlists = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Add a new symbol list to the global chain. */
|
||||
static int
|
||||
add_symlist (const lt_dlsymlist *symlist)
|
||||
{
|
||||
symlist_chain *lists;
|
||||
int errors = 0;
|
||||
|
||||
/* Search for duplicate entries: */
|
||||
for (lists = preloaded_symlists;
|
||||
lists && lists->symlist != symlist; lists = lists->next)
|
||||
/*NOWORK*/;
|
||||
|
||||
/* Don't add the same list twice: */
|
||||
if (!lists)
|
||||
{
|
||||
symlist_chain *tmp = (symlist_chain *) lt__zalloc (sizeof *tmp);
|
||||
|
||||
if (tmp)
|
||||
{
|
||||
tmp->symlist = symlist;
|
||||
tmp->next = preloaded_symlists;
|
||||
preloaded_symlists = tmp;
|
||||
|
||||
if (symlist[1].name && STREQ (symlist[1].name, "@INIT@"))
|
||||
{
|
||||
void (*init_symlist)(void);
|
||||
*(void **)(&init_symlist) = symlist[1].address;
|
||||
(*init_symlist)();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
++errors;
|
||||
}
|
||||
}
|
||||
|
||||
return errors;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* --- PRELOADING API CALL IMPLEMENTATIONS --- */
|
||||
|
||||
|
||||
/* Save a default symbol list for later. */
|
||||
int
|
||||
lt_dlpreload_default (const lt_dlsymlist *preloaded)
|
||||
{
|
||||
default_preloaded_symbols = preloaded;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* Add a symbol list to the global chain, or with a NULL argument,
|
||||
revert to just the default list. */
|
||||
int
|
||||
lt_dlpreload (const lt_dlsymlist *preloaded)
|
||||
{
|
||||
int errors = 0;
|
||||
|
||||
if (preloaded)
|
||||
{
|
||||
errors = add_symlist (preloaded);
|
||||
}
|
||||
else
|
||||
{
|
||||
free_symlists();
|
||||
|
||||
if (default_preloaded_symbols)
|
||||
{
|
||||
errors = lt_dlpreload (default_preloaded_symbols);
|
||||
}
|
||||
}
|
||||
|
||||
return errors;
|
||||
}
|
||||
|
||||
|
||||
/* Open all the preloaded modules from the named originator, executing
|
||||
a callback for each one. If ORIGINATOR is NULL, then call FUNC for
|
||||
each preloaded module from the program itself. */
|
||||
int
|
||||
lt_dlpreload_open (const char *originator, lt_dlpreload_callback_func *func)
|
||||
{
|
||||
symlist_chain *list;
|
||||
int errors = 0;
|
||||
int found = 0;
|
||||
|
||||
/* For each symlist in the chain... */
|
||||
for (list = preloaded_symlists; list; list = list->next)
|
||||
{
|
||||
/* ...that was preloaded by the requesting ORIGINATOR... */
|
||||
if ((originator && STREQ (list->symlist->name, originator))
|
||||
|| (!originator && STREQ (list->symlist->name, "@PROGRAM@")))
|
||||
{
|
||||
const lt_dlsymlist *symbol;
|
||||
unsigned int idx = 0;
|
||||
|
||||
++found;
|
||||
|
||||
/* ...load the symbols per source compilation unit:
|
||||
(we preincrement the index to skip over the originator entry) */
|
||||
while ((symbol = &list->symlist[++idx])->name != 0)
|
||||
{
|
||||
if ((symbol->address == 0)
|
||||
&& (STRNEQ (symbol->name, "@PROGRAM@")))
|
||||
{
|
||||
lt_dlhandle handle = lt_dlopen (symbol->name);
|
||||
if (handle == 0)
|
||||
{
|
||||
++errors;
|
||||
}
|
||||
else
|
||||
{
|
||||
errors += (*func) (handle);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!found)
|
||||
{
|
||||
LT__SETERROR(CANNOT_OPEN);
|
||||
++errors;
|
||||
}
|
||||
|
||||
return errors;
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user