Merge branch 'V2MultiWear'
Conflicts: indra/newview/app_settings/settings.xml - Removed SinguMuteGestures, since it's EnableGestureSounds now. ~removed in llviewermessage.cpp as well.
This commit is contained in:
@@ -1,19 +0,0 @@
|
|||||||
ELFIO.h - ELF reader and producer.
|
|
||||||
Copyright (C) 2001 Serge Lamikhov-Center <to_serge@users.sourceforge.net>
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
The GNU Library GPL is available at http://www.gnu.org/copyleft/lesser.html
|
|
||||||
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
http://www.jclark.com/xml/copying.txt
|
|
||||||
|
|
||||||
Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
|
|
||||||
|
|
||||||
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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
||||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
||||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
||||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
http://xmlsoft.org/
|
|
||||||
http://www.opensource.org/licenses/mit-license.html
|
|
||||||
|
|
||||||
Open Source Initiative OSI - The MIT License:Licensing
|
|
||||||
Tue, 2006-10-31 04:56 . nelson
|
|
||||||
|
|
||||||
The MIT License
|
|
||||||
|
|
||||||
Copyright (c) <year> <copyright holders>
|
|
||||||
|
|
||||||
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
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,484 +0,0 @@
|
|||||||
|
|
||||||
GNU LIBRARY GENERAL PUBLIC LICENSE
|
|
||||||
Version 2, June 1991
|
|
||||||
|
|
||||||
|
|
||||||
Copyright (C) 1991 Free Software Foundation, Inc.
|
|
||||||
675 Mass Ave, Cambridge, MA 02139, 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 library GPL. It is
|
|
||||||
numbered 2 because it goes with version 2 of the ordinary GPL.]
|
|
||||||
|
|
||||||
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 Library General Public License, applies to some
|
|
||||||
specially designated Free Software Foundation software, and to any
|
|
||||||
other libraries whose authors decide to use it. You can use it for
|
|
||||||
your libraries, too.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom, not
|
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
|
||||||
have the freedom to distribute copies of free software (and charge for
|
|
||||||
this service if you wish), that you receive source code or can get it
|
|
||||||
if you want it, that you can change the software or use pieces of it
|
|
||||||
in new free programs; and that you know you can do these things.
|
|
||||||
|
|
||||||
To protect your rights, we need to make restrictions that forbid
|
|
||||||
anyone to deny you these rights or to ask you to surrender the rights.
|
|
||||||
These restrictions translate to certain responsibilities for you if
|
|
||||||
you distribute copies of the 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 a program 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.
|
|
||||||
|
|
||||||
Our method of protecting your rights has two steps: (1) copyright
|
|
||||||
the library, and (2) offer you this license which gives you legal
|
|
||||||
permission to copy, distribute and/or modify the library.
|
|
||||||
|
|
||||||
Also, for each distributor's protection, we want to make certain
|
|
||||||
that everyone understands that there is no warranty for this free
|
|
||||||
library. If the library is modified by someone else and passed on, we
|
|
||||||
want its recipients to know that what they have is not the original
|
|
||||||
version, so that any problems introduced by others will not reflect on
|
|
||||||
the original authors' reputations.
|
|
||||||
|
|
||||||
Finally, any free program is threatened constantly by software
|
|
||||||
patents. We wish to avoid the danger that companies distributing free
|
|
||||||
software will individually obtain patent licenses, thus in effect
|
|
||||||
transforming the program into proprietary software. To prevent this,
|
|
||||||
we have made it clear that any patent must be licensed for everyone's
|
|
||||||
free use or not licensed at all.
|
|
||||||
|
|
||||||
Most GNU software, including some libraries, is covered by the ordinary
|
|
||||||
GNU General Public License, which was designed for utility programs. This
|
|
||||||
license, the GNU Library General Public License, applies to certain
|
|
||||||
designated libraries. This license is quite different from the ordinary
|
|
||||||
one; be sure to read it in full, and don't assume that anything in it is
|
|
||||||
the same as in the ordinary license.
|
|
||||||
|
|
||||||
The reason we have a separate public license for some libraries is that
|
|
||||||
they blur the distinction we usually make between modifying or adding to a
|
|
||||||
program and simply using it. Linking a program with a library, without
|
|
||||||
changing the library, is in some sense simply using the library, and is
|
|
||||||
analogous to running a utility program or application program. However, in
|
|
||||||
a textual and legal sense, the linked executable is a combined work, a
|
|
||||||
derivative of the original library, and the ordinary General Public License
|
|
||||||
treats it as such.
|
|
||||||
|
|
||||||
Because of this blurred distinction, using the ordinary General
|
|
||||||
Public License for libraries did not effectively promote software
|
|
||||||
sharing, because most developers did not use the libraries. We
|
|
||||||
concluded that weaker conditions might promote sharing better.
|
|
||||||
|
|
||||||
However, unrestricted linking of non-free programs would deprive the
|
|
||||||
users of those programs of all benefit from the free status of the
|
|
||||||
libraries themselves. This Library General Public License is intended to
|
|
||||||
permit developers of non-free programs to use free libraries, while
|
|
||||||
preserving your freedom as a user of such programs to change the free
|
|
||||||
libraries that are incorporated in them. (We have not seen how to achieve
|
|
||||||
this as regards changes in header files, but we have achieved it as regards
|
|
||||||
changes in the actual functions of the Library.) The hope is that this
|
|
||||||
will lead to faster development of free libraries.
|
|
||||||
|
|
||||||
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, while the latter only
|
|
||||||
works together with the library.
|
|
||||||
|
|
||||||
Note that it is possible for a library to be covered by the ordinary
|
|
||||||
General Public License rather than by this special one.
|
|
||||||
|
|
||||||
GNU LIBRARY GENERAL PUBLIC LICENSE
|
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
||||||
|
|
||||||
0. This License Agreement applies to any software library which
|
|
||||||
contains a notice placed by the copyright holder or other authorized
|
|
||||||
party saying it may be distributed under the terms of this Library
|
|
||||||
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 compile 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) 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.
|
|
||||||
|
|
||||||
c) 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.
|
|
||||||
|
|
||||||
d) 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 source code distributed need not include anything that is normally
|
|
||||||
distributed (in either source or binary form) with the major
|
|
||||||
components (compiler, kernel, and so on) of the operating system on
|
|
||||||
which the executable runs, unless that component itself accompanies
|
|
||||||
the executable.
|
|
||||||
|
|
||||||
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 to
|
|
||||||
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 Library 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
|
|
||||||
|
|
||||||
Appendix: 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 Library 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
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
|
||||||
License along with this library; if not, write to the Free
|
|
||||||
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, 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,5 +0,0 @@
|
|||||||
The pristine version of Qt corresponding to this build is available at:
|
|
||||||
http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/qt-all-opensource-src-4.5.2.tar.bz2
|
|
||||||
|
|
||||||
The patches we applied to the above package to get this build are available at:
|
|
||||||
http://hg.secondlife.com/llqtwebkit/src/tip/qt_patches/
|
|
||||||
@@ -378,14 +378,7 @@
|
|||||||
<boolean>true</boolean>
|
<boolean>true</boolean>
|
||||||
</map>
|
</map>
|
||||||
|
|
||||||
<key>ParcelMediaURLFilter</key>
|
|
||||||
<map>
|
|
||||||
<key>flavor</key>
|
|
||||||
<string>llsd</string>
|
|
||||||
<key>trusted-sender</key>
|
|
||||||
<boolean>false</boolean>
|
|
||||||
</map>
|
|
||||||
|
|
||||||
<key>ParcelNavigateMedia</key>
|
<key>ParcelNavigateMedia</key>
|
||||||
<map>
|
<map>
|
||||||
<key>flavor</key>
|
<key>flavor</key>
|
||||||
@@ -572,6 +565,14 @@
|
|||||||
<boolean>false</boolean>
|
<boolean>false</boolean>
|
||||||
</map>
|
</map>
|
||||||
|
|
||||||
|
<key>ObjectPhysicsProperties</key>
|
||||||
|
<map>
|
||||||
|
<key>flavor</key>
|
||||||
|
<string>llsd</string>
|
||||||
|
<key>trusted-sender</key>
|
||||||
|
<boolean>true</boolean>
|
||||||
|
</map>
|
||||||
|
|
||||||
<!-- Server to client -->
|
<!-- Server to client -->
|
||||||
<key>DisplayNameUpdate</key>
|
<key>DisplayNameUpdate</key>
|
||||||
<map>
|
<map>
|
||||||
|
|||||||
@@ -30,11 +30,11 @@ include(BuildVersion)
|
|||||||
|
|
||||||
include(UnixInstall)
|
include(UnixInstall)
|
||||||
|
|
||||||
set (GCC_DISABLE_FATAL_WARNINGS TRUE)
|
set (DISABLE_FATAL_WARNINGS TRUE)
|
||||||
|
|
||||||
if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
|
if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
|
||||||
set(CMAKE_BUILD_TYPE ReleaseSSE2 CACHE STRING
|
set(CMAKE_BUILD_TYPE Release CACHE STRING
|
||||||
"Build type. One of: Debug Release ReleaseSSE2 RelWithDebInfo" FORCE)
|
"Build type. One of: Debug Release RelWithDebInfo" FORCE)
|
||||||
endif (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
|
endif (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
|
||||||
|
|
||||||
# Create a 'prepare' target in which to perform setup actions. This
|
# Create a 'prepare' target in which to perform setup actions. This
|
||||||
@@ -77,6 +77,7 @@ if (VIEWER)
|
|||||||
add_subdirectory(${LIBS_OPEN_PREFIX}llcrashlogger)
|
add_subdirectory(${LIBS_OPEN_PREFIX}llcrashlogger)
|
||||||
add_subdirectory(${LIBS_OPEN_PREFIX}llplugin)
|
add_subdirectory(${LIBS_OPEN_PREFIX}llplugin)
|
||||||
add_subdirectory(${LIBS_OPEN_PREFIX}llui)
|
add_subdirectory(${LIBS_OPEN_PREFIX}llui)
|
||||||
|
add_subdirectory(${LIBS_OPEN_PREFIX}llxuixml)
|
||||||
|
|
||||||
# viewer plugins directory
|
# viewer plugins directory
|
||||||
add_subdirectory(${LIBS_OPEN_PREFIX}plugins)
|
add_subdirectory(${LIBS_OPEN_PREFIX}plugins)
|
||||||
|
|||||||
@@ -12,17 +12,12 @@ set(CMAKE_CXX_FLAGS_RELEASE
|
|||||||
"-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=1 -DNDEBUG")
|
"-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=1 -DNDEBUG")
|
||||||
set(CMAKE_C_FLAGS_RELEASE
|
set(CMAKE_C_FLAGS_RELEASE
|
||||||
"${CMAKE_CXX_FLAGS_RELEASE}")
|
"${CMAKE_CXX_FLAGS_RELEASE}")
|
||||||
set(CMAKE_CXX_FLAGS_RELEASESSE2
|
|
||||||
"-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=1 -DNDEBUG")
|
|
||||||
#llimage now requires this (?)
|
|
||||||
set(CMAKE_C_FLAGS_RELEASESSE2
|
|
||||||
"${CMAKE_CXX_FLAGS_RELEASESSE2}")
|
|
||||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
||||||
"-DLL_RELEASE=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=0 -DNDEBUG -DLL_RELEASE_WITH_DEBUG_INFO=1")
|
"-DLL_RELEASE=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=0 -DNDEBUG -DLL_RELEASE_WITH_DEBUG_INFO=1")
|
||||||
|
|
||||||
# Don't bother with a MinSizeRel build.
|
# Don't bother with a MinSizeRel build.
|
||||||
|
|
||||||
set(CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Release;ReleaseSSE2;Debug" CACHE STRING
|
set(CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Release;Debug" CACHE STRING
|
||||||
"Supported build types." FORCE)
|
"Supported build types." FORCE)
|
||||||
|
|
||||||
# Platform-specific compilation flags.
|
# Platform-specific compilation flags.
|
||||||
@@ -40,23 +35,17 @@ if (WINDOWS)
|
|||||||
"${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD /MP /arch:SSE2"
|
"${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD /MP /arch:SSE2"
|
||||||
CACHE STRING "C++ compiler release-with-debug options" FORCE)
|
CACHE STRING "C++ compiler release-with-debug options" FORCE)
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE
|
set(CMAKE_CXX_FLAGS_RELEASE
|
||||||
"${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /arch:SSE /fp:fast"
|
"${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /arch:SSE2 /fp:fast"
|
||||||
CACHE STRING "C++ compiler release options" FORCE)
|
CACHE STRING "C++ compiler release options" FORCE)
|
||||||
set(CMAKE_C_FLAGS_RELEASE
|
set(CMAKE_C_FLAGS_RELEASE
|
||||||
"${CMAKE_C_FLAGS_RELEASE} ${LL_C_FLAGS} /O2 /Zi /MD /MP /arch:SSE /fp:fast"
|
"${CMAKE_C_FLAGS_RELEASE} ${LL_C_FLAGS} /O2 /Zi /MD /MP /arch:SSE2 /fp:fast"
|
||||||
CACHE STRING "C compiler release options" FORCE)
|
CACHE STRING "C compiler release options" FORCE)
|
||||||
set(CMAKE_CXX_FLAGS_RELEASESSE2
|
|
||||||
"${CMAKE_CXX_FLAGS_RELEASESSE2} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /arch:SSE2 /fp:fast"
|
|
||||||
CACHE STRING "C++ compiler release-SSE2 options" FORCE)
|
|
||||||
set(CMAKE_C_FLAGS_RELEASESSE2
|
|
||||||
"${CMAKE_C_FLAGS_RELEASESSE2} ${LL_C_FLAGS} /O2 /Zi /MD /MP /arch:SSE2 /fp:fast"
|
|
||||||
CACHE STRING "C compiler release-SSE2 options" FORCE)
|
|
||||||
|
|
||||||
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LARGEADDRESSAWARE")
|
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LARGEADDRESSAWARE")
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD_LIBRARIES "")
|
set(CMAKE_CXX_STANDARD_LIBRARIES "")
|
||||||
set(CMAKE_C_STANDARD_LIBRARIES "")
|
set(CMAKE_C_STANDARD_LIBRARIES "")
|
||||||
|
|
||||||
add_definitions(
|
add_definitions(
|
||||||
/DLL_WINDOWS=1
|
/DLL_WINDOWS=1
|
||||||
/DUNICODE
|
/DUNICODE
|
||||||
@@ -78,38 +67,35 @@ if (WINDOWS)
|
|||||||
set(CMAKE_CXX_FLAGS_RELEASE
|
set(CMAKE_CXX_FLAGS_RELEASE
|
||||||
"${CMAKE_CXX_FLAGS_RELEASE} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
|
"${CMAKE_CXX_FLAGS_RELEASE} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
|
||||||
CACHE STRING "C++ compiler release options" FORCE)
|
CACHE STRING "C++ compiler release options" FORCE)
|
||||||
set(CMAKE_CXX_FLAGS_RELEASESSE2
|
set(CMAKE_C_FLAGS_RELEASE
|
||||||
"${CMAKE_CXX_FLAGS_RELEASESSE2} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
|
"${CMAKE_CXX_FLAGS_RELEASE} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
|
||||||
CACHE STRING "C++ compiler release-SSE2 options" FORCE)
|
CACHE STRING "C compiler release options" FORCE)
|
||||||
set(CMAKE_C_FLAGS_RELEASESSE2
|
|
||||||
"${CMAKE_CXX_FLAGS_RELEASESSE2} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
|
|
||||||
CACHE STRING "C compiler release-SSE2 options" FORCE)
|
|
||||||
add_definitions(
|
add_definitions(
|
||||||
/Zc:wchar_t-
|
/Zc:wchar_t-
|
||||||
)
|
)
|
||||||
endif (MSVC80 OR MSVC90 OR MSVC10)
|
endif (MSVC80 OR MSVC90 OR MSVC10)
|
||||||
|
|
||||||
# Are we using the crummy Visual Studio KDU build workaround?
|
# Are we using the crummy Visual Studio KDU build workaround?
|
||||||
if (NOT VS_DISABLE_FATAL_WARNINGS)
|
if (NOT DISABLE_FATAL_WARNINGS)
|
||||||
add_definitions(/WX)
|
add_definitions(/WX)
|
||||||
endif (NOT VS_DISABLE_FATAL_WARNINGS)
|
endif (NOT DISABLE_FATAL_WARNINGS)
|
||||||
|
|
||||||
# Various libs are compiler specific, generate some variables here we can just use
|
# Various libs are compiler specific, generate some variables here we can just use
|
||||||
# when we require them instead of reimplementing the test each time.
|
# when we require them instead of reimplementing the test each time.
|
||||||
|
|
||||||
if (MSVC71)
|
if (MSVC71)
|
||||||
set(MSVC_DIR 7.1)
|
set(MSVC_DIR 7.1)
|
||||||
set(MSVC_SUFFIX 71)
|
set(MSVC_SUFFIX 71)
|
||||||
elseif (MSVC80)
|
elseif (MSVC80)
|
||||||
set(MSVC_DIR 8.0)
|
set(MSVC_DIR 8.0)
|
||||||
set(MSVC_SUFFIX 80)
|
set(MSVC_SUFFIX 80)
|
||||||
elseif (MSVC90)
|
elseif (MSVC90)
|
||||||
set(MSVC_DIR 9.0)
|
set(MSVC_DIR 9.0)
|
||||||
set(MSVC_SUFFIX 90)
|
set(MSVC_SUFFIX 90)
|
||||||
elseif (MSVC10)
|
elseif (MSVC10)
|
||||||
set(MSVC_DIR 10.0)
|
set(MSVC_DIR 10.0)
|
||||||
set(MSVC_SUFFIX 100)
|
set(MSVC_SUFFIX 100)
|
||||||
endif (MSVC71)
|
endif (MSVC71)
|
||||||
|
|
||||||
if (MSVC10)
|
if (MSVC10)
|
||||||
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO")
|
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO")
|
||||||
@@ -125,103 +111,157 @@ set (GCC_EXTRA_OPTIMIZATIONS "-ffast-math")
|
|||||||
if (LINUX)
|
if (LINUX)
|
||||||
set(CMAKE_SKIP_RPATH TRUE)
|
set(CMAKE_SKIP_RPATH TRUE)
|
||||||
|
|
||||||
# Here's a giant hack for Fedora 8, where we can't use
|
|
||||||
# _FORTIFY_SOURCE if we're using a compiler older than gcc 4.1.
|
|
||||||
|
|
||||||
find_program(GXX g++)
|
|
||||||
mark_as_advanced(GXX)
|
|
||||||
|
|
||||||
if (GXX)
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${GXX} --version
|
|
||||||
COMMAND sed "s/^[gc+ ]*//"
|
|
||||||
COMMAND head -1
|
|
||||||
OUTPUT_VARIABLE GXX_VERSION
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
else (GXX)
|
|
||||||
set(GXX_VERSION x)
|
|
||||||
endif (GXX)
|
|
||||||
|
|
||||||
# The quoting hack here is necessary in case we're using distcc or
|
|
||||||
# ccache as our compiler. CMake doesn't pass the command line
|
|
||||||
# through the shell by default, so we end up trying to run "distcc"
|
|
||||||
# " g++" - notice the leading space. Ugh.
|
|
||||||
|
|
||||||
execute_process(
|
|
||||||
COMMAND sh -c "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} --version"
|
|
||||||
COMMAND sed "s/^[gc+ ]*//"
|
|
||||||
COMMAND head -1
|
|
||||||
OUTPUT_VARIABLE CXX_VERSION
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
||||||
|
|
||||||
if (${GXX_VERSION} STREQUAL ${CXX_VERSION})
|
|
||||||
add_definitions(-D_FORTIFY_SOURCE=2)
|
|
||||||
else (${GXX_VERSION} STREQUAL ${CXX_VERSION})
|
|
||||||
if (NOT ${GXX_VERSION} MATCHES " 4.1.*Red Hat")
|
|
||||||
add_definitions(-D_FORTIFY_SOURCE=2)
|
|
||||||
endif (NOT ${GXX_VERSION} MATCHES " 4.1.*Red Hat")
|
|
||||||
endif (${GXX_VERSION} STREQUAL ${CXX_VERSION})
|
|
||||||
|
|
||||||
#Lets actually get a numerical version of gxx's version
|
|
||||||
STRING(REGEX REPLACE ".* ([0-9])\\.([0-9])\\.([0-9]).*" "\\1\\2\\3" CXX_VERSION ${CXX_VERSION})
|
|
||||||
|
|
||||||
#gcc 4.3 and above don't like the LL boost
|
|
||||||
if(${CXX_VERSION} GREATER 429)
|
|
||||||
add_definitions(-Wno-parentheses)
|
|
||||||
endif (${CXX_VERSION} GREATER 429)
|
|
||||||
|
|
||||||
#gcc 4.6 has a new spammy warning
|
|
||||||
if(NOT ${CXX_VERSION} LESS 460)
|
|
||||||
add_definitions(-Wno-unused-but-set-variable)
|
|
||||||
endif (NOT ${CXX_VERSION} LESS 460)
|
|
||||||
|
|
||||||
# End of hacks.
|
|
||||||
|
|
||||||
add_definitions(
|
add_definitions(
|
||||||
-DLL_LINUX=1
|
-DLL_LINUX=1
|
||||||
|
-DAPPID=secondlife
|
||||||
-D_REENTRANT
|
-D_REENTRANT
|
||||||
-fexceptions
|
-fexceptions
|
||||||
-fno-math-errno
|
-fno-math-errno
|
||||||
-fno-strict-aliasing
|
-fno-strict-aliasing
|
||||||
-fsigned-char
|
-fsigned-char
|
||||||
|
-fvisibility=hidden
|
||||||
-g
|
-g
|
||||||
-pthread
|
-pthread
|
||||||
)
|
)
|
||||||
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
|
# Don't catch SIGCHLD in our base application class for the viewer
|
||||||
|
# some of our 3rd party libs may need their *own* SIGCHLD handler to work. Sigh!
|
||||||
|
# The viewer doesn't need to catch SIGCHLD anyway.
|
||||||
|
add_definitions(-DLL_IGNORE_SIGCHLD)
|
||||||
|
|
||||||
|
if(${CMAKE_C_COMPILER} MATCHES "gcc*")
|
||||||
|
find_program(GXX g++)
|
||||||
|
mark_as_advanced(GXX)
|
||||||
|
|
||||||
|
if (GXX)
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${GXX} --version
|
||||||
|
COMMAND sed "s/^[gc+ ]*//"
|
||||||
|
COMMAND head -1
|
||||||
|
OUTPUT_VARIABLE GXX_VERSION
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
else (GXX)
|
||||||
|
set(GXX_VERSION x)
|
||||||
|
endif (GXX)
|
||||||
|
|
||||||
|
# The quoting hack here is necessary in case we're using distcc or
|
||||||
|
# ccache as our compiler. CMake doesn't pass the command line
|
||||||
|
# through the shell by default, so we end up trying to run "distcc"
|
||||||
|
# " g++" - notice the leading space. Ugh.
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND sh -c "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} --version"
|
||||||
|
COMMAND sed "s/^[gc+ ]*//"
|
||||||
|
COMMAND head -1
|
||||||
|
OUTPUT_VARIABLE CXX_VERSION
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
|
||||||
|
# Here's a giant hack for Fedora 8, where we can't use
|
||||||
|
# _FORTIFY_SOURCE if we're using a compiler older than gcc 4.1.
|
||||||
|
if (${GXX_VERSION} STREQUAL ${CXX_VERSION})
|
||||||
|
add_definitions(-D_FORTIFY_SOURCE=2)
|
||||||
|
else (${GXX_VERSION} STREQUAL ${CXX_VERSION})
|
||||||
|
if (NOT ${GXX_VERSION} MATCHES " 4.1.*Red Hat")
|
||||||
|
add_definitions(-D_FORTIFY_SOURCE=2)
|
||||||
|
endif (NOT ${GXX_VERSION} MATCHES " 4.1.*Red Hat")
|
||||||
|
endif (${GXX_VERSION} STREQUAL ${CXX_VERSION})
|
||||||
|
|
||||||
|
#Lets actually get a numerical version of gxx's version
|
||||||
|
STRING(REGEX REPLACE ".* ([0-9])\\.([0-9])\\.([0-9]).*" "\\1\\2\\3" CXX_VERSION ${CXX_VERSION})
|
||||||
|
|
||||||
|
#gcc 4.3 and above doesn't like the LL boost
|
||||||
|
if(${CXX_VERSION} GREATER 429)
|
||||||
|
add_definitions(-Wno-parentheses)
|
||||||
|
endif (${CXX_VERSION} GREATER 429)
|
||||||
|
|
||||||
|
#gcc 4.6 has a new spammy warning
|
||||||
|
if(NOT ${CXX_VERSION} LESS 460)
|
||||||
|
add_definitions(-Wno-unused-but-set-variable)
|
||||||
|
endif (NOT ${CXX_VERSION} LESS 460)
|
||||||
|
|
||||||
|
# End of hacks.
|
||||||
|
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
|
||||||
|
|
||||||
add_definitions(-DAPPID=secondlife)
|
|
||||||
add_definitions(-fvisibility=hidden)
|
|
||||||
# don't catch SIGCHLD in our base application class for the viewer - some of our 3rd party libs may need their *own* SIGCHLD handler to work. Sigh! The viewer doesn't need to catch SIGCHLD anyway.
|
|
||||||
add_definitions(-DLL_IGNORE_SIGCHLD)
|
|
||||||
if (NOT STANDALONE)
|
|
||||||
# this stops us requiring a really recent glibc at runtime
|
|
||||||
add_definitions(-fno-stack-protector)
|
|
||||||
endif (NOT STANDALONE)
|
|
||||||
if (${ARCH} STREQUAL "x86_64")
|
|
||||||
add_definitions(-DLINUX64=1 -pipe)
|
|
||||||
set(CMAKE_CXX_FLAGS_RELEASESSE2 "${CMAKE_CXX_FLAGS_RELEASESSE2} -fomit-frame-pointer -mmmx -msse -mfpmath=sse -msse2 -ffast-math -ftree-vectorize -fweb -fexpensive-optimizations -frename-registers")
|
|
||||||
set(CMAKE_C_FLAGS_RELEASESSE2 "${CMAKE_C_FLAGS_RELEASESSE2} -fomit-frame-pointer -mmmx -msse -mfpmath=sse -msse2 -ffast-math -ftree-vectorize -fweb -fexpensive-optimizations -frename-registers")
|
|
||||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -fomit-frame-pointer -mmmx -msse -mfpmath=sse -msse2 -ffast-math -ftree-vectorize -fweb -fexpensive-optimizations -frename-registers")
|
|
||||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -fomit-frame-pointer -mmmx -msse -mfpmath=sse -msse2 -ffast-math -ftree-vectorize -fweb -fexpensive-optimizations -frename-registers")
|
|
||||||
else (${ARCH} STREQUAL "x86_64")
|
|
||||||
if (NOT STANDALONE)
|
if (NOT STANDALONE)
|
||||||
set(MARCH_FLAG " -march=pentium4")
|
# this stops us requiring a really recent glibc at runtime
|
||||||
|
add_definitions(-fno-stack-protector)
|
||||||
endif (NOT STANDALONE)
|
endif (NOT STANDALONE)
|
||||||
set(CMAKE_CXX_FLAGS_RELEASESSE2 "${CMAKE_CXX_FLAGS_RELEASESSE2}${MARCH_FLAG} -mfpmath=sse,387 -msse2 ${GCC_EXTRA_OPTIMIZATIONS}")
|
if (${ARCH} STREQUAL "x86_64")
|
||||||
set(CMAKE_C_FLAGS_RELEASESSE2 "${CMAKE_C_FLAGS_RELEASESSE2}${MARCH_FLAG} -mfpmath=sse,387 -msse2 ${GCC_EXTRA_OPTIMIZATIONS}")
|
add_definitions(-DLINUX64=1 -pipe)
|
||||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}${MARCH_FLAG} -mfpmath=sse,387 -msse2 ${GCC_EXTRA_OPTIMIZATIONS}")
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fomit-frame-pointer -mmmx -msse -mfpmath=sse -msse2 -ffast-math -ftree-vectorize -fweb -fexpensive-optimizations -frename-registers")
|
||||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}${MARCH_FLAG} -mfpmath=sse,387 -msse2 ${GCC_EXTRA_OPTIMIZATIONS}")
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -fomit-frame-pointer -mmmx -msse -mfpmath=sse -msse2 -ffast-math -ftree-vectorize -fweb -fexpensive-optimizations -frename-registers")
|
||||||
endif (${ARCH} STREQUAL "x86_64")
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -fomit-frame-pointer -mmmx -msse -mfpmath=sse -msse2 -ffast-math -ftree-vectorize -fweb -fexpensive-optimizations -frename-registers")
|
||||||
|
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -fomit-frame-pointer -mmmx -msse -mfpmath=sse -msse2 -ffast-math -ftree-vectorize -fweb -fexpensive-optimizations -frename-registers")
|
||||||
|
else (${ARCH} STREQUAL "x86_64")
|
||||||
|
if (NOT STANDALONE)
|
||||||
|
set(MARCH_FLAG " -march=pentium4")
|
||||||
|
endif (NOT STANDALONE)
|
||||||
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}${MARCH_FLAG} -fno-inline -msse2")
|
||||||
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}${MARCH_FLAG} -fno-inline -msse2")
|
||||||
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}${MARCH_FLAG} -mfpmath=sse,387 -msse2 ${GCC_EXTRA_OPTIMIZATIONS}")
|
||||||
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}${MARCH_FLAG} -mfpmath=sse,387 -msse2 ${GCC_EXTRA_OPTIMIZATIONS}")
|
||||||
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}${MARCH_FLAG} -mfpmath=sse,387 -msse2 ${GCC_EXTRA_OPTIMIZATIONS}")
|
||||||
|
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}${MARCH_FLAG} -mfpmath=sse,387 -msse2 ${GCC_EXTRA_OPTIMIZATIONS}")
|
||||||
|
endif (${ARCH} STREQUAL "x86_64")
|
||||||
|
elseif(${CMAKE_C_COMPILER} MATCHES "clang*")
|
||||||
|
find_program(CLANG clang)
|
||||||
|
mark_as_advanced(CLANG)
|
||||||
|
|
||||||
|
find_program(CLANGXX clang++)
|
||||||
|
mark_as_advanced(CLANGXX)
|
||||||
|
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "-fno-inline ${CMAKE_CXX_FLAGS_DEBUG} -msse2")
|
add_definitions(
|
||||||
|
-D_FORTIFY_SOURCE=2
|
||||||
|
)
|
||||||
|
|
||||||
|
if (NOT STANDALONE)
|
||||||
|
# this stops us requiring a really recent glibc at runtime
|
||||||
|
add_definitions(-fno-stack-protector)
|
||||||
|
endif (NOT STANDALONE)
|
||||||
|
|
||||||
|
if (NOT STANDALONE)
|
||||||
|
set(MARCH_FLAG " -march=pentium4")
|
||||||
|
endif (NOT STANDALONE)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}${MARCH_FLAG} -fno-inline -msse2")
|
||||||
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}${MARCH_FLAG} -fno-inline -msse2")
|
||||||
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}${MARCH_FLAG} -msse2")
|
||||||
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}${MARCH_FLAG} -msse2")
|
||||||
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}${MARCH_FLAG} -msse2")
|
||||||
|
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}${MARCH_FLAG} -msse2")
|
||||||
|
elseif(${CMAKE_C_COMPILER} MATCHES "icc*" AND ${CMAKE_CXX_COMPILER} MATCHES "icpc*")
|
||||||
|
find_program(ICC icc)
|
||||||
|
mark_as_advanced(ICC)
|
||||||
|
|
||||||
|
add_definitions(
|
||||||
|
-D_FORTIFY_SOURCE=2
|
||||||
|
)
|
||||||
|
|
||||||
|
if (NOT STANDALONE)
|
||||||
|
# this stops us requiring a really recent glibc at runtime
|
||||||
|
add_definitions(-fno-stack-protector)
|
||||||
|
endif (NOT STANDALONE)
|
||||||
|
|
||||||
|
if (NOT STANDALONE)
|
||||||
|
set(MARCH_FLAG " -axsse4.1 -msse2")
|
||||||
|
endif (NOT STANDALONE)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}${MARCH_FLAG} -fno-inline-functions")
|
||||||
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}${MARCH_FLAG} -fno-inline-functions")
|
||||||
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}${MARCH_FLAG} -parallel -fp-model fast=1")
|
||||||
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}${MARCH_FLAG} -parallel -fp-model fast=1")
|
||||||
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}${MARCH_FLAG} -parallel -fp-model fast=1")
|
||||||
|
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}${MARCH_FLAG} -parallel -fp-model fast=1")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CMAKE_CXX_FLAGS_DEBUG "-O0 ${CMAKE_CXX_FLAGS_DEBUG}")
|
||||||
|
set(CMAKE_C_FLAGS_DEBUG "-O0 ${CMAKE_CXX_FLAGS_DEBUG}")
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "-O3 ${CMAKE_CXX_FLAGS_RELEASE}")
|
set(CMAKE_CXX_FLAGS_RELEASE "-O3 ${CMAKE_CXX_FLAGS_RELEASE}")
|
||||||
set(CMAKE_C_FLAGS_RELEASE "-O3 ${CMAKE_C_FLAGS_RELEASE}")
|
set(CMAKE_C_FLAGS_RELEASE "-O3 ${CMAKE_C_FLAGS_RELEASE}")
|
||||||
set(CMAKE_CXX_FLAGS_RELEASESSE2 "-O3 ${CMAKE_CXX_FLAGS_RELEASESSE2}")
|
|
||||||
set(CMAKE_C_FLAGS_RELEASESSE2 "-O3 ${CMAKE_C_FLAGS_RELEASESSE2}")
|
|
||||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
|
||||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
|
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
|
||||||
endif (LINUX)
|
endif (LINUX)
|
||||||
|
|
||||||
|
|
||||||
@@ -233,27 +273,32 @@ if (DARWIN)
|
|||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mlong-branch")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mlong-branch")
|
||||||
# NOTE: it's critical that the optimization flag is put in front.
|
# NOTE: it's critical that the optimization flag is put in front.
|
||||||
# NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered.
|
# NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered.
|
||||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}")
|
|
||||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}")
|
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}")
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}")
|
||||||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}")
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}")
|
||||||
set(CMAKE_CXX_FLAGS_RELEASESSE2 "${CMAKE_CXX_FLAGS_RELEASESSE2} -O3 -msse2 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}")
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}")
|
||||||
set(CMAKE_C_FLAGS_RELEASESSE2 "${CMAKE_C_FLAGS_RELEASESSE2} -O3 -msse2 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}")
|
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}")
|
||||||
endif (DARWIN)
|
endif (DARWIN)
|
||||||
|
|
||||||
|
|
||||||
if (LINUX OR DARWIN)
|
if (LINUX OR DARWIN)
|
||||||
set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-trigraphs")
|
if(${CMAKE_C_COMPILER} MATCHES "gcc*")
|
||||||
|
set(UNIX_WARNINGS "-Wall -Wno-sign-compare -Wno-trigraphs")
|
||||||
if (NOT GCC_DISABLE_FATAL_WARNINGS)
|
set(UNIX_CXX_WARNINGS "${UNIX_WARNINGS} -Wno-reorder -Wno-non-virtual-dtor -Woverloaded-virtual")
|
||||||
set(GCC_WARNINGS "${GCC_WARNINGS} -Werror")
|
elseif(${CMAKE_C_COMPILER} MATCHES "clang*")
|
||||||
endif (NOT GCC_DISABLE_FATAL_WARNINGS)
|
set(UNIX_WARNINGS "-Wall -Wno-sign-compare -Wno-trigraphs -Wno-tautological-compare -Wno-char-subscripts -Wno-gnu -Wno-logical-op-parentheses -Wno-non-virtual-dtor ")
|
||||||
|
set(UNIX_WARNINGS "${UNIX_WARNINGS} -Woverloaded-virtual -Wno-parentheses-equality -Wno-reorder -Wno-unused-function -Wno-unused-value -Wno-unused-variable")
|
||||||
set(GCC_CXX_WARNINGS "${GCC_WARNINGS} -Wno-reorder -Wno-non-virtual-dtor -Woverloaded-virtual")
|
set(UNIX_CXX_WARNINGS "${UNIX_WARNINGS}")
|
||||||
|
elseif(${CMAKE_C_COMPILER} MATCHES "icc")
|
||||||
set(CMAKE_C_FLAGS "${GCC_WARNINGS} ${CMAKE_C_FLAGS}")
|
set(UNIX_WARNINGS "-wd327 -wd597 -wd858")
|
||||||
set(CMAKE_CXX_FLAGS "${GCC_CXX_WARNINGS} ${CMAKE_CXX_FLAGS}")
|
set(UNIX_CXX_WARNINGS "${UNIX_WARNINGS}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (NOT DISABLE_FATAL_WARNINGS)
|
||||||
|
set(UNIX_WARNINGS "${UNIX_WARNINGS} -Werror")
|
||||||
|
endif (NOT DISABLE_FATAL_WARNINGS)
|
||||||
|
|
||||||
|
set(CMAKE_C_FLAGS "${UNIX_WARNINGS} ${CMAKE_C_FLAGS}")
|
||||||
|
set(CMAKE_CXX_FLAGS "${UNIX_CXX_WARNINGS} ${CMAKE_CXX_FLAGS}")
|
||||||
if (WORD_SIZE EQUAL 32)
|
if (WORD_SIZE EQUAL 32)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
|
||||||
@@ -279,20 +324,25 @@ else (STANDALONE)
|
|||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|
||||||
if(1 EQUAL 1)
|
if(1 EQUAL 1)
|
||||||
add_definitions(-DOPENSIM_RULES=1)
|
add_definitions(-DOPENSIM_RULES=1)
|
||||||
add_definitions(-DMESH_ENABLED=1)
|
add_definitions(-DMESH_ENABLED=1)
|
||||||
|
add_definitions(-DENABLE_CLASSIC_CLOUDS=1)
|
||||||
|
if (NOT "$ENV{SHY_MOD}" STREQUAL "")
|
||||||
|
add_definitions(-DSHY_MOD=1)
|
||||||
|
endif (NOT "$ENV{SHY_MOD}" STREQUAL "")
|
||||||
endif(1 EQUAL 1)
|
endif(1 EQUAL 1)
|
||||||
|
|
||||||
SET( CMAKE_EXE_LINKER_FLAGS_RELEASESSE2
|
SET( CMAKE_EXE_LINKER_FLAGS_RELEASE
|
||||||
"${CMAKE_EXE_LINKER_FLAGS_RELEASE}" CACHE STRING
|
"${CMAKE_EXE_LINKER_FLAGS_RELEASE}" CACHE STRING
|
||||||
"Flags used for linking binaries under SSE2 build."
|
"Flags used for linking binaries under build."
|
||||||
FORCE )
|
FORCE )
|
||||||
SET( CMAKE_SHARED_LINKER_FLAGS_RELEASESSE2
|
SET( CMAKE_SHARED_LINKER_FLAGS_RELEASE
|
||||||
"${CMAKE_SHARED_LINKER_FLAGS_RELEASE}" CACHE STRING
|
"${CMAKE_SHARED_LINKER_FLAGS_RELEASE}" CACHE STRING
|
||||||
"Flags used by the shared libraries linker under SSE2 build."
|
"Flags used by the shared libraries linker under build."
|
||||||
FORCE )
|
FORCE )
|
||||||
MARK_AS_ADVANCED(
|
MARK_AS_ADVANCED(
|
||||||
CMAKE_CXX_FLAGS_RELEASESSE2
|
CMAKE_CXX_FLAGS_RELEASE
|
||||||
CMAKE_C_FLAGS_RELEASESSE2
|
CMAKE_C_FLAGS_RELEASE
|
||||||
CMAKE_EXE_LINKER_FLAGS_RELEASESSE2
|
CMAKE_EXE_LINKER_FLAGS_RELEASE
|
||||||
CMAKE_SHARED_LINKER_FLAGS_RELEASESSE2 )
|
CMAKE_SHARED_LINKER_FLAGS_RELEASE
|
||||||
|
)
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ if (STANDALONE)
|
|||||||
pkg_check_modules(VORBISFILE REQUIRED vorbisfile)
|
pkg_check_modules(VORBISFILE REQUIRED vorbisfile)
|
||||||
else (STANDALONE)
|
else (STANDALONE)
|
||||||
use_prebuilt_binary(ogg-vorbis)
|
use_prebuilt_binary(ogg-vorbis)
|
||||||
set(VORBIS_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
|
set(VORBIS_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
set(VORBISENC_INCLUDE_DIRS ${VORBIS_INCLUDE_DIRS})
|
set(VORBISENC_INCLUDE_DIRS ${VORBIS_INCLUDE_DIRS})
|
||||||
set(VORBISFILE_INCLUDE_DIRS ${VORBIS_INCLUDE_DIRS})
|
set(VORBISFILE_INCLUDE_DIRS ${VORBIS_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# -*- cmake -*-
|
include(Prebuilt)
|
||||||
|
|
||||||
set(DB_FIND_QUIETLY ON)
|
set(DB_FIND_QUIETLY ON)
|
||||||
set(DB_FIND_REQUIRED ON)
|
set(DB_FIND_REQUIRED ON)
|
||||||
@@ -8,9 +8,10 @@ if (STANDALONE)
|
|||||||
else (STANDALONE)
|
else (STANDALONE)
|
||||||
if (LINUX)
|
if (LINUX)
|
||||||
# Need to add dependency pthread explicitely to support ld.gold.
|
# Need to add dependency pthread explicitely to support ld.gold.
|
||||||
set(DB_LIBRARIES db-4.2 pthread)
|
use_prebuilt_binary(db)
|
||||||
|
set(DB_LIBRARIES db-5.1 pthread)
|
||||||
else (LINUX)
|
else (LINUX)
|
||||||
set(DB_LIBRARIES db-4.2)
|
set(DB_LIBRARIES db-4.2)
|
||||||
endif (LINUX)
|
endif (LINUX)
|
||||||
set(DB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
|
set(DB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ if (STANDALONE)
|
|||||||
set(BOOST_SYSTEM_LIBRARY boost_system-mt)
|
set(BOOST_SYSTEM_LIBRARY boost_system-mt)
|
||||||
else (STANDALONE)
|
else (STANDALONE)
|
||||||
use_prebuilt_binary(boost)
|
use_prebuilt_binary(boost)
|
||||||
set(Boost_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
|
set(Boost_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
|
|
||||||
if (WINDOWS)
|
if (WINDOWS)
|
||||||
set(BOOST_VERSION 1_45)
|
set(BOOST_VERSION 1_45)
|
||||||
|
|||||||
@@ -29,17 +29,16 @@ set(cmake_SOURCE_FILES
|
|||||||
FindELFIO.cmake
|
FindELFIO.cmake
|
||||||
FindGooglePerfTools.cmake
|
FindGooglePerfTools.cmake
|
||||||
FindHunSpell.cmake
|
FindHunSpell.cmake
|
||||||
FindMono.cmake
|
|
||||||
FindMT.cmake
|
FindMT.cmake
|
||||||
FindMySQL.cmake
|
|
||||||
FindNDOF.cmake
|
FindNDOF.cmake
|
||||||
FindOpenJPEG.cmake
|
FindOpenJPEG.cmake
|
||||||
FindXmlRpcEpi.cmake
|
FindXmlRpcEpi.cmake
|
||||||
FMOD.cmake
|
FMOD.cmake
|
||||||
|
FMODEX.cmake
|
||||||
FreeType.cmake
|
FreeType.cmake
|
||||||
GStreamer010Plugin.cmake
|
GStreamer010Plugin.cmake
|
||||||
GooglePerfTools.cmake
|
GooglePerfTools.cmake
|
||||||
HUNSPELL.cmake
|
Hunspell.cmake
|
||||||
JPEG.cmake
|
JPEG.cmake
|
||||||
LLAddBuildTest.cmake
|
LLAddBuildTest.cmake
|
||||||
LLAudio.cmake
|
LLAudio.cmake
|
||||||
@@ -63,8 +62,6 @@ set(cmake_SOURCE_FILES
|
|||||||
LLXML.cmake
|
LLXML.cmake
|
||||||
LScript.cmake
|
LScript.cmake
|
||||||
Linking.cmake
|
Linking.cmake
|
||||||
MonoEmbed.cmake
|
|
||||||
MySQL.cmake
|
|
||||||
NDOF.cmake
|
NDOF.cmake
|
||||||
OPENAL.cmake
|
OPENAL.cmake
|
||||||
OpenGL.cmake
|
OpenGL.cmake
|
||||||
@@ -83,10 +80,6 @@ set(cmake_SOURCE_FILES
|
|||||||
ZLIB.cmake
|
ZLIB.cmake
|
||||||
)
|
)
|
||||||
|
|
||||||
if(FMODEX)
|
|
||||||
list(APPEND cmake_SOURCE_FILES FMODEX.cmake)
|
|
||||||
endif(FMODEX)
|
|
||||||
|
|
||||||
source_group("Shared Rules" FILES ${cmake_SOURCE_FILES})
|
source_group("Shared Rules" FILES ${cmake_SOURCE_FILES})
|
||||||
|
|
||||||
set(master_SOURCE_FILES
|
set(master_SOURCE_FILES
|
||||||
|
|||||||
@@ -29,6 +29,8 @@ set(debug_files
|
|||||||
libapr-1.dll
|
libapr-1.dll
|
||||||
libaprutil-1.dll
|
libaprutil-1.dll
|
||||||
libapriconv-1.dll
|
libapriconv-1.dll
|
||||||
|
libeay32.dll
|
||||||
|
ssleay32.dll
|
||||||
)
|
)
|
||||||
|
|
||||||
copy_if_different(
|
copy_if_different(
|
||||||
@@ -43,10 +45,6 @@ set(all_targets ${all_targets} ${out_targets})
|
|||||||
set(plugintest_debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug")
|
set(plugintest_debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug")
|
||||||
set(plugintest_debug_files
|
set(plugintest_debug_files
|
||||||
libeay32.dll
|
libeay32.dll
|
||||||
libglib-2.0-0.dll
|
|
||||||
libgmodule-2.0-0.dll
|
|
||||||
libgobject-2.0-0.dll
|
|
||||||
libgthread-2.0-0.dll
|
|
||||||
qtcored4.dll
|
qtcored4.dll
|
||||||
qtguid4.dll
|
qtguid4.dll
|
||||||
qtnetworkd4.dll
|
qtnetworkd4.dll
|
||||||
@@ -92,11 +90,6 @@ set(all_targets ${all_targets} ${out_targets})
|
|||||||
set(plugintest_release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release")
|
set(plugintest_release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release")
|
||||||
set(plugintest_release_files
|
set(plugintest_release_files
|
||||||
libeay32.dll
|
libeay32.dll
|
||||||
libglib-2.0-0.dll
|
|
||||||
libgmodule-2.0-0.dll
|
|
||||||
libgobject-2.0-0.dll
|
|
||||||
libgthread-2.0-0.dll
|
|
||||||
# llkdu.dll (not required for plugin test)
|
|
||||||
qtcore4.dll
|
qtcore4.dll
|
||||||
qtgui4.dll
|
qtgui4.dll
|
||||||
qtnetwork4.dll
|
qtnetwork4.dll
|
||||||
@@ -112,14 +105,6 @@ copy_if_different(
|
|||||||
)
|
)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
|
|
||||||
copy_if_different(
|
|
||||||
${plugintest_release_src_dir}
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/ReleaseSSE2"
|
|
||||||
out_targets
|
|
||||||
${plugintest_release_files}
|
|
||||||
)
|
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
|
||||||
|
|
||||||
copy_if_different(
|
copy_if_different(
|
||||||
${plugintest_release_src_dir}
|
${plugintest_release_src_dir}
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/RelWithDebInfo"
|
"${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/RelWithDebInfo"
|
||||||
@@ -146,14 +131,6 @@ copy_if_different(
|
|||||||
)
|
)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
|
|
||||||
copy_if_different(
|
|
||||||
${plugintest_release_src_dir}
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/ReleaseSSE2/imageformats"
|
|
||||||
out_targets
|
|
||||||
${plugintest_release_files}
|
|
||||||
)
|
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
|
||||||
|
|
||||||
copy_if_different(
|
copy_if_different(
|
||||||
${plugintest_release_src_dir}
|
${plugintest_release_src_dir}
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/RelWithDebInfo/imageformats"
|
"${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/RelWithDebInfo/imageformats"
|
||||||
@@ -170,14 +147,6 @@ copy_if_different(
|
|||||||
)
|
)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
|
|
||||||
copy_if_different(
|
|
||||||
${plugintest_release_src_dir}
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/llplugin/imageformats"
|
|
||||||
out_targets
|
|
||||||
${plugintest_release_files}
|
|
||||||
)
|
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
|
||||||
|
|
||||||
copy_if_different(
|
copy_if_different(
|
||||||
${plugintest_release_src_dir}
|
${plugintest_release_src_dir}
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llplugin/imageformats"
|
"${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llplugin/imageformats"
|
||||||
@@ -224,14 +193,6 @@ copy_if_different(
|
|||||||
)
|
)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
|
|
||||||
copy_if_different(
|
|
||||||
${plugins_release_src_dir}
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/llplugin"
|
|
||||||
out_targets
|
|
||||||
${plugins_release_files}
|
|
||||||
)
|
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
|
||||||
|
|
||||||
copy_if_different(
|
copy_if_different(
|
||||||
${plugins_release_src_dir}
|
${plugins_release_src_dir}
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llplugin"
|
"${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llplugin"
|
||||||
@@ -247,46 +208,44 @@ set(release_files
|
|||||||
libapr-1.dll
|
libapr-1.dll
|
||||||
libaprutil-1.dll
|
libaprutil-1.dll
|
||||||
libapriconv-1.dll
|
libapriconv-1.dll
|
||||||
|
libeay32.dll
|
||||||
|
ssleay32.dll
|
||||||
)
|
)
|
||||||
|
|
||||||
if(FMODEX)
|
if(FMODEX)
|
||||||
find_path(FMODEX_BINARY_DIR fmodex.dll
|
find_path(FMODEX_BINARY_DIR fmodex.dll
|
||||||
${release_src_dir}
|
${release_src_dir}
|
||||||
${FMODEX_SDK_DIR}/api
|
${FMODEX_SDK_DIR}/api
|
||||||
${FMODEX_SDK_DIR}
|
${FMODEX_SDK_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
if(FMODEX_BINARY_DIR)
|
if(FMODEX_BINARY_DIR)
|
||||||
copy_if_different("${FMODEX_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/Release" out_targets fmodex.dll)
|
copy_if_different("${FMODEX_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/Release" out_targets fmodex.dll)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
copy_if_different("${FMODEX_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2" out_targets fmodex.dll)
|
copy_if_different("${FMODEX_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo" out_targets fmodex.dll)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
copy_if_different("${FMODEX_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo" out_targets fmodex.dll)
|
copy_if_different("${FMODEX_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/Debug" out_targets fmodex.dll)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
copy_if_different("${FMODEX_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/Debug" out_targets fmodex.dll)
|
endif(FMODEX_BINARY_DIR)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
|
||||||
endif(FMODEX_BINARY_DIR)
|
|
||||||
endif(FMODEX)
|
endif(FMODEX)
|
||||||
|
|
||||||
if(FMOD)
|
if(FMOD)
|
||||||
find_path(FMOD_BINARY_DIR fmod.dll
|
find_path(FMOD_BINARY_DIR fmod.dll
|
||||||
${release_src_dir}
|
${release_src_dir}
|
||||||
${FMOD_SDK_DIR}/api
|
${FMOD_SDK_DIR}/api
|
||||||
${FMOD_SDK_DIR}
|
${FMOD_SDK_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
if(FMOD_BINARY_DIR)
|
if(FMOD_BINARY_DIR)
|
||||||
copy_if_different("${FMOD_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/Release" out_targets fmod.dll)
|
copy_if_different("${FMOD_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/Release" out_targets fmod.dll)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
copy_if_different("${FMOD_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2" out_targets fmod.dll)
|
copy_if_different("${FMOD_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo" out_targets fmod.dll)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
copy_if_different("${FMOD_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo" out_targets fmod.dll)
|
copy_if_different("${FMOD_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/Debug" out_targets fmod.dll)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
copy_if_different("${FMOD_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/Debug" out_targets fmod.dll)
|
else(FMOD_BINARY_DIR)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
list(APPEND release_files fmod.dll) #Required for compile. This will cause an error in copying binaries.
|
||||||
else(FMOD_BINARY_DIR)
|
endif(FMOD_BINARY_DIR)
|
||||||
list(APPEND release_files fmod.dll) #Required for compile. This will cause an error in copying binaries.
|
|
||||||
endif(FMOD_BINARY_DIR)
|
|
||||||
endif(FMOD)
|
endif(FMOD)
|
||||||
|
|
||||||
copy_if_different(
|
copy_if_different(
|
||||||
@@ -305,22 +264,6 @@ copy_if_different(
|
|||||||
)
|
)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
|
|
||||||
copy_if_different(
|
|
||||||
${release_src_dir}
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2"
|
|
||||||
out_targets
|
|
||||||
${release_files}
|
|
||||||
)
|
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
|
||||||
|
|
||||||
copy_if_different(
|
|
||||||
${vivox_src_dir}
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2"
|
|
||||||
out_targets
|
|
||||||
${vivox_files}
|
|
||||||
)
|
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
|
||||||
|
|
||||||
copy_if_different(
|
copy_if_different(
|
||||||
${release_src_dir}
|
${release_src_dir}
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo"
|
"${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo"
|
||||||
@@ -371,15 +314,6 @@ else(EXISTS ${internal_llkdu_path})
|
|||||||
COMMENT "Copying llkdu.dll ${CMAKE_CURRENT_BINARY_DIR}/Release"
|
COMMENT "Copying llkdu.dll ${CMAKE_CURRENT_BINARY_DIR}/Release"
|
||||||
)
|
)
|
||||||
set(all_targets ${all_targets} ${release_llkdu_dst})
|
set(all_targets ${all_targets} ${release_llkdu_dst})
|
||||||
|
|
||||||
set(releasesse2_llkdu_dst "${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/llkdu.dll")
|
|
||||||
ADD_CUSTOM_COMMAND(
|
|
||||||
OUTPUT ${releasesse2_llkdu_dst}
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${release_llkdu_src} ${releasesse2_llkdu_dst}
|
|
||||||
DEPENDS ${release_llkdu_src}
|
|
||||||
COMMENT "Copying llkdu.dll ${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2"
|
|
||||||
)
|
|
||||||
set(all_targets ${all_targets} ${releasesse2_llkdu_dst})
|
|
||||||
|
|
||||||
set(relwithdebinfo_llkdu_dst "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llkdu.dll")
|
set(relwithdebinfo_llkdu_dst "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llkdu.dll")
|
||||||
ADD_CUSTOM_COMMAND(
|
ADD_CUSTOM_COMMAND(
|
||||||
@@ -455,14 +389,6 @@ if (MSVC80)
|
|||||||
)
|
)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
|
|
||||||
copy_if_different(
|
|
||||||
${release_msvc8_redist_path}
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2"
|
|
||||||
out_targets
|
|
||||||
${release_msvc8_files}
|
|
||||||
)
|
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
|
||||||
|
|
||||||
copy_if_different(
|
copy_if_different(
|
||||||
${release_msvc8_redist_path}
|
${release_msvc8_redist_path}
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo"
|
"${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo"
|
||||||
@@ -483,19 +409,6 @@ if (MSVC80)
|
|||||||
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Release/Microsoft.VC80.CRT.manifest
|
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Release/Microsoft.VC80.CRT.manifest
|
||||||
COMMENT "Creating release app config file"
|
COMMENT "Creating release app config file"
|
||||||
)
|
)
|
||||||
|
|
||||||
set(releasesse2_appconfig_file ${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/${VIEWER_BINARY_NAME}.exe.config)
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${releasesse2_appconfig_file}
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE}
|
|
||||||
ARGS
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/build_win32_appConfig.py
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/Microsoft.VC80.CRT.manifest
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/SecondLife.exe.config
|
|
||||||
${releasesse2_appconfig_file}
|
|
||||||
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/Microsoft.VC80.CRT.manifest
|
|
||||||
COMMENT "Creating release-sse2 app config file"
|
|
||||||
)
|
|
||||||
|
|
||||||
set(relwithdebinfo_appconfig_file ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/${VIEWER_BINARY_NAME}.exe.config)
|
set(relwithdebinfo_appconfig_file ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/${VIEWER_BINARY_NAME}.exe.config)
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
@@ -517,7 +430,6 @@ add_custom_target(copy_win_libs ALL
|
|||||||
DEPENDS
|
DEPENDS
|
||||||
${all_targets}
|
${all_targets}
|
||||||
${release_appconfig_file}
|
${release_appconfig_file}
|
||||||
${releasesse2_appconfig_file}
|
|
||||||
${relwithdebinfo_appconfig_file}
|
${relwithdebinfo_appconfig_file}
|
||||||
${debug_appconfig_file}
|
${debug_appconfig_file}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -7,15 +7,14 @@ if (STANDALONE)
|
|||||||
pkg_check_modules(DBUSGLIB REQUIRED dbus-glib-1)
|
pkg_check_modules(DBUSGLIB REQUIRED dbus-glib-1)
|
||||||
|
|
||||||
elseif (LINUX)
|
elseif (LINUX)
|
||||||
use_prebuilt_binary(glib) # dbusglib needs glib
|
|
||||||
use_prebuilt_binary(dbusglib)
|
use_prebuilt_binary(dbusglib)
|
||||||
set(DBUSGLIB_FOUND ON FORCE BOOL)
|
set(DBUSGLIB_FOUND ON FORCE BOOL)
|
||||||
set(DBUSGLIB_INCLUDE_DIRS
|
set(DBUSGLIB_INCLUDE_DIRS
|
||||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/glib-2.0
|
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/dbus
|
||||||
)
|
)
|
||||||
|
# We don't need to explicitly link against dbus-glib itself, because
|
||||||
|
# the viewer probes for the system's copy at runtime.
|
||||||
set(DBUSGLIB_LIBRARIES
|
set(DBUSGLIB_LIBRARIES
|
||||||
dbus-glib-1
|
|
||||||
gobject-2.0
|
gobject-2.0
|
||||||
glib-2.0
|
glib-2.0
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ if (STANDALONE)
|
|||||||
elseif (LINUX)
|
elseif (LINUX)
|
||||||
use_prebuilt_binary(elfio)
|
use_prebuilt_binary(elfio)
|
||||||
set(ELFIO_LIBRARIES ELFIO)
|
set(ELFIO_LIBRARIES ELFIO)
|
||||||
set(ELFIO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
|
set(ELFIO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
set(ELFIO_FOUND "YES")
|
set(ELFIO_FOUND "YES")
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|
||||||
|
|||||||
@@ -13,5 +13,5 @@ else (STANDALONE)
|
|||||||
else (WINDOWS)
|
else (WINDOWS)
|
||||||
set(EXPAT_LIBRARIES expat)
|
set(EXPAT_LIBRARIES expat)
|
||||||
endif (WINDOWS)
|
endif (WINDOWS)
|
||||||
set(EXPAT_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
|
set(EXPAT_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ EXEC_PROGRAM(${CMAKE_CXX_COMPILER}
|
|||||||
# Try to find a library that was compiled with the same compiler version as we currently use.
|
# Try to find a library that was compiled with the same compiler version as we currently use.
|
||||||
SET(JSONCPP_NAMES ${JSONCPP_NAMES} libjson_linux-gcc-${_gcc_COMPILER_VERSION}_libmt.so)
|
SET(JSONCPP_NAMES ${JSONCPP_NAMES} libjson_linux-gcc-${_gcc_COMPILER_VERSION}_libmt.so)
|
||||||
IF (STANDALONE)
|
IF (STANDALONE)
|
||||||
# On standalone, assume that the system installed library was compiled with the used compiler.
|
# On standalone, assume that the system installed library was compiled with the used compiler.
|
||||||
SET(JSONCPP_NAMES ${JSONCPP_NAMES} libjson.so)
|
SET(JSONCPP_NAMES ${JSONCPP_NAMES} libjson.so)
|
||||||
ENDIF (STANDALONE)
|
ENDIF (STANDALONE)
|
||||||
FIND_LIBRARY(JSONCPP_LIBRARY
|
FIND_LIBRARY(JSONCPP_LIBRARY
|
||||||
NAMES ${JSONCPP_NAMES}
|
NAMES ${JSONCPP_NAMES}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ find_path(LLQTWEBKIT_INCLUDE_DIR llqtwebkit.h NO_SYSTEM_ENVIRONMENT_PATH HINTS $
|
|||||||
|
|
||||||
find_library(LLQTWEBKIT_LIBRARY NAMES llqtwebkit NO_SYSTEM_ENVIRONMENT_PATH HINTS ${LLQTWEBKIT_LIBRARY_DIRS})
|
find_library(LLQTWEBKIT_LIBRARY NAMES llqtwebkit NO_SYSTEM_ENVIRONMENT_PATH HINTS ${LLQTWEBKIT_LIBRARY_DIRS})
|
||||||
|
|
||||||
if (NOT PKG_CONFIG_FOUND OR NOT LLQTWEBKIT_FOUND) # If pkg-config couldn't find it, pretend we don't have pkg-config.
|
if (NOT PKG_CONFIG_FOUND OR NOT LLQTWEBKIT_FOUND) # If pkg-config couldn't find it, pretend we don't have pkg-config.
|
||||||
set(LLQTWEBKIT_LIBRARIES llqtwebkit)
|
set(LLQTWEBKIT_LIBRARIES llqtwebkit)
|
||||||
get_filename_component(LLQTWEBKIT_LIBRARY_DIRS ${LLQTWEBKIT_LIBRARY} PATH)
|
get_filename_component(LLQTWEBKIT_LIBRARY_DIRS ${LLQTWEBKIT_LIBRARY} PATH)
|
||||||
endif (NOT PKG_CONFIG_FOUND OR NOT LLQTWEBKIT_FOUND)
|
endif (NOT PKG_CONFIG_FOUND OR NOT LLQTWEBKIT_FOUND)
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
#Find the windows manifest tool.
|
#Find the windows manifest tool.
|
||||||
if (MSVC80)
|
if (MSVC80)
|
||||||
FIND_PROGRAM(HAVE_MANIFEST_TOOL NAMES mt
|
FIND_PROGRAM(HAVE_MANIFEST_TOOL NAMES mt
|
||||||
PATHS
|
PATHS
|
||||||
"$ENV{PROGRAMFILES}/Microsoft Visual Studio 8/VC/bin"
|
"$ENV{PROGRAMFILES}/Microsoft Visual Studio 8/VC/bin"
|
||||||
"$ENV{PROGRAMFILES}/Microsoft Visual Studio 8/Common7/Tools/Bin"
|
"$ENV{PROGRAMFILES}/Microsoft Visual Studio 8/Common7/Tools/Bin"
|
||||||
"$ENV{PROGRAMFILES}/Microsoft Visual Studio 8/SDK/v2.0/Bin")
|
"$ENV{PROGRAMFILES}/Microsoft Visual Studio 8/SDK/v2.0/Bin")
|
||||||
IF(HAVE_MANIFEST_TOOL)
|
IF(HAVE_MANIFEST_TOOL)
|
||||||
MESSAGE(STATUS "Found Mainfest Tool. Embedding custom manifests.")
|
MESSAGE(STATUS "Found Mainfest Tool. Embedding custom manifests.")
|
||||||
ELSE(HAVE_MANIFEST_TOOL)
|
ELSE(HAVE_MANIFEST_TOOL)
|
||||||
MESSAGE(FATAL_ERROR "Manifest tool, mt.exe, can't be found.")
|
MESSAGE(FATAL_ERROR "Manifest tool, mt.exe, can't be found.")
|
||||||
ENDIF(HAVE_MANIFEST_TOOL)
|
ENDIF(HAVE_MANIFEST_TOOL)
|
||||||
|
|
||||||
STRING(REPLACE "/MANIFEST " "/MANIFEST:NO" CMAKE_EXE_LINKER_FLAGS
|
STRING(REPLACE "/MANIFEST " "/MANIFEST:NO" CMAKE_EXE_LINKER_FLAGS
|
||||||
${CMAKE_EXE_LINKER_FLAGS})
|
${CMAKE_EXE_LINKER_FLAGS})
|
||||||
|
|
||||||
endif (MSVC80)
|
endif (MSVC80)
|
||||||
|
|||||||
@@ -1,68 +0,0 @@
|
|||||||
# - Try to find the mono, mcs, gmcs and gacutil
|
|
||||||
#
|
|
||||||
# defines
|
|
||||||
#
|
|
||||||
# MONO_FOUND - system has mono, mcs, gmcs and gacutil
|
|
||||||
# MONO_PATH - where to find 'mono'
|
|
||||||
# MCS_PATH - where to find 'mcs'
|
|
||||||
# GMCS_PATH - where to find 'gmcs'
|
|
||||||
# GACUTIL_PATH - where to find 'gacutil'
|
|
||||||
#
|
|
||||||
# copyright (c) 2007 Arno Rehn arno@arnorehn.de
|
|
||||||
#
|
|
||||||
# Redistribution and use is allowed according to the terms of the GPL license.
|
|
||||||
# Removed the check for gmcs
|
|
||||||
|
|
||||||
FIND_PROGRAM (MONO_EXECUTABLE mono
|
|
||||||
"$ENV{PROGRAMFILES}/Mono-1.9.1/bin"
|
|
||||||
"$ENV{PROGRAMFILES}/Mono-1.2.6/bin"
|
|
||||||
/bin
|
|
||||||
/usr/bin
|
|
||||||
/usr/local/bin
|
|
||||||
)
|
|
||||||
FIND_PROGRAM (MCS_EXECUTABLE mcs
|
|
||||||
"$ENV{PROGRAMFILES}/Mono-1.9.1/bin"
|
|
||||||
"$ENV{PROGRAMFILES}/Mono-1.2.6/bin"
|
|
||||||
/bin
|
|
||||||
/usr/bin
|
|
||||||
/usr/local/bin
|
|
||||||
)
|
|
||||||
FIND_PROGRAM (GMCS_EXECUTABLE gmcs
|
|
||||||
"$ENV{PROGRAMFILES}/Mono-1.9.1/bin"
|
|
||||||
"$ENV{PROGRAMFILES}/Mono-1.2.6/bin"
|
|
||||||
/bin
|
|
||||||
/usr/bin
|
|
||||||
/usr/local/bin
|
|
||||||
)
|
|
||||||
FIND_PROGRAM (GACUTIL_EXECUTABLE gacutil
|
|
||||||
"$ENV{PROGRAMFILES}/Mono-1.9.1/bin"
|
|
||||||
"$ENV{PROGRAMFILES}/Mono-1.2.6/bin"
|
|
||||||
/bin
|
|
||||||
/usr/bin
|
|
||||||
/usr/local/bin
|
|
||||||
)
|
|
||||||
FIND_PROGRAM (ILASM_EXECUTABLE
|
|
||||||
ilasm
|
|
||||||
NO_DEFAULT_PATH
|
|
||||||
PATHS "$ENV{PROGRAMFILES}/Mono-1.9.1/bin" "$ENV{PROGRAMFILES}/Mono-1.2.6/bin" /bin /usr/bin /usr/local/bin
|
|
||||||
)
|
|
||||||
|
|
||||||
SET (MONO_FOUND FALSE)
|
|
||||||
|
|
||||||
IF (MONO_EXECUTABLE AND MCS_EXECUTABLE AND GACUTIL_EXECUTABLE)
|
|
||||||
SET (MONO_FOUND TRUE)
|
|
||||||
ENDIF (MONO_EXECUTABLE AND MCS_EXECUTABLE AND GACUTIL_EXECUTABLE)
|
|
||||||
|
|
||||||
IF (MONO_FOUND)
|
|
||||||
IF (NOT Mono_FIND_QUIETLY)
|
|
||||||
MESSAGE(STATUS "Found mono: ${MONO_EXECUTABLE}")
|
|
||||||
MESSAGE(STATUS "Found mcs: ${MCS_EXECUTABLE}")
|
|
||||||
MESSAGE(STATUS "Found gacutil: ${GACUTIL_EXECUTABLE}")
|
|
||||||
ENDIF (NOT Mono_FIND_QUIETLY)
|
|
||||||
ELSE (MONO_FOUND)
|
|
||||||
IF (Mono_FIND_REQUIRED)
|
|
||||||
MESSAGE(FATAL_ERROR "Could not find one or more of the following programs: mono, mcs, gacutil")
|
|
||||||
ENDIF (Mono_FIND_REQUIRED)
|
|
||||||
ENDIF (MONO_FOUND)
|
|
||||||
|
|
||||||
MARK_AS_ADVANCED(MONO_EXECUTABLE MCS_EXECUTABLE GACUTIL_EXECUTABLE)
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
# -*- cmake -*-
|
|
||||||
|
|
||||||
# - Find MySQL
|
|
||||||
# Find the MySQL includes and library
|
|
||||||
# This module defines
|
|
||||||
# MYSQL_INCLUDE_DIR, where to find mysql.h, etc.
|
|
||||||
# MYSQL_LIBRARIES, the libraries needed to use Mysql.
|
|
||||||
# MYSQL_FOUND, If false, do not try to use Mysql.
|
|
||||||
# also defined, but not for general use are
|
|
||||||
# MYSQL_LIBRARY, where to find the Mysql library.
|
|
||||||
|
|
||||||
FIND_PATH(MYSQL_INCLUDE_DIR mysql/mysql.h
|
|
||||||
/usr/local/include
|
|
||||||
/usr/include
|
|
||||||
)
|
|
||||||
|
|
||||||
SET(MYSQL_NAMES ${MYSQL_NAMES} mysqlclient)
|
|
||||||
FIND_LIBRARY(MYSQL_LIBRARY
|
|
||||||
NAMES ${MYSQL_NAMES}
|
|
||||||
PATHS /usr/lib/mysql /usr/lib /usr/local/lib/mysql /usr/local/lib
|
|
||||||
)
|
|
||||||
|
|
||||||
IF (MYSQL_LIBRARY AND MYSQL_INCLUDE_DIR)
|
|
||||||
SET(MYSQL_LIBRARIES ${MYSQL_LIBRARY})
|
|
||||||
SET(MYSQL_FOUND "YES")
|
|
||||||
ELSE (MYSQL_LIBRARY AND MYSQL_INCLUDE_DIR)
|
|
||||||
SET(MYSQL_FOUND "NO")
|
|
||||||
ENDIF (MYSQL_LIBRARY AND MYSQL_INCLUDE_DIR)
|
|
||||||
|
|
||||||
|
|
||||||
IF (MYSQL_FOUND)
|
|
||||||
IF (NOT MYSQL_FIND_QUIETLY)
|
|
||||||
MESSAGE(STATUS "Found MySQL: ${MYSQL_LIBRARIES}")
|
|
||||||
ENDIF (NOT MYSQL_FIND_QUIETLY)
|
|
||||||
ELSE (MYSQL_FOUND)
|
|
||||||
IF (MYSQL_FIND_REQUIRED)
|
|
||||||
MESSAGE(FATAL_ERROR "Could not find MySQL library")
|
|
||||||
ENDIF (MYSQL_FIND_REQUIRED)
|
|
||||||
ENDIF (MYSQL_FOUND)
|
|
||||||
|
|
||||||
# Deprecated declarations.
|
|
||||||
SET (NATIVE_MYSQL_INCLUDE_PATH ${MYSQL_INCLUDE_DIR} )
|
|
||||||
GET_FILENAME_COMPONENT (NATIVE_MYSQL_LIB_PATH ${MYSQL_LIBRARY} PATH)
|
|
||||||
|
|
||||||
MARK_AS_ADVANCED(
|
|
||||||
MYSQL_LIBRARY
|
|
||||||
MYSQL_INCLUDE_DIR
|
|
||||||
)
|
|
||||||
@@ -11,7 +11,7 @@ else (STANDALONE)
|
|||||||
set(FREETYPE_INCLUDE_DIRS
|
set(FREETYPE_INCLUDE_DIRS
|
||||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
else (LINUX)
|
else (LINUX)
|
||||||
set(FREETYPE_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
|
set(FREETYPE_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
endif (LINUX)
|
endif (LINUX)
|
||||||
|
|
||||||
set(FREETYPE_LIBRARIES freetype)
|
set(FREETYPE_LIBRARIES freetype)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ if (STANDALONE)
|
|||||||
include(FindGooglePerfTools)
|
include(FindGooglePerfTools)
|
||||||
else (STANDALONE)
|
else (STANDALONE)
|
||||||
if (LINUX OR WINDOWS)
|
if (LINUX OR WINDOWS)
|
||||||
use_prebuilt_binary(google)
|
use_prebuilt_binary(gperftools)
|
||||||
endif (LINUX OR WINDOWS)
|
endif (LINUX OR WINDOWS)
|
||||||
if (WINDOWS)
|
if (WINDOWS)
|
||||||
set(TCMALLOC_LIBRARIES libtcmalloc_minimal.lib)
|
set(TCMALLOC_LIBRARIES libtcmalloc_minimal.lib)
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ else (STANDALONE)
|
|||||||
set(HUNSPELL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/hunspell)
|
set(HUNSPELL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/hunspell)
|
||||||
|
|
||||||
if (LINUX OR DARWIN)
|
if (LINUX OR DARWIN)
|
||||||
set(HUNSPELL_LIBRARY hunspell-1.2)
|
set(HUNSPELL_LIBRARY hunspell-1.3)
|
||||||
else (LINUX OR DARWIN)
|
else (LINUX OR DARWIN)
|
||||||
set(HUNSPELL_LIBRARY libhunspell)
|
set(HUNSPELL_LIBRARY libhunspell)
|
||||||
endif (LINUX OR DARWIN)
|
endif (LINUX OR DARWIN)
|
||||||
@@ -19,5 +19,5 @@ else (STANDALONE)
|
|||||||
elseif (WINDOWS)
|
elseif (WINDOWS)
|
||||||
set(JPEG_LIBRARIES jpeglib)
|
set(JPEG_LIBRARIES jpeglib)
|
||||||
endif (LINUX)
|
endif (LINUX)
|
||||||
set(JPEG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
|
set(JPEG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|||||||
@@ -18,5 +18,5 @@ else (STANDALONE)
|
|||||||
elseif (LINUX)
|
elseif (LINUX)
|
||||||
set(JSONCPP_LIBRARIES jsoncpp)
|
set(JSONCPP_LIBRARIES jsoncpp)
|
||||||
endif (WINDOWS)
|
endif (WINDOWS)
|
||||||
set(JSONCPP_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/jsoncpp)
|
set(JSONCPP_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/jsoncpp)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|||||||
@@ -13,15 +13,13 @@ if (STANDALONE)
|
|||||||
SDL_LIBRARY
|
SDL_LIBRARY
|
||||||
)
|
)
|
||||||
else (STANDALONE)
|
else (STANDALONE)
|
||||||
if (NOT DARWIN)
|
if (LINUX)
|
||||||
use_prebuilt_binary(mesa)
|
use_prebuilt_binary(mesa)
|
||||||
endif (NOT DARWIN)
|
|
||||||
if (LINUX AND VIEWER)
|
|
||||||
use_prebuilt_binary(SDL)
|
use_prebuilt_binary(SDL)
|
||||||
set (SDL_FOUND TRUE)
|
set (SDL_FOUND TRUE)
|
||||||
set (SDL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/i686-linux)
|
set (SDL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR})
|
||||||
set (SDL_LIBRARY SDL)
|
set (SDL_LIBRARY SDL directfb fusion direct)
|
||||||
endif (LINUX AND VIEWER)
|
endif (LINUX)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|
||||||
if (SDL_FOUND)
|
if (SDL_FOUND)
|
||||||
|
|||||||
7
indra/cmake/LLXUIXML.cmake
Normal file
7
indra/cmake/LLXUIXML.cmake
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# -*- cmake -*-
|
||||||
|
|
||||||
|
set(LLXUIXML_INCLUDE_DIRS
|
||||||
|
${LIBS_OPEN_DIR}/llxuixml
|
||||||
|
)
|
||||||
|
|
||||||
|
set(LLXUIXML_LIBRARIES llxuixml)
|
||||||
@@ -6,11 +6,7 @@ if (NOT STANDALONE)
|
|||||||
set(ARCH_PREBUILT_DIRS_RELEASE ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/release)
|
set(ARCH_PREBUILT_DIRS_RELEASE ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/release)
|
||||||
set(ARCH_PREBUILT_DIRS_DEBUG ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/debug)
|
set(ARCH_PREBUILT_DIRS_DEBUG ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/debug)
|
||||||
elseif (LINUX)
|
elseif (LINUX)
|
||||||
if (VIEWER)
|
set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/release)
|
||||||
set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release_client)
|
|
||||||
else (VIEWER)
|
|
||||||
set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release)
|
|
||||||
endif (VIEWER)
|
|
||||||
set(ARCH_PREBUILT_DIRS_RELEASE ${ARCH_PREBUILT_DIRS})
|
set(ARCH_PREBUILT_DIRS_RELEASE ${ARCH_PREBUILT_DIRS})
|
||||||
set(ARCH_PREBUILT_DIRS_DEBUG ${ARCH_PREBUILT_DIRS})
|
set(ARCH_PREBUILT_DIRS_DEBUG ${ARCH_PREBUILT_DIRS})
|
||||||
elseif (DARWIN)
|
elseif (DARWIN)
|
||||||
|
|||||||
@@ -1,48 +0,0 @@
|
|||||||
# -*- cmake -*-
|
|
||||||
|
|
||||||
set(MONO_PREBUILT_LIBRARIES_DIR ${LIBS_PREBUILT_DIR}/mono/1.0)
|
|
||||||
|
|
||||||
set(MONO_PREBUILT_LIBRARIES
|
|
||||||
Iesi.Collections.dll
|
|
||||||
Iesi.Collections.pdb
|
|
||||||
Mono.CompilerServices.SymbolWriter.dll
|
|
||||||
Mono.PEToolkit.dll
|
|
||||||
Mono.PEToolkit.pdb
|
|
||||||
Mono.Security.dll
|
|
||||||
PEAPI.dll
|
|
||||||
RAIL.dll
|
|
||||||
RAIL.pdb
|
|
||||||
)
|
|
||||||
|
|
||||||
set(MONO_CORE_LIBRARIES
|
|
||||||
System.dll
|
|
||||||
System.Xml.dll
|
|
||||||
mscorlib.dll)
|
|
||||||
|
|
||||||
if(WINDOWS)
|
|
||||||
set(MONO_DEPENDENCIES
|
|
||||||
DomainCreator
|
|
||||||
DomainRegister
|
|
||||||
LslLibrary
|
|
||||||
LslUserScript
|
|
||||||
Script
|
|
||||||
ScriptTypes
|
|
||||||
TestFormat
|
|
||||||
UserScript
|
|
||||||
UThread
|
|
||||||
UThreadInjector
|
|
||||||
)
|
|
||||||
else(WINDOWS)
|
|
||||||
set(MONO_DEPENDENCIES
|
|
||||||
DomainCreator_POST_BUILD
|
|
||||||
DomainRegister_POST_BUILD
|
|
||||||
LslLibrary_POST_BUILD
|
|
||||||
LslUserScript_POST_BUILD
|
|
||||||
Script_POST_BUILD
|
|
||||||
ScriptTypes_POST_BUILD
|
|
||||||
TestFormat_POST_BUILD
|
|
||||||
UserScript_POST_BUILD
|
|
||||||
UThread_POST_BUILD
|
|
||||||
UThreadInjector_POST_BUILD
|
|
||||||
)
|
|
||||||
endif(WINDOWS)
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
# -*- cmake -*-
|
|
||||||
|
|
||||||
include(Prebuilt)
|
|
||||||
use_prebuilt_binary(libmono)
|
|
||||||
|
|
||||||
SET(GLIB_2_0 glib-2.0)
|
|
||||||
|
|
||||||
if (WINDOWS)
|
|
||||||
SET(MONO_LIB mono)
|
|
||||||
else (WINDOWS)
|
|
||||||
SET(MONO_LIB mono)
|
|
||||||
SET(M_LIBRARIES m)
|
|
||||||
SET(GTHREAD_2_0 gthread-2.0)
|
|
||||||
endif(WINDOWS)
|
|
||||||
|
|
||||||
|
|
||||||
IF (DARWIN)
|
|
||||||
|
|
||||||
FIND_LIBRARY(MONO_LIBRARY NAMES Mono)
|
|
||||||
# Find_file doesnt work as expected. Hardcode relative to Mono.framework.
|
|
||||||
#FIND_FILE(GLIB_CONFIG glibconfig.h ${MONO_LIBRARY})
|
|
||||||
#FIND_FILE(MONO_GLIB_LIBRARY glib.h ${MONO_LIBRARY})
|
|
||||||
SET(MONO_GLIB_LIBRARY ${MONO_LIBRARY}/Headers/glib-2.0/)
|
|
||||||
SET(GLIB_CONFIG ${MONO_LIBRARY}/Libraries/glib-2.0/include/)
|
|
||||||
SET(MONO_LIB_DIRECTORY ${MONO_LIBRARY}/Libraries)
|
|
||||||
|
|
||||||
IF (MONO_LIBRARY AND MONO_GLIB_LIBRARY AND GLIB_CONFIG)
|
|
||||||
MESSAGE(STATUS "Found Mono for embedding")
|
|
||||||
INCLUDE_DIRECTORIES(${MONO_GLIB_LIBRARY} ${GLIB_CONFIG})
|
|
||||||
LINK_DIRECTORIES(${MONO_LIB_DIRECTORY})
|
|
||||||
ELSE (MONO_LIBRARY AND MONO_GLIB_LIBRARY AND GLIB_CONFIG)
|
|
||||||
MESSAGE(FATAL_ERROR "Mono not found for embedding")
|
|
||||||
MESSAGE(${MONO_LIBRARY})
|
|
||||||
MESSAGE(${MONO_GLIB_LIBRARY})
|
|
||||||
MESSAGE(${GLIB_CONFIG})
|
|
||||||
ENDIF (MONO_LIBRARY AND MONO_GLIB_LIBRARY AND GLIB_CONFIG)
|
|
||||||
|
|
||||||
ELSE (DARWIN)
|
|
||||||
|
|
||||||
SET(MONO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
|
||||||
SET(GLIB_2_0_PLATFORM_INCLUDE_DIR
|
|
||||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/glib-2.0)
|
|
||||||
SET(GLIB_2_0_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/glib-2.0)
|
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES(
|
|
||||||
${MONO_INCLUDE_DIR}
|
|
||||||
${GLIB_2_0_PLATFORM_INCLUDE_DIR}
|
|
||||||
${GLIB_2_0_INCLUDE_DIR})
|
|
||||||
|
|
||||||
ENDIF (DARWIN)
|
|
||||||
|
|
||||||
SET(MONO_LIBRARIES
|
|
||||||
${MONO_LIB}
|
|
||||||
${M_LIBRARIES}
|
|
||||||
${GLIB_2_0}
|
|
||||||
${GTHREAD_2_0}
|
|
||||||
)
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
# -*- cmake -*-
|
|
||||||
include(Linking)
|
|
||||||
include(Prebuilt)
|
|
||||||
|
|
||||||
use_prebuilt_binary(mysql)
|
|
||||||
|
|
||||||
if (LINUX)
|
|
||||||
if (WORD_SIZE EQUAL 32 OR DEBIAN_VERSION STREQUAL "3.1")
|
|
||||||
set(MYSQL_LIBRARIES mysqlclient)
|
|
||||||
set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
|
||||||
else (WORD_SIZE EQUAL 32 OR DEBIAN_VERSION STREQUAL "3.1")
|
|
||||||
# Use the native MySQL library on a 64-bit system.
|
|
||||||
set(MYSQL_FIND_QUIETLY ON)
|
|
||||||
set(MYSQL_FIND_REQUIRED ON)
|
|
||||||
include(FindMySQL)
|
|
||||||
endif (WORD_SIZE EQUAL 32 OR DEBIAN_VERSION STREQUAL "3.1")
|
|
||||||
elseif (WINDOWS)
|
|
||||||
set(MYSQL_LIBRARIES mysqlclient)
|
|
||||||
set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
|
||||||
elseif (DARWIN)
|
|
||||||
set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
|
||||||
set(MYSQL_LIBRARIES
|
|
||||||
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libmysqlclient.a
|
|
||||||
debug ${ARCH_PREBUILT_DIRS_DEBUG}/libmysqlclient.a
|
|
||||||
)
|
|
||||||
endif (LINUX)
|
|
||||||
@@ -15,7 +15,7 @@ else (STANDALONE)
|
|||||||
set(NDOF_LIBRARY ndofdev)
|
set(NDOF_LIBRARY ndofdev)
|
||||||
endif (WINDOWS)
|
endif (WINDOWS)
|
||||||
|
|
||||||
set(NDOF_INCLUDE_DIR ${ARCH_PREBUILT_DIRS}/include/ndofdev)
|
set(NDOF_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/ndofdev)
|
||||||
set(NDOF_FOUND 1)
|
set(NDOF_FOUND 1)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ if (OPENAL)
|
|||||||
openal
|
openal
|
||||||
alut
|
alut
|
||||||
)
|
)
|
||||||
|
set(OPENAL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
endif (OPENAL)
|
endif (OPENAL)
|
||||||
|
|
||||||
if (OPENAL)
|
if (OPENAL)
|
||||||
|
|||||||
@@ -6,5 +6,5 @@ if (NOT (STANDALONE OR DARWIN))
|
|||||||
# possible glh_linear should have its own .cmake file instead
|
# possible glh_linear should have its own .cmake file instead
|
||||||
#use_prebuilt_binary(glh_linear)
|
#use_prebuilt_binary(glh_linear)
|
||||||
# actually... not any longer, it's now in git -SG
|
# actually... not any longer, it's now in git -SG
|
||||||
set(GLEXT_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
|
set(GLEXT_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
endif ()
|
endif ()
|
||||||
|
|||||||
@@ -10,8 +10,10 @@ else (STANDALONE)
|
|||||||
use_prebuilt_binary(libpng)
|
use_prebuilt_binary(libpng)
|
||||||
if (WINDOWS)
|
if (WINDOWS)
|
||||||
set(PNG_LIBRARIES libpng15)
|
set(PNG_LIBRARIES libpng15)
|
||||||
else (WINDOWS)
|
elseif(DARWIN)
|
||||||
set(PNG_LIBRARIES png12)
|
set(PNG_LIBRARIES png15)
|
||||||
endif (WINDOWS)
|
else(LINUX)
|
||||||
set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
|
set(PNG_LIBRARIES png15)
|
||||||
|
endif()
|
||||||
|
set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/libpng15)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|||||||
2
indra/cmake/PulseAudio.cmake
Executable file → Normal file
2
indra/cmake/PulseAudio.cmake
Executable file → Normal file
@@ -13,7 +13,7 @@ if (PULSEAUDIO)
|
|||||||
use_prebuilt_binary(pulseaudio)
|
use_prebuilt_binary(pulseaudio)
|
||||||
set(PULSEAUDIO_FOUND ON FORCE BOOL)
|
set(PULSEAUDIO_FOUND ON FORCE BOOL)
|
||||||
set(PULSEAUDIO_INCLUDE_DIRS
|
set(PULSEAUDIO_INCLUDE_DIRS
|
||||||
${LIBS_PREBUILT_DIR}/include
|
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include
|
||||||
)
|
)
|
||||||
# We don't need to explicitly link against pulseaudio itself, because
|
# We don't need to explicitly link against pulseaudio itself, because
|
||||||
# the viewer probes for the system's copy at runtime.
|
# the viewer probes for the system's copy at runtime.
|
||||||
|
|||||||
@@ -31,11 +31,9 @@ if (STANDALONE)
|
|||||||
add_definitions(${${pkg}_CFLAGS_OTHERS})
|
add_definitions(${${pkg}_CFLAGS_OTHERS})
|
||||||
endforeach(pkg)
|
endforeach(pkg)
|
||||||
else (STANDALONE)
|
else (STANDALONE)
|
||||||
if (NOT DARWIN)
|
if (LINUX)
|
||||||
use_prebuilt_binary(glib) # gtk-etc needs glib
|
use_prebuilt_binary(glib) # gtk-etc needs glib
|
||||||
use_prebuilt_binary(gtk-atk-pango-glib)
|
use_prebuilt_binary(gtk-atk-pango-glib)
|
||||||
endif (NOT DARWIN)
|
|
||||||
if (LINUX)
|
|
||||||
set(UI_LIBRARIES
|
set(UI_LIBRARIES
|
||||||
atk-1.0
|
atk-1.0
|
||||||
X11
|
X11
|
||||||
@@ -60,7 +58,6 @@ else (STANDALONE)
|
|||||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include
|
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include
|
||||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/cairo
|
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/cairo
|
||||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/pixman-1
|
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/pixman-1
|
||||||
${LIBS_PREBUILT_DIR}/include
|
|
||||||
)
|
)
|
||||||
foreach(include ${${LL_ARCH}_INCLUDES})
|
foreach(include ${${LL_ARCH}_INCLUDES})
|
||||||
include_directories(${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/${include})
|
include_directories(${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/${include})
|
||||||
|
|||||||
@@ -9,5 +9,5 @@ if (STANDALONE)
|
|||||||
else (STANDALONE)
|
else (STANDALONE)
|
||||||
use_prebuilt_binary(xmlrpc-epi)
|
use_prebuilt_binary(xmlrpc-epi)
|
||||||
set(XMLRPCEPI_LIBRARIES xmlrpc-epi)
|
set(XMLRPCEPI_LIBRARIES xmlrpc-epi)
|
||||||
set(XMLRPCEPI_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
|
set(XMLRPCEPI_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|||||||
@@ -17,6 +17,6 @@ else (STANDALONE)
|
|||||||
set(ZLIB_LIBRARIES z)
|
set(ZLIB_LIBRARIES z)
|
||||||
endif (WINDOWS)
|
endif (WINDOWS)
|
||||||
if (WINDOWS OR LINUX)
|
if (WINDOWS OR LINUX)
|
||||||
set(ZLIB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/zlib)
|
set(ZLIB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/zlib)
|
||||||
endif (WINDOWS OR LINUX)
|
endif (WINDOWS OR LINUX)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ def quote(opts):
|
|||||||
class PlatformSetup(object):
|
class PlatformSetup(object):
|
||||||
generator = None
|
generator = None
|
||||||
build_types = {}
|
build_types = {}
|
||||||
for t in ('Debug', 'Release', 'ReleaseSSE2', 'RelWithDebInfo'):
|
for t in ('Debug', 'Release', 'RelWithDebInfo'):
|
||||||
build_types[t.lower()] = t
|
build_types[t.lower()] = t
|
||||||
|
|
||||||
build_type = build_types['relwithdebinfo']
|
build_type = build_types['relwithdebinfo']
|
||||||
@@ -764,7 +764,7 @@ Options:
|
|||||||
--unattended build unattended, do not invoke any tools requiring
|
--unattended build unattended, do not invoke any tools requiring
|
||||||
a human response
|
a human response
|
||||||
--universal build a universal binary on Mac OS X (unsupported)
|
--universal build a universal binary on Mac OS X (unsupported)
|
||||||
-t | --type=NAME build type ("Debug", "Release", "ReleaseSSE2", or "RelWithDebInfo")
|
-t | --type=NAME build type ("Debug", "Release", or "RelWithDebInfo")
|
||||||
-m32 | -m64 build architecture (32-bit or 64-bit)
|
-m32 | -m64 build architecture (32-bit or 64-bit)
|
||||||
-N | --no-distcc disable use of distcc
|
-N | --no-distcc disable use of distcc
|
||||||
-G | --generator=NAME generator name
|
-G | --generator=NAME generator name
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ ARGUMENTS=[
|
|||||||
On Linux this would try to use Linux_i686Manifest.""",
|
On Linux this would try to use Linux_i686Manifest.""",
|
||||||
default=""),
|
default=""),
|
||||||
dict(name='build', description='Build directory.', default=DEFAULT_SRCTREE),
|
dict(name='build', description='Build directory.', default=DEFAULT_SRCTREE),
|
||||||
dict(name='buildtype', description="""The build type used. ('Debug', 'Release', 'ReleaseSSE2' or 'RelWithDebInfo')
|
dict(name='buildtype', description="""The build type used. ('Debug', 'Release', or 'RelWithDebInfo')
|
||||||
Default is Release """,
|
Default is Release """,
|
||||||
default="Release"),
|
default="Release"),
|
||||||
dict(name='branding_id', description="""Identifier for the branding set to
|
dict(name='branding_id', description="""Identifier for the branding set to
|
||||||
|
|||||||
@@ -5,27 +5,25 @@ project(llaudio)
|
|||||||
include(00-Common)
|
include(00-Common)
|
||||||
include(Audio)
|
include(Audio)
|
||||||
include(LLAudio)
|
include(LLAudio)
|
||||||
if(FMODEX)
|
if (FMODEX)
|
||||||
include(FMODEX)
|
include(FMODEX)
|
||||||
if(FMODEX)
|
set(FMOD OFF)
|
||||||
set(FMOD OFF)
|
endif (FMODEX)
|
||||||
endif(FMODEX)
|
if (NOT FMODEX)
|
||||||
endif(FMODEX)
|
include(FMOD)
|
||||||
if(NOT FMODEX)
|
endif (NOT FMODEX)
|
||||||
include(FMOD)
|
|
||||||
endif(NOT FMODEX)
|
|
||||||
include(OPENAL)
|
include(OPENAL)
|
||||||
include(LLCommon)
|
include(LLCommon)
|
||||||
include(LLMath)
|
include(LLMath)
|
||||||
include(LLMessage)
|
include(LLMessage)
|
||||||
include(LLVFS)
|
include(LLVFS)
|
||||||
|
|
||||||
if(FMODEX)
|
if (FMODEX)
|
||||||
include_directories(${FMODEX_INCLUDE_DIR})
|
include_directories(${FMODEX_INCLUDE_DIR})
|
||||||
endif(FMODEX)
|
endif(FMODEX)
|
||||||
if(FMOD)
|
if(FMOD)
|
||||||
include_directories(${FMOD_INCLUDE_DIR})
|
include_directories(${FMOD_INCLUDE_DIR})
|
||||||
endif(FMOD)
|
endif (FMOD)
|
||||||
|
|
||||||
include_directories(
|
include_directories(
|
||||||
${LLAUDIO_INCLUDE_DIRS}
|
${LLAUDIO_INCLUDE_DIRS}
|
||||||
@@ -37,7 +35,7 @@ include_directories(
|
|||||||
${VORBISENC_INCLUDE_DIRS}
|
${VORBISENC_INCLUDE_DIRS}
|
||||||
${VORBISFILE_INCLUDE_DIRS}
|
${VORBISFILE_INCLUDE_DIRS}
|
||||||
${VORBIS_INCLUDE_DIRS}
|
${VORBIS_INCLUDE_DIRS}
|
||||||
${OPENAL_LIB_INCLUDE_DIRS}
|
${OPENAL_INCLUDE_DIRS}
|
||||||
${FREEAULT_LIB_INCLUDE_DIRS}
|
${FREEAULT_LIB_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -168,19 +168,13 @@ long vfs_tell (void *datasource)
|
|||||||
return file->tell();
|
return file->tell();
|
||||||
}
|
}
|
||||||
|
|
||||||
LLVorbisDecodeState::LLVorbisDecodeState(const LLUUID &uuid, const std::string &out_filename)
|
LLVorbisDecodeState::LLVorbisDecodeState(const LLUUID &uuid, const std::string &out_filename) :
|
||||||
{
|
mValid(FALSE), mDone(FALSE), mBytesRead(-1), mUUID(uuid),
|
||||||
mDone = FALSE;
|
|
||||||
mValid = FALSE;
|
|
||||||
mBytesRead = -1;
|
|
||||||
mUUID = uuid;
|
|
||||||
mInFilep = NULL;
|
|
||||||
mCurrentSection = 0;
|
|
||||||
#if !defined(USE_WAV_VFILE)
|
#if !defined(USE_WAV_VFILE)
|
||||||
mOutFilename = out_filename;
|
mOutFilename(out_filename), mFileHandle(LLLFSThread::nullHandle()),
|
||||||
mFileHandle = LLLFSThread::nullHandle();
|
|
||||||
#endif
|
#endif
|
||||||
// No default value for mVF, it's an ogg structure?
|
mInFilep(NULL), mCurrentSection(0)
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
LLVorbisDecodeState::~LLVorbisDecodeState()
|
LLVorbisDecodeState::~LLVorbisDecodeState()
|
||||||
@@ -242,8 +236,8 @@ BOOL LLVorbisDecodeState::initDecode()
|
|||||||
llwarns << "No default bitstream found" << llendl;
|
llwarns << "No default bitstream found" << llendl;
|
||||||
}
|
}
|
||||||
// <edit>
|
// <edit>
|
||||||
// This magic value is equivilent to 150MiB of data.
|
// This magic value is equivalent to 150MiB of data.
|
||||||
// Prevents griffers from utilizin a huge xbox sound the size of god to instafry the viewer
|
// Prevents griefers from utilizing a huge xbox sound the size of god to instafry the viewer
|
||||||
if(size_guess >= 157286400)
|
if(size_guess >= 157286400)
|
||||||
{
|
{
|
||||||
llwarns << "Bad sound caught by zmagic" << llendl;
|
llwarns << "Bad sound caught by zmagic" << llendl;
|
||||||
@@ -616,7 +610,8 @@ void LLAudioDecodeMgr::Impl::processQueue(const F32 num_secs)
|
|||||||
llwarns << mCurrentDecodep->getUUID() << " has invalid vorbis data, aborting decode" << llendl;
|
llwarns << mCurrentDecodep->getUUID() << " has invalid vorbis data, aborting decode" << llendl;
|
||||||
mCurrentDecodep->flushBadFile();
|
mCurrentDecodep->flushBadFile();
|
||||||
LLAudioData *adp = gAudiop->getAudioData(mCurrentDecodep->getUUID());
|
LLAudioData *adp = gAudiop->getAudioData(mCurrentDecodep->getUUID());
|
||||||
adp->setHasValidData(FALSE);
|
adp->setHasValidData(false);
|
||||||
|
adp->setHasCompletedDecode(true);
|
||||||
mCurrentDecodep = NULL;
|
mCurrentDecodep = NULL;
|
||||||
done = TRUE;
|
done = TRUE;
|
||||||
}
|
}
|
||||||
@@ -631,11 +626,16 @@ void LLAudioDecodeMgr::Impl::processQueue(const F32 num_secs)
|
|||||||
if (mCurrentDecodep->finishDecode())
|
if (mCurrentDecodep->finishDecode())
|
||||||
{
|
{
|
||||||
// We finished!
|
// We finished!
|
||||||
if (mCurrentDecodep->isValid() && mCurrentDecodep->isDone())
|
LLAudioData *adp = gAudiop->getAudioData(mCurrentDecodep->getUUID());
|
||||||
|
if (!adp)
|
||||||
{
|
{
|
||||||
LLAudioData *adp = gAudiop->getAudioData(mCurrentDecodep->getUUID());
|
llwarns << "Missing LLAudioData for decode of " << mCurrentDecodep->getUUID() << llendl;
|
||||||
adp->setHasDecodedData(TRUE);
|
}
|
||||||
adp->setHasValidData(TRUE);
|
else if (mCurrentDecodep->isValid() && mCurrentDecodep->isDone())
|
||||||
|
{
|
||||||
|
adp->setHasCompletedDecode(true);
|
||||||
|
adp->setHasDecodedData(true);
|
||||||
|
adp->setHasValidData(true);
|
||||||
|
|
||||||
// At this point, we could see if anyone needs this sound immediately, but
|
// At this point, we could see if anyone needs this sound immediately, but
|
||||||
// I'm not sure that there's a reason to - we need to poll all of the playing
|
// I'm not sure that there's a reason to - we need to poll all of the playing
|
||||||
@@ -644,7 +644,8 @@ void LLAudioDecodeMgr::Impl::processQueue(const F32 num_secs)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
llinfos << "Vorbis decode failed!!!" << llendl;
|
adp->setHasCompletedDecode(true);
|
||||||
|
llinfos << "Vorbis decode failed for " << mCurrentDecodep->getUUID() << llendl;
|
||||||
}
|
}
|
||||||
mCurrentDecodep = NULL;
|
mCurrentDecodep = NULL;
|
||||||
}
|
}
|
||||||
@@ -712,15 +713,18 @@ BOOL LLAudioDecodeMgr::addDecodeRequest(const LLUUID &uuid)
|
|||||||
if (gAudiop->hasDecodedFile(uuid))
|
if (gAudiop->hasDecodedFile(uuid))
|
||||||
{
|
{
|
||||||
// Already have a decoded version, don't need to decode it.
|
// Already have a decoded version, don't need to decode it.
|
||||||
|
//llinfos << "addDecodeRequest for " << uuid << " has decoded file already" << llendl;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gAssetStorage->hasLocalAsset(uuid, LLAssetType::AT_SOUND))
|
if (gAssetStorage->hasLocalAsset(uuid, LLAssetType::AT_SOUND))
|
||||||
{
|
{
|
||||||
// Just put it on the decode queue.
|
// Just put it on the decode queue.
|
||||||
|
//llinfos << "addDecodeRequest for " << uuid << " has local asset file already" << llendl;
|
||||||
mImpl->mDecodeQueue.push(uuid);
|
mImpl->mDecodeQueue.push(uuid);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//llinfos << "addDecodeRequest for " << uuid << " no file available" << llendl;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1275,10 +1275,11 @@ void LLAudioEngine::assetCallback(LLVFS *vfs, const LLUUID &uuid, LLAssetType::E
|
|||||||
// Need to mark data as bad to avoid constant rerequests.
|
// Need to mark data as bad to avoid constant rerequests.
|
||||||
LLAudioData *adp = gAudiop->getAudioData(uuid);
|
LLAudioData *adp = gAudiop->getAudioData(uuid);
|
||||||
if (adp)
|
if (adp)
|
||||||
{
|
{ // Make sure everything is cleared
|
||||||
adp->setHasValidData(false);
|
adp->setHasValidData(false);
|
||||||
adp->setHasLocalData(false);
|
adp->setHasLocalData(false);
|
||||||
adp->setHasDecodedData(false);
|
adp->setHasDecodedData(false);
|
||||||
|
adp->setHasCompletedDecode(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -1291,9 +1292,10 @@ void LLAudioEngine::assetCallback(LLVFS *vfs, const LLUUID &uuid, LLAssetType::E
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// llinfos << "Got asset callback with good audio data for " << uuid << ", making decode request" << llendl;
|
||||||
adp->setHasValidData(true);
|
adp->setHasValidData(true);
|
||||||
adp->setHasLocalData(true);
|
adp->setHasLocalData(true);
|
||||||
gAudioDecodeMgrp->addDecodeRequest(uuid);
|
gAudioDecodeMgrp->addDecodeRequest(uuid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
gAudiop->mCurrentTransfer = LLUUID::null;
|
gAudiop->mCurrentTransfer = LLUUID::null;
|
||||||
@@ -1380,16 +1382,18 @@ void LLAudioSource::update()
|
|||||||
|
|
||||||
if (!getCurrentBuffer())
|
if (!getCurrentBuffer())
|
||||||
{
|
{
|
||||||
if (getCurrentData())
|
LLAudioData *adp = getCurrentData();
|
||||||
|
if (adp)
|
||||||
{
|
{
|
||||||
// Hack - try and load the sound. Will do this as a callback
|
// Hack - try and load the sound. Will do this as a callback
|
||||||
// on decode later.
|
// on decode later.
|
||||||
if (getCurrentData()->load() && getCurrentData()->getBuffer())
|
if (adp->load() && adp->getBuffer())
|
||||||
{
|
{
|
||||||
play(getCurrentData()->getID());
|
play(adp->getID());
|
||||||
}
|
}
|
||||||
else
|
else if (adp->hasCompletedDecode()) // Only mark corrupted after decode is done
|
||||||
{
|
{
|
||||||
|
llwarns << "Marking LLAudioSource corrupted for " << adp->getID() << llendl;
|
||||||
mCorrupted = true ;
|
mCorrupted = true ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1812,6 +1816,7 @@ LLAudioData::LLAudioData(const LLUUID &uuid) :
|
|||||||
mBufferp(NULL),
|
mBufferp(NULL),
|
||||||
mHasLocalData(false),
|
mHasLocalData(false),
|
||||||
mHasDecodedData(false),
|
mHasDecodedData(false),
|
||||||
|
mHasCompletedDecode(false),
|
||||||
mHasValidData(true)
|
mHasValidData(true)
|
||||||
{
|
{
|
||||||
if (uuid.isNull())
|
if (uuid.isNull())
|
||||||
@@ -1823,12 +1828,13 @@ LLAudioData::LLAudioData(const LLUUID &uuid) :
|
|||||||
if (gAudiop && gAudiop->hasDecodedFile(uuid))
|
if (gAudiop && gAudiop->hasDecodedFile(uuid))
|
||||||
{
|
{
|
||||||
// Already have a decoded version, don't need to decode it.
|
// Already have a decoded version, don't need to decode it.
|
||||||
mHasLocalData = true;
|
setHasLocalData(true);
|
||||||
mHasDecodedData = true;
|
setHasDecodedData(true);
|
||||||
|
setHasCompletedDecode(true);
|
||||||
}
|
}
|
||||||
else if (gAssetStorage && gAssetStorage->hasLocalAsset(uuid, LLAssetType::AT_SOUND))
|
else if (gAssetStorage && gAssetStorage->hasLocalAsset(uuid, LLAssetType::AT_SOUND))
|
||||||
{
|
{
|
||||||
mHasLocalData = true;
|
setHasLocalData(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -408,10 +408,12 @@ public:
|
|||||||
|
|
||||||
bool hasLocalData() const { return mHasLocalData; }
|
bool hasLocalData() const { return mHasLocalData; }
|
||||||
bool hasDecodedData() const { return mHasDecodedData; }
|
bool hasDecodedData() const { return mHasDecodedData; }
|
||||||
|
bool hasCompletedDecode() const { return mHasCompletedDecode; }
|
||||||
bool hasValidData() const { return mHasValidData; }
|
bool hasValidData() const { return mHasValidData; }
|
||||||
|
|
||||||
void setHasLocalData(const bool hld) { mHasLocalData = hld; }
|
void setHasLocalData(const bool hld) { mHasLocalData = hld; }
|
||||||
void setHasDecodedData(const bool hdd) { mHasDecodedData = hdd; }
|
void setHasDecodedData(const bool hdd) { mHasDecodedData = hdd; }
|
||||||
|
void setHasCompletedDecode(const bool hcd) { mHasCompletedDecode = hcd; }
|
||||||
void setHasValidData(const bool hvd) { mHasValidData = hvd; }
|
void setHasValidData(const bool hvd) { mHasValidData = hvd; }
|
||||||
|
|
||||||
friend class LLAudioEngine; // Severe laziness, bad.
|
friend class LLAudioEngine; // Severe laziness, bad.
|
||||||
@@ -419,9 +421,10 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
LLUUID mID;
|
LLUUID mID;
|
||||||
LLAudioBuffer *mBufferp; // If this data is being used by the audio system, a pointer to the buffer will be set here.
|
LLAudioBuffer *mBufferp; // If this data is being used by the audio system, a pointer to the buffer will be set here.
|
||||||
bool mHasLocalData;
|
bool mHasLocalData; // Set true if the sound asset file is available locally
|
||||||
bool mHasDecodedData;
|
bool mHasDecodedData; // Set true if the sound file has been decoded
|
||||||
bool mHasValidData;
|
bool mHasCompletedDecode; // Set true when the sound is decoded
|
||||||
|
bool mHasValidData; // Set false if decoding failed, meaning the sound asset is bad
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -105,10 +105,6 @@ bool LLAudioEngine_FMODEX::init(const S32 num_channels, void* userdata)
|
|||||||
|
|
||||||
U32 version;
|
U32 version;
|
||||||
FMOD_RESULT result;
|
FMOD_RESULT result;
|
||||||
int numdrivers;
|
|
||||||
FMOD_SPEAKERMODE speakermode;
|
|
||||||
FMOD_CAPS caps;
|
|
||||||
char name[256];
|
|
||||||
|
|
||||||
LL_DEBUGS("AppInit") << "LLAudioEngine_FMODEX::init() initializing FMOD" << LL_ENDL;
|
LL_DEBUGS("AppInit") << "LLAudioEngine_FMODEX::init() initializing FMOD" << LL_ENDL;
|
||||||
|
|
||||||
@@ -124,11 +120,16 @@ bool LLAudioEngine_FMODEX::init(const S32 num_channels, void* userdata)
|
|||||||
|
|
||||||
if (version < FMOD_VERSION)
|
if (version < FMOD_VERSION)
|
||||||
{
|
{
|
||||||
LL_WARNS("AppInit") << "Error : You are using the wrong FMOD version (" << version
|
LL_WARNS("AppInit") << "Error : You are using the wrong FMOD Ex version (" << version
|
||||||
<< ")! You should be using FMOD " << FMOD_VERSION << LL_ENDL;
|
<< ")! You should be using FMOD Ex" << FMOD_VERSION << LL_ENDL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LL_WINDOWS
|
#if LL_WINDOWS
|
||||||
|
int numdrivers;
|
||||||
|
FMOD_SPEAKERMODE speakermode;
|
||||||
|
FMOD_CAPS caps;
|
||||||
|
char name[256];
|
||||||
|
|
||||||
//Is this block applicable to linux?
|
//Is this block applicable to linux?
|
||||||
{
|
{
|
||||||
result = mSystem->getNumDrivers(&numdrivers);
|
result = mSystem->getNumDrivers(&numdrivers);
|
||||||
@@ -173,7 +174,7 @@ bool LLAudioEngine_FMODEX::init(const S32 num_channels, void* userdata)
|
|||||||
#endif //LL_WINDOWS
|
#endif //LL_WINDOWS
|
||||||
|
|
||||||
// In this case, all sounds, PLUS wind and stream will be software.
|
// In this case, all sounds, PLUS wind and stream will be software.
|
||||||
result = mSystem->setSoftwareChannels(num_channels+2);
|
result = mSystem->setSoftwareChannels(num_channels + 2);
|
||||||
Check_FMOD_Error(result,"FMOD::System::setSoftwareChannels");
|
Check_FMOD_Error(result,"FMOD::System::setSoftwareChannels");
|
||||||
|
|
||||||
U32 fmod_flags = FMOD_INIT_NORMAL;
|
U32 fmod_flags = FMOD_INIT_NORMAL;
|
||||||
@@ -181,73 +182,67 @@ bool LLAudioEngine_FMODEX::init(const S32 num_channels, void* userdata)
|
|||||||
fmod_flags |= FMOD_INIT_ENABLE_PROFILE;
|
fmod_flags |= FMOD_INIT_ENABLE_PROFILE;
|
||||||
|
|
||||||
#if LL_LINUX
|
#if LL_LINUX
|
||||||
// If we don't set an output method, Linux FMOD always
|
|
||||||
// decides on OSS and fails otherwise. So we'll manually
|
|
||||||
// try ESD, then OSS, then ALSA.
|
|
||||||
// Why this order? See SL-13250, but in short, OSS emulated
|
|
||||||
// on top of ALSA is ironically more reliable than raw ALSA.
|
|
||||||
// Ack, and ESD has more reliable failure modes - but has worse
|
|
||||||
// latency - than all of them, so wins for now.
|
|
||||||
bool audio_ok = false;
|
bool audio_ok = false;
|
||||||
|
|
||||||
if (!audio_ok)
|
if (!audio_ok)
|
||||||
{
|
{
|
||||||
if (NULL == getenv("LL_BAD_FMODEX_ESD")) /*Flawfinder: ignore*/
|
if (NULL == getenv("LL_BAD_FMOD_PULSEAUDIO")) /*Flawfinder: ignore*/
|
||||||
{
|
{
|
||||||
LL_DEBUGS("AppInit") << "Trying ESD audio output..." << LL_ENDL;
|
LL_DEBUGS("AppInit") << "Trying PulseAudio audio output..." << LL_ENDL;
|
||||||
if(mSystem->SetOutput(FMOD_OUTPUTTYPE_ESD) == FMOD_OK &&
|
if(mSystem->setOutput(FMOD_OUTPUTTYPE_PULSEAUDIO) == FMOD_OK &&
|
||||||
(result = mSystem->init(num_channels, fmod_flags, 0)) == FMOD_OK)
|
(result = mSystem->init(num_channels + 2, fmod_flags, 0)) == FMOD_OK)
|
||||||
{
|
{
|
||||||
LL_DEBUGS("AppInit") << "ESD audio output initialized OKAY" << LL_ENDL;
|
LL_DEBUGS("AppInit") << "PulseAudio output initialized OKAY" << LL_ENDL;
|
||||||
audio_ok = true;
|
audio_ok = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Check_FMOD_Error(result, "ESD audio output FAILED to initialize");
|
Check_FMOD_Error(result, "PulseAudio audio output FAILED to initialize");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LL_DEBUGS("AppInit") << "ESD audio output SKIPPED" << LL_ENDL;
|
LL_DEBUGS("AppInit") << "PulseAudio audio output SKIPPED" << LL_ENDL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!audio_ok)
|
if (!audio_ok)
|
||||||
{
|
{
|
||||||
if (NULL == getenv("LL_BAD_FMODEX_OSS")) /*Flawfinder: ignore*/
|
if (NULL == getenv("LL_BAD_FMOD_ALSA")) /*Flawfinder: ignore*/
|
||||||
{
|
{
|
||||||
LL_DEBUGS("AppInit") << "Trying OSS audio output..." << LL_ENDL;
|
LL_DEBUGS("AppInit") << "Trying ALSA audio output..." << LL_ENDL;
|
||||||
if(mSystem->SetOutput(FMOD_OUTPUTTYPE_OSS) == FMOD_OK &&
|
if(mSystem->setOutput(FMOD_OUTPUTTYPE_ALSA) == FMOD_OK &&
|
||||||
(result = mSystem->init(num_channels, fmod_flags, 0)) == FMOD_OK)
|
(result = mSystem->init(num_channels + 2, fmod_flags, 0)) == FMOD_OK)
|
||||||
{
|
{
|
||||||
LL_DEBUGS("AppInit") << "OSS audio output initialized OKAY" << LL_ENDL;
|
LL_DEBUGS("AppInit") << "ALSA audio output initialized OKAY" << LL_ENDL;
|
||||||
audio_ok = true;
|
audio_ok = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Check_FMOD_Error(result, "OSS audio output FAILED to initialize" << LL_ENDL;
|
Check_FMOD_Error(result, "ALSA audio output FAILED to initialize");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LL_DEBUGS("AppInit") << "OSS audio output SKIPPED" << LL_ENDL;
|
LL_DEBUGS("AppInit") << "ALSA audio output SKIPPED" << LL_ENDL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!audio_ok)
|
if (!audio_ok)
|
||||||
{
|
{
|
||||||
if (NULL == getenv("LL_BAD_FMODEX_ALSA")) /*Flawfinder: ignore*/
|
if (NULL == getenv("LL_BAD_FMOD_OSS")) /*Flawfinder: ignore*/
|
||||||
{
|
{
|
||||||
LL_DEBUGS("AppInit") << "Trying ALSA audio output..." << LL_ENDL;
|
LL_DEBUGS("AppInit") << "Trying OSS audio output..." << LL_ENDL;
|
||||||
if(mSystem->SetOutput(FMOD_OUTPUTTYPE_ALSA) &&
|
if(mSystem->setOutput(FMOD_OUTPUTTYPE_OSS) == FMOD_OK &&
|
||||||
(result = mSystem->init(num_channels, fmod_flags, 0)) == FMOD_OK)
|
(result = mSystem->init(num_channels + 2, fmod_flags, 0)) == FMOD_OK)
|
||||||
{
|
{
|
||||||
LL_DEBUGS("AppInit") << "ALSA audio output initialized OKAY" << LL_ENDL;
|
LL_DEBUGS("AppInit") << "OSS audio output initialized OKAY" << LL_ENDL;
|
||||||
audio_ok = true;
|
audio_ok = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Check_FMOD_Error(result, "ALSA audio output FAILED to initialize");
|
Check_FMOD_Error(result, "OSS audio output FAILED to initialize");
|
||||||
}
|
}
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
LL_DEBUGS("AppInit") << "OSS audio output SKIPPED" << LL_ENDL;
|
LL_DEBUGS("AppInit") << "OSS audio output SKIPPED" << LL_ENDL;
|
||||||
}
|
}
|
||||||
@@ -258,25 +253,20 @@ bool LLAudioEngine_FMODEX::init(const S32 num_channels, void* userdata)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// On Linux, FMOD causes a SIGPIPE for some netstream error
|
|
||||||
// conditions (an FMOD bug); ignore SIGPIPE so it doesn't crash us.
|
|
||||||
// NOW FIXED in FMOD 3.x since 2006-10-01.
|
|
||||||
//signal(SIGPIPE, SIG_IGN);
|
|
||||||
|
|
||||||
// We're interested in logging which output method we
|
// We're interested in logging which output method we
|
||||||
// ended up with, for QA purposes.
|
// ended up with, for QA purposes.
|
||||||
FMOD_OUTPUTTYPE output_type;
|
FMOD_OUTPUTTYPE output_type;
|
||||||
mSystem->getOutput(output_type);
|
mSystem->getOutput(&output_type);
|
||||||
switch (output_type)
|
switch (output_type)
|
||||||
{
|
{
|
||||||
case FSOUND_OUTPUT_NOSOUND:
|
case FMOD_OUTPUTTYPE_NOSOUND:
|
||||||
LL_DEBUGS("AppInit") << "Audio output: NoSound" << LL_ENDL; break;
|
LL_INFOS("AppInit") << "Audio output: NoSound" << LL_ENDL; break;
|
||||||
case FSOUND_OUTPUT_OSS:
|
case FMOD_OUTPUTTYPE_PULSEAUDIO:
|
||||||
LL_DEBUGS("AppInit") << "Audio output: OSS" << LL_ENDL; break;
|
LL_INFOS("AppInit") << "Audio output: PulseAudio" << LL_ENDL; break;
|
||||||
case FSOUND_OUTPUT_ESD:
|
case FMOD_OUTPUTTYPE_ALSA:
|
||||||
LL_DEBUGS("AppInit") << "Audio output: ESD" << LL_ENDL; break;
|
LL_INFOS("AppInit") << "Audio output: ALSA" << LL_ENDL; break;
|
||||||
case FSOUND_OUTPUT_ALSA:
|
case FMOD_OUTPUTTYPE_OSS:
|
||||||
LL_DEBUGS("AppInit") << "Audio output: ALSA" << LL_ENDL; break;
|
LL_INFOS("AppInit") << "Audio output: OSS" << LL_ENDL; break;
|
||||||
default:
|
default:
|
||||||
LL_INFOS("AppInit") << "Audio output: Unknown!" << LL_ENDL; break;
|
LL_INFOS("AppInit") << "Audio output: Unknown!" << LL_ENDL; break;
|
||||||
};
|
};
|
||||||
@@ -295,9 +285,9 @@ bool LLAudioEngine_FMODEX::init(const S32 num_channels, void* userdata)
|
|||||||
/*
|
/*
|
||||||
... and re-init.
|
... and re-init.
|
||||||
*/
|
*/
|
||||||
result = mSystem->init(100, FMOD_INIT_NORMAL, 0);
|
result = mSystem->init( num_channels + 2, fmod_flags, 0);
|
||||||
}
|
}
|
||||||
if(Check_FMOD_Error(result, "Error initializing FMOD"))
|
if(Check_FMOD_Error(result, "Error initializing FMOD Ex"))
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -305,7 +295,7 @@ bool LLAudioEngine_FMODEX::init(const S32 num_channels, void* userdata)
|
|||||||
if (!getStreamingAudioImpl()) // no existing implementation added
|
if (!getStreamingAudioImpl()) // no existing implementation added
|
||||||
setStreamingAudioImpl(new LLStreamingAudio_FMODEX(mSystem));
|
setStreamingAudioImpl(new LLStreamingAudio_FMODEX(mSystem));
|
||||||
|
|
||||||
LL_DEBUGS("AppInit") << "LLAudioEngine_FMODEX::init() FMOD initialized correctly" << LL_ENDL;
|
LL_INFOS("AppInit") << "LLAudioEngine_FMODEX::init() FMOD Ex initialized correctly" << LL_ENDL;
|
||||||
|
|
||||||
mInited = true;
|
mInited = true;
|
||||||
|
|
||||||
@@ -321,10 +311,10 @@ std::string LLAudioEngine_FMODEX::getDriverName(bool verbose)
|
|||||||
U32 version;
|
U32 version;
|
||||||
if(!Check_FMOD_Error(mSystem->getVersion(&version), "FMOD::System::getVersion"))
|
if(!Check_FMOD_Error(mSystem->getVersion(&version), "FMOD::System::getVersion"))
|
||||||
{
|
{
|
||||||
return llformat("FMOD version %1x.%02x.%02x", version >> 16, version >> 8 & 0x000000FF, version & 0x000000FF);
|
return llformat("FMOD Ex %1x.%02x.%02x", version >> 16, version >> 8 & 0x000000FF, version & 0x000000FF);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return "FMOD";
|
return "FMODEx";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -342,12 +332,13 @@ void LLAudioEngine_FMODEX::shutdown()
|
|||||||
{
|
{
|
||||||
stopInternetStream();
|
stopInternetStream();
|
||||||
|
|
||||||
|
llinfos << "About to LLAudioEngine::shutdown()" << llendl;
|
||||||
LLAudioEngine::shutdown();
|
LLAudioEngine::shutdown();
|
||||||
|
|
||||||
llinfos << "LLAudioEngine_FMODEX::shutdown() closing FMOD" << llendl;
|
llinfos << "LLAudioEngine_FMODEX::shutdown() closing FMOD Ex" << llendl;
|
||||||
mSystem->close();
|
mSystem->close();
|
||||||
mSystem->release();
|
mSystem->release();
|
||||||
llinfos << "LLAudioEngine_FMODEX::shutdown() done closing FMOD" << llendl;
|
llinfos << "LLAudioEngine_FMODEX::shutdown() done closing FMOD Ex" << llendl;
|
||||||
|
|
||||||
delete mListenerp;
|
delete mListenerp;
|
||||||
mListenerp = NULL;
|
mListenerp = NULL;
|
||||||
@@ -374,6 +365,7 @@ bool LLAudioEngine_FMODEX::initWind()
|
|||||||
FMOD_DSP_DESCRIPTION dspdesc;
|
FMOD_DSP_DESCRIPTION dspdesc;
|
||||||
memset(&dspdesc, 0, sizeof(FMOD_DSP_DESCRIPTION)); //Set everything to zero
|
memset(&dspdesc, 0, sizeof(FMOD_DSP_DESCRIPTION)); //Set everything to zero
|
||||||
strncpy(dspdesc.name,"Wind Unit", sizeof(dspdesc.name)); //Set name to "Wind Unit"
|
strncpy(dspdesc.name,"Wind Unit", sizeof(dspdesc.name)); //Set name to "Wind Unit"
|
||||||
|
dspdesc.channels=2;
|
||||||
dspdesc.read = &windCallback; //Assign callback.
|
dspdesc.read = &windCallback; //Assign callback.
|
||||||
if(Check_FMOD_Error(mSystem->createDSP(&dspdesc, &mWindDSP), "FMOD::createDSP"))
|
if(Check_FMOD_Error(mSystem->createDSP(&dspdesc, &mWindDSP), "FMOD::createDSP"))
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ S32 check_for_invalid_wav_formats(const std::string& in_fname, std::string& erro
|
|||||||
|
|
||||||
// ********************************
|
// ********************************
|
||||||
LLAPRFile infile ;
|
LLAPRFile infile ;
|
||||||
infile.open(in_fname,LL_APR_RB);
|
infile.open(in_fname,LL_APR_RB);
|
||||||
// ********************************
|
// ********************************
|
||||||
if (!infile.getFileHandle())
|
if (!infile.getFileHandle())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
#include "llapr.h"
|
#include "llapr.h"
|
||||||
|
|
||||||
|
|
||||||
using namespace std;
|
//using namespace std;
|
||||||
|
|
||||||
#define INCHES_TO_METERS 0.02540005f
|
#define INCHES_TO_METERS 0.02540005f
|
||||||
|
|
||||||
|
|||||||
@@ -56,8 +56,7 @@ LLCharacter::LLCharacter()
|
|||||||
mPreferredPelvisHeight( 0.f ),
|
mPreferredPelvisHeight( 0.f ),
|
||||||
mSex( SEX_FEMALE ),
|
mSex( SEX_FEMALE ),
|
||||||
mAppearanceSerialNum( 0 ),
|
mAppearanceSerialNum( 0 ),
|
||||||
mSkeletonSerialNum( 0 ),
|
mSkeletonSerialNum( 0 )
|
||||||
mInAppearance( false )
|
|
||||||
{
|
{
|
||||||
llassert_always(sAllowInstancesChange) ;
|
llassert_always(sAllowInstancesChange) ;
|
||||||
sInstances.push_back(this);
|
sInstances.push_back(this);
|
||||||
|
|||||||
@@ -268,10 +268,6 @@ public:
|
|||||||
ESex getSex() const { return mSex; }
|
ESex getSex() const { return mSex; }
|
||||||
void setSex( ESex sex ) { mSex = sex; }
|
void setSex( ESex sex ) { mSex = sex; }
|
||||||
|
|
||||||
// set appearance flag
|
|
||||||
void setAppearanceFlag( bool flag ) { mInAppearance = flag; }
|
|
||||||
bool getAppearanceFlag() { return mInAppearance; }
|
|
||||||
|
|
||||||
U32 getAppearanceSerialNum() const { return mAppearanceSerialNum; }
|
U32 getAppearanceSerialNum() const { return mAppearanceSerialNum; }
|
||||||
void setAppearanceSerialNum( U32 num ) { mAppearanceSerialNum = num; }
|
void setAppearanceSerialNum( U32 num ) { mAppearanceSerialNum = num; }
|
||||||
|
|
||||||
@@ -293,8 +289,6 @@ protected:
|
|||||||
U32 mSkeletonSerialNum;
|
U32 mSkeletonSerialNum;
|
||||||
LLAnimPauseRequest mPauseRequest;
|
LLAnimPauseRequest mPauseRequest;
|
||||||
|
|
||||||
BOOL mInAppearance;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// visual parameter stuff
|
// visual parameter stuff
|
||||||
typedef std::map<S32, LLVisualParam *> visual_param_index_map_t;
|
typedef std::map<S32, LLVisualParam *> visual_param_index_map_t;
|
||||||
|
|||||||
@@ -1,31 +1,25 @@
|
|||||||
/**
|
/**
|
||||||
* @file llgesture.cpp
|
* @file llgesture.cpp
|
||||||
*
|
*
|
||||||
* $LicenseInfo:firstyear=2002&license=viewergpl$
|
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
|
||||||
*
|
|
||||||
* Copyright (c) 2002-2009, Linden Research, Inc.
|
|
||||||
*
|
|
||||||
* Second Life Viewer Source Code
|
* Second Life Viewer Source Code
|
||||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
* Copyright (C) 2010, Linden Research, Inc.
|
||||||
* to you under the terms of the GNU General Public License, version 2.0
|
|
||||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
|
||||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
|
||||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
|
||||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
|
||||||
*
|
*
|
||||||
* There are special exceptions to the terms and conditions of the GPL as
|
* This library is free software; you can redistribute it and/or
|
||||||
* it is applied to this Source Code. View the full text of the exception
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
* License as published by the Free Software Foundation;
|
||||||
* online at
|
* version 2.1 of the License only.
|
||||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
|
||||||
*
|
*
|
||||||
* By copying, modifying or distributing this software, you acknowledge
|
* This library is distributed in the hope that it will be useful,
|
||||||
* that you have read and understood your obligations described above,
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* and agree to abide by those obligations.
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
* License along with this library; if not, write to the Free Software
|
||||||
* COMPLETENESS OR PERFORMANCE.
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||||
* $/LicenseInfo$
|
* $/LicenseInfo$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -3,31 +3,25 @@
|
|||||||
* @brief A gesture is a combination of a triggering chat phrase or
|
* @brief A gesture is a combination of a triggering chat phrase or
|
||||||
* key, a sound, an animation, and a chat string.
|
* key, a sound, an animation, and a chat string.
|
||||||
*
|
*
|
||||||
* $LicenseInfo:firstyear=2002&license=viewergpl$
|
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
|
||||||
*
|
|
||||||
* Copyright (c) 2002-2009, Linden Research, Inc.
|
|
||||||
*
|
|
||||||
* Second Life Viewer Source Code
|
* Second Life Viewer Source Code
|
||||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
* Copyright (C) 2010, Linden Research, Inc.
|
||||||
* to you under the terms of the GNU General Public License, version 2.0
|
|
||||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
|
||||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
|
||||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
|
||||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
|
||||||
*
|
*
|
||||||
* There are special exceptions to the terms and conditions of the GPL as
|
* This library is free software; you can redistribute it and/or
|
||||||
* it is applied to this Source Code. View the full text of the exception
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
* License as published by the Free Software Foundation;
|
||||||
* online at
|
* version 2.1 of the License only.
|
||||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
|
||||||
*
|
*
|
||||||
* By copying, modifying or distributing this software, you acknowledge
|
* This library is distributed in the hope that it will be useful,
|
||||||
* that you have read and understood your obligations described above,
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* and agree to abide by those obligations.
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
* License along with this library; if not, write to the Free Software
|
||||||
* COMPLETENESS OR PERFORMANCE.
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||||
* $/LicenseInfo$
|
* $/LicenseInfo$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -510,20 +510,6 @@ BOOL LLEyeMotion::onUpdate(F32 time, U8* joint_mask)
|
|||||||
vergence_quat.transQuat();
|
vergence_quat.transQuat();
|
||||||
right_eye_rot = vergence_quat * eye_jitter_rot * right_eye_rot;
|
right_eye_rot = vergence_quat * eye_jitter_rot * right_eye_rot;
|
||||||
|
|
||||||
//if in appearance, set the eyes straight forward
|
|
||||||
if(mCharacter->getAppearanceFlag()) // no idea why this variable is reversed
|
|
||||||
{
|
|
||||||
LLVector3 forward(1.f, 0.0, 0.0);
|
|
||||||
LLVector3 left;
|
|
||||||
LLVector3 up;
|
|
||||||
left.setVec(forward % forward);
|
|
||||||
up.setVec(forward % left);
|
|
||||||
target_eye_rot = LLQuaternion(forward, left, up);
|
|
||||||
mLeftEyeState->setRotation( target_eye_rot );
|
|
||||||
mRightEyeState->setRotation( target_eye_rot );
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
mLeftEyeState->setRotation( left_eye_rot );
|
mLeftEyeState->setRotation( left_eye_rot );
|
||||||
mRightEyeState->setRotation( right_eye_rot );
|
mRightEyeState->setRotation( right_eye_rot );
|
||||||
|
|
||||||
|
|||||||
@@ -480,7 +480,7 @@ LLPointer<LLJointState>& LLKeyframeMotion::getJointState(U32 index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// getJoin()
|
// getJoint()
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
LLJoint* LLKeyframeMotion::getJoint(U32 index)
|
LLJoint* LLKeyframeMotion::getJoint(U32 index)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2,31 +2,25 @@
|
|||||||
* @file llmultigesture.cpp
|
* @file llmultigesture.cpp
|
||||||
* @brief Gestures that are asset-based and can have multiple steps.
|
* @brief Gestures that are asset-based and can have multiple steps.
|
||||||
*
|
*
|
||||||
* $LicenseInfo:firstyear=2004&license=viewergpl$
|
* $LicenseInfo:firstyear=2004&license=viewerlgpl$
|
||||||
*
|
|
||||||
* Copyright (c) 2004-2009, Linden Research, Inc.
|
|
||||||
*
|
|
||||||
* Second Life Viewer Source Code
|
* Second Life Viewer Source Code
|
||||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
* Copyright (C) 2010, Linden Research, Inc.
|
||||||
* to you under the terms of the GNU General Public License, version 2.0
|
|
||||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
|
||||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
|
||||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
|
||||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
|
||||||
*
|
*
|
||||||
* There are special exceptions to the terms and conditions of the GPL as
|
* This library is free software; you can redistribute it and/or
|
||||||
* it is applied to this Source Code. View the full text of the exception
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
* License as published by the Free Software Foundation;
|
||||||
* online at
|
* version 2.1 of the License only.
|
||||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
|
||||||
*
|
*
|
||||||
* By copying, modifying or distributing this software, you acknowledge
|
* This library is distributed in the hope that it will be useful,
|
||||||
* that you have read and understood your obligations described above,
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* and agree to abide by those obligations.
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
* License along with this library; if not, write to the Free Software
|
||||||
* COMPLETENESS OR PERFORMANCE.
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||||
* $/LicenseInfo$
|
* $/LicenseInfo$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -50,6 +44,7 @@ const S32 GESTURE_VERSION = 2;
|
|||||||
LLMultiGesture::LLMultiGesture()
|
LLMultiGesture::LLMultiGesture()
|
||||||
: mKey(),
|
: mKey(),
|
||||||
mMask(),
|
mMask(),
|
||||||
|
mName(),
|
||||||
mTrigger(),
|
mTrigger(),
|
||||||
mReplaceText(),
|
mReplaceText(),
|
||||||
mSteps(),
|
mSteps(),
|
||||||
@@ -292,20 +287,27 @@ BOOL LLGestureStepAnimation::deserialize(LLDataPacker& dp)
|
|||||||
dp.unpackU32(mFlags, "flags");
|
dp.unpackU32(mFlags, "flags");
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
// *NOTE: result is translated in LLPreviewGesture::getLabel()
|
||||||
std::string LLGestureStepAnimation::getLabel() const
|
std::vector<std::string> LLGestureStepAnimation::getLabel() const
|
||||||
{
|
{
|
||||||
std::string label;
|
std::vector<std::string> strings;
|
||||||
|
|
||||||
|
// std::string label;
|
||||||
if (mFlags & ANIM_FLAG_STOP)
|
if (mFlags & ANIM_FLAG_STOP)
|
||||||
{
|
{
|
||||||
label = "Stop Animation: ";
|
strings.push_back( "AnimFlagStop");
|
||||||
|
|
||||||
|
// label = "Stop Animation: ";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
label = "Start Animation: ";
|
strings.push_back( "AnimFlagStart");
|
||||||
|
|
||||||
|
// label = "Start Animation: ";
|
||||||
}
|
}
|
||||||
label += mAnimName;
|
strings.push_back( mAnimName);
|
||||||
return label;
|
// label += mAnimName;
|
||||||
|
return strings;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLGestureStepAnimation::dump()
|
void LLGestureStepAnimation::dump()
|
||||||
@@ -359,12 +361,15 @@ BOOL LLGestureStepSound::deserialize(LLDataPacker& dp)
|
|||||||
dp.unpackU32(mFlags, "flags");
|
dp.unpackU32(mFlags, "flags");
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
// *NOTE: result is translated in LLPreviewGesture::getLabel()
|
||||||
std::string LLGestureStepSound::getLabel() const
|
std::vector<std::string> LLGestureStepSound::getLabel() const
|
||||||
{
|
{
|
||||||
std::string label("Sound: ");
|
std::vector<std::string> strings;
|
||||||
label += mSoundName;
|
strings.push_back( "Sound");
|
||||||
return label;
|
strings.push_back( mSoundName);
|
||||||
|
// std::string label("Sound: ");
|
||||||
|
// label += mSoundName;
|
||||||
|
return strings;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLGestureStepSound::dump()
|
void LLGestureStepSound::dump()
|
||||||
@@ -414,12 +419,13 @@ BOOL LLGestureStepChat::deserialize(LLDataPacker& dp)
|
|||||||
dp.unpackU32(mFlags, "flags");
|
dp.unpackU32(mFlags, "flags");
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
// *NOTE: result is translated in LLPreviewGesture::getLabel()
|
||||||
std::string LLGestureStepChat::getLabel() const
|
std::vector<std::string> LLGestureStepChat::getLabel() const
|
||||||
{
|
{
|
||||||
std::string label("Chat: ");
|
std::vector<std::string> strings;
|
||||||
label += mChatText;
|
strings.push_back("Chat");
|
||||||
return label;
|
strings.push_back(mChatText);
|
||||||
|
return strings;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLGestureStepChat::dump()
|
void LLGestureStepChat::dump()
|
||||||
@@ -467,22 +473,31 @@ BOOL LLGestureStepWait::deserialize(LLDataPacker& dp)
|
|||||||
dp.unpackU32(mFlags, "flags");
|
dp.unpackU32(mFlags, "flags");
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
// *NOTE: result is translated in LLPreviewGesture::getLabel()
|
||||||
std::string LLGestureStepWait::getLabel() const
|
std::vector<std::string> LLGestureStepWait::getLabel() const
|
||||||
{
|
{
|
||||||
std::string label("--- Wait: ");
|
std::vector<std::string> strings;
|
||||||
|
strings.push_back( "Wait" );
|
||||||
|
|
||||||
|
// std::string label("--- Wait: ");
|
||||||
if (mFlags & WAIT_FLAG_TIME)
|
if (mFlags & WAIT_FLAG_TIME)
|
||||||
{
|
{
|
||||||
char buffer[64]; /* Flawfinder: ignore */
|
char buffer[64]; /* Flawfinder: ignore */
|
||||||
snprintf(buffer, sizeof(buffer), "%.1f seconds", (double)mWaitSeconds); /* Flawfinder: ignore */
|
snprintf(buffer, sizeof(buffer), "%.1f seconds", (double)mWaitSeconds); /* Flawfinder: ignore */
|
||||||
label += buffer;
|
strings.push_back(buffer);
|
||||||
|
// label += buffer;
|
||||||
}
|
}
|
||||||
else if (mFlags & WAIT_FLAG_ALL_ANIM)
|
else if (mFlags & WAIT_FLAG_ALL_ANIM)
|
||||||
{
|
{
|
||||||
label += "until animations are done";
|
strings.push_back("until animations are done");
|
||||||
|
// label += "until animations are done";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
strings.push_back("");
|
||||||
}
|
}
|
||||||
|
|
||||||
return label;
|
return strings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -70,6 +70,10 @@ public:
|
|||||||
KEY mKey;
|
KEY mKey;
|
||||||
MASK mMask;
|
MASK mMask;
|
||||||
|
|
||||||
|
// This name can be empty if the inventory item is not around and
|
||||||
|
// the gesture manager has not yet set the name
|
||||||
|
std::string mName;
|
||||||
|
|
||||||
// String, like "/foo" or "hello" that makes it play
|
// String, like "/foo" or "hello" that makes it play
|
||||||
std::string mTrigger;
|
std::string mTrigger;
|
||||||
|
|
||||||
@@ -130,7 +134,7 @@ public:
|
|||||||
virtual EStepType getType() = 0;
|
virtual EStepType getType() = 0;
|
||||||
|
|
||||||
// Return a user-readable label for this step
|
// Return a user-readable label for this step
|
||||||
virtual std::string getLabel() const = 0;
|
virtual std::vector<std::string> getLabel() const = 0;
|
||||||
|
|
||||||
virtual S32 getMaxSerialSize() const = 0;
|
virtual S32 getMaxSerialSize() const = 0;
|
||||||
virtual BOOL serialize(LLDataPacker& dp) const = 0;
|
virtual BOOL serialize(LLDataPacker& dp) const = 0;
|
||||||
@@ -152,7 +156,7 @@ public:
|
|||||||
|
|
||||||
virtual EStepType getType() { return STEP_ANIMATION; }
|
virtual EStepType getType() { return STEP_ANIMATION; }
|
||||||
|
|
||||||
virtual std::string getLabel() const;
|
virtual std::vector<std::string> getLabel() const;
|
||||||
|
|
||||||
virtual S32 getMaxSerialSize() const;
|
virtual S32 getMaxSerialSize() const;
|
||||||
virtual BOOL serialize(LLDataPacker& dp) const;
|
virtual BOOL serialize(LLDataPacker& dp) const;
|
||||||
@@ -175,7 +179,7 @@ public:
|
|||||||
|
|
||||||
virtual EStepType getType() { return STEP_SOUND; }
|
virtual EStepType getType() { return STEP_SOUND; }
|
||||||
|
|
||||||
virtual std::string getLabel() const;
|
virtual std::vector<std::string> getLabel() const;
|
||||||
|
|
||||||
virtual S32 getMaxSerialSize() const;
|
virtual S32 getMaxSerialSize() const;
|
||||||
virtual BOOL serialize(LLDataPacker& dp) const;
|
virtual BOOL serialize(LLDataPacker& dp) const;
|
||||||
@@ -198,7 +202,7 @@ public:
|
|||||||
|
|
||||||
virtual EStepType getType() { return STEP_CHAT; }
|
virtual EStepType getType() { return STEP_CHAT; }
|
||||||
|
|
||||||
virtual std::string getLabel() const;
|
virtual std::vector<std::string> getLabel() const;
|
||||||
|
|
||||||
virtual S32 getMaxSerialSize() const;
|
virtual S32 getMaxSerialSize() const;
|
||||||
virtual BOOL serialize(LLDataPacker& dp) const;
|
virtual BOOL serialize(LLDataPacker& dp) const;
|
||||||
@@ -223,7 +227,7 @@ public:
|
|||||||
|
|
||||||
virtual EStepType getType() { return STEP_WAIT; }
|
virtual EStepType getType() { return STEP_WAIT; }
|
||||||
|
|
||||||
virtual std::string getLabel() const;
|
virtual std::vector<std::string> getLabel() const;
|
||||||
|
|
||||||
virtual S32 getMaxSerialSize() const;
|
virtual S32 getMaxSerialSize() const;
|
||||||
virtual BOOL serialize(LLDataPacker& dp) const;
|
virtual BOOL serialize(LLDataPacker& dp) const;
|
||||||
|
|||||||
@@ -2,31 +2,25 @@
|
|||||||
* @file llvisualparam.cpp
|
* @file llvisualparam.cpp
|
||||||
* @brief Implementation of LLPolyMesh class.
|
* @brief Implementation of LLPolyMesh class.
|
||||||
*
|
*
|
||||||
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
|
||||||
*
|
|
||||||
* Copyright (c) 2001-2009, Linden Research, Inc.
|
|
||||||
*
|
|
||||||
* Second Life Viewer Source Code
|
* Second Life Viewer Source Code
|
||||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
* Copyright (C) 2010, Linden Research, Inc.
|
||||||
* to you under the terms of the GNU General Public License, version 2.0
|
|
||||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
|
||||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
|
||||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
|
||||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
|
||||||
*
|
*
|
||||||
* There are special exceptions to the terms and conditions of the GPL as
|
* This library is free software; you can redistribute it and/or
|
||||||
* it is applied to this Source Code. View the full text of the exception
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
* License as published by the Free Software Foundation;
|
||||||
* online at
|
* version 2.1 of the License only.
|
||||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
|
||||||
*
|
*
|
||||||
* By copying, modifying or distributing this software, you acknowledge
|
* This library is distributed in the hope that it will be useful,
|
||||||
* that you have read and understood your obligations described above,
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* and agree to abide by those obligations.
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
* License along with this library; if not, write to the Free Software
|
||||||
* COMPLETENESS OR PERFORMANCE.
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||||
* $/LicenseInfo$
|
* $/LicenseInfo$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -2,31 +2,25 @@
|
|||||||
* @file llvisualparam.h
|
* @file llvisualparam.h
|
||||||
* @brief Implementation of LLPolyMesh class.
|
* @brief Implementation of LLPolyMesh class.
|
||||||
*
|
*
|
||||||
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
|
||||||
*
|
|
||||||
* Copyright (c) 2001-2009, Linden Research, Inc.
|
|
||||||
*
|
|
||||||
* Second Life Viewer Source Code
|
* Second Life Viewer Source Code
|
||||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
* Copyright (C) 2010, Linden Research, Inc.
|
||||||
* to you under the terms of the GNU General Public License, version 2.0
|
|
||||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
|
||||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
|
||||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
|
||||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
|
||||||
*
|
*
|
||||||
* There are special exceptions to the terms and conditions of the GPL as
|
* This library is free software; you can redistribute it and/or
|
||||||
* it is applied to this Source Code. View the full text of the exception
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
* License as published by the Free Software Foundation;
|
||||||
* online at
|
* version 2.1 of the License only.
|
||||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
|
||||||
*
|
*
|
||||||
* By copying, modifying or distributing this software, you acknowledge
|
* This library is distributed in the hope that it will be useful,
|
||||||
* that you have read and understood your obligations described above,
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* and agree to abide by those obligations.
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
* License along with this library; if not, write to the Free Software
|
||||||
* COMPLETENESS OR PERFORMANCE.
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||||
* $/LicenseInfo$
|
* $/LicenseInfo$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -121,6 +121,7 @@ set(llcommon_HEADER_FILES
|
|||||||
llaprpool.h
|
llaprpool.h
|
||||||
llassettype.h
|
llassettype.h
|
||||||
llassoclist.h
|
llassoclist.h
|
||||||
|
llatomic.h
|
||||||
llavatarconstants.h
|
llavatarconstants.h
|
||||||
llbase32.h
|
llbase32.h
|
||||||
llbase64.h
|
llbase64.h
|
||||||
|
|||||||
@@ -26,8 +26,65 @@
|
|||||||
*
|
*
|
||||||
* 31/03/2010
|
* 31/03/2010
|
||||||
* Initial version, written by Aleric Inglewood @ SL
|
* Initial version, written by Aleric Inglewood @ SL
|
||||||
|
*
|
||||||
|
* 14/03/2012
|
||||||
|
* Added AIThreadSafeSingleThread and friends.
|
||||||
|
* Added AIAccessConst (and derived AIAccess from it) to allow read
|
||||||
|
* access to a const AIThreadSafeSimple.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// This file defines wrapper template classes for arbitrary types T
|
||||||
|
// adding locking to the instance and shielding it from access
|
||||||
|
// without first being locked.
|
||||||
|
//
|
||||||
|
// Locking and getting access works by creating a temporary (local)
|
||||||
|
// access object that takes the wrapper class as argument. Creating
|
||||||
|
// the access object obtains the lock, while destructing it releases
|
||||||
|
// the lock.
|
||||||
|
//
|
||||||
|
// There are three types of wrapper classes:
|
||||||
|
// AIThreadSafe, AIThreadSafeSimple and AIThreadSafeSingleThread.
|
||||||
|
//
|
||||||
|
// AIThreadSafe is for use with the access classes:
|
||||||
|
// AIReadAccessConst, AIReadAccess and AIWriteAccess.
|
||||||
|
//
|
||||||
|
// AIThreadSafeSimple is for use with the access classes:
|
||||||
|
// AIAccessConst and AIAccess.
|
||||||
|
//
|
||||||
|
// AIThreadSafeSingleThread is for use with the access classes:
|
||||||
|
// AISTAccessConst and AISTAccess.
|
||||||
|
//
|
||||||
|
// AIReadAccessConst provides read access to a const AIThreadSafe.
|
||||||
|
// AIReadAccess provides read access to a non-const AIThreadSafe.
|
||||||
|
// AIWriteAccess provides read/write access to a non-const AIThreadSafe.
|
||||||
|
//
|
||||||
|
// AIAccessConst provides read access to a const AIThreadSafeSimple.
|
||||||
|
// AIAccess provides read/write access to a non-const AIThreadSafeSimple.
|
||||||
|
//
|
||||||
|
// AISTAccessConst provides read access to a const AIThreadSafeSingleThread.
|
||||||
|
// AISTAccess provides read/write access to a non-const AIThreadSafeSingleThread.
|
||||||
|
//
|
||||||
|
// Thus, AIThreadSafe is to protect objects with a read/write lock,
|
||||||
|
// AIThreadSafeSimple is to protect objects with a single mutex,
|
||||||
|
// and AIThreadSafeSingleThread doesn't do any locking but makes sure
|
||||||
|
// (in Debug mode) that the wrapped object is only accessed by one thread.
|
||||||
|
//
|
||||||
|
// Each wrapper class allows its wrapped object to be constructed
|
||||||
|
// with arbitrary parameters by using operator new with placement;
|
||||||
|
// for example, to instantiate a class Foo with read/write locking:
|
||||||
|
//
|
||||||
|
// AIThreadSafe<Foo> foo(new (foo.memory()) Foo(param1, param2, ...));
|
||||||
|
//
|
||||||
|
// Each wrapper class has a derived class that end on 'DC' (which
|
||||||
|
// stand for Default Constructed): AIThreadSafeDC, AIThreadSafeSimpleDC
|
||||||
|
// and AIThreadSafeSingleThreadDC. The default constructors of those
|
||||||
|
// wrapper classes cause the wrapped instance to be default constructed
|
||||||
|
// as well. They also provide a general one-parameter constructor.
|
||||||
|
// For example:
|
||||||
|
//
|
||||||
|
// AIThreadSafeDC<Foo> foo; // Default constructed Foo.
|
||||||
|
// AIThreadSafeDC<Foo> foo(3.4); // Foo with one constructor parameter.
|
||||||
|
//
|
||||||
#ifndef AITHREADSAFE_H
|
#ifndef AITHREADSAFE_H
|
||||||
#define AITHREADSAFE_H
|
#define AITHREADSAFE_H
|
||||||
|
|
||||||
@@ -49,15 +106,10 @@
|
|||||||
template<typename T> struct AIReadAccessConst;
|
template<typename T> struct AIReadAccessConst;
|
||||||
template<typename T> struct AIReadAccess;
|
template<typename T> struct AIReadAccess;
|
||||||
template<typename T> struct AIWriteAccess;
|
template<typename T> struct AIWriteAccess;
|
||||||
|
template<typename T> struct AIAccessConst;
|
||||||
template<typename T> struct AIAccess;
|
template<typename T> struct AIAccess;
|
||||||
|
template<typename T> struct AISTAccessConst;
|
||||||
#if LL_WINDOWS
|
template<typename T> struct AISTAccess;
|
||||||
template<typename T> class AIThreadSafeBits;
|
|
||||||
template<typename T>
|
|
||||||
struct AIThreadSafeWindowsHack {
|
|
||||||
AIThreadSafeWindowsHack(AIThreadSafeBits<T>& var, T* object);
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
class AIThreadSafeBits
|
class AIThreadSafeBits
|
||||||
@@ -80,10 +132,15 @@ public:
|
|||||||
// Only for use by AITHREADSAFE, see below.
|
// Only for use by AITHREADSAFE, see below.
|
||||||
void* memory() const { return const_cast<long*>(&mMemory[0]); }
|
void* memory() const { return const_cast<long*>(&mMemory[0]); }
|
||||||
|
|
||||||
|
// Cast a T* back to AIThreadSafeBits<T>. This is the inverse of memory().
|
||||||
|
template<typename T2>
|
||||||
|
static AIThreadSafeBits<T2>* wrapper_cast(T2* ptr)
|
||||||
|
{ return reinterpret_cast<AIThreadSafeBits<T2>*>(reinterpret_cast<char*>(ptr) - offsetof(AIThreadSafeBits<T2>, mMemory[0])); }
|
||||||
|
template<typename T2>
|
||||||
|
static AIThreadSafeBits<T2> const* wrapper_cast(T2 const* ptr)
|
||||||
|
{ return reinterpret_cast<AIThreadSafeBits<T2> const*>(reinterpret_cast<char const*>(ptr) - offsetof(AIThreadSafeBits<T2>, mMemory[0])); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
#if LL_WINDOWS
|
|
||||||
template<typename T2> friend struct AIThreadSafeWindowsHack;
|
|
||||||
#endif
|
|
||||||
// Accessors.
|
// Accessors.
|
||||||
T const* ptr() const { return reinterpret_cast<T const*>(mMemory); }
|
T const* ptr() const { return reinterpret_cast<T const*>(mMemory); }
|
||||||
T* ptr() { return reinterpret_cast<T*>(mMemory); }
|
T* ptr() { return reinterpret_cast<T*>(mMemory); }
|
||||||
@@ -185,6 +242,14 @@ public:
|
|||||||
llassert(object == AIThreadSafeBits<T>::ptr());
|
llassert(object == AIThreadSafeBits<T>::ptr());
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if LL_DEBUG
|
||||||
|
// Can only be locked when there still exists an AIAccess object that
|
||||||
|
// references this object and will access it upon destruction.
|
||||||
|
// If the assertion fails, make sure that such AIAccess object is
|
||||||
|
// destructed before the deletion of this object.
|
||||||
|
~AIThreadSafe() { llassert(!mRWLock.isLocked()); }
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -194,48 +259,39 @@ public:
|
|||||||
*
|
*
|
||||||
* <code>
|
* <code>
|
||||||
* Foo foo(x, y);
|
* Foo foo(x, y);
|
||||||
* static Bar bar;
|
* static Bar bar(0.1, true);
|
||||||
* </code>
|
* </code>
|
||||||
*
|
*
|
||||||
* One can instantiate a thread-safe instance with
|
* One can instantiate a thread-safe instance with
|
||||||
*
|
*
|
||||||
* <code>
|
* <code>
|
||||||
* AITHREADSAFE(Foo, foo, (x, y));
|
* AITHREADSAFE(Foo, foo, (x, y));
|
||||||
* static AITHREADSAFE(Bar, bar, );
|
* static AITHREADSAFE(Bar, bar, (0.1, true));
|
||||||
* </code>
|
* </code>
|
||||||
*
|
*
|
||||||
* Note: This macro does not allow to allocate such object on the heap.
|
* Note: This macro does not allow to allocate such object on the heap.
|
||||||
* If that is needed, have a look at AIThreadSafeDC.
|
* If that is needed, have a look at AIThreadSafeDC.
|
||||||
*/
|
*/
|
||||||
#if LL_WINDOWS
|
|
||||||
template<typename T>
|
|
||||||
AIThreadSafeWindowsHack<T>::AIThreadSafeWindowsHack(AIThreadSafeBits<T>& var, T* object)
|
|
||||||
{
|
|
||||||
llassert(object == var.ptr());
|
|
||||||
}
|
|
||||||
#define AITHREADSAFE(type, var, paramlist) \
|
|
||||||
AIThreadSafe<type> var(NULL); \
|
|
||||||
AIThreadSafeWindowsHack<type> dummy_##var(var, new (var.memory()) type paramlist)
|
|
||||||
#else
|
|
||||||
#define AITHREADSAFE(type, var, paramlist) AIThreadSafe<type> var(new (var.memory()) type paramlist)
|
#define AITHREADSAFE(type, var, paramlist) AIThreadSafe<type> var(new (var.memory()) type paramlist)
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief A wrapper class for objects that need to be accessed by more than one thread.
|
* @brief A wrapper class for objects that need to be accessed by more than one thread.
|
||||||
*
|
*
|
||||||
* This class is the same as an AIThreadSafe wrapper, except that it can only
|
* This class is the same as an AIThreadSafe wrapper, except that it can only
|
||||||
* be used for default constructed objects.
|
* be used for default constructed objects, or constructed with one parameter.
|
||||||
*
|
*
|
||||||
* For example, instead of
|
* For example, instead of
|
||||||
*
|
*
|
||||||
* <code>
|
* <code>
|
||||||
* Foo foo;
|
* Foo foo;
|
||||||
|
* Bar bar(3);
|
||||||
* </code>
|
* </code>
|
||||||
*
|
*
|
||||||
* One would use
|
* One would use
|
||||||
*
|
*
|
||||||
* <code>
|
* <code>
|
||||||
* AIThreadSafeDC<Foo> foo;
|
* AIThreadSafeDC<Foo> foo;
|
||||||
|
* AIThreadSafeDC<Bar> bar(3);
|
||||||
* </code>
|
* </code>
|
||||||
*
|
*
|
||||||
* The advantage over AITHREADSAFE is that this object can be allocated with
|
* The advantage over AITHREADSAFE is that this object can be allocated with
|
||||||
@@ -253,6 +309,8 @@ class AIThreadSafeDC : public AIThreadSafe<T>
|
|||||||
public:
|
public:
|
||||||
// Construct a wrapper around a default constructed object.
|
// Construct a wrapper around a default constructed object.
|
||||||
AIThreadSafeDC(void) { new (AIThreadSafe<T>::ptr()) T; }
|
AIThreadSafeDC(void) { new (AIThreadSafe<T>::ptr()) T; }
|
||||||
|
// Allow an arbitrary parameter to be passed for construction.
|
||||||
|
template<typename T2> AIThreadSafeDC(T2 const& val) { new (AIThreadSafe<T>::ptr()) T(val); }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -390,6 +448,7 @@ struct AIWriteAccess : public AIReadAccess<T>
|
|||||||
*
|
*
|
||||||
* AIAccess<Foo> foo_w(foo);
|
* AIAccess<Foo> foo_w(foo);
|
||||||
* // Use foo_w-> for read and write access.
|
* // Use foo_w-> for read and write access.
|
||||||
|
* </code>
|
||||||
*
|
*
|
||||||
* See also AIThreadSafe
|
* See also AIThreadSafe
|
||||||
*/
|
*/
|
||||||
@@ -398,6 +457,7 @@ class AIThreadSafeSimple : public AIThreadSafeBits<T>
|
|||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
// Only this one may access the object (through ptr()).
|
// Only this one may access the object (through ptr()).
|
||||||
|
friend struct AIAccessConst<T>;
|
||||||
friend struct AIAccess<T>;
|
friend struct AIAccess<T>;
|
||||||
|
|
||||||
// Locking control.
|
// Locking control.
|
||||||
@@ -411,6 +471,14 @@ protected:
|
|||||||
public:
|
public:
|
||||||
// Only for use by AITHREADSAFESIMPLE, see below.
|
// Only for use by AITHREADSAFESIMPLE, see below.
|
||||||
AIThreadSafeSimple(T* object) { llassert(object == AIThreadSafeBits<T>::ptr()); }
|
AIThreadSafeSimple(T* object) { llassert(object == AIThreadSafeBits<T>::ptr()); }
|
||||||
|
|
||||||
|
#if LL_DEBUG
|
||||||
|
// Can only be locked when there still exists an AIAccess object that
|
||||||
|
// references this object and will access it upon destruction.
|
||||||
|
// If the assertion fails, make sure that such AIAccess object is
|
||||||
|
// destructed before the deletion of this object.
|
||||||
|
~AIThreadSafeSimple() { llassert(!mMutex.isLocked()); }
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -420,14 +488,14 @@ public:
|
|||||||
*
|
*
|
||||||
* <code>
|
* <code>
|
||||||
* Foo foo(x, y);
|
* Foo foo(x, y);
|
||||||
* static Bar bar;
|
* static Bar bar(0.1, true);
|
||||||
* </code>
|
* </code>
|
||||||
*
|
*
|
||||||
* One can instantiate a thread-safe instance with
|
* One can instantiate a thread-safe instance with
|
||||||
*
|
*
|
||||||
* <code>
|
* <code>
|
||||||
* AITHREADSAFESIMPLE(Foo, foo, (x, y));
|
* AITHREADSAFESIMPLE(Foo, foo, (x, y));
|
||||||
* static AITHREADSAFESIMPLE(Bar, bar, );
|
* static AITHREADSAFESIMPLE(Bar, bar, (0.1, true));
|
||||||
* </code>
|
* </code>
|
||||||
*
|
*
|
||||||
* Note: This macro does not allow to allocate such object on the heap.
|
* Note: This macro does not allow to allocate such object on the heap.
|
||||||
@@ -439,18 +507,20 @@ public:
|
|||||||
* @brief A wrapper class for objects that need to be accessed by more than one thread.
|
* @brief A wrapper class for objects that need to be accessed by more than one thread.
|
||||||
*
|
*
|
||||||
* This class is the same as an AIThreadSafeSimple wrapper, except that it can only
|
* This class is the same as an AIThreadSafeSimple wrapper, except that it can only
|
||||||
* be used for default constructed objects.
|
* be used for default constructed objects, or constructed with one parameter.
|
||||||
*
|
*
|
||||||
* For example, instead of
|
* For example, instead of
|
||||||
*
|
*
|
||||||
* <code>
|
* <code>
|
||||||
* Foo foo;
|
* Foo foo;
|
||||||
|
* Bar bar(0.1);
|
||||||
* </code>
|
* </code>
|
||||||
*
|
*
|
||||||
* One would use
|
* One would use
|
||||||
*
|
*
|
||||||
* <code>
|
* <code>
|
||||||
* AIThreadSafeSimpleDC<Foo> foo;
|
* AIThreadSafeSimpleDC<Foo> foo;
|
||||||
|
* AIThreadSafeSimpleDC<Bar> bar(0.1);
|
||||||
* </code>
|
* </code>
|
||||||
*
|
*
|
||||||
* The advantage over AITHREADSAFESIMPLE is that this object can be allocated with
|
* The advantage over AITHREADSAFESIMPLE is that this object can be allocated with
|
||||||
@@ -468,10 +538,12 @@ class AIThreadSafeSimpleDC : public AIThreadSafeSimple<T>
|
|||||||
public:
|
public:
|
||||||
// Construct a wrapper around a default constructed object.
|
// Construct a wrapper around a default constructed object.
|
||||||
AIThreadSafeSimpleDC(void) { new (AIThreadSafeSimple<T>::ptr()) T; }
|
AIThreadSafeSimpleDC(void) { new (AIThreadSafeSimple<T>::ptr()) T; }
|
||||||
|
// Allow an arbitrary parameter to be passed for construction.
|
||||||
|
template<typename T2> AIThreadSafeSimpleDC(T2 const& val) { new (AIThreadSafeSimple<T>::ptr()) T(val); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// For use by AIThreadSafeSimpleDCRootPool
|
// For use by AIThreadSafeSimpleDCRootPool
|
||||||
AIThreadSafeSimpleDC(LLAPRPool& parent) : AIThreadSafeSimple<T>(parent) { new (AIThreadSafeSimple<T>::ptr()) T; }
|
AIThreadSafeSimpleDC(LLAPRRootPool& parent) : AIThreadSafeSimple<T>(parent) { new (AIThreadSafeSimple<T>::ptr()) T; }
|
||||||
};
|
};
|
||||||
|
|
||||||
// Helper class for AIThreadSafeSimpleDCRootPool to assure initialization of
|
// Helper class for AIThreadSafeSimpleDCRootPool to assure initialization of
|
||||||
@@ -493,7 +565,7 @@ private:
|
|||||||
* for the internally used mutexes and condition, instead of using the current threads
|
* for the internally used mutexes and condition, instead of using the current threads
|
||||||
* root pool. The advantage of this is that it can be used for objects that need to
|
* root pool. The advantage of this is that it can be used for objects that need to
|
||||||
* be accessed from the destructors of global objects (after main). The disadvantage
|
* be accessed from the destructors of global objects (after main). The disadvantage
|
||||||
* is that it's less efficient to use your own root pool, therefore it's use should be
|
* is that it's less efficient to use your own root pool, therefore its use should be
|
||||||
* restricted to those cases where it is absolutely necessary.
|
* restricted to those cases where it is absolutely necessary.
|
||||||
*/
|
*/
|
||||||
template<typename T>
|
template<typename T>
|
||||||
@@ -509,13 +581,13 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Write lock object and provide read/write access.
|
* @brief Write lock object and provide read access.
|
||||||
*/
|
*/
|
||||||
template<typename T>
|
template<typename T>
|
||||||
struct AIAccess
|
struct AIAccessConst
|
||||||
{
|
{
|
||||||
//! Construct a AIAccess from a non-constant AIThreadSafeSimple.
|
//! Construct a AIAccessConst from a constant AIThreadSafeSimple.
|
||||||
AIAccess(AIThreadSafeSimple<T>& wrapper) : mWrapper(wrapper)
|
AIAccessConst(AIThreadSafeSimple<T> const& wrapper) : mWrapper(const_cast<AIThreadSafeSimple<T>&>(wrapper))
|
||||||
#if AI_NEED_ACCESS_CC
|
#if AI_NEED_ACCESS_CC
|
||||||
, mIsCopyConstructed(false)
|
, mIsCopyConstructed(false)
|
||||||
#endif
|
#endif
|
||||||
@@ -524,12 +596,12 @@ struct AIAccess
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Access the underlaying object for (read and) write access.
|
//! Access the underlaying object for (read and) write access.
|
||||||
T* operator->() const { return this->mWrapper.ptr(); }
|
T const* operator->() const { return this->mWrapper.ptr(); }
|
||||||
|
|
||||||
//! Access the underlaying object for (read and) write access.
|
//! Access the underlaying object for (read and) write access.
|
||||||
T& operator*() const { return *this->mWrapper.ptr(); }
|
T const& operator*() const { return *this->mWrapper.ptr(); }
|
||||||
|
|
||||||
~AIAccess()
|
~AIAccessConst()
|
||||||
{
|
{
|
||||||
#if AI_NEED_ACCESS_CC
|
#if AI_NEED_ACCESS_CC
|
||||||
if (mIsCopyConstructed) return;
|
if (mIsCopyConstructed) return;
|
||||||
@@ -538,17 +610,229 @@ struct AIAccess
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
AIThreadSafeSimple<T>& mWrapper; //!< Reference to the object that we provide access to.
|
AIThreadSafeSimple<T>& mWrapper; //!< Reference to the object that we provide access to.
|
||||||
|
|
||||||
#if AI_NEED_ACCESS_CC
|
#if AI_NEED_ACCESS_CC
|
||||||
bool mIsCopyConstructed;
|
bool mIsCopyConstructed;
|
||||||
public:
|
public:
|
||||||
AIAccess(AIAccess const& orig) : mWrapper(orig.mWrapper), mIsCopyConstructed(true) { }
|
AIAccessConst(AIAccessConst const& orig) : mWrapper(orig.mWrapper), mIsCopyConstructed(true) { }
|
||||||
#else
|
#else
|
||||||
private:
|
private:
|
||||||
// Disallow copy constructing directly.
|
// Disallow copy constructing directly.
|
||||||
AIAccess(AIAccess const&);
|
AIAccessConst(AIAccessConst const&);
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Write lock object and provide read/write access.
|
||||||
|
*/
|
||||||
|
template<typename T>
|
||||||
|
struct AIAccess : public AIAccessConst<T>
|
||||||
|
{
|
||||||
|
//! Construct a AIAccess from a non-constant AIThreadSafeSimple.
|
||||||
|
AIAccess(AIThreadSafeSimple<T>& wrapper) : AIAccessConst<T>(wrapper) { }
|
||||||
|
|
||||||
|
//! Access the underlaying object for (read and) write access.
|
||||||
|
T* operator->() const { return this->mWrapper.ptr(); }
|
||||||
|
|
||||||
|
//! Access the underlaying object for (read and) write access.
|
||||||
|
T& operator*() const { return *this->mWrapper.ptr(); }
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief A wrapper class for objects that should only be accessed by a single thread.
|
||||||
|
*
|
||||||
|
* Use AITHREADSAFESINGLETHREAD to define instances of any type, and use AISTAccess
|
||||||
|
* to get access to the instance.
|
||||||
|
*
|
||||||
|
* For example,
|
||||||
|
*
|
||||||
|
* <code>
|
||||||
|
* class Foo { public: Foo(int, int); };
|
||||||
|
*
|
||||||
|
* AITHREADSAFESINGLETHREAD(Foo, foo, (2, 3));
|
||||||
|
*
|
||||||
|
* AISTAccess<Foo> foo_w(foo);
|
||||||
|
* // Use foo_w-> for read and write access.
|
||||||
|
* </code>
|
||||||
|
*/
|
||||||
|
template<typename T>
|
||||||
|
class AIThreadSafeSingleThread : public AIThreadSafeBits<T>
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
// Only these one may access the object (through ptr()).
|
||||||
|
friend struct AISTAccessConst<T>;
|
||||||
|
friend struct AISTAccess<T>;
|
||||||
|
|
||||||
|
// For use by AIThreadSafeSingleThreadDC.
|
||||||
|
AIThreadSafeSingleThread(void)
|
||||||
|
#ifdef LL_DEBUG
|
||||||
|
: mAccessed(false)
|
||||||
|
#endif
|
||||||
|
{ }
|
||||||
|
|
||||||
|
#ifdef LL_DEBUG
|
||||||
|
mutable bool mAccessed;
|
||||||
|
mutable apr_os_thread_t mTheadID;
|
||||||
|
|
||||||
|
void accessed(void) const
|
||||||
|
{
|
||||||
|
if (!mAccessed)
|
||||||
|
{
|
||||||
|
mAccessed = true;
|
||||||
|
mTheadID = apr_os_thread_current();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
llassert_always(apr_os_thread_equal(mTheadID, apr_os_thread_current()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Only for use by AITHREADSAFESINGLETHREAD, see below.
|
||||||
|
AIThreadSafeSingleThread(T* object)
|
||||||
|
#ifdef LL_DEBUG
|
||||||
|
: mAccessed(false)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
llassert(object == AIThreadSafeBits<T>::ptr());
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
// Disallow copying or assignments.
|
||||||
|
AIThreadSafeSingleThread(AIThreadSafeSingleThread const&);
|
||||||
|
void operator=(AIThreadSafeSingleThread const&);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief A wrapper class for objects that should only be accessed by a single thread.
|
||||||
|
*
|
||||||
|
* This class is the same as an AIThreadSafeSingleThread wrapper, except that it can only
|
||||||
|
* be used for default constructed objects, or constructed with one parameter.
|
||||||
|
*
|
||||||
|
* For example, instead of
|
||||||
|
*
|
||||||
|
* <code>
|
||||||
|
* Foo foo;
|
||||||
|
* Bar bar(0.1);
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* One would use
|
||||||
|
*
|
||||||
|
* <code>
|
||||||
|
* AIThreadSafeSingleThreadDC<Foo> foo;
|
||||||
|
* AIThreadSafeSingleThreadDC<Bar> bar(0.1);
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* The advantage over AITHREADSAFESINGLETHREAD is that this object can be allocated with
|
||||||
|
* new on the heap. For example:
|
||||||
|
*
|
||||||
|
* <code>
|
||||||
|
* AIThreadSafeSingleThreadDC<Foo>* ptr = new AIThreadSafeSingleThreadDC<Foo>;
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* which is not possible with AITHREADSAFESINGLETHREAD.
|
||||||
|
*
|
||||||
|
* This class is primarily intended to test if some (member) variable needs locking,
|
||||||
|
* during development (in debug mode), and is therefore more flexible in that it
|
||||||
|
* automatically converts to the underlying type, can be assigned to and can be
|
||||||
|
* written to an ostream, as if it wasn't wrapped at all. This is to reduce the
|
||||||
|
* impact on the source code.
|
||||||
|
*/
|
||||||
|
template<typename T>
|
||||||
|
class AIThreadSafeSingleThreadDC : public AIThreadSafeSingleThread<T>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// Construct a wrapper around a default constructed object.
|
||||||
|
AIThreadSafeSingleThreadDC(void) { new (AIThreadSafeSingleThread<T>::ptr()) T; }
|
||||||
|
// Allow an arbitrary parameter to be passed for construction.
|
||||||
|
template<typename T2> AIThreadSafeSingleThreadDC(T2 const& val) { new (AIThreadSafeSingleThread<T>::ptr()) T(val); }
|
||||||
|
|
||||||
|
// Allow assigning with T.
|
||||||
|
AIThreadSafeSingleThreadDC& operator=(T const& val) { AIThreadSafeSingleThread<T>::accessed(); *AIThreadSafeSingleThread<T>::ptr() = val; return *this; }
|
||||||
|
// Allow writing to an ostream.
|
||||||
|
friend std::ostream& operator<<(std::ostream& os, AIThreadSafeSingleThreadDC const& wrapped_val) { wrapped_val.accessed(); return os << *wrapped_val.ptr(); }
|
||||||
|
|
||||||
|
// Automatic conversion to T.
|
||||||
|
operator T&(void) { AIThreadSafeSingleThread<T>::accessed(); return *AIThreadSafeSingleThread<T>::ptr(); }
|
||||||
|
operator T const&(void) const { AIThreadSafeSingleThread<T>::accessed(); return *AIThreadSafeSingleThread<T>::ptr(); }
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Instantiate a static, global or local object of a given type wrapped in AIThreadSafeSingleThread, using an arbitrary constructor.
|
||||||
|
*
|
||||||
|
* For example, instead of doing
|
||||||
|
*
|
||||||
|
* <code>
|
||||||
|
* Foo foo(x, y);
|
||||||
|
* static Bar bar;
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* One can instantiate a thread-safe instance with
|
||||||
|
*
|
||||||
|
* <code>
|
||||||
|
* AITHREADSAFESINGLETHREAD(Foo, foo, (x, y));
|
||||||
|
* static AITHREADSAFESINGLETHREAD(Bar, bar, );
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* Note: This macro does not allow to allocate such object on the heap.
|
||||||
|
* If that is needed, have a look at AIThreadSafeSingleThreadDC.
|
||||||
|
*/
|
||||||
|
#define AITHREADSAFESINGLETHREAD(type, var, paramlist) AIThreadSafeSingleThread<type> var(new (var.memory()) type paramlist)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Access single threaded object for read access.
|
||||||
|
*/
|
||||||
|
template<typename T>
|
||||||
|
struct AISTAccessConst
|
||||||
|
{
|
||||||
|
//! Construct a AISTAccessConst from a constant AIThreadSafeSingleThread.
|
||||||
|
AISTAccessConst(AIThreadSafeSingleThread<T> const& wrapper) : mWrapper(const_cast<AIThreadSafeSingleThread<T>&>(wrapper))
|
||||||
|
{
|
||||||
|
#if LL_DEBUG
|
||||||
|
wrapper.accessed();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Access the underlaying object for read access.
|
||||||
|
T const* operator->() const { return this->mWrapper.ptr(); }
|
||||||
|
|
||||||
|
//! Access the underlaying object for read write access.
|
||||||
|
T const& operator*() const { return *this->mWrapper.ptr(); }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
AIThreadSafeSingleThread<T>& mWrapper; //!< Reference to the object that we provide access to.
|
||||||
|
|
||||||
|
#if AI_NEED_ACCESS_CC
|
||||||
|
public:
|
||||||
|
AISTAccessConst(AISTAccessConst const& orig) : mWrapper(orig.mWrapper) { }
|
||||||
|
#else
|
||||||
|
private:
|
||||||
|
// Disallow copy constructing directly.
|
||||||
|
AISTAccessConst(AISTAccessConst const&);
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Access single threaded object for read/write access.
|
||||||
|
*/
|
||||||
|
template<typename T>
|
||||||
|
struct AISTAccess : public AISTAccessConst<T>
|
||||||
|
{
|
||||||
|
//! Construct a AISTAccess from a non-constant AIThreadSafeSingleThread.
|
||||||
|
AISTAccess(AIThreadSafeSingleThread<T>& wrapper) : AISTAccessConst<T>(wrapper)
|
||||||
|
{
|
||||||
|
#if LL_DEBUG
|
||||||
|
wrapper.accessed();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Access the underlaying object for (read and) write access.
|
||||||
|
T* operator->() const { return this->mWrapper.ptr(); }
|
||||||
|
|
||||||
|
//! Access the underlaying object for (read and) write access.
|
||||||
|
T& operator*() const { return *this->mWrapper.ptr(); }
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -375,7 +375,7 @@ const U32 PARCEL_MEDIA_COMMAND_LOOP_SET = 13;
|
|||||||
const U32 MAP_ITEM_TELEHUB = 0x01;
|
const U32 MAP_ITEM_TELEHUB = 0x01;
|
||||||
const U32 MAP_ITEM_PG_EVENT = 0x02;
|
const U32 MAP_ITEM_PG_EVENT = 0x02;
|
||||||
const U32 MAP_ITEM_MATURE_EVENT = 0x03;
|
const U32 MAP_ITEM_MATURE_EVENT = 0x03;
|
||||||
const U32 MAP_ITEM_POPULAR = 0x04;
|
//const U32 MAP_ITEM_POPULAR = 0x04; // No longer supported, 2009-03-02 KLW
|
||||||
//const U32 MAP_ITEM_AGENT_COUNT = 0x05;
|
//const U32 MAP_ITEM_AGENT_COUNT = 0x05;
|
||||||
const U32 MAP_ITEM_AGENT_LOCATIONS = 0x06;
|
const U32 MAP_ITEM_AGENT_LOCATIONS = 0x06;
|
||||||
const U32 MAP_ITEM_LAND_FOR_SALE = 0x07;
|
const U32 MAP_ITEM_LAND_FOR_SALE = 0x07;
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ S32 LL_HEARTBEAT_SIGNAL = (SIGRTMAX >= 0) ? (SIGRTMAX-0) : SIGUSR2;
|
|||||||
// the static application instance
|
// the static application instance
|
||||||
LLApp* LLApp::sApplication = NULL;
|
LLApp* LLApp::sApplication = NULL;
|
||||||
|
|
||||||
// Allows the generation of core files for post mortum under gdb
|
// Allows the generation of core files for post mortem under gdb
|
||||||
// and disables crashlogger
|
// and disables crashlogger
|
||||||
BOOL LLApp::sDisableCrashlogger = FALSE;
|
BOOL LLApp::sDisableCrashlogger = FALSE;
|
||||||
|
|
||||||
@@ -396,6 +396,7 @@ bool LLApp::isQuitting()
|
|||||||
return (APP_STATUS_QUITTING == sStatus);
|
return (APP_STATUS_QUITTING == sStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
bool LLApp::isExiting()
|
bool LLApp::isExiting()
|
||||||
{
|
{
|
||||||
return isQuitting() || isError();
|
return isQuitting() || isError();
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ bool ll_apr_warn_status(apr_status_t status)
|
|||||||
|
|
||||||
void ll_apr_assert_status(apr_status_t status)
|
void ll_apr_assert_status(apr_status_t status)
|
||||||
{
|
{
|
||||||
llassert(ll_apr_warn_status(status) == false);
|
llassert(!ll_apr_warn_status(status));
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------
|
//---------------------------------------------------------------------
|
||||||
@@ -146,7 +146,7 @@ apr_status_t LLAPRFile::open(std::string const& filename, apr_int32_t flags, acc
|
|||||||
|
|
||||||
apr_status_t status;
|
apr_status_t status;
|
||||||
{
|
{
|
||||||
apr_pool_t* apr_file_open_pool;
|
apr_pool_t* apr_file_open_pool; // The use of apr_pool_t is OK here.
|
||||||
// This is a temporary variable for a pool that is passed directly to apr_file_open below.
|
// This is a temporary variable for a pool that is passed directly to apr_file_open below.
|
||||||
if (access_type == short_lived)
|
if (access_type == short_lived)
|
||||||
{
|
{
|
||||||
@@ -199,7 +199,6 @@ apr_status_t LLAPRFile::open(const std::string& filename, apr_int32_t flags, BOO
|
|||||||
// File I/O
|
// File I/O
|
||||||
S32 LLAPRFile::read(void *buf, S32 nbytes)
|
S32 LLAPRFile::read(void *buf, S32 nbytes)
|
||||||
{
|
{
|
||||||
//llassert_always(mFile); (ASC-TUDCC) -HgB
|
|
||||||
if(!mFile)
|
if(!mFile)
|
||||||
{
|
{
|
||||||
llwarns << "apr mFile is removed by somebody else. Can not read." << llendl ;
|
llwarns << "apr mFile is removed by somebody else. Can not read." << llendl ;
|
||||||
@@ -222,7 +221,6 @@ S32 LLAPRFile::read(void *buf, S32 nbytes)
|
|||||||
|
|
||||||
S32 LLAPRFile::write(const void *buf, S32 nbytes)
|
S32 LLAPRFile::write(const void *buf, S32 nbytes)
|
||||||
{
|
{
|
||||||
// llassert_always(mFile); (ASC-TUDCC) -HgB
|
|
||||||
if(!mFile)
|
if(!mFile)
|
||||||
{
|
{
|
||||||
llwarns << "apr mFile is removed by somebody else. Can not write." << llendl ;
|
llwarns << "apr mFile is removed by somebody else. Can not write." << llendl ;
|
||||||
|
|||||||
@@ -91,29 +91,8 @@ protected:
|
|||||||
apr_thread_mutex_t* mMutex;
|
apr_thread_mutex_t* mMutex;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename Type> class LLAtomic32
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
LLAtomic32<Type>() {};
|
|
||||||
LLAtomic32<Type>(Type x) {apr_atomic_set32(&mData, apr_uint32_t(x)); };
|
|
||||||
~LLAtomic32<Type>() {};
|
|
||||||
|
|
||||||
operator const Type() { apr_uint32_t data = apr_atomic_read32(&mData); return Type(data); }
|
|
||||||
Type operator =(const Type& x) { apr_atomic_set32(&mData, apr_uint32_t(x)); return Type(mData); }
|
|
||||||
void operator -=(Type x) { apr_atomic_sub32(&mData, apr_uint32_t(x)); }
|
|
||||||
void operator +=(Type x) { apr_atomic_add32(&mData, apr_uint32_t(x)); }
|
|
||||||
Type operator ++(int) { return apr_atomic_inc32(&mData); } // Type++
|
|
||||||
Type operator --(int) { return apr_atomic_dec32(&mData); } // Type--
|
|
||||||
|
|
||||||
private:
|
|
||||||
apr_uint32_t mData;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef LLAtomic32<U32> LLAtomicU32;
|
|
||||||
typedef LLAtomic32<S32> LLAtomicS32;
|
|
||||||
|
|
||||||
// File IO convenience functions.
|
// File IO convenience functions.
|
||||||
// Returns NULL if the file fails to openm sets *sizep to file size of not NULL
|
// Returns NULL if the file fails to open, sets *sizep to file size if not NULL
|
||||||
// abbreviated flags
|
// abbreviated flags
|
||||||
#define LL_APR_R (APR_READ) // "r"
|
#define LL_APR_R (APR_READ) // "r"
|
||||||
#define LL_APR_W (APR_CREATE|APR_TRUNCATE|APR_WRITE) // "w"
|
#define LL_APR_W (APR_CREATE|APR_TRUNCATE|APR_WRITE) // "w"
|
||||||
@@ -131,7 +110,7 @@ typedef LLAtomic32<S32> LLAtomicS32;
|
|||||||
// especially do not put some time-costly operations between open() and close().
|
// especially do not put some time-costly operations between open() and close().
|
||||||
// otherwise it might lock the APRFilePool.
|
// otherwise it might lock the APRFilePool.
|
||||||
//there are two different apr_pools the APRFile can use:
|
//there are two different apr_pools the APRFile can use:
|
||||||
// 1, a temperary pool passed to an APRFile function, which is used within this function and only once.
|
// 1, a temporary pool passed to an APRFile function, which is used within this function and only once.
|
||||||
// 2, a global pool.
|
// 2, a global pool.
|
||||||
//
|
//
|
||||||
|
|
||||||
@@ -189,7 +168,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Function which approprately logs error or remains quiet on
|
* @brief Function which appropriately logs error or remains quiet on
|
||||||
* APR_SUCCESS.
|
* APR_SUCCESS.
|
||||||
* @return Returns <code>true</code> if status is an error condition.
|
* @return Returns <code>true</code> if status is an error condition.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* @file LLAPRPool.cpp
|
* @file llaprpool.cpp
|
||||||
*
|
*
|
||||||
* Copyright (c) 2010, Aleric Inglewood.
|
* Copyright (c) 2010, Aleric Inglewood.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* @file LLAPRPool.h
|
* @file llaprpool.h
|
||||||
* @brief Implementation of LLAPRPool.
|
* @brief Implementation of LLAPRPool.
|
||||||
*
|
*
|
||||||
* Copyright (c) 2010, Aleric Inglewood.
|
* Copyright (c) 2010, Aleric Inglewood.
|
||||||
@@ -60,9 +60,9 @@ extern void ll_init_apr();
|
|||||||
class LL_COMMON_API LLAPRPool
|
class LL_COMMON_API LLAPRPool
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
apr_pool_t* mPool; //!< Pointer to the underlaying pool. NULL if not initialized.
|
apr_pool_t* mPool; //!< Pointer to the underlaying pool. NULL if not initialized.
|
||||||
LLAPRPool* mParent; //!< Pointer to the parent pool, if any. Only valid when mPool is non-zero.
|
LLAPRPool* mParent; //!< Pointer to the parent pool, if any. Only valid when mPool is non-zero.
|
||||||
apr_os_thread_t mOwner; //!< The thread that owns this memory pool. Only valid when mPool is non-zero.
|
apr_os_thread_t mOwner; //!< The thread that owns this memory pool. Only valid when mPool is non-zero.
|
||||||
|
|
||||||
public:
|
public:
|
||||||
//! Construct an uninitialized (destructed) pool.
|
//! Construct an uninitialized (destructed) pool.
|
||||||
|
|||||||
61
indra/llcommon/llatomic.h
Normal file
61
indra/llcommon/llatomic.h
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
/**
|
||||||
|
* @file llatomic.h
|
||||||
|
* @brief Definition of LLAtomic
|
||||||
|
*
|
||||||
|
* $LicenseInfo:firstyear=2004&license=viewergpl$
|
||||||
|
*
|
||||||
|
* Copyright (c) 2004-2009, Linden Research, Inc.
|
||||||
|
* Copyright (c) 2012, Aleric Inglewood
|
||||||
|
*
|
||||||
|
* Second Life Viewer Source Code
|
||||||
|
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||||
|
* to you under the terms of the GNU General Public License, version 2.0
|
||||||
|
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||||
|
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||||
|
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||||
|
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||||
|
*
|
||||||
|
* There are special exceptions to the terms and conditions of the GPL as
|
||||||
|
* it is applied to this Source Code. View the full text of the exception
|
||||||
|
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||||
|
* online at
|
||||||
|
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||||
|
*
|
||||||
|
* By copying, modifying or distributing this software, you acknowledge
|
||||||
|
* that you have read and understood your obligations described above,
|
||||||
|
* and agree to abide by those obligations.
|
||||||
|
*
|
||||||
|
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||||
|
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||||
|
* COMPLETENESS OR PERFORMANCE.
|
||||||
|
* $/LicenseInfo$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef LL_LLATOMIC_H
|
||||||
|
#define LL_LLATOMIC_H
|
||||||
|
|
||||||
|
#include "apr_atomic.h"
|
||||||
|
|
||||||
|
template <typename Type> class LLAtomic32
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
LLAtomic32(void) { }
|
||||||
|
LLAtomic32(LLAtomic32 const& atom) { apr_uint32_t data = apr_atomic_read32(const_cast<apr_uint32_t*>(&atom.mData)); apr_atomic_set32(&mData, data); }
|
||||||
|
LLAtomic32(Type x) { apr_atomic_set32(&mData, static_cast<apr_uint32_t>(x)); }
|
||||||
|
LLAtomic32& operator=(LLAtomic32 const& atom) { apr_uint32_t data = apr_atomic_read32(const_cast<apr_uint32_t*>(&atom.mData)); apr_atomic_set32(&mData, data); return *this; }
|
||||||
|
|
||||||
|
operator Type() const { apr_uint32_t data = apr_atomic_read32(const_cast<apr_uint32_t*>(&mData)); return static_cast<Type>(data); }
|
||||||
|
void operator=(Type x) { apr_atomic_set32(&mData, static_cast<apr_uint32_t>(x)); }
|
||||||
|
void operator-=(Type x) { apr_atomic_sub32(&mData, static_cast<apr_uint32_t>(x)); }
|
||||||
|
void operator+=(Type x) { apr_atomic_add32(&mData, static_cast<apr_uint32_t>(x)); }
|
||||||
|
Type operator++(int) { return apr_atomic_inc32(&mData); } // Type++
|
||||||
|
bool operator--() { return apr_atomic_dec32(&mData); } // Returns (--Type != 0)
|
||||||
|
|
||||||
|
private:
|
||||||
|
apr_uint32_t mData;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef LLAtomic32<U32> LLAtomicU32;
|
||||||
|
typedef LLAtomic32<S32> LLAtomicS32;
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -99,7 +99,7 @@ std::string LLAvatarName::getCompleteName(bool linefeed) const
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
name = mDisplayName + (linefeed ? "\n(" : "(") + mUsername + ")";
|
name = mDisplayName + (linefeed ? "\n(" : " (") + mUsername + ")";
|
||||||
}
|
}
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef LLBASE32_H
|
#ifndef LLBASE32_H
|
||||||
#define LLBASE32_h
|
#define LLBASE32_H
|
||||||
|
|
||||||
class LL_COMMON_API LLBase32
|
class LL_COMMON_API LLBase32
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef LLBASE64_H
|
#ifndef LLBASE64_H
|
||||||
#define LLBASE64_h
|
#define LLBASE64_H
|
||||||
|
|
||||||
class LL_COMMON_API LLBase64
|
class LL_COMMON_API LLBase64
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -75,14 +75,15 @@ public:
|
|||||||
: mText(text),
|
: mText(text),
|
||||||
mFromName(),
|
mFromName(),
|
||||||
mFromID(),
|
mFromID(),
|
||||||
// [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a)
|
|
||||||
mRlvLocFiltered(FALSE),
|
|
||||||
mRlvNamesFiltered(FALSE),
|
|
||||||
// [/RLVa:KB]
|
|
||||||
mSourceType(CHAT_SOURCE_AGENT),
|
mSourceType(CHAT_SOURCE_AGENT),
|
||||||
mChatType(CHAT_TYPE_NORMAL),
|
mChatType(CHAT_TYPE_NORMAL),
|
||||||
mAudible(CHAT_AUDIBLE_FULLY),
|
mAudible(CHAT_AUDIBLE_FULLY),
|
||||||
mMuted(FALSE),
|
mMuted(FALSE),
|
||||||
|
// [RLVa:KB] - Checked: 2010-04-22 (RLVa-1.2.0f) | Modified: RLVa-1.0.0a
|
||||||
|
mRlvLocFiltered(FALSE),
|
||||||
|
mRlvNamesFiltered(FALSE),
|
||||||
|
// [/RLVa:KB]
|
||||||
mTime(0.0),
|
mTime(0.0),
|
||||||
mPosAgent(),
|
mPosAgent(),
|
||||||
mURL()
|
mURL()
|
||||||
@@ -104,14 +105,14 @@ public:
|
|||||||
std::string mText; // UTF-8 line of text
|
std::string mText; // UTF-8 line of text
|
||||||
std::string mFromName; // agent or object name
|
std::string mFromName; // agent or object name
|
||||||
LLUUID mFromID; // agent id or object id
|
LLUUID mFromID; // agent id or object id
|
||||||
// [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a)
|
|
||||||
BOOL mRlvLocFiltered;
|
|
||||||
BOOL mRlvNamesFiltered;
|
|
||||||
// [/RLVa:KB]
|
|
||||||
EChatSourceType mSourceType;
|
EChatSourceType mSourceType;
|
||||||
EChatType mChatType;
|
EChatType mChatType;
|
||||||
EChatAudible mAudible;
|
EChatAudible mAudible;
|
||||||
BOOL mMuted; // pass muted chat to maintain list of chatters
|
BOOL mMuted; // pass muted chat to maintain list of chatters
|
||||||
|
// [RLVa:KB] - Checked: 2010-04-22 (RLVa-1.2.0f) | Modified: RLVa-1.0.0a
|
||||||
|
BOOL mRlvLocFiltered;
|
||||||
|
BOOL mRlvNamesFiltered;
|
||||||
|
// [/RLVa:KB]
|
||||||
F64 mTime; // viewer only, seconds from viewer start
|
F64 mTime; // viewer only, seconds from viewer start
|
||||||
LLVector3 mPosAgent;
|
LLVector3 mPosAgent;
|
||||||
std::string mURL;
|
std::string mURL;
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ void LLCommon::initClass()
|
|||||||
{
|
{
|
||||||
LLMemory::initClass();
|
LLMemory::initClass();
|
||||||
LLTimer::initClass();
|
LLTimer::initClass();
|
||||||
LLThreadSafeRefCount::initThreadSafeRefCount();
|
|
||||||
// LLWorkerThread::initClass();
|
// LLWorkerThread::initClass();
|
||||||
// LLFrameCallbackManager::initClass();
|
// LLFrameCallbackManager::initClass();
|
||||||
}
|
}
|
||||||
@@ -49,7 +48,6 @@ void LLCommon::cleanupClass()
|
|||||||
{
|
{
|
||||||
// LLFrameCallbackManager::cleanupClass();
|
// LLFrameCallbackManager::cleanupClass();
|
||||||
// LLWorkerThread::cleanupClass();
|
// LLWorkerThread::cleanupClass();
|
||||||
LLThreadSafeRefCount::cleanupThreadSafeRefCount();
|
|
||||||
LLTimer::cleanupClass();
|
LLTimer::cleanupClass();
|
||||||
LLMemory::cleanupClass();
|
LLMemory::cleanupClass();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,8 @@
|
|||||||
* $/LicenseInfo$
|
* $/LicenseInfo$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "linden_common.h"
|
||||||
|
|
||||||
#include "llcursortypes.h"
|
#include "llcursortypes.h"
|
||||||
|
|
||||||
ECursorType getCursorFromString(const std::string& cursor_string)
|
ECursorType getCursorFromString(const std::string& cursor_string)
|
||||||
@@ -66,14 +68,14 @@ ECursorType getCursorFromString(const std::string& cursor_string)
|
|||||||
cursor_string_table["UI_CURSOR_TOOLPAN"] = UI_CURSOR_TOOLPAN;
|
cursor_string_table["UI_CURSOR_TOOLPAN"] = UI_CURSOR_TOOLPAN;
|
||||||
cursor_string_table["UI_CURSOR_TOOLZOOMIN"] = UI_CURSOR_TOOLZOOMIN;
|
cursor_string_table["UI_CURSOR_TOOLZOOMIN"] = UI_CURSOR_TOOLZOOMIN;
|
||||||
cursor_string_table["UI_CURSOR_TOOLPICKOBJECT3"] = UI_CURSOR_TOOLPICKOBJECT3;
|
cursor_string_table["UI_CURSOR_TOOLPICKOBJECT3"] = UI_CURSOR_TOOLPICKOBJECT3;
|
||||||
cursor_string_table["UI_CURSOR_TOOLSIT"] = UI_CURSOR_TOOLSIT;
|
|
||||||
cursor_string_table["UI_CURSOR_TOOLBUY"] = UI_CURSOR_TOOLBUY;
|
|
||||||
cursor_string_table["UI_CURSOR_TOOLPAY"] = UI_CURSOR_TOOLPAY;
|
|
||||||
cursor_string_table["UI_CURSOR_TOOLOPEN"] = UI_CURSOR_TOOLOPEN;
|
|
||||||
cursor_string_table["UI_CURSOR_TOOLPLAY"] = UI_CURSOR_TOOLPLAY;
|
cursor_string_table["UI_CURSOR_TOOLPLAY"] = UI_CURSOR_TOOLPLAY;
|
||||||
cursor_string_table["UI_CURSOR_TOOLPAUSE"] = UI_CURSOR_TOOLPAUSE;
|
cursor_string_table["UI_CURSOR_TOOLPAUSE"] = UI_CURSOR_TOOLPAUSE;
|
||||||
cursor_string_table["UI_CURSOR_TOOLMEDIAOPEN"] = UI_CURSOR_TOOLMEDIAOPEN;
|
cursor_string_table["UI_CURSOR_TOOLMEDIAOPEN"] = UI_CURSOR_TOOLMEDIAOPEN;
|
||||||
cursor_string_table["UI_CURSOR_PIPETTE"] = UI_CURSOR_PIPETTE;
|
cursor_string_table["UI_CURSOR_PIPETTE"] = UI_CURSOR_PIPETTE;
|
||||||
|
cursor_string_table["UI_CURSOR_TOOLSIT"] = UI_CURSOR_TOOLSIT;
|
||||||
|
cursor_string_table["UI_CURSOR_TOOLBUY"] = UI_CURSOR_TOOLBUY;
|
||||||
|
cursor_string_table["UI_CURSOR_TOOLPAY"] = UI_CURSOR_TOOLPAY;
|
||||||
|
cursor_string_table["UI_CURSOR_TOOLOPEN"] = UI_CURSOR_TOOLOPEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::map<std::string,U32>::const_iterator iter = cursor_string_table.find(cursor_string);
|
std::map<std::string,U32>::const_iterator iter = cursor_string_table.find(cursor_string);
|
||||||
|
|||||||
@@ -33,8 +33,6 @@
|
|||||||
#ifndef LL_LLCURSORTYPES_H
|
#ifndef LL_LLCURSORTYPES_H
|
||||||
#define LL_LLCURSORTYPES_H
|
#define LL_LLCURSORTYPES_H
|
||||||
|
|
||||||
#include "linden_common.h"
|
|
||||||
|
|
||||||
// If you add types here, add them in LLCursor::getCursorFromString
|
// If you add types here, add them in LLCursor::getCursorFromString
|
||||||
enum ECursorType {
|
enum ECursorType {
|
||||||
UI_CURSOR_ARROW,
|
UI_CURSOR_ARROW,
|
||||||
@@ -66,14 +64,14 @@ enum ECursorType {
|
|||||||
UI_CURSOR_TOOLPAN,
|
UI_CURSOR_TOOLPAN,
|
||||||
UI_CURSOR_TOOLZOOMIN,
|
UI_CURSOR_TOOLZOOMIN,
|
||||||
UI_CURSOR_TOOLPICKOBJECT3,
|
UI_CURSOR_TOOLPICKOBJECT3,
|
||||||
UI_CURSOR_TOOLSIT,
|
|
||||||
UI_CURSOR_TOOLBUY,
|
|
||||||
UI_CURSOR_TOOLPAY,
|
|
||||||
UI_CURSOR_TOOLOPEN,
|
|
||||||
UI_CURSOR_TOOLPLAY,
|
UI_CURSOR_TOOLPLAY,
|
||||||
UI_CURSOR_TOOLPAUSE,
|
UI_CURSOR_TOOLPAUSE,
|
||||||
UI_CURSOR_TOOLMEDIAOPEN,
|
UI_CURSOR_TOOLMEDIAOPEN,
|
||||||
UI_CURSOR_PIPETTE,
|
UI_CURSOR_PIPETTE,
|
||||||
|
UI_CURSOR_TOOLSIT,
|
||||||
|
UI_CURSOR_TOOLBUY,
|
||||||
|
UI_CURSOR_TOOLPAY,
|
||||||
|
UI_CURSOR_TOOLOPEN,
|
||||||
UI_CURSOR_COUNT // Number of elements in this enum (NOT a cursor)
|
UI_CURSOR_COUNT // Number of elements in this enum (NOT a cursor)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -402,7 +402,7 @@ namespace
|
|||||||
{
|
{
|
||||||
/* This pattern, of returning a reference to a static function
|
/* This pattern, of returning a reference to a static function
|
||||||
variable, is to ensure that this global is constructed before
|
variable, is to ensure that this global is constructed before
|
||||||
it is used, no matter what the global initializeation sequence
|
it is used, no matter what the global initialization sequence
|
||||||
is.
|
is.
|
||||||
See C++ FAQ Lite, sections 10.12 through 10.14
|
See C++ FAQ Lite, sections 10.12 through 10.14
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
|
|
||||||
Information for most users:
|
Information for most users:
|
||||||
|
|
||||||
Code can log messages with constuctions like this:
|
Code can log messages with constructions like this:
|
||||||
|
|
||||||
LL_INFOS("StringTag") << "request to fizzbip agent " << agent_id
|
LL_INFOS("StringTag") << "request to fizzbip agent " << agent_id
|
||||||
<< " denied due to timeout" << LL_ENDL;
|
<< " denied due to timeout" << LL_ENDL;
|
||||||
@@ -53,9 +53,9 @@
|
|||||||
Messages can be logged to one of four increasing levels of concern,
|
Messages can be logged to one of four increasing levels of concern,
|
||||||
using one of four "streams":
|
using one of four "streams":
|
||||||
|
|
||||||
LL_DEBUGS("StringTag") - debug messages that are normally supressed
|
LL_DEBUGS("StringTag") - debug messages that are normally suppressed
|
||||||
LL_INFOS("StringTag") - informational messages that are normall shown
|
LL_INFOS("StringTag") - informational messages that are normally shown
|
||||||
LL_WARNS("StringTag") - warning messages that singal a problem
|
LL_WARNS("StringTag") - warning messages that signal a problem
|
||||||
LL_ERRS("StringTag") - error messages that are major, unrecoverable failures
|
LL_ERRS("StringTag") - error messages that are major, unrecoverable failures
|
||||||
|
|
||||||
The later (LL_ERRS("StringTag")) automatically crashes the process after the message
|
The later (LL_ERRS("StringTag")) automatically crashes the process after the message
|
||||||
@@ -96,7 +96,7 @@
|
|||||||
|
|
||||||
WARN: LLFoo::doSomething: called with a big value for i: 283
|
WARN: LLFoo::doSomething: called with a big value for i: 283
|
||||||
|
|
||||||
Which messages are logged and which are supressed can be controled at run
|
Which messages are logged and which are suppressed can be controlled at run
|
||||||
time from the live file logcontrol.xml based on function, class and/or
|
time from the live file logcontrol.xml based on function, class and/or
|
||||||
source file. See etc/logcontrol-dev.xml for details.
|
source file. See etc/logcontrol-dev.xml for details.
|
||||||
|
|
||||||
@@ -112,7 +112,7 @@ namespace LLError
|
|||||||
enum ELevel
|
enum ELevel
|
||||||
{
|
{
|
||||||
LEVEL_ALL = 0,
|
LEVEL_ALL = 0,
|
||||||
// used to indicate that all messagess should be logged
|
// used to indicate that all messages should be logged
|
||||||
|
|
||||||
LEVEL_DEBUG = 0,
|
LEVEL_DEBUG = 0,
|
||||||
LEVEL_INFO = 1,
|
LEVEL_INFO = 1,
|
||||||
@@ -226,7 +226,7 @@ namespace LLError
|
|||||||
// See top of file for example of how to use this
|
// See top of file for example of how to use this
|
||||||
|
|
||||||
typedef LLError::NoClassInfo _LL_CLASS_TO_LOG;
|
typedef LLError::NoClassInfo _LL_CLASS_TO_LOG;
|
||||||
// Outside a class declartion, or in class without LOG_CLASS(), this
|
// Outside a class declaration, or in class without LOG_CLASS(), this
|
||||||
// typedef causes the messages to not be associated with any class.
|
// typedef causes the messages to not be associated with any class.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
|
|
||||||
#include "linden_common.h"
|
#include "linden_common.h"
|
||||||
#include "llerrorthread.h"
|
#include "llerrorthread.h"
|
||||||
|
|
||||||
#include "llapp.h"
|
#include "llapp.h"
|
||||||
#include "lltimer.h" // ms_sleep()
|
#include "lltimer.h" // ms_sleep()
|
||||||
|
|
||||||
@@ -117,13 +118,8 @@ void LLErrorThread::run()
|
|||||||
#if !LL_WINDOWS
|
#if !LL_WINDOWS
|
||||||
U32 last_sig_child_count = 0;
|
U32 last_sig_child_count = 0;
|
||||||
#endif
|
#endif
|
||||||
while (1)
|
while (! (LLApp::isError() || LLApp::isStopped()))
|
||||||
{
|
{
|
||||||
if (LLApp::isError() || LLApp::isStopped())
|
|
||||||
{
|
|
||||||
// The application has stopped running, time to take action (maybe)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#if !LL_WINDOWS
|
#if !LL_WINDOWS
|
||||||
// Check whether or not the main thread had a sig child we haven't handled.
|
// Check whether or not the main thread had a sig child we haven't handled.
|
||||||
U32 current_sig_child_count = LLApp::getSigChildCount();
|
U32 current_sig_child_count = LLApp::getSigChildCount();
|
||||||
|
|||||||
@@ -35,6 +35,8 @@
|
|||||||
|
|
||||||
#if LL_WINDOWS
|
#if LL_WINDOWS
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#else
|
||||||
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "linden_common.h"
|
#include "linden_common.h"
|
||||||
|
|||||||
@@ -39,15 +39,15 @@
|
|||||||
#include <hash_map>
|
#include <hash_map>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#elif LL_DARWIN || LL_LINUX
|
#elif LL_DARWIN || LL_LINUX
|
||||||
# if GCC_VERSION >= 40300 // gcc 4.3 and up
|
#if GCC_VERSION >= 40300 || LL_ICC// gcc 4.3 or icc 11 and up
|
||||||
# include <backward/hashtable.h>
|
# include <backward/hashtable.h>
|
||||||
# elif GCC_VERSION >= 30400 // gcc 3.4 and up
|
#elif GCC_VERSION >= 30400 // gcc 3.4 and up
|
||||||
# include <ext/hashtable.h>
|
# include <ext/hashtable.h>
|
||||||
# elif __GNUC__ >= 3
|
#elif __GNUC__ >= 3
|
||||||
# include <ext/stl_hashtable.h>
|
# include <ext/stl_hashtable.h>
|
||||||
# else
|
#else
|
||||||
# include <hashtable.h>
|
# include <hashtable.h>
|
||||||
# endif
|
#endif
|
||||||
#elif LL_SOLARIS
|
#elif LL_SOLARIS
|
||||||
#include <ext/hashtable.h>
|
#include <ext/hashtable.h>
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ LLHeartbeat::rawSend()
|
|||||||
|
|
||||||
int result;
|
int result;
|
||||||
#ifndef LL_DARWIN
|
#ifndef LL_DARWIN
|
||||||
union sigval dummy;
|
static union sigval dummy;
|
||||||
result = sigqueue(getppid(), LL_HEARTBEAT_SIGNAL, dummy);
|
result = sigqueue(getppid(), LL_HEARTBEAT_SIGNAL, dummy);
|
||||||
#else
|
#else
|
||||||
result = kill(getppid(), LL_HEARTBEAT_SIGNAL);
|
result = kill(getppid(), LL_HEARTBEAT_SIGNAL);
|
||||||
|
|||||||
@@ -134,7 +134,4 @@ private:
|
|||||||
LL_COMMON_API bool operator==(const LLMD5& a, const LLMD5& b);
|
LL_COMMON_API bool operator==(const LLMD5& a, const LLMD5& b);
|
||||||
LL_COMMON_API bool operator!=(const LLMD5& a, const LLMD5& b);
|
LL_COMMON_API bool operator!=(const LLMD5& a, const LLMD5& b);
|
||||||
|
|
||||||
LL_COMMON_API bool operator==(const LLMD5& a, const LLMD5& b);
|
|
||||||
LL_COMMON_API bool operator!=(const LLMD5& a, const LLMD5& b);
|
|
||||||
|
|
||||||
#endif // LL_LLMD5_H
|
#endif // LL_LLMD5_H
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ class LLSD;
|
|||||||
class LLOptionInterface
|
class LLOptionInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~LLOptionInterface() = 0;
|
virtual ~LLOptionInterface();
|
||||||
virtual LLSD getOption(const std::string& name) const = 0;
|
virtual LLSD getOption(const std::string& name) const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -78,7 +78,18 @@
|
|||||||
|
|
||||||
|
|
||||||
// Figure out differences between compilers
|
// Figure out differences between compilers
|
||||||
#if defined(__GNUC__)
|
#if defined(__clang__) && defined(__GNUC__)
|
||||||
|
#define CLANG_VERSION (__clang_major__ * 10000 \
|
||||||
|
+ __clang_minor__ * 100 \
|
||||||
|
+ __clang_patchlevel__)
|
||||||
|
#ifndef LL_CLANG
|
||||||
|
#define LL_CLANG 1
|
||||||
|
#endif
|
||||||
|
#elif defined (__ICC) && defined(__GNUC__)
|
||||||
|
#ifndef LL_ICC
|
||||||
|
#define LL_ICC 1
|
||||||
|
#endif
|
||||||
|
#elif defined(__GNUC__)
|
||||||
#define GCC_VERSION (__GNUC__ * 10000 \
|
#define GCC_VERSION (__GNUC__ * 10000 \
|
||||||
+ __GNUC_MINOR__ * 100 \
|
+ __GNUC_MINOR__ * 100 \
|
||||||
+ __GNUC_PATCHLEVEL__)
|
+ __GNUC_PATCHLEVEL__)
|
||||||
|
|||||||
@@ -42,6 +42,7 @@
|
|||||||
#if LL_DARWIN || LL_LINUX
|
#if LL_DARWIN || LL_LINUX
|
||||||
// not required or present on Win32
|
// not required or present on Win32
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
LLProcessLauncher::LLProcessLauncher()
|
LLProcessLauncher::LLProcessLauncher()
|
||||||
|
|||||||
@@ -55,10 +55,10 @@
|
|||||||
# define LL_X86 1
|
# define LL_X86 1
|
||||||
#elif LL_MSVC && _M_IX86
|
#elif LL_MSVC && _M_IX86
|
||||||
# define LL_X86 1
|
# define LL_X86 1
|
||||||
#elif LL_GNUC && ( defined(__amd64__) || defined(__x86_64__) )
|
#elif LL_GNUC || LL_ICC || LL_CLANG && ( defined(__amd64__) || defined(__x86_64__) )
|
||||||
# define LL_X86_64 1
|
# define LL_X86_64 1
|
||||||
# define LL_X86 1
|
# define LL_X86 1
|
||||||
#elif LL_GNUC && ( defined(__i386__) )
|
#elif LL_GNUC || LL_ICC || LL_CLANG && ( defined(__i386__) )
|
||||||
# define LL_X86 1
|
# define LL_X86 1
|
||||||
#elif LL_GNUC && ( defined(__powerpc__) || defined(__ppc__) )
|
#elif LL_GNUC && ( defined(__powerpc__) || defined(__ppc__) )
|
||||||
# define LL_PPC 1
|
# define LL_PPC 1
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
#include "llsimplehash.h"
|
#include "llsimplehash.h"
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
// Note: ~LLQueuedThread is O(N) N=# of queued threads, assumed to be small
|
// Note: ~LLQueuedThread is O(N) N=# of queued requests, assumed to be small
|
||||||
// It is assumed that LLQueuedThreads are rarely created/destroyed.
|
// It is assumed that LLQueuedThreads are rarely created/destroyed.
|
||||||
|
|
||||||
class LL_COMMON_API LLQueuedThread : public LLThread
|
class LL_COMMON_API LLQueuedThread : public LLThread
|
||||||
|
|||||||
@@ -50,6 +50,16 @@ public:
|
|||||||
|
|
||||||
const LLStrider<Object>& operator = (Object *first) { mObjectp = first; return *this;}
|
const LLStrider<Object>& operator = (Object *first) { mObjectp = first; return *this;}
|
||||||
void setStride (S32 skipBytes) { mSkip = (skipBytes ? skipBytes : sizeof(Object));}
|
void setStride (S32 skipBytes) { mSkip = (skipBytes ? skipBytes : sizeof(Object));}
|
||||||
|
|
||||||
|
LLStrider<Object> operator+(const S32& index)
|
||||||
|
{
|
||||||
|
LLStrider<Object> ret;
|
||||||
|
ret.mBytep = mBytep + mSkip*index;
|
||||||
|
ret.mSkip = mSkip;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
//void setTypeSize (S32 typeBytes){ mTypeSize = (typeBytes ? typeBytes : sizeof(Object)); }
|
//void setTypeSize (S32 typeBytes){ mTypeSize = (typeBytes ? typeBytes : sizeof(Object)); }
|
||||||
|
|
||||||
//bool isStrided() const { return mTypeSize != mSkip; }
|
//bool isStrided() const { return mTypeSize != mSkip; }
|
||||||
|
|||||||
@@ -737,6 +737,7 @@ std::string LLStringOps::sDayFormat;
|
|||||||
std::string LLStringOps::sAM;
|
std::string LLStringOps::sAM;
|
||||||
std::string LLStringOps::sPM;
|
std::string LLStringOps::sPM;
|
||||||
|
|
||||||
|
|
||||||
S32 LLStringOps::collate(const llwchar* a, const llwchar* b)
|
S32 LLStringOps::collate(const llwchar* a, const llwchar* b)
|
||||||
{
|
{
|
||||||
#if LL_WINDOWS
|
#if LL_WINDOWS
|
||||||
@@ -936,22 +937,24 @@ S32 LLStringUtil::format(std::string& s, const format_map_t& substitutions);
|
|||||||
template<>
|
template<>
|
||||||
void LLStringUtil::getTokens(const std::string& instr, std::vector<std::string >& tokens, const std::string& delims)
|
void LLStringUtil::getTokens(const std::string& instr, std::vector<std::string >& tokens, const std::string& delims)
|
||||||
{
|
{
|
||||||
std::string currToken;
|
// Starting at offset 0, scan forward for the next non-delimiter. We're
|
||||||
std::string::size_type begIdx, endIdx;
|
// done when the only characters left in 'instr' are delimiters.
|
||||||
|
for (std::string::size_type begIdx, endIdx = 0;
|
||||||
begIdx = instr.find_first_not_of (delims);
|
(begIdx = instr.find_first_not_of (delims, endIdx)) != std::string::npos; )
|
||||||
while (begIdx != std::string::npos)
|
|
||||||
{
|
{
|
||||||
|
// Found a non-delimiter. After that, find the next delimiter.
|
||||||
endIdx = instr.find_first_of (delims, begIdx);
|
endIdx = instr.find_first_of (delims, begIdx);
|
||||||
if (endIdx == std::string::npos)
|
if (endIdx == std::string::npos)
|
||||||
{
|
{
|
||||||
|
// No more delimiters: this token extends to the end of the string.
|
||||||
endIdx = instr.length();
|
endIdx = instr.length();
|
||||||
}
|
}
|
||||||
|
|
||||||
currToken = instr.substr(begIdx, endIdx - begIdx);
|
// extract the token between begIdx and endIdx; substr() needs length
|
||||||
|
std::string currToken(instr.substr(begIdx, endIdx - begIdx));
|
||||||
LLStringUtil::trim (currToken);
|
LLStringUtil::trim (currToken);
|
||||||
tokens.push_back(currToken);
|
tokens.push_back(currToken);
|
||||||
begIdx = instr.find_first_not_of (delims, endIdx);
|
// next scan past delimiters starts at endIdx
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1401,7 +1404,7 @@ void LLStringUtilBase<T>::testHarness()
|
|||||||
|
|
||||||
s2.erase( 4, 1 );
|
s2.erase( 4, 1 );
|
||||||
llassert( s2 == "hell");
|
llassert( s2 == "hell");
|
||||||
s2.insert( 0, 'y' );
|
s2.insert( 0, 1, 'y' );
|
||||||
llassert( s2 == "yhell");
|
llassert( s2 == "yhell");
|
||||||
s2.erase( 1, 3 );
|
s2.erase( 1, 3 );
|
||||||
llassert( s2 == "yl");
|
llassert( s2 == "yl");
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ U32 ll_thread_local local_thread_ID = 0;
|
|||||||
|
|
||||||
U32 LLThread::sIDIter = 0;
|
U32 LLThread::sIDIter = 0;
|
||||||
LLAtomicS32 LLThread::sCount = 0;
|
LLAtomicS32 LLThread::sCount = 0;
|
||||||
|
LLAtomicS32 LLThread::sRunning = 0;
|
||||||
|
|
||||||
LL_COMMON_API void assert_main_thread()
|
LL_COMMON_API void assert_main_thread()
|
||||||
{
|
{
|
||||||
@@ -104,6 +105,11 @@ void *APR_THREAD_FUNC LLThread::staticRun(apr_thread_t *apr_threadp, void *datap
|
|||||||
// the moment it happens... therefore make a copy here.
|
// the moment it happens... therefore make a copy here.
|
||||||
char const* volatile name = threadp->mName.c_str();
|
char const* volatile name = threadp->mName.c_str();
|
||||||
|
|
||||||
|
// Always make sure that sRunning <= number of threads with status RUNNING,
|
||||||
|
// so do this before changing mStatus (meaning that once we see that we
|
||||||
|
// are STOPPED, then sRunning is also up to date).
|
||||||
|
--sRunning;
|
||||||
|
|
||||||
// We're done with the run function, this thread is done executing now.
|
// We're done with the run function, this thread is done executing now.
|
||||||
threadp->mStatus = STOPPED;
|
threadp->mStatus = STOPPED;
|
||||||
|
|
||||||
@@ -114,6 +120,7 @@ void *APR_THREAD_FUNC LLThread::staticRun(apr_thread_t *apr_threadp, void *datap
|
|||||||
// the critical area of the mSignal lock)].
|
// the critical area of the mSignal lock)].
|
||||||
lldebugs << "LLThread::staticRun() Exiting: " << name << llendl;
|
lldebugs << "LLThread::staticRun() Exiting: " << name << llendl;
|
||||||
|
|
||||||
|
--sRunning; // Would be better to do this after joining with the thread, but we don't join :/
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,7 +185,7 @@ void LLThread::shutdown()
|
|||||||
}
|
}
|
||||||
mAPRThreadp = NULL;
|
mAPRThreadp = NULL;
|
||||||
}
|
}
|
||||||
sCount--;
|
--sCount;
|
||||||
delete mRunCondition;
|
delete mRunCondition;
|
||||||
mRunCondition = 0;
|
mRunCondition = 0;
|
||||||
}
|
}
|
||||||
@@ -189,6 +196,7 @@ void LLThread::start()
|
|||||||
|
|
||||||
// Set thread state to running
|
// Set thread state to running
|
||||||
mStatus = RUNNING;
|
mStatus = RUNNING;
|
||||||
|
sRunning++;
|
||||||
|
|
||||||
apr_status_t status =
|
apr_status_t status =
|
||||||
apr_thread_create(&mAPRThreadp, NULL, staticRun, (void *)this, tldata().mRootPool());
|
apr_thread_create(&mAPRThreadp, NULL, staticRun, (void *)this, tldata().mRootPool());
|
||||||
@@ -200,6 +208,7 @@ void LLThread::start()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
--sRunning;
|
||||||
mStatus = STOPPED;
|
mStatus = STOPPED;
|
||||||
llwarns << "failed to start thread " << mName << llendl;
|
llwarns << "failed to start thread " << mName << llendl;
|
||||||
ll_apr_warn_status(status);
|
ll_apr_warn_status(status);
|
||||||
@@ -402,6 +411,15 @@ LLMutexBase::LLMutexBase() :
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool LLMutexBase::isSelfLocked() const
|
||||||
|
{
|
||||||
|
#if LL_DARWIN
|
||||||
|
return mLockingThread == LLThread::currentID();
|
||||||
|
#else
|
||||||
|
return mLockingThread == local_thread_ID;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void LLMutexBase::lock()
|
void LLMutexBase::lock()
|
||||||
{
|
{
|
||||||
#if LL_DARWIN
|
#if LL_DARWIN
|
||||||
@@ -435,37 +453,6 @@ void LLMutexBase::unlock()
|
|||||||
apr_thread_mutex_unlock(mAPRMutexp);
|
apr_thread_mutex_unlock(mAPRMutexp);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LLMutexBase::isSelfLocked()
|
|
||||||
{
|
|
||||||
#if LL_DARWIN
|
|
||||||
return mLockingThread == LLThread::currentID();
|
|
||||||
#else
|
|
||||||
return mLockingThread == local_thread_ID;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
//static
|
|
||||||
LLMutex* LLThreadSafeRefCount::sMutex = 0;
|
|
||||||
|
|
||||||
//static
|
|
||||||
void LLThreadSafeRefCount::initThreadSafeRefCount()
|
|
||||||
{
|
|
||||||
if (!sMutex)
|
|
||||||
{
|
|
||||||
sMutex = new LLMutex;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//static
|
|
||||||
void LLThreadSafeRefCount::cleanupThreadSafeRefCount()
|
|
||||||
{
|
|
||||||
delete sMutex;
|
|
||||||
sMutex = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
LLThreadSafeRefCount::LLThreadSafeRefCount() :
|
LLThreadSafeRefCount::LLThreadSafeRefCount() :
|
||||||
|
|||||||
@@ -38,9 +38,13 @@
|
|||||||
#include "llmemory.h"
|
#include "llmemory.h"
|
||||||
#include "apr_thread_cond.h"
|
#include "apr_thread_cond.h"
|
||||||
#include "llaprpool.h"
|
#include "llaprpool.h"
|
||||||
|
#include "llatomic.h"
|
||||||
|
|
||||||
#ifdef SHOW_ASSERT
|
#ifdef SHOW_ASSERT
|
||||||
extern LL_COMMON_API bool is_main_thread(void);
|
extern LL_COMMON_API bool is_main_thread(void);
|
||||||
|
#define ASSERT_SINGLE_THREAD do { static apr_os_thread_t first_thread_id = apr_os_thread_current(); llassert(apr_os_thread_equal(first_thread_id, apr_os_thread_current())); } while(0)
|
||||||
|
#else
|
||||||
|
#define ASSERT_SINGLE_THREAD do { } while(0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
class LLThread;
|
class LLThread;
|
||||||
@@ -74,7 +78,8 @@ class LL_COMMON_API LLThread
|
|||||||
private:
|
private:
|
||||||
static U32 sIDIter;
|
static U32 sIDIter;
|
||||||
static LLAtomicS32 sCount;
|
static LLAtomicS32 sCount;
|
||||||
|
static LLAtomicS32 sRunning;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef enum e_thread_status
|
typedef enum e_thread_status
|
||||||
{
|
{
|
||||||
@@ -92,8 +97,9 @@ public:
|
|||||||
|
|
||||||
static U32 currentID(); // Return ID of current thread
|
static U32 currentID(); // Return ID of current thread
|
||||||
static S32 getCount() { return sCount; }
|
static S32 getCount() { return sCount; }
|
||||||
|
static S32 getRunning() { return sRunning; }
|
||||||
static void yield(); // Static because it can be called by the main thread, which doesn't have an LLThread data structure.
|
static void yield(); // Static because it can be called by the main thread, which doesn't have an LLThread data structure.
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// PAUSE / RESUME functionality. See source code for important usage notes.
|
// PAUSE / RESUME functionality. See source code for important usage notes.
|
||||||
// Called from MAIN THREAD.
|
// Called from MAIN THREAD.
|
||||||
@@ -181,15 +187,18 @@ public:
|
|||||||
|
|
||||||
LLMutexBase() ;
|
LLMutexBase() ;
|
||||||
|
|
||||||
void lock(); //blocks
|
void lock(); // blocks
|
||||||
void unlock();
|
void unlock();
|
||||||
// Returns true if lock was obtained successfully.
|
// Returns true if lock was obtained successfully.
|
||||||
bool tryLock() { return !APR_STATUS_IS_EBUSY(apr_thread_mutex_trylock(mAPRMutexp)); }
|
bool tryLock() { return !APR_STATUS_IS_EBUSY(apr_thread_mutex_trylock(mAPRMutexp)); }
|
||||||
|
|
||||||
// non-blocking, but does do a lock/unlock so not free
|
// non-blocking, but does do a lock/unlock so not free
|
||||||
bool isLocked() { bool is_not_locked = tryLock(); if (is_not_locked) unlock(); return !is_not_locked; }
|
bool isLocked() { bool is_not_locked = tryLock(); if (is_not_locked) unlock(); return !is_not_locked; }
|
||||||
|
|
||||||
|
// Returns true if locked by this thread.
|
||||||
|
bool isSelfLocked() const;
|
||||||
|
|
||||||
// get ID of locking thread
|
// get ID of locking thread
|
||||||
bool isSelfLocked(); //return true if locked in a same thread
|
|
||||||
U32 lockingThread() const { return mLockingThread; }
|
U32 lockingThread() const { return mLockingThread; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -373,6 +382,16 @@ public:
|
|||||||
mNoHoldersCondition.signal(); // Tell waiting readers, see [5].
|
mNoHoldersCondition.signal(); // Tell waiting readers, see [5].
|
||||||
mNoHoldersCondition.unlock(); // Release lock on mHoldersCount.
|
mNoHoldersCondition.unlock(); // Release lock on mHoldersCount.
|
||||||
}
|
}
|
||||||
|
#if LL_DEBUG
|
||||||
|
// Really only intended for debugging purposes:
|
||||||
|
bool isLocked(void)
|
||||||
|
{
|
||||||
|
mNoHoldersCondition.lock();
|
||||||
|
bool res = mHoldersCount;
|
||||||
|
mNoHoldersCondition.unlock();
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
@@ -394,13 +413,6 @@ void LLThread::unlockData()
|
|||||||
|
|
||||||
class LL_COMMON_API LLThreadSafeRefCount
|
class LL_COMMON_API LLThreadSafeRefCount
|
||||||
{
|
{
|
||||||
public:
|
|
||||||
static void initThreadSafeRefCount(); // creates sMutex
|
|
||||||
static void cleanupThreadSafeRefCount(); // destroys sMutex
|
|
||||||
|
|
||||||
private:
|
|
||||||
static LLMutex* sMutex;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
LLThreadSafeRefCount(const LLThreadSafeRefCount&); // not implemented
|
LLThreadSafeRefCount(const LLThreadSafeRefCount&); // not implemented
|
||||||
LLThreadSafeRefCount&operator=(const LLThreadSafeRefCount&); // not implemented
|
LLThreadSafeRefCount&operator=(const LLThreadSafeRefCount&); // not implemented
|
||||||
@@ -413,31 +425,20 @@ public:
|
|||||||
|
|
||||||
void ref()
|
void ref()
|
||||||
{
|
{
|
||||||
if (sMutex) sMutex->lock();
|
|
||||||
mRef++;
|
mRef++;
|
||||||
if (sMutex) sMutex->unlock();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
S32 unref()
|
void unref()
|
||||||
{
|
{
|
||||||
llassert(mRef >= 1);
|
if (!--mRef) delete this;
|
||||||
if (sMutex) sMutex->lock();
|
}
|
||||||
S32 res = --mRef;
|
|
||||||
if (sMutex) sMutex->unlock();
|
|
||||||
if (0 == res)
|
|
||||||
{
|
|
||||||
delete this;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
S32 getNumRefs() const
|
S32 getNumRefs() const
|
||||||
{
|
{
|
||||||
return mRef;
|
return mRef;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
S32 mRef;
|
LLAtomicS32 mRef;
|
||||||
};
|
};
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|||||||
@@ -8,12 +8,15 @@ include(LLCommon)
|
|||||||
include(LLImage)
|
include(LLImage)
|
||||||
include(LLMath)
|
include(LLMath)
|
||||||
include(LLVFS)
|
include(LLVFS)
|
||||||
|
include(JPEG)
|
||||||
|
include(PNG)
|
||||||
include(ZLIB)
|
include(ZLIB)
|
||||||
|
|
||||||
include_directories(
|
include_directories(
|
||||||
${LLCOMMON_INCLUDE_DIRS}
|
${LLCOMMON_INCLUDE_DIRS}
|
||||||
${LLMATH_INCLUDE_DIRS}
|
${LLMATH_INCLUDE_DIRS}
|
||||||
${LLVFS_INCLUDE_DIRS}
|
${LLVFS_INCLUDE_DIRS}
|
||||||
|
${JPEG_INCLUDE_DIRS}
|
||||||
${PNG_INCLUDE_DIRS}
|
${PNG_INCLUDE_DIRS}
|
||||||
${ZLIB_INCLUDE_DIRS}
|
${ZLIB_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -269,7 +269,7 @@ U8* LLImageBase::allocateDataSize(S32 width, S32 height, S32 ncomponents, S32 si
|
|||||||
// LLImageRaw
|
// LLImageRaw
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
AITHREADSAFESIMPLE(S32, LLImageRaw::sGlobalRawMemory, );
|
AIThreadSafeSimpleDC<S32> LLImageRaw::sGlobalRawMemory;
|
||||||
S32 LLImageRaw::sRawImageCount = 0;
|
S32 LLImageRaw::sRawImageCount = 0;
|
||||||
S32 LLImageRaw::sRawImageCachedCount = 0;
|
S32 LLImageRaw::sRawImageCachedCount = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -248,7 +248,7 @@ protected:
|
|||||||
void setDataAndSize(U8 *data, S32 width, S32 height, S8 components) ;
|
void setDataAndSize(U8 *data, S32 width, S32 height, S8 components) ;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static AIThreadSafeSimple<S32> sGlobalRawMemory;
|
static AIThreadSafeSimpleDC<S32> sGlobalRawMemory;
|
||||||
static S32 sRawImageCount;
|
static S32 sRawImageCount;
|
||||||
|
|
||||||
static S32 sRawImageCachedCount;
|
static S32 sRawImageCachedCount;
|
||||||
|
|||||||
@@ -1,37 +1,32 @@
|
|||||||
/**
|
/**
|
||||||
* @file llimagedxt.cpp
|
* @file llimagedxt.cpp
|
||||||
*
|
*
|
||||||
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
|
||||||
*
|
|
||||||
* Copyright (c) 2001-2009, Linden Research, Inc.
|
|
||||||
*
|
|
||||||
* Second Life Viewer Source Code
|
* Second Life Viewer Source Code
|
||||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
* Copyright (C) 2010, Linden Research, Inc.
|
||||||
* to you under the terms of the GNU General Public License, version 2.0
|
|
||||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
|
||||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
|
||||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
|
||||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
|
||||||
*
|
*
|
||||||
* There are special exceptions to the terms and conditions of the GPL as
|
* This library is free software; you can redistribute it and/or
|
||||||
* it is applied to this Source Code. View the full text of the exception
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
* License as published by the Free Software Foundation;
|
||||||
* online at
|
* version 2.1 of the License only.
|
||||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
|
||||||
*
|
*
|
||||||
* By copying, modifying or distributing this software, you acknowledge
|
* This library is distributed in the hope that it will be useful,
|
||||||
* that you have read and understood your obligations described above,
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* and agree to abide by those obligations.
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
* License along with this library; if not, write to the Free Software
|
||||||
* COMPLETENESS OR PERFORMANCE.
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||||
* $/LicenseInfo$
|
* $/LicenseInfo$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "linden_common.h"
|
#include "linden_common.h"
|
||||||
|
|
||||||
#include "llimagedxt.h"
|
#include "llimagedxt.h"
|
||||||
|
#include "llmemory.h"
|
||||||
|
|
||||||
//static
|
//static
|
||||||
void LLImageDXT::checkMinWidthHeight(EFileFormat format, S32& width, S32& height)
|
void LLImageDXT::checkMinWidthHeight(EFileFormat format, S32& width, S32& height)
|
||||||
|
|||||||
@@ -363,8 +363,12 @@ S32 LLImageJ2C::calcHeaderSizeJ2C()
|
|||||||
return FIRST_PACKET_SIZE; // Hack. just needs to be >= actual header size...
|
return FIRST_PACKET_SIZE; // Hack. just needs to be >= actual header size...
|
||||||
}
|
}
|
||||||
|
|
||||||
static S32 cald_data_size_help(S32 w, S32 h, S32 comp, S32 discard_level, F32 rate)
|
//static
|
||||||
|
S32 LLImageJ2C::calcDataSizeJ2C(S32 w, S32 h, S32 comp, S32 discard_level, F32 rate)
|
||||||
{
|
{
|
||||||
|
// Note: this only provides an *estimate* of the size in bytes of an image level
|
||||||
|
// *TODO: find a way to read the true size (when available) and convey the fact
|
||||||
|
// that the result is an estimate in the other cases
|
||||||
if (rate <= 0.f) rate = .125f;
|
if (rate <= 0.f) rate = .125f;
|
||||||
while (discard_level > 0)
|
while (discard_level > 0)
|
||||||
{
|
{
|
||||||
@@ -375,22 +379,7 @@ static S32 cald_data_size_help(S32 w, S32 h, S32 comp, S32 discard_level, F32 ra
|
|||||||
discard_level--;
|
discard_level--;
|
||||||
}
|
}
|
||||||
S32 bytes = (S32)((F32)(w*h*comp)*rate);
|
S32 bytes = (S32)((F32)(w*h*comp)*rate);
|
||||||
return bytes;
|
bytes = llmax(bytes, calcHeaderSizeJ2C());
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//static
|
|
||||||
S32 LLImageJ2C::calcDataSizeJ2C(S32 w, S32 h, S32 comp, S32 discard_level, F32 rate)
|
|
||||||
{
|
|
||||||
static const LLCachedControl<F32> exponent("SianaJ2CSizeExponent", 1.0f);
|
|
||||||
static const LLCachedControl<S32> offset("SianaJ2CSizeOffset", 0);
|
|
||||||
S32 size = cald_data_size_help(w, h, comp, discard_level, rate);
|
|
||||||
S32 size_d0 = cald_data_size_help(w, h, comp, 0, rate);
|
|
||||||
|
|
||||||
llassert_always(size_d0);
|
|
||||||
S32 bytes = size_d0*pow((double)size/size_d0, (double)exponent) + offset;
|
|
||||||
bytes = llmax (0, bytes - 600);
|
|
||||||
bytes = ((bytes + (1000 - 1))/1000)*1000 + 600;
|
|
||||||
return bytes;
|
return bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,31 +2,25 @@
|
|||||||
* @file llimagepng.cpp
|
* @file llimagepng.cpp
|
||||||
* @brief LLImageFormatted glue to encode / decode PNG files.
|
* @brief LLImageFormatted glue to encode / decode PNG files.
|
||||||
*
|
*
|
||||||
* $LicenseInfo:firstyear=2007&license=viewergpl$
|
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
|
||||||
*
|
|
||||||
* Copyright (c) 2007-2009, Linden Research, Inc.
|
|
||||||
*
|
|
||||||
* Second Life Viewer Source Code
|
* Second Life Viewer Source Code
|
||||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
* Copyright (C) 2010, Linden Research, Inc.
|
||||||
* to you under the terms of the GNU General Public License, version 2.0
|
|
||||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
|
||||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
|
||||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
|
||||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
|
||||||
*
|
*
|
||||||
* There are special exceptions to the terms and conditions of the GPL as
|
* This library is free software; you can redistribute it and/or
|
||||||
* it is applied to this Source Code. View the full text of the exception
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
* License as published by the Free Software Foundation;
|
||||||
* online at
|
* version 2.1 of the License only.
|
||||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
|
||||||
*
|
*
|
||||||
* By copying, modifying or distributing this software, you acknowledge
|
* This library is distributed in the hope that it will be useful,
|
||||||
* that you have read and understood your obligations described above,
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* and agree to abide by those obligations.
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
* License along with this library; if not, write to the Free Software
|
||||||
* COMPLETENESS OR PERFORMANCE.
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||||
* $/LicenseInfo$
|
* $/LicenseInfo$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -66,6 +60,12 @@ BOOL LLImagePNG::updateData()
|
|||||||
|
|
||||||
// Decode the PNG data and extract sizing information
|
// Decode the PNG data and extract sizing information
|
||||||
LLPngWrapper pngWrapper;
|
LLPngWrapper pngWrapper;
|
||||||
|
if (!pngWrapper.isValidPng(getData()))
|
||||||
|
{
|
||||||
|
setLastError("LLImagePNG data does not have a valid PNG header!");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
LLPngWrapper::ImageInfo infop;
|
LLPngWrapper::ImageInfo infop;
|
||||||
if (! pngWrapper.readPng(getData(), NULL, &infop))
|
if (! pngWrapper.readPng(getData(), NULL, &infop))
|
||||||
{
|
{
|
||||||
@@ -96,6 +96,12 @@ BOOL LLImagePNG::decode(LLImageRaw* raw_image, F32 decode_time)
|
|||||||
|
|
||||||
// Decode the PNG data into the raw image
|
// Decode the PNG data into the raw image
|
||||||
LLPngWrapper pngWrapper;
|
LLPngWrapper pngWrapper;
|
||||||
|
if (!pngWrapper.isValidPng(getData()))
|
||||||
|
{
|
||||||
|
setLastError("LLImagePNG data does not have a valid PNG header!");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (! pngWrapper.readPng(getData(), raw_image))
|
if (! pngWrapper.readPng(getData(), raw_image))
|
||||||
{
|
{
|
||||||
setLastError(pngWrapper.getErrorMessage());
|
setLastError(pngWrapper.getErrorMessage());
|
||||||
|
|||||||
@@ -1,40 +1,36 @@
|
|||||||
/**
|
/**
|
||||||
* @file llimagetga.cpp
|
* @file llimagetga.cpp
|
||||||
*
|
*
|
||||||
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
|
||||||
*
|
|
||||||
* Copyright (c) 2001-2009, Linden Research, Inc.
|
|
||||||
*
|
|
||||||
* Second Life Viewer Source Code
|
* Second Life Viewer Source Code
|
||||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
* Copyright (C) 2010, Linden Research, Inc.
|
||||||
* to you under the terms of the GNU General Public License, version 2.0
|
|
||||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
|
||||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
|
||||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
|
||||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
|
||||||
*
|
*
|
||||||
* There are special exceptions to the terms and conditions of the GPL as
|
* This library is free software; you can redistribute it and/or
|
||||||
* it is applied to this Source Code. View the full text of the exception
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
* License as published by the Free Software Foundation;
|
||||||
* online at
|
* version 2.1 of the License only.
|
||||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
|
||||||
*
|
*
|
||||||
* By copying, modifying or distributing this software, you acknowledge
|
* This library is distributed in the hope that it will be useful,
|
||||||
* that you have read and understood your obligations described above,
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* and agree to abide by those obligations.
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
* License along with this library; if not, write to the Free Software
|
||||||
* COMPLETENESS OR PERFORMANCE.
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||||
* $/LicenseInfo$
|
* $/LicenseInfo$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "linden_common.h"
|
#include "linden_common.h"
|
||||||
|
|
||||||
#include "lldir.h"
|
|
||||||
#include "llimagetga.h"
|
#include "llimagetga.h"
|
||||||
|
|
||||||
|
#include "lldir.h"
|
||||||
#include "llerror.h"
|
#include "llerror.h"
|
||||||
#include "llmath.h"
|
#include "llmath.h"
|
||||||
|
#include "llpointer.h"
|
||||||
|
|
||||||
// For expanding 5-bit pixel values to 8-bit with best rounding
|
// For expanding 5-bit pixel values to 8-bit with best rounding
|
||||||
// static
|
// static
|
||||||
|
|||||||
@@ -32,11 +32,7 @@
|
|||||||
#ifndef LL_LLPNGWRAPPER_H
|
#ifndef LL_LLPNGWRAPPER_H
|
||||||
#define LL_LLPNGWRAPPER_H
|
#define LL_LLPNGWRAPPER_H
|
||||||
|
|
||||||
#if LL_WINDOWS
|
#include "png.h"
|
||||||
#include "libpng15/png.h"
|
|
||||||
#else
|
|
||||||
#include "libpng12/png.h"
|
|
||||||
#endif
|
|
||||||
#include "llimage.h"
|
#include "llimage.h"
|
||||||
|
|
||||||
class LLPngWrapper
|
class LLPngWrapper
|
||||||
|
|||||||
@@ -2,31 +2,25 @@
|
|||||||
* @file llimagej2coj.cpp
|
* @file llimagej2coj.cpp
|
||||||
* @brief This is an implementation of JPEG2000 encode/decode using OpenJPEG.
|
* @brief This is an implementation of JPEG2000 encode/decode using OpenJPEG.
|
||||||
*
|
*
|
||||||
* $LicenseInfo:firstyear=2006&license=viewergpl$
|
* $LicenseInfo:firstyear=2006&license=viewerlgpl$
|
||||||
*
|
|
||||||
* Copyright (c) 2006-2009, Linden Research, Inc.
|
|
||||||
*
|
|
||||||
* Second Life Viewer Source Code
|
* Second Life Viewer Source Code
|
||||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
* Copyright (C) 2010, Linden Research, Inc.
|
||||||
* to you under the terms of the GNU General Public License, version 2.0
|
|
||||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
|
||||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
|
||||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
|
||||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
|
||||||
*
|
*
|
||||||
* There are special exceptions to the terms and conditions of the GPL as
|
* This library is free software; you can redistribute it and/or
|
||||||
* it is applied to this Source Code. View the full text of the exception
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
* License as published by the Free Software Foundation;
|
||||||
* online at
|
* version 2.1 of the License only.
|
||||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
|
||||||
*
|
*
|
||||||
* By copying, modifying or distributing this software, you acknowledge
|
* This library is distributed in the hope that it will be useful,
|
||||||
* that you have read and understood your obligations described above,
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* and agree to abide by those obligations.
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
* License along with this library; if not, write to the Free Software
|
||||||
* COMPLETENESS OR PERFORMANCE.
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||||
* $/LicenseInfo$
|
* $/LicenseInfo$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -37,7 +31,7 @@
|
|||||||
#include "openjpeg.h"
|
#include "openjpeg.h"
|
||||||
|
|
||||||
#include "lltimer.h"
|
#include "lltimer.h"
|
||||||
#include "llmemory.h"
|
//#include "llmemory.h"
|
||||||
|
|
||||||
const char* fallbackEngineInfoLLImageJ2CImpl()
|
const char* fallbackEngineInfoLLImageJ2CImpl()
|
||||||
{
|
{
|
||||||
@@ -96,8 +90,15 @@ void info_callback(const char* msg, void*)
|
|||||||
lldebugs << "LLImageJ2COJ: " << chomp(msg) << llendl;
|
lldebugs << "LLImageJ2COJ: " << chomp(msg) << llendl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Divide a by 2 to the power of b and round upwards
|
||||||
|
int ceildivpow2(int a, int b)
|
||||||
|
{
|
||||||
|
return (a + (1 << b) - 1) >> b;
|
||||||
|
}
|
||||||
|
|
||||||
LLImageJ2COJ::LLImageJ2COJ() : LLImageJ2CImpl()
|
|
||||||
|
LLImageJ2COJ::LLImageJ2COJ()
|
||||||
|
: LLImageJ2CImpl()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,7 +181,7 @@ BOOL LLImageJ2COJ::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decod
|
|||||||
// dereference the array.
|
// dereference the array.
|
||||||
if(!image || !image->numcomps)
|
if(!image || !image->numcomps)
|
||||||
{
|
{
|
||||||
llwarns << "failed to decode image!" << llendl;
|
LL_WARNS("Texture") << "ERROR -> decodeImpl: failed to decode image!" << LL_ENDL;
|
||||||
if (image)
|
if (image)
|
||||||
{
|
{
|
||||||
opj_image_destroy(image);
|
opj_image_destroy(image);
|
||||||
@@ -195,7 +196,7 @@ BOOL LLImageJ2COJ::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decod
|
|||||||
{
|
{
|
||||||
if (image->comps[i].factor != base.getRawDiscardLevel())
|
if (image->comps[i].factor != base.getRawDiscardLevel())
|
||||||
{
|
{
|
||||||
llwarns << "Expected discard level not reached!" << llendl;
|
LL_WARNS("Texture") << "Expected discard level not reached!" << llendl;
|
||||||
// if we didn't get the discard level we're expecting, fail
|
// if we didn't get the discard level we're expecting, fail
|
||||||
opj_image_destroy(image);
|
opj_image_destroy(image);
|
||||||
base.decodeFailed();
|
base.decodeFailed();
|
||||||
@@ -256,7 +257,7 @@ BOOL LLImageJ2COJ::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decod
|
|||||||
}
|
}
|
||||||
else // Some rare OpenJPEG versions have this bug.
|
else // Some rare OpenJPEG versions have this bug.
|
||||||
{
|
{
|
||||||
llwarns << "ERROR -> decodeImpl: failed to decode image! (NULL comp data - OpenJPEG bug)" << llendl;
|
LL_WARNS("Texture") << "ERROR -> decodeImpl: failed to decode image! (NULL comp data - OpenJPEG bug)" << llendl;
|
||||||
opj_image_destroy(image);
|
opj_image_destroy(image);
|
||||||
|
|
||||||
base.decodeFailed();
|
base.decodeFailed();
|
||||||
@@ -391,7 +392,7 @@ BOOL LLImageJ2COJ::encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, con
|
|||||||
if (!bSuccess)
|
if (!bSuccess)
|
||||||
{
|
{
|
||||||
opj_cio_close(cio);
|
opj_cio_close(cio);
|
||||||
llinfos << "Failed to encode image." << llendl;
|
LL_WARNS("Texture") << "Failed to encode image." << llendl;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
codestream_length = cio_tell(cio);
|
codestream_length = cio_tell(cio);
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user