1039 lines
46 KiB
Plaintext
1039 lines
46 KiB
Plaintext
GNU LESSER GENERAL PUBLIC LICENSE
|
|
*********************************
|
|
|
|
Version 2.1, February 1999
|
|
|
|
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
|
59 Temple Place -- Suite 330, Boston, MA 02111-1307, USA
|
|
|
|
Everyone is permitted to copy and distribute verbatim copies
|
|
of this license document, but changing it is not allowed.
|
|
|
|
[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--typically libraries--of the Free
|
|
Software Foundation and other authors who decide to use it. You can use
|
|
it too, but we suggest you first think carefully about whether this
|
|
license or the ordinary General Public License is the better strategy to
|
|
use in any particular case, based on the explanations below.
|
|
|
|
When we speak of free software, we are referring to freedom of use, not
|
|
price. Our General Public Licenses are designed to make sure that you
|
|
have the freedom to distribute copies of free software (and charge for
|
|
this service if you wish); that you receive source code or can get it
|
|
if you want it; that you can change the software and use pieces of it
|
|
in new free programs; and that you are informed that you can do these
|
|
things.
|
|
|
|
To protect your rights, we need to make restrictions that forbid
|
|
distributors to deny you these rights or to ask you to surrender these
|
|
rights. These restrictions translate to certain responsibilities for
|
|
you if you distribute copies of the library or if you modify it.
|
|
|
|
For example, if you distribute copies of the library, whether gratis or
|
|
for a fee, you must give the recipients all the rights that we gave
|
|
you. You must make sure that they, too, receive or can get the source
|
|
code. If you link other code with the library, you must provide
|
|
complete object files to the recipients, so that they can relink them
|
|
with the library after making changes to the library and recompiling
|
|
it. And you must show them these terms so they know their rights.
|
|
|
|
We protect your rights with a two-step method: (1) we copyright the
|
|
library, and (2) we offer you this license, which gives you legal
|
|
permission to copy, distribute and/or modify the library.
|
|
|
|
To protect each distributor, we want to make it very clear that there
|
|
is no warranty for the free library. Also, if the library is modified
|
|
by someone else and passed on, the recipients should know that what
|
|
they have is not the original version, so that the original author's
|
|
reputation will not be affected by problems that might be introduced by
|
|
others.
|
|
|
|
Finally, software patents pose a constant threat to the existence of
|
|
any free program. We wish to make sure that a company cannot
|
|
effectively restrict the users of a free program by obtaining a
|
|
restrictive license from a patent holder. Therefore, we insist that
|
|
any patent license obtained for a version of the library must be
|
|
consistent with the full freedom of use specified in this license.
|
|
|
|
Most GNU software, including some libraries, is covered by the ordinary
|
|
GNU General Public License. This license, the GNU Lesser General
|
|
Public License, applies to certain designated libraries, and is quite
|
|
different from the ordinary General Public License. We use this
|
|
license for certain libraries in order to permit linking those
|
|
libraries into non-free programs.
|
|
|
|
When a program is linked with a library, whether statically or using a
|
|
shared library, the combination of the two is legally speaking a
|
|
combined work, a derivative of the original library. The ordinary
|
|
General Public License therefore permits such linking only if the
|
|
entire combination fits its criteria of freedom. The Lesser General
|
|
Public License permits more lax criteria for linking other code with
|
|
the library.
|
|
|
|
We call this license the "Lesser" General Public License because it
|
|
does _Less_ to protect the user's freedom than the ordinary General
|
|
Public License. It also provides other free software developers Less
|
|
of an advantage over competing non-free programs. These disadvantages
|
|
are the reason we use the ordinary General Public License for many
|
|
libraries. However, the Lesser license provides advantages in certain
|
|
special circumstances.
|
|
|
|
For example, on rare occasions, there may be a special need to
|
|
encourage the widest possible use of a certain library, so that it
|
|
becomes a de-facto standard. To achieve this, non-free programs must be
|
|
allowed to use the library. A more frequent case is that a free
|
|
library does the same job as widely used non-free libraries. In this
|
|
case, there is little to gain by limiting the free library to free
|
|
software only, so we use the Lesser General Public License.
|
|
|
|
In other cases, permission to use a particular library in non-free
|
|
programs enables a greater number of people to use a large body of free
|
|
software. For example, permission to use the GNU C Library in non-free
|
|
programs enables many more people to use the whole GNU operating
|
|
system, as well as its variant, the GNU/Linux operating system.
|
|
|
|
Although the Lesser General Public License is Less protective of the
|
|
users' freedom, it does ensure that the user of a program that is
|
|
linked with the Library has the freedom and the wherewithal to run that
|
|
program using a modified version of the Library.
|
|
|
|
The precise terms and conditions for copying, distribution and
|
|
modification follow. Pay close attention to the difference between a
|
|
"work based on the library" and a "work that uses the library". The
|
|
former contains code derived from the library, whereas the latter must
|
|
be combined with the library in order to run.
|
|
|
|
GNU LESSER GENERAL PUBLIC LICENSE
|
|
|
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
|
|
0. This License Agreement applies to any software library or other
|
|
program which contains a notice placed by the copyright holder or
|
|
other authorized party saying it may be distributed under the
|
|
terms of this Lesser General Public License (also called "this
|
|
License"). Each licensee is addressed as "you".
|
|
|
|
A "library" means a collection of software functions and/or data
|
|
prepared so as to be conveniently linked with application programs
|
|
(which use some of those functions and data) to form executables.
|
|
|
|
The "Library", below, refers to any such software library or work
|
|
which has been distributed under these terms. A "work based on the
|
|
Library" means either the Library or any derivative work under
|
|
copyright law: that is to say, a work containing the Library or a
|
|
portion of it, either verbatim or with modifications and/or
|
|
translated straightforwardly into another language. (Hereinafter,
|
|
translation is included without limitation in the term
|
|
"modification".)
|
|
|
|
"Source code" for a work means the preferred form of the work for
|
|
making modifications to it. For a library, complete source code
|
|
means all the source code for all modules it contains, plus any
|
|
associated interface definition files, plus the scripts used to
|
|
control compilation and installation of the library.
|
|
|
|
Activities other than copying, distribution and modification are
|
|
not covered by this License; they are outside its scope. The act
|
|
of running a program using the Library is not restricted, and
|
|
output from such a program is covered only if its contents
|
|
constitute a work based on the Library (independent of the use of
|
|
the Library in a tool for writing it). Whether that is true
|
|
depends on what the Library does and what the program that uses
|
|
the Library does.
|
|
|
|
1. You may copy and distribute verbatim copies of the Library's
|
|
complete source code as you receive it, in any medium, provided
|
|
that you conspicuously and appropriately publish on each copy an
|
|
appropriate copyright notice and disclaimer of warranty; keep
|
|
intact all the notices that refer to this License and to the
|
|
absence of any warranty; and distribute a copy of this License
|
|
along with the Library.
|
|
|
|
You may charge a fee for the physical act of transferring a copy,
|
|
and you may at your option offer warranty protection in exchange
|
|
for a fee.
|
|
|
|
2. You may modify your copy or copies of the Library or any portion
|
|
of it, thus forming a work based on the Library, and copy and
|
|
distribute such modifications or work under the terms of Section 1
|
|
above, provided that you also meet all of these conditions:
|
|
|
|
a. The modified work must itself be a software library.
|
|
|
|
b. You must cause the files modified to carry prominent notices
|
|
stating that you changed the files and the date of any change.
|
|
|
|
c. You must cause the whole of the work to be licensed at no
|
|
charge to all third parties under the terms of this License.
|
|
|
|
d. If a facility in the modified Library refers to a function or
|
|
a table of data to be supplied by an application program that
|
|
uses the facility, other than as an argument passed when the
|
|
facility is invoked, then you must make a good faith effort
|
|
to ensure that, in the event an application does not supply
|
|
such function or table, the facility still operates, and
|
|
performs whatever part of its purpose remains meaningful.
|
|
|
|
(For example, a function in a library to compute square roots
|
|
has a purpose that is entirely well-defined independent of the
|
|
application. Therefore, Subsection 2d requires that any
|
|
application-supplied function or table used by this function
|
|
must be optional: if the application does not supply it, the
|
|
square root function must still compute square roots.)
|
|
|
|
These requirements apply to the modified work as a whole. If
|
|
identifiable sections of that work are not derived from the
|
|
Library, and can be reasonably considered independent and separate
|
|
works in themselves, then this License, and its terms, do not
|
|
apply to those sections when you distribute them as separate
|
|
works. But when you distribute the same sections as part of a
|
|
whole which is a work based on the Library, the distribution of
|
|
the whole must be on the terms of this License, whose permissions
|
|
for other licensees extend to the entire whole, and thus to each
|
|
and every part regardless of who wrote it.
|
|
|
|
Thus, it is not the intent of this section to claim rights or
|
|
contest your rights to work written entirely by you; rather, the
|
|
intent is to exercise the right to control the distribution of
|
|
derivative or collective works based on the Library.
|
|
|
|
In addition, mere aggregation of another work not based on the
|
|
Library with the Library (or with a work based on the Library) on
|
|
a volume of a storage or distribution medium does not bring the
|
|
other work under the scope of this License.
|
|
|
|
3. You may opt to apply the terms of the ordinary GNU General Public
|
|
License instead of this License to a given copy of the Library.
|
|
To do this, you must alter all the notices that refer to this
|
|
License, so that they refer to the ordinary GNU General Public
|
|
License, version 2, instead of to this License. (If a newer
|
|
version than version 2 of the ordinary GNU General Public License
|
|
has appeared, then you can specify that version instead if you
|
|
wish.) Do not make any other change in these notices.
|
|
|
|
Once this change is made in a given copy, it is irreversible for
|
|
that copy, so the ordinary GNU General Public License applies to
|
|
all subsequent copies and derivative works made from that copy.
|
|
|
|
This option is useful when you wish to copy part of the code of
|
|
the Library into a program that is not a library.
|
|
|
|
4. You may copy and distribute the Library (or a portion or
|
|
derivative of it, under Section 2) in object code or executable
|
|
form under the terms of Sections 1 and 2 above provided that you
|
|
accompany it with the complete corresponding machine-readable
|
|
source code, which must be distributed under the terms of Sections
|
|
1 and 2 above on a medium customarily used for software
|
|
interchange.
|
|
|
|
If distribution of object code is made by offering access to copy
|
|
from a designated place, then offering equivalent access to copy
|
|
the source code from the same place satisfies the requirement to
|
|
distribute the source code, even though third parties are not
|
|
compelled to copy the source along with the object code.
|
|
|
|
5. A program that contains no derivative of any portion of the
|
|
Library, but is designed to work with the Library by being
|
|
compiled or linked with it, is called a "work that uses the
|
|
Library". Such a work, in isolation, is not a derivative work of
|
|
the Library, and therefore falls outside the scope of this License.
|
|
|
|
However, linking a "work that uses the Library" with the Library
|
|
creates an executable that is a derivative of the Library (because
|
|
it contains portions of the Library), rather than a "work that
|
|
uses the library". The executable is therefore covered by this
|
|
License. Section 6 states terms for distribution of such
|
|
executables.
|
|
|
|
When a "work that uses the Library" uses material from a header
|
|
file that is part of the Library, the object code for the work may
|
|
be a derivative work of the Library even though the source code is
|
|
not. Whether this is true is especially significant if the work
|
|
can be linked without the Library, or if the work is itself a
|
|
library. The threshold for this to be true is not precisely
|
|
defined by law.
|
|
|
|
If such an object file uses only numerical parameters, data
|
|
structure layouts and accessors, and small macros and small inline
|
|
functions (ten lines or less in length), then the use of the object
|
|
file is unrestricted, regardless of whether it is legally a
|
|
derivative work. (Executables containing this object code plus
|
|
portions of the Library will still fall under Section 6.)
|
|
|
|
Otherwise, if the work is a derivative of the Library, you may
|
|
distribute the object code for the work under the terms of Section
|
|
6. Any executables containing that work also fall under Section 6,
|
|
whether or not they are linked directly with the Library itself.
|
|
|
|
6. As an exception to the Sections above, you may also combine or
|
|
link a "work that uses the Library" with the Library to produce a
|
|
work containing portions of the Library, and distribute that work
|
|
under terms of your choice, provided that the terms permit
|
|
modification of the work for the customer's own use and reverse
|
|
engineering for debugging such modifications.
|
|
|
|
You must give prominent notice with each copy of the work that the
|
|
Library is used in it and that the Library and its use are covered
|
|
by this License. You must supply a copy of this License. If the
|
|
work during execution displays copyright notices, you must include
|
|
the copyright notice for the Library among them, as well as a
|
|
reference directing the user to the copy of this License. Also,
|
|
you must do one of these things:
|
|
|
|
a. Accompany the work with the complete corresponding
|
|
machine-readable source code for the Library including
|
|
whatever changes were used in the work (which must be
|
|
distributed under Sections 1 and 2 above); and, if the work
|
|
is an executable linked with the Library, with the complete
|
|
machine-readable "work that uses the Library", as object code
|
|
and/or source code, so that the user can modify the Library
|
|
and then relink to produce a modified executable containing
|
|
the modified Library. (It is understood that the user who
|
|
changes the contents of definitions files in the Library will
|
|
not necessarily be able to recompile the application to use
|
|
the modified definitions.)
|
|
|
|
b. Use a suitable shared library mechanism for linking with the
|
|
Library. A suitable mechanism is one that (1) uses at run
|
|
time a copy of the library already present on the user's
|
|
computer system, rather than copying library functions into
|
|
the executable, and (2) will operate properly with a modified
|
|
version of the library, if the user installs one, as long as
|
|
the modified version is interface-compatible with the version
|
|
that the work was made with.
|
|
|
|
c. Accompany the work with a written offer, valid for at least
|
|
three years, to give the same user the materials specified in
|
|
Subsection 6a, above, for a charge no more than the cost of
|
|
performing this distribution.
|
|
|
|
d. If distribution of the work is made by offering access to copy
|
|
from a designated place, offer equivalent access to copy the
|
|
above specified materials from the same place.
|
|
|
|
e. Verify that the user has already received a copy of these
|
|
materials or that you have already sent this user a copy.
|
|
|
|
For an executable, the required form of the "work that uses the
|
|
Library" must include any data and utility programs needed for
|
|
reproducing the executable from it. However, as a special
|
|
exception, the materials to be distributed need not include
|
|
anything that is normally distributed (in either source or binary
|
|
form) with the major components (compiler, kernel, and so on) of
|
|
the operating system on which the executable runs, unless that
|
|
component itself accompanies the executable.
|
|
|
|
It may happen that this requirement contradicts the license
|
|
restrictions of other proprietary libraries that do not normally
|
|
accompany the operating system. Such a contradiction means you
|
|
cannot use both them and the Library together in an executable
|
|
that you distribute.
|
|
|
|
7. You may place library facilities that are a work based on the
|
|
Library side-by-side in a single library together with other
|
|
library facilities not covered by this License, and distribute
|
|
such a combined library, provided that the separate distribution
|
|
of the work based on the Library and of the other library
|
|
facilities is otherwise permitted, and provided that you do these
|
|
two things:
|
|
|
|
a. Accompany the combined library with a copy of the same work
|
|
based on the Library, uncombined with any other library
|
|
facilities. This must be distributed under the terms of the
|
|
Sections above.
|
|
|
|
b. Give prominent notice with the combined library of the fact
|
|
that part of it is a work based on the Library, and explaining
|
|
where to find the accompanying uncombined form of the same
|
|
work.
|
|
|
|
8. You may not copy, modify, sublicense, link with, or distribute the
|
|
Library except as expressly provided under this License. Any
|
|
attempt otherwise to copy, modify, sublicense, link with, or
|
|
distribute the Library is void, and will automatically terminate
|
|
your rights under this License. However, parties who have
|
|
received copies, or rights, from you under this License will not
|
|
have their licenses terminated so long as such parties remain in
|
|
full compliance.
|
|
|
|
9. You are not required to accept this License, since you have not
|
|
signed it. However, nothing else grants you permission to modify
|
|
or distribute the Library or its derivative works. These actions
|
|
are prohibited by law if you do not accept this License.
|
|
Therefore, by modifying or distributing the Library (or any work
|
|
based on the Library), you indicate your acceptance of this
|
|
License to do so, and all its terms and conditions for copying,
|
|
distributing or modifying the Library or works based on it.
|
|
|
|
10. Each time you redistribute the Library (or any work based on the
|
|
Library), the recipient automatically receives a license from the
|
|
original licensor to copy, distribute, link with or modify the
|
|
Library subject to these terms and conditions. You may not impose
|
|
any further restrictions on the recipients' exercise of the rights
|
|
granted herein. You are not responsible for enforcing compliance
|
|
by third parties with this License.
|
|
|
|
11. If, as a consequence of a court judgment or allegation of patent
|
|
infringement or for any other reason (not limited to patent
|
|
issues), conditions are imposed on you (whether by court order,
|
|
agreement or otherwise) that contradict the conditions of this
|
|
License, they do not excuse you from the conditions of this
|
|
License. If you cannot distribute so as to satisfy simultaneously
|
|
your obligations under this License and any other pertinent
|
|
obligations, then as a consequence you may not distribute the
|
|
Library at all. For example, if a patent license would not permit
|
|
royalty-free redistribution of the Library by all those who
|
|
receive copies directly or indirectly through you, then the only
|
|
way you could satisfy both it and this License would be to refrain
|
|
entirely from distribution of the Library.
|
|
|
|
If any portion of this section is held invalid or unenforceable
|
|
under any particular circumstance, the balance of the section is
|
|
intended to apply, and the section as a whole is intended to apply
|
|
in other circumstances.
|
|
|
|
It is not the purpose of this section to induce you to infringe any
|
|
patents or other property right claims or to contest validity of
|
|
any such claims; this section has the sole purpose of protecting
|
|
the integrity of the free software distribution system which is
|
|
implemented by public license practices. Many people have made
|
|
generous contributions to the wide range of software distributed
|
|
through that system in reliance on consistent application of that
|
|
system; it is up to the author/donor to decide if he or she is
|
|
willing to distribute software through any other system and a
|
|
licensee cannot impose that choice.
|
|
|
|
This section is intended to make thoroughly clear what is believed
|
|
to be a consequence of the rest of this License.
|
|
|
|
12. If the distribution and/or use of the Library is restricted in
|
|
certain countries either by patents or by copyrighted interfaces,
|
|
the original copyright holder who places the Library under this
|
|
License may add an explicit geographical distribution limitation
|
|
excluding those countries, so that distribution is permitted only
|
|
in or among countries not thus excluded. In such case, this
|
|
License incorporates the limitation as if written in the body of
|
|
this License.
|
|
|
|
13. The Free Software Foundation may publish revised and/or new
|
|
versions of the Lesser General Public License from time to time.
|
|
Such new versions will be similar in spirit to the present version,
|
|
but may differ in detail to address new problems or concerns.
|
|
|
|
Each version is given a distinguishing version number. If the
|
|
Library specifies a version number of this License which applies
|
|
to it and "any later version", you have the option of following
|
|
the terms and conditions either of that version or of any later
|
|
version published by the Free Software Foundation. If the Library
|
|
does not specify a license version number, you may choose any
|
|
version ever published by the Free Software Foundation.
|
|
|
|
14. If you wish to incorporate parts of the Library into other free
|
|
programs whose distribution conditions are incompatible with these,
|
|
write to the author to ask for permission. For software which is
|
|
copyrighted by the Free Software Foundation, write to the Free
|
|
Software Foundation; we sometimes make exceptions for this. Our
|
|
decision will be guided by the two goals of preserving the free
|
|
status of all derivatives of our free software and of promoting
|
|
the sharing and reuse of software generally.
|
|
|
|
NO WARRANTY
|
|
|
|
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
|
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE
|
|
LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
|
HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT
|
|
WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
|
|
NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
|
|
QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE
|
|
LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
|
|
SERVICING, REPAIR OR CORRECTION.
|
|
|
|
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
|
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
|
|
MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE
|
|
LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
|
|
INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
|
|
INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF
|
|
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
|
|
OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY
|
|
OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
|
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
|
|
|
END OF TERMS AND CONDITIONS
|
|
|
|
How to Apply These Terms to Your New Libraries
|
|
==============================================
|
|
|
|
If you develop a new library, and you want it to be of the greatest
|
|
possible use to the public, we recommend making it free software that
|
|
everyone can redistribute and change. You can do so by permitting
|
|
redistribution under these terms (or, alternatively, under the terms of
|
|
the ordinary General Public License).
|
|
|
|
To apply these terms, attach the following notices to the library. It
|
|
is safest to attach them to the start of each source file to most
|
|
effectively convey the exclusion of warranty; and each file should have
|
|
at least the "copyright" line and a pointer to where the full notice is
|
|
found.
|
|
|
|
ONE LINE TO GIVE THE LIBRARY'S NAME AND AN IDEA OF WHAT IT DOES.
|
|
Copyright (C) YEAR NAME OF AUTHOR
|
|
|
|
This library is free software; you can redistribute it and/or modify it
|
|
under the terms of the GNU Lesser General Public License as published by
|
|
the Free Software Foundation; either version 2.1 of the License, or (at
|
|
your option) any later version.
|
|
|
|
This library is distributed in the hope that it will be useful, but
|
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with this library; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
|
|
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!
|
|
|
|
|
|
Pieces of the manual in transit
|
|
*******************************
|
|
|
|
* Menu:
|
|
|
|
* Installing binary:: Installing a MySQL Binary Distribution
|
|
* Perl support:: Perl Installation Comments
|
|
* Group by functions:: Functions for Use with `GROUP BY' Clauses
|
|
|
|
|
|
Installing a MySQL Binary Distribution
|
|
======================================
|
|
|
|
* Menu:
|
|
|
|
* Linux-RPM:: Linux RPM files
|
|
* Building clients:: Building client programs
|
|
|
|
You need the following tools to install a MySQL binary distribution:
|
|
|
|
* GNU `gunzip' to uncompress the distribution.
|
|
|
|
* A reasonable `tar' to unpack the distribution. GNU `tar' is known
|
|
to work. Sun `tar' is known to have problems.
|
|
|
|
An alternative installation method under Linux is to use RPM (RedHat
|
|
Package Manager) distributions. *Note Linux-RPM::.
|
|
|
|
If you run into problems, *PLEASE ALWAYS USE* `mysqlbug' when posting
|
|
questions to <mysql@lists.mysql.com>. Even if the problem isn't a bug,
|
|
`mysqlbug' gathers system information that will help others solve your
|
|
problem. By not using `mysqlbug', you lessen the likelihood of getting
|
|
a solution to your problem! You will find `mysqlbug' in the `bin'
|
|
directory after you unpack the distribution. *Note Bug reports::.
|
|
|
|
The basic commands you must execute to install and use a MySQL binary
|
|
distribution are:
|
|
|
|
shell> groupadd mysql
|
|
shell> useradd -g mysql mysql
|
|
shell> cd /usr/local
|
|
shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -
|
|
shell> ln -s mysql-VERSION-OS mysql
|
|
shell> cd mysql
|
|
shell> scripts/mysql_install_db
|
|
shell> chown -R root /usr/local/mysql
|
|
shell> chown -R mysql /usr/local/mysql/data
|
|
shell> chgrp -R mysql /usr/local/mysql
|
|
shell> chown -R root /usr/local/mysql/bin
|
|
shell> bin/safe_mysqld --user=mysql &
|
|
|
|
You can add new users using the `bin/mysql_setpermission' script if you
|
|
install the `DBI' and `Msql-Mysql-modules' Perl modules.
|
|
|
|
A more detailed description follows.
|
|
|
|
To install a binary distribution, follow the steps below, then proceed
|
|
to *Note Post-installation::, for post-installation setup and testing:
|
|
|
|
1. Pick the directory under which you want to unpack the
|
|
distribution, and move into it. In the example below, we unpack
|
|
the distribution under `/usr/local' and create a directory
|
|
`/usr/local/mysql' into which MySQL is installed. (The following
|
|
instructions therefore assume you have permission to create files
|
|
in `/usr/local'. If that directory is protected, you will need to
|
|
perform the installation as `root'.)
|
|
|
|
2. Obtain a distribution file from one of the sites listed in *Note
|
|
Getting MySQL: Getting MySQL.
|
|
|
|
MySQL binary distributions are provided as compressed `tar'
|
|
archives and have names like `mysql-VERSION-OS.tar.gz', where
|
|
`VERSION' is a number (for example, `3.21.15'), and `OS' indicates
|
|
the type of operating system for which the distribution is intended
|
|
(for example, `pc-linux-gnu-i586').
|
|
|
|
3. If you see a binary distribution marked with the `-max' prefix,
|
|
this means that the binary has support for transaction-safe tables
|
|
and other features. *Note `mysqld-max': mysqld-max. Note that all
|
|
binaries are built from the same MySQL source distribution.
|
|
|
|
4. Add a user and group for `mysqld' to run as:
|
|
|
|
shell> groupadd mysql
|
|
shell> useradd -g mysql mysql
|
|
|
|
These commands add the `mysql' group and the `mysql' user. The
|
|
syntax for `useradd' and `groupadd' may differ slightly on
|
|
different versions of Unix. They may also be called `adduser' and
|
|
`addgroup'. You may wish to call the user and group something
|
|
else instead of `mysql'.
|
|
|
|
5. Change into the intended installation directory:
|
|
|
|
shell> cd /usr/local
|
|
|
|
6. Unpack the distribution and create the installation directory:
|
|
|
|
shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -
|
|
shell> ln -s mysql-VERSION-OS mysql
|
|
|
|
The first command creates a directory named `mysql-VERSION-OS'.
|
|
The second command makes a symbolic link to that directory. This
|
|
lets you refer more easily to the installation directory as
|
|
`/usr/local/mysql'.
|
|
|
|
7. Change into the installation directory:
|
|
|
|
shell> cd mysql
|
|
|
|
You will find several files and subdirectories in the `mysql'
|
|
directory. The most important for installation purposes are the
|
|
`bin' and `scripts' subdirectories.
|
|
|
|
`bin'
|
|
This directory contains client programs and the server You
|
|
should add the full pathname of this directory to your `PATH'
|
|
environment variable so that your shell finds the MySQL
|
|
programs properly. *Note Environment variables::.
|
|
|
|
`scripts'
|
|
This directory contains the `mysql_install_db' script used to
|
|
initialize the `mysql' database containing the grant tables
|
|
that store the server access permissions.
|
|
|
|
8. If you would like to use `mysqlaccess' and have the MySQL
|
|
distribution in some non-standard place, you must change the
|
|
location where `mysqlaccess' expects to find the `mysql' client.
|
|
Edit the `bin/mysqlaccess' script at approximately line 18.
|
|
Search for a line that looks like this:
|
|
|
|
$MYSQL = '/usr/local/bin/mysql'; # path to mysql executable
|
|
|
|
Change the path to reflect the location where `mysql' actually is
|
|
stored on your system. If you do not do this, you will get a
|
|
`Broken pipe' error when you run `mysqlaccess'.
|
|
|
|
9. Create the MySQL grant tables (necessary only if you haven't
|
|
installed MySQL before):
|
|
shell> scripts/mysql_install_db
|
|
|
|
Note that MySQL versions older than Version 3.22.10 started the
|
|
MySQL server when you run `mysql_install_db'. This is no longer
|
|
true!
|
|
|
|
10. Change ownership of binaries to `root' and ownership of the data
|
|
directory to the user that you will run `mysqld' as:
|
|
|
|
shell> chown -R root /usr/local/mysql
|
|
shell> chown -R mysql /usr/local/mysql/data
|
|
shell> chgrp -R mysql /usr/local/mysql
|
|
|
|
The first command changes the `owner' attribute of the files to the
|
|
`root' user, the second one changes the `owner' attribute of the
|
|
data directory to the `mysql' user, and the third one changes the
|
|
`group' attribute to the `mysql' group.
|
|
|
|
11. If you want to install support for the Perl `DBI'/`DBD' interface,
|
|
see *Note Perl support::.
|
|
|
|
12. If you would like MySQL to start automatically when you boot your
|
|
machine, you can copy `support-files/mysql.server' to the location
|
|
where your system has its startup files. More information can be
|
|
found in the `support-files/mysql.server' script itself and in
|
|
*Note Automatic start::.
|
|
|
|
|
|
After everything has been unpacked and installed, you should initialize
|
|
and test your distribution.
|
|
|
|
You can start the MySQL server with the following command:
|
|
|
|
shell> bin/safe_mysqld --user=mysql &
|
|
|
|
*Note `safe_mysqld': safe_mysqld.
|
|
|
|
*Note Post-installation::.
|
|
|
|
|
|
Perl Installation Comments
|
|
==========================
|
|
|
|
* Menu:
|
|
|
|
* Perl installation:: Installing Perl on Unix
|
|
* ActiveState Perl:: Installing ActiveState Perl on Windows
|
|
* Windows Perl:: Installing the MySQL Perl distribution on Windows
|
|
* Perl support problems:: Problems using the Perl `DBI'/`DBD' interface
|
|
|
|
|
|
Installing Perl on Unix
|
|
-----------------------
|
|
|
|
Perl support for MySQL is provided by means of the `DBI'/`DBD' client
|
|
interface. *Note Perl::. The Perl `DBD'/`DBI' client code requires
|
|
Perl Version 5.004 or later. The interface *will not work* if you have
|
|
an older version of Perl.
|
|
|
|
MySQL Perl support also requires that you've installed MySQL client
|
|
programming support. If you installed MySQL from RPM files, client
|
|
programs are in the client RPM, but client programming support is in
|
|
the developer RPM. Make sure you've installed the latter RPM.
|
|
|
|
As of Version 3.22.8, Perl support is distributed separately from the
|
|
main MySQL distribution. If you want to install Perl support, the files
|
|
you will need can be obtained from
|
|
`http://www.mysql.com/Downloads/Contrib/'.
|
|
|
|
The Perl distributions are provided as compressed `tar' archives and
|
|
have names like `MODULE-VERSION.tar.gz', where `MODULE' is the module
|
|
name and `VERSION' is the version number. You should get the
|
|
`Data-Dumper', `DBI', and `Msql-Mysql-modules' distributions and
|
|
install them in that order. The installation procedure is shown below.
|
|
The example shown is for the `Data-Dumper' module, but the procedure is
|
|
the same for all three distributions:
|
|
|
|
1. Unpack the distribution into the current directory:
|
|
shell> gunzip < Data-Dumper-VERSION.tar.gz | tar xvf -
|
|
This command creates a directory named `Data-Dumper-VERSION'.
|
|
|
|
2. Change into the top-level directory of the unpacked distribution:
|
|
shell> cd Data-Dumper-VERSION
|
|
|
|
3. Build the distribution and compile everything:
|
|
shell> perl Makefile.PL
|
|
shell> make
|
|
shell> make test
|
|
shell> make install
|
|
|
|
The `make test' command is important because it verifies that the
|
|
module is working. Note that when you run that command during the
|
|
`Msql-Mysql-modules' installation to exercise the interface code, the
|
|
MySQL server must be running or the test will fail.
|
|
|
|
It is a good idea to rebuild and reinstall the `Msql-Mysql-modules'
|
|
distribution whenever you install a new release of MySQL, particularly
|
|
if you notice symptoms such as all your `DBI' scripts dumping core
|
|
after you upgrade MySQL.
|
|
|
|
If you don't have the right to install Perl modules in the system
|
|
directory or if you to install local Perl modules, the following
|
|
reference may help you:
|
|
|
|
`http://www.iserver.com/support/contrib/perl5/modules.html'
|
|
|
|
Look under the heading `Installing New Modules that Require Locally
|
|
Installed Modules'.
|
|
|
|
|
|
Installing ActiveState Perl on Windows
|
|
--------------------------------------
|
|
|
|
To install the MySQL `DBD' module with ActiveState Perl on Windows, you
|
|
should do the following:
|
|
|
|
* Get ActiveState Perl from
|
|
`http://www.activestate.com/Products/ActivePerl/index.html' and
|
|
install it.
|
|
|
|
* Open a DOS shell.
|
|
|
|
* If required, set the HTTP_proxy variable. For example, you might
|
|
try:
|
|
|
|
set HTTP_proxy=my.proxy.com:3128
|
|
|
|
* Start the PPM program:
|
|
|
|
C:\> c:\perl\bin\ppm.pl
|
|
|
|
* If you have not already done so, install `DBI':
|
|
|
|
ppm> install DBI
|
|
|
|
* If this succeeds, run the following command:
|
|
|
|
install ftp://ftp.de.uu.net/pub/CPAN/authors/id/JWIED/DBD-mysql-1.2212.x86.ppd
|
|
|
|
The above should work at least with ActiveState Perl Version 5.6.
|
|
|
|
If you can't get the above to work, you should instead install the
|
|
*MyODBC* driver and connect to MySQL server through ODBC:
|
|
|
|
use DBI;
|
|
$dbh= DBI->connect("DBI:ODBC:$dsn","$user","$password") ||
|
|
die "Got error $DBI::errstr when connecting to $dsn\n";
|
|
|
|
|
|
Installing the MySQL Perl Distribution on Windows
|
|
-------------------------------------------------
|
|
|
|
The MySQL Perl distribution contains `DBI', `DBD:MySQL' and `DBD:ODBC'.
|
|
|
|
* Get the Perl distribution for Windows from
|
|
`http://www.mysql.com/download.html'.
|
|
|
|
* Unzip the distribution in `C:' so that you get a `C:\PERL'
|
|
directory.
|
|
|
|
* Add the directory `C:\PERL\BIN' to your path.
|
|
|
|
* Add the directory `C:\PERL\BIN\MSWIN32-x86-thread' or
|
|
`C:\PERL\BIN\MSWIN32-x86' to your path.
|
|
|
|
* Test that `perl' works by executing `perl -v' in a DOS shell.
|
|
|
|
|
|
Problems Using the Perl `DBI'/`DBD' Interface
|
|
---------------------------------------------
|
|
|
|
If Perl reports that it can't find the `../mysql/mysql.so' module, then
|
|
the problem is probably that Perl can't locate the shared library
|
|
`libmysqlclient.so'.
|
|
|
|
You can fix this by any of the following methods:
|
|
|
|
* Compile the `Msql-Mysql-modules' distribution with `perl
|
|
Makefile.PL -static -config' rather than `perl Makefile.PL'.
|
|
|
|
* Copy `libmysqlclient.so' to the directory where your other shared
|
|
libraries are located (probably `/usr/lib' or `/lib').
|
|
|
|
* On Linux you can add the pathname of the directory where
|
|
`libmysqlclient.so' is located to the `/etc/ld.so.conf' file.
|
|
|
|
* Add the pathname of the directory where `libmysqlclient.so' is
|
|
located to the `LD_RUN_PATH' environment variable.
|
|
|
|
If you get the following errors from `DBD-mysql', you are probably
|
|
using `gcc' (or using an old binary compiled with `gcc'):
|
|
|
|
/usr/bin/perl: can't resolve symbol '__moddi3'
|
|
/usr/bin/perl: can't resolve symbol '__divdi3'
|
|
|
|
Add `-L/usr/lib/gcc-lib/... -lgcc' to the link command when the
|
|
`mysql.so' library gets built (check the output from `make' for
|
|
`mysql.so' when you compile the Perl client). The `-L' option should
|
|
specify the pathname of the directory where `libgcc.a' is located on
|
|
your system.
|
|
|
|
Another cause of this problem may be that Perl and MySQL aren't both
|
|
compiled with `gcc'. In this case, you can solve the mismatch by
|
|
compiling both with `gcc'.
|
|
|
|
If you get the following error from `Msql-Mysql-modules' when you run
|
|
the tests:
|
|
|
|
t/00base............install_driver(mysql) failed: Can't load '../blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql: ../blib/arch/auto/DBD/mysql/mysql.so: undefined symbol: uncompress at /usr/lib/perl5/5.00503/i586-linux/DynaLoader.pm line 169.
|
|
|
|
it means that you need to include the compression library, -lz, to the
|
|
link line. This can be doing the following change in the file
|
|
`lib/DBD/mysql/Install.pm':
|
|
|
|
$sysliblist .= " -lm";
|
|
|
|
to
|
|
|
|
$sysliblist .= " -lm -lz";
|
|
|
|
After this, you MUST run 'make realclean' and then proceed with the
|
|
installation from the beginning.
|
|
|
|
If you want to use the Perl module on a system that doesn't support
|
|
dynamic linking (like SCO) you can generate a static version of Perl
|
|
that includes `DBI' and `DBD-mysql'. The way this works is that you
|
|
generate a version of Perl with the `DBI' code linked in and install it
|
|
on top of your current Perl. Then you use that to build a version of
|
|
Perl that additionally has the `DBD' code linked in, and install that.
|
|
|
|
On SCO, you must have the following environment variables set:
|
|
|
|
shell> LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/progressive/lib
|
|
or
|
|
shell> LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:/usr/progressive/lib:/usr/skunk/lib
|
|
shell> LIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:/usr/progressive/lib:/usr/skunk/lib
|
|
shell> MANPATH=scohelp:/usr/man:/usr/local1/man:/usr/local/man:/usr/skunk/man:
|
|
|
|
First, create a Perl that includes a statically linked `DBI' by running
|
|
these commands in the directory where your `DBI' distribution is
|
|
located:
|
|
|
|
shell> perl Makefile.PL -static -config
|
|
shell> make
|
|
shell> make install
|
|
shell> make perl
|
|
|
|
Then you must install the new Perl. The output of `make perl' will
|
|
indicate the exact `make' command you will need to execute to perform
|
|
the installation. On SCO, this is `make -f Makefile.aperl inst_perl
|
|
MAP_TARGET=perl'.
|
|
|
|
Next, use the just-created Perl to create another Perl that also
|
|
includes a statically-linked `DBD::mysql' by running these commands in
|
|
the directory where your `Msql-Mysql-modules' distribution is located:
|
|
|
|
shell> perl Makefile.PL -static -config
|
|
shell> make
|
|
shell> make install
|
|
shell> make perl
|
|
|
|
Finally, you should install this new Perl. Again, the output of `make
|
|
perl' indicates the command to use.
|
|
|
|
|
|
Functions for Use with `GROUP BY' Clauses
|
|
=========================================
|
|
|
|
If you use a group function in a statement containing no `GROUP BY'
|
|
clause, it is equivalent to grouping on all rows.
|
|
|
|
`COUNT(expr)'
|
|
Returns a count of the number of non-`NULL' values in the rows
|
|
retrieved by a `SELECT' statement:
|
|
|
|
mysql> select student.student_name,COUNT(*)
|
|
from student,course
|
|
where student.student_id=course.student_id
|
|
GROUP BY student_name;
|
|
|
|
`COUNT(*)' is somewhat different in that it returns a count of the
|
|
number of rows retrieved, whether or not they contain `NULL'
|
|
values.
|
|
|
|
`COUNT(*)' is optimized to return very quickly if the `SELECT'
|
|
retrieves from one table, no other columns are retrieved, and
|
|
there is no `WHERE' clause. For example:
|
|
|
|
mysql> select COUNT(*) from student;
|
|
|
|
`COUNT(DISTINCT expr,[expr...])'
|
|
Returns a count of the number of different non-`NULL' values:
|
|
|
|
mysql> select COUNT(DISTINCT results) from student;
|
|
|
|
In MySQL you can get the number of distinct expression
|
|
combinations that don't contain NULL by giving a list of
|
|
expressions. In ANSI SQL you would have to do a concatenation of
|
|
all expressions inside `CODE(DISTINCT ..)'.
|
|
|
|
`AVG(expr)'
|
|
Returns the average value of `expr':
|
|
|
|
mysql> select student_name, AVG(test_score)
|
|
from student
|
|
GROUP BY student_name;
|
|
|
|
`MIN(expr)'
|
|
`MAX(expr)'
|
|
Returns the minimum or maximum value of `expr'. `MIN()' and
|
|
`MAX()' may take a string argument; in such cases they return the
|
|
minimum or maximum string value. *Note MySQL indexes::.
|
|
|
|
mysql> select student_name, MIN(test_score), MAX(test_score)
|
|
from student
|
|
GROUP BY student_name;
|
|
|
|
`SUM(expr)'
|
|
Returns the sum of `expr'. Note that if the return set has no
|
|
rows, it returns NULL!
|
|
|
|
`STD(expr)'
|
|
`STDDEV(expr)'
|
|
Returns the standard deviation of `expr'. This is an extension to
|
|
ANSI SQL. The `STDDEV()' form of this function is provided for
|
|
Oracle compatibility.
|
|
|
|
`BIT_OR(expr)'
|
|
Returns the bitwise `OR' of all bits in `expr'. The calculation is
|
|
performed with 64-bit (`BIGINT') precision.
|
|
|
|
`BIT_AND(expr)'
|
|
Returns the bitwise `AND' of all bits in `expr'. The calculation is
|
|
performed with 64-bit (`BIGINT') precision.
|
|
|
|
MySQL has extended the use of `GROUP BY'. You can use columns or
|
|
calculations in the `SELECT' expressions that don't appear in the
|
|
`GROUP BY' part. This stands for _any possible value for this group_.
|
|
You can use this to get better performance by avoiding sorting and
|
|
grouping on unnecessary items. For example, you don't need to group on
|
|
`customer.name' in the following query:
|
|
|
|
mysql> select order.custid,customer.name,max(payments)
|
|
from order,customer
|
|
where order.custid = customer.custid
|
|
GROUP BY order.custid;
|
|
|
|
In ANSI SQL, you would have to add `customer.name' to the `GROUP BY'
|
|
clause. In MySQL, the name is redundant if you don't run in ANSI mode.
|
|
|
|
*Don't use this feature* if the columns you omit from the `GROUP BY'
|
|
part aren't unique in the group! You will get unpredictable results.
|
|
|
|
In some cases, you can use `MIN()' and `MAX()' to obtain a specific
|
|
column value even if it isn't unique. The following gives the value of
|
|
`column' from the row containing the smallest value in the `sort'
|
|
column:
|
|
|
|
substr(MIN(concat(rpad(sort,6,' '),column)),7)
|
|
|
|
*Note example-Maximum-column-group-row::.
|
|
|
|
Note that if you are using MySQL Version 3.22 (or earlier) or if you
|
|
are trying to follow ANSI SQL, you can't use expressions in `GROUP BY'
|
|
or `ORDER BY' clauses. You can work around this limitation by using an
|
|
alias for the expression:
|
|
|
|
mysql> SELECT id,FLOOR(value/100) AS val FROM tbl_name
|
|
GROUP BY id,val ORDER BY val;
|
|
|
|
In MySQL Version 3.23 you can do:
|
|
|
|
mysql> SELECT id,FLOOR(value/100) FROM tbl_name ORDER BY RAND();
|
|
|