I am an enthusiastic user of the {fmt} library that cannot wait for having it fully integrated in the c++ std, also because I have to deal with less recent OS that does not offer the necessary gcc version.
I am also using it with ROOT in FMT_HEADER_ONLY mode, and it works like a charm in the interactive environment, in scripts, even in the ROOT jupyter notebook, and I guess (I have not tried so far) it will work also on ACLiC compilation.
Now I would like to use it also as a loaded/linked library, and I wonder:
if somebody is already doing that
which are the options that I have to achieve this (e.g. other libraries can be “loaded” with gSystem::Load(), I read here ROOT macros and shared libraries - ROOT that libraries can be added for compilation and include path can be edited with other gSystem methods)
The best for me is to have e.g. something in the configuration file that makes it available from the start of the program, as with the std library and the ROOT libraries. So far I mostly installed ROOT from sources with c++17 enabled, on Debian machines.
ROOT Version: Any recent (~>=6.26), compiled with c++17 Platform: Debian10 to (soon) Debian12 Compiler: gcc (from 8.3 to 12.2 depending on Debian version)
I think that it is complementary to that topic, in the sense that the other post asked how to load the library just before or at the beginning of each macro, while I am more interested to have {fmt} available at ROOT start for any interactive work or scripts that I run.
Still from that post I get a suggestion, to put the loading in rootlogon.C. However this is per-user basis, is there any field of the system.rootrc that can provide this, or anything else ?
Well, the ultimate wish would be that the users could have the same “experience” when using std library symbols like std::cout, etc.
Wait, let me be more precise: not to the point that they do not have to #include the headers or they find everything in the global namespace, but without the need to R__LOAD_LIBRARY + gSystem->Load() at the beginning of their macro or session
I looked at the etc/system.rootrc:
# Path used by dynamic loader to find shared libraries.
# This path will be appended to the (DY)LD_LIBRARY_PATH on Unix
# and to PATH on Windows.
# Paths are different for Unix and Windows. The example shows the defaults
# for all ROOT applications for either Unix or Windows.
#Unix.*.Root.DynamicPath: .:$(ROOTSYS)/lib
#WinNT.*.Root.DynamicPath: .;$(ROOTSYS)/bin
But I guess that this sets just the search path and you cannot load a library at startup via this configuration file.
So probably a starting macro would be needed. Is there really a system-wide rootlogon.C ??
Otherwise I guess now that the workaround is either to provide the rootlogon.C so that users can take it, if they want to, or provide a wrapper script that launch root with the a prepared rootlogon.C as first operation.