Modify assimp's cmake to exclude the build of all the importers
by default; the user has then to manually select the ones needed
by setting the relative option.
From the explanation as written in the CMakeLists itself:
---
This option allows to select whether to build all the importers and then
manually select which ones not to build (old behaviour), or if to
exclude all importers from build and manually select the ones to actually
build.
By default, exclude all importers and manually select which ones to use.
To have all importers excluded, simply do not set this option in the parent
CmakeLists. Then, set the option for the importer(s) needed in the parent
CMakeLists, e.g.:
OPTION(ASSIMP_BUILD_OBJ_IMPORTER "" TRUE)
To have assimp build all the importers, set the option to true, then manually
exclude which importers you don't need, e.g.:
OPTION(ASSIMP_BUILD_OBJ_IMPORTER "" FALSE)
NOTE: In order to use this method of exclusion, the tools build must be disabled;
their code references certain importers/exporters which would be excluded.
If you need the tools, either manually add the importers/exporters the code
references (you will see linkage errors), or just enable the build of all the
importers as explained above.
---
As mentioned there, set the main CMakeLists not to build the tools and
the tests by default, since they use certain exporters and importers
which, with this method, are not necessarily used/built.
Fix the obj file loader by adding a new method which allows
a name to be read considering the space in the middle between two
words and use that for parsing the "mtlib" line in the .obj file
parsing method.
Before, the method used in the obj parsing function would have
returned the string "mtlib NAME_OF_MTL" instead of "mtlib" only,
which resulted in the .mtl file being never parsed.
Numerous importers rely on the default C++ IOSystem implementation
having the destructor close the file for them. The C IOSystem wrapper
wasn't and instead assumed that the Close() method was going to be
called.
This brings the C IOSystem wrapper in line with the default C++ IOSystem
by having the destructor close the file.