git repos / blockattack-game

blame: source/misc/embedded_libs/fmt-8.1.1/doc/usage.rst

normal view · raw

f8deb5b9 Poul Sander 2022-01-15 13:55 1
*****
f8deb5b9 Poul Sander 2022-01-15 13:55 2
Usage
f8deb5b9 Poul Sander 2022-01-15 13:55 3
*****
f8deb5b9 Poul Sander 2022-01-15 13:55 4
f8deb5b9 Poul Sander 2022-01-15 13:55 5
To use the {fmt} library, add :file:`fmt/core.h`, :file:`fmt/format.h`,
f8deb5b9 Poul Sander 2022-01-15 13:55 6
:file:`fmt/format-inl.h`, :file:`src/format.cc` and optionally other headers
f8deb5b9 Poul Sander 2022-01-15 13:55 7
from a `release archive <https://github.com/fmtlib/fmt/releases/latest>`_ or
f8deb5b9 Poul Sander 2022-01-15 13:55 8
the `Git repository <https://github.com/fmtlib/fmt>`_ to your project.
f8deb5b9 Poul Sander 2022-01-15 13:55 9
Alternatively, you can :ref:`build the library with CMake <building>`.
f8deb5b9 Poul Sander 2022-01-15 13:55 10
f8deb5b9 Poul Sander 2022-01-15 13:55 11
.. _building:
f8deb5b9 Poul Sander 2022-01-15 13:55 12
f8deb5b9 Poul Sander 2022-01-15 13:55 13
Building the Library
f8deb5b9 Poul Sander 2022-01-15 13:55 14
====================
f8deb5b9 Poul Sander 2022-01-15 13:55 15
f8deb5b9 Poul Sander 2022-01-15 13:55 16
The included `CMake build script`__ can be used to build the fmt
f8deb5b9 Poul Sander 2022-01-15 13:55 17
library on a wide range of platforms. CMake is freely available for
f8deb5b9 Poul Sander 2022-01-15 13:55 18
download from https://www.cmake.org/download/.
f8deb5b9 Poul Sander 2022-01-15 13:55 19
f8deb5b9 Poul Sander 2022-01-15 13:55 20
__ https://github.com/fmtlib/fmt/blob/master/CMakeLists.txt
f8deb5b9 Poul Sander 2022-01-15 13:55 21
f8deb5b9 Poul Sander 2022-01-15 13:55 22
CMake works by generating native makefiles or project files that can
f8deb5b9 Poul Sander 2022-01-15 13:55 23
be used in the compiler environment of your choice. The typical
f8deb5b9 Poul Sander 2022-01-15 13:55 24
workflow starts with::
f8deb5b9 Poul Sander 2022-01-15 13:55 25
f8deb5b9 Poul Sander 2022-01-15 13:55 26
  mkdir build          # Create a directory to hold the build output.
f8deb5b9 Poul Sander 2022-01-15 13:55 27
  cd build
f8deb5b9 Poul Sander 2022-01-15 13:55 28
  cmake ..  # Generate native build scripts.
f8deb5b9 Poul Sander 2022-01-15 13:55 29
f8deb5b9 Poul Sander 2022-01-15 13:55 30
where :file:`{<path/to/fmt>}` is a path to the ``fmt`` repository.
f8deb5b9 Poul Sander 2022-01-15 13:55 31
f8deb5b9 Poul Sander 2022-01-15 13:55 32
If you are on a \*nix system, you should now see a Makefile in the
f8deb5b9 Poul Sander 2022-01-15 13:55 33
current directory. Now you can build the library by running :command:`make`.
f8deb5b9 Poul Sander 2022-01-15 13:55 34
f8deb5b9 Poul Sander 2022-01-15 13:55 35
Once the library has been built you can invoke :command:`make test` to run
f8deb5b9 Poul Sander 2022-01-15 13:55 36
the tests.
f8deb5b9 Poul Sander 2022-01-15 13:55 37
f8deb5b9 Poul Sander 2022-01-15 13:55 38
You can control generation of the make ``test`` target with the ``FMT_TEST``
f8deb5b9 Poul Sander 2022-01-15 13:55 39
CMake option. This can be useful if you include fmt as a subdirectory in
f8deb5b9 Poul Sander 2022-01-15 13:55 40
your project but don't want to add fmt's tests to your ``test`` target.
f8deb5b9 Poul Sander 2022-01-15 13:55 41
f8deb5b9 Poul Sander 2022-01-15 13:55 42
If you use Windows and have Visual Studio installed, a :file:`FMT.sln`
f8deb5b9 Poul Sander 2022-01-15 13:55 43
file and several :file:`.vcproj` files will be created. You can then build them
f8deb5b9 Poul Sander 2022-01-15 13:55 44
using Visual Studio or msbuild.
f8deb5b9 Poul Sander 2022-01-15 13:55 45
f8deb5b9 Poul Sander 2022-01-15 13:55 46
On Mac OS X with Xcode installed, an :file:`.xcodeproj` file will be generated.
f8deb5b9 Poul Sander 2022-01-15 13:55 47
f8deb5b9 Poul Sander 2022-01-15 13:55 48
To build a `shared library`__ set the ``BUILD_SHARED_LIBS`` CMake variable to
f8deb5b9 Poul Sander 2022-01-15 13:55 49
``TRUE``::
f8deb5b9 Poul Sander 2022-01-15 13:55 50
f8deb5b9 Poul Sander 2022-01-15 13:55 51
  cmake -DBUILD_SHARED_LIBS=TRUE ...
f8deb5b9 Poul Sander 2022-01-15 13:55 52
f8deb5b9 Poul Sander 2022-01-15 13:55 53
__ https://en.wikipedia.org/wiki/Library_%28computing%29#Shared_libraries
f8deb5b9 Poul Sander 2022-01-15 13:55 54
f8deb5b9 Poul Sander 2022-01-15 13:55 55
f8deb5b9 Poul Sander 2022-01-15 13:55 56
To build a `static library` with position independent code (required if the main
f8deb5b9 Poul Sander 2022-01-15 13:55 57
consumer of the fmt library is a shared library i.e. a Python extension) set the
f8deb5b9 Poul Sander 2022-01-15 13:55 58
``CMAKE_POSITION_INDEPENDENT_CODE`` CMake variable to ``TRUE``::
f8deb5b9 Poul Sander 2022-01-15 13:55 59
f8deb5b9 Poul Sander 2022-01-15 13:55 60
  cmake -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE ...
f8deb5b9 Poul Sander 2022-01-15 13:55 61
f8deb5b9 Poul Sander 2022-01-15 13:55 62
f8deb5b9 Poul Sander 2022-01-15 13:55 63
Installing the Library
f8deb5b9 Poul Sander 2022-01-15 13:55 64
======================
f8deb5b9 Poul Sander 2022-01-15 13:55 65
f8deb5b9 Poul Sander 2022-01-15 13:55 66
After building the library you can install it on a Unix-like system by running
f8deb5b9 Poul Sander 2022-01-15 13:55 67
:command:`sudo make install`.
f8deb5b9 Poul Sander 2022-01-15 13:55 68
f8deb5b9 Poul Sander 2022-01-15 13:55 69
Usage with CMake
f8deb5b9 Poul Sander 2022-01-15 13:55 70
================
f8deb5b9 Poul Sander 2022-01-15 13:55 71
f8deb5b9 Poul Sander 2022-01-15 13:55 72
You can add the ``fmt`` library directory into your project and include it in
f8deb5b9 Poul Sander 2022-01-15 13:55 73
your ``CMakeLists.txt`` file::
f8deb5b9 Poul Sander 2022-01-15 13:55 74
f8deb5b9 Poul Sander 2022-01-15 13:55 75
   add_subdirectory(fmt)
f8deb5b9 Poul Sander 2022-01-15 13:55 76
f8deb5b9 Poul Sander 2022-01-15 13:55 77
or
f8deb5b9 Poul Sander 2022-01-15 13:55 78
f8deb5b9 Poul Sander 2022-01-15 13:55 79
::
f8deb5b9 Poul Sander 2022-01-15 13:55 80
f8deb5b9 Poul Sander 2022-01-15 13:55 81
   add_subdirectory(fmt EXCLUDE_FROM_ALL)
f8deb5b9 Poul Sander 2022-01-15 13:55 82
f8deb5b9 Poul Sander 2022-01-15 13:55 83
to exclude it from ``make``, ``make all``, or ``cmake --build .``.
f8deb5b9 Poul Sander 2022-01-15 13:55 84
f8deb5b9 Poul Sander 2022-01-15 13:55 85
You can detect and use an installed version of {fmt} as follows::
f8deb5b9 Poul Sander 2022-01-15 13:55 86
f8deb5b9 Poul Sander 2022-01-15 13:55 87
   find_package(fmt)
f8deb5b9 Poul Sander 2022-01-15 13:55 88
   target_link_libraries(<your-target> fmt::fmt)
f8deb5b9 Poul Sander 2022-01-15 13:55 89
f8deb5b9 Poul Sander 2022-01-15 13:55 90
Setting up your target to use a header-only version of ``fmt`` is equally easy::
f8deb5b9 Poul Sander 2022-01-15 13:55 91
f8deb5b9 Poul Sander 2022-01-15 13:55 92
   target_link_libraries(<your-target> PRIVATE fmt::fmt-header-only)
f8deb5b9 Poul Sander 2022-01-15 13:55 93
f8deb5b9 Poul Sander 2022-01-15 13:55 94
Usage with build2
f8deb5b9 Poul Sander 2022-01-15 13:55 95
=================
f8deb5b9 Poul Sander 2022-01-15 13:55 96
f8deb5b9 Poul Sander 2022-01-15 13:55 97
You can use `build2 <https://build2.org>`_, a dependency manager and a
f8deb5b9 Poul Sander 2022-01-15 13:55 98
build-system combined, to use ``fmt``.
f8deb5b9 Poul Sander 2022-01-15 13:55 99
f8deb5b9 Poul Sander 2022-01-15 13:55 100
Currently this package is available in these package repositories:
f8deb5b9 Poul Sander 2022-01-15 13:55 101
f8deb5b9 Poul Sander 2022-01-15 13:55 102
- **https://cppget.org/fmt/** for released and published versions.
f8deb5b9 Poul Sander 2022-01-15 13:55 103
- `The git repository with the sources of the build2 package of fmt <https://github.com/build2-packaging/fmt.git>`_
f8deb5b9 Poul Sander 2022-01-15 13:55 104
  for unreleased or custom revisions of ``fmt``.
f8deb5b9 Poul Sander 2022-01-15 13:55 105
f8deb5b9 Poul Sander 2022-01-15 13:55 106
**Usage:**
f8deb5b9 Poul Sander 2022-01-15 13:55 107
f8deb5b9 Poul Sander 2022-01-15 13:55 108
- ``build2`` package name: ``fmt``
f8deb5b9 Poul Sander 2022-01-15 13:55 109
- Library target name : ``lib{fmt}``
f8deb5b9 Poul Sander 2022-01-15 13:55 110
f8deb5b9 Poul Sander 2022-01-15 13:55 111
For example, to make your ``build2`` project depend on ``fmt``:
f8deb5b9 Poul Sander 2022-01-15 13:55 112
f8deb5b9 Poul Sander 2022-01-15 13:55 113
- Add one of the repositories to your configurations, or in your
f8deb5b9 Poul Sander 2022-01-15 13:55 114
  ``repositories.manifest``, if not already there::
f8deb5b9 Poul Sander 2022-01-15 13:55 115
f8deb5b9 Poul Sander 2022-01-15 13:55 116
    :
f8deb5b9 Poul Sander 2022-01-15 13:55 117
    role: prerequisite
f8deb5b9 Poul Sander 2022-01-15 13:55 118
    location: https://pkg.cppget.org/1/stable
f8deb5b9 Poul Sander 2022-01-15 13:55 119
f8deb5b9 Poul Sander 2022-01-15 13:55 120
- Add this package as a dependency to your ``./manifest`` file
f8deb5b9 Poul Sander 2022-01-15 13:55 121
  (example for ``v7.0.x``)::
f8deb5b9 Poul Sander 2022-01-15 13:55 122
f8deb5b9 Poul Sander 2022-01-15 13:55 123
    depends: fmt ~7.0.0
f8deb5b9 Poul Sander 2022-01-15 13:55 124
f8deb5b9 Poul Sander 2022-01-15 13:55 125
- Import the target and use it as a prerequisite to your own target
f8deb5b9 Poul Sander 2022-01-15 13:55 126
  using `fmt` in the appropriate ``buildfile``::
f8deb5b9 Poul Sander 2022-01-15 13:55 127
f8deb5b9 Poul Sander 2022-01-15 13:55 128
    import fmt = fmt%lib{fmt}
f8deb5b9 Poul Sander 2022-01-15 13:55 129
    lib{mylib} : cxx{**} ... $fmt
f8deb5b9 Poul Sander 2022-01-15 13:55 130
f8deb5b9 Poul Sander 2022-01-15 13:55 131
Then build your project as usual with `b` or `bdep update`.
f8deb5b9 Poul Sander 2022-01-15 13:55 132
f8deb5b9 Poul Sander 2022-01-15 13:55 133
For ``build2`` newcomers or to get more details and use cases, you can read the
f8deb5b9 Poul Sander 2022-01-15 13:55 134
``build2``
f8deb5b9 Poul Sander 2022-01-15 13:55 135
`toolchain introduction <https://build2.org/build2-toolchain/doc/build2-toolchain-intro.xhtml>`_.
f8deb5b9 Poul Sander 2022-01-15 13:55 136
f8deb5b9 Poul Sander 2022-01-15 13:55 137
Building the Documentation
f8deb5b9 Poul Sander 2022-01-15 13:55 138
==========================
f8deb5b9 Poul Sander 2022-01-15 13:55 139
f8deb5b9 Poul Sander 2022-01-15 13:55 140
To build the documentation you need the following software installed on your
f8deb5b9 Poul Sander 2022-01-15 13:55 141
system:
f8deb5b9 Poul Sander 2022-01-15 13:55 142
f8deb5b9 Poul Sander 2022-01-15 13:55 143
* `Python <https://www.python.org/>`_ with pip and virtualenv
f8deb5b9 Poul Sander 2022-01-15 13:55 144
* `Doxygen <http://www.stack.nl/~dimitri/doxygen/>`_
f8deb5b9 Poul Sander 2022-01-15 13:55 145
* `Less <http://lesscss.org/>`_ with ``less-plugin-clean-css``.
f8deb5b9 Poul Sander 2022-01-15 13:55 146
  Ubuntu doesn't package the ``clean-css`` plugin so you should use ``npm``
f8deb5b9 Poul Sander 2022-01-15 13:55 147
  instead of ``apt`` to install both ``less`` and the plugin::
f8deb5b9 Poul Sander 2022-01-15 13:55 148
f8deb5b9 Poul Sander 2022-01-15 13:55 149
    sudo npm install -g less less-plugin-clean-css.
f8deb5b9 Poul Sander 2022-01-15 13:55 150
f8deb5b9 Poul Sander 2022-01-15 13:55 151
First generate makefiles or project files using CMake as described in
f8deb5b9 Poul Sander 2022-01-15 13:55 152
the previous section. Then compile the ``doc`` target/project, for example::
f8deb5b9 Poul Sander 2022-01-15 13:55 153
f8deb5b9 Poul Sander 2022-01-15 13:55 154
  make doc
f8deb5b9 Poul Sander 2022-01-15 13:55 155
f8deb5b9 Poul Sander 2022-01-15 13:55 156
This will generate the HTML documentation in ``doc/html``.
f8deb5b9 Poul Sander 2022-01-15 13:55 157
f8deb5b9 Poul Sander 2022-01-15 13:55 158
Conda
f8deb5b9 Poul Sander 2022-01-15 13:55 159
=====
f8deb5b9 Poul Sander 2022-01-15 13:55 160
f8deb5b9 Poul Sander 2022-01-15 13:55 161
fmt can be installed on Linux, macOS and Windows with
f8deb5b9 Poul Sander 2022-01-15 13:55 162
`Conda <https://docs.conda.io/en/latest/>`__, using its
f8deb5b9 Poul Sander 2022-01-15 13:55 163
`conda-forge <https://conda-forge.org>`__
f8deb5b9 Poul Sander 2022-01-15 13:55 164
`package <https://github.com/conda-forge/fmt-feedstock>`__, as follows::
f8deb5b9 Poul Sander 2022-01-15 13:55 165
f8deb5b9 Poul Sander 2022-01-15 13:55 166
  conda install -c conda-forge fmt
f8deb5b9 Poul Sander 2022-01-15 13:55 167
f8deb5b9 Poul Sander 2022-01-15 13:55 168
Vcpkg
f8deb5b9 Poul Sander 2022-01-15 13:55 169
=====
f8deb5b9 Poul Sander 2022-01-15 13:55 170
f8deb5b9 Poul Sander 2022-01-15 13:55 171
You can download and install fmt using the `vcpkg
f8deb5b9 Poul Sander 2022-01-15 13:55 172
<https://github.com/Microsoft/vcpkg>`__ dependency manager::
f8deb5b9 Poul Sander 2022-01-15 13:55 173
f8deb5b9 Poul Sander 2022-01-15 13:55 174
  git clone https://github.com/Microsoft/vcpkg.git
f8deb5b9 Poul Sander 2022-01-15 13:55 175
  cd vcpkg
f8deb5b9 Poul Sander 2022-01-15 13:55 176
  ./bootstrap-vcpkg.sh
f8deb5b9 Poul Sander 2022-01-15 13:55 177
  ./vcpkg integrate install
f8deb5b9 Poul Sander 2022-01-15 13:55 178
  ./vcpkg install fmt
f8deb5b9 Poul Sander 2022-01-15 13:55 179
f8deb5b9 Poul Sander 2022-01-15 13:55 180
The fmt port in vcpkg is kept up to date by Microsoft team members and community
f8deb5b9 Poul Sander 2022-01-15 13:55 181
contributors. If the version is out of date, please `create an issue or pull
f8deb5b9 Poul Sander 2022-01-15 13:55 182
request <https://github.com/Microsoft/vcpkg>`__ on the vcpkg repository.
f8deb5b9 Poul Sander 2022-01-15 13:55 183
f8deb5b9 Poul Sander 2022-01-15 13:55 184
LHelper
f8deb5b9 Poul Sander 2022-01-15 13:55 185
=======
f8deb5b9 Poul Sander 2022-01-15 13:55 186
f8deb5b9 Poul Sander 2022-01-15 13:55 187
You can download and install fmt using
f8deb5b9 Poul Sander 2022-01-15 13:55 188
`lhelper <https://github.com/franko/lhelper>`__ dependency manager::
f8deb5b9 Poul Sander 2022-01-15 13:55 189
f8deb5b9 Poul Sander 2022-01-15 13:55 190
  lhelper activate <some-environment>
f8deb5b9 Poul Sander 2022-01-15 13:55 191
  lhelper install fmt
f8deb5b9 Poul Sander 2022-01-15 13:55 192
f8deb5b9 Poul Sander 2022-01-15 13:55 193
All the recipes for lhelper are kept in the
f8deb5b9 Poul Sander 2022-01-15 13:55 194
`lhelper's recipe <https://github.com/franko/lhelper-recipes>`__ repository.
f8deb5b9 Poul Sander 2022-01-15 13:55 195
f8deb5b9 Poul Sander 2022-01-15 13:55 196
Android NDK
f8deb5b9 Poul Sander 2022-01-15 13:55 197
===========
f8deb5b9 Poul Sander 2022-01-15 13:55 198
f8deb5b9 Poul Sander 2022-01-15 13:55 199
fmt provides `Android.mk file`__ that can be used to build the library
f8deb5b9 Poul Sander 2022-01-15 13:55 200
with `Android NDK <https://developer.android.com/tools/sdk/ndk/index.html>`_.
f8deb5b9 Poul Sander 2022-01-15 13:55 201
For an example of using fmt with Android NDK, see the
f8deb5b9 Poul Sander 2022-01-15 13:55 202
`android-ndk-example <https://github.com/fmtlib/android-ndk-example>`_
f8deb5b9 Poul Sander 2022-01-15 13:55 203
repository.
f8deb5b9 Poul Sander 2022-01-15 13:55 204
f8deb5b9 Poul Sander 2022-01-15 13:55 205
__ https://github.com/fmtlib/fmt/blob/master/support/Android.mk
f8deb5b9 Poul Sander 2022-01-15 13:55 206
f8deb5b9 Poul Sander 2022-01-15 13:55 207
Homebrew
f8deb5b9 Poul Sander 2022-01-15 13:55 208
========
f8deb5b9 Poul Sander 2022-01-15 13:55 209
f8deb5b9 Poul Sander 2022-01-15 13:55 210
fmt can be installed on OS X using `Homebrew <https://brew.sh/>`_::
f8deb5b9 Poul Sander 2022-01-15 13:55 211
f8deb5b9 Poul Sander 2022-01-15 13:55 212
  brew install fmt
1970-01-01 00:00 213