1# libsigc++ : The Typesafe Callback Framework for C++ 2 3## Introduction 4 5libsigc++ implements a typesafe callback system for standard C++. It 6allows you to define signals and to connect those signals to any 7callback function, either global or a member function, regardless of 8whether it is static or virtual. 9 10libsigc++ is used by gtkmm to wrap the GTK+ signal system. It does not 11depend on GTK+ or gtkmm. 12 13See the [libsigc++ web site](https://libsigcplusplus.github.io/libsigcplusplus/) 14 15## License 16 17Distribution of library and components is under the LGPL as listed in the 18file COPYING. Examples and tests are Public Domain. 19 20## Compatibility 21 22Compatible compilers must support C++17, such as the decltype(auto) specifier 23(from C++14) and std::invoke(). 24 25## Build 26 27Whenever possible, you should use the official binary packages approved by the 28supplier of your operating system, such as your Linux distribution. For 29instance, Ubuntu Linux, Debian Linux and Fedora Linux have official libsigc++ 30packages. 31 32## Building from a release tarball 33 34Building from the [libsigc++ release tarball](https://github.com/libsigcplusplus/libsigcplusplus/releases) is easier than building from git. 35 36It's easiest to build with Meson, if the tarball was made with Meson, 37and to build with Autotools, if the tarball was made with Autotools. 38Then you don't have to use maintainer-mode. 39 40How do you know how the tarball was made? If it was made with Meson, 41it contains files in untracked/build_scripts/, untracked/docs/ and possibly 42other subdirectories of untracked/. 43 44### Building from a tarball with Meson 45 46Don't call the builddir 'build'. There is a directory called 'build' with 47files used by Autotools. 48 49For instance: 50```sh 51# If the tarball was made with Autotools, and you want to rebuild the reference 52# documentation, you must enable maintainer-mode: 53$ meson --prefix=/usr/local --libdir=lib -Dmaintainer-mode=true your_builddir . 54 55# If the tarball was made with Meson, or you don't want to rebuild the docs: 56$ meson --prefix=/usr/local --libdir=lib your_builddir . 57 58# then: 59$ cd your_builddir 60$ ninja 61$ ninja install 62# You can run the tests like so: 63$ ninja test 64``` 65 66### Building from a tarball with Autotools 67 68For instance: 69```sh 70# If the tarball was made with Autotools: 71$ ./configure --prefix=/usr/local 72 73# If the tarball was made with Meson, you must enable maintainer-mode: 74$ ./autogen.sh --prefix=/usr/local 75 76# then: 77$ make 78$ make install 79# You can build the examples and tests, and run the tests, like so: 80$ make check 81``` 82 83## Building from git 84 85Building from git can be difficult so you should prefer building from a release 86tarball unless you need to work on the libsigc++ code itself. 87 88jhbuild can be a good help. See the [jhbuild repo](https://gitlab.gnome.org/GNOME/jhbuild) 89and the [jhbuild wiki](https://wiki.gnome.org/Projects/Jhbuild). 90 91### Building from git with Meson 92 93You must have Meson properly installed (meson, ninja, etc) and you 94will also need [mm-common](https://gitlab.gnome.org/GNOME/mm-common/) 95version 1.0.0 or higher. 96 97Maintainer-mode is enabled by default when you build from a git clone. 98 99Don't call the builddir 'build'. There is a directory called 'build' with 100files used by Autotools. 101 102```sh 103$ meson --prefix=/usr/local --libdir=lib your_builddir . 104$ cd your_builddir 105$ ninja 106$ ninja install 107# You can run the tests like so: 108$ ninja test 109# You can create a tarball like so: 110$ ninja dist 111``` 112 113### Building from git with Autotools 114 115You must have Autotools properly installed (autoconf, automake, etc) and you 116will also need [mm-common](https://gitlab.gnome.org/GNOME/mm-common/). 117 118```sh 119$ ./autogen.sh --prefix=/usr/local 120$ make 121$ make install 122# You can build the examples and tests, and run the tests, like so: 123$ make check 124# You can create a tarball like so: 125$ make distcheck 126# or 127$ make dist 128``` 129 130### Building from git with CMake 131 132The CMake build is not used very often by the libsigc++ developers, but it 133should work, and we would welcome improvements. 134 135For instance: 136 137```sh 138$ mkdir libsigcplusplus_build 139$ cd libsigcplusplus_build 140$ cmake path/to/libsigcplusplus 141$ make 142``` 143 144## Building with Microsoft Visual C++ 145 146See MSVC_NMake/README.txt. 147