Go to file
Eduardo Lima (Etrunko) 495d1612c4 Add support for building with meson/ninja
In a comparison with current autotools build system, meson/ninja
provides a huge improvement in build speed, while keeping the same
functionalities currently available and being considered more user
friendly.

The new system coexists within the same repository with the current one,
so we can do more extensive testing of its functionality before deciding
if the old system can be removed, or for some reason, has to stay for
good.

- Meson: https://mesonbuild.com

  This is the equivalent of autogen/configure step in autotools. It
  generates the files that will be used by ninja to actually build the
  source code.

  The project has received lots of traction recently, with many GNOME
  projects willing to move to this new build system. The following wiki
  page has more details of the status of the many projects being ported:

    https://wiki.gnome.org/Initiatives/GnomeGoals/MesonPorting

  Meson has a python-like syntax, easy to read, and the documentation
  on the project is very complete, with a dedicated page on how to port
  from autotools, explaining how most common use cases can be
  implemented using meson.

    http://mesonbuild.com/Porting-from-autotools.html

  Other important sources of information:

    http://mesonbuild.com/howtox.html
    http://mesonbuild.com/Syntax.html
    http://mesonbuild.com/Reference-manual.html

- Ninja: https://ninja-build.org

  Ninja is the equivalent of make in an autotools setup, which actually
  builds the source code. It has being used by large and complex
  projects such as Google Chrome, Android and LLVM. There is not much to
  say about ninja (other than it is much faster than make) because we
  won't interact directly with it as much, as meson does the middle man
  job here. The reasoning for creating ninja in the first place is
  explained on the following post:

    http://neugierig.org/software/chromium/notes/2011/02/ninja.html

  Also its manual provides more in-depth information about the design
  principles:

    https://ninja-build.org/manual.html

- Basic workflow:

  Meson package is available for most if not all distros, so, taking
  Fedora as an example, we only need to run:

    # dnf -y install meson ninja-build.

  With Meson, building in-tree is not possible at all, so we need to
  pass a directory as argument to meson where we want the build to be
  done. This has the advantage of creating builds with different options
  under the same parent directory, e.g.:

    $ meson ./build --prefix=/usr
    $ meson ./build-extra -Dextra-checks=true -Dalignment-checks=true

  After configuration is done, we call ninja to actually do the build.

    $ ninja -C ./build
    $ ninja -C ./build install

  Ninja defaults to parallel builds, and this can be changed with the -j
  flag.

    $ ninja -j 10 -C ./build

- Hacking:

  * meson.build: Mandatory for the project root and usually found under
                 each directory you want something to be built.

  * meson_options.txt: Options that can interfere with the result of the
                       build.

Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
Signed-off-by: Christophe Fergeau <cfergeau@redhat.com>
Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2018-08-30 11:10:45 -03:00
build-aux Add support for building with meson/ninja 2018-08-30 11:10:45 -03:00
docs Add support for building with meson/ninja 2018-08-30 11:10:45 -03:00
m4 build-sys: Do not abort on warnings 2017-04-22 08:44:21 +01:00
server Add support for building with meson/ninja 2018-08-30 11:10:45 -03:00
subprojects Update spice-common submodule 2018-08-16 21:29:52 +01:00
tests tests/migrate.py: add --vdagent 2011-08-23 17:01:14 +03:00
tools Add support for building with meson/ninja 2018-08-30 11:10:45 -03:00
uncrustify_cfg fresh start 2009-10-14 15:06:41 +02:00
.gitignore docs: Add some documentation on spice threading model 2017-09-11 18:03:57 +01:00
.gitlab-ci.yml ci: Run an additional make check using Centos 2018-07-11 10:21:26 +01:00
.gitmodules build: Move spice-common to subprojects/ directory 2018-07-23 14:49:19 -03:00
.mailmap syntax-check: Fix missing AUTHORS 2016-12-05 13:48:28 +00:00
.travis.yml Add travis CI file 2015-11-27 20:21:24 +01:00
AUTHORS syntax-check: Add missing contributors names to AUTHORS 2018-04-06 08:30:01 +01:00
autogen.sh build-sys: Pass --enable-python-checks when running autogen.sh 2015-04-23 10:38:24 +02:00
cfg.mk build-sys: Add make check-valgrind target 2017-03-21 16:34:56 +01:00
ChangeLog fresh start 2009-10-14 15:06:41 +02:00
configure.ac Support h265 in stream-channel 2018-08-22 16:58:14 +02:00
COPYING Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
GNUmakefile syntax-check: Update gnufiles 2016-11-18 12:06:53 +00:00
maint.mk syntax-check: Update gnufiles 2016-11-18 12:06:53 +00:00
Makefile.am Add support for building with meson/ninja 2018-08-30 11:10:45 -03:00
meson_options.txt Add support for building with meson/ninja 2018-08-30 11:10:45 -03:00
meson.build Add support for building with meson/ninja 2018-08-30 11:10:45 -03:00
NEWS build: Prepare for 0.14.1 release 2018-08-22 16:48:17 +02:00
README README: Report bugs to gitlab issue tracker 2018-08-06 15:14:57 +02:00
spice-server.pc.in build-sys: Require a new enough spice-protocol in .pc file 2015-08-26 11:01:09 +02:00
TODO.multiclient Remove trailing whitespace from end of lines 2012-01-13 18:11:59 +02:00

   SPICE: Simple Protocol for Independent Computing Environments
   =============================================================

SPICE is a remote display system built for virtual environments which
allows you to view a computing 'desktop' environment not only on the
machine where it is running, but from anywhere on the Internet and
from a wide variety of machine architectures.

Installation
------------

The SPICE package uses GNU autotools, so the build install process
follows the standard process documented in the INSTALL file. As a
quick start you can do

  ./configure --prefix=/usr --sysconfdir=/etc \
        --localstatedir=/var --libdir=/usr/lib
  make
  sudo make install

Or to install into a private user specific location

  ./configure --prefix=$HOME/spice
  make
  make install

The following mandatory dependencies are required in order to
build SPICE

    Spice protocol >= 0.12.14
    Pixman         >= 0.17.7
    OpenSSL
    libjpeg
    zlib

The following optional dependencies increase the available
functionality

    Cyrus-SASL
    libcacard      >= 0.1.2             (Smartcard support)
    Opus           >= 1.0.0             (Opus audio encoding support)
    LZ4                                 (LZ4 compression support)
    GStreamer      >= 1.0.0

Communication
-------------

To communicate with the development team, or to post patches
there is a technical mailing list:

   http://lists.freedesktop.org/mailman/listinfo/spice-devel

There is also a mailing list for new release announcements:

   http://lists.freedesktop.org/archives/spice-announce/

To view known bugs, or report new bugs, in SPICE visit

   https://gitlab.freedesktop.org/spice/spice/issues/new?

Bugs found when using an OS distribution's binary packages should
be reported to the OS vendors' own bug tracker first.

The latest SPICE code can be found in GIT at:

   https://gitlab.freedesktop.org/spice/

Licensing
---------

SPICE is provided under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

Please see the COPYING file for the complete LGPLv2+ license
terms, or visit <http://www.gnu.org/licenses/>.

Experimental Features
---------------------
To enable multiple client connections, set:
SPICE_DEBUG_ALLOW_MC=1

-- End of readme