kopia lustrzana https://github.com/Hamlib/Hamlib
Remove bundled libltdl (libtool)
Hamlib shall now depend on the system to provide libtool. git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@3046 7ae35d74-ebe9-4afe-98af-79ac388436b8Hamlib-1.2.13
rodzic
a60b65c3fc
commit
1274d535ce
2
README
2
README
|
@ -70,7 +70,7 @@ That is, if you want to take part in the development of Hamlib, you'll need
|
|||
at least the following tools:
|
||||
* autoconf > 2.54
|
||||
* automake > 1.7
|
||||
* libtool > 1.5|2.2.6
|
||||
* libtool >= 2.2.6b
|
||||
* doxygen
|
||||
* svn and ssh to connect to http://sourceforge.net/
|
||||
|
||||
|
|
|
@ -72,9 +72,7 @@ N.B. The Debian and derivatives (Ubuntu and friends) 'build-essentials'
|
|||
package will install a number of tools and minimize the number of packages
|
||||
that need to be installed manually.
|
||||
|
||||
N.B. Hamlib no longer supports versions of libtool earlier than 2.2.6b in
|
||||
compliance with CVE-2009-3736. If an older version is found, Hamlib will
|
||||
use the bundled libtool 2.2.6b instead.
|
||||
N.B. Hamlib requires libtool >= 2.2.6b in compliance with CVE-2009-3736.
|
||||
|
||||
Optional, but highly recommended for a complete build:
|
||||
* GNU C++ # g++ --version
|
||||
|
|
|
@ -188,9 +188,7 @@ that need to be installed manually.
|
|||
* libtool 2.2.6b # libtool --version
|
||||
* svn for connection to hamlib.svn.sourceforge.net
|
||||
|
||||
N.B. Hamlib no longer supports versions of libtool earlier than 2.2.6b in
|
||||
compliance with CVE-2009-3736. If an older version is found, Hamlib will use
|
||||
the bundled libtool 2.2.6b instead.
|
||||
N.B. Hamlib requires libtool >= 2.2.6b in compliance with CVE-2009-3736.
|
||||
|
||||
Optional, but highly recommended:
|
||||
* GNU C++ # g++ --version
|
||||
|
|
|
@ -17,10 +17,8 @@ Before deciding release:
|
|||
so developers have time to check in their contributions.
|
||||
|
||||
* Update libtool:
|
||||
macros/{ltdl,libtool}.m4
|
||||
ltmain.sh
|
||||
libltdl/
|
||||
A postfix of libtool in libltdl/Makefile.in may be needed: empty am__aclocal_m4_deps
|
||||
clean the tree
|
||||
sh ./autogen.sh
|
||||
|
||||
Releasing Hamlib:
|
||||
----------------
|
||||
|
|
26
autogen.sh
26
autogen.sh
|
@ -71,28 +71,6 @@ test $TEST_TYPE $FILE || {
|
|||
exit 1
|
||||
}
|
||||
|
||||
# Check system's libtool version versus our bundled libtool version
|
||||
# Upgrade our bundled libtool only if stale
|
||||
do_libtoolize=""
|
||||
our_lt_version=`grep '^VERSION=' ltmain.sh | sed 's/VERSION="\([^ ]*\).*$/\1/'`
|
||||
sys_lt_version=`libtoolize --version | ( read x x x vvv && echo $vvv )`
|
||||
if test -z "$our_lt_version" ; then
|
||||
echo "W: ltmain.sh not found (libtool no longer bundled?); skipping libtoolize."
|
||||
elif test "$sys_lt_version" = "$our_lt_version"; then
|
||||
echo "I: system libtool $sys_lt_version == bundled libtool $our_lt_version; skipping libtoolize."
|
||||
else
|
||||
newer=`echo -e "$sys_lt_version\n$our_lt_version" | sort | tail -1`
|
||||
if test "$newer" = "$our_lt_version"; then
|
||||
echo "I: system libtool $sys_lt_version <= bundled libtool $our_lt_version; skipping libtoolize."
|
||||
else
|
||||
do_libtoolize="yes"
|
||||
ltz_opt="-c -i --force"
|
||||
echo "I: system libtool $sys_lt_version > bundled libtool $our_lt_version."
|
||||
echo "I: Updating bundled libtool to version $sys_lt_version with:"
|
||||
echo "I: $LIBTOOLIZE $ltz_opt"
|
||||
fi
|
||||
fi
|
||||
|
||||
if test -z "$*"; then
|
||||
echo "I am going to run ./configure with no arguments - if you wish "
|
||||
echo "to pass any to it, please specify them on the $0 command line."
|
||||
|
@ -108,9 +86,7 @@ $ACLOCAL $ACLOCAL_FLAGS
|
|||
# optionally feature autoheader
|
||||
($AUTOHEADER --version) < /dev/null > /dev/null 2>&1 && $AUTOHEADER
|
||||
|
||||
if test "$do_libtoolize" = "yes" ; then
|
||||
$LIBTOOLIZE $ltz_opt
|
||||
fi
|
||||
$LIBTOOLIZE $ltz_opt
|
||||
$AUTOMAKE -a $am_opt
|
||||
$AUTOCONF
|
||||
cd $ORIGDIR
|
||||
|
|
16
configure.ac
16
configure.ac
|
@ -10,6 +10,7 @@ AC_PREREQ(2.59)
|
|||
dnl Please do not use '-' in the version number, 'make rpm' will fail
|
||||
AC_INIT([hamlib],[1.2.13svn],[hamlib-developer@lists.sourceforge.net])
|
||||
AC_CONFIG_SRCDIR([include/hamlib/rig.h])
|
||||
AC_CONFIG_MACRO_DIR([macros])
|
||||
|
||||
## ------------------------ ##
|
||||
## Automake Initialisation. ##
|
||||
|
@ -168,14 +169,13 @@ AC_LIBOBJ(dummy)
|
|||
## ------------------------ ##
|
||||
## libtool Initialisation. ##
|
||||
## ------------------------ ##
|
||||
LT_INIT([dlopen], [win32-dll])
|
||||
########## EITHER select the system's libltdl (do not distribute libltdl/):
|
||||
#INCLTDL=""
|
||||
#LIBLTDL="-lltdl"
|
||||
########## OR select (build, use, and distribute) the embedded libltdl/:
|
||||
LT_CONFIG_LTDL_DIR([libltdl])
|
||||
LTDL_INIT([convenience])
|
||||
########## END
|
||||
## N.b. LT_INIT([dlopen], [win32-dll]) does not work for older libtool
|
||||
AC_LIBTOOL_DLOPEN
|
||||
AC_LIBTOOL_WIN32_DLL
|
||||
AC_PROG_LIBTOOL
|
||||
AM_PROG_LIBTOOL
|
||||
INCLTDL=""
|
||||
LIBLTDL="-lltdl"
|
||||
AC_SUBST(INCLTDL)
|
||||
AC_SUBST(LIBLTDL)
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ BuildRequires: binutils >= 2.9.4, gcc >= 2.95, glibc-devel >= 2.1
|
|||
BuildRequires: /bin/sh, fileutils, findutils, flex
|
||||
BuildRequires: gzip, make >= 3.77, patch >= 2.5, rpm >= 3.0, sed
|
||||
BuildRequires: textutils
|
||||
BuildRequires: /bin/sh, automake >= 1.4, libtool >= 1.4, fileutils, findutils
|
||||
BuildRequires: /bin/sh, automake >= 1.4, libtool >= 2.2, fileutils, findutils
|
||||
|
||||
%changelog
|
||||
|
||||
|
|
|
@ -1,515 +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.
|
||||
^L
|
||||
Finally, software patents pose a constant threat to the existence of
|
||||
any free program. We wish to make sure that a company cannot
|
||||
effectively restrict the users of a free program by obtaining a
|
||||
restrictive license from a patent holder. Therefore, we insist that
|
||||
any patent license obtained for a version of the library must be
|
||||
consistent with the full freedom of use specified in this license.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the
|
||||
ordinary GNU General Public License. This license, the GNU Lesser
|
||||
General Public License, applies to certain designated libraries, and
|
||||
is quite different from the ordinary General Public License. We use
|
||||
this license for certain libraries in order to permit linking those
|
||||
libraries into non-free programs.
|
||||
|
||||
When a program is linked with a library, whether statically or using
|
||||
a shared library, the combination of the two is legally speaking a
|
||||
combined work, a derivative of the original library. The ordinary
|
||||
General Public License therefore permits such linking only if the
|
||||
entire combination fits its criteria of freedom. The Lesser General
|
||||
Public License permits more lax criteria for linking other code with
|
||||
the library.
|
||||
|
||||
We call this license the "Lesser" General Public License because it
|
||||
does Less to protect the user's freedom than the ordinary General
|
||||
Public License. It also provides other free software developers Less
|
||||
of an advantage over competing non-free programs. These disadvantages
|
||||
are the reason we use the ordinary General Public License for many
|
||||
libraries. However, the Lesser license provides advantages in certain
|
||||
special circumstances.
|
||||
|
||||
For example, on rare occasions, there may be a special need to
|
||||
encourage the widest possible use of a certain library, so that it
|
||||
becomes
|
||||
a de-facto standard. To achieve this, non-free programs must be
|
||||
allowed to use the library. A more frequent case is that a free
|
||||
library does the same job as widely used non-free libraries. In this
|
||||
case, there is little to gain by limiting the free library to free
|
||||
software only, so we use the Lesser General Public License.
|
||||
|
||||
In other cases, permission to use a particular library in non-free
|
||||
programs enables a greater number of people to use a large body of
|
||||
free software. For example, permission to use the GNU C Library in
|
||||
non-free programs enables many more people to use the whole GNU
|
||||
operating system, as well as its variant, the GNU/Linux operating
|
||||
system.
|
||||
|
||||
Although the Lesser General Public License is Less protective of the
|
||||
users' freedom, it does ensure that the user of a program that is
|
||||
linked with the Library has the freedom and the wherewithal to run
|
||||
that program using a modified version of the Library.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow. Pay close attention to the difference between a
|
||||
"work based on the library" and a "work that uses the library". The
|
||||
former contains code derived from the library, whereas the latter must
|
||||
be combined with the library in order to run.
|
||||
^L
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library or other
|
||||
program which contains a notice placed by the copyright holder or
|
||||
other authorized party saying it may be distributed under the terms of
|
||||
this Lesser General Public License (also called "this License").
|
||||
Each licensee is addressed as "you".
|
||||
|
||||
A "library" means a collection of software functions and/or data
|
||||
prepared so as to be conveniently linked with application programs
|
||||
(which use some of those functions and data) to form executables.
|
||||
|
||||
The "Library", below, refers to any such software library or work
|
||||
which has been distributed under these terms. A "work based on the
|
||||
Library" means either the Library or any derivative work under
|
||||
copyright law: that is to say, a work containing the Library or a
|
||||
portion of it, either verbatim or with modifications and/or translated
|
||||
straightforwardly into another language. (Hereinafter, translation is
|
||||
included without limitation in the term "modification".)
|
||||
|
||||
"Source code" for a work means the preferred form of the work for
|
||||
making modifications to it. For a library, complete source code means
|
||||
all the source code for all modules it contains, plus any associated
|
||||
interface definition files, plus the scripts used to control
|
||||
compilation
|
||||
and installation of the library.
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running a program using the Library is not restricted, and output from
|
||||
such a program is covered only if its contents constitute a work based
|
||||
on the Library (independent of the use of the Library in a tool for
|
||||
writing it). Whether that is true depends on what the Library does
|
||||
and what the program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library's
|
||||
complete source code as you receive it, in any medium, provided that
|
||||
you conspicuously and appropriately publish on each copy an
|
||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||
all the notices that refer to this License and to the absence of any
|
||||
warranty; and distribute a copy of this License along with the
|
||||
Library.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy,
|
||||
and you may at your option offer warranty protection in exchange for a
|
||||
fee.
|
||||
|
||||
2. You may modify your copy or copies of the Library or any portion
|
||||
of it, thus forming a work based on the Library, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) The modified work must itself be a software library.
|
||||
|
||||
b) You must cause the files modified to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
c) You must cause the whole of the work to be licensed at no
|
||||
charge to all third parties under the terms of this License.
|
||||
|
||||
d) If a facility in the modified Library refers to a function or a
|
||||
table of data to be supplied by an application program that uses
|
||||
the facility, other than as an argument passed when the facility
|
||||
is invoked, then you must make a good faith effort to ensure that,
|
||||
in the event an application does not supply such function or
|
||||
table, the facility still operates, and performs whatever part of
|
||||
its purpose remains meaningful.
|
||||
|
||||
(For example, a function in a library to compute square roots has
|
||||
a purpose that is entirely well-defined independent of the
|
||||
application. Therefore, Subsection 2d requires that any
|
||||
application-supplied function or table used by this function must
|
||||
be optional: if the application does not supply it, the square
|
||||
root function must still compute square roots.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Library,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Library, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Library.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Library
|
||||
with the Library (or with a work based on the Library) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||
License instead of this License to a given copy of the Library. To do
|
||||
this, you must alter all the notices that refer to this License, so
|
||||
that they refer to the ordinary GNU General Public License, version 2,
|
||||
instead of to this License. (If a newer version than version 2 of the
|
||||
ordinary GNU General Public License has appeared, then you can specify
|
||||
that version instead if you wish.) Do not make any other change in
|
||||
these notices.
|
||||
^L
|
||||
Once this change is made in a given copy, it is irreversible for
|
||||
that copy, so the ordinary GNU General Public License applies to all
|
||||
subsequent copies and derivative works made from that copy.
|
||||
|
||||
This option is useful when you wish to copy part of the code of
|
||||
the Library into a program that is not a library.
|
||||
|
||||
4. You may copy and distribute the Library (or a portion or
|
||||
derivative of it, under Section 2) in object code or executable form
|
||||
under the terms of Sections 1 and 2 above provided that you accompany
|
||||
it with the complete corresponding machine-readable source code, which
|
||||
must be distributed under the terms of Sections 1 and 2 above on a
|
||||
medium customarily used for software interchange.
|
||||
|
||||
If distribution of object code is made by offering access to copy
|
||||
from a designated place, then offering equivalent access to copy the
|
||||
source code from the same place satisfies the requirement to
|
||||
distribute the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the
|
||||
Library, but is designed to work with the Library by being compiled or
|
||||
linked with it, is called a "work that uses the Library". Such a
|
||||
work, in isolation, is not a derivative work of the Library, and
|
||||
therefore falls outside the scope of this License.
|
||||
|
||||
However, linking a "work that uses the Library" with the Library
|
||||
creates an executable that is a derivative of the Library (because it
|
||||
contains portions of the Library), rather than a "work that uses the
|
||||
library". The executable is therefore covered by this License.
|
||||
Section 6 states terms for distribution of such executables.
|
||||
|
||||
When a "work that uses the Library" uses material from a header file
|
||||
that is part of the Library, the object code for the work may be a
|
||||
derivative work of the Library even though the source code is not.
|
||||
Whether this is true is especially significant if the work can be
|
||||
linked without the Library, or if the work is itself a library. The
|
||||
threshold for this to be true is not precisely defined by law.
|
||||
|
||||
If such an object file uses only numerical parameters, data
|
||||
structure layouts and accessors, and small macros and small inline
|
||||
functions (ten lines or less in length), then the use of the object
|
||||
file is unrestricted, regardless of whether it is legally a derivative
|
||||
work. (Executables containing this object code plus portions of the
|
||||
Library will still fall under Section 6.)
|
||||
|
||||
Otherwise, if the work is a derivative of the Library, you may
|
||||
distribute the object code for the work under the terms of Section 6.
|
||||
Any executables containing that work also fall under Section 6,
|
||||
whether or not they are linked directly with the Library itself.
|
||||
^L
|
||||
6. As an exception to the Sections above, you may also combine or
|
||||
link a "work that uses the Library" with the Library to produce a
|
||||
work containing portions of the Library, and distribute that work
|
||||
under terms of your choice, provided that the terms permit
|
||||
modification of the work for the customer's own use and reverse
|
||||
engineering for debugging such modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the
|
||||
Library is used in it and that the Library and its use are covered by
|
||||
this License. You must supply a copy of this License. If the work
|
||||
during execution displays copyright notices, you must include the
|
||||
copyright notice for the Library among them, as well as a reference
|
||||
directing the user to the copy of this License. Also, you must do one
|
||||
of these things:
|
||||
|
||||
a) Accompany the work with the complete corresponding
|
||||
machine-readable source code for the Library including whatever
|
||||
changes were used in the work (which must be distributed under
|
||||
Sections 1 and 2 above); and, if the work is an executable linked
|
||||
with the Library, with the complete machine-readable "work that
|
||||
uses the Library", as object code and/or source code, so that the
|
||||
user can modify the Library and then relink to produce a modified
|
||||
executable containing the modified Library. (It is understood
|
||||
that the user who changes the contents of definitions files in the
|
||||
Library will not necessarily be able to recompile the application
|
||||
to use the modified definitions.)
|
||||
|
||||
b) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (1) uses at run time a
|
||||
copy of the library already present on the user's computer system,
|
||||
rather than copying library functions into the executable, and (2)
|
||||
will operate properly with a modified version of the library, if
|
||||
the user installs one, as long as the modified version is
|
||||
interface-compatible with the version that the work was made with.
|
||||
|
||||
c) Accompany the work with a written offer, valid for at
|
||||
least three years, to give the same user the materials
|
||||
specified in Subsection 6a, above, for a charge no more
|
||||
than the cost of performing this distribution.
|
||||
|
||||
d) If distribution of the work is made by offering access to copy
|
||||
from a designated place, offer equivalent access to copy the above
|
||||
specified materials from the same place.
|
||||
|
||||
e) Verify that the user has already received a copy of these
|
||||
materials or that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the "work that uses the
|
||||
Library" must include any data and utility programs needed for
|
||||
reproducing the executable from it. However, as a special exception,
|
||||
the materials to be distributed need not include anything that is
|
||||
normally distributed (in either source or binary form) with the major
|
||||
components (compiler, kernel, and so on) of the operating system on
|
||||
which the executable runs, unless that component itself accompanies
|
||||
the executable.
|
||||
|
||||
It may happen that this requirement contradicts the license
|
||||
restrictions of other proprietary libraries that do not normally
|
||||
accompany the operating system. Such a contradiction means you cannot
|
||||
use both them and the Library together in an executable that you
|
||||
distribute.
|
||||
^L
|
||||
7. You may place library facilities that are a work based on the
|
||||
Library side-by-side in a single library together with other library
|
||||
facilities not covered by this License, and distribute such a combined
|
||||
library, provided that the separate distribution of the work based on
|
||||
the Library and of the other library facilities is otherwise
|
||||
permitted, and provided that you do these two things:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work
|
||||
based on the Library, uncombined with any other library
|
||||
facilities. This must be distributed under the terms of the
|
||||
Sections above.
|
||||
|
||||
b) Give prominent notice with the combined library of the fact
|
||||
that part of it is a work based on the Library, and explaining
|
||||
where to find the accompanying uncombined form of the same work.
|
||||
|
||||
8. You may not copy, modify, sublicense, link with, or distribute
|
||||
the Library except as expressly provided under this License. Any
|
||||
attempt otherwise to copy, modify, sublicense, link with, or
|
||||
distribute the Library is void, and will automatically terminate your
|
||||
rights under this License. However, parties who have received copies,
|
||||
or rights, from you under this License will not have their licenses
|
||||
terminated so long as such parties remain in full compliance.
|
||||
|
||||
9. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Library or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Library (or any work based on the
|
||||
Library), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Library or works based on it.
|
||||
|
||||
10. Each time you redistribute the Library (or any work based on the
|
||||
Library), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute, link with or modify the Library
|
||||
subject to these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties with
|
||||
this License.
|
||||
^L
|
||||
11. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Library at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Library by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Library.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply, and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
12. If the distribution and/or use of the Library is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Library under this License
|
||||
may add an explicit geographical distribution limitation excluding those
|
||||
countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
13. The Free Software Foundation may publish revised and/or new
|
||||
versions of the Lesser General Public License from time to time.
|
||||
Such new versions will be similar in spirit to the present version,
|
||||
but may differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Library
|
||||
specifies a version number of this License which applies to it and
|
||||
"any later version", you have the option of following the terms and
|
||||
conditions either of that version or of any later version published by
|
||||
the Free Software Foundation. If the Library does not specify a
|
||||
license version number, you may choose any version ever published by
|
||||
the Free Software Foundation.
|
||||
^L
|
||||
14. If you wish to incorporate parts of the Library into other free
|
||||
programs whose distribution conditions are incompatible with these,
|
||||
write to the author to ask for permission. For software which is
|
||||
copyrighted by the Free Software Foundation, write to the Free
|
||||
Software Foundation; we sometimes make exceptions for this. Our
|
||||
decision will be guided by the two goals of preserving the free status
|
||||
of all derivatives of our free software and of promoting the sharing
|
||||
and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
||||
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
||||
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
||||
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
||||
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
^L
|
||||
How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest
|
||||
possible use to the public, we recommend making it free software that
|
||||
everyone can redistribute and change. You can do so by permitting
|
||||
redistribution under these terms (or, alternatively, under the terms
|
||||
of the ordinary General Public License).
|
||||
|
||||
To apply these terms, attach the following notices to the library.
|
||||
It is safest to attach them to the start of each source file to most
|
||||
effectively convey the exclusion of warranty; and each file should
|
||||
have at least the "copyright" line and a pointer to where the full
|
||||
notice is found.
|
||||
|
||||
|
||||
<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 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,164 +0,0 @@
|
|||
## Makefile.am -- Process this file with automake to produce Makefile.in
|
||||
##
|
||||
## Copyright (C) 2003, 2004, 2005, 2007 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 -I$(srcdir)/libltdl
|
||||
AM_LDFLAGS += -no-undefined
|
||||
LTDL_VERSION_INFO = -version-info 9:1:2
|
||||
|
||||
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 \
|
||||
configure.ac \
|
||||
Makefile.am \
|
||||
aclocal.m4 \
|
||||
Makefile.in \
|
||||
configure \
|
||||
config-h.in \
|
||||
README
|
||||
|
||||
## --------------------------- ##
|
||||
## Gnulib Makefile.am snippets ##
|
||||
## --------------------------- ##
|
||||
|
||||
BUILT_SOURCES += $(ARGZ_H)
|
||||
EXTRA_DIST += argz_.h \
|
||||
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): $(ARGZ_H)
|
||||
argz.h: argz_.h
|
||||
$(mkinstalldirs) .
|
||||
cp $(srcdir)/argz_.h $@-t
|
||||
mv $@-t $@
|
||||
MOSTLYCLEANFILES += argz.h \
|
||||
argz.h-t
|
1050
libltdl/Makefile.in
1050
libltdl/Makefile.in
Plik diff jest za duży
Load Diff
|
@ -1,37 +0,0 @@
|
|||
This is GNU libltdl, a system independent dlopen wrapper for GNU libtool.
|
||||
|
||||
It supports the following dlopen interfaces:
|
||||
* dlopen (Solaris, Linux and various BSD flavors)
|
||||
* 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 Free Software Foundation, Inc.
|
||||
Written by Thomas Tanner, 1999
|
||||
|
||||
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.
|
||||
|
||||
As a special exception to the GNU 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 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,958 +0,0 @@
|
|||
# generated automatically by aclocal 1.11 -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
||||
# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
m4_ifndef([AC_AUTOCONF_VERSION],
|
||||
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
||||
m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],,
|
||||
[m4_warning([this file was generated for autoconf 2.65.
|
||||
You have another version of autoconf. It may work, but is not guaranteed to.
|
||||
If you have problems, you may need to regenerate the build system entirely.
|
||||
To do so, use the procedure documented by the package, typically `autoreconf'.])])
|
||||
|
||||
# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_AUTOMAKE_VERSION(VERSION)
|
||||
# ----------------------------
|
||||
# Automake X.Y traces this macro to ensure aclocal.m4 has been
|
||||
# generated from the m4 files accompanying Automake X.Y.
|
||||
# (This private macro should not be called outside this file.)
|
||||
AC_DEFUN([AM_AUTOMAKE_VERSION],
|
||||
[am__api_version='1.11'
|
||||
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
|
||||
dnl require some minimum version. Point them to the right macro.
|
||||
m4_if([$1], [1.11], [],
|
||||
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
|
||||
])
|
||||
|
||||
# _AM_AUTOCONF_VERSION(VERSION)
|
||||
# -----------------------------
|
||||
# aclocal traces this macro to find the Autoconf version.
|
||||
# This is a private macro too. Using m4_define simplifies
|
||||
# the logic in aclocal, which can simply ignore this definition.
|
||||
m4_define([_AM_AUTOCONF_VERSION], [])
|
||||
|
||||
# AM_SET_CURRENT_AUTOMAKE_VERSION
|
||||
# -------------------------------
|
||||
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
|
||||
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
|
||||
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
||||
[AM_AUTOMAKE_VERSION([1.11])dnl
|
||||
m4_ifndef([AC_AUTOCONF_VERSION],
|
||||
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
||||
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
|
||||
|
||||
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
|
||||
# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
|
||||
# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
|
||||
#
|
||||
# Of course, Automake must honor this variable whenever it calls a
|
||||
# tool from the auxiliary directory. The problem is that $srcdir (and
|
||||
# therefore $ac_aux_dir as well) can be either absolute or relative,
|
||||
# depending on how configure is run. This is pretty annoying, since
|
||||
# it makes $ac_aux_dir quite unusable in subdirectories: in the top
|
||||
# source directory, any form will work fine, but in subdirectories a
|
||||
# relative path needs to be adjusted first.
|
||||
#
|
||||
# $ac_aux_dir/missing
|
||||
# fails when called from a subdirectory if $ac_aux_dir is relative
|
||||
# $top_srcdir/$ac_aux_dir/missing
|
||||
# fails if $ac_aux_dir is absolute,
|
||||
# fails when called from a subdirectory in a VPATH build with
|
||||
# a relative $ac_aux_dir
|
||||
#
|
||||
# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
|
||||
# are both prefixed by $srcdir. In an in-source build this is usually
|
||||
# harmless because $srcdir is `.', but things will broke when you
|
||||
# start a VPATH build or use an absolute $srcdir.
|
||||
#
|
||||
# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
|
||||
# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
|
||||
# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
|
||||
# and then we would define $MISSING as
|
||||
# MISSING="\${SHELL} $am_aux_dir/missing"
|
||||
# This will work as long as MISSING is not called from configure, because
|
||||
# unfortunately $(top_srcdir) has no meaning in configure.
|
||||
# However there are other variables, like CC, which are often used in
|
||||
# configure, and could therefore not use this "fixed" $ac_aux_dir.
|
||||
#
|
||||
# Another solution, used here, is to always expand $ac_aux_dir to an
|
||||
# absolute PATH. The drawback is that using absolute paths prevent a
|
||||
# configured tree to be moved without reconfiguration.
|
||||
|
||||
AC_DEFUN([AM_AUX_DIR_EXPAND],
|
||||
[dnl Rely on autoconf to set up CDPATH properly.
|
||||
AC_PREREQ([2.50])dnl
|
||||
# expand $ac_aux_dir to an absolute path
|
||||
am_aux_dir=`cd $ac_aux_dir && pwd`
|
||||
])
|
||||
|
||||
# AM_CONDITIONAL -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 9
|
||||
|
||||
# AM_CONDITIONAL(NAME, SHELL-CONDITION)
|
||||
# -------------------------------------
|
||||
# Define a conditional.
|
||||
AC_DEFUN([AM_CONDITIONAL],
|
||||
[AC_PREREQ(2.52)dnl
|
||||
ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
|
||||
[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
|
||||
AC_SUBST([$1_TRUE])dnl
|
||||
AC_SUBST([$1_FALSE])dnl
|
||||
_AM_SUBST_NOTMAKE([$1_TRUE])dnl
|
||||
_AM_SUBST_NOTMAKE([$1_FALSE])dnl
|
||||
m4_define([_AM_COND_VALUE_$1], [$2])dnl
|
||||
if $2; then
|
||||
$1_TRUE=
|
||||
$1_FALSE='#'
|
||||
else
|
||||
$1_TRUE='#'
|
||||
$1_FALSE=
|
||||
fi
|
||||
AC_CONFIG_COMMANDS_PRE(
|
||||
[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
|
||||
AC_MSG_ERROR([[conditional "$1" was never defined.
|
||||
Usually this means the macro was only invoked conditionally.]])
|
||||
fi])])
|
||||
|
||||
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 10
|
||||
|
||||
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
|
||||
# written in clear, in which case automake, when reading aclocal.m4,
|
||||
# will think it sees a *use*, and therefore will trigger all it's
|
||||
# C support machinery. Also note that it means that autoscan, seeing
|
||||
# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
|
||||
|
||||
|
||||
# _AM_DEPENDENCIES(NAME)
|
||||
# ----------------------
|
||||
# See how the compiler implements dependency checking.
|
||||
# NAME is "CC", "CXX", "GCJ", or "OBJC".
|
||||
# We try a few techniques and use that to set a single cache variable.
|
||||
#
|
||||
# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
|
||||
# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
|
||||
# dependency, and given that the user is not expected to run this macro,
|
||||
# just rely on AC_PROG_CC.
|
||||
AC_DEFUN([_AM_DEPENDENCIES],
|
||||
[AC_REQUIRE([AM_SET_DEPDIR])dnl
|
||||
AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
|
||||
AC_REQUIRE([AM_MAKE_INCLUDE])dnl
|
||||
AC_REQUIRE([AM_DEP_TRACK])dnl
|
||||
|
||||
ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
|
||||
[$1], CXX, [depcc="$CXX" am_compiler_list=],
|
||||
[$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
|
||||
[$1], UPC, [depcc="$UPC" am_compiler_list=],
|
||||
[$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
|
||||
[depcc="$$1" am_compiler_list=])
|
||||
|
||||
AC_CACHE_CHECK([dependency style of $depcc],
|
||||
[am_cv_$1_dependencies_compiler_type],
|
||||
[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
|
||||
# We make a subdir and do the tests there. Otherwise we can end up
|
||||
# making bogus files that we don't know about and never remove. For
|
||||
# instance it was reported that on HP-UX the gcc test will end up
|
||||
# making a dummy file named `D' -- because `-MD' means `put the output
|
||||
# in D'.
|
||||
mkdir conftest.dir
|
||||
# Copy depcomp to subdir because otherwise we won't find it if we're
|
||||
# using a relative directory.
|
||||
cp "$am_depcomp" conftest.dir
|
||||
cd conftest.dir
|
||||
# We will build objects and dependencies in a subdirectory because
|
||||
# it helps to detect inapplicable dependency modes. For instance
|
||||
# both Tru64's cc and ICC support -MD to output dependencies as a
|
||||
# side effect of compilation, but ICC will put the dependencies in
|
||||
# the current directory while Tru64 will put them in the object
|
||||
# directory.
|
||||
mkdir sub
|
||||
|
||||
am_cv_$1_dependencies_compiler_type=none
|
||||
if test "$am_compiler_list" = ""; then
|
||||
am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
|
||||
fi
|
||||
am__universal=false
|
||||
m4_case([$1], [CC],
|
||||
[case " $depcc " in #(
|
||||
*\ -arch\ *\ -arch\ *) am__universal=true ;;
|
||||
esac],
|
||||
[CXX],
|
||||
[case " $depcc " in #(
|
||||
*\ -arch\ *\ -arch\ *) am__universal=true ;;
|
||||
esac])
|
||||
|
||||
for depmode in $am_compiler_list; do
|
||||
# Setup a source with many dependencies, because some compilers
|
||||
# like to wrap large dependency lists on column 80 (with \), and
|
||||
# we should not choose a depcomp mode which is confused by this.
|
||||
#
|
||||
# We need to recreate these files for each test, as the compiler may
|
||||
# overwrite some of them when testing with obscure command lines.
|
||||
# This happens at least with the AIX C compiler.
|
||||
: > sub/conftest.c
|
||||
for i in 1 2 3 4 5 6; do
|
||||
echo '#include "conftst'$i'.h"' >> sub/conftest.c
|
||||
# Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
|
||||
# Solaris 8's {/usr,}/bin/sh.
|
||||
touch sub/conftst$i.h
|
||||
done
|
||||
echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
|
||||
|
||||
# We check with `-c' and `-o' for the sake of the "dashmstdout"
|
||||
# mode. It turns out that the SunPro C++ compiler does not properly
|
||||
# handle `-M -o', and we need to detect this. Also, some Intel
|
||||
# versions had trouble with output in subdirs
|
||||
am__obj=sub/conftest.${OBJEXT-o}
|
||||
am__minus_obj="-o $am__obj"
|
||||
case $depmode in
|
||||
gcc)
|
||||
# This depmode causes a compiler race in universal mode.
|
||||
test "$am__universal" = false || continue
|
||||
;;
|
||||
nosideeffect)
|
||||
# after this tag, mechanisms are not by side-effect, so they'll
|
||||
# only be used when explicitly requested
|
||||
if test "x$enable_dependency_tracking" = xyes; then
|
||||
continue
|
||||
else
|
||||
break
|
||||
fi
|
||||
;;
|
||||
msvisualcpp | msvcmsys)
|
||||
# This compiler won't grok `-c -o', but also, the minuso test has
|
||||
# not run yet. These depmodes are late enough in the game, and
|
||||
# so weak that their functioning should not be impacted.
|
||||
am__obj=conftest.${OBJEXT-o}
|
||||
am__minus_obj=
|
||||
;;
|
||||
none) break ;;
|
||||
esac
|
||||
if depmode=$depmode \
|
||||
source=sub/conftest.c object=$am__obj \
|
||||
depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
|
||||
$SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
|
||||
>/dev/null 2>conftest.err &&
|
||||
grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
|
||||
grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
|
||||
grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
|
||||
${MAKE-make} -s -f confmf > /dev/null 2>&1; then
|
||||
# icc doesn't choke on unknown options, it will just issue warnings
|
||||
# or remarks (even with -Werror). So we grep stderr for any message
|
||||
# that says an option was ignored or not supported.
|
||||
# When given -MP, icc 7.0 and 7.1 complain thusly:
|
||||
# icc: Command line warning: ignoring option '-M'; no argument required
|
||||
# The diagnosis changed in icc 8.0:
|
||||
# icc: Command line remark: option '-MP' not supported
|
||||
if (grep 'ignoring option' conftest.err ||
|
||||
grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
|
||||
am_cv_$1_dependencies_compiler_type=$depmode
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
cd ..
|
||||
rm -rf conftest.dir
|
||||
else
|
||||
am_cv_$1_dependencies_compiler_type=none
|
||||
fi
|
||||
])
|
||||
AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
|
||||
AM_CONDITIONAL([am__fastdep$1], [
|
||||
test "x$enable_dependency_tracking" != xno \
|
||||
&& test "$am_cv_$1_dependencies_compiler_type" = gcc3])
|
||||
])
|
||||
|
||||
|
||||
# AM_SET_DEPDIR
|
||||
# -------------
|
||||
# Choose a directory name for dependency files.
|
||||
# This macro is AC_REQUIREd in _AM_DEPENDENCIES
|
||||
AC_DEFUN([AM_SET_DEPDIR],
|
||||
[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
|
||||
AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
|
||||
])
|
||||
|
||||
|
||||
# AM_DEP_TRACK
|
||||
# ------------
|
||||
AC_DEFUN([AM_DEP_TRACK],
|
||||
[AC_ARG_ENABLE(dependency-tracking,
|
||||
[ --disable-dependency-tracking speeds up one-time build
|
||||
--enable-dependency-tracking do not reject slow dependency extractors])
|
||||
if test "x$enable_dependency_tracking" != xno; then
|
||||
am_depcomp="$ac_aux_dir/depcomp"
|
||||
AMDEPBACKSLASH='\'
|
||||
fi
|
||||
AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
|
||||
AC_SUBST([AMDEPBACKSLASH])dnl
|
||||
_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
|
||||
])
|
||||
|
||||
# Generate code to set up dependency tracking. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
#serial 5
|
||||
|
||||
# _AM_OUTPUT_DEPENDENCY_COMMANDS
|
||||
# ------------------------------
|
||||
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
|
||||
[{
|
||||
# Autoconf 2.62 quotes --file arguments for eval, but not when files
|
||||
# are listed without --file. Let's play safe and only enable the eval
|
||||
# if we detect the quoting.
|
||||
case $CONFIG_FILES in
|
||||
*\'*) eval set x "$CONFIG_FILES" ;;
|
||||
*) set x $CONFIG_FILES ;;
|
||||
esac
|
||||
shift
|
||||
for mf
|
||||
do
|
||||
# Strip MF so we end up with the name of the file.
|
||||
mf=`echo "$mf" | sed -e 's/:.*$//'`
|
||||
# Check whether this is an Automake generated Makefile or not.
|
||||
# We used to match only the files named `Makefile.in', but
|
||||
# some people rename them; so instead we look at the file content.
|
||||
# Grep'ing the first line is not enough: some people post-process
|
||||
# each Makefile.in and add a new line on top of each file to say so.
|
||||
# Grep'ing the whole file is not good either: AIX grep has a line
|
||||
# limit of 2048, but all sed's we know have understand at least 4000.
|
||||
if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
|
||||
dirpart=`AS_DIRNAME("$mf")`
|
||||
else
|
||||
continue
|
||||
fi
|
||||
# Extract the definition of DEPDIR, am__include, and am__quote
|
||||
# from the Makefile without running `make'.
|
||||
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
|
||||
test -z "$DEPDIR" && continue
|
||||
am__include=`sed -n 's/^am__include = //p' < "$mf"`
|
||||
test -z "am__include" && continue
|
||||
am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
|
||||
# When using ansi2knr, U may be empty or an underscore; expand it
|
||||
U=`sed -n 's/^U = //p' < "$mf"`
|
||||
# Find all dependency output files, they are included files with
|
||||
# $(DEPDIR) in their names. We invoke sed twice because it is the
|
||||
# simplest approach to changing $(DEPDIR) to its actual value in the
|
||||
# expansion.
|
||||
for file in `sed -n "
|
||||
s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
|
||||
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
|
||||
# Make sure the directory exists.
|
||||
test -f "$dirpart/$file" && continue
|
||||
fdir=`AS_DIRNAME(["$file"])`
|
||||
AS_MKDIR_P([$dirpart/$fdir])
|
||||
# echo "creating $dirpart/$file"
|
||||
echo '# dummy' > "$dirpart/$file"
|
||||
done
|
||||
done
|
||||
}
|
||||
])# _AM_OUTPUT_DEPENDENCY_COMMANDS
|
||||
|
||||
|
||||
# AM_OUTPUT_DEPENDENCY_COMMANDS
|
||||
# -----------------------------
|
||||
# This macro should only be invoked once -- use via AC_REQUIRE.
|
||||
#
|
||||
# This code is only required when automatic dependency tracking
|
||||
# is enabled. FIXME. This creates each `.P' file that we will
|
||||
# need in order to bootstrap the dependency handling code.
|
||||
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
|
||||
[AC_CONFIG_COMMANDS([depfiles],
|
||||
[test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
|
||||
[AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
|
||||
])
|
||||
|
||||
# Do all the work for Automake. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
||||
# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 16
|
||||
|
||||
# This macro actually does too much. Some checks are only needed if
|
||||
# your package does certain things. But this isn't really a big deal.
|
||||
|
||||
# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
|
||||
# AM_INIT_AUTOMAKE([OPTIONS])
|
||||
# -----------------------------------------------
|
||||
# The call with PACKAGE and VERSION arguments is the old style
|
||||
# call (pre autoconf-2.50), which is being phased out. PACKAGE
|
||||
# and VERSION should now be passed to AC_INIT and removed from
|
||||
# the call to AM_INIT_AUTOMAKE.
|
||||
# We support both call styles for the transition. After
|
||||
# the next Automake release, Autoconf can make the AC_INIT
|
||||
# arguments mandatory, and then we can depend on a new Autoconf
|
||||
# release and drop the old call support.
|
||||
AC_DEFUN([AM_INIT_AUTOMAKE],
|
||||
[AC_PREREQ([2.62])dnl
|
||||
dnl Autoconf wants to disallow AM_ names. We explicitly allow
|
||||
dnl the ones we care about.
|
||||
m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
|
||||
AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
|
||||
AC_REQUIRE([AC_PROG_INSTALL])dnl
|
||||
if test "`cd $srcdir && pwd`" != "`pwd`"; then
|
||||
# Use -I$(srcdir) only when $(srcdir) != ., so that make's output
|
||||
# is not polluted with repeated "-I."
|
||||
AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
|
||||
# test to see if srcdir already configured
|
||||
if test -f $srcdir/config.status; then
|
||||
AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
|
||||
fi
|
||||
fi
|
||||
|
||||
# test whether we have cygpath
|
||||
if test -z "$CYGPATH_W"; then
|
||||
if (cygpath --version) >/dev/null 2>/dev/null; then
|
||||
CYGPATH_W='cygpath -w'
|
||||
else
|
||||
CYGPATH_W=echo
|
||||
fi
|
||||
fi
|
||||
AC_SUBST([CYGPATH_W])
|
||||
|
||||
# Define the identity of the package.
|
||||
dnl Distinguish between old-style and new-style calls.
|
||||
m4_ifval([$2],
|
||||
[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
|
||||
AC_SUBST([PACKAGE], [$1])dnl
|
||||
AC_SUBST([VERSION], [$2])],
|
||||
[_AM_SET_OPTIONS([$1])dnl
|
||||
dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
|
||||
m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
|
||||
[m4_fatal([AC_INIT should be called with package and version arguments])])dnl
|
||||
AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
|
||||
AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
|
||||
|
||||
_AM_IF_OPTION([no-define],,
|
||||
[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
|
||||
AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
|
||||
|
||||
# Some tools Automake needs.
|
||||
AC_REQUIRE([AM_SANITY_CHECK])dnl
|
||||
AC_REQUIRE([AC_ARG_PROGRAM])dnl
|
||||
AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
|
||||
AM_MISSING_PROG(AUTOCONF, autoconf)
|
||||
AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
|
||||
AM_MISSING_PROG(AUTOHEADER, autoheader)
|
||||
AM_MISSING_PROG(MAKEINFO, makeinfo)
|
||||
AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
|
||||
AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
|
||||
AC_REQUIRE([AM_PROG_MKDIR_P])dnl
|
||||
# We need awk for the "check" target. The system "awk" is bad on
|
||||
# some platforms.
|
||||
AC_REQUIRE([AC_PROG_AWK])dnl
|
||||
AC_REQUIRE([AC_PROG_MAKE_SET])dnl
|
||||
AC_REQUIRE([AM_SET_LEADING_DOT])dnl
|
||||
_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
|
||||
[_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
|
||||
[_AM_PROG_TAR([v7])])])
|
||||
_AM_IF_OPTION([no-dependencies],,
|
||||
[AC_PROVIDE_IFELSE([AC_PROG_CC],
|
||||
[_AM_DEPENDENCIES(CC)],
|
||||
[define([AC_PROG_CC],
|
||||
defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
|
||||
AC_PROVIDE_IFELSE([AC_PROG_CXX],
|
||||
[_AM_DEPENDENCIES(CXX)],
|
||||
[define([AC_PROG_CXX],
|
||||
defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
|
||||
AC_PROVIDE_IFELSE([AC_PROG_OBJC],
|
||||
[_AM_DEPENDENCIES(OBJC)],
|
||||
[define([AC_PROG_OBJC],
|
||||
defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
|
||||
])
|
||||
_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
|
||||
dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
|
||||
dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
|
||||
dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
|
||||
AC_CONFIG_COMMANDS_PRE(dnl
|
||||
[m4_provide_if([_AM_COMPILER_EXEEXT],
|
||||
[AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
|
||||
])
|
||||
|
||||
dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
|
||||
dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
|
||||
dnl mangled by Autoconf and run in a shell conditional statement.
|
||||
m4_define([_AC_COMPILER_EXEEXT],
|
||||
m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
|
||||
|
||||
|
||||
# When config.status generates a header, we must update the stamp-h file.
|
||||
# This file resides in the same directory as the config header
|
||||
# that is generated. The stamp files are numbered to have different names.
|
||||
|
||||
# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
|
||||
# loop where config.status creates the headers, so we can generate
|
||||
# our stamp files there.
|
||||
AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
|
||||
[# Compute $1's index in $config_headers.
|
||||
_am_arg=$1
|
||||
_am_stamp_count=1
|
||||
for _am_header in $config_headers :; do
|
||||
case $_am_header in
|
||||
$_am_arg | $_am_arg:* )
|
||||
break ;;
|
||||
* )
|
||||
_am_stamp_count=`expr $_am_stamp_count + 1` ;;
|
||||
esac
|
||||
done
|
||||
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
|
||||
|
||||
# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_PROG_INSTALL_SH
|
||||
# ------------------
|
||||
# Define $install_sh.
|
||||
AC_DEFUN([AM_PROG_INSTALL_SH],
|
||||
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
||||
if test x"${install_sh}" != xset; then
|
||||
case $am_aux_dir in
|
||||
*\ * | *\ *)
|
||||
install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
|
||||
*)
|
||||
install_sh="\${SHELL} $am_aux_dir/install-sh"
|
||||
esac
|
||||
fi
|
||||
AC_SUBST(install_sh)])
|
||||
|
||||
# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 2
|
||||
|
||||
# Check whether the underlying file-system supports filenames
|
||||
# with a leading dot. For instance MS-DOS doesn't.
|
||||
AC_DEFUN([AM_SET_LEADING_DOT],
|
||||
[rm -rf .tst 2>/dev/null
|
||||
mkdir .tst 2>/dev/null
|
||||
if test -d .tst; then
|
||||
am__leading_dot=.
|
||||
else
|
||||
am__leading_dot=_
|
||||
fi
|
||||
rmdir .tst 2>/dev/null
|
||||
AC_SUBST([am__leading_dot])])
|
||||
|
||||
# Check to see how 'make' treats includes. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 4
|
||||
|
||||
# AM_MAKE_INCLUDE()
|
||||
# -----------------
|
||||
# Check to see how make treats includes.
|
||||
AC_DEFUN([AM_MAKE_INCLUDE],
|
||||
[am_make=${MAKE-make}
|
||||
cat > confinc << 'END'
|
||||
am__doit:
|
||||
@echo this is the am__doit target
|
||||
.PHONY: am__doit
|
||||
END
|
||||
# If we don't find an include directive, just comment out the code.
|
||||
AC_MSG_CHECKING([for style of include used by $am_make])
|
||||
am__include="#"
|
||||
am__quote=
|
||||
_am_result=none
|
||||
# First try GNU make style include.
|
||||
echo "include confinc" > confmf
|
||||
# Ignore all kinds of additional output from `make'.
|
||||
case `$am_make -s -f confmf 2> /dev/null` in #(
|
||||
*the\ am__doit\ target*)
|
||||
am__include=include
|
||||
am__quote=
|
||||
_am_result=GNU
|
||||
;;
|
||||
esac
|
||||
# Now try BSD make style include.
|
||||
if test "$am__include" = "#"; then
|
||||
echo '.include "confinc"' > confmf
|
||||
case `$am_make -s -f confmf 2> /dev/null` in #(
|
||||
*the\ am__doit\ target*)
|
||||
am__include=.include
|
||||
am__quote="\""
|
||||
_am_result=BSD
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
AC_SUBST([am__include])
|
||||
AC_SUBST([am__quote])
|
||||
AC_MSG_RESULT([$_am_result])
|
||||
rm -f confinc confmf
|
||||
])
|
||||
|
||||
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 6
|
||||
|
||||
# AM_MISSING_PROG(NAME, PROGRAM)
|
||||
# ------------------------------
|
||||
AC_DEFUN([AM_MISSING_PROG],
|
||||
[AC_REQUIRE([AM_MISSING_HAS_RUN])
|
||||
$1=${$1-"${am_missing_run}$2"}
|
||||
AC_SUBST($1)])
|
||||
|
||||
|
||||
# AM_MISSING_HAS_RUN
|
||||
# ------------------
|
||||
# Define MISSING if not defined so far and test if it supports --run.
|
||||
# If it does, set am_missing_run to use it, otherwise, to nothing.
|
||||
AC_DEFUN([AM_MISSING_HAS_RUN],
|
||||
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
||||
AC_REQUIRE_AUX_FILE([missing])dnl
|
||||
if test x"${MISSING+set}" != xset; then
|
||||
case $am_aux_dir in
|
||||
*\ * | *\ *)
|
||||
MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
|
||||
*)
|
||||
MISSING="\${SHELL} $am_aux_dir/missing" ;;
|
||||
esac
|
||||
fi
|
||||
# Use eval to expand $SHELL
|
||||
if eval "$MISSING --run true"; then
|
||||
am_missing_run="$MISSING --run "
|
||||
else
|
||||
am_missing_run=
|
||||
AC_MSG_WARN([`missing' script is too old or missing])
|
||||
fi
|
||||
])
|
||||
|
||||
# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_PROG_MKDIR_P
|
||||
# ---------------
|
||||
# Check for `mkdir -p'.
|
||||
AC_DEFUN([AM_PROG_MKDIR_P],
|
||||
[AC_PREREQ([2.60])dnl
|
||||
AC_REQUIRE([AC_PROG_MKDIR_P])dnl
|
||||
dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
|
||||
dnl while keeping a definition of mkdir_p for backward compatibility.
|
||||
dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
|
||||
dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
|
||||
dnl Makefile.ins that do not define MKDIR_P, so we do our own
|
||||
dnl adjustment using top_builddir (which is defined more often than
|
||||
dnl MKDIR_P).
|
||||
AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
|
||||
case $mkdir_p in
|
||||
[[\\/$]]* | ?:[[\\/]]*) ;;
|
||||
*/*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
|
||||
esac
|
||||
])
|
||||
|
||||
# Helper functions for option handling. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 4
|
||||
|
||||
# _AM_MANGLE_OPTION(NAME)
|
||||
# -----------------------
|
||||
AC_DEFUN([_AM_MANGLE_OPTION],
|
||||
[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
|
||||
|
||||
# _AM_SET_OPTION(NAME)
|
||||
# ------------------------------
|
||||
# Set option NAME. Presently that only means defining a flag for this option.
|
||||
AC_DEFUN([_AM_SET_OPTION],
|
||||
[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
|
||||
|
||||
# _AM_SET_OPTIONS(OPTIONS)
|
||||
# ----------------------------------
|
||||
# OPTIONS is a space-separated list of Automake options.
|
||||
AC_DEFUN([_AM_SET_OPTIONS],
|
||||
[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
|
||||
|
||||
# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
|
||||
# -------------------------------------------
|
||||
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
|
||||
AC_DEFUN([_AM_IF_OPTION],
|
||||
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
|
||||
|
||||
# Check to make sure that the build environment is sane. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 5
|
||||
|
||||
# AM_SANITY_CHECK
|
||||
# ---------------
|
||||
AC_DEFUN([AM_SANITY_CHECK],
|
||||
[AC_MSG_CHECKING([whether build environment is sane])
|
||||
# Just in case
|
||||
sleep 1
|
||||
echo timestamp > conftest.file
|
||||
# Reject unsafe characters in $srcdir or the absolute working directory
|
||||
# name. Accept space and tab only in the latter.
|
||||
am_lf='
|
||||
'
|
||||
case `pwd` in
|
||||
*[[\\\"\#\$\&\'\`$am_lf]]*)
|
||||
AC_MSG_ERROR([unsafe absolute working directory name]);;
|
||||
esac
|
||||
case $srcdir in
|
||||
*[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
|
||||
AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
|
||||
esac
|
||||
|
||||
# Do `set' in a subshell so we don't clobber the current shell's
|
||||
# arguments. Must try -L first in case configure is actually a
|
||||
# symlink; some systems play weird games with the mod time of symlinks
|
||||
# (eg FreeBSD returns the mod time of the symlink's containing
|
||||
# directory).
|
||||
if (
|
||||
set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
|
||||
if test "$[*]" = "X"; then
|
||||
# -L didn't work.
|
||||
set X `ls -t "$srcdir/configure" conftest.file`
|
||||
fi
|
||||
rm -f conftest.file
|
||||
if test "$[*]" != "X $srcdir/configure conftest.file" \
|
||||
&& test "$[*]" != "X conftest.file $srcdir/configure"; then
|
||||
|
||||
# If neither matched, then we have a broken ls. This can happen
|
||||
# if, for instance, CONFIG_SHELL is bash and it inherits a
|
||||
# broken ls alias from the environment. This has actually
|
||||
# happened. Such a system could not be considered "sane".
|
||||
AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
|
||||
alias in your environment])
|
||||
fi
|
||||
|
||||
test "$[2]" = conftest.file
|
||||
)
|
||||
then
|
||||
# Ok.
|
||||
:
|
||||
else
|
||||
AC_MSG_ERROR([newly created file is older than distributed files!
|
||||
Check your system clock])
|
||||
fi
|
||||
AC_MSG_RESULT(yes)])
|
||||
|
||||
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_PROG_INSTALL_STRIP
|
||||
# ---------------------
|
||||
# One issue with vendor `install' (even GNU) is that you can't
|
||||
# specify the program used to strip binaries. This is especially
|
||||
# annoying in cross-compiling environments, where the build's strip
|
||||
# is unlikely to handle the host's binaries.
|
||||
# Fortunately install-sh will honor a STRIPPROG variable, so we
|
||||
# always use install-sh in `make install-strip', and initialize
|
||||
# STRIPPROG with the value of the STRIP variable (set by the user).
|
||||
AC_DEFUN([AM_PROG_INSTALL_STRIP],
|
||||
[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
|
||||
# Installed binaries are usually stripped using `strip' when the user
|
||||
# run `make install-strip'. However `strip' might not be the right
|
||||
# tool to use in cross-compilation environments, therefore Automake
|
||||
# will honor the `STRIP' environment variable to overrule this program.
|
||||
dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
|
||||
if test "$cross_compiling" != no; then
|
||||
AC_CHECK_TOOL([STRIP], [strip], :)
|
||||
fi
|
||||
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
|
||||
AC_SUBST([INSTALL_STRIP_PROGRAM])])
|
||||
|
||||
# Copyright (C) 2006, 2008 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 2
|
||||
|
||||
# _AM_SUBST_NOTMAKE(VARIABLE)
|
||||
# ---------------------------
|
||||
# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
|
||||
# This macro is traced by Automake.
|
||||
AC_DEFUN([_AM_SUBST_NOTMAKE])
|
||||
|
||||
# AM_SUBST_NOTMAKE(VARIABLE)
|
||||
# ---------------------------
|
||||
# Public sister of _AM_SUBST_NOTMAKE.
|
||||
AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
|
||||
|
||||
# Check how to create a tarball. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 2
|
||||
|
||||
# _AM_PROG_TAR(FORMAT)
|
||||
# --------------------
|
||||
# Check how to create a tarball in format FORMAT.
|
||||
# FORMAT should be one of `v7', `ustar', or `pax'.
|
||||
#
|
||||
# Substitute a variable $(am__tar) that is a command
|
||||
# writing to stdout a FORMAT-tarball containing the directory
|
||||
# $tardir.
|
||||
# tardir=directory && $(am__tar) > result.tar
|
||||
#
|
||||
# Substitute a variable $(am__untar) that extract such
|
||||
# a tarball read from stdin.
|
||||
# $(am__untar) < result.tar
|
||||
AC_DEFUN([_AM_PROG_TAR],
|
||||
[# Always define AMTAR for backward compatibility.
|
||||
AM_MISSING_PROG([AMTAR], [tar])
|
||||
m4_if([$1], [v7],
|
||||
[am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
|
||||
[m4_case([$1], [ustar],, [pax],,
|
||||
[m4_fatal([Unknown tar format])])
|
||||
AC_MSG_CHECKING([how to create a $1 tar archive])
|
||||
# Loop over all known methods to create a tar archive until one works.
|
||||
_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
|
||||
_am_tools=${am_cv_prog_tar_$1-$_am_tools}
|
||||
# Do not fold the above two line into one, because Tru64 sh and
|
||||
# Solaris sh will not grok spaces in the rhs of `-'.
|
||||
for _am_tool in $_am_tools
|
||||
do
|
||||
case $_am_tool in
|
||||
gnutar)
|
||||
for _am_tar in tar gnutar gtar;
|
||||
do
|
||||
AM_RUN_LOG([$_am_tar --version]) && break
|
||||
done
|
||||
am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
|
||||
am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
|
||||
am__untar="$_am_tar -xf -"
|
||||
;;
|
||||
plaintar)
|
||||
# Must skip GNU tar: if it does not support --format= it doesn't create
|
||||
# ustar tarball either.
|
||||
(tar --version) >/dev/null 2>&1 && continue
|
||||
am__tar='tar chf - "$$tardir"'
|
||||
am__tar_='tar chf - "$tardir"'
|
||||
am__untar='tar xf -'
|
||||
;;
|
||||
pax)
|
||||
am__tar='pax -L -x $1 -w "$$tardir"'
|
||||
am__tar_='pax -L -x $1 -w "$tardir"'
|
||||
am__untar='pax -r'
|
||||
;;
|
||||
cpio)
|
||||
am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
|
||||
am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
|
||||
am__untar='cpio -i -H $1 -d'
|
||||
;;
|
||||
none)
|
||||
am__tar=false
|
||||
am__tar_=false
|
||||
am__untar=false
|
||||
;;
|
||||
esac
|
||||
|
||||
# If the value was cached, stop now. We just wanted to have am__tar
|
||||
# and am__untar set.
|
||||
test -n "${am_cv_prog_tar_$1}" && break
|
||||
|
||||
# tar/untar a dummy directory, and stop if the command works
|
||||
rm -rf conftest.dir
|
||||
mkdir conftest.dir
|
||||
echo GrepMe > conftest.dir/file
|
||||
AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
|
||||
rm -rf conftest.dir
|
||||
if test -s conftest.tar; then
|
||||
AM_RUN_LOG([$am__untar <conftest.tar])
|
||||
grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
|
||||
fi
|
||||
done
|
||||
rm -rf conftest.dir
|
||||
|
||||
AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
|
||||
AC_MSG_RESULT([$am_cv_prog_tar_$1])])
|
||||
AC_SUBST([am__tar])
|
||||
AC_SUBST([am__untar])
|
||||
]) # _AM_PROG_TAR
|
||||
|
||||
m4_include([m4/argz.m4])
|
||||
m4_include([m4/libtool.m4])
|
||||
m4_include([m4/ltdl.m4])
|
||||
m4_include([m4/ltoptions.m4])
|
||||
m4_include([m4/ltsugar.m4])
|
||||
m4_include([m4/ltversion.m4])
|
||||
m4_include([m4/lt~obsolete.m4])
|
226
libltdl/argz.c
226
libltdl/argz.c
|
@ -1,226 +0,0 @@
|
|||
/* argz.c -- argz implementation for non-glibc systems
|
||||
|
||||
Copyright (C) 2004, 2006, 2007, 2008 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(LTDL) && defined LT_CONFIG_H
|
||||
# include LT_CONFIG_H
|
||||
#else
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <argz.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
|
||||
#define EOS_CHAR '\0'
|
||||
|
||||
error_t
|
||||
argz_append (char **pargz, size_t *pargz_len, const char *buf, size_t buf_len)
|
||||
{
|
||||
size_t argz_len;
|
||||
char *argz;
|
||||
|
||||
assert (pargz);
|
||||
assert (pargz_len);
|
||||
assert ((*pargz && *pargz_len) || (!*pargz && !*pargz_len));
|
||||
|
||||
/* If nothing needs to be appended, no more work is required. */
|
||||
if (buf_len == 0)
|
||||
return 0;
|
||||
|
||||
/* Ensure there is enough room to append BUF_LEN. */
|
||||
argz_len = *pargz_len + buf_len;
|
||||
argz = (char *) realloc (*pargz, argz_len);
|
||||
if (!argz)
|
||||
return ENOMEM;
|
||||
|
||||
/* Copy characters from BUF after terminating '\0' in ARGZ. */
|
||||
memcpy (argz + *pargz_len, buf, buf_len);
|
||||
|
||||
/* Assign new values. */
|
||||
*pargz = argz;
|
||||
*pargz_len = argz_len;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
error_t
|
||||
argz_create_sep (const char *str, int delim, char **pargz, size_t *pargz_len)
|
||||
{
|
||||
size_t argz_len;
|
||||
char *argz = 0;
|
||||
|
||||
assert (str);
|
||||
assert (pargz);
|
||||
assert (pargz_len);
|
||||
|
||||
/* Make a copy of STR, but replacing each occurrence of
|
||||
DELIM with '\0'. */
|
||||
argz_len = 1+ strlen (str);
|
||||
if (argz_len)
|
||||
{
|
||||
const char *p;
|
||||
char *q;
|
||||
|
||||
argz = (char *) malloc (argz_len);
|
||||
if (!argz)
|
||||
return ENOMEM;
|
||||
|
||||
for (p = str, q = argz; *p != EOS_CHAR; ++p)
|
||||
{
|
||||
if (*p == delim)
|
||||
{
|
||||
/* Ignore leading delimiters, and fold consecutive
|
||||
delimiters in STR into a single '\0' in ARGZ. */
|
||||
if ((q > argz) && (q[-1] != EOS_CHAR))
|
||||
*q++ = EOS_CHAR;
|
||||
else
|
||||
--argz_len;
|
||||
}
|
||||
else
|
||||
*q++ = *p;
|
||||
}
|
||||
/* Copy terminating EOS_CHAR. */
|
||||
*q = *p;
|
||||
}
|
||||
|
||||
/* If ARGZ_LEN has shrunk to nothing, release ARGZ's memory. */
|
||||
if (!argz_len)
|
||||
argz = (free (argz), (char *) 0);
|
||||
|
||||
/* Assign new values. */
|
||||
*pargz = argz;
|
||||
*pargz_len = argz_len;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
error_t
|
||||
argz_insert (char **pargz, size_t *pargz_len, char *before, const char *entry)
|
||||
{
|
||||
assert (pargz);
|
||||
assert (pargz_len);
|
||||
assert (entry && *entry);
|
||||
|
||||
/* No BEFORE address indicates ENTRY should be inserted after the
|
||||
current last element. */
|
||||
if (!before)
|
||||
return argz_append (pargz, pargz_len, entry, 1+ strlen (entry));
|
||||
|
||||
/* This probably indicates a programmer error, but to preserve
|
||||
semantics, scan back to the start of an entry if BEFORE points
|
||||
into the middle of it. */
|
||||
while ((before > *pargz) && (before[-1] != EOS_CHAR))
|
||||
--before;
|
||||
|
||||
{
|
||||
size_t entry_len = 1+ strlen (entry);
|
||||
size_t argz_len = *pargz_len + entry_len;
|
||||
size_t offset = before - *pargz;
|
||||
char *argz = (char *) realloc (*pargz, argz_len);
|
||||
|
||||
if (!argz)
|
||||
return ENOMEM;
|
||||
|
||||
/* Make BEFORE point to the equivalent offset in ARGZ that it
|
||||
used to have in *PARGZ incase realloc() moved the block. */
|
||||
before = argz + offset;
|
||||
|
||||
/* Move the ARGZ entries starting at BEFORE up into the new
|
||||
space at the end -- making room to copy ENTRY into the
|
||||
resulting gap. */
|
||||
memmove (before + entry_len, before, *pargz_len - offset);
|
||||
memcpy (before, entry, entry_len);
|
||||
|
||||
/* Assign new values. */
|
||||
*pargz = argz;
|
||||
*pargz_len = argz_len;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
argz_next (char *argz, size_t argz_len, const char *entry)
|
||||
{
|
||||
assert ((argz && argz_len) || (!argz && !argz_len));
|
||||
|
||||
if (entry)
|
||||
{
|
||||
/* Either ARGZ/ARGZ_LEN is empty, or ENTRY points into an address
|
||||
within the ARGZ vector. */
|
||||
assert ((!argz && !argz_len)
|
||||
|| ((argz <= entry) && (entry < (argz + argz_len))));
|
||||
|
||||
/* Move to the char immediately after the terminating
|
||||
'\0' of ENTRY. */
|
||||
entry = 1+ strchr (entry, EOS_CHAR);
|
||||
|
||||
/* Return either the new ENTRY, or else NULL if ARGZ is
|
||||
exhausted. */
|
||||
return (entry >= argz + argz_len) ? 0 : (char *) entry;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* This should probably be flagged as a programmer error,
|
||||
since starting an argz_next loop with the iterator set
|
||||
to ARGZ is safer. To preserve semantics, handle the NULL
|
||||
case by returning the start of ARGZ (if any). */
|
||||
if (argz_len > 0)
|
||||
return argz;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
argz_stringify (char *argz, size_t argz_len, int sep)
|
||||
{
|
||||
assert ((argz && argz_len) || (!argz && !argz_len));
|
||||
|
||||
if (sep)
|
||||
{
|
||||
--argz_len; /* don't stringify the terminating EOS */
|
||||
while (--argz_len > 0)
|
||||
{
|
||||
if (argz[argz_len] == EOS_CHAR)
|
||||
argz[argz_len] = sep;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,68 +0,0 @@
|
|||
/* lt__argz.h -- internal argz interface for non-glibc systems
|
||||
|
||||
Copyright (C) 2004, 2007, 2008 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,172 +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
|
||||
|
||||
/* 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 in which libtool stores uninstalled libraries.
|
||||
*/
|
||||
#undef LT_OBJDIR
|
||||
|
||||
/* 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
|
|
@ -1,143 +0,0 @@
|
|||
#! /bin/sh
|
||||
# Wrapper for compilers which do not understand `-c -o'.
|
||||
|
||||
scriptversion=2009-04-28.21; # UTC
|
||||
|
||||
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# This file is maintained in Automake, please report
|
||||
# bugs to <bug-automake@gnu.org> or send patches to
|
||||
# <automake-patches@gnu.org>.
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No 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 $?
|
||||
;;
|
||||
esac
|
||||
|
||||
ofile=
|
||||
cfile=
|
||||
eat=
|
||||
|
||||
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
|
||||
mv "$cofile" "$ofile"
|
||||
elif test -f "${cofile}bj"; then
|
||||
mv "${cofile}bj" "$ofile"
|
||||
fi
|
||||
|
||||
rmdir "$lockdir"
|
||||
exit $ret
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
Plik diff jest za duży
Load Diff
Plik diff jest za duży
Load Diff
|
@ -1,630 +0,0 @@
|
|||
#! /bin/sh
|
||||
# depcomp - compile a program generating dependencies as side-effects
|
||||
|
||||
scriptversion=2009-04-28.21; # UTC
|
||||
|
||||
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
|
||||
# Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
|
||||
|
||||
Run PROGRAMS ARGS to compile a file, generating dependencies
|
||||
as side-effects.
|
||||
|
||||
Environment variables:
|
||||
depmode Dependency tracking mode.
|
||||
source Source file read by `PROGRAMS ARGS'.
|
||||
object Object file output by `PROGRAMS ARGS'.
|
||||
DEPDIR directory where to store dependencies.
|
||||
depfile Dependency file to output.
|
||||
tmpdepfile Temporary file to use when outputing dependencies.
|
||||
libtool Whether libtool is used (yes/no).
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
exit $?
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "depcomp $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
esac
|
||||
|
||||
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
|
||||
echo "depcomp: Variables source, object and depmode must be set" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
|
||||
depfile=${depfile-`echo "$object" |
|
||||
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
|
||||
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
|
||||
|
||||
rm -f "$tmpdepfile"
|
||||
|
||||
# Some modes work just like other modes, but use different flags. We
|
||||
# parameterize here, but still list the modes in the big case below,
|
||||
# to make depend.m4 easier to write. Note that we *cannot* use a case
|
||||
# here, because this file can only contain one case statement.
|
||||
if test "$depmode" = hp; then
|
||||
# HP compiler uses -M and no extra arg.
|
||||
gccflag=-M
|
||||
depmode=gcc
|
||||
fi
|
||||
|
||||
if test "$depmode" = dashXmstdout; then
|
||||
# This is just like dashmstdout with a different argument.
|
||||
dashmflag=-xM
|
||||
depmode=dashmstdout
|
||||
fi
|
||||
|
||||
cygpath_u="cygpath -u -f -"
|
||||
if test "$depmode" = msvcmsys; then
|
||||
# This is just like msvisualcpp but w/o cygpath translation.
|
||||
# Just convert the backslash-escaped backslashes to single forward
|
||||
# slashes to satisfy depend.m4
|
||||
cygpath_u="sed s,\\\\\\\\,/,g"
|
||||
depmode=msvisualcpp
|
||||
fi
|
||||
|
||||
case "$depmode" in
|
||||
gcc3)
|
||||
## gcc 3 implements dependency tracking that does exactly what
|
||||
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
|
||||
## it if -MD -MP comes after the -MF stuff. Hmm.
|
||||
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
|
||||
## the command line argument order; so add the flags where they
|
||||
## appear in depend2.am. Note that the slowdown incurred here
|
||||
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
|
||||
*) set fnord "$@" "$arg" ;;
|
||||
esac
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
done
|
||||
"$@"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
mv "$tmpdepfile" "$depfile"
|
||||
;;
|
||||
|
||||
gcc)
|
||||
## There are various ways to get dependency output from gcc. Here's
|
||||
## why we pick this rather obscure method:
|
||||
## - Don't want to use -MD because we'd like the dependencies to end
|
||||
## up in a subdir. Having to rename by hand is ugly.
|
||||
## (We might end up doing this anyway to support other compilers.)
|
||||
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
|
||||
## -MM, not -M (despite what the docs say).
|
||||
## - Using -M directly means running the compiler twice (even worse
|
||||
## than renaming).
|
||||
if test -z "$gccflag"; then
|
||||
gccflag=-MD,
|
||||
fi
|
||||
"$@" -Wp,"$gccflag$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
|
||||
## The second -e expression handles DOS-style file names with drive letters.
|
||||
sed -e 's/^[^:]*: / /' \
|
||||
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
|
||||
## This next piece of magic avoids the `deleted header file' problem.
|
||||
## The problem is that when a header file which appears in a .P file
|
||||
## is deleted, the dependency causes make to die (because there is
|
||||
## typically no way to rebuild the header). We avoid this by adding
|
||||
## dummy dependencies for each header file. Too bad gcc doesn't do
|
||||
## this for us directly.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" |
|
||||
## Some versions of gcc put a space before the `:'. On the theory
|
||||
## that the space means something, we add a space to the output as
|
||||
## well.
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
hp)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
sgi)
|
||||
if test "$libtool" = yes; then
|
||||
"$@" "-Wp,-MDupdate,$tmpdepfile"
|
||||
else
|
||||
"$@" -MDupdate "$tmpdepfile"
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
|
||||
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
|
||||
echo "$object : \\" > "$depfile"
|
||||
|
||||
# Clip off the initial element (the dependent). Don't try to be
|
||||
# clever and replace this with sed code, as IRIX sed won't handle
|
||||
# lines with more than a fixed number of characters (4096 in
|
||||
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
|
||||
# the IRIX cc adds comments like `#:fec' to the end of the
|
||||
# dependency line.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
|
||||
tr '
|
||||
' ' ' >> "$depfile"
|
||||
echo >> "$depfile"
|
||||
|
||||
# The second pass generates a dummy entry for each header file.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
|
||||
>> "$depfile"
|
||||
else
|
||||
# The sourcefile does not contain any dependencies, so just
|
||||
# store a dummy comment line, to avoid errors with the Makefile
|
||||
# "include basename.Plo" scheme.
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
aix)
|
||||
# The C for AIX Compiler uses -M and outputs the dependencies
|
||||
# in a .u file. In older versions, this file always lives in the
|
||||
# current directory. Also, the AIX compiler puts `$object:' at the
|
||||
# start of each line; $object doesn't have directory information.
|
||||
# Version 6 uses the directory in both cases.
|
||||
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||
test "x$dir" = "x$object" && dir=
|
||||
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||
if test "$libtool" = yes; then
|
||||
tmpdepfile1=$dir$base.u
|
||||
tmpdepfile2=$base.u
|
||||
tmpdepfile3=$dir.libs/$base.u
|
||||
"$@" -Wc,-M
|
||||
else
|
||||
tmpdepfile1=$dir$base.u
|
||||
tmpdepfile2=$dir$base.u
|
||||
tmpdepfile3=$dir$base.u
|
||||
"$@" -M
|
||||
fi
|
||||
stat=$?
|
||||
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
if test -f "$tmpdepfile"; then
|
||||
# Each line is of the form `foo.o: dependent.h'.
|
||||
# Do two passes, one to just change these to
|
||||
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
|
||||
# That's a tab and a space in the [].
|
||||
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
# The sourcefile does not contain any dependencies, so just
|
||||
# store a dummy comment line, to avoid errors with the Makefile
|
||||
# "include basename.Plo" scheme.
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
icc)
|
||||
# Intel's C compiler understands `-MD -MF file'. However on
|
||||
# icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
|
||||
# ICC 7.0 will fill foo.d with something like
|
||||
# foo.o: sub/foo.c
|
||||
# foo.o: sub/foo.h
|
||||
# which is wrong. We want:
|
||||
# sub/foo.o: sub/foo.c
|
||||
# sub/foo.o: sub/foo.h
|
||||
# sub/foo.c:
|
||||
# sub/foo.h:
|
||||
# ICC 7.1 will output
|
||||
# foo.o: sub/foo.c sub/foo.h
|
||||
# and will wrap long lines using \ :
|
||||
# foo.o: sub/foo.c ... \
|
||||
# sub/foo.h ... \
|
||||
# ...
|
||||
|
||||
"$@" -MD -MF "$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
# Each line is of the form `foo.o: dependent.h',
|
||||
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
|
||||
# Do two passes, one to just change these to
|
||||
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
|
||||
# Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
# correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
|
||||
sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
hp2)
|
||||
# The "hp" stanza above does not work with aCC (C++) and HP's ia64
|
||||
# compilers, which have integrated preprocessors. The correct option
|
||||
# to use with these is +Maked; it writes dependencies to a file named
|
||||
# 'foo.d', which lands next to the object file, wherever that
|
||||
# happens to be.
|
||||
# Much of this is similar to the tru64 case; see comments there.
|
||||
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||
test "x$dir" = "x$object" && dir=
|
||||
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||
if test "$libtool" = yes; then
|
||||
tmpdepfile1=$dir$base.d
|
||||
tmpdepfile2=$dir.libs/$base.d
|
||||
"$@" -Wc,+Maked
|
||||
else
|
||||
tmpdepfile1=$dir$base.d
|
||||
tmpdepfile2=$dir$base.d
|
||||
"$@" +Maked
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
if test -f "$tmpdepfile"; then
|
||||
sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
|
||||
# Add `dependent.h:' lines.
|
||||
sed -ne '2,${
|
||||
s/^ *//
|
||||
s/ \\*$//
|
||||
s/$/:/
|
||||
p
|
||||
}' "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile" "$tmpdepfile2"
|
||||
;;
|
||||
|
||||
tru64)
|
||||
# The Tru64 compiler uses -MD to generate dependencies as a side
|
||||
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
|
||||
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
|
||||
# dependencies in `foo.d' instead, so we check for that too.
|
||||
# Subdirectories are respected.
|
||||
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||
test "x$dir" = "x$object" && dir=
|
||||
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||
|
||||
if test "$libtool" = yes; then
|
||||
# With Tru64 cc, shared objects can also be used to make a
|
||||
# static library. This mechanism is used in libtool 1.4 series to
|
||||
# handle both shared and static libraries in a single compilation.
|
||||
# With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
|
||||
#
|
||||
# With libtool 1.5 this exception was removed, and libtool now
|
||||
# generates 2 separate objects for the 2 libraries. These two
|
||||
# compilations output dependencies in $dir.libs/$base.o.d and
|
||||
# in $dir$base.o.d. We have to check for both files, because
|
||||
# one of the two compilations can be disabled. We should prefer
|
||||
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
|
||||
# automatically cleaned when .libs/ is deleted, while ignoring
|
||||
# the former would cause a distcleancheck panic.
|
||||
tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
|
||||
tmpdepfile2=$dir$base.o.d # libtool 1.5
|
||||
tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
|
||||
tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
|
||||
"$@" -Wc,-MD
|
||||
else
|
||||
tmpdepfile1=$dir$base.o.d
|
||||
tmpdepfile2=$dir$base.d
|
||||
tmpdepfile3=$dir$base.d
|
||||
tmpdepfile4=$dir$base.d
|
||||
"$@" -MD
|
||||
fi
|
||||
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
if test -f "$tmpdepfile"; then
|
||||
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
|
||||
# That's a tab and a space in the [].
|
||||
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
#nosideeffect)
|
||||
# This comment above is used by automake to tell side-effect
|
||||
# dependency tracking mechanisms from slower ones.
|
||||
|
||||
dashmstdout)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout, regardless of -o.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
# Remove `-o $object'.
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
test -z "$dashmflag" && dashmflag=-M
|
||||
# Require at least two characters before searching for `:'
|
||||
# in the target name. This is to cope with DOS-style filenames:
|
||||
# a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
|
||||
"$@" $dashmflag |
|
||||
sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" | \
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
dashXmstdout)
|
||||
# This case only exists to satisfy depend.m4. It is never actually
|
||||
# run, as this mode is specially recognized in the preamble.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
makedepend)
|
||||
"$@" || exit $?
|
||||
# Remove any Libtool call
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
# X makedepend
|
||||
shift
|
||||
cleared=no eat=no
|
||||
for arg
|
||||
do
|
||||
case $cleared in
|
||||
no)
|
||||
set ""; shift
|
||||
cleared=yes ;;
|
||||
esac
|
||||
if test $eat = yes; then
|
||||
eat=no
|
||||
continue
|
||||
fi
|
||||
case "$arg" in
|
||||
-D*|-I*)
|
||||
set fnord "$@" "$arg"; shift ;;
|
||||
# Strip any option that makedepend may not understand. Remove
|
||||
# the object too, otherwise makedepend will parse it as a source file.
|
||||
-arch)
|
||||
eat=yes ;;
|
||||
-*|$object)
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"; shift ;;
|
||||
esac
|
||||
done
|
||||
obj_suffix=`echo "$object" | sed 's/^.*\././'`
|
||||
touch "$tmpdepfile"
|
||||
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
sed '1,2d' "$tmpdepfile" | tr ' ' '
|
||||
' | \
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile" "$tmpdepfile".bak
|
||||
;;
|
||||
|
||||
cpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
# Remove `-o $object'.
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
"$@" -E |
|
||||
sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
|
||||
-e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
|
||||
sed '$ s: \\$::' > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
cat < "$tmpdepfile" >> "$depfile"
|
||||
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvisualcpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case "$arg" in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
|
||||
set fnord "$@"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
"$@" -E 2>/dev/null |
|
||||
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
|
||||
echo " " >> "$depfile"
|
||||
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvcmsys)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
none)
|
||||
exec "$@"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Unknown depmode $depmode" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
|
@ -1,520 +0,0 @@
|
|||
#!/bin/sh
|
||||
# install - install a program, script, or datafile
|
||||
|
||||
scriptversion=2009-04-28.21; # UTC
|
||||
|
||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
||||
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||
# following copyright and license.
|
||||
#
|
||||
# Copyright (C) 1994 X Consortium
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including without limitation the
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
# sell copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
|
||||
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
# Except as contained in this notice, the name of the X Consortium shall not
|
||||
# be used in advertising or otherwise to promote the sale, use or other deal-
|
||||
# ings in this Software without prior written authorization from the X Consor-
|
||||
# tium.
|
||||
#
|
||||
#
|
||||
# FSF changes to this file are in the public domain.
|
||||
#
|
||||
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||
# `make' implicit rules from creating a file called install from it
|
||||
# when there is no Makefile.
|
||||
#
|
||||
# This script is compatible with the BSD install script, but was written
|
||||
# from scratch.
|
||||
|
||||
nl='
|
||||
'
|
||||
IFS=" "" $nl"
|
||||
|
||||
# set DOITPROG to echo to test this script
|
||||
|
||||
# Don't use :- since 4.3BSD and earlier shells don't like it.
|
||||
doit=${DOITPROG-}
|
||||
if test -z "$doit"; then
|
||||
doit_exec=exec
|
||||
else
|
||||
doit_exec=$doit
|
||||
fi
|
||||
|
||||
# Put in absolute file names if you don't have them in your path;
|
||||
# or use environment vars.
|
||||
|
||||
chgrpprog=${CHGRPPROG-chgrp}
|
||||
chmodprog=${CHMODPROG-chmod}
|
||||
chownprog=${CHOWNPROG-chown}
|
||||
cmpprog=${CMPPROG-cmp}
|
||||
cpprog=${CPPROG-cp}
|
||||
mkdirprog=${MKDIRPROG-mkdir}
|
||||
mvprog=${MVPROG-mv}
|
||||
rmprog=${RMPROG-rm}
|
||||
stripprog=${STRIPPROG-strip}
|
||||
|
||||
posix_glob='?'
|
||||
initialize_posix_glob='
|
||||
test "$posix_glob" != "?" || {
|
||||
if (set -f) 2>/dev/null; then
|
||||
posix_glob=
|
||||
else
|
||||
posix_glob=:
|
||||
fi
|
||||
}
|
||||
'
|
||||
|
||||
posix_mkdir=
|
||||
|
||||
# Desired mode of installed file.
|
||||
mode=0755
|
||||
|
||||
chgrpcmd=
|
||||
chmodcmd=$chmodprog
|
||||
chowncmd=
|
||||
mvcmd=$mvprog
|
||||
rmcmd="$rmprog -f"
|
||||
stripcmd=
|
||||
|
||||
src=
|
||||
dst=
|
||||
dir_arg=
|
||||
dst_arg=
|
||||
|
||||
copy_on_change=false
|
||||
no_target_directory=
|
||||
|
||||
usage="\
|
||||
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
|
||||
or: $0 [OPTION]... SRCFILES... DIRECTORY
|
||||
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
|
||||
or: $0 [OPTION]... -d DIRECTORIES...
|
||||
|
||||
In the 1st form, copy SRCFILE to DSTFILE.
|
||||
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
|
||||
In the 4th, create DIRECTORIES.
|
||||
|
||||
Options:
|
||||
--help display this help and exit.
|
||||
--version display version info and exit.
|
||||
|
||||
-c (ignored)
|
||||
-C install only if different (preserve the last data modification time)
|
||||
-d create directories instead of installing files.
|
||||
-g GROUP $chgrpprog installed files to GROUP.
|
||||
-m MODE $chmodprog installed files to MODE.
|
||||
-o USER $chownprog installed files to USER.
|
||||
-s $stripprog installed files.
|
||||
-t DIRECTORY install into DIRECTORY.
|
||||
-T report an error if DSTFILE is a directory.
|
||||
|
||||
Environment variables override the default commands:
|
||||
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
|
||||
RMPROG STRIPPROG
|
||||
"
|
||||
|
||||
while test $# -ne 0; do
|
||||
case $1 in
|
||||
-c) ;;
|
||||
|
||||
-C) copy_on_change=true;;
|
||||
|
||||
-d) dir_arg=true;;
|
||||
|
||||
-g) chgrpcmd="$chgrpprog $2"
|
||||
shift;;
|
||||
|
||||
--help) echo "$usage"; exit $?;;
|
||||
|
||||
-m) mode=$2
|
||||
case $mode in
|
||||
*' '* | *' '* | *'
|
||||
'* | *'*'* | *'?'* | *'['*)
|
||||
echo "$0: invalid mode: $mode" >&2
|
||||
exit 1;;
|
||||
esac
|
||||
shift;;
|
||||
|
||||
-o) chowncmd="$chownprog $2"
|
||||
shift;;
|
||||
|
||||
-s) stripcmd=$stripprog;;
|
||||
|
||||
-t) dst_arg=$2
|
||||
shift;;
|
||||
|
||||
-T) no_target_directory=true;;
|
||||
|
||||
--version) echo "$0 $scriptversion"; exit $?;;
|
||||
|
||||
--) shift
|
||||
break;;
|
||||
|
||||
-*) echo "$0: invalid option: $1" >&2
|
||||
exit 1;;
|
||||
|
||||
*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
|
||||
# When -d is used, all remaining arguments are directories to create.
|
||||
# When -t is used, the destination is already specified.
|
||||
# Otherwise, the last argument is the destination. Remove it from $@.
|
||||
for arg
|
||||
do
|
||||
if test -n "$dst_arg"; then
|
||||
# $@ is not empty: it contains at least $arg.
|
||||
set fnord "$@" "$dst_arg"
|
||||
shift # fnord
|
||||
fi
|
||||
shift # arg
|
||||
dst_arg=$arg
|
||||
done
|
||||
fi
|
||||
|
||||
if test $# -eq 0; then
|
||||
if test -z "$dir_arg"; then
|
||||
echo "$0: no input file specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
# It's OK to call `install-sh -d' without argument.
|
||||
# This can happen when creating conditional directories.
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if test -z "$dir_arg"; then
|
||||
trap '(exit $?); exit' 1 2 13 15
|
||||
|
||||
# Set umask so as not to create temps with too-generous modes.
|
||||
# However, 'strip' requires both read and write access to temps.
|
||||
case $mode in
|
||||
# Optimize common cases.
|
||||
*644) cp_umask=133;;
|
||||
*755) cp_umask=22;;
|
||||
|
||||
*[0-7])
|
||||
if test -z "$stripcmd"; then
|
||||
u_plus_rw=
|
||||
else
|
||||
u_plus_rw='% 200'
|
||||
fi
|
||||
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
|
||||
*)
|
||||
if test -z "$stripcmd"; then
|
||||
u_plus_rw=
|
||||
else
|
||||
u_plus_rw=,u+rw
|
||||
fi
|
||||
cp_umask=$mode$u_plus_rw;;
|
||||
esac
|
||||
fi
|
||||
|
||||
for src
|
||||
do
|
||||
# Protect names starting with `-'.
|
||||
case $src in
|
||||
-*) src=./$src;;
|
||||
esac
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
dst=$src
|
||||
dstdir=$dst
|
||||
test -d "$dstdir"
|
||||
dstdir_status=$?
|
||||
else
|
||||
|
||||
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
||||
# might cause directories to be created, which would be especially bad
|
||||
# if $src (and thus $dsttmp) contains '*'.
|
||||
if test ! -f "$src" && test ! -d "$src"; then
|
||||
echo "$0: $src does not exist." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test -z "$dst_arg"; then
|
||||
echo "$0: no destination specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
dst=$dst_arg
|
||||
# Protect names starting with `-'.
|
||||
case $dst in
|
||||
-*) dst=./$dst;;
|
||||
esac
|
||||
|
||||
# If destination is a directory, append the input filename; won't work
|
||||
# if double slashes aren't ignored.
|
||||
if test -d "$dst"; then
|
||||
if test -n "$no_target_directory"; then
|
||||
echo "$0: $dst_arg: Is a directory" >&2
|
||||
exit 1
|
||||
fi
|
||||
dstdir=$dst
|
||||
dst=$dstdir/`basename "$src"`
|
||||
dstdir_status=0
|
||||
else
|
||||
# Prefer dirname, but fall back on a substitute if dirname fails.
|
||||
dstdir=`
|
||||
(dirname "$dst") 2>/dev/null ||
|
||||
expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
||||
X"$dst" : 'X\(//\)[^/]' \| \
|
||||
X"$dst" : 'X\(//\)$' \| \
|
||||
X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
|
||||
echo X"$dst" |
|
||||
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\/\)[^/].*/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\/\)$/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\).*/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
s/.*/./; q'
|
||||
`
|
||||
|
||||
test -d "$dstdir"
|
||||
dstdir_status=$?
|
||||
fi
|
||||
fi
|
||||
|
||||
obsolete_mkdir_used=false
|
||||
|
||||
if test $dstdir_status != 0; then
|
||||
case $posix_mkdir in
|
||||
'')
|
||||
# Create intermediate dirs using mode 755 as modified by the umask.
|
||||
# This is like FreeBSD 'install' as of 1997-10-28.
|
||||
umask=`umask`
|
||||
case $stripcmd.$umask in
|
||||
# Optimize common cases.
|
||||
*[2367][2367]) mkdir_umask=$umask;;
|
||||
.*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
|
||||
|
||||
*[0-7])
|
||||
mkdir_umask=`expr $umask + 22 \
|
||||
- $umask % 100 % 40 + $umask % 20 \
|
||||
- $umask % 10 % 4 + $umask % 2
|
||||
`;;
|
||||
*) mkdir_umask=$umask,go-w;;
|
||||
esac
|
||||
|
||||
# With -d, create the new directory with the user-specified mode.
|
||||
# Otherwise, rely on $mkdir_umask.
|
||||
if test -n "$dir_arg"; then
|
||||
mkdir_mode=-m$mode
|
||||
else
|
||||
mkdir_mode=
|
||||
fi
|
||||
|
||||
posix_mkdir=false
|
||||
case $umask in
|
||||
*[123567][0-7][0-7])
|
||||
# POSIX mkdir -p sets u+wx bits regardless of umask, which
|
||||
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
|
||||
;;
|
||||
*)
|
||||
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
|
||||
trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
|
||||
|
||||
if (umask $mkdir_umask &&
|
||||
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
|
||||
then
|
||||
if test -z "$dir_arg" || {
|
||||
# Check for POSIX incompatibilities with -m.
|
||||
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
||||
# other-writeable bit of parent directory when it shouldn't.
|
||||
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
||||
ls_ld_tmpdir=`ls -ld "$tmpdir"`
|
||||
case $ls_ld_tmpdir in
|
||||
d????-?r-*) different_mode=700;;
|
||||
d????-?--*) different_mode=755;;
|
||||
*) false;;
|
||||
esac &&
|
||||
$mkdirprog -m$different_mode -p -- "$tmpdir" && {
|
||||
ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
|
||||
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
||||
}
|
||||
}
|
||||
then posix_mkdir=:
|
||||
fi
|
||||
rmdir "$tmpdir/d" "$tmpdir"
|
||||
else
|
||||
# Remove any dirs left behind by ancient mkdir implementations.
|
||||
rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
|
||||
fi
|
||||
trap '' 0;;
|
||||
esac;;
|
||||
esac
|
||||
|
||||
if
|
||||
$posix_mkdir && (
|
||||
umask $mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
|
||||
)
|
||||
then :
|
||||
else
|
||||
|
||||
# The umask is ridiculous, or mkdir does not conform to POSIX,
|
||||
# or it failed possibly due to a race condition. Create the
|
||||
# directory the slow way, step by step, checking for races as we go.
|
||||
|
||||
case $dstdir in
|
||||
/*) prefix='/';;
|
||||
-*) prefix='./';;
|
||||
*) prefix='';;
|
||||
esac
|
||||
|
||||
eval "$initialize_posix_glob"
|
||||
|
||||
oIFS=$IFS
|
||||
IFS=/
|
||||
$posix_glob set -f
|
||||
set fnord $dstdir
|
||||
shift
|
||||
$posix_glob set +f
|
||||
IFS=$oIFS
|
||||
|
||||
prefixes=
|
||||
|
||||
for d
|
||||
do
|
||||
test -z "$d" && continue
|
||||
|
||||
prefix=$prefix$d
|
||||
if test -d "$prefix"; then
|
||||
prefixes=
|
||||
else
|
||||
if $posix_mkdir; then
|
||||
(umask=$mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
|
||||
# Don't fail if two instances are running concurrently.
|
||||
test -d "$prefix" || exit 1
|
||||
else
|
||||
case $prefix in
|
||||
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
|
||||
*) qprefix=$prefix;;
|
||||
esac
|
||||
prefixes="$prefixes '$qprefix'"
|
||||
fi
|
||||
fi
|
||||
prefix=$prefix/
|
||||
done
|
||||
|
||||
if test -n "$prefixes"; then
|
||||
# Don't fail if two instances are running concurrently.
|
||||
(umask $mkdir_umask &&
|
||||
eval "\$doit_exec \$mkdirprog $prefixes") ||
|
||||
test -d "$dstdir" || exit 1
|
||||
obsolete_mkdir_used=true
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
|
||||
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
|
||||
{ test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
|
||||
test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
|
||||
else
|
||||
|
||||
# Make a couple of temp file names in the proper directory.
|
||||
dsttmp=$dstdir/_inst.$$_
|
||||
rmtmp=$dstdir/_rm.$$_
|
||||
|
||||
# Trap to clean up those temp files at exit.
|
||||
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
||||
|
||||
# Copy the file name to the temp name.
|
||||
(umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
|
||||
|
||||
# and set any options; do chmod last to preserve setuid bits.
|
||||
#
|
||||
# If any of these fail, we abort the whole thing. If we want to
|
||||
# ignore errors from any of these, just make sure not to ignore
|
||||
# errors from the above "$doit $cpprog $src $dsttmp" command.
|
||||
#
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
|
||||
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
|
||||
{ test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
|
||||
{ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
|
||||
|
||||
# If -C, don't bother to copy if it wouldn't change the file.
|
||||
if $copy_on_change &&
|
||||
old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
|
||||
new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
|
||||
|
||||
eval "$initialize_posix_glob" &&
|
||||
$posix_glob set -f &&
|
||||
set X $old && old=:$2:$4:$5:$6 &&
|
||||
set X $new && new=:$2:$4:$5:$6 &&
|
||||
$posix_glob set +f &&
|
||||
|
||||
test "$old" = "$new" &&
|
||||
$cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
|
||||
then
|
||||
rm -f "$dsttmp"
|
||||
else
|
||||
# Rename the file to the real destination.
|
||||
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
|
||||
|
||||
# The rename failed, perhaps because mv can't rename something else
|
||||
# to itself, or perhaps because mv is so ancient that it does not
|
||||
# support -f.
|
||||
{
|
||||
# Now remove or move aside any old file at destination location.
|
||||
# We try this two ways since rm can't unlink itself on some
|
||||
# systems and the destination file might be busy for other
|
||||
# reasons. In this case, the final cleanup might fail but the new
|
||||
# file should still install successfully.
|
||||
{
|
||||
test ! -f "$dst" ||
|
||||
$doit $rmcmd -f "$dst" 2>/dev/null ||
|
||||
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
|
||||
{ $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
|
||||
} ||
|
||||
{ echo "$0: cannot unlink or rename $dst" >&2
|
||||
(exit 1); exit 1
|
||||
}
|
||||
} &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
$doit $mvcmd "$dsttmp" "$dst"
|
||||
}
|
||||
fi || exit 1
|
||||
|
||||
trap '' 0
|
||||
fi
|
||||
done
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
Plik diff jest za duży
Load Diff
|
@ -1,376 +0,0 @@
|
|||
#! /bin/sh
|
||||
# Common stub for a few missing GNU programs while installing.
|
||||
|
||||
scriptversion=2009-04-28.21; # UTC
|
||||
|
||||
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
|
||||
# 2008, 2009 Free Software Foundation, Inc.
|
||||
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
if test $# -eq 0; then
|
||||
echo 1>&2 "Try \`$0 --help' for more information"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
run=:
|
||||
sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
|
||||
sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
|
||||
|
||||
# In the cases where this matters, `missing' is being run in the
|
||||
# srcdir already.
|
||||
if test -f configure.ac; then
|
||||
configure_ac=configure.ac
|
||||
else
|
||||
configure_ac=configure.in
|
||||
fi
|
||||
|
||||
msg="missing on your system"
|
||||
|
||||
case $1 in
|
||||
--run)
|
||||
# Try to run requested program, and just exit if it succeeds.
|
||||
run=
|
||||
shift
|
||||
"$@" && exit 0
|
||||
# Exit code 63 means version mismatch. This often happens
|
||||
# when the user try to use an ancient version of a tool on
|
||||
# a file that requires a minimum version. In this case we
|
||||
# we should proceed has if the program had been absent, or
|
||||
# if --run hadn't been passed.
|
||||
if test $? = 63; then
|
||||
run=:
|
||||
msg="probably too old"
|
||||
fi
|
||||
;;
|
||||
|
||||
-h|--h|--he|--hel|--help)
|
||||
echo "\
|
||||
$0 [OPTION]... PROGRAM [ARGUMENT]...
|
||||
|
||||
Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
|
||||
error status if there is no known handling for PROGRAM.
|
||||
|
||||
Options:
|
||||
-h, --help display this help and exit
|
||||
-v, --version output version information and exit
|
||||
--run try to run the given command, and emulate it if it fails
|
||||
|
||||
Supported PROGRAM values:
|
||||
aclocal touch file \`aclocal.m4'
|
||||
autoconf touch file \`configure'
|
||||
autoheader touch file \`config.h.in'
|
||||
autom4te touch the output file, or create a stub one
|
||||
automake touch all \`Makefile.in' files
|
||||
bison create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||
flex create \`lex.yy.c', if possible, from existing .c
|
||||
help2man touch the output file
|
||||
lex create \`lex.yy.c', if possible, from existing .c
|
||||
makeinfo touch the output file
|
||||
tar try tar, gnutar, gtar, then tar without non-portable flags
|
||||
yacc create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||
|
||||
Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
|
||||
\`g' are ignored when checking the name.
|
||||
|
||||
Send bug reports to <bug-automake@gnu.org>."
|
||||
exit $?
|
||||
;;
|
||||
|
||||
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
|
||||
echo "missing $scriptversion (GNU Automake)"
|
||||
exit $?
|
||||
;;
|
||||
|
||||
-*)
|
||||
echo 1>&2 "$0: Unknown \`$1' option"
|
||||
echo 1>&2 "Try \`$0 --help' for more information"
|
||||
exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
# normalize program name to check for.
|
||||
program=`echo "$1" | sed '
|
||||
s/^gnu-//; t
|
||||
s/^gnu//; t
|
||||
s/^g//; t'`
|
||||
|
||||
# Now exit if we have it, but it failed. Also exit now if we
|
||||
# don't have it and --version was passed (most likely to detect
|
||||
# the program). This is about non-GNU programs, so use $1 not
|
||||
# $program.
|
||||
case $1 in
|
||||
lex*|yacc*)
|
||||
# Not GNU programs, they don't have --version.
|
||||
;;
|
||||
|
||||
tar*)
|
||||
if test -n "$run"; then
|
||||
echo 1>&2 "ERROR: \`tar' requires --run"
|
||||
exit 1
|
||||
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
||||
# Could not run --version or --help. This is probably someone
|
||||
# running `$TOOL --version' or `$TOOL --help' to check whether
|
||||
# $TOOL exists and not knowing $TOOL uses missing.
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# If it does not exist, or fails to run (possibly an outdated version),
|
||||
# try to emulate it.
|
||||
case $program in
|
||||
aclocal*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`acinclude.m4' or \`${configure_ac}'. You might want
|
||||
to install the \`Automake' and \`Perl' packages. Grab them from
|
||||
any GNU archive site."
|
||||
touch aclocal.m4
|
||||
;;
|
||||
|
||||
autoconf*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`${configure_ac}'. You might want to install the
|
||||
\`Autoconf' and \`GNU m4' packages. Grab them from any GNU
|
||||
archive site."
|
||||
touch configure
|
||||
;;
|
||||
|
||||
autoheader*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`acconfig.h' or \`${configure_ac}'. You might want
|
||||
to install the \`Autoconf' and \`GNU m4' packages. Grab them
|
||||
from any GNU archive site."
|
||||
files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
|
||||
test -z "$files" && files="config.h"
|
||||
touch_files=
|
||||
for f in $files; do
|
||||
case $f in
|
||||
*:*) touch_files="$touch_files "`echo "$f" |
|
||||
sed -e 's/^[^:]*://' -e 's/:.*//'`;;
|
||||
*) touch_files="$touch_files $f.in";;
|
||||
esac
|
||||
done
|
||||
touch $touch_files
|
||||
;;
|
||||
|
||||
automake*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
|
||||
You might want to install the \`Automake' and \`Perl' packages.
|
||||
Grab them from any GNU archive site."
|
||||
find . -type f -name Makefile.am -print |
|
||||
sed 's/\.am$/.in/' |
|
||||
while read f; do touch "$f"; done
|
||||
;;
|
||||
|
||||
autom4te*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is needed, but is $msg.
|
||||
You might have modified some files without having the
|
||||
proper tools for further handling them.
|
||||
You can get \`$1' as part of \`Autoconf' from any GNU
|
||||
archive site."
|
||||
|
||||
file=`echo "$*" | sed -n "$sed_output"`
|
||||
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||
if test -f "$file"; then
|
||||
touch $file
|
||||
else
|
||||
test -z "$file" || exec >$file
|
||||
echo "#! /bin/sh"
|
||||
echo "# Created by GNU Automake missing as a replacement of"
|
||||
echo "# $ $@"
|
||||
echo "exit 0"
|
||||
chmod +x $file
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
bison*|yacc*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' $msg. You should only need it if
|
||||
you modified a \`.y' file. You may need the \`Bison' package
|
||||
in order for those modifications to take effect. You can get
|
||||
\`Bison' from any GNU archive site."
|
||||
rm -f y.tab.c y.tab.h
|
||||
if test $# -ne 1; then
|
||||
eval LASTARG="\${$#}"
|
||||
case $LASTARG in
|
||||
*.y)
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
|
||||
if test -f "$SRCFILE"; then
|
||||
cp "$SRCFILE" y.tab.c
|
||||
fi
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
|
||||
if test -f "$SRCFILE"; then
|
||||
cp "$SRCFILE" y.tab.h
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if test ! -f y.tab.h; then
|
||||
echo >y.tab.h
|
||||
fi
|
||||
if test ! -f y.tab.c; then
|
||||
echo 'main() { return 0; }' >y.tab.c
|
||||
fi
|
||||
;;
|
||||
|
||||
lex*|flex*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified a \`.l' file. You may need the \`Flex' package
|
||||
in order for those modifications to take effect. You can get
|
||||
\`Flex' from any GNU archive site."
|
||||
rm -f lex.yy.c
|
||||
if test $# -ne 1; then
|
||||
eval LASTARG="\${$#}"
|
||||
case $LASTARG in
|
||||
*.l)
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
|
||||
if test -f "$SRCFILE"; then
|
||||
cp "$SRCFILE" lex.yy.c
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if test ! -f lex.yy.c; then
|
||||
echo 'main() { return 0; }' >lex.yy.c
|
||||
fi
|
||||
;;
|
||||
|
||||
help2man*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified a dependency of a manual page. You may need the
|
||||
\`Help2man' package in order for those modifications to take
|
||||
effect. You can get \`Help2man' from any GNU archive site."
|
||||
|
||||
file=`echo "$*" | sed -n "$sed_output"`
|
||||
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||
if test -f "$file"; then
|
||||
touch $file
|
||||
else
|
||||
test -z "$file" || exec >$file
|
||||
echo ".ab help2man is required to generate this page"
|
||||
exit $?
|
||||
fi
|
||||
;;
|
||||
|
||||
makeinfo*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified a \`.texi' or \`.texinfo' file, or any other file
|
||||
indirectly affecting the aspect of the manual. The spurious
|
||||
call might also be the consequence of using a buggy \`make' (AIX,
|
||||
DU, IRIX). You might want to install the \`Texinfo' package or
|
||||
the \`GNU make' package. Grab either from any GNU archive site."
|
||||
# The file to touch is that specified with -o ...
|
||||
file=`echo "$*" | sed -n "$sed_output"`
|
||||
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||
if test -z "$file"; then
|
||||
# ... or it is the one specified with @setfilename ...
|
||||
infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
|
||||
file=`sed -n '
|
||||
/^@setfilename/{
|
||||
s/.* \([^ ]*\) *$/\1/
|
||||
p
|
||||
q
|
||||
}' $infile`
|
||||
# ... or it is derived from the source name (dir/f.texi becomes f.info)
|
||||
test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
|
||||
fi
|
||||
# If the file does not exist, the user really needs makeinfo;
|
||||
# let's fail without touching anything.
|
||||
test -f $file || exit 1
|
||||
touch $file
|
||||
;;
|
||||
|
||||
tar*)
|
||||
shift
|
||||
|
||||
# We have already tried tar in the generic part.
|
||||
# Look for gnutar/gtar before invocation to avoid ugly error
|
||||
# messages.
|
||||
if (gnutar --version > /dev/null 2>&1); then
|
||||
gnutar "$@" && exit 0
|
||||
fi
|
||||
if (gtar --version > /dev/null 2>&1); then
|
||||
gtar "$@" && exit 0
|
||||
fi
|
||||
firstarg="$1"
|
||||
if shift; then
|
||||
case $firstarg in
|
||||
*o*)
|
||||
firstarg=`echo "$firstarg" | sed s/o//`
|
||||
tar "$firstarg" "$@" && exit 0
|
||||
;;
|
||||
esac
|
||||
case $firstarg in
|
||||
*h*)
|
||||
firstarg=`echo "$firstarg" | sed s/h//`
|
||||
tar "$firstarg" "$@" && exit 0
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: I can't seem to be able to run \`tar' with the given arguments.
|
||||
You may want to install GNU tar or Free paxutils, or check the
|
||||
command line arguments."
|
||||
exit 1
|
||||
;;
|
||||
|
||||
*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is needed, and is $msg.
|
||||
You might have modified some files without having the
|
||||
proper tools for further handling them. Check the \`README' file,
|
||||
it often tells you about the needed prerequisites for installing
|
||||
this package. You may also peek at any GNU archive site, in case
|
||||
some other package would contain this missing \`$1' program."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
Plik diff jest za duży
Load Diff
|
@ -1,75 +0,0 @@
|
|||
# Process this file with autoconf to create configure. -*- autoconf -*-
|
||||
#
|
||||
# Copyright (C) 2004, 2005, 2007, 2008 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.2.6b], [bug-libtool@gnu.org])
|
||||
AC_CONFIG_HEADERS([config.h:config-h.in])
|
||||
AC_CONFIG_SRCDIR([ltdl.c])
|
||||
AC_CONFIG_AUX_DIR([config])
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
LT_CONFIG_LTDL_DIR([.]) # I am me!
|
||||
|
||||
|
||||
## ------------------------ ##
|
||||
## Automake Initialisation. ##
|
||||
## ------------------------ ##
|
||||
|
||||
AM_INIT_AUTOMAKE([gnu])
|
||||
|
||||
|
||||
## ------------------------------- ##
|
||||
## Libtool specific configuration. ##
|
||||
## ------------------------------- ##
|
||||
pkgdatadir='${datadir}'"/${PACKAGE}"
|
||||
|
||||
|
||||
## ----------------------- ##
|
||||
## Libtool initialisation. ##
|
||||
## ----------------------- ##
|
||||
LT_INIT([dlopen win32-dll])
|
||||
_LTDL_SETUP
|
||||
|
||||
|
||||
## -------- ##
|
||||
## Outputs. ##
|
||||
## -------- ##
|
||||
AC_CONFIG_FILES([Makefile])
|
||||
AC_OUTPUT
|
|
@ -1,58 +0,0 @@
|
|||
/* lt__alloc.h -- internal memory management interface
|
||||
|
||||
Copyright (C) 2004 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 { \
|
||||
if (mem) { free ((void *)mem); mem = NULL; } } LT_STMT_END
|
||||
#define MEMREASSIGN(p, q) LT_STMT_START { \
|
||||
if ((p) != (q)) { if (p) 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,87 +0,0 @@
|
|||
/* lt__dirent.h -- internal directory entry scanning interface
|
||||
|
||||
Copyright (C) 2001, 2004, 2006 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,83 +0,0 @@
|
|||
/* lt__glibc.h -- support for non glibc environments
|
||||
|
||||
Copyright (C) 2004, 2006, 2007 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
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <argz.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
# 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,149 +0,0 @@
|
|||
/* lt__private.h -- internal apis for libltdl
|
||||
|
||||
Copyright (C) 2004, 2005, 2006, 2007, 2008 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)))
|
||||
|
||||
|
||||
|
||||
/* --- 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,53 +0,0 @@
|
|||
/* lt__strl.h -- size-bounded string copying and concatenation
|
||||
|
||||
Copyright (C) 2004, 2006 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,90 +0,0 @@
|
|||
/* lt_dlloader.h -- dynamic library loader interface
|
||||
|
||||
Copyright (C) 2004, 2007, 2008 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 (char *name);
|
||||
LT_SCOPE const lt_dlvtable *lt_dlloader_find (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,85 +0,0 @@
|
|||
/* lt_error.h -- error propogation interface
|
||||
|
||||
Copyright (C) 1999, 2000, 2001, 2004, 2007 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,154 +0,0 @@
|
|||
/* lt_system.h -- system portability abstraction layer
|
||||
|
||||
Copyright (C) 2004, 2007 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 which 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
|
||||
|
||||
/* 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,94 +0,0 @@
|
|||
/* slist.h -- generalised singly linked lists
|
||||
|
||||
Copyright (C) 2000, 2004 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
|
||||
|
||||
#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 void * 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, 1999, 2000, 2004, 2006,
|
||||
2007, 2008 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 LT__UNUSED loader_data)
|
||||
{
|
||||
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 LT__UNUSED loader_data, const char *filename,
|
||||
lt_dladvise LT__UNUSED advise)
|
||||
{
|
||||
lt_module module = lt__strdup (filename);
|
||||
|
||||
if (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 LT__UNUSED loader_data, 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 LT__UNUSED loader_data, lt_module LT__UNUSED module,
|
||||
const char *name)
|
||||
{
|
||||
void *address = dld_get_func (name);
|
||||
|
||||
if (!address)
|
||||
{
|
||||
LT__SETERROR (SYMBOL_NOT_FOUND);
|
||||
}
|
||||
|
||||
return address;
|
||||
}
|
|
@ -1,235 +0,0 @@
|
|||
/* loader-dlopen.c -- dynamic linking with dlopen/dlsym
|
||||
|
||||
Copyright (C) 1998, 1999, 2000, 2004, 2006,
|
||||
2007, 2008 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 LT__UNUSED loader_data)
|
||||
{
|
||||
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 LT__UNUSED loader_data, const char *filename,
|
||||
lt_dladvise advise)
|
||||
{
|
||||
int module_flags = LT_LAZY_OR_NOW;
|
||||
lt_module module;
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
module = dlopen (filename, module_flags);
|
||||
|
||||
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 LT__UNUSED loader_data, 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 LT__UNUSED loader_data, 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, 1999, 2000, 2004, 2006,
|
||||
2007, 2008 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 LT__UNUSED loader_data)
|
||||
{
|
||||
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 LT__UNUSED advise)
|
||||
{
|
||||
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)
|
||||
{
|
||||
strncpy (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, 1999, 2000, 2004, 2006,
|
||||
2007, 2008 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 LT__UNUSED loader_data)
|
||||
{
|
||||
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 LT__UNUSED loader_data, const char *filename,
|
||||
lt_dladvise LT__UNUSED advise)
|
||||
{
|
||||
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 LT__UNUSED loader_data, 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 LT__UNUSED loader_data, 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,251 +0,0 @@
|
|||
/* loader-loadlibrary.c -- dynamic linking for Win32
|
||||
|
||||
Copyright (C) 1998, 1999, 2000, 2004, 2005, 2006,
|
||||
2007, 2008 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>
|
||||
|
||||
/* A function called through the vtable when this loader is no
|
||||
longer needed by the application. */
|
||||
static int
|
||||
vl_exit (lt_user_data LT__UNUSED loader_data)
|
||||
{
|
||||
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 LT__UNUSED loader_data, const char *filename,
|
||||
lt_dladvise LT__UNUSED advise)
|
||||
{
|
||||
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 = LT_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.
|
||||
No way to get the error mode, but to set it,
|
||||
so set it twice to preserve any previous flags. */
|
||||
UINT errormode = SetErrorMode(SEM_FAILCRITICALERRORS);
|
||||
SetErrorMode(errormode | SEM_FAILCRITICALERRORS);
|
||||
|
||||
module = LoadLibrary (wpath);
|
||||
|
||||
/* Restore the error mode. */
|
||||
SetErrorMode(errormode);
|
||||
}
|
||||
|
||||
/* 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 (cur || !module)
|
||||
{
|
||||
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 LT__UNUSED loader_data, lt_module module)
|
||||
{
|
||||
int errors = 0;
|
||||
|
||||
if (FreeLibrary((HMODULE) module) == 0)
|
||||
{
|
||||
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 LT__UNUSED loader_data, lt_module module, const char *name)
|
||||
{
|
||||
void *address = (void *) GetProcAddress ((HMODULE) module, name);
|
||||
|
||||
if (!address)
|
||||
{
|
||||
LT__SETERROR (SYMBOL_NOT_FOUND);
|
||||
}
|
||||
|
||||
return address;
|
||||
}
|
|
@ -1,375 +0,0 @@
|
|||
/* loader-preopen.c -- emulate dynamic linking using preloaded_symbols
|
||||
|
||||
Copyright (C) 1998, 1999, 2000, 2004, 2006,
|
||||
2007, 2008 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 LT__UNUSED loader_data)
|
||||
{
|
||||
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 LT__UNUSED loader_data)
|
||||
{
|
||||
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 LT__UNUSED loader_data, const char *filename,
|
||||
lt_dladvise LT__UNUSED advise)
|
||||
{
|
||||
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 LT__UNUSED loader_data, lt_module LT__UNUSED module)
|
||||
{
|
||||
/* 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 LT__UNUSED loader_data, lt_module module, const char *name)
|
||||
{
|
||||
lt_dlsymlist *symbol = (lt_dlsymlist*) module;
|
||||
|
||||
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;
|
||||
}
|
||||
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;
|
||||
}
|
|
@ -1,222 +0,0 @@
|
|||
/* loader-shl_load.c -- dynamic linking with shl_load (HP-UX)
|
||||
|
||||
Copyright (C) 1998, 1999, 2000, 2004, 2006,
|
||||
2007, 2008 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 shl_load_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_shl_load";
|
||||
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_DL_H)
|
||||
# include <dl.h>
|
||||
#endif
|
||||
|
||||
/* some flags are missing on some systems, so we provide
|
||||
* harmless defaults.
|
||||
*
|
||||
* Mandatory:
|
||||
* BIND_IMMEDIATE - Resolve symbol references when the library is loaded.
|
||||
* BIND_DEFERRED - Delay code symbol resolution until actual reference.
|
||||
*
|
||||
* Optionally:
|
||||
* BIND_FIRST - Place the library at the head of the symbol search
|
||||
* order.
|
||||
* BIND_NONFATAL - The default BIND_IMMEDIATE behavior is to treat all
|
||||
* unsatisfied symbols as fatal. This flag allows
|
||||
* binding of unsatisfied code symbols to be deferred
|
||||
* until use.
|
||||
* [Perl: For certain libraries, like DCE, deferred
|
||||
* binding often causes run time problems. Adding
|
||||
* BIND_NONFATAL to BIND_IMMEDIATE still allows
|
||||
* unresolved references in situations like this.]
|
||||
* BIND_NOSTART - Do not call the initializer for the shared library
|
||||
* when the library is loaded, nor on a future call to
|
||||
* shl_unload().
|
||||
* BIND_VERBOSE - Print verbose messages concerning possible
|
||||
* unsatisfied symbols.
|
||||
*
|
||||
* hp9000s700/hp9000s800:
|
||||
* BIND_RESTRICTED - Restrict symbols visible by the library to those
|
||||
* present at library load time.
|
||||
* DYNAMIC_PATH - Allow the loader to dynamically search for the
|
||||
* library specified by the path argument.
|
||||
*/
|
||||
|
||||
#if !defined(DYNAMIC_PATH)
|
||||
# define DYNAMIC_PATH 0
|
||||
#endif
|
||||
#if !defined(BIND_RESTRICTED)
|
||||
# define BIND_RESTRICTED 0
|
||||
#endif
|
||||
|
||||
#define LT_BIND_FLAGS (BIND_IMMEDIATE | BIND_NONFATAL | DYNAMIC_PATH)
|
||||
|
||||
|
||||
/* A function called through the vtable when this loader is no
|
||||
longer needed by the application. */
|
||||
static int
|
||||
vl_exit (lt_user_data LT__UNUSED loader_data)
|
||||
{
|
||||
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 LT__UNUSED loader_data, const char *filename,
|
||||
lt_dladvise LT__UNUSED advise)
|
||||
{
|
||||
static shl_t self = (shl_t) 0;
|
||||
lt_module module = shl_load (filename, LT_BIND_FLAGS, 0L);
|
||||
|
||||
/* Since searching for a symbol against a NULL module handle will also
|
||||
look in everything else that was already loaded and exported with
|
||||
the -E compiler flag, we always cache a handle saved before any
|
||||
modules are loaded. */
|
||||
if (!self)
|
||||
{
|
||||
void *address;
|
||||
shl_findsym (&self, "main", TYPE_UNDEFINED, &address);
|
||||
}
|
||||
|
||||
if (!filename)
|
||||
{
|
||||
module = self;
|
||||
}
|
||||
else
|
||||
{
|
||||
module = shl_load (filename, LT_BIND_FLAGS, 0L);
|
||||
|
||||
if (!module)
|
||||
{
|
||||
LT__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 LT__UNUSED loader_data, lt_module module)
|
||||
{
|
||||
int errors = 0;
|
||||
|
||||
if (module && (shl_unload ((shl_t) (module)) != 0))
|
||||
{
|
||||
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 LT__UNUSED loader_data, lt_module module, const char *name)
|
||||
{
|
||||
void *address = 0;
|
||||
|
||||
/* sys_shl_open should never return a NULL module handle */
|
||||
if (module == (lt_module) 0)
|
||||
{
|
||||
LT__SETERROR (INVALID_HANDLE);
|
||||
}
|
||||
else if (!shl_findsym((shl_t*) &module, name, TYPE_UNDEFINED, &address))
|
||||
{
|
||||
if (!address)
|
||||
{
|
||||
LT__SETERROR (SYMBOL_NOT_FOUND);
|
||||
}
|
||||
}
|
||||
|
||||
return address;
|
||||
}
|
|
@ -1,95 +0,0 @@
|
|||
/* lt__alloc.c -- internal memory management interface
|
||||
|
||||
Copyright (C) 2004, 2006, 2007 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.
|
||||
*/
|
||||
|
||||
#include "lt__private.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "lt__alloc.h"
|
||||
|
||||
static void alloc_die_default (void);
|
||||
|
||||
void (*lt__alloc_die) (void) = alloc_die_default;
|
||||
|
||||
/* Unless overridden, exit on memory failure. */
|
||||
static void
|
||||
alloc_die_default (void)
|
||||
{
|
||||
fprintf (stderr, "Out of memory.\n");
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
void *
|
||||
lt__malloc (size_t n)
|
||||
{
|
||||
void *mem;
|
||||
|
||||
if (! (mem = malloc (n)))
|
||||
(*lt__alloc_die) ();
|
||||
|
||||
return mem;
|
||||
}
|
||||
|
||||
void *
|
||||
lt__zalloc (size_t n)
|
||||
{
|
||||
void *mem;
|
||||
|
||||
if ((mem = lt__malloc (n)))
|
||||
memset (mem, 0, n);
|
||||
|
||||
return mem;
|
||||
}
|
||||
|
||||
void *
|
||||
lt__realloc (void *mem, size_t n)
|
||||
{
|
||||
if (! (mem = realloc (mem, n)))
|
||||
(*lt__alloc_die) ();
|
||||
|
||||
return mem;
|
||||
}
|
||||
|
||||
void *
|
||||
lt__memdup (void const *mem, size_t n)
|
||||
{
|
||||
void *newmem;
|
||||
|
||||
if ((newmem = lt__malloc (n)))
|
||||
return memcpy (newmem, mem, n);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *
|
||||
lt__strdup (const char *string)
|
||||
{
|
||||
return (char *) lt__memdup (string, strlen (string) +1);
|
||||
}
|
|
@ -1,107 +0,0 @@
|
|||
/* lt__dirent.c -- internal directory entry scanning interface
|
||||
|
||||
Copyright (C) 2001, 2004 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.
|
||||
*/
|
||||
|
||||
#include "lt__private.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#include "lt__dirent.h"
|
||||
|
||||
#if defined(__WINDOWS__)
|
||||
|
||||
void
|
||||
closedir (DIR *entry)
|
||||
{
|
||||
assert (entry != (DIR *) NULL);
|
||||
FindClose (entry->hSearch);
|
||||
free ((void *) entry);
|
||||
}
|
||||
|
||||
|
||||
DIR *
|
||||
opendir (const char *path)
|
||||
{
|
||||
char file_spec[LT_FILENAME_MAX];
|
||||
DIR *entry;
|
||||
|
||||
assert (path != (char *) 0);
|
||||
if (lt_strlcpy (file_spec, path, sizeof file_spec) >= sizeof file_spec
|
||||
|| lt_strlcat (file_spec, "\\", sizeof file_spec) >= sizeof file_spec)
|
||||
return (DIR *) 0;
|
||||
entry = (DIR *) malloc (sizeof(DIR));
|
||||
if (entry != (DIR *) 0)
|
||||
{
|
||||
entry->firsttime = TRUE;
|
||||
entry->hSearch = FindFirstFile (file_spec, &entry->Win32FindData);
|
||||
|
||||
if (entry->hSearch == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
if (lt_strlcat (file_spec, "\\*.*", sizeof file_spec) < sizeof file_spec)
|
||||
{
|
||||
entry->hSearch = FindFirstFile (file_spec, &entry->Win32FindData);
|
||||
}
|
||||
|
||||
if (entry->hSearch == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
entry = (free (entry), (DIR *) 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return entry;
|
||||
}
|
||||
|
||||
|
||||
struct dirent *
|
||||
readdir (DIR *entry)
|
||||
{
|
||||
int status;
|
||||
|
||||
if (entry == (DIR *) 0)
|
||||
return (struct dirent *) 0;
|
||||
|
||||
if (!entry->firsttime)
|
||||
{
|
||||
status = FindNextFile (entry->hSearch, &entry->Win32FindData);
|
||||
if (status == 0)
|
||||
return (struct dirent *) 0;
|
||||
}
|
||||
|
||||
entry->firsttime = FALSE;
|
||||
if (lt_strlcpy (entry->file_info.d_name, entry->Win32FindData.cFileName,
|
||||
sizeof entry->file_info.d_name) >= sizeof entry->file_info.d_name)
|
||||
return (struct dirent *) 0;
|
||||
entry->file_info.d_namlen = strlen (entry->file_info.d_name);
|
||||
|
||||
return &entry->file_info;
|
||||
}
|
||||
|
||||
#endif /*defined(__WINDOWS__)*/
|
|
@ -1,127 +0,0 @@
|
|||
/* lt__strl.c -- size-bounded string copying and concatenation
|
||||
|
||||
Copyright (C) 2004 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.
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "lt__strl.h"
|
||||
|
||||
/*
|
||||
lt_strlcat appends the NULL-terminated string src to the end of dst.
|
||||
It will append at most dstsize - strlen(dst) - 1 bytes,
|
||||
NULL-terminating the result. The total length of the string which
|
||||
would have been created given sufficient buffer size (may be longer
|
||||
than dstsize) is returned. This function substitutes for strlcat()
|
||||
which is available under NetBSD, FreeBSD and Solaris 9.
|
||||
|
||||
Buffer overflow can be checked as follows:
|
||||
|
||||
if (lt_strlcat(dst, src, dstsize) >= dstsize)
|
||||
return -1;
|
||||
*/
|
||||
#if !defined(HAVE_STRLCAT)
|
||||
size_t
|
||||
lt_strlcat(char *dst, const char *src, const size_t dstsize)
|
||||
{
|
||||
size_t length;
|
||||
char *p;
|
||||
const char *q;
|
||||
|
||||
assert(dst != NULL);
|
||||
assert(src != (const char *) NULL);
|
||||
assert(dstsize >= 1);
|
||||
|
||||
length=strlen(dst);
|
||||
|
||||
/*
|
||||
Copy remaining characters from src while constraining length to
|
||||
size - 1.
|
||||
*/
|
||||
for ( p = dst + length, q = src;
|
||||
(*q != 0) && (length < dstsize - 1) ;
|
||||
length++, p++, q++ )
|
||||
*p = *q;
|
||||
|
||||
dst[length]='\0';
|
||||
|
||||
/*
|
||||
Add remaining length of src to length.
|
||||
*/
|
||||
while (*q++)
|
||||
length++;
|
||||
|
||||
return length;
|
||||
}
|
||||
#endif /* !defined(HAVE_STRLCAT) */
|
||||
|
||||
/*
|
||||
lt_strlcpy copies up to dstsize - 1 characters from the NULL-terminated
|
||||
string src to dst, NULL-terminating the result. The total length of
|
||||
the string which would have been created given sufficient buffer
|
||||
size (may be longer than dstsize) is returned. This function
|
||||
substitutes for strlcpy() which is available under OpenBSD, FreeBSD
|
||||
and Solaris 9.
|
||||
|
||||
Buffer overflow can be checked as follows:
|
||||
|
||||
if (lt_strlcpy(dst, src, dstsize) >= dstsize)
|
||||
return -1;
|
||||
*/
|
||||
#if !defined(HAVE_STRLCPY)
|
||||
size_t
|
||||
lt_strlcpy(char *dst, const char *src, const size_t dstsize)
|
||||
{
|
||||
size_t length=0;
|
||||
char *p;
|
||||
const char *q;
|
||||
|
||||
assert(dst != NULL);
|
||||
assert(src != (const char *) NULL);
|
||||
assert(dstsize >= 1);
|
||||
|
||||
/*
|
||||
Copy src to dst within bounds of size-1.
|
||||
*/
|
||||
for ( p=dst, q=src, length=0 ;
|
||||
(*q != 0) && (length < dstsize-1) ;
|
||||
length++, p++, q++ )
|
||||
*p = *q;
|
||||
|
||||
dst[length]='\0';
|
||||
|
||||
/*
|
||||
Add remaining length of src to length.
|
||||
*/
|
||||
while (*q++)
|
||||
length++;
|
||||
|
||||
return length;
|
||||
}
|
||||
#endif /* !defined(HAVE_STRLCPY) */
|
|
@ -1,210 +0,0 @@
|
|||
/* lt_dlloader.c -- dynamic library loader interface
|
||||
|
||||
Copyright (C) 2004, 2007, 2008 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.
|
||||
*/
|
||||
|
||||
#include "lt__private.h"
|
||||
#include "lt_dlloader.h"
|
||||
|
||||
#define RETURN_SUCCESS 0
|
||||
#define RETURN_FAILURE 1
|
||||
|
||||
static void * loader_callback (SList *item, void *userdata);
|
||||
|
||||
/* A list of all the dlloaders we know about, each stored as a boxed
|
||||
SList item: */
|
||||
static SList *loaders = 0;
|
||||
|
||||
|
||||
/* Return NULL, unless the loader in this ITEM has a matching name,
|
||||
in which case we return the matching item so that its address is
|
||||
passed back out (for possible freeing) by slist_remove. */
|
||||
static void *
|
||||
loader_callback (SList *item, void *userdata)
|
||||
{
|
||||
const lt_dlvtable *vtable = (const lt_dlvtable *) item->userdata;
|
||||
const char * name = (const char *) userdata;
|
||||
|
||||
assert (vtable);
|
||||
|
||||
return streq (vtable->name, name) ? (void *) item : NULL;
|
||||
}
|
||||
|
||||
|
||||
/* Hook VTABLE into our global LOADERS list according to its own
|
||||
PRIORITY field value. */
|
||||
int
|
||||
lt_dlloader_add (const lt_dlvtable *vtable)
|
||||
{
|
||||
SList *item;
|
||||
|
||||
if ((vtable == 0) /* diagnose invalid vtable fields */
|
||||
|| (vtable->module_open == 0)
|
||||
|| (vtable->module_close == 0)
|
||||
|| (vtable->find_sym == 0)
|
||||
|| ((vtable->priority != LT_DLLOADER_PREPEND) &&
|
||||
(vtable->priority != LT_DLLOADER_APPEND)))
|
||||
{
|
||||
LT__SETERROR (INVALID_LOADER);
|
||||
return RETURN_FAILURE;
|
||||
}
|
||||
|
||||
item = slist_box (vtable);
|
||||
if (!item)
|
||||
{
|
||||
(*lt__alloc_die) ();
|
||||
|
||||
/* Let the caller know something went wrong if lt__alloc_die
|
||||
doesn't abort. */
|
||||
return RETURN_FAILURE;
|
||||
}
|
||||
|
||||
if (vtable->priority == LT_DLLOADER_PREPEND)
|
||||
{
|
||||
loaders = slist_cons (item, loaders);
|
||||
}
|
||||
else
|
||||
{
|
||||
assert (vtable->priority == LT_DLLOADER_APPEND);
|
||||
loaders = slist_concat (loaders, item);
|
||||
}
|
||||
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
||||
#ifdef LT_DEBUG_LOADERS
|
||||
static void *
|
||||
loader_dump_callback (SList *item, void *userdata)
|
||||
{
|
||||
const lt_dlvtable *vtable = (const lt_dlvtable *) item->userdata;
|
||||
fprintf (stderr, ", %s", (vtable && vtable->name) ? vtable->name : "(null)");
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
lt_dlloader_dump (void)
|
||||
{
|
||||
fprintf (stderr, "loaders: ");
|
||||
if (!loaders)
|
||||
{
|
||||
fprintf (stderr, "(empty)");
|
||||
}
|
||||
else
|
||||
{
|
||||
const lt_dlvtable *head = (const lt_dlvtable *) loaders->userdata;
|
||||
fprintf (stderr, "%s", (head && head->name) ? head->name : "(null)");
|
||||
if (slist_tail (loaders))
|
||||
slist_foreach (slist_tail (loaders), loader_dump_callback, NULL);
|
||||
}
|
||||
fprintf (stderr, "\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
/* An iterator for the global loader list: if LOADER is NULL, then
|
||||
return the first element, otherwise the following element. */
|
||||
lt_dlloader
|
||||
lt_dlloader_next (lt_dlloader loader)
|
||||
{
|
||||
SList *item = (SList *) loader;
|
||||
return (lt_dlloader) (item ? item->next : loaders);
|
||||
}
|
||||
|
||||
|
||||
/* Non-destructive unboxing of a loader. */
|
||||
const lt_dlvtable *
|
||||
lt_dlloader_get (lt_dlloader loader)
|
||||
{
|
||||
return (const lt_dlvtable *) (loader ? ((SList *) loader)->userdata : NULL);
|
||||
}
|
||||
|
||||
|
||||
/* Return the contents of the first item in the global loader list
|
||||
with a matching NAME after removing it from that list. If there
|
||||
was no match, return NULL; if there is an error, return NULL and
|
||||
set an error for lt_dlerror; do not set an error if only resident
|
||||
modules need this loader; in either case, the loader list is not
|
||||
changed if NULL is returned. */
|
||||
lt_dlvtable *
|
||||
lt_dlloader_remove (char *name)
|
||||
{
|
||||
const lt_dlvtable * vtable = lt_dlloader_find (name);
|
||||
static const char id_string[] = "lt_dlloader_remove";
|
||||
lt_dlinterface_id iface;
|
||||
lt_dlhandle handle = 0;
|
||||
int in_use = 0;
|
||||
int in_use_by_resident = 0;
|
||||
|
||||
if (!vtable)
|
||||
{
|
||||
LT__SETERROR (INVALID_LOADER);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Fail if there are any open modules which use this loader. */
|
||||
iface = lt_dlinterface_register (id_string, NULL);
|
||||
while ((handle = lt_dlhandle_iterate (iface, handle)))
|
||||
{
|
||||
lt_dlhandle cur = handle;
|
||||
if (cur->vtable == vtable)
|
||||
{
|
||||
in_use = 1;
|
||||
if (lt_dlisresident (handle))
|
||||
in_use_by_resident = 1;
|
||||
}
|
||||
}
|
||||
lt_dlinterface_free (iface);
|
||||
if (in_use)
|
||||
{
|
||||
if (!in_use_by_resident)
|
||||
LT__SETERROR (REMOVE_LOADER);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Call the loader finalisation function. */
|
||||
if (vtable && vtable->dlloader_exit)
|
||||
{
|
||||
if ((*vtable->dlloader_exit) (vtable->dlloader_data) != 0)
|
||||
{
|
||||
/* If there is an exit function, and it returns non-zero
|
||||
then it must set an error, and we will not remove it
|
||||
from the list. */
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* If we got this far, remove the loader from our global list. */
|
||||
return (lt_dlvtable *)
|
||||
slist_unbox ((SList *) slist_remove (&loaders, loader_callback, name));
|
||||
}
|
||||
|
||||
|
||||
const lt_dlvtable *
|
||||
lt_dlloader_find (char *name)
|
||||
{
|
||||
return lt_dlloader_get (slist_find (loaders, loader_callback, name));
|
||||
}
|
|
@ -1,110 +0,0 @@
|
|||
/* lt_error.c -- error propogation interface
|
||||
|
||||
Copyright (C) 1999, 2000, 2001, 2004, 2005, 2007 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.
|
||||
*/
|
||||
|
||||
#include "lt__private.h"
|
||||
#include "lt_error.h"
|
||||
|
||||
static const char *last_error = 0;
|
||||
static const char error_strings[LT_ERROR_MAX][LT_ERROR_LEN_MAX + 1] =
|
||||
{
|
||||
#define LT_ERROR(name, diagnostic) diagnostic,
|
||||
lt_dlerror_table
|
||||
#undef LT_ERROR
|
||||
};
|
||||
|
||||
static const char **user_error_strings = 0;
|
||||
static int errorcount = LT_ERROR_MAX;
|
||||
|
||||
int
|
||||
lt_dladderror (const char *diagnostic)
|
||||
{
|
||||
int errindex = 0;
|
||||
int result = -1;
|
||||
const char **temp = (const char **) 0;
|
||||
|
||||
assert (diagnostic);
|
||||
|
||||
errindex = errorcount - LT_ERROR_MAX;
|
||||
temp = REALLOC (const char *, user_error_strings, 1 + errindex);
|
||||
if (temp)
|
||||
{
|
||||
user_error_strings = temp;
|
||||
user_error_strings[errindex] = diagnostic;
|
||||
result = errorcount++;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
int
|
||||
lt_dlseterror (int errindex)
|
||||
{
|
||||
int errors = 0;
|
||||
|
||||
if (errindex >= errorcount || errindex < 0)
|
||||
{
|
||||
/* Ack! Error setting the error message! */
|
||||
LT__SETERROR (INVALID_ERRORCODE);
|
||||
++errors;
|
||||
}
|
||||
else if (errindex < LT_ERROR_MAX)
|
||||
{
|
||||
/* No error setting the error message! */
|
||||
LT__SETERRORSTR (error_strings[errindex]);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* No error setting the error message! */
|
||||
LT__SETERRORSTR (user_error_strings[errindex - LT_ERROR_MAX]);
|
||||
}
|
||||
|
||||
return errors;
|
||||
}
|
||||
|
||||
const char *
|
||||
lt__error_string (int errorcode)
|
||||
{
|
||||
assert (errorcode >= 0);
|
||||
assert (errorcode < LT_ERROR_MAX);
|
||||
|
||||
return error_strings[errorcode];
|
||||
}
|
||||
|
||||
const char *
|
||||
lt__get_last_error (void)
|
||||
{
|
||||
return last_error;
|
||||
}
|
||||
|
||||
const char *
|
||||
lt__set_last_error (const char *errormsg)
|
||||
{
|
||||
return last_error = errormsg;
|
||||
}
|
2425
libltdl/ltdl.c
2425
libltdl/ltdl.c
Plik diff jest za duży
Load Diff
162
libltdl/ltdl.h
162
libltdl/ltdl.h
|
@ -1,162 +0,0 @@
|
|||
/* ltdl.h -- generic dlopen functions
|
||||
|
||||
Copyright (C) 1998-2000, 2004, 2005,
|
||||
2007, 2008 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.
|
||||
*/
|
||||
|
||||
/* Only include this header file once. */
|
||||
#if !defined(LTDL_H)
|
||||
#define LTDL_H 1
|
||||
|
||||
#include <libltdl/lt_system.h>
|
||||
#include <libltdl/lt_error.h>
|
||||
#include <libltdl/lt_dlloader.h>
|
||||
|
||||
LT_BEGIN_C_DECLS
|
||||
|
||||
|
||||
/* LT_STRLEN can be used safely on NULL pointers. */
|
||||
#define LT_STRLEN(s) (((s) && (s)[0]) ? strlen (s) : 0)
|
||||
|
||||
|
||||
/* --- DYNAMIC MODULE LOADING API --- */
|
||||
|
||||
|
||||
typedef struct lt__handle *lt_dlhandle; /* A loaded module. */
|
||||
|
||||
/* Initialisation and finalisation functions for libltdl. */
|
||||
LT_SCOPE int lt_dlinit (void);
|
||||
LT_SCOPE int lt_dlexit (void);
|
||||
|
||||
/* Module search path manipulation. */
|
||||
LT_SCOPE int lt_dladdsearchdir (const char *search_dir);
|
||||
LT_SCOPE int lt_dlinsertsearchdir (const char *before,
|
||||
const char *search_dir);
|
||||
LT_SCOPE int lt_dlsetsearchpath (const char *search_path);
|
||||
LT_SCOPE const char *lt_dlgetsearchpath (void);
|
||||
LT_SCOPE int lt_dlforeachfile (
|
||||
const char *search_path,
|
||||
int (*func) (const char *filename, void *data),
|
||||
void *data);
|
||||
|
||||
/* User module loading advisors. */
|
||||
LT_SCOPE int lt_dladvise_init (lt_dladvise *advise);
|
||||
LT_SCOPE int lt_dladvise_destroy (lt_dladvise *advise);
|
||||
LT_SCOPE int lt_dladvise_ext (lt_dladvise *advise);
|
||||
LT_SCOPE int lt_dladvise_resident (lt_dladvise *advise);
|
||||
LT_SCOPE int lt_dladvise_local (lt_dladvise *advise);
|
||||
LT_SCOPE int lt_dladvise_global (lt_dladvise *advise);
|
||||
LT_SCOPE int lt_dladvise_preload (lt_dladvise *advise);
|
||||
|
||||
/* Portable libltdl versions of the system dlopen() API. */
|
||||
LT_SCOPE lt_dlhandle lt_dlopen (const char *filename);
|
||||
LT_SCOPE lt_dlhandle lt_dlopenext (const char *filename);
|
||||
LT_SCOPE lt_dlhandle lt_dlopenadvise (const char *filename,
|
||||
lt_dladvise advise);
|
||||
LT_SCOPE void * lt_dlsym (lt_dlhandle handle, const char *name);
|
||||
LT_SCOPE const char *lt_dlerror (void);
|
||||
LT_SCOPE int lt_dlclose (lt_dlhandle handle);
|
||||
|
||||
|
||||
|
||||
/* --- PRELOADED MODULE SUPPORT --- */
|
||||
|
||||
|
||||
/* A preopened symbol. Arrays of this type comprise the exported
|
||||
symbols for a dlpreopened module. */
|
||||
typedef struct {
|
||||
const char *name;
|
||||
void *address;
|
||||
} lt_dlsymlist;
|
||||
|
||||
typedef int lt_dlpreload_callback_func (lt_dlhandle handle);
|
||||
|
||||
LT_SCOPE int lt_dlpreload (const lt_dlsymlist *preloaded);
|
||||
LT_SCOPE int lt_dlpreload_default (const lt_dlsymlist *preloaded);
|
||||
LT_SCOPE int lt_dlpreload_open (const char *originator,
|
||||
lt_dlpreload_callback_func *func);
|
||||
|
||||
#define lt_preloaded_symbols lt__PROGRAM__LTX_preloaded_symbols
|
||||
#define LTDL_SET_PRELOADED_SYMBOLS() LT_STMT_START{ \
|
||||
extern const lt_dlsymlist lt_preloaded_symbols[]; \
|
||||
lt_dlpreload_default(lt_preloaded_symbols); \
|
||||
}LT_STMT_END
|
||||
|
||||
|
||||
|
||||
|
||||
/* --- MODULE INFORMATION --- */
|
||||
|
||||
|
||||
/* Associating user data with loaded modules. */
|
||||
typedef void * lt_dlinterface_id;
|
||||
typedef int lt_dlhandle_interface (lt_dlhandle handle, const char *id_string);
|
||||
|
||||
LT_SCOPE lt_dlinterface_id lt_dlinterface_register (const char *id_string,
|
||||
lt_dlhandle_interface *iface);
|
||||
LT_SCOPE void lt_dlinterface_free (lt_dlinterface_id key);
|
||||
LT_SCOPE void * lt_dlcaller_set_data (lt_dlinterface_id key,
|
||||
lt_dlhandle handle, void *data);
|
||||
LT_SCOPE void * lt_dlcaller_get_data (lt_dlinterface_id key,
|
||||
lt_dlhandle handle);
|
||||
|
||||
|
||||
/* Read only information pertaining to a loaded module. */
|
||||
typedef struct {
|
||||
char * filename; /* file name */
|
||||
char * name; /* module name */
|
||||
int ref_count; /* number of times lt_dlopened minus
|
||||
number of times lt_dlclosed. */
|
||||
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. */
|
||||
} lt_dlinfo;
|
||||
|
||||
LT_SCOPE const lt_dlinfo *lt_dlgetinfo (lt_dlhandle handle);
|
||||
|
||||
LT_SCOPE lt_dlhandle lt_dlhandle_iterate (lt_dlinterface_id iface,
|
||||
lt_dlhandle place);
|
||||
LT_SCOPE lt_dlhandle lt_dlhandle_fetch (lt_dlinterface_id iface,
|
||||
const char *module_name);
|
||||
LT_SCOPE int lt_dlhandle_map (lt_dlinterface_id iface,
|
||||
int (*func) (lt_dlhandle handle, void *data),
|
||||
void *data);
|
||||
|
||||
|
||||
|
||||
/* Deprecated module residency management API. */
|
||||
LT_SCOPE int lt_dlmakeresident (lt_dlhandle handle);
|
||||
LT_SCOPE int lt_dlisresident (lt_dlhandle handle);
|
||||
|
||||
#define lt_ptr void *
|
||||
|
||||
LT_END_C_DECLS
|
||||
|
||||
#endif /*!defined(LTDL_H)*/
|
|
@ -1,79 +0,0 @@
|
|||
# Portability macros for glibc argz. -*- Autoconf -*-
|
||||
#
|
||||
# Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
|
||||
# Written by Gary V. Vaughan <gary@gnu.org>
|
||||
#
|
||||
# This file is free software; the Free Software Foundation gives
|
||||
# unlimited permission to copy and/or distribute it, with or without
|
||||
# modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 5 argz.m4
|
||||
|
||||
AC_DEFUN([gl_FUNC_ARGZ],
|
||||
[gl_PREREQ_ARGZ
|
||||
|
||||
AC_CHECK_HEADERS([argz.h], [], [], [AC_INCLUDES_DEFAULT])
|
||||
|
||||
AC_CHECK_TYPES([error_t],
|
||||
[],
|
||||
[AC_DEFINE([error_t], [int],
|
||||
[Define to a type to use for `error_t' if it is not otherwise available.])
|
||||
AC_DEFINE([__error_t_defined], [1], [Define so that glibc/gnulib argp.h
|
||||
does not typedef error_t.])],
|
||||
[#if defined(HAVE_ARGZ_H)
|
||||
# include <argz.h>
|
||||
#endif])
|
||||
|
||||
ARGZ_H=
|
||||
AC_CHECK_FUNCS([argz_add argz_append argz_count argz_create_sep argz_insert \
|
||||
argz_next argz_stringify], [], [ARGZ_H=argz.h; AC_LIBOBJ([argz])])
|
||||
|
||||
dnl if have system argz functions, allow forced use of
|
||||
dnl libltdl-supplied implementation (and default to do so
|
||||
dnl on "known bad" systems). Could use a runtime check, but
|
||||
dnl (a) detecting malloc issues is notoriously unreliable
|
||||
dnl (b) only known system that declares argz functions,
|
||||
dnl provides them, yet they are broken, is cygwin
|
||||
dnl releases prior to 16-Mar-2007 (1.5.24 and earlier)
|
||||
dnl So, it's more straightforward simply to special case
|
||||
dnl this for known bad systems.
|
||||
AS_IF([test -z "$ARGZ_H"],
|
||||
[AC_CACHE_CHECK(
|
||||
[if argz actually works],
|
||||
[lt_cv_sys_argz_works],
|
||||
[[case $host_os in #(
|
||||
*cygwin*)
|
||||
lt_cv_sys_argz_works=no
|
||||
if test "$cross_compiling" != no; then
|
||||
lt_cv_sys_argz_works="guessing no"
|
||||
else
|
||||
lt_sed_extract_leading_digits='s/^\([0-9\.]*\).*/\1/'
|
||||
save_IFS=$IFS
|
||||
IFS=-.
|
||||
set x `uname -r | sed -e "$lt_sed_extract_leading_digits"`
|
||||
IFS=$save_IFS
|
||||
lt_os_major=${2-0}
|
||||
lt_os_minor=${3-0}
|
||||
lt_os_micro=${4-0}
|
||||
if test "$lt_os_major" -gt 1 \
|
||||
|| { test "$lt_os_major" -eq 1 \
|
||||
&& { test "$lt_os_minor" -gt 5 \
|
||||
|| { test "$lt_os_minor" -eq 5 \
|
||||
&& test "$lt_os_micro" -gt 24; }; }; }; then
|
||||
lt_cv_sys_argz_works=yes
|
||||
fi
|
||||
fi
|
||||
;; #(
|
||||
*) lt_cv_sys_argz_works=yes ;;
|
||||
esac]])
|
||||
AS_IF([test $lt_cv_sys_argz_works = yes],
|
||||
[AC_DEFINE([HAVE_WORKING_ARGZ], 1,
|
||||
[This value is set to 1 to indicate that the system argz facility works])],
|
||||
[ARGZ_H=argz.h
|
||||
AC_LIBOBJ([argz])])])
|
||||
|
||||
AC_SUBST([ARGZ_H])
|
||||
])
|
||||
|
||||
# Prerequisites of lib/argz.c.
|
||||
AC_DEFUN([gl_PREREQ_ARGZ], [:])
|
Plik diff jest za duży
Load Diff
|
@ -1,804 +0,0 @@
|
|||
# ltdl.m4 - Configure ltdl for the target system. -*-Autoconf-*-
|
||||
#
|
||||
# Copyright (C) 1999-2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
# Written by Thomas Tanner, 1999
|
||||
#
|
||||
# This file is free software; the Free Software Foundation gives
|
||||
# unlimited permission to copy and/or distribute it, with or without
|
||||
# modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 17 LTDL_INIT
|
||||
|
||||
# LT_CONFIG_LTDL_DIR(DIRECTORY, [LTDL-MODE])
|
||||
# ------------------------------------------
|
||||
# DIRECTORY contains the libltdl sources. It is okay to call this
|
||||
# function multiple times, as long as the same DIRECTORY is always given.
|
||||
AC_DEFUN([LT_CONFIG_LTDL_DIR],
|
||||
[AC_BEFORE([$0], [LTDL_INIT])
|
||||
_$0($*)
|
||||
])# LT_CONFIG_LTDL_DIR
|
||||
|
||||
# We break this out into a separate macro, so that we can call it safely
|
||||
# internally without being caught accidentally by the sed scan in libtoolize.
|
||||
m4_defun([_LT_CONFIG_LTDL_DIR],
|
||||
[dnl remove trailing slashes
|
||||
m4_pushdef([_ARG_DIR], m4_bpatsubst([$1], [/*$]))
|
||||
m4_case(_LTDL_DIR,
|
||||
[], [dnl only set lt_ltdl_dir if _ARG_DIR is not simply `.'
|
||||
m4_if(_ARG_DIR, [.],
|
||||
[],
|
||||
[m4_define([_LTDL_DIR], _ARG_DIR)
|
||||
_LT_SHELL_INIT([lt_ltdl_dir=']_ARG_DIR['])])],
|
||||
[m4_if(_ARG_DIR, _LTDL_DIR,
|
||||
[],
|
||||
[m4_fatal([multiple libltdl directories: `]_LTDL_DIR[', `]_ARG_DIR['])])])
|
||||
m4_popdef([_ARG_DIR])
|
||||
])# _LT_CONFIG_LTDL_DIR
|
||||
|
||||
# Initialise:
|
||||
m4_define([_LTDL_DIR], [])
|
||||
|
||||
|
||||
# _LT_BUILD_PREFIX
|
||||
# ----------------
|
||||
# If Autoconf is new enough, expand to `${top_build_prefix}', otherwise
|
||||
# to `${top_builddir}/'.
|
||||
m4_define([_LT_BUILD_PREFIX],
|
||||
[m4_ifdef([AC_AUTOCONF_VERSION],
|
||||
[m4_if(m4_version_compare(m4_defn([AC_AUTOCONF_VERSION]), [2.62]),
|
||||
[-1], [m4_ifdef([_AC_HAVE_TOP_BUILD_PREFIX],
|
||||
[${top_build_prefix}],
|
||||
[${top_builddir}/])],
|
||||
[${top_build_prefix}])],
|
||||
[${top_builddir}/])[]dnl
|
||||
])
|
||||
|
||||
|
||||
# LTDL_CONVENIENCE
|
||||
# ----------------
|
||||
# sets LIBLTDL to the link flags for the libltdl convenience library and
|
||||
# LTDLINCL to the include flags for the libltdl header and adds
|
||||
# --enable-ltdl-convenience to the configure arguments. Note that
|
||||
# AC_CONFIG_SUBDIRS is not called here. LIBLTDL will be prefixed with
|
||||
# '${top_build_prefix}' if available, otherwise with '${top_builddir}/',
|
||||
# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single
|
||||
# quotes!). If your package is not flat and you're not using automake,
|
||||
# define top_build_prefix, top_builddir, and top_srcdir appropriately
|
||||
# in your Makefiles.
|
||||
AC_DEFUN([LTDL_CONVENIENCE],
|
||||
[AC_BEFORE([$0], [LTDL_INIT])dnl
|
||||
dnl Although the argument is deprecated and no longer documented,
|
||||
dnl LTDL_CONVENIENCE used to take a DIRECTORY orgument, if we have one
|
||||
dnl here make sure it is the same as any other declaration of libltdl's
|
||||
dnl location! This also ensures lt_ltdl_dir is set when configure.ac is
|
||||
dnl not yet using an explicit LT_CONFIG_LTDL_DIR.
|
||||
m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl
|
||||
_$0()
|
||||
])# LTDL_CONVENIENCE
|
||||
|
||||
# AC_LIBLTDL_CONVENIENCE accepted a directory argument in older libtools,
|
||||
# now we have LT_CONFIG_LTDL_DIR:
|
||||
AU_DEFUN([AC_LIBLTDL_CONVENIENCE],
|
||||
[_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])])
|
||||
_LTDL_CONVENIENCE])
|
||||
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [])
|
||||
|
||||
|
||||
# _LTDL_CONVENIENCE
|
||||
# -----------------
|
||||
# Code shared by LTDL_CONVENIENCE and LTDL_INIT([convenience]).
|
||||
m4_defun([_LTDL_CONVENIENCE],
|
||||
[case $enable_ltdl_convenience in
|
||||
no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
|
||||
"") enable_ltdl_convenience=yes
|
||||
ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
|
||||
esac
|
||||
LIBLTDL='_LT_BUILD_PREFIX'"${lt_ltdl_dir+$lt_ltdl_dir/}libltdlc.la"
|
||||
LTDLDEPS=$LIBLTDL
|
||||
LTDLINCL='-I${top_srcdir}'"${lt_ltdl_dir+/$lt_ltdl_dir}"
|
||||
|
||||
AC_SUBST([LIBLTDL])
|
||||
AC_SUBST([LTDLDEPS])
|
||||
AC_SUBST([LTDLINCL])
|
||||
|
||||
# For backwards non-gettext consistent compatibility...
|
||||
INCLTDL="$LTDLINCL"
|
||||
AC_SUBST([INCLTDL])
|
||||
])# _LTDL_CONVENIENCE
|
||||
|
||||
|
||||
# LTDL_INSTALLABLE
|
||||
# ----------------
|
||||
# sets LIBLTDL to the link flags for the libltdl installable library
|
||||
# and LTDLINCL to the include flags for the libltdl header and adds
|
||||
# --enable-ltdl-install to the configure arguments. Note that
|
||||
# AC_CONFIG_SUBDIRS is not called from here. If an installed libltdl
|
||||
# is not found, LIBLTDL will be prefixed with '${top_build_prefix}' if
|
||||
# available, otherwise with '${top_builddir}/', and LTDLINCL will be
|
||||
# prefixed with '${top_srcdir}/' (note the single quotes!). If your
|
||||
# package is not flat and you're not using automake, define top_build_prefix,
|
||||
# top_builddir, and top_srcdir appropriately in your Makefiles.
|
||||
# In the future, this macro may have to be called after LT_INIT.
|
||||
AC_DEFUN([LTDL_INSTALLABLE],
|
||||
[AC_BEFORE([$0], [LTDL_INIT])dnl
|
||||
dnl Although the argument is deprecated and no longer documented,
|
||||
dnl LTDL_INSTALLABLE used to take a DIRECTORY orgument, if we have one
|
||||
dnl here make sure it is the same as any other declaration of libltdl's
|
||||
dnl location! This also ensures lt_ltdl_dir is set when configure.ac is
|
||||
dnl not yet using an explicit LT_CONFIG_LTDL_DIR.
|
||||
m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl
|
||||
_$0()
|
||||
])# LTDL_INSTALLABLE
|
||||
|
||||
# AC_LIBLTDL_INSTALLABLE accepted a directory argument in older libtools,
|
||||
# now we have LT_CONFIG_LTDL_DIR:
|
||||
AU_DEFUN([AC_LIBLTDL_INSTALLABLE],
|
||||
[_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])])
|
||||
_LTDL_INSTALLABLE])
|
||||
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [])
|
||||
|
||||
|
||||
# _LTDL_INSTALLABLE
|
||||
# -----------------
|
||||
# Code shared by LTDL_INSTALLABLE and LTDL_INIT([installable]).
|
||||
m4_defun([_LTDL_INSTALLABLE],
|
||||
[if test -f $prefix/lib/libltdl.la; then
|
||||
lt_save_LDFLAGS="$LDFLAGS"
|
||||
LDFLAGS="-L$prefix/lib $LDFLAGS"
|
||||
AC_CHECK_LIB([ltdl], [lt_dlinit], [lt_lib_ltdl=yes])
|
||||
LDFLAGS="$lt_save_LDFLAGS"
|
||||
if test x"${lt_lib_ltdl-no}" = xyes; then
|
||||
if test x"$enable_ltdl_install" != xyes; then
|
||||
# Don't overwrite $prefix/lib/libltdl.la without --enable-ltdl-install
|
||||
AC_MSG_WARN([not overwriting libltdl at $prefix, force with `--enable-ltdl-install'])
|
||||
enable_ltdl_install=no
|
||||
fi
|
||||
elif test x"$enable_ltdl_install" = xno; then
|
||||
AC_MSG_WARN([libltdl not installed, but installation disabled])
|
||||
fi
|
||||
fi
|
||||
|
||||
# If configure.ac declared an installable ltdl, and the user didn't override
|
||||
# with --disable-ltdl-install, we will install the shipped libltdl.
|
||||
case $enable_ltdl_install in
|
||||
no) ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
|
||||
LIBLTDL="-lltdl"
|
||||
LTDLDEPS=
|
||||
LTDLINCL=
|
||||
;;
|
||||
*) enable_ltdl_install=yes
|
||||
ac_configure_args="$ac_configure_args --enable-ltdl-install"
|
||||
LIBLTDL='_LT_BUILD_PREFIX'"${lt_ltdl_dir+$lt_ltdl_dir/}libltdl.la"
|
||||
LTDLDEPS=$LIBLTDL
|
||||
LTDLINCL='-I${top_srcdir}'"${lt_ltdl_dir+/$lt_ltdl_dir}"
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_SUBST([LIBLTDL])
|
||||
AC_SUBST([LTDLDEPS])
|
||||
AC_SUBST([LTDLINCL])
|
||||
|
||||
# For backwards non-gettext consistent compatibility...
|
||||
INCLTDL="$LTDLINCL"
|
||||
AC_SUBST([INCLTDL])
|
||||
])# LTDL_INSTALLABLE
|
||||
|
||||
|
||||
# _LTDL_MODE_DISPATCH
|
||||
# -------------------
|
||||
m4_define([_LTDL_MODE_DISPATCH],
|
||||
[dnl If _LTDL_DIR is `.', then we are configuring libltdl itself:
|
||||
m4_if(_LTDL_DIR, [],
|
||||
[],
|
||||
dnl if _LTDL_MODE was not set already, the default value is `subproject':
|
||||
[m4_case(m4_default(_LTDL_MODE, [subproject]),
|
||||
[subproject], [AC_CONFIG_SUBDIRS(_LTDL_DIR)
|
||||
_LT_SHELL_INIT([lt_dlopen_dir="$lt_ltdl_dir"])],
|
||||
[nonrecursive], [_LT_SHELL_INIT([lt_dlopen_dir="$lt_ltdl_dir"; lt_libobj_prefix="$lt_ltdl_dir/"])],
|
||||
[recursive], [],
|
||||
[m4_fatal([unknown libltdl mode: ]_LTDL_MODE)])])dnl
|
||||
dnl Be careful not to expand twice:
|
||||
m4_define([$0], [])
|
||||
])# _LTDL_MODE_DISPATCH
|
||||
|
||||
|
||||
# _LT_LIBOBJ(MODULE_NAME)
|
||||
# -----------------------
|
||||
# Like AC_LIBOBJ, except that MODULE_NAME goes into _LT_LIBOBJS instead
|
||||
# of into LIBOBJS.
|
||||
AC_DEFUN([_LT_LIBOBJ], [
|
||||
m4_pattern_allow([^_LT_LIBOBJS$])
|
||||
_LT_LIBOBJS="$_LT_LIBOBJS $1.$ac_objext"
|
||||
])# _LT_LIBOBJS
|
||||
|
||||
|
||||
# LTDL_INIT([OPTIONS])
|
||||
# --------------------
|
||||
# Clients of libltdl can use this macro to allow the installer to
|
||||
# choose between a shipped copy of the ltdl sources or a preinstalled
|
||||
# version of the library. If the shipped ltdl sources are not in a
|
||||
# subdirectory named libltdl, the directory name must be given by
|
||||
# LT_CONFIG_LTDL_DIR.
|
||||
AC_DEFUN([LTDL_INIT],
|
||||
[dnl Parse OPTIONS
|
||||
_LT_SET_OPTIONS([$0], [$1])
|
||||
|
||||
dnl We need to keep our own list of libobjs separate from our parent project,
|
||||
dnl and the easiest way to do that is redefine the AC_LIBOBJs macro while
|
||||
dnl we look for our own LIBOBJs.
|
||||
m4_pushdef([AC_LIBOBJ], m4_defn([_LT_LIBOBJ]))
|
||||
m4_pushdef([AC_LIBSOURCES])
|
||||
|
||||
dnl If not otherwise defined, default to the 1.5.x compatible subproject mode:
|
||||
m4_if(_LTDL_MODE, [],
|
||||
[m4_define([_LTDL_MODE], m4_default([$2], [subproject]))
|
||||
m4_if([-1], [m4_bregexp(_LTDL_MODE, [\(subproject\|\(non\)?recursive\)])],
|
||||
[m4_fatal([unknown libltdl mode: ]_LTDL_MODE)])])
|
||||
|
||||
AC_ARG_WITH([included_ltdl],
|
||||
[AS_HELP_STRING([--with-included-ltdl],
|
||||
[use the GNU ltdl sources included here])])
|
||||
|
||||
if test "x$with_included_ltdl" != xyes; then
|
||||
# We are not being forced to use the included libltdl sources, so
|
||||
# decide whether there is a useful installed version we can use.
|
||||
AC_CHECK_HEADER([ltdl.h],
|
||||
[AC_CHECK_DECL([lt_dlinterface_register],
|
||||
[AC_CHECK_LIB([ltdl], [lt_dladvise_preload],
|
||||
[with_included_ltdl=no],
|
||||
[with_included_ltdl=yes])],
|
||||
[with_included_ltdl=yes],
|
||||
[AC_INCLUDES_DEFAULT
|
||||
#include <ltdl.h>])],
|
||||
[with_included_ltdl=yes],
|
||||
[AC_INCLUDES_DEFAULT]
|
||||
)
|
||||
fi
|
||||
|
||||
dnl If neither LT_CONFIG_LTDL_DIR, LTDL_CONVENIENCE nor LTDL_INSTALLABLE
|
||||
dnl was called yet, then for old times' sake, we assume libltdl is in an
|
||||
dnl eponymous directory:
|
||||
AC_PROVIDE_IFELSE([LT_CONFIG_LTDL_DIR], [], [_LT_CONFIG_LTDL_DIR([libltdl])])
|
||||
|
||||
AC_ARG_WITH([ltdl_include],
|
||||
[AS_HELP_STRING([--with-ltdl-include=DIR],
|
||||
[use the ltdl headers installed in DIR])])
|
||||
|
||||
if test -n "$with_ltdl_include"; then
|
||||
if test -f "$with_ltdl_include/ltdl.h"; then :
|
||||
else
|
||||
AC_MSG_ERROR([invalid ltdl include directory: `$with_ltdl_include'])
|
||||
fi
|
||||
else
|
||||
with_ltdl_include=no
|
||||
fi
|
||||
|
||||
AC_ARG_WITH([ltdl_lib],
|
||||
[AS_HELP_STRING([--with-ltdl-lib=DIR],
|
||||
[use the libltdl.la installed in DIR])])
|
||||
|
||||
if test -n "$with_ltdl_lib"; then
|
||||
if test -f "$with_ltdl_lib/libltdl.la"; then :
|
||||
else
|
||||
AC_MSG_ERROR([invalid ltdl library directory: `$with_ltdl_lib'])
|
||||
fi
|
||||
else
|
||||
with_ltdl_lib=no
|
||||
fi
|
||||
|
||||
case ,$with_included_ltdl,$with_ltdl_include,$with_ltdl_lib, in
|
||||
,yes,no,no,)
|
||||
m4_case(m4_default(_LTDL_TYPE, [convenience]),
|
||||
[convenience], [_LTDL_CONVENIENCE],
|
||||
[installable], [_LTDL_INSTALLABLE],
|
||||
[m4_fatal([unknown libltdl build type: ]_LTDL_TYPE)])
|
||||
;;
|
||||
,no,no,no,)
|
||||
# If the included ltdl is not to be used, then use the
|
||||
# preinstalled libltdl we found.
|
||||
AC_DEFINE([HAVE_LTDL], [1],
|
||||
[Define this if a modern libltdl is already installed])
|
||||
LIBLTDL=-lltdl
|
||||
LTDLDEPS=
|
||||
LTDLINCL=
|
||||
;;
|
||||
,no*,no,*)
|
||||
AC_MSG_ERROR([`--with-ltdl-include' and `--with-ltdl-lib' options must be used together])
|
||||
;;
|
||||
*) with_included_ltdl=no
|
||||
LIBLTDL="-L$with_ltdl_lib -lltdl"
|
||||
LTDLDEPS=
|
||||
LTDLINCL="-I$with_ltdl_include"
|
||||
;;
|
||||
esac
|
||||
INCLTDL="$LTDLINCL"
|
||||
|
||||
# Report our decision...
|
||||
AC_MSG_CHECKING([where to find libltdl headers])
|
||||
AC_MSG_RESULT([$LTDLINCL])
|
||||
AC_MSG_CHECKING([where to find libltdl library])
|
||||
AC_MSG_RESULT([$LIBLTDL])
|
||||
|
||||
_LTDL_SETUP
|
||||
|
||||
dnl restore autoconf definition.
|
||||
m4_popdef([AC_LIBOBJ])
|
||||
m4_popdef([AC_LIBSOURCES])
|
||||
|
||||
AC_CONFIG_COMMANDS_PRE([
|
||||
_ltdl_libobjs=
|
||||
_ltdl_ltlibobjs=
|
||||
if test -n "$_LT_LIBOBJS"; then
|
||||
# Remove the extension.
|
||||
_lt_sed_drop_objext='s/\.o$//;s/\.obj$//'
|
||||
for i in `for i in $_LT_LIBOBJS; do echo "$i"; done | sed "$_lt_sed_drop_objext" | sort -u`; do
|
||||
_ltdl_libobjs="$_ltdl_libobjs $lt_libobj_prefix$i.$ac_objext"
|
||||
_ltdl_ltlibobjs="$_ltdl_ltlibobjs $lt_libobj_prefix$i.lo"
|
||||
done
|
||||
fi
|
||||
AC_SUBST([ltdl_LIBOBJS], [$_ltdl_libobjs])
|
||||
AC_SUBST([ltdl_LTLIBOBJS], [$_ltdl_ltlibobjs])
|
||||
])
|
||||
|
||||
# Only expand once:
|
||||
m4_define([LTDL_INIT])
|
||||
])# LTDL_INIT
|
||||
|
||||
# Old names:
|
||||
AU_DEFUN([AC_LIB_LTDL], [LTDL_INIT($@)])
|
||||
AU_DEFUN([AC_WITH_LTDL], [LTDL_INIT($@)])
|
||||
AU_DEFUN([LT_WITH_LTDL], [LTDL_INIT($@)])
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AC_LIB_LTDL], [])
|
||||
dnl AC_DEFUN([AC_WITH_LTDL], [])
|
||||
dnl AC_DEFUN([LT_WITH_LTDL], [])
|
||||
|
||||
|
||||
# _LTDL_SETUP
|
||||
# -----------
|
||||
# Perform all the checks necessary for compilation of the ltdl objects
|
||||
# -- including compiler checks and header checks. This is a public
|
||||
# interface mainly for the benefit of libltdl's own configure.ac, most
|
||||
# other users should call LTDL_INIT instead.
|
||||
AC_DEFUN([_LTDL_SETUP],
|
||||
[AC_REQUIRE([AC_PROG_CC])dnl
|
||||
AC_REQUIRE([LT_SYS_MODULE_EXT])dnl
|
||||
AC_REQUIRE([LT_SYS_MODULE_PATH])dnl
|
||||
AC_REQUIRE([LT_SYS_DLSEARCH_PATH])dnl
|
||||
AC_REQUIRE([LT_LIB_DLLOAD])dnl
|
||||
AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl
|
||||
AC_REQUIRE([LT_FUNC_DLSYM_USCORE])dnl
|
||||
AC_REQUIRE([LT_SYS_DLOPEN_DEPLIBS])dnl
|
||||
AC_REQUIRE([gl_FUNC_ARGZ])dnl
|
||||
|
||||
m4_require([_LT_CHECK_OBJDIR])dnl
|
||||
m4_require([_LT_HEADER_DLFCN])dnl
|
||||
m4_require([_LT_CHECK_DLPREOPEN])dnl
|
||||
m4_require([_LT_DECL_SED])dnl
|
||||
|
||||
dnl Don't require this, or it will be expanded earlier than the code
|
||||
dnl that sets the variables it relies on:
|
||||
_LT_ENABLE_INSTALL
|
||||
|
||||
dnl _LTDL_MODE specific code must be called at least once:
|
||||
_LTDL_MODE_DISPATCH
|
||||
|
||||
# In order that ltdl.c can compile, find out the first AC_CONFIG_HEADERS
|
||||
# the user used. This is so that ltdl.h can pick up the parent projects
|
||||
# config.h file, The first file in AC_CONFIG_HEADERS must contain the
|
||||
# definitions required by ltdl.c.
|
||||
# FIXME: Remove use of undocumented AC_LIST_HEADERS (2.59 compatibility).
|
||||
AC_CONFIG_COMMANDS_PRE([dnl
|
||||
m4_pattern_allow([^LT_CONFIG_H$])dnl
|
||||
m4_ifset([AH_HEADER],
|
||||
[LT_CONFIG_H=AH_HEADER],
|
||||
[m4_ifset([AC_LIST_HEADERS],
|
||||
[LT_CONFIG_H=`echo "AC_LIST_HEADERS" | $SED 's,^[[ ]]*,,;s,[[ :]].*$,,'`],
|
||||
[])])])
|
||||
AC_SUBST([LT_CONFIG_H])
|
||||
|
||||
AC_CHECK_HEADERS([unistd.h dl.h sys/dl.h dld.h mach-o/dyld.h dirent.h],
|
||||
[], [], [AC_INCLUDES_DEFAULT])
|
||||
|
||||
AC_CHECK_FUNCS([closedir opendir readdir], [], [AC_LIBOBJ([lt__dirent])])
|
||||
AC_CHECK_FUNCS([strlcat strlcpy], [], [AC_LIBOBJ([lt__strl])])
|
||||
|
||||
AC_DEFINE_UNQUOTED([LT_LIBEXT],["$libext"],[The archive extension])
|
||||
|
||||
name=ltdl
|
||||
LTDLOPEN=`eval "\\$ECHO \"$libname_spec\""`
|
||||
AC_SUBST([LTDLOPEN])
|
||||
])# _LTDL_SETUP
|
||||
|
||||
|
||||
# _LT_ENABLE_INSTALL
|
||||
# ------------------
|
||||
m4_define([_LT_ENABLE_INSTALL],
|
||||
[AC_ARG_ENABLE([ltdl-install],
|
||||
[AS_HELP_STRING([--enable-ltdl-install], [install libltdl])])
|
||||
|
||||
case ,${enable_ltdl_install},${enable_ltdl_convenience} in
|
||||
*yes*) ;;
|
||||
*) enable_ltdl_convenience=yes ;;
|
||||
esac
|
||||
|
||||
m4_ifdef([AM_CONDITIONAL],
|
||||
[AM_CONDITIONAL(INSTALL_LTDL, test x"${enable_ltdl_install-no}" != xno)
|
||||
AM_CONDITIONAL(CONVENIENCE_LTDL, test x"${enable_ltdl_convenience-no}" != xno)])
|
||||
])# _LT_ENABLE_INSTALL
|
||||
|
||||
|
||||
# LT_SYS_DLOPEN_DEPLIBS
|
||||
# ---------------------
|
||||
AC_DEFUN([LT_SYS_DLOPEN_DEPLIBS],
|
||||
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
|
||||
AC_CACHE_CHECK([whether deplibs are loaded by dlopen],
|
||||
[lt_cv_sys_dlopen_deplibs],
|
||||
[# PORTME does your system automatically load deplibs for dlopen?
|
||||
# or its logical equivalent (e.g. shl_load for HP-UX < 11)
|
||||
# For now, we just catch OSes we know something about -- in the
|
||||
# future, we'll try test this programmatically.
|
||||
lt_cv_sys_dlopen_deplibs=unknown
|
||||
case $host_os in
|
||||
aix3*|aix4.1.*|aix4.2.*)
|
||||
# Unknown whether this is true for these versions of AIX, but
|
||||
# we want this `case' here to explicitly catch those versions.
|
||||
lt_cv_sys_dlopen_deplibs=unknown
|
||||
;;
|
||||
aix[[4-9]]*)
|
||||
lt_cv_sys_dlopen_deplibs=yes
|
||||
;;
|
||||
amigaos*)
|
||||
case $host_cpu in
|
||||
powerpc)
|
||||
lt_cv_sys_dlopen_deplibs=no
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
darwin*)
|
||||
# Assuming the user has installed a libdl from somewhere, this is true
|
||||
# If you are looking for one http://www.opendarwin.org/projects/dlcompat
|
||||
lt_cv_sys_dlopen_deplibs=yes
|
||||
;;
|
||||
freebsd* | dragonfly*)
|
||||
lt_cv_sys_dlopen_deplibs=yes
|
||||
;;
|
||||
gnu* | linux* | k*bsd*-gnu | kopensolaris*-gnu)
|
||||
# GNU and its variants, using gnu ld.so (Glibc)
|
||||
lt_cv_sys_dlopen_deplibs=yes
|
||||
;;
|
||||
hpux10*|hpux11*)
|
||||
lt_cv_sys_dlopen_deplibs=yes
|
||||
;;
|
||||
interix*)
|
||||
lt_cv_sys_dlopen_deplibs=yes
|
||||
;;
|
||||
irix[[12345]]*|irix6.[[01]]*)
|
||||
# Catch all versions of IRIX before 6.2, and indicate that we don't
|
||||
# know how it worked for any of those versions.
|
||||
lt_cv_sys_dlopen_deplibs=unknown
|
||||
;;
|
||||
irix*)
|
||||
# The case above catches anything before 6.2, and it's known that
|
||||
# at 6.2 and later dlopen does load deplibs.
|
||||
lt_cv_sys_dlopen_deplibs=yes
|
||||
;;
|
||||
netbsd* | netbsdelf*-gnu)
|
||||
lt_cv_sys_dlopen_deplibs=yes
|
||||
;;
|
||||
openbsd*)
|
||||
lt_cv_sys_dlopen_deplibs=yes
|
||||
;;
|
||||
osf[[1234]]*)
|
||||
# dlopen did load deplibs (at least at 4.x), but until the 5.x series,
|
||||
# it did *not* use an RPATH in a shared library to find objects the
|
||||
# library depends on, so we explicitly say `no'.
|
||||
lt_cv_sys_dlopen_deplibs=no
|
||||
;;
|
||||
osf5.0|osf5.0a|osf5.1)
|
||||
# dlopen *does* load deplibs and with the right loader patch applied
|
||||
# it even uses RPATH in a shared library to search for shared objects
|
||||
# that the library depends on, but there's no easy way to know if that
|
||||
# patch is installed. Since this is the case, all we can really
|
||||
# say is unknown -- it depends on the patch being installed. If
|
||||
# it is, this changes to `yes'. Without it, it would be `no'.
|
||||
lt_cv_sys_dlopen_deplibs=unknown
|
||||
;;
|
||||
osf*)
|
||||
# the two cases above should catch all versions of osf <= 5.1. Read
|
||||
# the comments above for what we know about them.
|
||||
# At > 5.1, deplibs are loaded *and* any RPATH in a shared library
|
||||
# is used to find them so we can finally say `yes'.
|
||||
lt_cv_sys_dlopen_deplibs=yes
|
||||
;;
|
||||
qnx*)
|
||||
lt_cv_sys_dlopen_deplibs=yes
|
||||
;;
|
||||
solaris*)
|
||||
lt_cv_sys_dlopen_deplibs=yes
|
||||
;;
|
||||
sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
|
||||
libltdl_cv_sys_dlopen_deplibs=yes
|
||||
;;
|
||||
esac
|
||||
])
|
||||
if test "$lt_cv_sys_dlopen_deplibs" != yes; then
|
||||
AC_DEFINE([LTDL_DLOPEN_DEPLIBS], [1],
|
||||
[Define if the OS needs help to load dependent libraries for dlopen().])
|
||||
fi
|
||||
])# LT_SYS_DLOPEN_DEPLIBS
|
||||
|
||||
# Old name:
|
||||
AU_ALIAS([AC_LTDL_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS])
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [])
|
||||
|
||||
|
||||
# LT_SYS_MODULE_EXT
|
||||
# -----------------
|
||||
AC_DEFUN([LT_SYS_MODULE_EXT],
|
||||
[m4_require([_LT_SYS_DYNAMIC_LINKER])dnl
|
||||
AC_CACHE_CHECK([which extension is used for runtime loadable modules],
|
||||
[libltdl_cv_shlibext],
|
||||
[
|
||||
module=yes
|
||||
eval libltdl_cv_shlibext=$shrext_cmds
|
||||
])
|
||||
if test -n "$libltdl_cv_shlibext"; then
|
||||
m4_pattern_allow([LT_MODULE_EXT])dnl
|
||||
AC_DEFINE_UNQUOTED([LT_MODULE_EXT], ["$libltdl_cv_shlibext"],
|
||||
[Define to the extension used for runtime loadable modules, say, ".so".])
|
||||
fi
|
||||
])# LT_SYS_MODULE_EXT
|
||||
|
||||
# Old name:
|
||||
AU_ALIAS([AC_LTDL_SHLIBEXT], [LT_SYS_MODULE_EXT])
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AC_LTDL_SHLIBEXT], [])
|
||||
|
||||
|
||||
# LT_SYS_MODULE_PATH
|
||||
# ------------------
|
||||
AC_DEFUN([LT_SYS_MODULE_PATH],
|
||||
[m4_require([_LT_SYS_DYNAMIC_LINKER])dnl
|
||||
AC_CACHE_CHECK([which variable specifies run-time module search path],
|
||||
[lt_cv_module_path_var], [lt_cv_module_path_var="$shlibpath_var"])
|
||||
if test -n "$lt_cv_module_path_var"; then
|
||||
m4_pattern_allow([LT_MODULE_PATH_VAR])dnl
|
||||
AC_DEFINE_UNQUOTED([LT_MODULE_PATH_VAR], ["$lt_cv_module_path_var"],
|
||||
[Define to the name of the environment variable that determines the run-time module search path.])
|
||||
fi
|
||||
])# LT_SYS_MODULE_PATH
|
||||
|
||||
# Old name:
|
||||
AU_ALIAS([AC_LTDL_SHLIBPATH], [LT_SYS_MODULE_PATH])
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AC_LTDL_SHLIBPATH], [])
|
||||
|
||||
|
||||
# LT_SYS_DLSEARCH_PATH
|
||||
# --------------------
|
||||
AC_DEFUN([LT_SYS_DLSEARCH_PATH],
|
||||
[m4_require([_LT_SYS_DYNAMIC_LINKER])dnl
|
||||
AC_CACHE_CHECK([for the default library search path],
|
||||
[lt_cv_sys_dlsearch_path],
|
||||
[lt_cv_sys_dlsearch_path="$sys_lib_dlsearch_path_spec"])
|
||||
if test -n "$lt_cv_sys_dlsearch_path"; then
|
||||
sys_dlsearch_path=
|
||||
for dir in $lt_cv_sys_dlsearch_path; do
|
||||
if test -z "$sys_dlsearch_path"; then
|
||||
sys_dlsearch_path="$dir"
|
||||
else
|
||||
sys_dlsearch_path="$sys_dlsearch_path$PATH_SEPARATOR$dir"
|
||||
fi
|
||||
done
|
||||
m4_pattern_allow([LT_DLSEARCH_PATH])dnl
|
||||
AC_DEFINE_UNQUOTED([LT_DLSEARCH_PATH], ["$sys_dlsearch_path"],
|
||||
[Define to the system default library search path.])
|
||||
fi
|
||||
])# LT_SYS_DLSEARCH_PATH
|
||||
|
||||
# Old name:
|
||||
AU_ALIAS([AC_LTDL_SYSSEARCHPATH], [LT_SYS_DLSEARCH_PATH])
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AC_LTDL_SYSSEARCHPATH], [])
|
||||
|
||||
|
||||
# _LT_CHECK_DLPREOPEN
|
||||
# -------------------
|
||||
m4_defun([_LT_CHECK_DLPREOPEN],
|
||||
[m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
|
||||
AC_CACHE_CHECK([whether libtool supports -dlopen/-dlpreopen],
|
||||
[libltdl_cv_preloaded_symbols],
|
||||
[if test -n "$lt_cv_sys_global_symbol_pipe"; then
|
||||
libltdl_cv_preloaded_symbols=yes
|
||||
else
|
||||
libltdl_cv_preloaded_symbols=no
|
||||
fi
|
||||
])
|
||||
if test x"$libltdl_cv_preloaded_symbols" = xyes; then
|
||||
AC_DEFINE([HAVE_PRELOADED_SYMBOLS], [1],
|
||||
[Define if libtool can extract symbol lists from object files.])
|
||||
fi
|
||||
])# _LT_CHECK_DLPREOPEN
|
||||
|
||||
|
||||
# LT_LIB_DLLOAD
|
||||
# -------------
|
||||
AC_DEFUN([LT_LIB_DLLOAD],
|
||||
[m4_pattern_allow([^LT_DLLOADERS$])
|
||||
LT_DLLOADERS=
|
||||
AC_SUBST([LT_DLLOADERS])
|
||||
|
||||
AC_LANG_PUSH([C])
|
||||
|
||||
LIBADD_DLOPEN=
|
||||
AC_SEARCH_LIBS([dlopen], [dl],
|
||||
[AC_DEFINE([HAVE_LIBDL], [1],
|
||||
[Define if you have the libdl library or equivalent.])
|
||||
if test "$ac_cv_search_dlopen" != "none required" ; then
|
||||
LIBADD_DLOPEN="-ldl"
|
||||
fi
|
||||
libltdl_cv_lib_dl_dlopen="yes"
|
||||
LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"],
|
||||
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#if HAVE_DLFCN_H
|
||||
# include <dlfcn.h>
|
||||
#endif
|
||||
]], [[dlopen(0, 0);]])],
|
||||
[AC_DEFINE([HAVE_LIBDL], [1],
|
||||
[Define if you have the libdl library or equivalent.])
|
||||
libltdl_cv_func_dlopen="yes"
|
||||
LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"],
|
||||
[AC_CHECK_LIB([svld], [dlopen],
|
||||
[AC_DEFINE([HAVE_LIBDL], [1],
|
||||
[Define if you have the libdl library or equivalent.])
|
||||
LIBADD_DLOPEN="-lsvld" libltdl_cv_func_dlopen="yes"
|
||||
LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"])])])
|
||||
if test x"$libltdl_cv_func_dlopen" = xyes || test x"$libltdl_cv_lib_dl_dlopen" = xyes
|
||||
then
|
||||
lt_save_LIBS="$LIBS"
|
||||
LIBS="$LIBS $LIBADD_DLOPEN"
|
||||
AC_CHECK_FUNCS([dlerror])
|
||||
LIBS="$lt_save_LIBS"
|
||||
fi
|
||||
AC_SUBST([LIBADD_DLOPEN])
|
||||
|
||||
LIBADD_SHL_LOAD=
|
||||
AC_CHECK_FUNC([shl_load],
|
||||
[AC_DEFINE([HAVE_SHL_LOAD], [1],
|
||||
[Define if you have the shl_load function.])
|
||||
LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la"],
|
||||
[AC_CHECK_LIB([dld], [shl_load],
|
||||
[AC_DEFINE([HAVE_SHL_LOAD], [1],
|
||||
[Define if you have the shl_load function.])
|
||||
LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la"
|
||||
LIBADD_SHL_LOAD="-ldld"])])
|
||||
AC_SUBST([LIBADD_SHL_LOAD])
|
||||
|
||||
case $host_os in
|
||||
darwin[[1567]].*)
|
||||
# We only want this for pre-Mac OS X 10.4.
|
||||
AC_CHECK_FUNC([_dyld_func_lookup],
|
||||
[AC_DEFINE([HAVE_DYLD], [1],
|
||||
[Define if you have the _dyld_func_lookup function.])
|
||||
LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dyld.la"])
|
||||
;;
|
||||
beos*)
|
||||
LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}load_add_on.la"
|
||||
;;
|
||||
cygwin* | mingw* | os2* | pw32*)
|
||||
AC_CHECK_DECLS([cygwin_conv_path], [], [], [[#include <sys/cygwin.h>]])
|
||||
LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}loadlibrary.la"
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_CHECK_LIB([dld], [dld_link],
|
||||
[AC_DEFINE([HAVE_DLD], [1],
|
||||
[Define if you have the GNU dld library.])
|
||||
LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dld_link.la"])
|
||||
AC_SUBST([LIBADD_DLD_LINK])
|
||||
|
||||
m4_pattern_allow([^LT_DLPREOPEN$])
|
||||
LT_DLPREOPEN=
|
||||
if test -n "$LT_DLLOADERS"
|
||||
then
|
||||
for lt_loader in $LT_DLLOADERS; do
|
||||
LT_DLPREOPEN="$LT_DLPREOPEN-dlpreopen $lt_loader "
|
||||
done
|
||||
AC_DEFINE([HAVE_LIBDLLOADER], [1],
|
||||
[Define if libdlloader will be built on this platform])
|
||||
fi
|
||||
AC_SUBST([LT_DLPREOPEN])
|
||||
|
||||
dnl This isn't used anymore, but set it for backwards compatibility
|
||||
LIBADD_DL="$LIBADD_DLOPEN $LIBADD_SHL_LOAD"
|
||||
AC_SUBST([LIBADD_DL])
|
||||
|
||||
AC_LANG_POP
|
||||
])# LT_LIB_DLLOAD
|
||||
|
||||
# Old name:
|
||||
AU_ALIAS([AC_LTDL_DLLIB], [LT_LIB_DLLOAD])
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AC_LTDL_DLLIB], [])
|
||||
|
||||
|
||||
# LT_SYS_SYMBOL_USCORE
|
||||
# --------------------
|
||||
# does the compiler prefix global symbols with an underscore?
|
||||
AC_DEFUN([LT_SYS_SYMBOL_USCORE],
|
||||
[m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
|
||||
AC_CACHE_CHECK([for _ prefix in compiled symbols],
|
||||
[lt_cv_sys_symbol_underscore],
|
||||
[lt_cv_sys_symbol_underscore=no
|
||||
cat > conftest.$ac_ext <<_LT_EOF
|
||||
void nm_test_func(){}
|
||||
int main(){nm_test_func;return 0;}
|
||||
_LT_EOF
|
||||
if AC_TRY_EVAL(ac_compile); then
|
||||
# Now try to grab the symbols.
|
||||
ac_nlist=conftest.nm
|
||||
if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then
|
||||
# See whether the symbols have a leading underscore.
|
||||
if grep '^. _nm_test_func' "$ac_nlist" >/dev/null; then
|
||||
lt_cv_sys_symbol_underscore=yes
|
||||
else
|
||||
if grep '^. nm_test_func ' "$ac_nlist" >/dev/null; then
|
||||
:
|
||||
else
|
||||
echo "configure: cannot find nm_test_func in $ac_nlist" >&AS_MESSAGE_LOG_FD
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "configure: cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
|
||||
fi
|
||||
else
|
||||
echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
|
||||
cat conftest.c >&AS_MESSAGE_LOG_FD
|
||||
fi
|
||||
rm -rf conftest*
|
||||
])
|
||||
sys_symbol_underscore=$lt_cv_sys_symbol_underscore
|
||||
AC_SUBST([sys_symbol_underscore])
|
||||
])# LT_SYS_SYMBOL_USCORE
|
||||
|
||||
# Old name:
|
||||
AU_ALIAS([AC_LTDL_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE])
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AC_LTDL_SYMBOL_USCORE], [])
|
||||
|
||||
|
||||
# LT_FUNC_DLSYM_USCORE
|
||||
# --------------------
|
||||
AC_DEFUN([LT_FUNC_DLSYM_USCORE],
|
||||
[AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl
|
||||
if test x"$lt_cv_sys_symbol_underscore" = xyes; then
|
||||
if test x"$libltdl_cv_func_dlopen" = xyes ||
|
||||
test x"$libltdl_cv_lib_dl_dlopen" = xyes ; then
|
||||
AC_CACHE_CHECK([whether we have to add an underscore for dlsym],
|
||||
[libltdl_cv_need_uscore],
|
||||
[libltdl_cv_need_uscore=unknown
|
||||
save_LIBS="$LIBS"
|
||||
LIBS="$LIBS $LIBADD_DLOPEN"
|
||||
_LT_TRY_DLOPEN_SELF(
|
||||
[libltdl_cv_need_uscore=no], [libltdl_cv_need_uscore=yes],
|
||||
[], [libltdl_cv_need_uscore=cross])
|
||||
LIBS="$save_LIBS"
|
||||
])
|
||||
fi
|
||||
fi
|
||||
|
||||
if test x"$libltdl_cv_need_uscore" = xyes; then
|
||||
AC_DEFINE([NEED_USCORE], [1],
|
||||
[Define if dlsym() requires a leading underscore in symbol names.])
|
||||
fi
|
||||
])# LT_FUNC_DLSYM_USCORE
|
||||
|
||||
# Old name:
|
||||
AU_ALIAS([AC_LTDL_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE])
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AC_LTDL_DLSYM_USCORE], [])
|
|
@ -1,368 +0,0 @@
|
|||
# Helper functions for option handling. -*- Autoconf -*-
|
||||
#
|
||||
# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
|
||||
# Written by Gary V. Vaughan, 2004
|
||||
#
|
||||
# This file is free software; the Free Software Foundation gives
|
||||
# unlimited permission to copy and/or distribute it, with or without
|
||||
# modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 6 ltoptions.m4
|
||||
|
||||
# This is to help aclocal find these macros, as it can't see m4_define.
|
||||
AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
|
||||
|
||||
|
||||
# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
|
||||
# ------------------------------------------
|
||||
m4_define([_LT_MANGLE_OPTION],
|
||||
[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
|
||||
|
||||
|
||||
# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
|
||||
# ---------------------------------------
|
||||
# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
|
||||
# matching handler defined, dispatch to it. Other OPTION-NAMEs are
|
||||
# saved as a flag.
|
||||
m4_define([_LT_SET_OPTION],
|
||||
[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
|
||||
m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
|
||||
_LT_MANGLE_DEFUN([$1], [$2]),
|
||||
[m4_warning([Unknown $1 option `$2'])])[]dnl
|
||||
])
|
||||
|
||||
|
||||
# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
|
||||
# ------------------------------------------------------------
|
||||
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
|
||||
m4_define([_LT_IF_OPTION],
|
||||
[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
|
||||
|
||||
|
||||
# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
|
||||
# -------------------------------------------------------
|
||||
# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
|
||||
# are set.
|
||||
m4_define([_LT_UNLESS_OPTIONS],
|
||||
[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
|
||||
[m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
|
||||
[m4_define([$0_found])])])[]dnl
|
||||
m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
|
||||
])[]dnl
|
||||
])
|
||||
|
||||
|
||||
# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
|
||||
# ----------------------------------------
|
||||
# OPTION-LIST is a space-separated list of Libtool options associated
|
||||
# with MACRO-NAME. If any OPTION has a matching handler declared with
|
||||
# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
|
||||
# the unknown option and exit.
|
||||
m4_defun([_LT_SET_OPTIONS],
|
||||
[# Set options
|
||||
m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
|
||||
[_LT_SET_OPTION([$1], _LT_Option)])
|
||||
|
||||
m4_if([$1],[LT_INIT],[
|
||||
dnl
|
||||
dnl Simply set some default values (i.e off) if boolean options were not
|
||||
dnl specified:
|
||||
_LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
|
||||
])
|
||||
_LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
|
||||
])
|
||||
dnl
|
||||
dnl If no reference was made to various pairs of opposing options, then
|
||||
dnl we run the default mode handler for the pair. For example, if neither
|
||||
dnl `shared' nor `disable-shared' was passed, we enable building of shared
|
||||
dnl archives by default:
|
||||
_LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
|
||||
_LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
|
||||
_LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
|
||||
_LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
|
||||
[_LT_ENABLE_FAST_INSTALL])
|
||||
])
|
||||
])# _LT_SET_OPTIONS
|
||||
|
||||
|
||||
## --------------------------------- ##
|
||||
## Macros to handle LT_INIT options. ##
|
||||
## --------------------------------- ##
|
||||
|
||||
# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
|
||||
# -----------------------------------------
|
||||
m4_define([_LT_MANGLE_DEFUN],
|
||||
[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
|
||||
|
||||
|
||||
# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
|
||||
# -----------------------------------------------
|
||||
m4_define([LT_OPTION_DEFINE],
|
||||
[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
|
||||
])# LT_OPTION_DEFINE
|
||||
|
||||
|
||||
# dlopen
|
||||
# ------
|
||||
LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
|
||||
])
|
||||
|
||||
AU_DEFUN([AC_LIBTOOL_DLOPEN],
|
||||
[_LT_SET_OPTION([LT_INIT], [dlopen])
|
||||
AC_DIAGNOSE([obsolete],
|
||||
[$0: Remove this warning and the call to _LT_SET_OPTION when you
|
||||
put the `dlopen' option into LT_INIT's first parameter.])
|
||||
])
|
||||
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
|
||||
|
||||
|
||||
# win32-dll
|
||||
# ---------
|
||||
# Declare package support for building win32 dll's.
|
||||
LT_OPTION_DEFINE([LT_INIT], [win32-dll],
|
||||
[enable_win32_dll=yes
|
||||
|
||||
case $host in
|
||||
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
|
||||
AC_CHECK_TOOL(AS, as, false)
|
||||
AC_CHECK_TOOL(DLLTOOL, dlltool, false)
|
||||
AC_CHECK_TOOL(OBJDUMP, objdump, false)
|
||||
;;
|
||||
esac
|
||||
|
||||
test -z "$AS" && AS=as
|
||||
_LT_DECL([], [AS], [0], [Assembler program])dnl
|
||||
|
||||
test -z "$DLLTOOL" && DLLTOOL=dlltool
|
||||
_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
|
||||
|
||||
test -z "$OBJDUMP" && OBJDUMP=objdump
|
||||
_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
|
||||
])# win32-dll
|
||||
|
||||
AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
|
||||
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
|
||||
_LT_SET_OPTION([LT_INIT], [win32-dll])
|
||||
AC_DIAGNOSE([obsolete],
|
||||
[$0: Remove this warning and the call to _LT_SET_OPTION when you
|
||||
put the `win32-dll' option into LT_INIT's first parameter.])
|
||||
])
|
||||
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
|
||||
|
||||
|
||||
# _LT_ENABLE_SHARED([DEFAULT])
|
||||
# ----------------------------
|
||||
# implement the --enable-shared flag, and supports the `shared' and
|
||||
# `disable-shared' LT_INIT options.
|
||||
# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
|
||||
m4_define([_LT_ENABLE_SHARED],
|
||||
[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
|
||||
AC_ARG_ENABLE([shared],
|
||||
[AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
|
||||
[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
|
||||
[p=${PACKAGE-default}
|
||||
case $enableval in
|
||||
yes) enable_shared=yes ;;
|
||||
no) enable_shared=no ;;
|
||||
*)
|
||||
enable_shared=no
|
||||
# Look at the argument we got. We use all the common list separators.
|
||||
lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
|
||||
for pkg in $enableval; do
|
||||
IFS="$lt_save_ifs"
|
||||
if test "X$pkg" = "X$p"; then
|
||||
enable_shared=yes
|
||||
fi
|
||||
done
|
||||
IFS="$lt_save_ifs"
|
||||
;;
|
||||
esac],
|
||||
[enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
|
||||
|
||||
_LT_DECL([build_libtool_libs], [enable_shared], [0],
|
||||
[Whether or not to build shared libraries])
|
||||
])# _LT_ENABLE_SHARED
|
||||
|
||||
LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
|
||||
LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
|
||||
|
||||
# Old names:
|
||||
AC_DEFUN([AC_ENABLE_SHARED],
|
||||
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
|
||||
])
|
||||
|
||||
AC_DEFUN([AC_DISABLE_SHARED],
|
||||
[_LT_SET_OPTION([LT_INIT], [disable-shared])
|
||||
])
|
||||
|
||||
AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
|
||||
AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
|
||||
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AM_ENABLE_SHARED], [])
|
||||
dnl AC_DEFUN([AM_DISABLE_SHARED], [])
|
||||
|
||||
|
||||
|
||||
# _LT_ENABLE_STATIC([DEFAULT])
|
||||
# ----------------------------
|
||||
# implement the --enable-static flag, and support the `static' and
|
||||
# `disable-static' LT_INIT options.
|
||||
# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
|
||||
m4_define([_LT_ENABLE_STATIC],
|
||||
[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
|
||||
AC_ARG_ENABLE([static],
|
||||
[AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
|
||||
[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
|
||||
[p=${PACKAGE-default}
|
||||
case $enableval in
|
||||
yes) enable_static=yes ;;
|
||||
no) enable_static=no ;;
|
||||
*)
|
||||
enable_static=no
|
||||
# Look at the argument we got. We use all the common list separators.
|
||||
lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
|
||||
for pkg in $enableval; do
|
||||
IFS="$lt_save_ifs"
|
||||
if test "X$pkg" = "X$p"; then
|
||||
enable_static=yes
|
||||
fi
|
||||
done
|
||||
IFS="$lt_save_ifs"
|
||||
;;
|
||||
esac],
|
||||
[enable_static=]_LT_ENABLE_STATIC_DEFAULT)
|
||||
|
||||
_LT_DECL([build_old_libs], [enable_static], [0],
|
||||
[Whether or not to build static libraries])
|
||||
])# _LT_ENABLE_STATIC
|
||||
|
||||
LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
|
||||
LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
|
||||
|
||||
# Old names:
|
||||
AC_DEFUN([AC_ENABLE_STATIC],
|
||||
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
|
||||
])
|
||||
|
||||
AC_DEFUN([AC_DISABLE_STATIC],
|
||||
[_LT_SET_OPTION([LT_INIT], [disable-static])
|
||||
])
|
||||
|
||||
AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
|
||||
AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
|
||||
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AM_ENABLE_STATIC], [])
|
||||
dnl AC_DEFUN([AM_DISABLE_STATIC], [])
|
||||
|
||||
|
||||
|
||||
# _LT_ENABLE_FAST_INSTALL([DEFAULT])
|
||||
# ----------------------------------
|
||||
# implement the --enable-fast-install flag, and support the `fast-install'
|
||||
# and `disable-fast-install' LT_INIT options.
|
||||
# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
|
||||
m4_define([_LT_ENABLE_FAST_INSTALL],
|
||||
[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
|
||||
AC_ARG_ENABLE([fast-install],
|
||||
[AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
|
||||
[optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
|
||||
[p=${PACKAGE-default}
|
||||
case $enableval in
|
||||
yes) enable_fast_install=yes ;;
|
||||
no) enable_fast_install=no ;;
|
||||
*)
|
||||
enable_fast_install=no
|
||||
# Look at the argument we got. We use all the common list separators.
|
||||
lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
|
||||
for pkg in $enableval; do
|
||||
IFS="$lt_save_ifs"
|
||||
if test "X$pkg" = "X$p"; then
|
||||
enable_fast_install=yes
|
||||
fi
|
||||
done
|
||||
IFS="$lt_save_ifs"
|
||||
;;
|
||||
esac],
|
||||
[enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
|
||||
|
||||
_LT_DECL([fast_install], [enable_fast_install], [0],
|
||||
[Whether or not to optimize for fast installation])dnl
|
||||
])# _LT_ENABLE_FAST_INSTALL
|
||||
|
||||
LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
|
||||
LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
|
||||
|
||||
# Old names:
|
||||
AU_DEFUN([AC_ENABLE_FAST_INSTALL],
|
||||
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
|
||||
AC_DIAGNOSE([obsolete],
|
||||
[$0: Remove this warning and the call to _LT_SET_OPTION when you put
|
||||
the `fast-install' option into LT_INIT's first parameter.])
|
||||
])
|
||||
|
||||
AU_DEFUN([AC_DISABLE_FAST_INSTALL],
|
||||
[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
|
||||
AC_DIAGNOSE([obsolete],
|
||||
[$0: Remove this warning and the call to _LT_SET_OPTION when you put
|
||||
the `disable-fast-install' option into LT_INIT's first parameter.])
|
||||
])
|
||||
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
|
||||
dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
|
||||
|
||||
|
||||
# _LT_WITH_PIC([MODE])
|
||||
# --------------------
|
||||
# implement the --with-pic flag, and support the `pic-only' and `no-pic'
|
||||
# LT_INIT options.
|
||||
# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
|
||||
m4_define([_LT_WITH_PIC],
|
||||
[AC_ARG_WITH([pic],
|
||||
[AS_HELP_STRING([--with-pic],
|
||||
[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
|
||||
[pic_mode="$withval"],
|
||||
[pic_mode=default])
|
||||
|
||||
test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
|
||||
|
||||
_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
|
||||
])# _LT_WITH_PIC
|
||||
|
||||
LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
|
||||
LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
|
||||
|
||||
# Old name:
|
||||
AU_DEFUN([AC_LIBTOOL_PICMODE],
|
||||
[_LT_SET_OPTION([LT_INIT], [pic-only])
|
||||
AC_DIAGNOSE([obsolete],
|
||||
[$0: Remove this warning and the call to _LT_SET_OPTION when you
|
||||
put the `pic-only' option into LT_INIT's first parameter.])
|
||||
])
|
||||
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
|
||||
|
||||
## ----------------- ##
|
||||
## LTDL_INIT Options ##
|
||||
## ----------------- ##
|
||||
|
||||
m4_define([_LTDL_MODE], [])
|
||||
LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
|
||||
[m4_define([_LTDL_MODE], [nonrecursive])])
|
||||
LT_OPTION_DEFINE([LTDL_INIT], [recursive],
|
||||
[m4_define([_LTDL_MODE], [recursive])])
|
||||
LT_OPTION_DEFINE([LTDL_INIT], [subproject],
|
||||
[m4_define([_LTDL_MODE], [subproject])])
|
||||
|
||||
m4_define([_LTDL_TYPE], [])
|
||||
LT_OPTION_DEFINE([LTDL_INIT], [installable],
|
||||
[m4_define([_LTDL_TYPE], [installable])])
|
||||
LT_OPTION_DEFINE([LTDL_INIT], [convenience],
|
||||
[m4_define([_LTDL_TYPE], [convenience])])
|
|
@ -1,123 +0,0 @@
|
|||
# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
|
||||
#
|
||||
# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
|
||||
# Written by Gary V. Vaughan, 2004
|
||||
#
|
||||
# This file is free software; the Free Software Foundation gives
|
||||
# unlimited permission to copy and/or distribute it, with or without
|
||||
# modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 6 ltsugar.m4
|
||||
|
||||
# This is to help aclocal find these macros, as it can't see m4_define.
|
||||
AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
|
||||
|
||||
|
||||
# lt_join(SEP, ARG1, [ARG2...])
|
||||
# -----------------------------
|
||||
# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
|
||||
# associated separator.
|
||||
# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
|
||||
# versions in m4sugar had bugs.
|
||||
m4_define([lt_join],
|
||||
[m4_if([$#], [1], [],
|
||||
[$#], [2], [[$2]],
|
||||
[m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
|
||||
m4_define([_lt_join],
|
||||
[m4_if([$#$2], [2], [],
|
||||
[m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
|
||||
|
||||
|
||||
# lt_car(LIST)
|
||||
# lt_cdr(LIST)
|
||||
# ------------
|
||||
# Manipulate m4 lists.
|
||||
# These macros are necessary as long as will still need to support
|
||||
# Autoconf-2.59 which quotes differently.
|
||||
m4_define([lt_car], [[$1]])
|
||||
m4_define([lt_cdr],
|
||||
[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
|
||||
[$#], 1, [],
|
||||
[m4_dquote(m4_shift($@))])])
|
||||
m4_define([lt_unquote], $1)
|
||||
|
||||
|
||||
# lt_append(MACRO-NAME, STRING, [SEPARATOR])
|
||||
# ------------------------------------------
|
||||
# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
|
||||
# Note that neither SEPARATOR nor STRING are expanded; they are appended
|
||||
# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
|
||||
# No SEPARATOR is output if MACRO-NAME was previously undefined (different
|
||||
# than defined and empty).
|
||||
#
|
||||
# This macro is needed until we can rely on Autoconf 2.62, since earlier
|
||||
# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
|
||||
m4_define([lt_append],
|
||||
[m4_define([$1],
|
||||
m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
|
||||
|
||||
|
||||
|
||||
# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
|
||||
# ----------------------------------------------------------
|
||||
# Produce a SEP delimited list of all paired combinations of elements of
|
||||
# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list
|
||||
# has the form PREFIXmINFIXSUFFIXn.
|
||||
# Needed until we can rely on m4_combine added in Autoconf 2.62.
|
||||
m4_define([lt_combine],
|
||||
[m4_if(m4_eval([$# > 3]), [1],
|
||||
[m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
|
||||
[[m4_foreach([_Lt_prefix], [$2],
|
||||
[m4_foreach([_Lt_suffix],
|
||||
]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
|
||||
[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
|
||||
|
||||
|
||||
# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
|
||||
# -----------------------------------------------------------------------
|
||||
# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
|
||||
# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
|
||||
m4_define([lt_if_append_uniq],
|
||||
[m4_ifdef([$1],
|
||||
[m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
|
||||
[lt_append([$1], [$2], [$3])$4],
|
||||
[$5])],
|
||||
[lt_append([$1], [$2], [$3])$4])])
|
||||
|
||||
|
||||
# lt_dict_add(DICT, KEY, VALUE)
|
||||
# -----------------------------
|
||||
m4_define([lt_dict_add],
|
||||
[m4_define([$1($2)], [$3])])
|
||||
|
||||
|
||||
# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
|
||||
# --------------------------------------------
|
||||
m4_define([lt_dict_add_subkey],
|
||||
[m4_define([$1($2:$3)], [$4])])
|
||||
|
||||
|
||||
# lt_dict_fetch(DICT, KEY, [SUBKEY])
|
||||
# ----------------------------------
|
||||
m4_define([lt_dict_fetch],
|
||||
[m4_ifval([$3],
|
||||
m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
|
||||
m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
|
||||
|
||||
|
||||
# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
|
||||
# -----------------------------------------------------------------
|
||||
m4_define([lt_if_dict_fetch],
|
||||
[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
|
||||
[$5],
|
||||
[$6])])
|
||||
|
||||
|
||||
# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
|
||||
# --------------------------------------------------------------
|
||||
m4_define([lt_dict_filter],
|
||||
[m4_if([$5], [], [],
|
||||
[lt_join(m4_quote(m4_default([$4], [[, ]])),
|
||||
lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
|
||||
[lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
|
||||
])
|
|
@ -1,23 +0,0 @@
|
|||
# ltversion.m4 -- version numbers -*- Autoconf -*-
|
||||
#
|
||||
# Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
# Written by Scott James Remnant, 2004
|
||||
#
|
||||
# This file is free software; the Free Software Foundation gives
|
||||
# unlimited permission to copy and/or distribute it, with or without
|
||||
# modifications, as long as this notice is preserved.
|
||||
|
||||
# Generated from ltversion.in.
|
||||
|
||||
# serial 3017 ltversion.m4
|
||||
# This file is part of GNU Libtool
|
||||
|
||||
m4_define([LT_PACKAGE_VERSION], [2.2.6b])
|
||||
m4_define([LT_PACKAGE_REVISION], [1.3017])
|
||||
|
||||
AC_DEFUN([LTVERSION_VERSION],
|
||||
[macro_version='2.2.6b'
|
||||
macro_revision='1.3017'
|
||||
_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
|
||||
_LT_DECL(, macro_revision, 0)
|
||||
])
|
|
@ -1,92 +0,0 @@
|
|||
# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
|
||||
#
|
||||
# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
|
||||
# Written by Scott James Remnant, 2004.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation gives
|
||||
# unlimited permission to copy and/or distribute it, with or without
|
||||
# modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 4 lt~obsolete.m4
|
||||
|
||||
# These exist entirely to fool aclocal when bootstrapping libtool.
|
||||
#
|
||||
# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
|
||||
# which have later been changed to m4_define as they aren't part of the
|
||||
# exported API, or moved to Autoconf or Automake where they belong.
|
||||
#
|
||||
# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN
|
||||
# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
|
||||
# using a macro with the same name in our local m4/libtool.m4 it'll
|
||||
# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
|
||||
# and doesn't know about Autoconf macros at all.)
|
||||
#
|
||||
# So we provide this file, which has a silly filename so it's always
|
||||
# included after everything else. This provides aclocal with the
|
||||
# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
|
||||
# because those macros already exist, or will be overwritten later.
|
||||
# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
|
||||
#
|
||||
# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
|
||||
# Yes, that means every name once taken will need to remain here until
|
||||
# we give up compatibility with versions before 1.7, at which point
|
||||
# we need to keep only those names which we still refer to.
|
||||
|
||||
# This is to help aclocal find these macros, as it can't see m4_define.
|
||||
AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
|
||||
|
||||
m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
|
||||
m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])])
|
||||
m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
|
||||
m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])])
|
||||
m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
|
||||
m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])])
|
||||
m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])])
|
||||
m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
|
||||
m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])])
|
||||
m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])])
|
||||
m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])])
|
||||
m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
|
||||
m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
|
||||
m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
|
||||
m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
|
||||
m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
|
||||
m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])])
|
||||
m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
|
||||
m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
|
||||
m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])])
|
||||
m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])])
|
||||
m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
|
||||
m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
|
||||
m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
|
||||
m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
|
||||
m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
|
||||
m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
|
||||
m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
|
||||
m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])])
|
||||
m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])])
|
||||
m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])])
|
||||
m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
|
||||
m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
|
||||
m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])])
|
||||
m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])])
|
||||
m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
|
||||
m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
|
||||
m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])])
|
||||
m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
|
||||
m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])])
|
||||
m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])])
|
||||
m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])])
|
||||
m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])])
|
||||
m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
|
||||
m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
|
||||
m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
|
||||
m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
|
||||
m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
|
||||
m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
|
||||
m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
|
||||
m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
|
||||
m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
|
||||
m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
|
||||
m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])])
|
||||
m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
|
375
libltdl/slist.c
375
libltdl/slist.c
|
@ -1,375 +0,0 @@
|
|||
/* slist.c -- generalised singly linked lists
|
||||
|
||||
Copyright (C) 2000, 2004, 2007, 2008 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.
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include "slist.h"
|
||||
#include <stddef.h>
|
||||
|
||||
static SList * slist_sort_merge (SList *left, SList *right,
|
||||
SListCompare *compare, void *userdata);
|
||||
|
||||
|
||||
/* Call DELETE repeatedly on each element of HEAD.
|
||||
|
||||
CAVEAT: If you call this when HEAD is the start of a list of boxed
|
||||
items, you must remember that each item passed back to your
|
||||
DELETE function will be a boxed item that must be slist_unbox()ed
|
||||
before operating on its contents.
|
||||
|
||||
e.g. void boxed_delete (void *item) { item_free (slist_unbox (item)); }
|
||||
...
|
||||
slist = slist_delete (slist, boxed_delete);
|
||||
...
|
||||
*/
|
||||
SList *
|
||||
slist_delete (SList *head, void (*delete_fct) (void *item))
|
||||
{
|
||||
assert (delete_fct);
|
||||
|
||||
while (head)
|
||||
{
|
||||
SList *next = head->next;
|
||||
(*delete_fct) (head);
|
||||
head = next;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Call FIND repeatedly with MATCHDATA and each item of *PHEAD, until
|
||||
FIND returns non-NULL, or the list is exhausted. If a match is found
|
||||
the matching item is destructively removed from *PHEAD, and the value
|
||||
returned by the matching call to FIND is returned.
|
||||
|
||||
CAVEAT: To avoid memory leaks, unless you already have the address of
|
||||
the stale item, you should probably return that from FIND if
|
||||
it makes a successful match. Don't forget to slist_unbox()
|
||||
every item in a boxed list before operating on its contents. */
|
||||
void *
|
||||
slist_remove (SList **phead, SListCallback *find, void *matchdata)
|
||||
{
|
||||
SList *stale = 0;
|
||||
void *result = 0;
|
||||
|
||||
assert (find);
|
||||
|
||||
if (!phead || !*phead)
|
||||
return 0;
|
||||
|
||||
/* Does the head of the passed list match? */
|
||||
result = (*find) (*phead, matchdata);
|
||||
if (result)
|
||||
{
|
||||
stale = *phead;
|
||||
*phead = stale->next;
|
||||
}
|
||||
/* what about the rest of the elements? */
|
||||
else
|
||||
{
|
||||
SList *head;
|
||||
for (head = *phead; head->next; head = head->next)
|
||||
{
|
||||
result = (*find) (head->next, matchdata);
|
||||
if (result)
|
||||
{
|
||||
stale = head->next;
|
||||
head->next = stale->next;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Call FIND repeatedly with each element of SLIST and MATCHDATA, until
|
||||
FIND returns non-NULL, or the list is exhausted. If a match is found
|
||||
the value returned by the matching call to FIND is returned. */
|
||||
void *
|
||||
slist_find (SList *slist, SListCallback *find, void *matchdata)
|
||||
{
|
||||
void *result = 0;
|
||||
|
||||
assert (find);
|
||||
|
||||
for (; slist; slist = slist->next)
|
||||
{
|
||||
result = (*find) (slist, matchdata);
|
||||
if (result)
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Return a single list, composed by destructively concatenating the
|
||||
items in HEAD and TAIL. The values of HEAD and TAIL are undefined
|
||||
after calling this function.
|
||||
|
||||
CAVEAT: Don't mix boxed and unboxed items in a single list.
|
||||
|
||||
e.g. slist1 = slist_concat (slist1, slist2); */
|
||||
SList *
|
||||
slist_concat (SList *head, SList *tail)
|
||||
{
|
||||
SList *last;
|
||||
|
||||
if (!head)
|
||||
{
|
||||
return tail;
|
||||
}
|
||||
|
||||
last = head;
|
||||
while (last->next)
|
||||
last = last->next;
|
||||
|
||||
last->next = tail;
|
||||
|
||||
return head;
|
||||
}
|
||||
|
||||
/* Return a single list, composed by destructively appending all of
|
||||
the items in SLIST to ITEM. The values of ITEM and SLIST are undefined
|
||||
after calling this function.
|
||||
|
||||
CAVEAT: Don't mix boxed and unboxed items in a single list.
|
||||
|
||||
e.g. slist1 = slist_cons (slist_box (data), slist1); */
|
||||
SList *
|
||||
slist_cons (SList *item, SList *slist)
|
||||
{
|
||||
if (!item)
|
||||
{
|
||||
return slist;
|
||||
}
|
||||
|
||||
assert (!item->next);
|
||||
|
||||
item->next = slist;
|
||||
return item;
|
||||
}
|
||||
|
||||
/* Return a list starting at the second item of SLIST. */
|
||||
SList *
|
||||
slist_tail (SList *slist)
|
||||
{
|
||||
return slist ? slist->next : NULL;
|
||||
}
|
||||
|
||||
/* Return a list starting at the Nth item of SLIST. If SLIST is less
|
||||
than N items long, NULL is returned. Just to be confusing, list items
|
||||
are counted from 1, to get the 2nd element of slist:
|
||||
|
||||
e.g. shared_list = slist_nth (slist, 2); */
|
||||
SList *
|
||||
slist_nth (SList *slist, size_t n)
|
||||
{
|
||||
for (;n > 1 && slist; n--)
|
||||
slist = slist->next;
|
||||
|
||||
return slist;
|
||||
}
|
||||
|
||||
/* Return the number of items in SLIST. We start counting from 1, so
|
||||
the length of a list with no items is 0, and so on. */
|
||||
size_t
|
||||
slist_length (SList *slist)
|
||||
{
|
||||
size_t n;
|
||||
|
||||
for (n = 0; slist; ++n)
|
||||
slist = slist->next;
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
/* Destructively reverse the order of items in SLIST. The value of SLIST
|
||||
is undefined after calling this function.
|
||||
|
||||
CAVEAT: You must store the result of this function, or you might not
|
||||
be able to get all the items except the first one back again.
|
||||
|
||||
e.g. slist = slist_reverse (slist); */
|
||||
SList *
|
||||
slist_reverse (SList *slist)
|
||||
{
|
||||
SList *result = 0;
|
||||
SList *next;
|
||||
|
||||
while (slist)
|
||||
{
|
||||
next = slist->next;
|
||||
slist->next = result;
|
||||
result = slist;
|
||||
slist = next;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Call FOREACH once for each item in SLIST, passing both the item and
|
||||
USERDATA on each call. */
|
||||
void *
|
||||
slist_foreach (SList *slist, SListCallback *foreach, void *userdata)
|
||||
{
|
||||
void *result = 0;
|
||||
|
||||
assert (foreach);
|
||||
|
||||
while (slist)
|
||||
{
|
||||
SList *next = slist->next;
|
||||
result = (*foreach) (slist, userdata);
|
||||
|
||||
if (result)
|
||||
break;
|
||||
|
||||
slist = next;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Destructively merge the items of two ordered lists LEFT and RIGHT,
|
||||
returning a single sorted list containing the items of both -- Part of
|
||||
the quicksort algorithm. The values of LEFT and RIGHT are undefined
|
||||
after calling this function.
|
||||
|
||||
At each iteration, add another item to the merged list by taking the
|
||||
lowest valued item from the head of either LEFT or RIGHT, determined
|
||||
by passing those items and USERDATA to COMPARE. COMPARE should return
|
||||
less than 0 if the head of LEFT has the lower value, greater than 0 if
|
||||
the head of RIGHT has the lower value, otherwise 0. */
|
||||
static SList *
|
||||
slist_sort_merge (SList *left, SList *right, SListCompare *compare,
|
||||
void *userdata)
|
||||
{
|
||||
SList merged, *insert;
|
||||
|
||||
insert = &merged;
|
||||
|
||||
while (left && right)
|
||||
{
|
||||
if ((*compare) (left, right, userdata) <= 0)
|
||||
{
|
||||
insert = insert->next = left;
|
||||
left = left->next;
|
||||
}
|
||||
else
|
||||
{
|
||||
insert = insert->next = right;
|
||||
right = right->next;
|
||||
}
|
||||
}
|
||||
|
||||
insert->next = left ? left : right;
|
||||
|
||||
return merged.next;
|
||||
}
|
||||
|
||||
/* Perform a destructive quicksort on the items in SLIST, by repeatedly
|
||||
calling COMPARE with a pair of items from SLIST along with USERDATA
|
||||
at every iteration. COMPARE is a function as defined above for
|
||||
slist_sort_merge(). The value of SLIST is undefined after calling
|
||||
this function.
|
||||
|
||||
e.g. slist = slist_sort (slist, compare, 0); */
|
||||
SList *
|
||||
slist_sort (SList *slist, SListCompare *compare, void *userdata)
|
||||
{
|
||||
SList *left, *right;
|
||||
|
||||
if (!slist)
|
||||
return slist;
|
||||
|
||||
/* Be sure that LEFT and RIGHT never contain the same item. */
|
||||
left = slist;
|
||||
right = slist->next;
|
||||
|
||||
/* Skip two items with RIGHT and one with SLIST, until RIGHT falls off
|
||||
the end. SLIST must be about half way along. */
|
||||
while (right && (right = right->next))
|
||||
{
|
||||
if (!right || !(right = right->next))
|
||||
break;
|
||||
slist = slist->next;
|
||||
}
|
||||
right = slist->next;
|
||||
slist->next = 0;
|
||||
|
||||
/* Sort LEFT and RIGHT, then merge the two. */
|
||||
return slist_sort_merge (slist_sort (left, compare, userdata),
|
||||
slist_sort (right, compare, userdata),
|
||||
compare, userdata);
|
||||
}
|
||||
|
||||
|
||||
/* Aside from using the functions above to manage chained structures of
|
||||
any type that has a NEXT pointer as its first field, SLISTs can
|
||||
be comprised of boxed items. The boxes are chained together in
|
||||
that case, so there is no need for a NEXT field in the item proper.
|
||||
Some care must be taken to slist_box and slist_unbox each item in
|
||||
a boxed list at the appropriate points to avoid leaking the memory
|
||||
used for the boxes. It us usually a very bad idea to mix boxed and
|
||||
non-boxed items in a single list. */
|
||||
|
||||
/* Return a `boxed' freshly mallocated 1 element list containing
|
||||
USERDATA. */
|
||||
SList *
|
||||
slist_box (const void *userdata)
|
||||
{
|
||||
SList *item = (SList *) malloc (sizeof *item);
|
||||
|
||||
if (item)
|
||||
{
|
||||
item->next = 0;
|
||||
item->userdata = userdata;
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
/* Return the contents of a `boxed' ITEM, recycling the box itself. */
|
||||
void *
|
||||
slist_unbox (SList *item)
|
||||
{
|
||||
void *userdata = 0;
|
||||
|
||||
if (item)
|
||||
{
|
||||
/* Strip the const, because responsibility for this memory
|
||||
passes to the caller on return. */
|
||||
userdata = (void *) item->userdata;
|
||||
free (item);
|
||||
}
|
||||
|
||||
return userdata;
|
||||
}
|
|
@ -8,8 +8,6 @@ MACROS = \
|
|||
gr_pwin32.m4 \
|
||||
gr_swig.m4 \
|
||||
hl_getaddrinfo.m4 \
|
||||
libtool.m4 \
|
||||
ltdl.m4 \
|
||||
perl.m4 \
|
||||
ac_python_devel.m4 \
|
||||
tcl.m4
|
||||
|
|
Ładowanie…
Reference in New Issue