diff --git a/.gitignore b/.gitignore
index 1d7b8efd4..22089c19f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -142,7 +142,6 @@ moc_*.cpp
*.cache
*.patch
*.7z
-3rdParty
.svn
thumbs.db
Thumbs.db
@@ -160,7 +159,7 @@ code/build/*
code/build-2010/*
build/*
install/*
-build_vc*
+build_*
code/nel/tools/build_gamedata/configuration/buildsite.py
# Linux nel compile
diff --git a/.hgtags b/.hgtags
index 6a404b346..38ed6cd84 100644
--- a/.hgtags
+++ b/.hgtags
@@ -1,16 +1,27 @@
-950d650ca92e6041611258d7e5131ccf661e4ec2 compatibility-merge
-4eddbaff0c5e5d685db96ee3e8427aa0fd96ac83 ryzomcore/v0.8.0
-00d9b6e29e95f56785fbf85abe60afd34674f402 ryzomcore/v0.9.0
-79776c337176dd5b02e1a74fe5dfb703b91747aa ryzomcore/v0.9.1
-fedf2aa443d09707beed814b0f499c6a5519cc84 ryzomcore/v0.10.0
-edaa3624a56420b02ccc64c26059801a389927ee ryzomcore/v0.11.0
-e3fe4855f22c3e75722e015dc33c091c340b3ad7 ryzomcore/v0.11.1
-9e583b717fd63be0be9fd60b99087abf1691ea49 ryzomcore/v0.11.2
-bfe5628e14a024ba7ea32e4b326ae433a07856b9 ryzomcore/v0.11.3
-9a6120735daa97c96ac5d85ca35c7f21f607bd87 ryzomcore/v0.12.0
-3e17907af67e8d66d80e6b714707bbf912607f2a ryzom-patch-3.0.0
-153e0b605c9e0c83ba05b6428c62838b49cc84b2 ryzom-patch-3.0.1
-4300cc14aad098b1f86ea4c55577b7fa4a4cb5d2 ryzom-patch-3.1.0
-043aaeb3d8a2a54177581b57bda87a9deaad510e ryzom-patch-3.1.0-april_patch
-00dde390a394fce9da06c2f3264140282158d39f 3.3.0
-dcd4c4d161ef775136e18c7e8f5072b75dede27e ryzom-patch-3.3.1
+4eddbaff0c5e5d685db96ee3e8427aa0fd96ac83 v0.8.0
+00d9b6e29e95f56785fbf85abe60afd34674f402 v0.9.0
+79776c337176dd5b02e1a74fe5dfb703b91747aa v0.9.1
+fedf2aa443d09707beed814b0f499c6a5519cc84 v0.10.0
+edaa3624a56420b02ccc64c26059801a389927ee v0.11.0
+e3fe4855f22c3e75722e015dc33c091c340b3ad7 v0.11.1
+9e583b717fd63be0be9fd60b99087abf1691ea49 v0.11.2
+bfe5628e14a024ba7ea32e4b326ae433a07856b9 v0.11.3
+9a6120735daa97c96ac5d85ca35c7f21f607bd87 v0.12.0
+3e92c7104c20d6bc6c2147b4b5fc289e8621d322 v1.0.0
+8eb94c3549be898fdc4a7c6d791d2477bdc11a18 v1.0.1
+3e17907af67e8d66d80e6b714707bbf912607f2a ryzom/3.0.0
+153e0b605c9e0c83ba05b6428c62838b49cc84b2 ryzom/3.0.1
+9d41f2994d44b9aad92b83f945f114e4b6bed44a ryzom/3.0.2
+4300cc14aad098b1f86ea4c55577b7fa4a4cb5d2 ryzom/3.1.0
+d4060f217f4f834cc62a33f2f1ccdf3c28298066 ryzom/3.1.0-hotfix
+043aaeb3d8a2a54177581b57bda87a9deaad510e ryzom/3.1.0-april_patch
+4036ecf59e83960f03acebc2089eb2ff5eeaed0a ryzom/3.2.0
+18403bb9485da3d9742c6f007a16d5619ebfb196 ryzom/3.2.1
+822ff8f8917ad66e09e2c21c983282f6f693b9f6 ryzom/3.3.0
+00dde390a394fce9da06c2f3264140282158d39f ryzom/3.3.0
+dcd4c4d161ef775136e18c7e8f5072b75dede27e ryzom/3.3.1
+fc4be8ebec5ca754ef4453bc6a9faef90837c674 ryzom/3.4.0
+70eba02e8eab6920586dbabf74e9e8180c729980 ryzom/3.4.0-steam_fix
+3941482843f9cd130cfc16634efc08d34a98ed35 ryzom/3.4.0-atysmas
+ecae9feb4cceb78103e5d7236caccaf450796cdb ryzom/3.5.0
+95783afa226f241062134eb62f4323295d29ac84 ryzom/3.5.0.9637
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 000000000..0ad25db4b
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,661 @@
+ GNU AFFERO GENERAL PUBLIC LICENSE
+ Version 3, 19 November 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU Affero General Public License is a free, copyleft license for
+software and other kinds of works, specifically designed to ensure
+cooperation with the community in the case of network server software.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+our General Public Licenses are intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.
+
+ 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
+them 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.
+
+ Developers that use our General Public Licenses protect your rights
+with two steps: (1) assert copyright on the software, and (2) offer
+you this License which gives you legal permission to copy, distribute
+and/or modify the software.
+
+ A secondary benefit of defending all users' freedom is that
+improvements made in alternate versions of the program, if they
+receive widespread use, become available for other developers to
+incorporate. Many developers of free software are heartened and
+encouraged by the resulting cooperation. However, in the case of
+software used on network servers, this result may fail to come about.
+The GNU General Public License permits making a modified version and
+letting the public access it on a server without ever releasing its
+source code to the public.
+
+ The GNU Affero General Public License is designed specifically to
+ensure that, in such cases, the modified source code becomes available
+to the community. It requires the operator of a network server to
+provide the source code of the modified version running there to the
+users of that server. Therefore, public use of a modified version, on
+a publicly accessible server, gives the public access to the source
+code of the modified version.
+
+ An older license, called the Affero General Public License and
+published by Affero, was designed to accomplish similar goals. This is
+a different license, not a version of the Affero GPL, but Affero has
+released a new version of the Affero GPL which permits relicensing under
+this license.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU Affero General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If 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 convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Remote Network Interaction; Use with the GNU General Public License.
+
+ Notwithstanding any other provision of this License, if you modify the
+Program, your modified version must prominently offer all users
+interacting with it remotely through a computer network (if your version
+supports such interaction) an opportunity to receive the Corresponding
+Source of your version by providing access to the Corresponding Source
+from a network server at no charge, through some standard or customary
+means of facilitating copying of software. This Corresponding Source
+shall include the Corresponding Source for any work covered by version 3
+of the GNU General Public License that is incorporated pursuant to the
+following paragraph.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the work with which it is combined will remain governed by version
+3 of the GNU General Public License.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU Affero General Public License from time to time. Such new versions
+will be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU Affero General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU Affero General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU Affero General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published
+ by the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If your software can interact with users remotely through a computer
+network, you should also make sure that it provides a way for users to
+get its source. For example, if your program is a web application, its
+interface could display a "Source" link that leads users to an archive
+of the code. There are many ways you could offer source, and different
+solutions will be better for different programs; see section 13 for the
+specific requirements.
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU AGPL, see
+.
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 6e0f2b2a7..0e8396061 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -1,5 +1,6 @@
jobs:
- job: ubuntu16
+ timeoutInMinutes: 120
pool:
vmImage: 'Ubuntu-16.04'
steps:
@@ -12,20 +13,27 @@ jobs:
sudo apt-get install gcc-8 g++-8 -y
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 60
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 60
- sudo apt-get install libmysqlclient-dev -y
sudo apt-get install bison autoconf automake -y
- sudo apt-get install libpng12-dev libjpeg62-dev -y
+ sudo apt-get install libpng12-dev -y
+ sudo apt-get install libjpeg-dev -y
+ sudo apt-get install libgif-dev libfreetype6-dev -y
+ sudo apt-get install freeglut3-dev -y
sudo apt-get install liblua5.1-dev libluabind-dev libcpptest-dev -y
sudo apt-get install libogg-dev libvorbis-dev libopenal-dev -y
- sudo apt-get install libgif-dev libfreetype6-dev -y
+ sudo apt-get install libavcodec-dev libavformat-dev libavdevice-dev libswscale-dev libpostproc-dev -y
+ sudo apt-get install libmysqlclient-dev -y
sudo apt-get install libxml2-dev -y
- sudo apt-get install libcurl4-openssl-dev -y
+ sudo apt-get install libcurl4-openssl-dev libssl-dev -y
+ sudo apt-get install libsquish-dev -y
+ sudo apt-get install liblzma-dev -y
+ sudo apt-get install libgsf-1-dev -y
+ sudo apt-get install qtbase5-dev qttools5-dev qttools5-dev-tools
displayName: 'Dependencies'
- script: |
mkdir build
cmake --version
cd build
- cmake -DWITH_NEL_TESTS=OFF -DWITH_NEL_SAMPLES=ON -DWITH_LUA51=ON -DWITH_RYZOM_SERVER=ON -DWITH_RYZOM_TOOLS=OFF -DWITH_NEL_TOOLS=OFF ../code
+ cmake -DWITH_STATIC=ON -DWITH_NEL_TESTS=OFF -DWITH_NEL_SAMPLES=ON -DWITH_LUA51=ON -DWITH_RYZOM=ON -DWITH_RYZOM_SERVER=ON -DWITH_RYZOM_CLIENT=ON -DWITH_RYZOM_TOOLS=ON -DWITH_NEL_TOOLS=ON -DWITH_NELNS=ON -DWITH_NELNS_LOGIN_SYSTEM=ON -DWITH_NELNS_SERVER=ON -DWITH_QT5=ON -DWITH_LIBGSF=ON ../code
cat CMakeCache.txt
displayName: 'CMake'
- script: |
diff --git a/code/.clang-format b/code/.clang-format
new file mode 100644
index 000000000..e407c68c5
--- /dev/null
+++ b/code/.clang-format
@@ -0,0 +1,24 @@
+---
+BasedOnStyle: WebKit
+AllowShortFunctionsOnASingleLine: All
+BraceWrapping:
+ AfterClass: true
+ AfterControlStatement: true
+ AfterEnum: true
+ AfterFunction: true
+ AfterNamespace: false
+ AfterObjCDeclaration: true
+ AfterStruct: true
+ AfterUnion: true
+ BeforeCatch: true
+ BeforeElse: true
+ IndentBraces: false
+BreakBeforeBraces: Custom
+BreakConstructorInitializersBeforeComma: 'false'
+NamespaceIndentation: None
+PointerAlignment: Right
+SortIncludes: 'false'
+TabWidth: '4'
+UseTab: ForIndentation
+
+...
diff --git a/code/.editorconfig b/code/.editorconfig
new file mode 100644
index 000000000..e4aef2c53
--- /dev/null
+++ b/code/.editorconfig
@@ -0,0 +1,23 @@
+; Top-most EditorConfig file
+root = true
+
+; 4-column tab indentation
+[*.cpp]
+indent_style = tab
+indent_size = 4
+
+[*.c]
+indent_style = tab
+indent_size = 4
+
+[*.h]
+indent_style = tab
+indent_size = 4
+
+[*.py]
+indent_style = tab
+indent_size = 4
+
+[*.config]
+indent_style = space
+indent_size = 2
diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt
index 681f7a959..31554fac4 100644
--- a/code/CMakeLists.txt
+++ b/code/CMakeLists.txt
@@ -48,15 +48,15 @@ CHECK_OUT_OF_SOURCE()
IF(CMAKE_VERSION VERSION_GREATER "2.8.10")
STRING(TIMESTAMP CURRENT_YEAR "%Y")
ELSE()
- SET(CURRENT_YEAR "2016")
+ SET(CURRENT_YEAR "2019")
ENDIF()
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(RyzomCore CXX C)
SET(NL_VERSION_MAJOR 1)
SET(NL_VERSION_MINOR 0)
-SET(NL_VERSION_PATCH 0)
-SET(YEAR "2004-${CURRENT_YEAR}")
+SET(NL_VERSION_PATCH 2)
+SET(YEAR "2001-${CURRENT_YEAR}")
SET(AUTHOR "Winch Gate and The Ryzom Core Community")
#-----------------------------------------------------------------------------
@@ -92,6 +92,29 @@ NL_SETUP_BUILD_FLAGS()
NL_SETUP_PREFIX_PATHS()
RYZOM_SETUP_PREFIX_PATHS()
+#-----------------------------------------------------------------------------
+# Default values for URL's
+SET(RYZOM_CLIENT_CREATE_ACCOUNT_URL "https://open.ryzom.dev/ams/" CACHE STRING "Ryzom Client Create Account URL")
+SET(RYZOM_CLIENT_EDIT_ACCOUNT_URL "https://open.ryzom.dev/ams/" CACHE STRING "Ryzom Client Edit Account URL")
+SET(RYZOM_CLIENT_FORGET_PASSWORD_URL "https://open.ryzom.dev/ams/" CACHE STRING "Ryzom Client Forget Password URL")
+SET(RYZOM_CLIENT_PATCH_URL "https://cdn.ryzom.dev/open/patch/" CACHE STRING "Ryzom Client Patch URL")
+
+SET(RYZOM_WEBIG_MAIN_URL "https://open.ryzom.dev/" CACHE STRING "Ryzom Client WebIG Main URL")
+SET(RYZOM_WEBIG_TRUSTED_DOMAIN "open.ryzom.dev" CACHE STRING "Ryzom Client WebIG Trusted Domain")
+
+#-----------------------------------------------------------------------------
+# urls when compiling ryzom live client
+IF(WITH_RYZOM_LIVE)
+ MESSAGE("Using RYZOM_LIVE urls")
+ SET(RYZOM_CLIENT_CREATE_ACCOUNT_URL "https://account.ryzom.com/signup/from_client.php")
+ SET(RYZOM_CLIENT_EDIT_ACCOUNT_URL "https://account.ryzom.com/payment_profile/index.php")
+ SET(RYZOM_CLIENT_FORGET_PASSWORD_URL "https://account.ryzom.com/payment_profile/lost_secure_password.php")
+ SET(RYZOM_CLIENT_PATCH_URL "http://dl.ryzom.com/patch_live")
+
+ SET(RYZOM_WEBIG_MAIN_URL "https://app.ryzom.com/")
+ SET(RYZOM_WEBIG_TRUSTED_DOMAIN "app.ryzom.com")
+ENDIF()
+
#-----------------------------------------------------------------------------
#Platform specifics
@@ -216,6 +239,8 @@ IF(WITH_NEL)
IF(WITH_GUI)
FIND_PACKAGE(Luabind REQUIRED)
+ ENDIF()
+
FIND_PACKAGE(CURL REQUIRED)
IF((WIN32 OR CURL_LIBRARIES MATCHES "\\.a") AND WITH_STATIC_CURL)
@@ -265,7 +290,6 @@ IF(WITH_NEL)
ENDIF()
ENDIF()
ENDIF()
- ENDIF()
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/nel/include)
ADD_SUBDIRECTORY(nel)
diff --git a/code/CMakeModules/ConfigureChecks.cmake b/code/CMakeModules/ConfigureChecks.cmake
index 1eade142c..9de2e8214 100644
--- a/code/CMakeModules/ConfigureChecks.cmake
+++ b/code/CMakeModules/ConfigureChecks.cmake
@@ -37,15 +37,25 @@ MACRO(NL_CONFIGURE_CHECKS)
SET(RYZOM_VERSION_PATCH ${NL_VERSION_PATCH})
ENDIF()
- SET(NL_VERSION "${NL_VERSION_MAJOR}.${NL_VERSION_MINOR}.${NL_VERSION_PATCH}.${REVISION}")
+ IF(DESCRIBE)
+ SET(NL_VERSION "${DESCRIBE}")
+ ELSE()
+ SET(NL_VERSION "${NL_VERSION_MAJOR}.${NL_VERSION_MINOR}.${NL_VERSION_PATCH}.${REVISION}")
+ ENDIF()
SET(NL_VERSION_RC "${NL_VERSION_MAJOR},${NL_VERSION_MINOR},${NL_VERSION_PATCH},${REVISION}")
+ SET(NL_PRODUCT_VERSION "${NL_VERSION_MAJOR}.${NL_VERSION_MINOR}.${NL_VERSION_PATCH}")
SET(RYZOM_VERSION_SHORT "${RYZOM_VERSION_MAJOR}.${RYZOM_VERSION_MINOR}.${RYZOM_VERSION_PATCH}")
- SET(RYZOM_VERSION "${RYZOM_VERSION_SHORT}.${REVISION}")
+ IF(DESCRIBE)
+ SET(RYZOM_VERSION "${DESCRIBE}")
+ ELSE()
+ SET(RYZOM_VERSION "${RYZOM_VERSION_SHORT}.${REVISION}")
+ ENDIF()
SET(RYZOM_VERSION_RC "${RYZOM_VERSION_MAJOR},${RYZOM_VERSION_MINOR},${RYZOM_VERSION_PATCH},${REVISION}")
+ SET(RYZOM_PRODUCT_VERSION "${RYZOM_VERSION_MAJOR}.${RYZOM_VERSION_MINOR}.${RYZOM_VERSION_PATCH}")
NOW(BUILD_DATE)
- SET(COPYRIGHT "${YEAR} ${AUTHOR}")
+ SET(COPYRIGHT "Copyright (C) ${YEAR} ${AUTHOR}")
IF(NOT RYZOM_CLIENT_ICON)
SET(RYZOM_CLIENT_ICON "ryzom_client")
diff --git a/code/CMakeModules/Find3dsMaxSDK.cmake b/code/CMakeModules/Find3dsMaxSDK.cmake
index cf49a90d3..cb00df78e 100644
--- a/code/CMakeModules/Find3dsMaxSDK.cmake
+++ b/code/CMakeModules/Find3dsMaxSDK.cmake
@@ -11,18 +11,56 @@ if(MAXSDK_INCLUDE_DIR)
SET(MAXSDK_FIND_QUIETLY TRUE)
endif()
+set(_pf_x86 "PROGRAMFILES(x86)")
+
FIND_PATH(MAXSDK_DIR
"include/maxversion.h"
HINTS
"$ENV{MAXSDK_DIR}"
PATHS
+ "$ENV{ADSK_3DSMAX_SDK_2021}/maxsdk"
+ "$ENV{ADSK_3DSMAX_SDK_2020}/maxsdk"
+ "$ENV{ADSK_3DSMAX_SDK_2019}/maxsdk"
+ "$ENV{ADSK_3DSMAX_SDK_2018}/maxsdk"
+ "$ENV{ADSK_3DSMAX_SDK_2017}/maxsdk"
+ "$ENV{ADSK_3DSMAX_SDK_2016}/maxsdk"
+ "$ENV{ADSK_3DSMAX_SDK_2015}/maxsdk"
+ "$ENV{ADSK_3DSMAX_SDK_2014}/maxsdk"
+ "$ENV{ADSK_3DSMAX_SDK_2013}/maxsdk"
"$ENV{ADSK_3DSMAX_SDK_2012}/maxsdk"
"$ENV{3DSMAX_2011_SDK_PATH}/maxsdk"
+ "$ENV{${_pf_x86}}/Autodesk/3ds Max 2021 SDK/maxsdk"
+ "$ENV{${_pf_x86}}/Autodesk/3ds Max 2020 SDK/maxsdk"
+ "$ENV{${_pf_x86}}/Autodesk/3ds Max 2019 SDK/maxsdk"
+ "$ENV{${_pf_x86}}/Autodesk/3ds Max 2018 SDK/maxsdk"
+ "$ENV{${_pf_x86}}/Autodesk/3ds Max 2017 SDK/maxsdk"
+ "$ENV{${_pf_x86}}/Autodesk/3ds Max 2016 SDK/maxsdk"
+ "$ENV{${_pf_x86}}/Autodesk/3ds Max 2015 SDK/maxsdk"
+ "$ENV{${_pf_x86}}/Autodesk/3ds Max 2014 SDK/maxsdk"
+ "$ENV{${_pf_x86}}/Autodesk/3ds Max 2013 SDK/maxsdk"
+ "$ENV{${_pf_x86}}/Autodesk/3ds Max 2012 SDK/maxsdk"
+ "$ENV{${_pf_x86}}/Autodesk/3ds Max 2011 SDK/maxsdk"
+ "$ENV{${_pf_x86}}/Autodesk/3ds Max 2010 SDK/maxsdk"
+ "$ENV{${_pf_x86}}/Autodesk/3ds Max 2009 SDK/maxsdk"
+ "$ENV{${_pf_x86}}/Autodesk/3ds Max 2008 SDK/maxsdk"
+ "$ENV{${_pf_x86}}/Autodesk/3ds Max 9 SDK/maxsdk"
+ "$ENV{${_pf_x86}}/Autodesk/3dsMax8/maxsdk"
+ "$ENV{PROGRAMFILES}/Autodesk/3ds Max 2021 SDK/maxsdk"
+ "$ENV{PROGRAMFILES}/Autodesk/3ds Max 2020 SDK/maxsdk"
+ "$ENV{PROGRAMFILES}/Autodesk/3ds Max 2019 SDK/maxsdk"
+ "$ENV{PROGRAMFILES}/Autodesk/3ds Max 2018 SDK/maxsdk"
"$ENV{PROGRAMFILES}/Autodesk/3ds Max 2017 SDK/maxsdk"
+ "$ENV{PROGRAMFILES}/Autodesk/3ds Max 2016 SDK/maxsdk"
+ "$ENV{PROGRAMFILES}/Autodesk/3ds Max 2015 SDK/maxsdk"
+ "$ENV{PROGRAMFILES}/Autodesk/3ds Max 2014 SDK/maxsdk"
+ "$ENV{PROGRAMFILES}/Autodesk/3ds Max 2013 SDK/maxsdk"
+ "$ENV{PROGRAMFILES}/Autodesk/3ds Max 2012 SDK/maxsdk"
+ "$ENV{PROGRAMFILES}/Autodesk/3ds Max 2011 SDK/maxsdk"
"$ENV{PROGRAMFILES}/Autodesk/3ds Max 2010 SDK/maxsdk"
"$ENV{PROGRAMFILES}/Autodesk/3ds Max 2009 SDK/maxsdk"
"$ENV{PROGRAMFILES}/Autodesk/3ds Max 2008 SDK/maxsdk"
"$ENV{PROGRAMFILES}/Autodesk/3ds Max 9 SDK/maxsdk"
+ "$ENV{PROGRAMFILES}/Autodesk/3dsMax8/maxsdk"
)
FIND_PATH(MAXSDK_INCLUDE_DIR
diff --git a/code/CMakeModules/FindFMOD.cmake b/code/CMakeModules/FindFMOD.cmake
index b28f77b1e..3bdd09e8f 100644
--- a/code/CMakeModules/FindFMOD.cmake
+++ b/code/CMakeModules/FindFMOD.cmake
@@ -1,57 +1,9 @@
-# - Locate FMOD library
-# This module defines
-# FMOD_LIBRARY, the library to link against
-# FMOD_FOUND, if false, do not try to link to FMOD
-# FMOD_INCLUDE_DIR, where to find headers.
-
-IF(FMOD_LIBRARY AND FMOD_INCLUDE_DIR)
- # in cache already
- SET(FMOD_FIND_QUIETLY TRUE)
-ENDIF()
-
-
-FIND_PATH(FMOD_INCLUDE_DIR
- fmod.h
- PATHS
- $ENV{FMOD_DIR}/include
- /usr/local/include
- /usr/include
- /sw/include
- /opt/local/include
- /opt/csw/include
- /opt/include
- PATH_SUFFIXES fmod fmod3
-)
+INCLUDE(FindHelpers)
IF(TARGET_X64)
- SET(FMOD_LIBRARY_NAMES fmod64 fmod)
+ SET(FMOD_BASE fmod64)
ELSE()
- SET(FMOD_LIBRARY_NAMES fmodvc fmod)
+ SET(FMOD_BASE fmodvc)
ENDIF()
-FIND_LIBRARY(FMOD_LIBRARY
- NAMES
- ${FMOD_LIBRARY_NAMES}
- PATHS
- $ENV{FMOD_DIR}/lib
- /usr/local/lib
- /usr/lib
- /usr/local/X11R6/lib
- /usr/X11R6/lib
- /sw/lib
- /opt/local/lib
- /opt/csw/lib
- /opt/lib
- /usr/freeware/lib64
-)
-
-IF(FMOD_LIBRARY AND FMOD_INCLUDE_DIR)
- SET(FMOD_FOUND "YES")
- IF(NOT FMOD_FIND_QUIETLY)
- MESSAGE(STATUS "Found FMOD: ${FMOD_LIBRARY}")
- ENDIF()
-ELSE()
- IF(NOT FMOD_FIND_QUIETLY)
- MESSAGE(STATUS "Warning: Unable to find FMOD!")
- ENDIF()
-ENDIF()
+FIND_PACKAGE_HELPER(FMOD fmod.h RELEASE ${FMOD_BASE} DEBUG ${FMOD_BASE}d SUFFIXES fmod3)
diff --git a/code/CMakeModules/FindGLIB2.cmake b/code/CMakeModules/FindGLIB2.cmake
new file mode 100644
index 000000000..942b04530
--- /dev/null
+++ b/code/CMakeModules/FindGLIB2.cmake
@@ -0,0 +1,217 @@
+# - Try to find GLib2
+# Once done this will define
+#
+# GLIB2_FOUND - system has GLib2
+# GLIB2_INCLUDE_DIRS - the GLib2 include directory
+# GLIB2_LIBRARIES - Link these to use GLib2
+#
+# HAVE_GLIB_GREGEX_H glib has gregex.h header and
+# supports g_regex_match_simple
+#
+# Copyright (c) 2006 Andreas Schneider
+# Copyright (c) 2006 Philippe Bernery
+# Copyright (c) 2007 Daniel Gollub
+# Copyright (c) 2007 Alban Browaeys
+# Copyright (c) 2008 Michael Bell
+# Copyright (c) 2008 Bjoern Ricks
+#
+# Redistribution and use is allowed according to the terms of the New
+# BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+#
+
+
+IF (GLIB2_LIBRARIES AND GLIB2_INCLUDE_DIRS )
+ # in cache already
+ SET(GLIB2_FOUND TRUE)
+ELSE (GLIB2_LIBRARIES AND GLIB2_INCLUDE_DIRS )
+
+ INCLUDE(FindPkgConfig)
+
+ ## Glib
+ IF ( GLIB2_FIND_REQUIRED )
+ SET( _pkgconfig_REQUIRED "REQUIRED" )
+ ELSE ( GLIB2_FIND_REQUIRED )
+ SET( _pkgconfig_REQUIRED "" )
+ ENDIF ( GLIB2_FIND_REQUIRED )
+
+ IF ( GLIB2_MIN_VERSION )
+ PKG_SEARCH_MODULE( GLIB2 ${_pkgconfig_REQUIRED} glib-2.0>=${GLIB2_MIN_VERSION} )
+ ELSE ( GLIB2_MIN_VERSION )
+ PKG_SEARCH_MODULE( GLIB2 ${_pkgconfig_REQUIRED} glib-2.0 )
+ ENDIF ( GLIB2_MIN_VERSION )
+ IF ( PKG_CONFIG_FOUND )
+ IF ( GLIB2_FOUND )
+ SET ( GLIB2_CORE_FOUND TRUE )
+ ELSE ( GLIB2_FOUND )
+ SET ( GLIB2_CORE_FOUND FALSE )
+ ENDIF ( GLIB2_FOUND )
+ ENDIF ( PKG_CONFIG_FOUND )
+
+ # Look for glib2 include dir and libraries w/o pkgconfig
+ IF ( NOT GLIB2_FOUND AND NOT PKG_CONFIG_FOUND )
+ FIND_PATH(
+ _glibconfig_include_DIR
+ NAMES
+ glibconfig.h
+ PATHS
+ /opt/gnome/lib64
+ /opt/gnome/lib
+ /opt/lib/
+ /opt/local/lib
+ /sw/lib/
+ /usr/lib64
+ /usr/lib
+ /usr/local/include
+ ${CMAKE_LIBRARY_PATH}
+ PATH_SUFFIXES
+ glib-2.0/include
+ )
+
+ FIND_PATH(
+ _glib2_include_DIR
+ NAMES
+ glib.h
+ PATHS
+ /opt/gnome/include
+ /opt/local/include
+ /sw/include
+ /usr/include
+ /usr/local/include
+ PATH_SUFFIXES
+ glib-2.0
+ )
+
+ #MESSAGE(STATUS "Glib headers: ${_glib2_include_DIR}")
+
+ FIND_LIBRARY(
+ _glib2_link_DIR
+ NAMES
+ glib-2.0
+ glib
+ PATHS
+ /opt/gnome/lib
+ /opt/local/lib
+ /sw/lib
+ /usr/lib
+ /usr/local/lib
+ )
+ IF ( _glib2_include_DIR AND _glib2_link_DIR )
+ SET ( _glib2_FOUND TRUE )
+ ENDIF ( _glib2_include_DIR AND _glib2_link_DIR )
+
+
+ IF ( _glib2_FOUND )
+ SET ( GLIB2_INCLUDE_DIRS ${_glib2_include_DIR} ${_glibconfig_include_DIR} )
+ SET ( GLIB2_LIBRARIES ${_glib2_link_DIR} )
+ SET ( GLIB2_CORE_FOUND TRUE )
+ ELSE ( _glib2_FOUND )
+ SET ( GLIB2_CORE_FOUND FALSE )
+ ENDIF ( _glib2_FOUND )
+
+ # Handle dependencies
+ # libintl
+ IF ( NOT LIBINTL_FOUND )
+ FIND_PATH(LIBINTL_INCLUDE_DIR
+ NAMES
+ libintl.h
+ PATHS
+ /opt/gnome/include
+ /opt/local/include
+ /sw/include
+ /usr/include
+ /usr/local/include
+ )
+
+ FIND_LIBRARY(LIBINTL_LIBRARY
+ NAMES
+ intl
+ PATHS
+ /opt/gnome/lib
+ /opt/local/lib
+ /sw/lib
+ /usr/local/lib
+ /usr/lib
+ )
+
+ IF (LIBINTL_LIBRARY AND LIBINTL_INCLUDE_DIR)
+ SET (LIBINTL_FOUND TRUE)
+ ENDIF (LIBINTL_LIBRARY AND LIBINTL_INCLUDE_DIR)
+ ENDIF ( NOT LIBINTL_FOUND )
+
+ # libiconv
+ IF ( NOT LIBICONV_FOUND )
+ FIND_PATH(LIBICONV_INCLUDE_DIR
+ NAMES
+ iconv.h
+ PATHS
+ /opt/gnome/include
+ /opt/local/include
+ /opt/local/include
+ /sw/include
+ /sw/include
+ /usr/local/include
+ /usr/include
+ PATH_SUFFIXES
+ glib-2.0
+ )
+
+ FIND_LIBRARY(LIBICONV_LIBRARY
+ NAMES
+ iconv
+ PATHS
+ /opt/gnome/lib
+ /opt/local/lib
+ /sw/lib
+ /usr/lib
+ /usr/local/lib
+ )
+
+ IF (LIBICONV_LIBRARY AND LIBICONV_INCLUDE_DIR)
+ SET (LIBICONV_FOUND TRUE)
+ ENDIF (LIBICONV_LIBRARY AND LIBICONV_INCLUDE_DIR)
+ ENDIF ( NOT LIBICONV_FOUND )
+
+ IF (LIBINTL_FOUND)
+ SET (GLIB2_LIBRARIES ${GLIB2_LIBRARIES} ${LIBINTL_LIBRARY})
+ SET (GLIB2_INCLUDE_DIRS ${GLIB2_INCLUDE_DIRS} ${LIBINTL_INCLUDE_DIR})
+ ENDIF (LIBINTL_FOUND)
+
+ IF (LIBICONV_FOUND)
+ SET (GLIB2_LIBRARIES ${GLIB2_LIBRARIES} ${LIBICONV_LIBRARY})
+ SET (GLIB2_INCLUDE_DIRS ${GLIB2_INCLUDE_DIRS} ${LIBICONV_INCLUDE_DIR})
+ ENDIF (LIBICONV_FOUND)
+
+ ENDIF ( NOT GLIB2_FOUND AND NOT PKG_CONFIG_FOUND )
+ ##
+
+ IF (GLIB2_CORE_FOUND AND GLIB2_INCLUDE_DIRS AND GLIB2_LIBRARIES)
+ SET (GLIB2_FOUND TRUE)
+ ENDIF (GLIB2_CORE_FOUND AND GLIB2_INCLUDE_DIRS AND GLIB2_LIBRARIES)
+
+ IF (GLIB2_FOUND)
+ IF (NOT GLIB2_FIND_QUIETLY)
+ MESSAGE (STATUS "Found GLib2: ${GLIB2_LIBRARIES} ${GLIB2_INCLUDE_DIRS}")
+ ENDIF (NOT GLIB2_FIND_QUIETLY)
+ ELSE (GLIB2_FOUND)
+ IF (GLIB2_FIND_REQUIRED)
+ MESSAGE (SEND_ERROR "Could not find GLib2")
+ ENDIF (GLIB2_FIND_REQUIRED)
+ ENDIF (GLIB2_FOUND)
+
+ # show the GLIB2_INCLUDE_DIRS and GLIB2_LIBRARIES variables only in the advanced view
+ MARK_AS_ADVANCED(GLIB2_INCLUDE_DIRS GLIB2_LIBRARIES)
+ MARK_AS_ADVANCED(LIBICONV_INCLUDE_DIR LIBICONV_LIBRARY)
+ MARK_AS_ADVANCED(LIBINTL_INCLUDE_DIR LIBINTL_LIBRARY)
+
+ENDIF (GLIB2_LIBRARIES AND GLIB2_INCLUDE_DIRS)
+
+IF ( GLIB2_FOUND )
+ # Check if system has a newer version of glib
+ # which supports g_regex_match_simple
+ INCLUDE( CheckIncludeFiles )
+ SET( CMAKE_REQUIRED_INCLUDES ${GLIB2_INCLUDE_DIRS} )
+ CHECK_INCLUDE_FILES ( glib/gregex.h HAVE_GLIB_GREGEX_H )
+ # Reset CMAKE_REQUIRED_INCLUDES
+ SET( CMAKE_REQUIRED_INCLUDES "" )
+ENDIF( GLIB2_FOUND )
diff --git a/code/CMakeModules/FindGOBJECT2.cmake b/code/CMakeModules/FindGOBJECT2.cmake
new file mode 100644
index 000000000..d0d4cda0d
--- /dev/null
+++ b/code/CMakeModules/FindGOBJECT2.cmake
@@ -0,0 +1,51 @@
+# - Try to find GObject2
+# Find GObject2 headers, libraries and the answer to all questions.
+#
+# GOBJECT2_FOUND True if GOBJECT2 got found
+# GOBJECT2_INCLUDE_DIRS Location of GOBJECT2 headers
+# GOBJECT2_LIBRARIES List of libraries to use GOBJECT2
+#
+# Copyright (c) 2008 Bjoern Ricks
+#
+# Redistribution and use is allowed according to the terms of the New
+# BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+#
+
+INCLUDE( FindPkgConfig )
+
+IF ( GOBJECT2_FIND_REQUIRED )
+ SET( _pkgconfig_REQUIRED "REQUIRED" )
+ELSE( GOBJECT2_FIND_REQUIRED )
+ SET( _pkgconfig_REQUIRED "" )
+ENDIF ( GOBJECT2_FIND_REQUIRED )
+
+IF ( GOBJECT2_MIN_VERSION )
+ PKG_SEARCH_MODULE( GOBJECT2 ${_pkgconfig_REQUIRED} gobject-2.0>=${GOBJECT2_MIN_VERSION} )
+ELSE ( GOBJECT2_MIN_VERSION )
+ PKG_SEARCH_MODULE( GOBJECT2 ${_pkgconfig_REQUIRED} gobject-2.0 )
+ENDIF ( GOBJECT2_MIN_VERSION )
+
+
+IF( NOT GOBJECT2_FOUND AND NOT PKG_CONFIG_FOUND )
+ FIND_PATH( GOBJECT2_INCLUDE_DIRS gobject/gobject.h PATH_SUFFIXES glib-2.0)
+ FIND_LIBRARY( GOBJECT2_LIBRARIES gobject-2.0 )
+
+ # Report results
+ IF ( GOBJECT2_LIBRARIES AND GOBJECT2_INCLUDE_DIRS )
+ SET( GOBJECT2_FOUND 1 )
+ IF ( NOT GOBJECT2_FIND_QUIETLY )
+ MESSAGE( STATUS "Found GOBJECT2: ${GOBJECT2_LIBRARIES}" )
+ ENDIF ( NOT GOBJECT2_FIND_QUIETLY )
+ ELSE ( GOBJECT2_LIBRARIES AND GOBJECT2_INCLUDE_DIRS )
+ IF ( GOBJECT2_FIND_REQUIRED )
+ MESSAGE( SEND_ERROR "Could NOT find GOBJECT2" )
+ ELSE ( GOBJECT2_FIND_REQUIRED )
+ IF ( NOT GOBJECT2_FIND_QUIETLY )
+ MESSAGE( STATUS "Could NOT find GOBJECT2" )
+ ENDIF ( NOT GOBJECT2_FIND_QUIETLY )
+ ENDIF ( GOBJECT2_FIND_REQUIRED )
+ ENDIF ( GOBJECT2_LIBRARIES AND GOBJECT2_INCLUDE_DIRS )
+ENDIF( NOT GOBJECT2_FOUND AND NOT PKG_CONFIG_FOUND )
+
+MARK_AS_ADVANCED( GOBJECT2_LIBRARIES GOBJECT2_INCLUDE_DIRS )
diff --git a/code/CMakeModules/FindLIBGSF.cmake b/code/CMakeModules/FindLIBGSF.cmake
new file mode 100644
index 000000000..8d749a87d
--- /dev/null
+++ b/code/CMakeModules/FindLIBGSF.cmake
@@ -0,0 +1,57 @@
+# - Try to find libGSF
+#
+# Once done this will define
+#
+# LIBGSF_FOUND - System has LibGSF
+# LIBGSF_INCLUDE_DIR - The LibGSF include directory
+# LIBGSF_LIBRARIES - The libraries needed to use LibGSF
+# LIBGSF_DEFINITIONS - Compiler switches required for using LibGSF
+# LIBGSF_GSF_EXECUTABLE - The archive utility
+# LIBGSF_GSFOFFICETHUMBNAILER_EXECUTABLE - The office files thumbnailer for the GNOME desktop
+# LIBGSF_GSFVBADUMP_EXECUTABLE - The utility to extract Visual Basic for Applications macros
+
+# Copyright (c) 2009, Pau Garcia i Quiles
+# Based off FindLibXml2.cmake from CMake 2.6.4 by Alexander Neundorf
+#
+# Redistribution and use is allowed according to the terms of the BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+
+
+IF (LIBGSF_INCLUDE_DIR AND LIBGSF_LIBRARIES)
+ # in cache already
+ SET(LIBGSF_FIND_QUIETLY TRUE)
+ENDIF (LIBGSF_INCLUDE_DIR AND LIBGSF_LIBRARIES)
+
+IF (NOT WIN32)
+ # use pkg-config to get the directories and then use these values
+ # in the FIND_PATH() and FIND_LIBRARY() calls
+ FIND_PACKAGE(PkgConfig)
+ PKG_CHECK_MODULES(PC_LIBGSF libgsf-1)
+ SET(LIBGSF_DEFINITIONS ${PC_LIBGSF_CFLAGS_OTHER})
+ENDIF (NOT WIN32)
+
+FIND_PATH(LIBGSF_INCLUDE_DIR gsf/gsf.h
+ HINTS
+ ${PC_LIBGSF_INCLUDEDIR}
+ ${PC_LIBGSF_INCLUDE_DIRS}
+ PATH_SUFFIXES libgsf-1
+ )
+
+FIND_LIBRARY(LIBGSF_LIBRARIES NAMES gsf-1 libgsf-1
+ HINTS
+ ${PC_LIBGSF_LIBDIR}
+ ${PC_LIBGSF_LIBRARY_DIRS}
+ )
+
+FIND_PROGRAM(LIBGSF_GSF_EXECUTABLE gsf)
+FIND_PROGRAM(LIBGSF_GSFOFFICETHUMBNAILER_EXECUTABLE gsf-office-thumbnailer)
+FIND_PROGRAM(LIBGSF_GSFVBADUMP_EXECUTABLE gsf-vba-dump)
+
+INCLUDE(FindPackageHandleStandardArgs)
+
+# handle the QUIETLY and REQUIRED arguments and set LIBGSF_FOUND to TRUE if
+# all listed variables are TRUE
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBGSF DEFAULT_MSG LIBGSF_LIBRARIES LIBGSF_INCLUDE_DIR)
+
+MARK_AS_ADVANCED(LIBGSF_INCLUDE_DIR LIBGSF_LIBRARIES LIBGSF_GSF_EXECUTABLE LIBGSF_GSFOFFICETHUMBNAILER_EXECUTABLE LIBGSF_GSFVBADUMP_EXECUTABLE )
+
diff --git a/code/CMakeModules/FindLuabind.cmake b/code/CMakeModules/FindLuabind.cmake
index 5511379a3..dae1dbd99 100644
--- a/code/CMakeModules/FindLuabind.cmake
+++ b/code/CMakeModules/FindLuabind.cmake
@@ -3,6 +3,7 @@
# LUABIND_LIBRARIES, the libraries to link against
# LUABIND_FOUND, if false, do not try to link to LUABIND
# LUABIND_INCLUDE_DIR, where to find headers.
+INCLUDE(FindHelpers)
MACRO(FIND_CORRECT_LUA_VERSION)
# Check Lua version linked to Luabind under Linux
@@ -85,18 +86,6 @@ IF(LUABIND_LIBRARIES AND LUABIND_INCLUDE_DIR)
SET(Luabind_FIND_QUIETLY TRUE)
ENDIF()
-FIND_PATH(LUABIND_INCLUDE_DIR
- luabind/luabind.hpp
- PATHS
- $ENV{LUABIND_DIR}/include
- /usr/local/include
- /usr/include
- /sw/include
- /opt/local/include
- /opt/csw/include
- /opt/include
-)
-
SET(LIBRARY_NAME_RELEASE)
SET(LIBRARY_NAME_DEBUG)
@@ -149,35 +138,7 @@ ENDIF()
LIST(APPEND LIBRARY_NAME_RELEASE luabind libluabind)
LIST(APPEND LIBRARY_NAME_DEBUG luabind_d luabindd libluabind_d libluabindd)
-FIND_LIBRARY(LUABIND_LIBRARY_RELEASE
- NAMES ${LIBRARY_NAME_RELEASE}
- PATHS
- $ENV{LUABIND_DIR}/lib
- /usr/local/lib
- /usr/lib
- /usr/local/X11R6/lib
- /usr/X11R6/lib
- /sw/lib
- /opt/local/lib
- /opt/csw/lib
- /opt/lib
- /usr/freeware/lib64
-)
-
-FIND_LIBRARY(LUABIND_LIBRARY_DEBUG
- NAMES ${LIBRARY_NAME_DEBUG}
- PATHS
- $ENV{LUABIND_DIR}/lib
- /usr/local/lib
- /usr/lib
- /usr/local/X11R6/lib
- /usr/X11R6/lib
- /sw/lib
- /opt/local/lib
- /opt/csw/lib
- /opt/lib
- /usr/freeware/lib64
-)
+FIND_PACKAGE_HELPER(Luabind luabind/luabind.hpp RELEASE ${LIBRARY_NAME_RELEASE} DEBUG ${LIBRARY_NAME_DEBUG})
FIND_PACKAGE(Boost REQUIRED)
diff --git a/code/CMakeModules/FindMSVC.cmake b/code/CMakeModules/FindMSVC.cmake
index 5dbc4f6a8..2a08a08bb 100644
--- a/code/CMakeModules/FindMSVC.cmake
+++ b/code/CMakeModules/FindMSVC.cmake
@@ -1,89 +1,55 @@
# - Find MS Visual C++
#
+# VC_DIR - where to find Visual C++
# VC_INCLUDE_DIR - where to find headers
# VC_INCLUDE_DIRS - where to find headers
# VC_LIBRARY_DIR - where to find libraries
-# VC_FOUND - True if MSVC found.
-
-MACRO(ADD_TRAILING_SLASH _FILENAME_VAR)
- # put content in a new variable
- SET(_FILENAME ${${_FILENAME_VAR}})
- # get length of the string
- STRING(LENGTH ${_FILENAME} _LEN)
- # convert length to last pos
- MATH(EXPR _POS "${_LEN}-1")
- # get last character of the string
- STRING(SUBSTRING ${_FILENAME} ${_POS} 1 _FILENAME_END)
- # compare it with a slash
- IF(NOT _FILENAME_END STREQUAL "/")
- # not a slash, append it
- SET(${_FILENAME_VAR} "${_FILENAME}/")
- ELSE()
- # already a slash
- ENDIF()
-ENDMACRO()
-
-MACRO(DETECT_VC_VERSION_HELPER _ROOT _VERSION)
- # Software/Wow6432Node/...
- GET_FILENAME_COMPONENT(VC${_VERSION}_DIR "[${_ROOT}\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VC7;${_VERSION}]" ABSOLUTE)
-
- IF(VC${_VERSION}_DIR AND VC${_VERSION}_DIR STREQUAL "/registry")
- SET(VC${_VERSION}_DIR)
- GET_FILENAME_COMPONENT(VC${_VERSION}_DIR "[${_ROOT}\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VS7;${_VERSION}]" ABSOLUTE)
-
- IF(VC${_VERSION}_DIR AND NOT VC${_VERSION}_DIR STREQUAL "/registry")
- # be sure it's finishing by a /
- ADD_TRAILING_SLASH(VC${_VERSION}_DIR)
-
- SET(VC${_VERSION}_DIR "${VC${_VERSION}_DIR}VC/")
- ENDIF()
- ENDIF()
+# VC_FOUND - True if MSVC found
+
+IF(CMAKE_CXX_COMPILER)
+ SET(_COMPILER ${CMAKE_CXX_COMPILER})
+ SET(_VERSION ${CMAKE_CXX_COMPILER_VERSION})
+ELSEIF(CMAKE_C_COMPILER)
+ SET(_COMPILER ${CMAKE_C_COMPILER})
+ SET(_VERSION ${CMAKE_C_COMPILER_VERSION})
+ELSE()
+ MESSAGE(FATAL_ERROR "No way to determine Visual C++ location")
+ENDIF()
- IF(VC${_VERSION}_DIR AND NOT VC${_VERSION}_DIR STREQUAL "/registry")
- SET(VC${_VERSION}_FOUND ON)
- DETECT_EXPRESS_VERSION(${_VERSION})
- IF(NOT MSVC_FIND_QUIETLY)
- SET(_VERSION_STR ${_VERSION})
- IF(MSVC_EXPRESS)
- SET(_VERSION_STR "${_VERSION_STR} Express")
- ENDIF()
- MESSAGE(STATUS "Found Visual C++ ${_VERSION_STR} in ${VC${_VERSION}_DIR}")
- ENDIF()
- ELSEIF(VC${_VERSION}_DIR AND NOT VC${_VERSION}_DIR STREQUAL "/registry")
- SET(VC${_VERSION}_FOUND OFF)
- SET(VC${_VERSION}_DIR "")
+IF(MSVC_VERSION LESS 1910)
+ IF(MSVC_VERSION LESS 1500)
+ MESSAGE(FATAL_ERROR "Unsupported version of Visual C++ (minimum version is 2008)")
+ ELSEIF(MSVC_VERSION LESS 1600)
+ SET(MSVC_TOOLSET "90")
+ SET(_NAME "2008")
+ ELSEIF(MSVC_VERSION LESS 1700)
+ SET(MSVC_TOOLSET "100")
+ SET(_NAME "2010")
+ ELSEIF(MSVC_VERSION LESS 1800)
+ SET(MSVC_TOOLSET "110")
+ SET(_NAME "2012")
+ ELSEIF(MSVC_VERSION LESS 1900)
+ SET(MSVC_TOOLSET "120")
+ SET(_NAME "2013")
+ ELSE()
+ SET(MSVC_TOOLSET "140")
+ SET(_NAME "2015")
ENDIF()
-ENDMACRO()
-
-MACRO(DETECT_VC_VERSION _VERSION)
- IF(NOT VC_FOUND)
- SET(VC${_VERSION}_FOUND OFF)
- DETECT_VC_VERSION_HELPER("HKEY_CURRENT_USER" ${_VERSION})
- IF(NOT VC${_VERSION}_FOUND)
- DETECT_VC_VERSION_HELPER("HKEY_LOCAL_MACHINE" ${_VERSION})
- ENDIF()
+ STRING(REGEX REPLACE "/bin/.+" "" VC_DIR ${_COMPILER})
- IF(VC${_VERSION}_FOUND)
- SET(VC_FOUND ON)
- SET(VC_DIR "${VC${_VERSION}_DIR}")
- ENDIF()
- ENDIF()
-ENDMACRO()
-
-MACRO(DETECT_EXPRESS_VERSION _VERSION)
- GET_FILENAME_COMPONENT(MSVC_EXPRESS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\${_VERSION}\\Setup\\VC;ProductDir]" ABSOLUTE)
+ MESSAGE(STATUS "Found Visual C++ ${_NAME} (${_VERSION}) in ${VC_DIR}")
+ELSE()
+ # Toolset = version of runtime DLLs
+ SET(MSVC_TOOLSET "140")
- IF(MSVC_EXPRESS AND NOT MSVC_EXPRESS STREQUAL "/registry")
- SET(MSVC_EXPRESS ON)
+ IF(MSVC_VERSION LESS 1920)
+ SET(_NAME "2017")
+ ELSE()
+ SET(_NAME "2019")
ENDIF()
-ENDMACRO()
-
-IF(MSVC_VERSION GREATER 1909)
- DETECT_VC_VERSION("15.0")
- SET(MSVC_TOOLSET "140")
- SET(VC_DIR "${VC_DIR}Tools/MSVC")
+ STRING(REGEX REPLACE "/MSVC/.+" "/MSVC" VC_DIR ${_COMPILER})
FILE(GLOB MSVC_TOOLCHAIN_VERSIONS RELATIVE ${VC_DIR} "${VC_DIR}/*")
@@ -92,48 +58,15 @@ IF(MSVC_VERSION GREATER 1909)
LIST(REVERSE MSVC_TOOLCHAIN_VERSIONS)
ENDIF()
- IF(NOT MSVC_TOOLCHAIN_VERSIONS)
- MESSAGE(FATAL_ERROR "No MSVC version found in default search path ${VC_DIR}")
- ENDIF()
-
- LIST(GET MSVC_TOOLCHAIN_VERSIONS 0 MSVC_TOOLCHAIN_VERSION)
-
- SET(VC_DIR "${VC_DIR}/${MSVC_TOOLCHAIN_VERSION}")
- SET(VC_INCLUDE_DIR "${VC_DIR}/include")
-ELSEIF(MSVC14)
- DETECT_VC_VERSION("14.0")
- SET(MSVC_TOOLSET "140")
-ELSEIF(MSVC12)
- DETECT_VC_VERSION("12.0")
- SET(MSVC_TOOLSET "120")
-ELSEIF(MSVC11)
- DETECT_VC_VERSION("11.0")
- SET(MSVC_TOOLSET "110")
-ELSEIF(MSVC10)
- DETECT_VC_VERSION("10.0")
- SET(MSVC_TOOLSET "100")
-ELSEIF(MSVC90)
- DETECT_VC_VERSION("9.0")
- SET(MSVC_TOOLSET "90")
-ELSEIF(MSVC80)
- DETECT_VC_VERSION("8.0")
- SET(MSVC_TOOLSET "80")
-ENDIF()
+ IF(MSVC_TOOLCHAIN_VERSIONS)
+ LIST(GET MSVC_TOOLCHAIN_VERSIONS 0 MSVC_TOOLCHAIN_VERSION)
-# If you plan to use VC++ compilers with WINE, set VC_DIR environment variable
-IF(NOT VC_DIR)
- SET(VC_DIR $ENV{VC_DIR})
- # Fix path
- FILE(TO_CMAKE_PATH ${VC_DIR} VC_DIR)
-ENDIF()
+ SET(VC_DIR "${VC_DIR}/${MSVC_TOOLCHAIN_VERSION}")
-IF(NOT VC_DIR)
- IF(CMAKE_CXX_COMPILER)
- SET(_COMPILER ${CMAKE_CXX_COMPILER})
+ MESSAGE(STATUS "Found Visual C++ ${_NAME} (${_VERSION} with toolchain ${MSVC_TOOLCHAIN_VERSION}) in ${VC_DIR}")
ELSE()
- SET(_COMPILER ${CMAKE_C_COMPILER})
+ MESSAGE(FATAL_ERROR "Unable to find Visual C++ in ${VC_DIR}")
ENDIF()
- STRING(REGEX REPLACE "/(bin|BIN|Bin)/.+" "" VC_DIR ${_COMPILER})
ENDIF()
IF(NOT VC_INCLUDE_DIR AND VC_DIR AND EXISTS "${VC_DIR}")
@@ -147,14 +80,14 @@ SET(MSVC_REDIST_DIR "${EXTERNAL_PATH}/redist")
IF(NOT EXISTS "${MSVC_REDIST_DIR}")
SET(MSVC_REDIST_DIR "${VC_DIR}/redist")
-
+
IF(NOT EXISTS "${MSVC_REDIST_DIR}")
SET(MSVC_REDIST_DIR)
ENDIF()
ENDIF()
IF(MSVC_REDIST_DIR)
- IF(MSVC1411 OR MSVC1410)
+ IF(MSVC_VERSION GREATER 1909)
# If you have VC++ 2017 Express, put x64/Microsoft.VC141.CRT/*.dll in ${EXTERNAL_PATH}/redist
# original files whould be in ${VC_DIR}/Redist/MSVC/14.11.25325/x64/Microsoft.VC141.CRT
SET(MSVC14_REDIST_DIR "${MSVC_REDIST_DIR}")
@@ -167,7 +100,7 @@ IF(MSVC_REDIST_DIR)
# If you have VC++ 2012 Express, put x64/Microsoft.VC110.CRT/*.dll in ${EXTERNAL_PATH}/redist
SET(MSVC11_REDIST_DIR "${MSVC_REDIST_DIR}")
ELSEIF(MSVC10)
- # If you have VC++ 2010 Express, put x64/Microsoft.VC100.CRT/*.dll in ${EXTERNAL_PATH}/redist
+ # If you have VC++ 2010 Express, put x64/Microsoft.VC100.CRT/*.dll in ${EXTERNAL_PATH}/redist
SET(MSVC10_REDIST_DIR "${MSVC_REDIST_DIR}")
ELSEIF(MSVC90)
SET(MSVC90_REDIST_DIR "${MSVC_REDIST_DIR}")
@@ -176,7 +109,11 @@ IF(MSVC_REDIST_DIR)
ENDIF()
ENDIF()
-MESSAGE(STATUS "Using headers from ${VC_INCLUDE_DIR}")
+IF(VC_INCLUDE_DIR)
+ MESSAGE(STATUS "Using VC++ headers from ${VC_INCLUDE_DIR}")
+ELSE()
+ MESSAGE(FATAL_ERROR "Unable to find VC++ headers")
+ENDIF()
SET(VC_INCLUDE_DIRS ${VC_INCLUDE_DIR})
INCLUDE_DIRECTORIES(${VC_INCLUDE_DIR})
diff --git a/code/CMakeModules/FindMySQL.cmake b/code/CMakeModules/FindMySQL.cmake
index 8a92cb0c4..631a96224 100644
--- a/code/CMakeModules/FindMySQL.cmake
+++ b/code/CMakeModules/FindMySQL.cmake
@@ -16,10 +16,12 @@ IF(MYSQL_INCLUDE_DIR AND MYSQL_LIBRARIES)
ELSE()
FIND_PATH(MYSQL_INCLUDE_DIR mysql.h
- PATH_SUFFIXES mysql
+ PATH_SUFFIXES mysql mariadb
PATHS
/usr/include/mysql
+ /usr/include/mariadb
/usr/local/include/mysql
+ /usr/local/include/mariadb
/opt/local/include/mysql5/mysql
/opt/local/include/mysql55/mysql
/opt/local/include/mysql51/mysql
@@ -27,28 +29,29 @@ ELSE()
$ENV{SystemDrive}/MySQL/*/include)
IF(WIN32 AND MSVC)
- FIND_LIBRARY(MYSQL_LIBRARY_RELEASE NAMES libmysql mysqlclient
+ FIND_LIBRARY(MYSQL_LIBRARY_RELEASE NAMES libmysql mysqlclient libmariadb mariadbclient
PATHS
$ENV{ProgramFiles}/MySQL/*/lib/opt
$ENV{SystemDrive}/MySQL/*/lib/opt)
-
- FIND_LIBRARY(MYSQL_LIBRARY_DEBUG NAMES libmysqld mysqlclientd
+ FIND_LIBRARY(MYSQL_LIBRARY_DEBUG NAMES libmysqld mysqlclientd libmariadb mariadbclient
PATHS
$ENV{ProgramFiles}/MySQL/*/lib/opt
$ENV{SystemDrive}/MySQL/*/lib/opt)
ELSE()
- FIND_LIBRARY(MYSQL_LIBRARY_RELEASE NAMES mysqlclient
+ FIND_LIBRARY(MYSQL_LIBRARY_RELEASE NAMES mysqlclient mariadbclient
PATHS
/usr/lib
/usr/local/lib
+ /usr/lib/mariadb
/usr/lib/mysql
/usr/local/lib/mysql
+ /usr/local/lib/mariadb
/opt/local/lib/mysql5/mysql
/opt/local/lib/mysql55/mysql
/opt/local/lib/mysql51/mysql
)
- FIND_LIBRARY(MYSQL_LIBRARY_DEBUG NAMES mysqlclientd
+ FIND_LIBRARY(MYSQL_LIBRARY_DEBUG NAMES mysqlclientd mariadbclientd
PATHS
/usr/lib
/usr/local/lib
@@ -80,6 +83,10 @@ ELSE()
IF(MYSQL_INCLUDE_DIR AND MYSQL_LIBRARIES)
SET(MYSQL_FOUND TRUE)
MESSAGE(STATUS "Found MySQL: ${MYSQL_INCLUDE_DIR}, ${MYSQL_LIBRARIES}")
+ IF (MYSQL_LIBRARIES MATCHES "libmariadb" OR MYSQL_LIBRARIES MATCHES "mariadbclient")
+ SET(MARIADB_FOUND TRUE)
+ MESSAGE(STATUS "Found MariaDB.")
+ ENDIF()
ELSE()
SET(MYSQL_FOUND FALSE)
MESSAGE(STATUS "MySQL not found.")
diff --git a/code/CMakeModules/FindNeL.cmake b/code/CMakeModules/FindNeL.cmake
index e75163cce..96dd90b83 100644
--- a/code/CMakeModules/FindNeL.cmake
+++ b/code/CMakeModules/FindNeL.cmake
@@ -13,7 +13,6 @@
# NELXXX_FOUND
# NELXXX_LIBRARIES
-
INCLUDE(FindHelpers)
# Init all variables we'll set
@@ -209,6 +208,20 @@ IF(NELMISC_FOUND)
LIST(APPEND NELMISC_LIBRARIES ${LIBXML2_LIBRARIES})
ENDIF()
+ IF(CMAKE_DL_LIBS)
+ LIST(APPEND NELMISC_LIBRARIES ${CMAKE_DL_LIBS})
+ ENDIF()
+
+ FIND_PACKAGE(Threads)
+
+ IF(Threads_FOUND)
+ LIST(APPEND NELMISC_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
+ ENDIF()
+
+ IF(UNIX AND NOT APPLE)
+ LIST(APPEND NELMISC_LIBRARIES rt)
+ ENDIF()
+
LIST(REMOVE_ITEM NeL_FIND_COMPONENTS misc)
LIST(APPEND NEL_MODULES_FOUND misc)
@@ -262,11 +275,17 @@ FOREACH(COMPONENT ${NeL_FIND_COMPONENTS})
FIND_PACKAGE_HELPER(${_NAME} nel/${COMPONENT}/${HEADER_FILE}
RELEASE nel${COMPONENT}_r nel${COMPONENT}
DEBUG nel${COMPONENT}_d
+ DIR ${NEL_DIR}
QUIET)
IF(${_UPNAME}_FOUND)
LIST(APPEND NEL_MODULES_FOUND ${COMPONENT})
+ # all NeL libraries depend on nelmisc in static
+ IF(NEL_STATIC)
+ LIST(APPEND ${_UPNAME}_LIBRARIES ${NELMISC_LIBRARIES})
+ ENDIF()
+
IF(COMPONENT STREQUAL "3d")
IF(NEL_STATIC)
# 3rd party dependencies
@@ -301,7 +320,9 @@ FOREACH(COMPONENT ${NeL_FIND_COMPONENTS})
ELSEIF(COMPONENT STREQUAL "gui")
FIND_PACKAGE(Luabind REQUIRED)
- LIST(APPEND ${_UPNAME}_LIBRARIES ${LUABIND_LIBRARIES})
+ IF(LUABIND_FOUND)
+ LIST(APPEND ${_UPNAME}_LIBRARIES ${LUABIND_LIBRARIES})
+ ENDIF()
FIND_LIBCURL()
@@ -323,7 +344,6 @@ FOREACH(COMPONENT ${NeL_FIND_COMPONENTS})
LIST(APPEND CURL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR})
LIST(APPEND CURL_LIBRARIES ${OPENSSL_LIBRARIES})
- LIST(APPEND ${_UPNAME}_LIBRARIES ${LUABIND_LIBRARIES} ${CURL_LIBRARIES})
LIST(APPEND NEL_DEFINITIONS ${${_UPNAME}_DEFINITIONS})
ELSEIF(COMPONENT STREQUAL "sound")
FIND_PACKAGE(Ogg REQUIRED)
diff --git a/code/CMakeModules/FindOgg.cmake b/code/CMakeModules/FindOgg.cmake
index c1f4492e1..aa2f9164c 100644
--- a/code/CMakeModules/FindOgg.cmake
+++ b/code/CMakeModules/FindOgg.cmake
@@ -1,49 +1,3 @@
-# - Locate Ogg library
-# This module defines
-# OGG_LIBRARY, the library to link against
-# OGG_FOUND, if false, do not try to link to OGG
-# OGG_INCLUDE_DIR, where to find headers.
+INCLUDE(FindHelpers)
-IF(OGG_LIBRARY AND OGG_INCLUDE_DIR)
- # in cache already
- SET(OGG_FIND_QUIETLY TRUE)
-ENDIF()
-
-
-FIND_PATH(OGG_INCLUDE_DIR
- ogg/ogg.h
- PATHS
- $ENV{OGG_DIR}/include
- /usr/local/include
- /usr/include
- /sw/include
- /opt/local/include
- /opt/csw/include
- /opt/include
-)
-
-FIND_LIBRARY(OGG_LIBRARY
- NAMES ogg libogg
- PATHS
- $ENV{OGG_DIR}/lib
- /usr/local/lib
- /usr/lib
- /usr/local/X11R6/lib
- /usr/X11R6/lib
- /sw/lib
- /opt/local/lib
- /opt/csw/lib
- /opt/lib
- /usr/freeware/lib64
-)
-
-IF(OGG_LIBRARY AND OGG_INCLUDE_DIR)
- SET(OGG_FOUND "YES")
- IF(NOT OGG_FIND_QUIETLY)
- MESSAGE(STATUS "Found Ogg: ${OGG_LIBRARY}")
- ENDIF()
-ELSE()
- IF(NOT OGG_FIND_QUIETLY)
- MESSAGE(STATUS "Warning: Unable to find Ogg!")
- ENDIF()
-ENDIF()
+FIND_PACKAGE_HELPER(Ogg ogg/ogg.h)
diff --git a/code/CMakeModules/FindSTLport.cmake b/code/CMakeModules/FindSTLport.cmake
index 68e542ea5..3b1cc1800 100644
--- a/code/CMakeModules/FindSTLport.cmake
+++ b/code/CMakeModules/FindSTLport.cmake
@@ -1,91 +1,5 @@
-# Look for a directory containing STLport.
-#
-# The following values are defined
-# STLPORT_INCLUDE_DIR - where to find vector, etc.
-# STLPORT_LIBRARIES - link against these to use STLport
-# STLPORT_FOUND - True if the STLport is available.
+INCLUDE(FindHelpers)
-# also defined, but not for general use are
-IF(STLPORT_LIBRARIES AND STLPORT_INCLUDE_DIR)
- # in cache already
- SET(STLPORT_FIND_QUIETLY TRUE)
-ENDIF()
-
-FIND_PATH(STLPORT_INCLUDE_DIR
- iostream
- PATHS
- /usr/local/include
- /usr/include
- /sw/include
- /opt/local/include
- /opt/csw/include
- /opt/include
- PATH_SUFFIXES stlport
-)
-
-FIND_LIBRARY(STLPORT_LIBRARY_DEBUG
- NAMES
- stlport_cygwin_debug
- stlport_cygwin_stldebug
- stlport_gcc_debug
- stlport_gcc_stldebug
- stlportstld_x
- stlportstld_x.5.2
- stlportd
- stlportd_statix
- stlportd_static
- PATHS
- /usr/local/lib
- /usr/lib
- /usr/local/X11R6/lib
- /usr/X11R6/lib
- /sw/lib
- /opt/local/lib
- /opt/csw/lib
- /opt/lib
- /usr/freeware/lib64
-)
-
-FIND_LIBRARY(STLPORT_LIBRARY_RELEASE
- NAMES
- stlport_cygwin
- stlport_gcc
- stlport
- stlport_x
- stlport_x.5.2
- stlport_statix
- stlport_static
- PATHS
- /usr/local/lib
- /usr/lib
- /usr/local/X11R6/lib
- /usr/X11R6/lib
- /sw/lib
- /opt/local/lib
- /opt/csw/lib
- /opt/lib
- /usr/freeware/lib64
-)
-
-IF(STLPORT_INCLUDE_DIR)
- IF(STLPORT_LIBRARY_RELEASE)
- SET(STLPORT_FOUND TRUE)
-
- SET(STLPORT_LIBRARIES ${STLPORT_LIBRARY_RELEASE})
- IF(STLPORT_LIBRARY_DEBUG)
- SET(STLPORT_LIBRARIES optimized ${STLPORT_LIBRARIES} debug ${STLPORT_LIBRARY_DEBUG})
- ENDIF()
- ENDIF()
-ENDIF()
-
-IF(STLPORT_FOUND)
- IF(NOT STLPORT_FIND_QUIETLY)
- MESSAGE(STATUS "Found STLport: ${STLPORT_LIBRARIES}")
- ENDIF()
-ELSE()
- IF(NOT STLPORT_FIND_QUIETLY)
- MESSAGE(STATUS "Warning: Unable to find STLport!")
- ENDIF()
-ENDIF()
-
-MARK_AS_ADVANCED(STLPORT_LIBRARY_RELEASE STLPORT_LIBRARY_DEBUG)
+FIND_PACKAGE_HELPER(STLport iostream
+ RELEASE stlport_cygwin stlport_gcc stlport_x stlport_x.5.2 stlport_statix stlport_static
+ DEBUG stlport_cygwin_debug stlport_cygwin_stldebug stlport_gcc_debug stlport_gcc_stldebug stlportstld_x stlportstld_x.5.2 stlportd_statix stlportd_static)
diff --git a/code/CMakeModules/FindSquish.cmake b/code/CMakeModules/FindSquish.cmake
index 4242f4055..9d0928f87 100644
--- a/code/CMakeModules/FindSquish.cmake
+++ b/code/CMakeModules/FindSquish.cmake
@@ -1,69 +1,6 @@
-#
-# Find the LibSquish includes and library
-#
-# This module defines
-# SQUISH_INCLUDE_DIR, where to find squish.h
-# SQUISH_LIBRARIES, where to find the Squish libraries.
-# SQUISH_FOUND, If false, do not try to use Squish.
+INCLUDE(FindHelpers)
-# also defined, but not for general use are
-IF(SQUISH_LIBRARIES AND SQUISH_INCLUDE_DIR)
- # in cache already
- SET(SQUISH_FIND_QUIETLY TRUE)
-ENDIF()
-
-FIND_PATH(SQUISH_INCLUDE_DIR
- squish.h
- PATHS
- /usr/local/include
- /usr/include
- /sw/include
- /opt/local/include
- /opt/csw/include
- /opt/include
- PATH_SUFFIXES cppunit
-)
-
-FIND_LIBRARY(SQUISH_LIBRARY_RELEASE
- squish
- PATHS
- /usr/local/lib
- /usr/lib
- /usr/local/X11R6/lib
- /usr/X11R6/lib
- /sw/lib
- /opt/local/lib
- /opt/csw/lib
- /opt/lib
- /usr/freeware/lib64
-)
-
-FIND_LIBRARY(SQUISH_LIBRARY_DEBUG
- squishd
- PATHS
- /usr/local/lib
- /usr/lib
- /usr/local/X11R6/lib
- /usr/X11R6/lib
- /sw/lib
- /opt/local/lib
- /opt/csw/lib
- /opt/lib
- /usr/freeware/lib64
-)
-
-IF(SQUISH_INCLUDE_DIR)
- IF(SQUISH_LIBRARY_RELEASE)
- SET(SQUISH_FOUND "YES")
- SET(SQUISH_LIBRARIES "optimized;${SQUISH_LIBRARY_RELEASE}")
- IF(SQUISH_LIBRARY_DEBUG)
- SET(SQUISH_LIBRARIES "${SQUISH_LIBRARIES};debug;${SQUISH_LIBRARY_DEBUG}")
- ELSE()
- SET(SQUISH_LIBRARIES "${SQUISH_LIBRARIES};debug;${SQUISH_LIBRARY_RELEASE}")
- MESSAGE("Debug Squish NOT found, using the release version!")
- ENDIF()
- ENDIF()
-ENDIF()
+FIND_PACKAGE_HELPER(Squish squish.h)
IF(SQUISH_FOUND)
IF(NOT SQUISH_FIND_QUIETLY)
@@ -74,10 +11,4 @@ IF(SQUISH_FOUND)
SET(SQUISH_COMPRESS_HAS_METRIC ON)
SET(SQUISH_DEFINITIONS -DSQUISH_COMPRESS_HAS_METRIC)
ENDIF()
-ELSE()
- IF(NOT SQUISH_FIND_QUIETLY)
- MESSAGE(STATUS "Warning: Unable to find Squish!")
- ENDIF()
ENDIF()
-
-MARK_AS_ADVANCED(SQUISH_LIBRARY_RELEASE SQUISH_LIBRARY_DEBUG)
diff --git a/code/CMakeModules/FindVorbis.cmake b/code/CMakeModules/FindVorbis.cmake
index 234d2d31a..b0a4ec2a6 100644
--- a/code/CMakeModules/FindVorbis.cmake
+++ b/code/CMakeModules/FindVorbis.cmake
@@ -1,65 +1,8 @@
-# - Locate Vorbis library
-# This module defines
-# VORBIS_LIBRARY, the library to link against
-# VORBIS_FOUND, if false, do not try to link to VORBIS
-# VORBIS_INCLUDE_DIR, where to find headers.
+INCLUDE(FindHelpers)
-IF(VORBIS_LIBRARY AND VORBIS_INCLUDE_DIR)
- # in cache already
- SET(VORBIS_FIND_QUIETLY TRUE)
-ENDIF()
-
-
-FIND_PATH(VORBIS_INCLUDE_DIR
- vorbis/vorbisfile.h
- PATHS
- $ENV{VORBIS_DIR}/include
- /usr/local/include
- /usr/include
- /sw/include
- /opt/local/include
- /opt/csw/include
- /opt/include
-)
-
-FIND_LIBRARY(VORBIS_LIBRARY
- NAMES vorbis libvorbis
- PATHS
- $ENV{VORBIS_DIR}/lib
- /usr/local/lib
- /usr/lib
- /usr/local/X11R6/lib
- /usr/X11R6/lib
- /sw/lib
- /opt/local/lib
- /opt/csw/lib
- /opt/lib
- /usr/freeware/lib64
-)
-
-FIND_LIBRARY(VORBISFILE_LIBRARY
- NAMES vorbisfile libvorbisfile
- PATHS
- $ENV{VORBIS_DIR}/lib
- /usr/local/lib
- /usr/lib
- /usr/local/X11R6/lib
- /usr/X11R6/lib
- /sw/lib
- /opt/local/lib
- /opt/csw/lib
- /opt/lib
- /usr/freeware/lib64
-)
+FIND_PACKAGE_HELPER(Vorbis vorbisenc.h)
+FIND_PACKAGE_HELPER(VorbisFile vorbisfile.h SUFFIXES vorbis)
-IF(VORBIS_LIBRARY AND VORBISFILE_LIBRARY AND VORBIS_INCLUDE_DIR)
- SET(VORBIS_FOUND "YES")
- SET(VORBIS_LIBRARIES ${VORBIS_LIBRARY} ${VORBISFILE_LIBRARY})
- IF(NOT VORBIS_FIND_QUIETLY)
- MESSAGE(STATUS "Found Vorbis: ${VORBIS_LIBRARY}")
- ENDIF()
-ELSE()
- IF(NOT VORBIS_FIND_QUIETLY)
- MESSAGE(STATUS "Warning: Unable to find Vorbis!")
- ENDIF()
+IF(VORBISFILE_FOUND)
+ SET(VORBIS_LIBRARIES ${VORBIS_LIBRARIES} ${VORBISFILE_LIBRARIES})
ENDIF()
diff --git a/code/CMakeModules/FindWindowsSDK.cmake b/code/CMakeModules/FindWindowsSDK.cmake
index 3d9c43bd9..1b02dffb3 100644
--- a/code/CMakeModules/FindWindowsSDK.cmake
+++ b/code/CMakeModules/FindWindowsSDK.cmake
@@ -20,6 +20,7 @@ MACRO(DETECT_WINSDK_VERSION_HELPER _ROOT _VERSION)
IF(WINSDK${_VERSION}_DIR AND NOT WINSDK${_VERSION}_DIR STREQUAL "/registry" AND EXISTS "${WINSDK${_VERSION}_DIR}/Include")
SET(WINSDK${_VERSION}_FOUND ON)
GET_FILENAME_COMPONENT(WINSDK${_VERSION}_VERSION_FULL "[${_ROOT}\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v${_VERSION};ProductVersion]" NAME)
+
IF(NOT WindowsSDK_FIND_QUIETLY)
MESSAGE(STATUS "Found Windows SDK ${_VERSION} in ${WINSDK${_VERSION}_DIR}")
ENDIF()
@@ -28,14 +29,14 @@ MACRO(DETECT_WINSDK_VERSION_HELPER _ROOT _VERSION)
ENDIF()
ENDMACRO()
-MACRO(DETECT_WINKIT_VERSION _VERSION _SUFFIX)
- GET_FILENAME_COMPONENT(WINSDK${_VERSION}_DIR "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots;KitsRoot${_SUFFIX}]" ABSOLUTE)
+MACRO(DETECT_WINKIT_VERSION_HELPER _VERSION _SUFFIX _PREFIX _ARCH)
+ GET_FILENAME_COMPONENT(WINSDK${_VERSION}_DIR "[HKEY_LOCAL_MACHINE\\SOFTWARE\\${_PREFIX}Microsoft\\Windows Kits\\Installed Roots;KitsRoot${_SUFFIX}]" ABSOLUTE)
- IF(WINSDK${_VERSION}_DIR AND NOT WINSDK${_VERSION}_DIR STREQUAL "/registry")
+ IF(WINSDK${_VERSION}_DIR AND NOT WINSDK${_VERSION}_DIR STREQUAL "/registry" AND EXISTS "${WINSDK${_VERSION}_DIR}/Include")
SET(WINSDK${_VERSION}_FOUND ON)
SET(WINSDK${_VERSION}_VERSION_FULL "${_VERSION}")
IF(NOT WindowsSDK_FIND_QUIETLY)
- MESSAGE(STATUS "Found Windows Kit ${_VERSION} in ${WINSDK${_VERSION}_DIR}")
+ MESSAGE(STATUS "Found Windows Kit ${_VERSION} in ${WINSDK${_VERSION}_DIR} (registry ${_ARCH} bits)")
ENDIF()
LIST(APPEND WINSDK_DETECTED_VERSIONS ${_VERSION})
ELSE()
@@ -52,6 +53,14 @@ MACRO(DETECT_WINSDK_VERSION _VERSION)
ENDIF()
ENDMACRO()
+MACRO(DETECT_WINKIT_VERSION _VERSION _SUFFIX)
+ DETECT_WINKIT_VERSION_HELPER("${_VERSION}" "${_SUFFIX}" "WOW6432Node\\\\" "32")
+
+ IF(NOT WINSDK${_VERSION}_FOUND)
+ DETECT_WINKIT_VERSION_HELPER("${_VERSION}" "${_SUFFIX}" "" "64")
+ ENDIF()
+ENDMACRO()
+
SET(WINSDK_DETECTED_VERSIONS)
# Fixed versions for Windows Kits (VC++ from 2012)
@@ -378,7 +387,11 @@ FIND_PATH(WINSDK_INCLUDE_DIR Windows.h
NO_DEFAULT_PATH
)
-MESSAGE(STATUS "Found Windows.h in ${WINSDK_INCLUDE_DIR}")
+IF(WINSDK_INCLUDE_DIR)
+ MESSAGE(STATUS "Found Windows.h in ${WINSDK_INCLUDE_DIR}")
+ELSE()
+ MESSAGE(FATAL_ERROR "Unable to find Windows.h")
+ENDIF()
# directory where WinRT headers are found
FIND_PATH(WINSDK_WINRT_INCLUDE_DIR winstring.h
diff --git a/code/CMakeModules/GetRevision.cmake b/code/CMakeModules/GetRevision.cmake
index dba90c765..f18b662e1 100644
--- a/code/CMakeModules/GetRevision.cmake
+++ b/code/CMakeModules/GetRevision.cmake
@@ -72,6 +72,49 @@ IF(EXISTS "${ROOT_DIR}/.hg/")
ENDIF()
ENDIF()
+IF(EXISTS "${ROOT_DIR}/.git/")
+ FIND_PACKAGE(Git)
+
+ IF(GIT_FOUND)
+ EXECUTE_PROCESS(COMMAND ${GIT_EXECUTABLE} rev-list HEAD --count
+ WORKING_DIRECTORY ${ROOT_DIR}
+ RESULT_VARIABLE git_exit_code
+ OUTPUT_VARIABLE REVISION)
+ IF(NOT ${git_exit_code} EQUAL 0)
+ MESSAGE(WARNING "git rev-list failed, unable to include version.")
+ ELSE()
+ STRING(STRIP ${REVISION} REVISION)
+ ENDIF()
+ EXECUTE_PROCESS(COMMAND ${GIT_EXECUTABLE} rev-parse --short=8 HEAD
+ WORKING_DIRECTORY ${ROOT_DIR}
+ RESULT_VARIABLE git_exit_code
+ OUTPUT_VARIABLE CHANGESET)
+ IF(NOT ${git_exit_code} EQUAL 0)
+ MESSAGE(WARNING "git rev-parse failed, unable to include version.")
+ ELSE()
+ STRING(STRIP ${CHANGESET} CHANGESET)
+ ENDIF()
+ EXECUTE_PROCESS(COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
+ WORKING_DIRECTORY ${ROOT_DIR}
+ RESULT_VARIABLE git_exit_code
+ OUTPUT_VARIABLE BRANCH)
+ IF(NOT ${git_exit_code} EQUAL 0)
+ MESSAGE(WARNING "git rev-parse failed, unable to include git branch.")
+ ELSE()
+ STRING(STRIP ${BRANCH} BRANCH)
+ ENDIF()
+ EXECUTE_PROCESS(COMMAND ${GIT_EXECUTABLE} describe
+ WORKING_DIRECTORY ${ROOT_DIR}
+ RESULT_VARIABLE git_exit_code
+ OUTPUT_VARIABLE DESCRIBE)
+ IF(NOT ${git_exit_code} EQUAL 0)
+ MESSAGE(WARNING "git rev-parse failed, unable to include git branch.")
+ ELSE()
+ STRING(STRIP ${DESCRIBE} DESCRIBE)
+ ENDIF()
+ ENDIF()
+ENDIF()
+
# if processing exported sources, use "revision" file if exists
IF(SOURCE_DIR AND NOT DEFINED REVISION)
SET(REVISION_FILE ${SOURCE_DIR}/revision)
diff --git a/code/CMakeModules/OSXToolChain.cmake b/code/CMakeModules/OSXToolChain.cmake
index 3169aec78..d480c13b8 100644
--- a/code/CMakeModules/OSXToolChain.cmake
+++ b/code/CMakeModules/OSXToolChain.cmake
@@ -1,11 +1,11 @@
# Define OSX_SDK to force a specific version such as : -DOSX_SDK=10.11
#
# Example:
-# cmake ../code -DCMAKE_TOOLCHAIN_FILE=../code/CMakeModules/OSXToolChain.cmake -DWITH_NEL_TESTS=OFF -DWITH_RYZOM_SERVER=OFF -DWITH_NEL_TOOLS=OFF -DWITH_RYZOM_TOOLS=OFF -DWITH_LUA51=OFF -DWITH_LUA53=ON -DCMAKE_BUILD_TYPE=Release -DWITH_RYZOM_INSTALLER=OFF -DWITH_RYZOM_PATCH=ON -DWITH_NEL_TESTS=OFF -DWITH_NEL_TOOLS=OFF -DWITH_TOOLS=OFF -DWITH_NEL_SAMPLES=OFF -DWITH_WARNINGS=OFF -DWITH_QT5=OFF -DWITH_STATIC=ON -DWITH_STATIC_DRIVERS=ON -DWITH_STATIC_EXTERNAL=ON -DWITH_UNIX_STRUCTURE=OFF -DWITH_INSTALL_LIBRARIES=OFF -DWITH_RYZOM_SANDBOX=OFF -DOSX_SDK=10.11
+# cmake .. -DCMAKE_TOOLCHAIN_FILE=$CMAKE_MODULE_PATH/OSXToolChain.cmake -DOSX_SDK=10.14
# Don't forget to define environment variables:
#
-# export MACOSX_DEPLOYMENT_TARGET=10.7
+# export MACOSX_DEPLOYMENT_TARGET=10.8
# export OSXCROSS_GCC_NO_STATIC_RUNTIME=1
# export PATH=$PATH:/home/src/osxcross/target/bin
#
@@ -15,18 +15,22 @@
# ./osxcross-macports install libxml2 jpeg curl libogg libvorbis freetype boost openssl zlib lua-5.3 giflib
# to compile Luabind
-# export CMAKE_MODULE_PATH=$HOME/shard/tools/external/cmake/modules
-# cmake .. -DCMAKE_TOOLCHAIN_FILE=$HOME/ryzomcore/code/CMakeModules/OSXToolChain.cmake -DWITH_SHARED=OFF -DWITH_STATIC=ON -DWITH_LUA51=OFF -DWITH_LUA53=ON -DCMAKE_INSTALL_PREFIX=$HOME/osxcross/target/external
+# cmake .. -DCMAKE_TOOLCHAIN_FILE=$CMAKE_MODULE_PATH/OSXToolChain.cmake -DWITH_SHARED=OFF -DWITH_STATIC=ON -DWITH_LUA51=OFF -DWITH_LUA53=ON -DCMAKE_INSTALL_PREFIX=$HOME/osxcross/target/external
IF(DEFINED CMAKE_CROSSCOMPILING)
# subsequent toolchain loading is not really needed
RETURN()
ENDIF()
+# OSXCROSS_TARGET
+# OSXCROSS_SDK
+
# Force the compilers to Clang for OS X
+SET(OSXCROSS_HOST "x86_64-apple-darwin18")
+
# C
-SET(CMAKE_C_COMPILER x86_64-apple-darwin15-clang)
+SET(CMAKE_C_COMPILER ${OSXCROSS_HOST}-clang)
SET(CMAKE_C_STANDARD_COMPUTED_DEFAULT "11")
SET(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert")
SET(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes")
@@ -34,7 +38,7 @@ SET(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros")
SET(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert")
# C++
-SET(CMAKE_CXX_COMPILER x86_64-apple-darwin15-clang++)
+SET(CMAKE_CXX_COMPILER ${OSXCROSS_HOST}-clang++)
SET(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17")
SET(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters")
SET(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates")
@@ -102,8 +106,8 @@ SET(CMAKE_OSX_SYSROOT ${CMAKE_OSX_SYSROOT}/MacOSX${OSX_SDK}.sdk)
# Standard settings
SET(CMAKE_SYSTEM_NAME Darwin)
-SET(CMAKE_SYSTEM "Darwin-15.0.0")
-SET(CMAKE_SYSTEM_VERSION "15.0.0")
+SET(CMAKE_SYSTEM "Darwin-18.0.0")
+SET(CMAKE_SYSTEM_VERSION "18.0.0")
SET(CMAKE_SYSTEM_PROCESSOR "x86_64")
SET(UNIX ON)
@@ -123,9 +127,17 @@ SET(CMAKE_SYSTEM_FRAMEWORK_PATH
)
# only search the OS X sdks, not the remainder of the host filesystem
-SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
+SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
# determinate location for bin utils based on CMAKE_FIND_ROOT_PATH
INCLUDE(CMakeFindBinUtils)
+
+set(CMAKE_AR "${OSXCROSS_HOST}-ar" CACHE FILEPATH "ar")
+set(CMAKE_RANLIB "${OSXCROSS_HOST}-ranlib" CACHE FILEPATH "ranlib")
+set(CMAKE_INSTALL_NAME_TOOL "${OSXCROSS_HOST}-install_name_tool" CACHE FILEPATH "install_name_tool")
+
+set(ENV{PKG_CONFIG_LIBDIR} "${MACPORTS_ROOT_DIR}/lib/pkgconfig")
+set(ENV{PKG_CONFIG_SYSROOT_DIR} "${CMAKE_OSX_TOOLCHAIN_ROOT}/macports/pkgs")
diff --git a/code/CMakeModules/iOSToolChain.cmake b/code/CMakeModules/iOSToolChain.cmake
index 7bcb57227..37c483afb 100644
--- a/code/CMakeModules/iOSToolChain.cmake
+++ b/code/CMakeModules/iOSToolChain.cmake
@@ -137,23 +137,23 @@ SET(CMAKE_IOS_SIMULATOR_SYSROOT ${CMAKE_IOS_SIMULATOR_SDK_ROOT} CACHE PATH "Sysr
IF(CMAKE_GENERATOR MATCHES Xcode)
IF(${IOS_PLATFORM} STREQUAL "OS")
- SET(CMAKE_SYSTEM_PROCESSOR "armv7")
+ SET(CMAKE_SYSTEM_PROCESSOR "arm64")
ELSEIF(${IOS_PLATFORM} STREQUAL "SIMULATOR")
- SET(CMAKE_SYSTEM_PROCESSOR "x86")
+ SET(CMAKE_SYSTEM_PROCESSOR "x86_64")
ELSEIF(${IOS_PLATFORM} STREQUAL "ALL")
- SET(CMAKE_SYSTEM_PROCESSOR "armv7")
+ SET(CMAKE_SYSTEM_PROCESSOR "arm64")
ENDIF()
ELSE()
IF(${IOS_PLATFORM} STREQUAL "OS")
SET(ARCHS armv7 arm64)
- SET(CMAKE_SYSTEM_PROCESSOR "armv7")
+ SET(CMAKE_SYSTEM_PROCESSOR "arm64")
ELSEIF(${IOS_PLATFORM} STREQUAL "SIMULATOR")
- # iPhone simulator targets i386
- SET(ARCHS "i386")
+ # iPhone simulator targets x86_64
+ SET(ARCHS "x86_64")
SET(CMAKE_SYSTEM_PROCESSOR "x86")
ELSEIF(${IOS_PLATFORM} STREQUAL "ALL")
- SET(ARCHS armv7 arm64 i386 x86_64)
- SET(CMAKE_SYSTEM_PROCESSOR "armv7")
+ SET(ARCHS armv7 arm64 x86_64)
+ SET(CMAKE_SYSTEM_PROCESSOR "arm64")
ENDIF()
ENDIF()
diff --git a/code/CMakeModules/nel.cmake b/code/CMakeModules/nel.cmake
index abe41ca1f..f8d01a0bc 100644
--- a/code/CMakeModules/nel.cmake
+++ b/code/CMakeModules/nel.cmake
@@ -247,6 +247,7 @@ MACRO(NL_SETUP_DEFAULT_OPTIONS)
OPTION(WITH_INSTALL_LIBRARIES "Install development files." ON )
OPTION(WITH_ASSIMP "Use assimp exporter" OFF)
+ OPTION(WITH_LIBGSF "Use libgsf for max file library" OFF)
###
# GUI toolkits
@@ -280,6 +281,8 @@ MACRO(NL_SETUP_DEFAULT_OPTIONS)
OPTION(WITH_RYZOM "Build Ryzom Core." ON )
OPTION(WITH_SNOWBALLS "Build Snowballs." OFF)
OPTION(WITH_TOOLS "Build Tools" OFF)
+
+ OPTION(WITH_RYZOM_LIVE "Use ryzom.com urls" OFF)
ENDMACRO(NL_SETUP_DEFAULT_OPTIONS)
MACRO(NL_SETUP_NEL_DEFAULT_OPTIONS)
@@ -288,6 +291,7 @@ MACRO(NL_SETUP_NEL_DEFAULT_OPTIONS)
###
OPTION(WITH_NET "Build NLNET" ON )
OPTION(WITH_3D "Build NL3D" ON )
+ OPTION(WITH_WEB "Build WEB" ON )
OPTION(WITH_GUI "Build GUI" ON )
OPTION(WITH_PACS "Build NLPACS" ON )
OPTION(WITH_GEORGES "Build NLGEORGES" ON )
@@ -567,6 +571,11 @@ MACRO(NL_SETUP_BUILD)
ADD_PLATFORM_FLAGS("-DENABLE_LOGS")
ENDIF()
+ SET(CUSTOM_FLAGS "" CACHE STRING "Custom compile flags (useful for /MPn)")
+ IF(NOT ${CUSTOM_FLAGS} STREQUAL "")
+ ADD_PLATFORM_FLAGS(${CUSTOM_FLAGS})
+ ENDIF()
+
IF(MSVC)
# Ignore default include paths
ADD_PLATFORM_FLAGS("/X")
diff --git a/code/config.h.cmake b/code/config.h.cmake
index 69171cf68..fa4749cb2 100644
--- a/code/config.h.cmake
+++ b/code/config.h.cmake
@@ -27,9 +27,20 @@
#cmakedefine NL_VERSION "${NL_VERSION}"
#cmakedefine NL_VERSION_RC ${NL_VERSION_RC}
+#cmakedefine NL_PRODUCT_VERSION "${NL_PRODUCT_VERSION}"
#cmakedefine RYZOM_VERSION "${RYZOM_VERSION}"
#cmakedefine RYZOM_VERSION_RC ${RYZOM_VERSION_RC}
+#cmakedefine RYZOM_PRODUCT_VERSION "${RYZOM_PRODUCT_VERSION}"
+
+#cmakedefine RYZOM_CLIENT_CREATE_ACCOUNT_URL "${RYZOM_CLIENT_CREATE_ACCOUNT_URL}"
+#cmakedefine RYZOM_CLIENT_EDIT_ACCOUNT_URL "${RYZOM_CLIENT_EDIT_ACCOUNT_URL}"
+#cmakedefine RYZOM_CLIENT_FORGET_PASSWORD_URL "${RYZOM_CLIENT_FORGET_PASSWORD_URL}"
+#cmakedefine RYZOM_CLIENT_PATCH_URL "${RYZOM_CLIENT_PATCH_URL}"
+
+#cmakedefine RYZOM_WEBIG_MAIN_URL "${RYZOM_WEBIG_MAIN_URL}"
+#cmakedefine RYZOM_WEBIG_TRUSTED_DOMAIN "${RYZOM_WEBIG_TRUSTED_DOMAIN}"
+
#cmakedefine AUTHOR "${AUTHOR}"
#cmakedefine YEAR "${YEAR}"
#cmakedefine COPYRIGHT "${COPYRIGHT}"
diff --git a/code/nel/3rdparty/CMakeLists.txt b/code/nel/3rdparty/CMakeLists.txt
new file mode 100644
index 000000000..bdd3e5fcd
--- /dev/null
+++ b/code/nel/3rdparty/CMakeLists.txt
@@ -0,0 +1,2 @@
+SET(SEVENZIP_LIBRARY "nel_sevenzip")
+ADD_SUBDIRECTORY(seven_zip)
diff --git a/code/ryzom/client/src/seven_zip/7z.h b/code/nel/3rdparty/seven_zip/7z.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/7z.h
rename to code/nel/3rdparty/seven_zip/7z.h
diff --git a/code/ryzom/client/src/seven_zip/7zAlloc.cpp b/code/nel/3rdparty/seven_zip/7zAlloc.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/7zAlloc.cpp
rename to code/nel/3rdparty/seven_zip/7zAlloc.c
diff --git a/code/ryzom/client/src/seven_zip/7zAlloc.h b/code/nel/3rdparty/seven_zip/7zAlloc.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/7zAlloc.h
rename to code/nel/3rdparty/seven_zip/7zAlloc.h
diff --git a/code/ryzom/client/src/seven_zip/7zArcIn.cpp b/code/nel/3rdparty/seven_zip/7zArcIn.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/7zArcIn.cpp
rename to code/nel/3rdparty/seven_zip/7zArcIn.c
diff --git a/code/ryzom/client/src/seven_zip/7zBuf.cpp b/code/nel/3rdparty/seven_zip/7zBuf.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/7zBuf.cpp
rename to code/nel/3rdparty/seven_zip/7zBuf.c
diff --git a/code/ryzom/client/src/seven_zip/7zBuf.h b/code/nel/3rdparty/seven_zip/7zBuf.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/7zBuf.h
rename to code/nel/3rdparty/seven_zip/7zBuf.h
diff --git a/code/ryzom/client/src/seven_zip/7zBuf2.cpp b/code/nel/3rdparty/seven_zip/7zBuf2.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/7zBuf2.cpp
rename to code/nel/3rdparty/seven_zip/7zBuf2.c
diff --git a/code/ryzom/client/src/seven_zip/7zCrc.cpp b/code/nel/3rdparty/seven_zip/7zCrc.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/7zCrc.cpp
rename to code/nel/3rdparty/seven_zip/7zCrc.c
diff --git a/code/ryzom/client/src/seven_zip/7zCrc.h b/code/nel/3rdparty/seven_zip/7zCrc.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/7zCrc.h
rename to code/nel/3rdparty/seven_zip/7zCrc.h
diff --git a/code/ryzom/client/src/seven_zip/7zCrcOpt.cpp b/code/nel/3rdparty/seven_zip/7zCrcOpt.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/7zCrcOpt.cpp
rename to code/nel/3rdparty/seven_zip/7zCrcOpt.c
diff --git a/code/ryzom/client/src/seven_zip/7zDec.cpp b/code/nel/3rdparty/seven_zip/7zDec.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/7zDec.cpp
rename to code/nel/3rdparty/seven_zip/7zDec.c
diff --git a/code/ryzom/client/src/seven_zip/7zFile.cpp b/code/nel/3rdparty/seven_zip/7zFile.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/7zFile.cpp
rename to code/nel/3rdparty/seven_zip/7zFile.c
diff --git a/code/ryzom/client/src/seven_zip/7zFile.h b/code/nel/3rdparty/seven_zip/7zFile.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/7zFile.h
rename to code/nel/3rdparty/seven_zip/7zFile.h
diff --git a/code/ryzom/client/src/seven_zip/7zStream.cpp b/code/nel/3rdparty/seven_zip/7zStream.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/7zStream.cpp
rename to code/nel/3rdparty/seven_zip/7zStream.c
diff --git a/code/ryzom/client/src/seven_zip/7zTypes.h b/code/nel/3rdparty/seven_zip/7zTypes.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/7zTypes.h
rename to code/nel/3rdparty/seven_zip/7zTypes.h
diff --git a/code/ryzom/client/src/seven_zip/7zVersion.h b/code/nel/3rdparty/seven_zip/7zVersion.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/7zVersion.h
rename to code/nel/3rdparty/seven_zip/7zVersion.h
diff --git a/code/ryzom/client/src/seven_zip/7zVersion.rc b/code/nel/3rdparty/seven_zip/7zVersion.rc
similarity index 96%
rename from code/ryzom/client/src/seven_zip/7zVersion.rc
rename to code/nel/3rdparty/seven_zip/7zVersion.rc
index 6ed26de74..e520995dd 100644
--- a/code/ryzom/client/src/seven_zip/7zVersion.rc
+++ b/code/nel/3rdparty/seven_zip/7zVersion.rc
@@ -1,55 +1,55 @@
-#define MY_VS_FFI_FILEFLAGSMASK 0x0000003FL
-#define MY_VOS_NT_WINDOWS32 0x00040004L
-#define MY_VOS_CE_WINDOWS32 0x00050004L
-
-#define MY_VFT_APP 0x00000001L
-#define MY_VFT_DLL 0x00000002L
-
-// #include
-
-#ifndef MY_VERSION
-#include "7zVersion.h"
-#endif
-
-#define MY_VER MY_VER_MAJOR,MY_VER_MINOR,MY_VER_BUILD,0
-
-#ifdef DEBUG
-#define DBG_FL VS_FF_DEBUG
-#else
-#define DBG_FL 0
-#endif
-
-#define MY_VERSION_INFO(fileType, descr, intName, origName) \
-LANGUAGE 9, 1 \
-1 VERSIONINFO \
- FILEVERSION MY_VER \
- PRODUCTVERSION MY_VER \
- FILEFLAGSMASK MY_VS_FFI_FILEFLAGSMASK \
- FILEFLAGS DBG_FL \
- FILEOS MY_VOS_NT_WINDOWS32 \
- FILETYPE fileType \
- FILESUBTYPE 0x0L \
-BEGIN \
- BLOCK "StringFileInfo" \
- BEGIN \
- BLOCK "040904b0" \
- BEGIN \
- VALUE "CompanyName", "Igor Pavlov" \
- VALUE "FileDescription", descr \
- VALUE "FileVersion", MY_VERSION \
- VALUE "InternalName", intName \
- VALUE "LegalCopyright", MY_COPYRIGHT \
- VALUE "OriginalFilename", origName \
- VALUE "ProductName", "7-Zip" \
- VALUE "ProductVersion", MY_VERSION \
- END \
- END \
- BLOCK "VarFileInfo" \
- BEGIN \
- VALUE "Translation", 0x409, 1200 \
- END \
-END
-
-#define MY_VERSION_INFO_APP(descr, intName) MY_VERSION_INFO(MY_VFT_APP, descr, intName, intName ".exe")
-
-#define MY_VERSION_INFO_DLL(descr, intName) MY_VERSION_INFO(MY_VFT_DLL, descr, intName, intName ".dll")
+#define MY_VS_FFI_FILEFLAGSMASK 0x0000003FL
+#define MY_VOS_NT_WINDOWS32 0x00040004L
+#define MY_VOS_CE_WINDOWS32 0x00050004L
+
+#define MY_VFT_APP 0x00000001L
+#define MY_VFT_DLL 0x00000002L
+
+// #include
+
+#ifndef MY_VERSION
+#include "7zVersion.h"
+#endif
+
+#define MY_VER MY_VER_MAJOR,MY_VER_MINOR,MY_VER_BUILD,0
+
+#ifdef DEBUG
+#define DBG_FL VS_FF_DEBUG
+#else
+#define DBG_FL 0
+#endif
+
+#define MY_VERSION_INFO(fileType, descr, intName, origName) \
+LANGUAGE 9, 1 \
+1 VERSIONINFO \
+ FILEVERSION MY_VER \
+ PRODUCTVERSION MY_VER \
+ FILEFLAGSMASK MY_VS_FFI_FILEFLAGSMASK \
+ FILEFLAGS DBG_FL \
+ FILEOS MY_VOS_NT_WINDOWS32 \
+ FILETYPE fileType \
+ FILESUBTYPE 0x0L \
+BEGIN \
+ BLOCK "StringFileInfo" \
+ BEGIN \
+ BLOCK "040904b0" \
+ BEGIN \
+ VALUE "CompanyName", "Igor Pavlov" \
+ VALUE "FileDescription", descr \
+ VALUE "FileVersion", MY_VERSION \
+ VALUE "InternalName", intName \
+ VALUE "LegalCopyright", MY_COPYRIGHT \
+ VALUE "OriginalFilename", origName \
+ VALUE "ProductName", "7-Zip" \
+ VALUE "ProductVersion", MY_VERSION \
+ END \
+ END \
+ BLOCK "VarFileInfo" \
+ BEGIN \
+ VALUE "Translation", 0x409, 1200 \
+ END \
+END
+
+#define MY_VERSION_INFO_APP(descr, intName) MY_VERSION_INFO(MY_VFT_APP, descr, intName, intName ".exe")
+
+#define MY_VERSION_INFO_DLL(descr, intName) MY_VERSION_INFO(MY_VFT_DLL, descr, intName, intName ".dll")
diff --git a/code/ryzom/client/src/seven_zip/Aes.cpp b/code/nel/3rdparty/seven_zip/Aes.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Aes.cpp
rename to code/nel/3rdparty/seven_zip/Aes.c
diff --git a/code/ryzom/client/src/seven_zip/Aes.h b/code/nel/3rdparty/seven_zip/Aes.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Aes.h
rename to code/nel/3rdparty/seven_zip/Aes.h
diff --git a/code/ryzom/client/src/seven_zip/AesOpt.cpp b/code/nel/3rdparty/seven_zip/AesOpt.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/AesOpt.cpp
rename to code/nel/3rdparty/seven_zip/AesOpt.c
diff --git a/code/ryzom/client/src/seven_zip/Alloc.cpp b/code/nel/3rdparty/seven_zip/Alloc.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Alloc.cpp
rename to code/nel/3rdparty/seven_zip/Alloc.c
diff --git a/code/ryzom/client/src/seven_zip/Alloc.h b/code/nel/3rdparty/seven_zip/Alloc.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Alloc.h
rename to code/nel/3rdparty/seven_zip/Alloc.h
diff --git a/code/ryzom/client/src/seven_zip/Bcj2.cpp b/code/nel/3rdparty/seven_zip/Bcj2.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Bcj2.cpp
rename to code/nel/3rdparty/seven_zip/Bcj2.c
diff --git a/code/ryzom/client/src/seven_zip/Bcj2.h b/code/nel/3rdparty/seven_zip/Bcj2.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Bcj2.h
rename to code/nel/3rdparty/seven_zip/Bcj2.h
diff --git a/code/ryzom/client/src/seven_zip/Bcj2Enc.cpp b/code/nel/3rdparty/seven_zip/Bcj2Enc.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Bcj2Enc.cpp
rename to code/nel/3rdparty/seven_zip/Bcj2Enc.c
diff --git a/code/ryzom/client/src/seven_zip/Bra.cpp b/code/nel/3rdparty/seven_zip/Bra.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Bra.cpp
rename to code/nel/3rdparty/seven_zip/Bra.c
diff --git a/code/ryzom/client/src/seven_zip/Bra.h b/code/nel/3rdparty/seven_zip/Bra.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Bra.h
rename to code/nel/3rdparty/seven_zip/Bra.h
diff --git a/code/ryzom/client/src/seven_zip/Bra86.cpp b/code/nel/3rdparty/seven_zip/Bra86.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Bra86.cpp
rename to code/nel/3rdparty/seven_zip/Bra86.c
diff --git a/code/ryzom/client/src/seven_zip/BraIA64.cpp b/code/nel/3rdparty/seven_zip/BraIA64.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/BraIA64.cpp
rename to code/nel/3rdparty/seven_zip/BraIA64.c
diff --git a/code/nel/3rdparty/seven_zip/CMakeLists.txt b/code/nel/3rdparty/seven_zip/CMakeLists.txt
new file mode 100644
index 000000000..dfbf00aa2
--- /dev/null
+++ b/code/nel/3rdparty/seven_zip/CMakeLists.txt
@@ -0,0 +1,27 @@
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
+
+FILE(GLOB LIB_SRC *.cpp *.c *.h)
+
+LIST(REMOVE_ITEM LIB_SRC ${CMAKE_CURRENT_SOURCE_DIR}/LzmaUtil.c)
+
+NL_TARGET_LIB(nel_sevenzip ${LIB_SRC})
+# TARGET_LINK_LIBRARIES(nel_sevenzip ${PLATFORM_LINKFLAGS})
+NL_DEFAULT_PROPS(nel_sevenzip "NeL, 3rd Party: Seven Zip")
+NL_ADD_RUNTIME_FLAGS(nel_sevenzip)
+NL_ADD_LIB_SUFFIX(nel_sevenzip)
+
+ADD_DEFINITIONS(-D_7ZIP_ST)
+
+IF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC)
+ INSTALL(TARGETS nel_sevenzip LIBRARY DESTINATION ${NL_LIB_PREFIX} ARCHIVE DESTINATION ${NL_LIB_PREFIX} COMPONENT libraries)
+ENDIF()
+
+IF(WITH_NEL_TOOLS)
+ ADD_EXECUTABLE(lzma ${CMAKE_CURRENT_SOURCE_DIR}/LzmaUtil.c)
+
+ TARGET_LINK_LIBRARIES(lzma nel_sevenzip)
+ NL_DEFAULT_PROPS(lzma "NeL, 3rd Party: LZMA")
+ NL_ADD_RUNTIME_FLAGS(lzma)
+
+ INSTALL(TARGETS lzma RUNTIME DESTINATION ${NL_BIN_PREFIX} COMPONENT tools)
+ENDIF()
diff --git a/code/ryzom/client/src/seven_zip/Compiler.h b/code/nel/3rdparty/seven_zip/Compiler.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Compiler.h
rename to code/nel/3rdparty/seven_zip/Compiler.h
diff --git a/code/ryzom/client/src/seven_zip/CpuArch.cpp b/code/nel/3rdparty/seven_zip/CpuArch.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/CpuArch.cpp
rename to code/nel/3rdparty/seven_zip/CpuArch.c
diff --git a/code/ryzom/client/src/seven_zip/CpuArch.h b/code/nel/3rdparty/seven_zip/CpuArch.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/CpuArch.h
rename to code/nel/3rdparty/seven_zip/CpuArch.h
diff --git a/code/ryzom/client/src/seven_zip/Delta.cpp b/code/nel/3rdparty/seven_zip/Delta.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Delta.cpp
rename to code/nel/3rdparty/seven_zip/Delta.c
diff --git a/code/ryzom/client/src/seven_zip/Delta.h b/code/nel/3rdparty/seven_zip/Delta.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Delta.h
rename to code/nel/3rdparty/seven_zip/Delta.h
diff --git a/code/nel/3rdparty/seven_zip/DllSecur.c b/code/nel/3rdparty/seven_zip/DllSecur.c
new file mode 100644
index 000000000..5ea108ab8
--- /dev/null
+++ b/code/nel/3rdparty/seven_zip/DllSecur.c
@@ -0,0 +1,108 @@
+/* DllSecur.c -- DLL loading security
+2018-02-21 : Igor Pavlov : Public domain */
+
+#include "Precomp.h"
+
+#ifdef _WIN32
+
+#include
+
+#include "DllSecur.h"
+
+#ifndef UNDER_CE
+
+typedef BOOL (WINAPI *Func_SetDefaultDllDirectories)(DWORD DirectoryFlags);
+
+#define MY_LOAD_LIBRARY_SEARCH_USER_DIRS 0x400
+#define MY_LOAD_LIBRARY_SEARCH_SYSTEM32 0x800
+
+static const char * const g_Dlls =
+ #ifndef _CONSOLE
+ "UXTHEME\0"
+ #endif
+ "USERENV\0"
+ "SETUPAPI\0"
+ "APPHELP\0"
+ "PROPSYS\0"
+ "DWMAPI\0"
+ "CRYPTBASE\0"
+ "OLEACC\0"
+ "CLBCATQ\0"
+ "VERSION\0"
+ ;
+
+#endif
+
+void My_SetDefaultDllDirectories()
+{
+ #ifndef UNDER_CE
+
+ OSVERSIONINFO vi;
+ vi.dwOSVersionInfoSize = sizeof(vi);
+ GetVersionEx(&vi);
+ if (!GetVersionEx(&vi) || vi.dwMajorVersion != 6 || vi.dwMinorVersion != 0)
+ {
+ Func_SetDefaultDllDirectories setDllDirs = (Func_SetDefaultDllDirectories)
+ GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "SetDefaultDllDirectories");
+ if (setDllDirs)
+ if (setDllDirs(MY_LOAD_LIBRARY_SEARCH_SYSTEM32 | MY_LOAD_LIBRARY_SEARCH_USER_DIRS))
+ return;
+ }
+
+ #endif
+}
+
+
+void LoadSecurityDlls()
+{
+ #ifndef UNDER_CE
+
+ wchar_t buf[MAX_PATH + 100];
+
+ {
+ // at Vista (ver 6.0) : CoCreateInstance(CLSID_ShellLink, ...) doesn't work after SetDefaultDllDirectories() : Check it ???
+ OSVERSIONINFO vi;
+ vi.dwOSVersionInfoSize = sizeof(vi);
+ if (!GetVersionEx(&vi) || vi.dwMajorVersion != 6 || vi.dwMinorVersion != 0)
+ {
+ Func_SetDefaultDllDirectories setDllDirs = (Func_SetDefaultDllDirectories)
+ GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "SetDefaultDllDirectories");
+ if (setDllDirs)
+ if (setDllDirs(MY_LOAD_LIBRARY_SEARCH_SYSTEM32 | MY_LOAD_LIBRARY_SEARCH_USER_DIRS))
+ return;
+ }
+ }
+
+ {
+ unsigned len = GetSystemDirectoryW(buf, MAX_PATH + 2);
+ if (len == 0 || len > MAX_PATH)
+ return;
+ }
+ {
+ const char *dll;
+ unsigned pos = (unsigned)lstrlenW(buf);
+
+ if (buf[pos - 1] != '\\')
+ buf[pos++] = '\\';
+
+ for (dll = g_Dlls; dll[0] != 0;)
+ {
+ unsigned k = 0;
+ for (;;)
+ {
+ char c = *dll++;
+ buf[pos + k] = (Byte)c;
+ k++;
+ if (c == 0)
+ break;
+ }
+
+ lstrcatW(buf, L".dll");
+ LoadLibraryExW(buf, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
+ }
+ }
+
+ #endif
+}
+
+#endif
diff --git a/code/nel/3rdparty/seven_zip/DllSecur.h b/code/nel/3rdparty/seven_zip/DllSecur.h
new file mode 100644
index 000000000..e2a049ad2
--- /dev/null
+++ b/code/nel/3rdparty/seven_zip/DllSecur.h
@@ -0,0 +1,20 @@
+/* DllSecur.h -- DLL loading for security
+2018-02-19 : Igor Pavlov : Public domain */
+
+#ifndef __DLL_SECUR_H
+#define __DLL_SECUR_H
+
+#include "7zTypes.h"
+
+EXTERN_C_BEGIN
+
+#ifdef _WIN32
+
+void My_SetDefaultDllDirectories();
+void LoadSecurityDlls();
+
+#endif
+
+EXTERN_C_END
+
+#endif
diff --git a/code/ryzom/client/src/seven_zip/LzFind.cpp b/code/nel/3rdparty/seven_zip/LzFind.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/LzFind.cpp
rename to code/nel/3rdparty/seven_zip/LzFind.c
diff --git a/code/ryzom/client/src/seven_zip/LzFind.h b/code/nel/3rdparty/seven_zip/LzFind.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/LzFind.h
rename to code/nel/3rdparty/seven_zip/LzFind.h
diff --git a/code/ryzom/client/src/seven_zip/LzHash.h b/code/nel/3rdparty/seven_zip/LzHash.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/LzHash.h
rename to code/nel/3rdparty/seven_zip/LzHash.h
diff --git a/code/ryzom/client/src/seven_zip/Lzma2Dec.cpp b/code/nel/3rdparty/seven_zip/Lzma2Dec.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Lzma2Dec.cpp
rename to code/nel/3rdparty/seven_zip/Lzma2Dec.c
diff --git a/code/ryzom/client/src/seven_zip/Lzma2Dec.h b/code/nel/3rdparty/seven_zip/Lzma2Dec.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Lzma2Dec.h
rename to code/nel/3rdparty/seven_zip/Lzma2Dec.h
diff --git a/code/nel/3rdparty/seven_zip/Lzma2DecMt.c b/code/nel/3rdparty/seven_zip/Lzma2DecMt.c
new file mode 100644
index 000000000..988643d95
--- /dev/null
+++ b/code/nel/3rdparty/seven_zip/Lzma2DecMt.c
@@ -0,0 +1,1082 @@
+/* Lzma2DecMt.c -- LZMA2 Decoder Multi-thread
+2019-02-02 : Igor Pavlov : Public domain */
+
+#include "Precomp.h"
+
+// #define SHOW_DEBUG_INFO
+
+#ifdef SHOW_DEBUG_INFO
+#include
+#endif
+
+#ifdef SHOW_DEBUG_INFO
+#define PRF(x) x
+#else
+#define PRF(x)
+#endif
+
+#define PRF_STR(s) PRF(printf("\n" s "\n"))
+#define PRF_STR_INT(s, d) PRF(printf("\n" s " %d\n", (unsigned)d))
+#define PRF_STR_INT_2(s, d1, d2) PRF(printf("\n" s " %d %d\n", (unsigned)d1, (unsigned)d2))
+
+// #define _7ZIP_ST
+
+#include "Alloc.h"
+
+#include "Lzma2Dec.h"
+#include "Lzma2DecMt.h"
+
+#ifndef _7ZIP_ST
+#include "MtDec.h"
+#endif
+
+
+#define LZMA2DECMT_OUT_BLOCK_MAX_DEFAULT (1 << 28)
+
+void Lzma2DecMtProps_Init(CLzma2DecMtProps *p)
+{
+ p->inBufSize_ST = 1 << 20;
+ p->outStep_ST = 1 << 20;
+
+ #ifndef _7ZIP_ST
+ p->numThreads = 1;
+ p->inBufSize_MT = 1 << 18;
+ p->outBlockMax = LZMA2DECMT_OUT_BLOCK_MAX_DEFAULT;
+ p->inBlockMax = p->outBlockMax + p->outBlockMax / 16;
+ #endif
+}
+
+
+
+#ifndef _7ZIP_ST
+
+/* ---------- CLzma2DecMtThread ---------- */
+
+typedef struct
+{
+ CLzma2Dec dec;
+ Byte dec_created;
+ Byte needInit;
+
+ Byte *outBuf;
+ size_t outBufSize;
+
+ EMtDecParseState state;
+ ELzma2ParseStatus parseStatus;
+
+ size_t inPreSize;
+ size_t outPreSize;
+
+ size_t inCodeSize;
+ size_t outCodeSize;
+ SRes codeRes;
+
+ CAlignOffsetAlloc alloc;
+
+ Byte mtPad[1 << 7];
+} CLzma2DecMtThread;
+
+#endif
+
+
+/* ---------- CLzma2DecMt ---------- */
+
+typedef struct
+{
+ // ISzAllocPtr alloc;
+ ISzAllocPtr allocMid;
+
+ CAlignOffsetAlloc alignOffsetAlloc;
+ CLzma2DecMtProps props;
+ Byte prop;
+
+ ISeqInStream *inStream;
+ ISeqOutStream *outStream;
+ ICompressProgress *progress;
+
+ BoolInt finishMode;
+ BoolInt outSize_Defined;
+ UInt64 outSize;
+
+ UInt64 outProcessed;
+ UInt64 inProcessed;
+ BoolInt readWasFinished;
+ SRes readRes;
+
+ Byte *inBuf;
+ size_t inBufSize;
+ Byte dec_created;
+ CLzma2Dec dec;
+
+ size_t inPos;
+ size_t inLim;
+
+ #ifndef _7ZIP_ST
+ UInt64 outProcessed_Parse;
+ BoolInt mtc_WasConstructed;
+ CMtDec mtc;
+ CLzma2DecMtThread coders[MTDEC__THREADS_MAX];
+ #endif
+
+} CLzma2DecMt;
+
+
+
+CLzma2DecMtHandle Lzma2DecMt_Create(ISzAllocPtr alloc, ISzAllocPtr allocMid)
+{
+ CLzma2DecMt *p = (CLzma2DecMt *)ISzAlloc_Alloc(alloc, sizeof(CLzma2DecMt));
+ if (!p)
+ return NULL;
+
+ // p->alloc = alloc;
+ p->allocMid = allocMid;
+
+ AlignOffsetAlloc_CreateVTable(&p->alignOffsetAlloc);
+ p->alignOffsetAlloc.numAlignBits = 7;
+ p->alignOffsetAlloc.offset = 0;
+ p->alignOffsetAlloc.baseAlloc = alloc;
+
+ p->inBuf = NULL;
+ p->inBufSize = 0;
+ p->dec_created = False;
+
+ // Lzma2DecMtProps_Init(&p->props);
+
+ #ifndef _7ZIP_ST
+ p->mtc_WasConstructed = False;
+ {
+ unsigned i;
+ for (i = 0; i < MTDEC__THREADS_MAX; i++)
+ {
+ CLzma2DecMtThread *t = &p->coders[i];
+ t->dec_created = False;
+ t->outBuf = NULL;
+ t->outBufSize = 0;
+ }
+ }
+ #endif
+
+ return p;
+}
+
+
+#ifndef _7ZIP_ST
+
+static void Lzma2DecMt_FreeOutBufs(CLzma2DecMt *p)
+{
+ unsigned i;
+ for (i = 0; i < MTDEC__THREADS_MAX; i++)
+ {
+ CLzma2DecMtThread *t = &p->coders[i];
+ if (t->outBuf)
+ {
+ ISzAlloc_Free(p->allocMid, t->outBuf);
+ t->outBuf = NULL;
+ t->outBufSize = 0;
+ }
+ }
+}
+
+#endif
+
+
+static void Lzma2DecMt_FreeSt(CLzma2DecMt *p)
+{
+ if (p->dec_created)
+ {
+ Lzma2Dec_Free(&p->dec, &p->alignOffsetAlloc.vt);
+ p->dec_created = False;
+ }
+ if (p->inBuf)
+ {
+ ISzAlloc_Free(p->allocMid, p->inBuf);
+ p->inBuf = NULL;
+ }
+ p->inBufSize = 0;
+}
+
+
+void Lzma2DecMt_Destroy(CLzma2DecMtHandle pp)
+{
+ CLzma2DecMt *p = (CLzma2DecMt *)pp;
+
+ Lzma2DecMt_FreeSt(p);
+
+ #ifndef _7ZIP_ST
+
+ if (p->mtc_WasConstructed)
+ {
+ MtDec_Destruct(&p->mtc);
+ p->mtc_WasConstructed = False;
+ }
+ {
+ unsigned i;
+ for (i = 0; i < MTDEC__THREADS_MAX; i++)
+ {
+ CLzma2DecMtThread *t = &p->coders[i];
+ if (t->dec_created)
+ {
+ // we don't need to free dict here
+ Lzma2Dec_FreeProbs(&t->dec, &t->alloc.vt); // p->alloc !!!
+ t->dec_created = False;
+ }
+ }
+ }
+ Lzma2DecMt_FreeOutBufs(p);
+
+ #endif
+
+ ISzAlloc_Free(p->alignOffsetAlloc.baseAlloc, pp);
+}
+
+
+
+#ifndef _7ZIP_ST
+
+static void Lzma2DecMt_MtCallback_Parse(void *obj, unsigned coderIndex, CMtDecCallbackInfo *cc)
+{
+ CLzma2DecMt *me = (CLzma2DecMt *)obj;
+ CLzma2DecMtThread *t = &me->coders[coderIndex];
+
+ PRF_STR_INT_2("Parse", coderIndex, cc->srcSize);
+
+ cc->state = MTDEC_PARSE_CONTINUE;
+
+ if (cc->startCall)
+ {
+ if (!t->dec_created)
+ {
+ Lzma2Dec_Construct(&t->dec);
+ t->dec_created = True;
+ AlignOffsetAlloc_CreateVTable(&t->alloc);
+ {
+ /* (1 << 12) is expected size of one way in data cache.
+ We optimize alignment for cache line size of 128 bytes and smaller */
+ const unsigned kNumAlignBits = 12;
+ const unsigned kNumCacheLineBits = 7; /* <= kNumAlignBits */
+ t->alloc.numAlignBits = kNumAlignBits;
+ t->alloc.offset = ((UInt32)coderIndex * ((1 << 11) + (1 << 8) + (1 << 6))) & ((1 << kNumAlignBits) - (1 << kNumCacheLineBits));
+ t->alloc.baseAlloc = me->alignOffsetAlloc.baseAlloc;
+ }
+ }
+ Lzma2Dec_Init(&t->dec);
+
+ t->inPreSize = 0;
+ t->outPreSize = 0;
+ // t->blockWasFinished = False;
+ // t->finishedWithMark = False;
+ t->parseStatus = (ELzma2ParseStatus)LZMA_STATUS_NOT_SPECIFIED;
+ t->state = MTDEC_PARSE_CONTINUE;
+
+ t->inCodeSize = 0;
+ t->outCodeSize = 0;
+ t->codeRes = SZ_OK;
+
+ // (cc->srcSize == 0) is allowed
+ }
+
+ {
+ ELzma2ParseStatus status;
+ BoolInt overflow;
+ UInt32 unpackRem = 0;
+
+ int checkFinishBlock = True;
+ size_t limit = me->props.outBlockMax;
+ if (me->outSize_Defined)
+ {
+ UInt64 rem = me->outSize - me->outProcessed_Parse;
+ if (limit >= rem)
+ {
+ limit = (size_t)rem;
+ if (!me->finishMode)
+ checkFinishBlock = False;
+ }
+ }
+
+ // checkFinishBlock = False, if we want to decode partial data
+ // that must be finished at position <= outBlockMax.
+
+ {
+ const SizeT srcOrig = cc->srcSize;
+ SizeT srcSize_Point = 0;
+ SizeT dicPos_Point = 0;
+
+ cc->srcSize = 0;
+ overflow = False;
+
+ for (;;)
+ {
+ SizeT srcCur = srcOrig - cc->srcSize;
+
+ status = Lzma2Dec_Parse(&t->dec,
+ limit - t->dec.decoder.dicPos,
+ cc->src + cc->srcSize, &srcCur,
+ checkFinishBlock);
+
+ cc->srcSize += srcCur;
+
+ if (status == LZMA2_PARSE_STATUS_NEW_CHUNK)
+ {
+ if (t->dec.unpackSize > me->props.outBlockMax - t->dec.decoder.dicPos)
+ {
+ overflow = True;
+ break;
+ }
+ continue;
+ }
+
+ if (status == LZMA2_PARSE_STATUS_NEW_BLOCK)
+ {
+ if (t->dec.decoder.dicPos == 0)
+ continue;
+ // we decode small blocks in one thread
+ if (t->dec.decoder.dicPos >= (1 << 14))
+ break;
+ dicPos_Point = t->dec.decoder.dicPos;
+ srcSize_Point = cc->srcSize;
+ continue;
+ }
+
+ if ((int)status == LZMA_STATUS_NOT_FINISHED && checkFinishBlock
+ // && limit == t->dec.decoder.dicPos
+ // && limit == me->props.outBlockMax
+ )
+ {
+ overflow = True;
+ break;
+ }
+
+ unpackRem = Lzma2Dec_GetUnpackExtra(&t->dec);
+ break;
+ }
+
+ if (dicPos_Point != 0
+ && (int)status != LZMA2_PARSE_STATUS_NEW_BLOCK
+ && (int)status != LZMA_STATUS_FINISHED_WITH_MARK
+ && (int)status != LZMA_STATUS_NOT_SPECIFIED)
+ {
+ // we revert to latest newBlock state
+ status = LZMA2_PARSE_STATUS_NEW_BLOCK;
+ unpackRem = 0;
+ t->dec.decoder.dicPos = dicPos_Point;
+ cc->srcSize = srcSize_Point;
+ overflow = False;
+ }
+ }
+
+ t->inPreSize += cc->srcSize;
+ t->parseStatus = status;
+
+ if (overflow)
+ cc->state = MTDEC_PARSE_OVERFLOW;
+ else
+ {
+ size_t dicPos = t->dec.decoder.dicPos;
+
+ if ((int)status != LZMA_STATUS_NEEDS_MORE_INPUT)
+ {
+ if (status == LZMA2_PARSE_STATUS_NEW_BLOCK)
+ {
+ cc->state = MTDEC_PARSE_NEW;
+ cc->srcSize--; // we don't need control byte of next block
+ t->inPreSize--;
+ }
+ else
+ {
+ cc->state = MTDEC_PARSE_END;
+ if ((int)status != LZMA_STATUS_FINISHED_WITH_MARK)
+ {
+ // (status == LZMA_STATUS_NOT_SPECIFIED)
+ // (status == LZMA_STATUS_NOT_FINISHED)
+ if (unpackRem != 0)
+ {
+ /* we also reserve space for max possible number of output bytes of current LZMA chunk */
+ SizeT rem = limit - dicPos;
+ if (rem > unpackRem)
+ rem = unpackRem;
+ dicPos += rem;
+ }
+ }
+ }
+
+ me->outProcessed_Parse += dicPos;
+ }
+
+ cc->outPos = dicPos;
+ t->outPreSize = (size_t)dicPos;
+ }
+
+ t->state = cc->state;
+ return;
+ }
+}
+
+
+static SRes Lzma2DecMt_MtCallback_PreCode(void *pp, unsigned coderIndex)
+{
+ CLzma2DecMt *me = (CLzma2DecMt *)pp;
+ CLzma2DecMtThread *t = &me->coders[coderIndex];
+ Byte *dest = t->outBuf;
+
+ if (t->inPreSize == 0)
+ {
+ t->codeRes = SZ_ERROR_DATA;
+ return t->codeRes;
+ }
+
+ if (!dest || t->outBufSize < t->outPreSize)
+ {
+ if (dest)
+ {
+ ISzAlloc_Free(me->allocMid, dest);
+ t->outBuf = NULL;
+ t->outBufSize = 0;
+ }
+
+ dest = (Byte *)ISzAlloc_Alloc(me->allocMid, t->outPreSize
+ // + (1 << 28)
+ );
+ // Sleep(200);
+ if (!dest)
+ return SZ_ERROR_MEM;
+ t->outBuf = dest;
+ t->outBufSize = t->outPreSize;
+ }
+
+ t->dec.decoder.dic = dest;
+ t->dec.decoder.dicBufSize = t->outPreSize;
+
+ t->needInit = True;
+
+ return Lzma2Dec_AllocateProbs(&t->dec, me->prop, &t->alloc.vt); // alloc.vt
+}
+
+
+static SRes Lzma2DecMt_MtCallback_Code(void *pp, unsigned coderIndex,
+ const Byte *src, size_t srcSize, int srcFinished,
+ // int finished, int blockFinished,
+ UInt64 *inCodePos, UInt64 *outCodePos, int *stop)
+{
+ CLzma2DecMt *me = (CLzma2DecMt *)pp;
+ CLzma2DecMtThread *t = &me->coders[coderIndex];
+
+ UNUSED_VAR(srcFinished)
+
+ PRF_STR_INT_2("Code", coderIndex, srcSize);
+
+ *inCodePos = t->inCodeSize;
+ *outCodePos = 0;
+ *stop = True;
+
+ if (t->needInit)
+ {
+ Lzma2Dec_Init(&t->dec);
+ t->needInit = False;
+ }
+
+ {
+ ELzmaStatus status;
+ size_t srcProcessed = srcSize;
+ BoolInt blockWasFinished =
+ ((int)t->parseStatus == LZMA_STATUS_FINISHED_WITH_MARK
+ || t->parseStatus == LZMA2_PARSE_STATUS_NEW_BLOCK);
+
+ SRes res = Lzma2Dec_DecodeToDic(&t->dec,
+ t->outPreSize,
+ src, &srcProcessed,
+ blockWasFinished ? LZMA_FINISH_END : LZMA_FINISH_ANY,
+ &status);
+
+ t->codeRes = res;
+
+ t->inCodeSize += srcProcessed;
+ *inCodePos = t->inCodeSize;
+ t->outCodeSize = t->dec.decoder.dicPos;
+ *outCodePos = t->dec.decoder.dicPos;
+
+ if (res != SZ_OK)
+ return res;
+
+ if (srcProcessed == srcSize)
+ *stop = False;
+
+ if (blockWasFinished)
+ {
+ if (srcSize != srcProcessed)
+ return SZ_ERROR_FAIL;
+
+ if (t->inPreSize == t->inCodeSize)
+ {
+ if (t->outPreSize != t->outCodeSize)
+ return SZ_ERROR_FAIL;
+ *stop = True;
+ }
+ }
+ else
+ {
+ if (t->outPreSize == t->outCodeSize)
+ *stop = True;
+ }
+
+ return SZ_OK;
+ }
+}
+
+
+#define LZMA2DECMT_STREAM_WRITE_STEP (1 << 24)
+
+static SRes Lzma2DecMt_MtCallback_Write(void *pp, unsigned coderIndex,
+ BoolInt needWriteToStream,
+ const Byte *src, size_t srcSize,
+ BoolInt *needContinue, BoolInt *canRecode)
+{
+ CLzma2DecMt *me = (CLzma2DecMt *)pp;
+ const CLzma2DecMtThread *t = &me->coders[coderIndex];
+ size_t size = t->outCodeSize;
+ const Byte *data = t->outBuf;
+ BoolInt needContinue2 = True;
+
+ PRF_STR_INT_2("Write", coderIndex, srcSize);
+
+ *needContinue = False;
+ *canRecode = True;
+ UNUSED_VAR(src)
+ UNUSED_VAR(srcSize)
+
+ if (
+ // t->parseStatus == LZMA_STATUS_FINISHED_WITH_MARK
+ t->state == MTDEC_PARSE_OVERFLOW
+ || t->state == MTDEC_PARSE_END)
+ needContinue2 = False;
+
+
+ if (!needWriteToStream)
+ return SZ_OK;
+
+ me->mtc.inProcessed += t->inCodeSize;
+
+ if (t->codeRes == SZ_OK)
+ if ((int)t->parseStatus == LZMA_STATUS_FINISHED_WITH_MARK
+ || t->parseStatus == LZMA2_PARSE_STATUS_NEW_BLOCK)
+ if (t->outPreSize != t->outCodeSize
+ || t->inPreSize != t->inCodeSize)
+ return SZ_ERROR_FAIL;
+
+ *canRecode = False;
+
+ if (me->outStream)
+ {
+ for (;;)
+ {
+ size_t cur = size;
+ size_t written;
+ if (cur > LZMA2DECMT_STREAM_WRITE_STEP)
+ cur = LZMA2DECMT_STREAM_WRITE_STEP;
+
+ written = ISeqOutStream_Write(me->outStream, data, cur);
+
+ me->outProcessed += written;
+ // me->mtc.writtenTotal += written;
+ if (written != cur)
+ return SZ_ERROR_WRITE;
+ data += cur;
+ size -= cur;
+ if (size == 0)
+ {
+ *needContinue = needContinue2;
+ return SZ_OK;
+ }
+ RINOK(MtProgress_ProgressAdd(&me->mtc.mtProgress, 0, 0));
+ }
+ }
+
+ return SZ_ERROR_FAIL;
+ /*
+ if (size > me->outBufSize)
+ return SZ_ERROR_OUTPUT_EOF;
+ memcpy(me->outBuf, data, size);
+ me->outBufSize -= size;
+ me->outBuf += size;
+ *needContinue = needContinue2;
+ return SZ_OK;
+ */
+}
+
+#endif
+
+
+static SRes Lzma2Dec_Prepare_ST(CLzma2DecMt *p)
+{
+ if (!p->dec_created)
+ {
+ Lzma2Dec_Construct(&p->dec);
+ p->dec_created = True;
+ }
+
+ RINOK(Lzma2Dec_Allocate(&p->dec, p->prop, &p->alignOffsetAlloc.vt));
+
+ if (!p->inBuf || p->inBufSize != p->props.inBufSize_ST)
+ {
+ ISzAlloc_Free(p->allocMid, p->inBuf);
+ p->inBufSize = 0;
+ p->inBuf = (Byte *)ISzAlloc_Alloc(p->allocMid, p->props.inBufSize_ST);
+ if (!p->inBuf)
+ return SZ_ERROR_MEM;
+ p->inBufSize = p->props.inBufSize_ST;
+ }
+
+ Lzma2Dec_Init(&p->dec);
+
+ return SZ_OK;
+}
+
+
+static SRes Lzma2Dec_Decode_ST(CLzma2DecMt *p
+ #ifndef _7ZIP_ST
+ , BoolInt tMode
+ #endif
+ )
+{
+ SizeT wrPos;
+ size_t inPos, inLim;
+ const Byte *inData;
+ UInt64 inPrev, outPrev;
+
+ CLzma2Dec *dec;
+
+ #ifndef _7ZIP_ST
+ if (tMode)
+ {
+ Lzma2DecMt_FreeOutBufs(p);
+ tMode = MtDec_PrepareRead(&p->mtc);
+ }
+ #endif
+
+ RINOK(Lzma2Dec_Prepare_ST(p));
+
+ dec = &p->dec;
+
+ inPrev = p->inProcessed;
+ outPrev = p->outProcessed;
+
+ inPos = 0;
+ inLim = 0;
+ inData = NULL;
+ wrPos = dec->decoder.dicPos;
+
+ for (;;)
+ {
+ SizeT dicPos;
+ SizeT size;
+ ELzmaFinishMode finishMode;
+ SizeT inProcessed;
+ ELzmaStatus status;
+ SRes res;
+
+ SizeT outProcessed;
+ BoolInt outFinished;
+ BoolInt needStop;
+
+ if (inPos == inLim)
+ {
+ #ifndef _7ZIP_ST
+ if (tMode)
+ {
+ inData = MtDec_Read(&p->mtc, &inLim);
+ inPos = 0;
+ if (inData)
+ continue;
+ tMode = False;
+ inLim = 0;
+ }
+ #endif
+
+ if (!p->readWasFinished)
+ {
+ inPos = 0;
+ inLim = p->inBufSize;
+ inData = p->inBuf;
+ p->readRes = ISeqInStream_Read(p->inStream, (void *)inData, &inLim);
+ // p->readProcessed += inLim;
+ // inLim -= 5; p->readWasFinished = True; // for test
+ if (inLim == 0 || p->readRes != SZ_OK)
+ p->readWasFinished = True;
+ }
+ }
+
+ dicPos = dec->decoder.dicPos;
+ {
+ SizeT next = dec->decoder.dicBufSize;
+ if (next - wrPos > p->props.outStep_ST)
+ next = wrPos + p->props.outStep_ST;
+ size = next - dicPos;
+ }
+
+ finishMode = LZMA_FINISH_ANY;
+ if (p->outSize_Defined)
+ {
+ const UInt64 rem = p->outSize - p->outProcessed;
+ if (size >= rem)
+ {
+ size = (SizeT)rem;
+ if (p->finishMode)
+ finishMode = LZMA_FINISH_END;
+ }
+ }
+
+ inProcessed = inLim - inPos;
+
+ res = Lzma2Dec_DecodeToDic(dec, dicPos + size, inData + inPos, &inProcessed, finishMode, &status);
+
+ inPos += inProcessed;
+ p->inProcessed += inProcessed;
+ outProcessed = dec->decoder.dicPos - dicPos;
+ p->outProcessed += outProcessed;
+
+ outFinished = (p->outSize_Defined && p->outSize <= p->outProcessed);
+
+ needStop = (res != SZ_OK
+ || (inProcessed == 0 && outProcessed == 0)
+ || status == LZMA_STATUS_FINISHED_WITH_MARK
+ || (!p->finishMode && outFinished));
+
+ if (needStop || outProcessed >= size)
+ {
+ SRes res2;
+ {
+ size_t writeSize = dec->decoder.dicPos - wrPos;
+ size_t written = ISeqOutStream_Write(p->outStream, dec->decoder.dic + wrPos, writeSize);
+ res2 = (written == writeSize) ? SZ_OK : SZ_ERROR_WRITE;
+ }
+
+ if (dec->decoder.dicPos == dec->decoder.dicBufSize)
+ dec->decoder.dicPos = 0;
+ wrPos = dec->decoder.dicPos;
+
+ RINOK(res2);
+
+ if (needStop)
+ {
+ if (res != SZ_OK)
+ return res;
+
+ if (status == LZMA_STATUS_FINISHED_WITH_MARK)
+ {
+ if (p->finishMode)
+ {
+ if (p->outSize_Defined && p->outSize != p->outProcessed)
+ return SZ_ERROR_DATA;
+ }
+ return SZ_OK;
+ }
+
+ if (!p->finishMode && outFinished)
+ return SZ_OK;
+
+ if (status == LZMA_STATUS_NEEDS_MORE_INPUT)
+ return SZ_ERROR_INPUT_EOF;
+
+ return SZ_ERROR_DATA;
+ }
+ }
+
+ if (p->progress)
+ {
+ UInt64 inDelta = p->inProcessed - inPrev;
+ UInt64 outDelta = p->outProcessed - outPrev;
+ if (inDelta >= (1 << 22) || outDelta >= (1 << 22))
+ {
+ RINOK(ICompressProgress_Progress(p->progress, p->inProcessed, p->outProcessed));
+ inPrev = p->inProcessed;
+ outPrev = p->outProcessed;
+ }
+ }
+ }
+}
+
+
+
+SRes Lzma2DecMt_Decode(CLzma2DecMtHandle pp,
+ Byte prop,
+ const CLzma2DecMtProps *props,
+ ISeqOutStream *outStream, const UInt64 *outDataSize, int finishMode,
+ // Byte *outBuf, size_t *outBufSize,
+ ISeqInStream *inStream,
+ // const Byte *inData, size_t inDataSize,
+ UInt64 *inProcessed,
+ // UInt64 *outProcessed,
+ int *isMT,
+ ICompressProgress *progress)
+{
+ CLzma2DecMt *p = (CLzma2DecMt *)pp;
+ #ifndef _7ZIP_ST
+ BoolInt tMode;
+ #endif
+
+ *inProcessed = 0;
+
+ if (prop > 40)
+ return SZ_ERROR_UNSUPPORTED;
+
+ p->prop = prop;
+ p->props = *props;
+
+ p->inStream = inStream;
+ p->outStream = outStream;
+ p->progress = progress;
+
+ p->outSize = 0;
+ p->outSize_Defined = False;
+ if (outDataSize)
+ {
+ p->outSize_Defined = True;
+ p->outSize = *outDataSize;
+ }
+ p->finishMode = finishMode;
+
+ p->outProcessed = 0;
+ p->inProcessed = 0;
+
+ p->readWasFinished = False;
+
+ *isMT = False;
+
+
+ #ifndef _7ZIP_ST
+
+ tMode = False;
+
+ // p->mtc.parseRes = SZ_OK;
+
+ // p->mtc.numFilledThreads = 0;
+ // p->mtc.crossStart = 0;
+ // p->mtc.crossEnd = 0;
+ // p->mtc.allocError_for_Read_BlockIndex = 0;
+ // p->mtc.isAllocError = False;
+
+ if (p->props.numThreads > 1)
+ {
+ IMtDecCallback vt;
+
+ Lzma2DecMt_FreeSt(p);
+
+ p->outProcessed_Parse = 0;
+
+ if (!p->mtc_WasConstructed)
+ {
+ p->mtc_WasConstructed = True;
+ MtDec_Construct(&p->mtc);
+ }
+
+ p->mtc.progress = progress;
+ p->mtc.inStream = inStream;
+
+ // p->outBuf = NULL;
+ // p->outBufSize = 0;
+ /*
+ if (!outStream)
+ {
+ // p->outBuf = outBuf;
+ // p->outBufSize = *outBufSize;
+ // *outBufSize = 0;
+ return SZ_ERROR_PARAM;
+ }
+ */
+
+ // p->mtc.inBlockMax = p->props.inBlockMax;
+ p->mtc.alloc = &p->alignOffsetAlloc.vt;
+ // p->alignOffsetAlloc.baseAlloc;
+ // p->mtc.inData = inData;
+ // p->mtc.inDataSize = inDataSize;
+ p->mtc.mtCallback = &vt;
+ p->mtc.mtCallbackObject = p;
+
+ p->mtc.inBufSize = p->props.inBufSize_MT;
+
+ p->mtc.numThreadsMax = p->props.numThreads;
+
+ *isMT = True;
+
+ vt.Parse = Lzma2DecMt_MtCallback_Parse;
+ vt.PreCode = Lzma2DecMt_MtCallback_PreCode;
+ vt.Code = Lzma2DecMt_MtCallback_Code;
+ vt.Write = Lzma2DecMt_MtCallback_Write;
+
+ {
+ BoolInt needContinue = False;
+
+ SRes res = MtDec_Code(&p->mtc);
+
+ /*
+ if (!outStream)
+ *outBufSize = p->outBuf - outBuf;
+ */
+
+ *inProcessed = p->mtc.inProcessed;
+
+ needContinue = False;
+
+ if (res == SZ_OK)
+ {
+ if (p->mtc.mtProgress.res != SZ_OK)
+ res = p->mtc.mtProgress.res;
+ else
+ needContinue = p->mtc.needContinue;
+ }
+
+ if (!needContinue)
+ {
+ if (res == SZ_OK)
+ return p->mtc.readRes;
+ return res;
+ }
+
+ tMode = True;
+ p->readRes = p->mtc.readRes;
+ p->readWasFinished = p->mtc.readWasFinished;
+ p->inProcessed = p->mtc.inProcessed;
+
+ PRF_STR("----- decoding ST -----");
+ }
+ }
+
+ #endif
+
+
+ *isMT = False;
+
+ {
+ SRes res = Lzma2Dec_Decode_ST(p
+ #ifndef _7ZIP_ST
+ , tMode
+ #endif
+ );
+
+ *inProcessed = p->inProcessed;
+
+ // res = SZ_OK; // for test
+ if (res == SZ_OK && p->readRes != SZ_OK)
+ res = p->readRes;
+
+ /*
+ #ifndef _7ZIP_ST
+ if (res == SZ_OK && tMode && p->mtc.parseRes != SZ_OK)
+ res = p->mtc.parseRes;
+ #endif
+ */
+
+ return res;
+ }
+}
+
+
+/* ---------- Read from CLzma2DecMtHandle Interface ---------- */
+
+SRes Lzma2DecMt_Init(CLzma2DecMtHandle pp,
+ Byte prop,
+ const CLzma2DecMtProps *props,
+ const UInt64 *outDataSize, int finishMode,
+ ISeqInStream *inStream)
+{
+ CLzma2DecMt *p = (CLzma2DecMt *)pp;
+
+ if (prop > 40)
+ return SZ_ERROR_UNSUPPORTED;
+
+ p->prop = prop;
+ p->props = *props;
+
+ p->inStream = inStream;
+
+ p->outSize = 0;
+ p->outSize_Defined = False;
+ if (outDataSize)
+ {
+ p->outSize_Defined = True;
+ p->outSize = *outDataSize;
+ }
+ p->finishMode = finishMode;
+
+ p->outProcessed = 0;
+ p->inProcessed = 0;
+
+ p->inPos = 0;
+ p->inLim = 0;
+
+ return Lzma2Dec_Prepare_ST(p);
+}
+
+
+SRes Lzma2DecMt_Read(CLzma2DecMtHandle pp,
+ Byte *data, size_t *outSize,
+ UInt64 *inStreamProcessed)
+{
+ CLzma2DecMt *p = (CLzma2DecMt *)pp;
+ ELzmaFinishMode finishMode;
+ SRes readRes;
+ size_t size = *outSize;
+
+ *outSize = 0;
+ *inStreamProcessed = 0;
+
+ finishMode = LZMA_FINISH_ANY;
+ if (p->outSize_Defined)
+ {
+ const UInt64 rem = p->outSize - p->outProcessed;
+ if (size >= rem)
+ {
+ size = (size_t)rem;
+ if (p->finishMode)
+ finishMode = LZMA_FINISH_END;
+ }
+ }
+
+ readRes = SZ_OK;
+
+ for (;;)
+ {
+ SizeT inCur;
+ SizeT outCur;
+ ELzmaStatus status;
+ SRes res;
+
+ if (p->inPos == p->inLim && readRes == SZ_OK)
+ {
+ p->inPos = 0;
+ p->inLim = p->props.inBufSize_ST;
+ readRes = ISeqInStream_Read(p->inStream, p->inBuf, &p->inLim);
+ }
+
+ inCur = p->inLim - p->inPos;
+ outCur = size;
+
+ res = Lzma2Dec_DecodeToBuf(&p->dec, data, &outCur,
+ p->inBuf + p->inPos, &inCur, finishMode, &status);
+
+ p->inPos += inCur;
+ p->inProcessed += inCur;
+ *inStreamProcessed += inCur;
+ p->outProcessed += outCur;
+ *outSize += outCur;
+ size -= outCur;
+ data += outCur;
+
+ if (res != 0)
+ return res;
+
+ /*
+ if (status == LZMA_STATUS_FINISHED_WITH_MARK)
+ return readRes;
+
+ if (size == 0 && status != LZMA_STATUS_NEEDS_MORE_INPUT)
+ {
+ if (p->finishMode && p->outSize_Defined && p->outProcessed >= p->outSize)
+ return SZ_ERROR_DATA;
+ return readRes;
+ }
+ */
+
+ if (inCur == 0 && outCur == 0)
+ return readRes;
+ }
+}
diff --git a/code/nel/3rdparty/seven_zip/Lzma2DecMt.h b/code/nel/3rdparty/seven_zip/Lzma2DecMt.h
new file mode 100644
index 000000000..7791c310b
--- /dev/null
+++ b/code/nel/3rdparty/seven_zip/Lzma2DecMt.h
@@ -0,0 +1,79 @@
+/* Lzma2DecMt.h -- LZMA2 Decoder Multi-thread
+2018-02-17 : Igor Pavlov : Public domain */
+
+#ifndef __LZMA2_DEC_MT_H
+#define __LZMA2_DEC_MT_H
+
+#include "7zTypes.h"
+
+EXTERN_C_BEGIN
+
+typedef struct
+{
+ size_t inBufSize_ST;
+ size_t outStep_ST;
+
+ #ifndef _7ZIP_ST
+ unsigned numThreads;
+ size_t inBufSize_MT;
+ size_t outBlockMax;
+ size_t inBlockMax;
+ #endif
+} CLzma2DecMtProps;
+
+/* init to single-thread mode */
+void Lzma2DecMtProps_Init(CLzma2DecMtProps *p);
+
+
+/* ---------- CLzma2DecMtHandle Interface ---------- */
+
+/* Lzma2DecMt_ * functions can return the following exit codes:
+SRes:
+ SZ_OK - OK
+ SZ_ERROR_MEM - Memory allocation error
+ SZ_ERROR_PARAM - Incorrect paramater in props
+ SZ_ERROR_WRITE - ISeqOutStream write callback error
+ // SZ_ERROR_OUTPUT_EOF - output buffer overflow - version with (Byte *) output
+ SZ_ERROR_PROGRESS - some break from progress callback
+ SZ_ERROR_THREAD - error in multithreading functions (only for Mt version)
+*/
+
+typedef void * CLzma2DecMtHandle;
+
+CLzma2DecMtHandle Lzma2DecMt_Create(ISzAllocPtr alloc, ISzAllocPtr allocMid);
+void Lzma2DecMt_Destroy(CLzma2DecMtHandle p);
+
+SRes Lzma2DecMt_Decode(CLzma2DecMtHandle p,
+ Byte prop,
+ const CLzma2DecMtProps *props,
+ ISeqOutStream *outStream,
+ const UInt64 *outDataSize, // NULL means undefined
+ int finishMode, // 0 - partial unpacking is allowed, 1 - if lzma2 stream must be finished
+ // Byte *outBuf, size_t *outBufSize,
+ ISeqInStream *inStream,
+ // const Byte *inData, size_t inDataSize,
+
+ // out variables:
+ UInt64 *inProcessed,
+ int *isMT, /* out: (*isMT == 0), if single thread decoding was used */
+
+ // UInt64 *outProcessed,
+ ICompressProgress *progress);
+
+
+/* ---------- Read from CLzma2DecMtHandle Interface ---------- */
+
+SRes Lzma2DecMt_Init(CLzma2DecMtHandle pp,
+ Byte prop,
+ const CLzma2DecMtProps *props,
+ const UInt64 *outDataSize, int finishMode,
+ ISeqInStream *inStream);
+
+SRes Lzma2DecMt_Read(CLzma2DecMtHandle pp,
+ Byte *data, size_t *outSize,
+ UInt64 *inStreamProcessed);
+
+
+EXTERN_C_END
+
+#endif
diff --git a/code/ryzom/client/src/seven_zip/Lzma2Enc.cpp b/code/nel/3rdparty/seven_zip/Lzma2Enc.c
similarity index 99%
rename from code/ryzom/client/src/seven_zip/Lzma2Enc.cpp
rename to code/nel/3rdparty/seven_zip/Lzma2Enc.c
index 9af0622b0..5c1ad4931 100644
--- a/code/ryzom/client/src/seven_zip/Lzma2Enc.cpp
+++ b/code/nel/3rdparty/seven_zip/Lzma2Enc.c
@@ -5,7 +5,7 @@
#include
-#define _7ZIP_ST
+/* #define _7ZIP_ST */
#include "Lzma2Enc.h"
diff --git a/code/ryzom/client/src/seven_zip/Lzma2Enc.h b/code/nel/3rdparty/seven_zip/Lzma2Enc.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Lzma2Enc.h
rename to code/nel/3rdparty/seven_zip/Lzma2Enc.h
diff --git a/code/ryzom/client/src/seven_zip/Lzma86.h b/code/nel/3rdparty/seven_zip/Lzma86.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Lzma86.h
rename to code/nel/3rdparty/seven_zip/Lzma86.h
diff --git a/code/ryzom/client/src/seven_zip/Lzma86Dec.cpp b/code/nel/3rdparty/seven_zip/Lzma86Dec.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Lzma86Dec.cpp
rename to code/nel/3rdparty/seven_zip/Lzma86Dec.c
diff --git a/code/ryzom/client/src/seven_zip/Lzma86Enc.cpp b/code/nel/3rdparty/seven_zip/Lzma86Enc.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Lzma86Enc.cpp
rename to code/nel/3rdparty/seven_zip/Lzma86Enc.c
diff --git a/code/ryzom/client/src/seven_zip/LzmaDec.cpp b/code/nel/3rdparty/seven_zip/LzmaDec.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/LzmaDec.cpp
rename to code/nel/3rdparty/seven_zip/LzmaDec.c
diff --git a/code/ryzom/client/src/seven_zip/LzmaDec.h b/code/nel/3rdparty/seven_zip/LzmaDec.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/LzmaDec.h
rename to code/nel/3rdparty/seven_zip/LzmaDec.h
diff --git a/code/ryzom/client/src/seven_zip/LzmaEnc.cpp b/code/nel/3rdparty/seven_zip/LzmaEnc.c
similarity index 99%
rename from code/ryzom/client/src/seven_zip/LzmaEnc.cpp
rename to code/nel/3rdparty/seven_zip/LzmaEnc.c
index 54d0d0507..46a0db000 100644
--- a/code/ryzom/client/src/seven_zip/LzmaEnc.cpp
+++ b/code/nel/3rdparty/seven_zip/LzmaEnc.c
@@ -5,8 +5,6 @@
#include
-#define _7ZIP_ST
-
/* #define SHOW_STAT */
/* #define SHOW_STAT2 */
diff --git a/code/ryzom/client/src/seven_zip/LzmaEnc.h b/code/nel/3rdparty/seven_zip/LzmaEnc.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/LzmaEnc.h
rename to code/nel/3rdparty/seven_zip/LzmaEnc.h
diff --git a/code/ryzom/client/src/seven_zip/LzmaLib.cpp b/code/nel/3rdparty/seven_zip/LzmaLib.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/LzmaLib.cpp
rename to code/nel/3rdparty/seven_zip/LzmaLib.c
diff --git a/code/ryzom/client/src/seven_zip/LzmaLib.h b/code/nel/3rdparty/seven_zip/LzmaLib.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/LzmaLib.h
rename to code/nel/3rdparty/seven_zip/LzmaLib.h
diff --git a/code/nel/3rdparty/seven_zip/LzmaUtil.c b/code/nel/3rdparty/seven_zip/LzmaUtil.c
new file mode 100644
index 000000000..6bdb2ad6c
--- /dev/null
+++ b/code/nel/3rdparty/seven_zip/LzmaUtil.c
@@ -0,0 +1,258 @@
+/* LzmaUtil.c -- Test application for LZMA compression
+2018-07-04 : Igor Pavlov : Public domain */
+
+#include "Precomp.h"
+
+#include
+#include
+#include
+
+#include "CpuArch.h"
+
+#include "Alloc.h"
+#include "7zFile.h"
+#include "7zVersion.h"
+#include "LzmaDec.h"
+#include "LzmaEnc.h"
+
+static const char * const kCantReadMessage = "Can not read input file";
+static const char * const kCantWriteMessage = "Can not write output file";
+static const char * const kCantAllocateMessage = "Can not allocate memory";
+static const char * const kDataErrorMessage = "Data error";
+
+static void PrintHelp(char *buffer)
+{
+ strcat(buffer,
+ "\nLZMA-C " MY_VERSION_CPU " : " MY_COPYRIGHT_DATE "\n\n"
+ "Usage: lzma inputFile outputFile\n"
+ " e: encode file\n"
+ " d: decode file\n");
+}
+
+static int PrintError(char *buffer, const char *message)
+{
+ strcat(buffer, "\nError: ");
+ strcat(buffer, message);
+ strcat(buffer, "\n");
+ return 1;
+}
+
+static int PrintErrorNumber(char *buffer, SRes val)
+{
+ sprintf(buffer + strlen(buffer), "\nError code: %x\n", (unsigned)val);
+ return 1;
+}
+
+static int PrintUserError(char *buffer)
+{
+ return PrintError(buffer, "Incorrect command");
+}
+
+
+#define IN_BUF_SIZE (1 << 16)
+#define OUT_BUF_SIZE (1 << 16)
+
+
+static SRes Decode2(CLzmaDec *state, ISeqOutStream *outStream, ISeqInStream *inStream,
+ UInt64 unpackSize)
+{
+ int thereIsSize = (unpackSize != (UInt64)(Int64)-1);
+ Byte inBuf[IN_BUF_SIZE];
+ Byte outBuf[OUT_BUF_SIZE];
+ size_t inPos = 0, inSize = 0, outPos = 0;
+ LzmaDec_Init(state);
+ for (;;)
+ {
+ if (inPos == inSize)
+ {
+ inSize = IN_BUF_SIZE;
+ RINOK(inStream->Read(inStream, inBuf, &inSize));
+ inPos = 0;
+ }
+ {
+ SRes res;
+ SizeT inProcessed = inSize - inPos;
+ SizeT outProcessed = OUT_BUF_SIZE - outPos;
+ ELzmaFinishMode finishMode = LZMA_FINISH_ANY;
+ ELzmaStatus status;
+ if (thereIsSize && outProcessed > unpackSize)
+ {
+ outProcessed = (SizeT)unpackSize;
+ finishMode = LZMA_FINISH_END;
+ }
+
+ res = LzmaDec_DecodeToBuf(state, outBuf + outPos, &outProcessed,
+ inBuf + inPos, &inProcessed, finishMode, &status);
+ inPos += inProcessed;
+ outPos += outProcessed;
+ unpackSize -= outProcessed;
+
+ if (outStream)
+ if (outStream->Write(outStream, outBuf, outPos) != outPos)
+ return SZ_ERROR_WRITE;
+
+ outPos = 0;
+
+ if (res != SZ_OK || (thereIsSize && unpackSize == 0))
+ return res;
+
+ if (inProcessed == 0 && outProcessed == 0)
+ {
+ if (thereIsSize || status != LZMA_STATUS_FINISHED_WITH_MARK)
+ return SZ_ERROR_DATA;
+ return res;
+ }
+ }
+ }
+}
+
+
+static SRes Decode(ISeqOutStream *outStream, ISeqInStream *inStream)
+{
+ UInt64 unpackSize;
+ int i;
+ SRes res = 0;
+
+ CLzmaDec state;
+
+ /* header: 5 bytes of LZMA properties and 8 bytes of uncompressed size */
+ unsigned char header[LZMA_PROPS_SIZE + 8];
+
+ /* Read and parse header */
+
+ RINOK(SeqInStream_Read(inStream, header, sizeof(header)));
+
+ unpackSize = 0;
+ for (i = 0; i < 8; i++)
+ unpackSize += (UInt64)header[LZMA_PROPS_SIZE + i] << (i * 8);
+
+ LzmaDec_Construct(&state);
+ RINOK(LzmaDec_Allocate(&state, header, LZMA_PROPS_SIZE, &g_Alloc));
+ res = Decode2(&state, outStream, inStream, unpackSize);
+ LzmaDec_Free(&state, &g_Alloc);
+ return res;
+}
+
+static SRes Encode(ISeqOutStream *outStream, ISeqInStream *inStream, UInt64 fileSize, char *rs)
+{
+ CLzmaEncHandle enc;
+ SRes res;
+ CLzmaEncProps props;
+
+ UNUSED_VAR(rs);
+
+ enc = LzmaEnc_Create(&g_Alloc);
+ if (enc == 0)
+ return SZ_ERROR_MEM;
+
+ LzmaEncProps_Init(&props);
+ res = LzmaEnc_SetProps(enc, &props);
+
+ if (res == SZ_OK)
+ {
+ Byte header[LZMA_PROPS_SIZE + 8];
+ size_t headerSize = LZMA_PROPS_SIZE;
+ int i;
+
+ res = LzmaEnc_WriteProperties(enc, header, &headerSize);
+ for (i = 0; i < 8; i++)
+ header[headerSize++] = (Byte)(fileSize >> (8 * i));
+ if (outStream->Write(outStream, header, headerSize) != headerSize)
+ res = SZ_ERROR_WRITE;
+ else
+ {
+ if (res == SZ_OK)
+ res = LzmaEnc_Encode(enc, outStream, inStream, NULL, &g_Alloc, &g_Alloc);
+ }
+ }
+ LzmaEnc_Destroy(enc, &g_Alloc, &g_Alloc);
+ return res;
+}
+
+
+static int main2(int numArgs, const char *args[], char *rs)
+{
+ CFileSeqInStream inStream;
+ CFileOutStream outStream;
+ char c;
+ int res;
+ int encodeMode;
+ BoolInt useOutFile = False;
+
+ FileSeqInStream_CreateVTable(&inStream);
+ File_Construct(&inStream.file);
+
+ FileOutStream_CreateVTable(&outStream);
+ File_Construct(&outStream.file);
+
+ if (numArgs == 1)
+ {
+ PrintHelp(rs);
+ return 0;
+ }
+
+ if (numArgs < 3 || numArgs > 4 || strlen(args[1]) != 1)
+ return PrintUserError(rs);
+
+ c = args[1][0];
+ encodeMode = (c == 'e' || c == 'E');
+ if (!encodeMode && c != 'd' && c != 'D')
+ return PrintUserError(rs);
+
+ {
+ size_t t4 = sizeof(UInt32);
+ size_t t8 = sizeof(UInt64);
+ if (t4 != 4 || t8 != 8)
+ return PrintError(rs, "Incorrect UInt32 or UInt64");
+ }
+
+ if (InFile_Open(&inStream.file, args[2]) != 0)
+ return PrintError(rs, "Can not open input file");
+
+ if (numArgs > 3)
+ {
+ useOutFile = True;
+ if (OutFile_Open(&outStream.file, args[3]) != 0)
+ return PrintError(rs, "Can not open output file");
+ }
+ else if (encodeMode)
+ PrintUserError(rs);
+
+ if (encodeMode)
+ {
+ UInt64 fileSize;
+ File_GetLength(&inStream.file, &fileSize);
+ res = Encode(&outStream.vt, &inStream.vt, fileSize, rs);
+ }
+ else
+ {
+ res = Decode(&outStream.vt, useOutFile ? &inStream.vt : NULL);
+ }
+
+ if (useOutFile)
+ File_Close(&outStream.file);
+ File_Close(&inStream.file);
+
+ if (res != SZ_OK)
+ {
+ if (res == SZ_ERROR_MEM)
+ return PrintError(rs, kCantAllocateMessage);
+ else if (res == SZ_ERROR_DATA)
+ return PrintError(rs, kDataErrorMessage);
+ else if (res == SZ_ERROR_WRITE)
+ return PrintError(rs, kCantWriteMessage);
+ else if (res == SZ_ERROR_READ)
+ return PrintError(rs, kCantReadMessage);
+ return PrintErrorNumber(rs, res);
+ }
+ return 0;
+}
+
+
+int MY_CDECL main(int numArgs, const char *args[])
+{
+ char rs[800] = { 0 };
+ int res = main2(numArgs, args, rs);
+ fputs(rs, stdout);
+ return res;
+}
diff --git a/code/ryzom/client/src/seven_zip/Ppmd.h b/code/nel/3rdparty/seven_zip/Ppmd.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Ppmd.h
rename to code/nel/3rdparty/seven_zip/Ppmd.h
diff --git a/code/ryzom/client/src/seven_zip/Ppmd7.cpp b/code/nel/3rdparty/seven_zip/Ppmd7.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Ppmd7.cpp
rename to code/nel/3rdparty/seven_zip/Ppmd7.c
diff --git a/code/ryzom/client/src/seven_zip/Ppmd7.h b/code/nel/3rdparty/seven_zip/Ppmd7.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Ppmd7.h
rename to code/nel/3rdparty/seven_zip/Ppmd7.h
diff --git a/code/ryzom/client/src/seven_zip/Ppmd7Dec.cpp b/code/nel/3rdparty/seven_zip/Ppmd7Dec.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Ppmd7Dec.cpp
rename to code/nel/3rdparty/seven_zip/Ppmd7Dec.c
diff --git a/code/ryzom/client/src/seven_zip/Ppmd7Enc.cpp b/code/nel/3rdparty/seven_zip/Ppmd7Enc.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Ppmd7Enc.cpp
rename to code/nel/3rdparty/seven_zip/Ppmd7Enc.c
diff --git a/code/nel/3rdparty/seven_zip/Precomp.h b/code/nel/3rdparty/seven_zip/Precomp.h
new file mode 100644
index 000000000..e8ff8b40e
--- /dev/null
+++ b/code/nel/3rdparty/seven_zip/Precomp.h
@@ -0,0 +1,10 @@
+/* Precomp.h -- StdAfx
+2013-11-12 : Igor Pavlov : Public domain */
+
+#ifndef __7Z_PRECOMP_H
+#define __7Z_PRECOMP_H
+
+#include "Compiler.h"
+/* #include "7zTypes.h" */
+
+#endif
diff --git a/code/ryzom/client/src/seven_zip/RotateDefs.h b/code/nel/3rdparty/seven_zip/RotateDefs.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/RotateDefs.h
rename to code/nel/3rdparty/seven_zip/RotateDefs.h
diff --git a/code/ryzom/client/src/seven_zip/Sha256.cpp b/code/nel/3rdparty/seven_zip/Sha256.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Sha256.cpp
rename to code/nel/3rdparty/seven_zip/Sha256.c
diff --git a/code/ryzom/client/src/seven_zip/Sha256.h b/code/nel/3rdparty/seven_zip/Sha256.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Sha256.h
rename to code/nel/3rdparty/seven_zip/Sha256.h
diff --git a/code/ryzom/client/src/seven_zip/Sort.cpp b/code/nel/3rdparty/seven_zip/Sort.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Sort.cpp
rename to code/nel/3rdparty/seven_zip/Sort.c
diff --git a/code/ryzom/client/src/seven_zip/Sort.h b/code/nel/3rdparty/seven_zip/Sort.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Sort.h
rename to code/nel/3rdparty/seven_zip/Sort.h
diff --git a/code/ryzom/client/src/seven_zip/Xz.cpp b/code/nel/3rdparty/seven_zip/Xz.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Xz.cpp
rename to code/nel/3rdparty/seven_zip/Xz.c
diff --git a/code/ryzom/client/src/seven_zip/Xz.h b/code/nel/3rdparty/seven_zip/Xz.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/Xz.h
rename to code/nel/3rdparty/seven_zip/Xz.h
diff --git a/code/ryzom/client/src/seven_zip/XzCrc64.cpp b/code/nel/3rdparty/seven_zip/XzCrc64.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/XzCrc64.cpp
rename to code/nel/3rdparty/seven_zip/XzCrc64.c
diff --git a/code/ryzom/client/src/seven_zip/XzCrc64.h b/code/nel/3rdparty/seven_zip/XzCrc64.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/XzCrc64.h
rename to code/nel/3rdparty/seven_zip/XzCrc64.h
diff --git a/code/ryzom/client/src/seven_zip/XzCrc64Opt.cpp b/code/nel/3rdparty/seven_zip/XzCrc64Opt.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/XzCrc64Opt.cpp
rename to code/nel/3rdparty/seven_zip/XzCrc64Opt.c
diff --git a/code/ryzom/client/src/seven_zip/XzDec.cpp b/code/nel/3rdparty/seven_zip/XzDec.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/XzDec.cpp
rename to code/nel/3rdparty/seven_zip/XzDec.c
diff --git a/code/ryzom/client/src/seven_zip/XzEnc.cpp b/code/nel/3rdparty/seven_zip/XzEnc.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/XzEnc.cpp
rename to code/nel/3rdparty/seven_zip/XzEnc.c
diff --git a/code/ryzom/client/src/seven_zip/XzEnc.h b/code/nel/3rdparty/seven_zip/XzEnc.h
similarity index 100%
rename from code/ryzom/client/src/seven_zip/XzEnc.h
rename to code/nel/3rdparty/seven_zip/XzEnc.h
diff --git a/code/ryzom/client/src/seven_zip/XzIn.cpp b/code/nel/3rdparty/seven_zip/XzIn.c
similarity index 100%
rename from code/ryzom/client/src/seven_zip/XzIn.cpp
rename to code/nel/3rdparty/seven_zip/XzIn.c
diff --git a/code/nel/CMakeLists.txt b/code/nel/CMakeLists.txt
index 3470fcebb..1530e75e3 100644
--- a/code/nel/CMakeLists.txt
+++ b/code/nel/CMakeLists.txt
@@ -56,6 +56,7 @@ IF(WITH_INSTALL_LIBRARIES)
ADD_SUBDIRECTORY(include)
ENDIF()
+ADD_SUBDIRECTORY(3rdparty)
ADD_SUBDIRECTORY(src)
IF(WITH_NEL_SAMPLES)
diff --git a/code/nel/include/nel/3d/bloom_effect.h b/code/nel/include/nel/3d/bloom_effect.h
index 49c959e23..1f49645a4 100644
--- a/code/nel/include/nel/3d/bloom_effect.h
+++ b/code/nel/include/nel/3d/bloom_effect.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2013-2014 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/computed_string.h b/code/nel/include/nel/3d/computed_string.h
index 25d12a3ac..3f27a2879 100644
--- a/code/nel/include/nel/3d/computed_string.h
+++ b/code/nel/include/nel/3d/computed_string.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2014 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/driver.h b/code/nel/include/nel/3d/driver.h
index 85140b3da..75472df37 100644
--- a/code/nel/include/nel/3d/driver.h
+++ b/code/nel/include/nel/3d/driver.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2013-2014 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/driver_user.h b/code/nel/include/nel/3d/driver_user.h
index 62c6fd6db..c3564975f 100644
--- a/code/nel/include/nel/3d/driver_user.h
+++ b/code/nel/include/nel/3d/driver_user.h
@@ -1,6 +1,11 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2010 Matt RAYKOWSKI (sfb)
+// Copyright (C) 2010 Robert TIMM (rti)
+// Copyright (C) 2013-2014 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/dru.h b/code/nel/include/nel/3d/dru.h
index c23d41382..49386487b 100644
--- a/code/nel/include/nel/3d/dru.h
+++ b/code/nel/include/nel/3d/dru.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2014 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/fxaa.h b/code/nel/include/nel/3d/fxaa.h
index f7ccf4866..9f97b81ad 100644
--- a/code/nel/include/nel/3d/fxaa.h
+++ b/code/nel/include/nel/3d/fxaa.h
@@ -6,24 +6,21 @@
* CFXAA
*/
-/*
- * Copyright (C) 2014 by authors
- *
- * This file is part of NL3D.
- * NL3D is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * NL3D 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 Affero General
- * Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with NL3D. If not, see
- * .
- */
+// NeL - MMORPG Framework
+// Copyright (C) 2014 Jan BOON (Kaetemi)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
#ifndef NL3D_FXAA_H
#define NL3D_FXAA_H
diff --git a/code/nel/include/nel/3d/geometry_program.h b/code/nel/include/nel/3d/geometry_program.h
index 48e48e260..f8de082d6 100644
--- a/code/nel/include/nel/3d/geometry_program.h
+++ b/code/nel/include/nel/3d/geometry_program.h
@@ -2,24 +2,24 @@
* Geometry program definition
*/
-/* Copyright, 2000, 2001 Nevrax Ltd.
- *
- * This file is part of NEVRAX NEL.
- * NEVRAX NEL is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
-
- * NEVRAX NEL is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with NEVRAX NEL; see the file COPYING. If not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA 02111-1307, USA.
- */
+// NeL - MMORPG Framework
+// Copyright (C) 2000-2001 Nevrax Ltd.
+//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2013 Jan BOON (Kaetemi)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
#ifndef NL_GEOMETRY_PROGRAM_H
#define NL_GEOMETRY_PROGRAM_H
diff --git a/code/nel/include/nel/3d/gpu_program_params.h b/code/nel/include/nel/3d/gpu_program_params.h
index 4615c58d9..337e611ea 100644
--- a/code/nel/include/nel/3d/gpu_program_params.h
+++ b/code/nel/include/nel/3d/gpu_program_params.h
@@ -6,24 +6,21 @@
* CGPUProgramParams
*/
-/*
- * Copyright (C) 2013 by authors
- *
- * This file is part of NL3D.
- * NL3D is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * NL3D 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 Affero General
- * Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with NL3D. If not, see
- * .
- */
+// NeL - MMORPG Framework
+// Copyright (C) 2013 Jan BOON (Kaetemi)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
#ifndef NL3D_GPU_PROGRAM_PARAMS_H
#define NL3D_GPU_PROGRAM_PARAMS_H
diff --git a/code/nel/include/nel/3d/landscape.h b/code/nel/include/nel/3d/landscape.h
index a7383963d..f6e1a5861 100644
--- a/code/nel/include/nel/3d/landscape.h
+++ b/code/nel/include/nel/3d/landscape.h
@@ -100,8 +100,8 @@ public:
public:
EBadBind() {}
- ~EBadBind() throw () {}
- virtual const char *what() const throw();
+ virtual ~EBadBind() NL_OVERRIDE {}
+ virtual const char *what() const throw() NL_OVERRIDE;
};
diff --git a/code/nel/include/nel/3d/landscapevb_allocator.h b/code/nel/include/nel/3d/landscapevb_allocator.h
index 0e485e990..fbf6f1eb4 100644
--- a/code/nel/include/nel/3d/landscapevb_allocator.h
+++ b/code/nel/include/nel/3d/landscapevb_allocator.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2013 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/material.h b/code/nel/include/nel/3d/material.h
index 7a300da45..9c8865124 100644
--- a/code/nel/include/nel/3d/material.h
+++ b/code/nel/include/nel/3d/material.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2013 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/meshvp_per_pixel_light.h b/code/nel/include/nel/3d/meshvp_per_pixel_light.h
index 4533464a9..9aef9fb0a 100644
--- a/code/nel/include/nel/3d/meshvp_per_pixel_light.h
+++ b/code/nel/include/nel/3d/meshvp_per_pixel_light.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2013 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/meshvp_wind_tree.h b/code/nel/include/nel/3d/meshvp_wind_tree.h
index 790a2f774..e3e8e8bc2 100644
--- a/code/nel/include/nel/3d/meshvp_wind_tree.h
+++ b/code/nel/include/nel/3d/meshvp_wind_tree.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2013 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/pixel_program.h b/code/nel/include/nel/3d/pixel_program.h
index 0787ae9fb..31818f1cd 100644
--- a/code/nel/include/nel/3d/pixel_program.h
+++ b/code/nel/include/nel/3d/pixel_program.h
@@ -2,24 +2,24 @@
* Pixel program definition
*/
-/* Copyright, 2000, 2001 Nevrax Ltd.
- *
- * This file is part of NEVRAX NEL.
- * NEVRAX NEL is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
-
- * NEVRAX NEL is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with NEVRAX NEL; see the file COPYING. If not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA 02111-1307, USA.
- */
+// NeL - MMORPG Framework
+// Copyright (C) 2000-2001 Nevrax Ltd.
+//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2013 Jan BOON (Kaetemi)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
#ifndef NL_PIXEL_PROGRAM_H
#define NL_PIXEL_PROGRAM_H
diff --git a/code/nel/include/nel/3d/program.h b/code/nel/include/nel/3d/program.h
index 77e6baa62..c84a97058 100644
--- a/code/nel/include/nel/3d/program.h
+++ b/code/nel/include/nel/3d/program.h
@@ -6,24 +6,21 @@
* IProgram
*/
-/*
- * Copyright (C) 2013 by authors
- *
- * This file is part of NL3D.
- * NL3D is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * NL3D 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 Affero General
- * Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with NL3D. If not, see
- * .
- */
+// NeL - MMORPG Framework
+// Copyright (C) 2013 Jan BOON (Kaetemi)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
#ifndef NL3D_PROGRAM_H
#define NL3D_PROGRAM_H
diff --git a/code/nel/include/nel/3d/ps_sound.h b/code/nel/include/nel/3d/ps_sound.h
index d1c990770..c716dd2a3 100644
--- a/code/nel/include/nel/3d/ps_sound.h
+++ b/code/nel/include/nel/3d/ps_sound.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2019 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
@@ -21,7 +24,6 @@
#include "nel/misc/string_mapper.h"
#include "nel/3d/ps_located.h"
#include "nel/3d/ps_attrib.h"
-#include "nel/misc/sheet_id.h"
@@ -64,13 +66,13 @@ public:
virtual void step(TPSProcessPass pass);
/// set the name of the sound
- void setSoundName(const NLMISC::CSheetId &soundName)
+ void setSoundName(const NLMISC::TStringId &soundName)
{
_SoundName = soundName;
}
/// get the name of the sound
- const NLMISC::CSheetId &getSoundName(void) const
+ const NLMISC::TStringId &getSoundName(void) const
{
return _SoundName;
}
@@ -162,7 +164,7 @@ protected:
void removeAllSources();
CPSAttrib _Sounds;
- NLMISC::CSheetId _SoundName;
+ NLMISC::TStringId _SoundName;
float _Gain;
CPSAttribMaker * _GainScheme;
float _Pitch;
diff --git a/code/nel/include/nel/3d/render_target_manager.h b/code/nel/include/nel/3d/render_target_manager.h
index cae8e31b0..ac69b4228 100644
--- a/code/nel/include/nel/3d/render_target_manager.h
+++ b/code/nel/include/nel/3d/render_target_manager.h
@@ -6,24 +6,22 @@
* CRenderTargetManager
*/
-/*
- * Copyright (C) 2013 by authors
- *
- * This file is part of NL3D.
- * NL3D is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * NL3D 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 Affero General
- * Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with NL3D. If not, see
- * .
- */
+
+// NeL - MMORPG Framework
+// Copyright (C) 2014 Jan BOON (Kaetemi)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
#ifndef NL3D_RENDER_TARGET_MANAGER_H
#define NL3D_RENDER_TARGET_MANAGER_H
diff --git a/code/nel/include/nel/3d/render_trav.h b/code/nel/include/nel/3d/render_trav.h
index 41570c2ca..8ea14fabf 100644
--- a/code/nel/include/nel/3d/render_trav.h
+++ b/code/nel/include/nel/3d/render_trav.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2013-2014 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/scene.h b/code/nel/include/nel/3d/scene.h
index 12c18b484..39d9707b7 100644
--- a/code/nel/include/nel/3d/scene.h
+++ b/code/nel/include/nel/3d/scene.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2013-2014 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/scene_user.h b/code/nel/include/nel/3d/scene_user.h
index 639fa33d8..4abadb32e 100644
--- a/code/nel/include/nel/3d/scene_user.h
+++ b/code/nel/include/nel/3d/scene_user.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2014 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/skeleton_model.h b/code/nel/include/nel/3d/skeleton_model.h
index dccafd1f1..85644e646 100644
--- a/code/nel/include/nel/3d/skeleton_model.h
+++ b/code/nel/include/nel/3d/skeleton_model.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2014 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/stereo_debugger.h b/code/nel/include/nel/3d/stereo_debugger.h
index 6c974f93d..2ce751cb3 100644
--- a/code/nel/include/nel/3d/stereo_debugger.h
+++ b/code/nel/include/nel/3d/stereo_debugger.h
@@ -6,24 +6,22 @@
* CStereoDebugger
*/
-/*
- * Copyright (C) 2013 by authors
- *
- * This file is part of NL3D.
- * NL3D is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * NL3D 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 Affero General
- * Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with NL3D. If not, see
- * .
- */
+
+// NeL - MMORPG Framework
+// Copyright (C) 2013-2014 Jan BOON (Kaetemi)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
#if !FINAL_VERSION
#ifndef NL3D_STEREO_DEBUGGER_H
diff --git a/code/nel/include/nel/3d/stereo_display.h b/code/nel/include/nel/3d/stereo_display.h
index 3b6fdbb21..3ad941ee7 100644
--- a/code/nel/include/nel/3d/stereo_display.h
+++ b/code/nel/include/nel/3d/stereo_display.h
@@ -6,24 +6,21 @@
* IStereoDisplay
*/
-/*
- * Copyright (C) 2013 by authors
- *
- * This file is part of NL3D.
- * NL3D is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * NL3D 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 Affero General
- * Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with NL3D. If not, see
- * .
- */
+// NeL - MMORPG Framework
+// Copyright (C) 2013-2014 Jan BOON (Kaetemi)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
#ifndef NL3D_STEREO_DISPLAY_H
#define NL3D_STEREO_DISPLAY_H
diff --git a/code/nel/include/nel/3d/stereo_libvr.h b/code/nel/include/nel/3d/stereo_libvr.h
index 76d1966fe..60fce94d9 100644
--- a/code/nel/include/nel/3d/stereo_libvr.h
+++ b/code/nel/include/nel/3d/stereo_libvr.h
@@ -6,24 +6,21 @@
* CStereoLibVR
*/
-/*
- * Copyright (C) 2013 by authors
- *
- * This file is part of NL3D.
- * NL3D is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * NL3D 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 Affero General
- * Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with NL3D. If not, see
- * .
- */
+// NeL - MMORPG Framework
+// Copyright (C) 2013 Thibaut GIRKA (ThibG)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
#ifndef NL3D_STEREO_LIBVR_H
#define NL3D_STEREO_LIBVR_H
diff --git a/code/nel/include/nel/3d/stereo_ovr.h b/code/nel/include/nel/3d/stereo_ovr.h
index 750f32027..a9fc1a331 100644
--- a/code/nel/include/nel/3d/stereo_ovr.h
+++ b/code/nel/include/nel/3d/stereo_ovr.h
@@ -6,40 +6,37 @@
* CStereoOVR
*/
-/*
- * Copyright (C) 2013 by authors
- *
- * This file is part of NL3D.
- * NL3D is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * NL3D 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 Affero General
- * Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with NL3D. If not, see
- * .
- *
- * Linking this library statically or dynamically with other modules
- * is making a combined work based on this library. Thus, the terms
- * and conditions of the GNU General Public License cover the whole
- * combination.
- *
- * As a special exception, the copyright holders of this library give
- * you permission to link this library with the Oculus SDK to produce
- * an executable, regardless of the license terms of the Oculus SDK,
- * and distribute linked combinations including the two, provided that
- * you also meet the terms and conditions of the license of the Oculus
- * SDK. You must obey the GNU General Public License in all respects
- * for all of the code used other than the Oculus SDK. If you modify
- * this file, you may extend this exception to your version of the
- * file, but you are not obligated to do so. If you do not wish to do
- * so, delete this exception statement from your version.
- */
+// NeL - MMORPG Framework
+// Copyright (C) 2013-2014 Jan BOON (Kaetemi)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+//
+// Linking this library statically or dynamically with other modules
+// is making a combined work based on this library. Thus, the terms
+// and conditions of the GNU General Public License cover the whole
+// combination.
+//
+// As a special exception, the copyright holders of this library give
+// you permission to link this library with the Oculus SDK to produce
+// an executable, regardless of the license terms of the Oculus SDK,
+// and distribute linked combinations including the two, provided that
+// you also meet the terms and conditions of the license of the Oculus
+// SDK. You must obey the GNU General Public License in all respects
+// for all of the code used other than the Oculus SDK. If you modify
+// this file, you may extend this exception to your version of the
+// file, but you are not obligated to do so. If you do not wish to do
+// so, delete this exception statement from your version.
#ifndef NL3D_STEREO_OVR_H
#define NL3D_STEREO_OVR_H
diff --git a/code/nel/include/nel/3d/stereo_ovr_04.h b/code/nel/include/nel/3d/stereo_ovr_04.h
index 8bda88c88..1cf1b61c7 100644
--- a/code/nel/include/nel/3d/stereo_ovr_04.h
+++ b/code/nel/include/nel/3d/stereo_ovr_04.h
@@ -6,40 +6,37 @@
* CStereoOVR
*/
-/*
- * Copyright (C) 2014 by authors
- *
- * This file is part of NL3D.
- * NL3D is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * NL3D 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 Affero General
- * Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with NL3D. If not, see
- * .
- *
- * Linking this library statically or dynamically with other modules
- * is making a combined work based on this library. Thus, the terms
- * and conditions of the GNU General Public License cover the whole
- * combination.
- *
- * As a special exception, the copyright holders of this library give
- * you permission to link this library with the Oculus SDK to produce
- * an executable, regardless of the license terms of the Oculus SDK,
- * and distribute linked combinations including the two, provided that
- * you also meet the terms and conditions of the license of the Oculus
- * SDK. You must obey the GNU General Public License in all respects
- * for all of the code used other than the Oculus SDK. If you modify
- * this file, you may extend this exception to your version of the
- * file, but you are not obligated to do so. If you do not wish to do
- * so, delete this exception statement from your version.
- */
+// NeL - MMORPG Framework
+// Copyright (C) 2013-2014 Jan BOON (Kaetemi)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+//
+// Linking this library statically or dynamically with other modules
+// is making a combined work based on this library. Thus, the terms
+// and conditions of the GNU General Public License cover the whole
+// combination.
+//
+// As a special exception, the copyright holders of this library give
+// you permission to link this library with the Oculus SDK to produce
+// an executable, regardless of the license terms of the Oculus SDK,
+// and distribute linked combinations including the two, provided that
+// you also meet the terms and conditions of the license of the Oculus
+// SDK. You must obey the GNU General Public License in all respects
+// for all of the code used other than the Oculus SDK. If you modify
+// this file, you may extend this exception to your version of the
+// file, but you are not obligated to do so. If you do not wish to do
+// so, delete this exception statement from your version.
#ifndef NL3D_STEREO_OVR_04_H
#define NL3D_STEREO_OVR_04_H
diff --git a/code/nel/include/nel/3d/text_context.h b/code/nel/include/nel/3d/text_context.h
index 1f75e1184..1eb256855 100644
--- a/code/nel/include/nel/3d/text_context.h
+++ b/code/nel/include/nel/3d/text_context.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2014 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/text_context_user.h b/code/nel/include/nel/3d/text_context_user.h
index 15e93c3f2..2a167b2e9 100644
--- a/code/nel/include/nel/3d/text_context_user.h
+++ b/code/nel/include/nel/3d/text_context_user.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2014 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/texture.h b/code/nel/include/nel/3d/texture.h
index 5b8e7ef37..f74af29d9 100644
--- a/code/nel/include/nel/3d/texture.h
+++ b/code/nel/include/nel/3d/texture.h
@@ -106,7 +106,8 @@ public:
class ITexture : public CBitmap, public NLMISC::CRefCount, public NLMISC::IStreamable
{
public:
- NL_USES_DEFAULT_ARENA_OBJECT_ALLOCATOR // for fast alloc
+ // TODO: FIX: NL_USES_DEFAULT_ARENA_OBJECT_ALLOCATOR // for fast alloc
+
// Those enums MUST be the same than in UTexture!!
enum TWrapMode
{
diff --git a/code/nel/include/nel/3d/texture_bump.h b/code/nel/include/nel/3d/texture_bump.h
index 1fb6152de..1c1f2a245 100644
--- a/code/nel/include/nel/3d/texture_bump.h
+++ b/code/nel/include/nel/3d/texture_bump.h
@@ -84,14 +84,6 @@ protected:
float *_NormalizationFactor;
bool _DisableSharing;
bool _ForceNormalize;
- // Map that give the normalization factor for each map from its sharename. This avoid to generate several time the maps to get the normalization factor if a bumpmap is shared by severals CTextureBump instances;
- struct CNormalizationInfo
- {
- uint NumRefs;
- float NormalizationFactor;
- };
- typedef std::map TNameToNI; // sharename to the normalization factor
- static TNameToNI _NameToNF; // name to normalization factor
private:
/// we don't allow for mipmap for bump so we redefine this to prevent the user from doing this on the base class Itexture
virtual void setFilterMode(TMagFilter magf, TMinFilter minf);
diff --git a/code/nel/include/nel/3d/tile_bank.h b/code/nel/include/nel/3d/tile_bank.h
index 7d4eda3a7..c320b50c7 100644
--- a/code/nel/include/nel/3d/tile_bank.h
+++ b/code/nel/include/nel/3d/tile_bank.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2014 Laszlo KIS-ADAM (dfighter)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/u_driver.h b/code/nel/include/nel/3d/u_driver.h
index 0500192ad..f4f78e2cb 100644
--- a/code/nel/include/nel/3d/u_driver.h
+++ b/code/nel/include/nel/3d/u_driver.h
@@ -1,6 +1,11 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2010 Matt RAYKOWSKI (sfb)
+// Copyright (C) 2010 Robert TIMM (rti)
+// Copyright (C) 2013-2014 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/u_ps_sound_impl.h b/code/nel/include/nel/3d/u_ps_sound_impl.h
index bf45b6387..8a6869d0b 100644
--- a/code/nel/include/nel/3d/u_ps_sound_impl.h
+++ b/code/nel/include/nel/3d/u_ps_sound_impl.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2019 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
@@ -162,7 +165,7 @@ public:
/// inherited from IPSSoundServer
- UPSSoundInstance *createSound(const NLMISC::CSheetId &soundName, bool spawned = true)
+ UPSSoundInstance *createSound(const NLMISC::TStringId &soundName, bool spawned = true)
{
if (!_AudioMixer)
return NULL;
diff --git a/code/nel/include/nel/3d/u_ps_sound_interface.h b/code/nel/include/nel/3d/u_ps_sound_interface.h
index 82002470b..7faea5fc5 100644
--- a/code/nel/include/nel/3d/u_ps_sound_interface.h
+++ b/code/nel/include/nel/3d/u_ps_sound_interface.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2019 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
@@ -19,7 +22,6 @@
#include "nel/misc/types_nl.h"
#include "nel/misc/string_mapper.h"
-#include "nel/misc/sheet_id.h"
#include
namespace NLMISC
@@ -51,7 +53,7 @@ struct UPSSoundServer
* \param spawn true if the sound must be spawned e.g it continues after this interface is removed
* \param cb useful only for spawned sound, it tells when a spawned sound has been removed
*/
- virtual UPSSoundInstance *createSound(const NLMISC::CSheetId &soundName, bool spawn = false) = 0;
+ virtual UPSSoundInstance *createSound(const NLMISC::TStringId &soundName, bool spawn = false) = 0;
};
diff --git a/code/nel/include/nel/3d/u_scene.h b/code/nel/include/nel/3d/u_scene.h
index c0733c5d2..4bb831bb2 100644
--- a/code/nel/include/nel/3d/u_scene.h
+++ b/code/nel/include/nel/3d/u_scene.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2014 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/u_text_context.h b/code/nel/include/nel/3d/u_text_context.h
index 4c1dfea47..cdde02f82 100644
--- a/code/nel/include/nel/3d/u_text_context.h
+++ b/code/nel/include/nel/3d/u_text_context.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2014 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/vegetable_manager.h b/code/nel/include/nel/3d/vegetable_manager.h
index ee21af3f3..e1a2001a0 100644
--- a/code/nel/include/nel/3d/vegetable_manager.h
+++ b/code/nel/include/nel/3d/vegetable_manager.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2013 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/vertex_program.h b/code/nel/include/nel/3d/vertex_program.h
index 3d77c6104..f493ccb2b 100644
--- a/code/nel/include/nel/3d/vertex_program.h
+++ b/code/nel/include/nel/3d/vertex_program.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2013 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/vertex_program_parse.h b/code/nel/include/nel/3d/vertex_program_parse.h
index 88538da07..2ecb9f86b 100644
--- a/code/nel/include/nel/3d/vertex_program_parse.h
+++ b/code/nel/include/nel/3d/vertex_program_parse.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2013 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/water_env_map.h b/code/nel/include/nel/3d/water_env_map.h
index 2282610d7..0d02f98ca 100644
--- a/code/nel/include/nel/3d/water_env_map.h
+++ b/code/nel/include/nel/3d/water_env_map.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2013 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/water_shape.h b/code/nel/include/nel/3d/water_shape.h
index 633da8611..192423720 100644
--- a/code/nel/include/nel/3d/water_shape.h
+++ b/code/nel/include/nel/3d/water_shape.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2013 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/3d/zone_lighter.h b/code/nel/include/nel/3d/zone_lighter.h
index 4f2910c52..92708a38b 100644
--- a/code/nel/include/nel/3d/zone_lighter.h
+++ b/code/nel/include/nel/3d/zone_lighter.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2014 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/CMakeLists.txt b/code/nel/include/nel/CMakeLists.txt
index 4df9413b5..fda0ddbe9 100644
--- a/code/nel/include/nel/CMakeLists.txt
+++ b/code/nel/include/nel/CMakeLists.txt
@@ -4,6 +4,10 @@ IF(WITH_3D)
SUBDIRS(3d)
ENDIF()
+IF(WITH_WEB OR WITH_GUI)
+ ADD_SUBDIRECTORY(web)
+ENDIF()
+
IF(WITH_GUI)
ADD_SUBDIRECTORY(gui)
ENDIF()
diff --git a/code/nel/include/nel/georges/form.h b/code/nel/include/nel/georges/form.h
index da5c0ea88..9b21c4c49 100644
--- a/code/nel/include/nel/georges/form.h
+++ b/code/nel/include/nel/georges/form.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2014 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/georges/form_dfn.h b/code/nel/include/nel/georges/form_dfn.h
index 4e9870043..c6ab83a07 100644
--- a/code/nel/include/nel/georges/form_dfn.h
+++ b/code/nel/include/nel/georges/form_dfn.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2014 Laszlo KIS-ADAM (dfighter)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/georges/form_elm.h b/code/nel/include/nel/georges/form_elm.h
index 738e6a55a..bf9b3ef62 100644
--- a/code/nel/include/nel/georges/form_elm.h
+++ b/code/nel/include/nel/georges/form_elm.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2014 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/georges/form_loader.h b/code/nel/include/nel/georges/form_loader.h
index c46d79f22..2dc998b11 100644
--- a/code/nel/include/nel/georges/form_loader.h
+++ b/code/nel/include/nel/georges/form_loader.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2014 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/georges/header.h b/code/nel/include/nel/georges/header.h
index 82a094b3d..61351dfe9 100644
--- a/code/nel/include/nel/georges/header.h
+++ b/code/nel/include/nel/georges/header.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2014 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/georges/type.h b/code/nel/include/nel/georges/type.h
index e1bad7934..5d9c6706e 100644
--- a/code/nel/include/nel/georges/type.h
+++ b/code/nel/include/nel/georges/type.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2014 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/georges/u_form.h b/code/nel/include/nel/georges/u_form.h
index d53e415f7..4f77a8b80 100644
--- a/code/nel/include/nel/georges/u_form.h
+++ b/code/nel/include/nel/georges/u_form.h
@@ -1,6 +1,9 @@
// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2014 Jan BOON (Kaetemi)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/gui/action_handler.h b/code/nel/include/nel/gui/action_handler.h
index f0f4c46f8..7288c9529 100644
--- a/code/nel/include/nel/gui/action_handler.h
+++ b/code/nel/include/nel/gui/action_handler.h
@@ -1,6 +1,9 @@
// Ryzom - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
+// This source file has been modified by the following contributors:
+// Copyright (C) 2013-2014 Laszlo KIS-ADAM (dfighter)
+//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
diff --git a/code/nel/include/nel/gui/css_border_renderer.h b/code/nel/include/nel/gui/css_border_renderer.h
new file mode 100644
index 000000000..41ea3b7e6
--- /dev/null
+++ b/code/nel/include/nel/gui/css_border_renderer.h
@@ -0,0 +1,94 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+
+
+#ifndef NL_CSS_BORDER_RENDERER_H
+#define NL_CSS_BORDER_RENDERER_H
+
+#include "nel/misc/types_nl.h"
+#include "nel/misc/rgba.h"
+#include "nel/misc/geom_ext.h"
+#include "nel/gui/css_types.h"
+
+namespace NLGUI
+{
+ /**
+ * \brief Border renderer for GUI classes
+ * \date 2019-09-03 10:50 GMT
+ * \author Meelis Mägi (Nimetu)
+ */
+ class CSSBorderRenderer
+ {
+ private:
+ // parent element screen coordinates
+ sint32 _XReal, _YReal;
+ sint32 _WReal, _HReal;
+
+ NLMISC::CQuadUV _QuadT;
+ NLMISC::CQuadUV _QuadR;
+ NLMISC::CQuadUV _QuadB;
+ NLMISC::CQuadUV _QuadL;
+
+ uint8 _RenderLayer;
+ bool _ModulateGlobalColor;
+
+ // if true, then updateCoords() is called from draw()
+ bool _Dirty;
+ // if true, then at least one border is set
+ bool _Border;
+ bool _BorderTop, _BorderRight, _BorderBottom, _BorderLeft;
+
+ public:
+ uint32 TopWidth, RightWidth, BottomWidth, LeftWidth;
+ NLMISC::CRGBA TopColor, RightColor, BottomColor, LeftColor;
+ CSSLineStyle TopStyle, RightStyle, BottomStyle, LeftStyle;
+
+ // alpha value from parent
+ uint8 CurrentAlpha;
+
+ public:
+ CSSBorderRenderer();
+
+ void setRenderLayer(sint layer);
+ void setModulateGlobalColor(bool m);
+
+ void setRect(sint32 x, sint32 y, sint32 w, sint32 h);
+
+ void setWidth(uint32 top, uint32 right, uint32 bottom, uint32 left);
+ void setStyle(CSSLineStyle top, CSSLineStyle right, CSSLineStyle bottom, CSSLineStyle left);
+ void setColor(const NLMISC::CRGBA &top, const NLMISC::CRGBA &right, const NLMISC::CRGBA &bottom, const NLMISC::CRGBA &left);
+
+ void updateCoords();
+ void invalidateCoords() { _Dirty = _Border = true; }
+ void invalidateContent() { _Dirty = _Border = true; };
+
+ uint32 getTopWidth() const;
+ uint32 getRightWidth() const;
+ uint32 getBottomWidth() const;
+ uint32 getLeftWidth() const;
+
+ uint32 getLeftRightWidth() const;
+ uint32 getTopBottomWidth() const;
+
+ void draw();
+ }; // CSSBorderRenderer
+
+}//namespace
+
+#endif // NL_CSS_BORDER_RENDERER_H
+
+
diff --git a/code/nel/include/nel/gui/css_parser.h b/code/nel/include/nel/gui/css_parser.h
new file mode 100644
index 000000000..a6dc92022
--- /dev/null
+++ b/code/nel/include/nel/gui/css_parser.h
@@ -0,0 +1,150 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#ifndef CL_CSS_PARSER_H
+#define CL_CSS_PARSER_H
+
+#include "nel/misc/types_nl.h"
+#include "nel/gui/css_style.h"
+#include "nel/gui/css_selector.h"
+
+namespace NLGUI
+{
+ /**
+ * \brief CSS style parsing
+ * \date 2019-03-15 10:50 GMT
+ * \author Meelis Mägi (Nimetu)
+ */
+ class CCssParser {
+ public:
+ // parse style declaration, eg "color: red; font-size: 10px;"
+ static TStyleVec parseDecls(const std::string &styleString);
+
+ // parse css stylesheet
+ void parseStylesheet(const std::string &cssString, std::vector &rules);
+
+ private:
+ // stylesheet currently parsed
+ ucstring _Style;
+ // keep track of current position in _Style
+ size_t _Position;
+
+ std::vector _Rules;
+
+ private:
+ // @media ( .. ) { .. }
+ void readAtRule();
+
+ // a#id.class[attr=val] { .. }
+ void readRule();
+
+ // move past whitespace
+ void skipWhitespace();
+
+ // skip valid IDENT
+ bool skipIdentifier();
+
+ // skip over {}, (), or [] block
+ void skipBlock();
+
+ // skip over string quoted with ' or "
+ void skipString();
+
+ // backslash escape
+ void escape();
+
+ // normalize newline chars and remove comments
+ void preprocess();
+
+ // parse selectors + combinators
+ std::vector parse_selector(const ucstring &sel, std::string &pseudoElement) const;
+
+ // parse selector and style
+ void parseRule(const ucstring &selectorString, const ucstring &styleString);
+
+ inline bool is_eof() const
+ {
+ return _Position >= _Style.size();
+ }
+
+ inline bool is_whitespace(ucchar ch) const
+ {
+ return (ch == (ucchar)' ' || ch == (ucchar)'\t' || ch == (ucchar)'\n');
+ }
+
+ inline bool is_hex(ucchar ch) const
+ {
+ return ((ch >= (ucchar)'0' && ch <= (ucchar)'9') ||
+ (ch >= (ucchar)'a' && ch <= (ucchar)'f') ||
+ (ch >= (ucchar)'A' && ch <= (ucchar)'F'));
+ }
+
+ inline bool maybe_escape() const
+ {
+ // escaping newline (\n) only allowed inside strings
+ return (_Style.size() - _Position) >= 1 && _Style[_Position] == (ucchar)'\\' && _Style[_Position+1] != '\n';
+ }
+
+ inline bool is_quote(ucchar ch) const
+ {
+ return ch== (ucchar)'"' || ch == (ucchar)'\'';
+ }
+
+ inline bool is_block_open(ucchar ch) const
+ {
+ return ch == (ucchar)'{' || ch == (ucchar)'[' || ch == (ucchar)'(';
+ }
+
+ inline bool is_block_close(ucchar ch, ucchar open) const
+ {
+ return ((open == '{' && ch == (ucchar)'}') ||
+ (open == '[' && ch == (ucchar)']') ||
+ (open == '(' && ch == (ucchar)')'));
+ }
+
+ inline bool is_comment_open() const
+ {
+ if (_Position+1 > _Style.size())
+ return false;
+
+ return _Style[_Position] == (ucchar)'/' && _Style[_Position+1] == (ucchar)'*';
+ }
+
+ inline bool is_nonascii(ucchar ch) const
+ {
+ return ch >= 0x80 /*&& ch <= 255*/;
+ }
+
+ inline bool is_alpha(ucchar ch) const
+ {
+ return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
+ }
+
+ inline bool is_digit(ucchar ch) const
+ {
+ return ch >= '0' && ch <= '9';
+ }
+
+ inline bool is_nmchar(ucchar ch) const
+ {
+ // checking escape here does not check if next char is '\n' or not
+ return ch == '_' || ch == '-' || is_alpha(ch) || is_digit(ch) || is_nonascii(ch) || ch == '\\'/*is_escape(ch)*/;
+ }
+ };
+}//namespace
+
+#endif // CL_CSS_PARSER_H
+
diff --git a/code/nel/include/nel/gui/css_selector.h b/code/nel/include/nel/gui/css_selector.h
new file mode 100644
index 000000000..ed04ba86d
--- /dev/null
+++ b/code/nel/include/nel/gui/css_selector.h
@@ -0,0 +1,112 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#ifndef CL_CSS_SELECTOR_H
+#define CL_CSS_SELECTOR_H
+
+#include "nel/misc/types_nl.h"
+
+namespace NLGUI
+{
+ class CHtmlElement;
+
+ /**
+ * \brief CSS selector
+ * \date 2019-03-15 10:50 GMT
+ * \author Meelis Mägi (Nimetu)
+ */
+ class CCssSelector
+ {
+ public:
+ enum ECombinator {
+ NONE = 0,
+ GENERAL_CHILD,
+ ADJACENT_SIBLING,
+ GENERAL_SIBLING,
+ CHILD_OF
+ };
+
+ struct SAttribute {
+ std::string key;
+ std::string value;
+ char op; // =, ~, |, ^, $, *
+ bool caseSensitive;
+ SAttribute(const std::string &k, const std::string &v, char o, bool cs)
+ :key(k),value(v),op(o), caseSensitive(cs)
+ {}
+ };
+
+ std::string Element;
+ std::string Id;
+ std::vector Class;
+ std::vector Attr;
+ std::vector PseudoClass;
+
+ // css combinator or \0 missing (first element)
+ char Combinator;
+
+ public:
+ // TODO: rewrite for ECombinator enum
+ CCssSelector(std::string elm="", std::string id="", std::string cls="", char comb = '\0');
+
+ // helper for sorting
+ uint32 specificity() const;
+
+ // set classes used, eg 'class1 class2'
+ void setClass(const std::string &cls);
+
+ // add attribute to selector
+ // ' ' op means 'key exists, ignore value'
+ // cs case-sensitive true|false
+ void addAttribute(const std::string &key, const std::string &val = "", char op = ' ', bool cs = true);
+
+ // add pseudo class to selector, eg 'first-child'
+ void addPseudoClass(const std::string &key);
+
+ // true if no rules have been defined
+ bool empty() const
+ {
+ return Element.empty() && Id.empty() && Class.empty() && Attr.empty() && PseudoClass.empty();
+ }
+
+ // Test current selector to html DOM element
+ // NOTE: Does not check combinator
+ bool match(const CHtmlElement &elm) const;
+
+ // debug
+ std::string toString() const;
+
+ private:
+ bool matchClass(const CHtmlElement &elm) const;
+ bool matchAttributes(const CHtmlElement &elm) const;
+ bool matchPseudoClass(const CHtmlElement &elm) const;
+
+ // match An+B rule to child index (1 based)
+ bool matchNth(sint childNr, sint a, sint b) const;
+
+ // parse nth-child string to 'a' and 'b' components
+ // :nth-child(odd)
+ // :nth-child(even)
+ // :nth-child(An+B)
+ // :nth-child(-An+b)
+ void parseNth(const std::string &pseudo, sint &a, sint &b) const;
+
+ };
+
+}//namespace
+
+#endif // CL_CSS_SELECTOR_H
+
diff --git a/code/nel/include/nel/gui/css_style.h b/code/nel/include/nel/gui/css_style.h
new file mode 100644
index 000000000..5521818a4
--- /dev/null
+++ b/code/nel/include/nel/gui/css_style.h
@@ -0,0 +1,268 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#ifndef CL_CSS_STYLE_H
+#define CL_CSS_STYLE_H
+
+#include "nel/misc/types_nl.h"
+#include "nel/misc/rgba.h"
+#include "nel/gui/css_selector.h"
+#include "nel/gui/css_types.h"
+
+namespace NLGUI
+{
+ class CHtmlElement;
+
+ typedef std::map TStyle;
+ typedef std::pair TStylePair;
+ typedef std::vector TStyleVec;
+
+ /**
+ * \brief CSS style rules
+ * \date 2019-03-15 10:50 GMT
+ * \author Meelis Mägi (Nimetu)
+ */
+ class CStyleParams
+ {
+ public:
+ struct STextShadow
+ {
+ public:
+ STextShadow(bool enabled = false, bool outline = false, sint32 x=1, sint32 y=1, NLMISC::CRGBA color=NLMISC::CRGBA::Black)
+ : Enabled(enabled), Outline(outline), X(x), Y(y), Color(color)
+ { }
+
+ bool Enabled;
+ bool Outline;
+ sint32 X;
+ sint32 Y;
+ NLMISC::CRGBA Color;
+ };
+ public:
+ CStyleParams () : FontFamily(""), TextColor(255,255,255,255), TextShadow()
+ {
+ FontSize=10;
+ FontWeight=400;
+ FontOblique=false;
+ Underlined=false;
+ StrikeThrough=false;
+ GlobalColor=false;
+ DisplayBlock=false;
+ Width=-1;
+ Height=-1;
+ MaxWidth=-1;
+ MaxHeight=-1;
+ // border style
+ BorderTopWidth = BorderRightWidth = BorderBottomWidth = BorderLeftWidth = CSS_LINE_WIDTH_MEDIUM;
+ BorderTopStyle = BorderRightStyle = BorderBottomStyle = BorderLeftStyle = CSS_LINE_STYLE_NONE;
+ BorderTopColor = BorderRightColor = BorderBottomColor = BorderLeftColor = NLMISC::CRGBA::Transparent;
+ // background
+ BackgroundColor=NLMISC::CRGBA::Black;
+ BackgroundColorOver=NLMISC::CRGBA::Black;
+ PaddingTop = PaddingRight = PaddingBottom = PaddingLeft = 0;
+ }
+
+ bool hasStyle(const std::string &key) const
+ {
+ return StyleRules.find(key) != StyleRules.end();
+ }
+
+ std::string getStyle(const std::string &key) const
+ {
+ TStyle::const_iterator it = StyleRules.find(key);
+ return (it != StyleRules.end() ? it->second : "");
+ }
+
+ public:
+ uint FontSize;
+ uint FontWeight;
+ bool FontOblique;
+ std::string FontFamily;
+ NLMISC::CRGBA TextColor;
+ STextShadow TextShadow;
+ bool GlobalColor;
+ bool Underlined;
+ bool StrikeThrough;
+ bool DisplayBlock;
+ sint32 Width;
+ sint32 Height;
+ sint32 MaxWidth;
+ sint32 MaxHeight;
+ uint32 BorderTopWidth, BorderRightWidth, BorderBottomWidth, BorderLeftWidth;
+ CSSLineStyle BorderTopStyle, BorderRightStyle, BorderBottomStyle, BorderLeftStyle;
+ NLMISC::CRGBA BorderTopColor, BorderRightColor, BorderBottomColor, BorderLeftColor;
+ NLMISC::CRGBA BackgroundColor;
+ NLMISC::CRGBA BackgroundColorOver;
+ uint32 PaddingTop, PaddingRight, PaddingBottom, PaddingLeft;
+
+ std::string WhiteSpace;
+ std::string TextAlign;
+ std::string VerticalAlign;
+
+ TStyle StyleRules;
+ };
+
+ class CCssStyle {
+ public:
+
+ struct SStyleRule {
+ std::vector Selector;
+ TStyleVec Properties;
+
+ // pseudo element like ':before'
+ std::string PseudoElement;
+
+ // returns selector specificity
+ uint specificity() const;
+ };
+
+ // 'browser' style, overwriten with ''
+ CStyleParams Root;
+
+ // current element style
+ CStyleParams Current;
+
+ // known style rules sorted by specificity
+ std::vector _StyleRules;
+
+ private:
+ std::vector _StyleStack;
+
+ // test if str is one of "thin/medium/thick" and return its pixel value
+ bool scanCssLength(const std::string& str, uint32 &px) const;
+
+ // split css properties string, ie '1px solid rgb(100, 100, 100)' split by ' ' returns 3 parts.
+ void splitParams(const std::string &str, char sep, std::vector &result) const;
+
+ // read style attribute
+ void getStyleParams(const std::string &styleString, CStyleParams &style, const CStyleParams ¤t) const;
+ void getStyleParams(const TStyle &styleRules, CStyleParams &style, const CStyleParams ¤t) const;
+
+ // extract from styleRules into style.StyleRules (expand shorthand, normalize, calculate current font-size)
+ void normalize(const TStyle &styleRules, CStyleParams &style, const CStyleParams ¤t) const;
+
+ // apply style.StyleRyles
+ void apply(CStyleParams &style, const CStyleParams ¤t) const;
+
+ // merge src into dest by overwriting key in dest
+ void merge(TStyle &dst, const TStyleVec &src) const;
+
+ // match selector to dom path
+ bool match(const std::vector &selector, const CHtmlElement &elm) const;
+
+ // get shorthang 'top right bottom left' index values based size, ie 'padding' syntax
+ bool getShorthandIndices(const uint32 size, uint8 &t, uint8 &r, uint8 &b, uint8 &l) const;
+
+ // break 'border' into 'border-top-color', 'border-top-style', etc rules
+ bool tryBorderWidthShorthand(const std::string &prop, const std::string &value, TStyle &style) const;
+ bool tryBorderStyleShorthand(const std::string &prop, const std::string &value, TStyle &style) const;
+ bool tryBorderColorShorthand(const std::string &prop, const std::string &value, TStyle &style) const;
+ void expandBorderShorthand(const std::string &prop, const std::string &value, TStyle &style) const;
+
+ // parse 'background' into 'background-color', 'background-image', etc
+ void expandBackgroundShorthand(const std::string &value, TStyle &style) const;
+
+ // parse 'padding' into 'padding-top', 'padding-left', etc
+ void expandPaddingShorthand(const std::string &value, TStyle &style) const;
+
+ // expand shorthand rule, ie "border", into longhand names, ie "border-top-width"
+ // if shorthand is present in style, then its removed
+ void expandShorthand(const std::string &prop, const std::string &value, TStyle &style) const;
+
+ // parse string value into corresponding value
+ void applyBorderWidth(const std::string &value, uint32 *dest, const uint32 currentWidth, const uint32 fontSize) const;
+ void applyBorderColor(const std::string &value, NLMISC::CRGBA *dest, const NLMISC::CRGBA ¤tColor, const NLMISC::CRGBA &textColor) const;
+ void applyLineStyle(const std::string &value, CSSLineStyle *dest, const CSSLineStyle ¤tStyle) const;
+ void applyPaddingWidth(const std::string &value, uint32 *dest, const uint32 currentPadding, uint32 fontSize) const;
+
+ public:
+ void reset();
+
+ // parse tag or css file content
+ void parseStylesheet(const std::string &styleString);
+
+ // set element style from matching css rules
+ void getStyleFor(CHtmlElement &elm) const;
+
+ inline uint getFontSizeSmaller() const
+ {
+ if (Current.FontSize < 5)
+ return 3;
+ return Current.FontSize-2;
+ }
+
+ inline void pushStyle()
+ {
+ _StyleStack.push_back(Current);
+
+ Current.GlobalColor = false;
+ Current.DisplayBlock = false;
+ Current.Width=-1;
+ Current.Height=-1;
+ Current.MaxWidth=-1;
+ Current.MaxHeight=-1;
+
+ Current.BorderTopWidth = Current.BorderRightWidth = Current.BorderBottomWidth = Current.BorderLeftWidth = CSS_LINE_WIDTH_MEDIUM;
+ Current.BorderTopStyle = Current.BorderRightStyle = Current.BorderBottomStyle = Current.BorderLeftStyle = CSS_LINE_STYLE_NONE;
+ Current.BorderTopColor = Current.BorderRightColor = Current.BorderBottomColor = Current.BorderLeftColor = Current.TextColor;
+ Current.PaddingTop = Current.PaddingRight = Current.PaddingBottom = Current.PaddingLeft = 0;
+
+ Current.StyleRules.clear();
+ }
+
+ inline void popStyle()
+ {
+ if (_StyleStack.empty())
+ {
+ Current = Root;
+ }
+ else
+ {
+ Current = _StyleStack.back();
+ _StyleStack.pop_back();
+ }
+ }
+
+ // apply style to this.Root
+ void applyRootStyle(const std::string &styleString);
+ void applyRootStyle(const TStyle &styleRules);
+
+ // apply style to this.Current
+ void applyStyle(const std::string &styleString);
+ void applyStyle(const TStyle &styleRules);
+
+ void applyCssMinMax(sint32 &width, sint32 &height, sint32 minw=0, sint32 minh=0, sint32 maxw=0, sint32 maxh=0) const;
+
+ // check if current style property matches value
+ bool checkStyle(const std::string &key, const std::string &val) const
+ {
+ return Current.hasStyle(key) && Current.getStyle(key) == val;
+ }
+
+ bool hasStyle(const std::string &key) const
+ {
+ return Current.hasStyle(key);
+ }
+
+ std::string getStyle(const std::string &key) const
+ {
+ return Current.getStyle(key);
+ }
+ };
+}//namespace
+
+#endif // CL_CSS_STYLE_H
+
diff --git a/code/ryzom/server/src/input_output_service/news_manager.h b/code/nel/include/nel/gui/css_types.h
similarity index 56%
rename from code/ryzom/server/src/input_output_service/news_manager.h
rename to code/nel/include/nel/gui/css_types.h
index dee34e5be..9dd41de36 100644
--- a/code/ryzom/server/src/input_output_service/news_manager.h
+++ b/code/nel/include/nel/gui/css_types.h
@@ -14,47 +14,36 @@
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
+#ifndef CL_CSS_TYPES_H
+#define CL_CSS_TYPES_H
-
-#ifndef NEWS_MANAGER_H
-#define NEWS_MANAGER_H
-
-
-// misc
#include "nel/misc/types_nl.h"
-#include "nel/misc/bit_mem_stream.h"
-
-// game share
-#include "game_share/ryzom_entity_id.h"
-//#include "game_share/chat_static_database.h"
-//#include "game_share/chat_dynamic_database.h"
-#include "game_share/news_types.h"
-
-// std
-#include