123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575 |
- *******************************************************************************
- ** Building TigerVNC
- *******************************************************************************
-
-
- ================================
- Build Requirements (All Systems)
- ================================
-
- -- CMake (http://www.cmake.org) v2.8 or later
-
- -- FLTK 1.3.0
- * Must be patched using fltk/extensions.patch (in the TigerVNC source
- directory) to get full functionality
- * See "Building FLTK" below.
-
- -- If building TLS support:
- * GnuTLS and its dependencies (libgcrypt, libtasn1, libgpg-error)
-
- -- If building native language support (NLS):
- * Gnu gettext 0.14.4 or later
- * See "Building Native Language Support" below.
-
- -- libjpeg-turbo SDK
- * If your system does not include libjpeg-turbo, then you can download the
- SDK from http://sourceforge.net/projects/libjpeg-turbo/files/
-
-
- =========================
- Build Requirements (Unix)
- =========================
-
- -- Non-Mac platforms:
- * X11 development kit
-
- -- If building Xvnc:
- * autoconf 2.57 or later
- * automake 1.7 or later
- * libtool 1.4 or later
- * OpenSSL v0.9.7 or later
- * Python v2.3 or later
- * zlib v1.2 or later
-
- * pkgconfig 0.20 or later
- If you are using an older RPM-based system which does not meet this
- minimum requirement (such as Red Hat Enterprise Linux 4), then you can
- build pkgconfig 0.20 from the Fedora 5 source RPM:
- http://archive.fedoraproject.org/pub/archive/fedora/linux/core/5/source/SRPMS/pkgconfig-0.20-2.2.1.src.rpm
-
- * gettext 0.14.4 or later
- If you are using an older RPM-based system which does not meet this
- minimum requirement (such as Red Hat Enterprise Linux 4), then you can
- build gettext 0.14.5 from the Fedora 5 source RPM:
- http://archive.fedoraproject.org/pub/archive/fedora/linux/core/5/source/SRPMS/gettext-0.14.5-3.src.rpm
- NOTE: gcj and libgcj are required when building the above source RPM.
-
-
- ============================
- Build Requirements (Windows)
- ============================
-
- -- Microsoft Visual C++ 2005 or later
-
- If you don't already have Visual C++, then the easiest way to get it is by
- installing the Windows SDK:
-
- http://msdn.microsoft.com/en-us/windows/bb980924.aspx
-
- The Windows SDK includes both 32-bit and 64-bit Visual C++ compilers and
- everything necessary to build TigerVNC.
-
- * For 32-bit builds, you can also use Microsoft Visual C++ Express
- Edition. Visual C++ Express Edition is a free download.
- * If you intend to build TigerVNC from the command line, then add the
- appropriate compiler and SDK directories to the INCLUDE, LIB, and PATH
- environment variables. This is generally accomplished by executing
- vcvars32.bat or vcvars64.bat and SetEnv.cmd. vcvars32.bat and
- vcvars64.bat are part of Visual C++ and are located in the same directory
- as the compiler. SetEnv.cmd is part of the Windows SDK. You can pass
- optional arguments to SetEnv.cmd to specify a 32-bit or 64-bit build
- environment.
-
- ... OR ...
-
- -- MinGW
-
- -- Inno Setup (needed to build the TigerVNC installer)
- Inno Setup can be downloaded from http://www.jrsoftware.org/isinfo.php.
- You also need the Inno Setup Preprocessor, which is available in the
- Inno Setup QuickStart Pack.
-
- Add the directory containing iscc.exe (for instance,
- C:\Program Files\Inno Setup 5) to the system or user PATH environment
- variable prior to building TigerVNC.
-
-
- =============
- Building FLTK
- =============
-
- Currently, TigerVNC requires functionality that is not yet included in the
- upstream version of FLTK. Thus, it will be necessary to build FLTK from
- source. To do this:
-
- 1. Download the FLTK 1.3.0 source tarball from http://www.fltk.org/
- 2. Extract the source tarball
- 3. cd fltk-1.3.0
- 4. patch -p1 < {tigervnc_source_directory}/fltk/extensions.patch
- 5. Use CMake to build FLTK using the same procedures described below for
- building TigerVNC. The recipes in the "Build Recipes" section also apply.
- 6. (optional) Use 'make install' to install FLTK into a directory of your
- choosing.
- 7. When building TigerVNC, set the FLTK_FLUID_EXECUTABLE CMake variable to the
- location of the fluid executable that was built in Step 5 or installed in
- Step 6. This gives CMake a hint as to where to find the FLTK library.
- 8. If you did not install FLTK, then set the FLTK_INCLUDE_DIR CMake variable to
- the location of the FLTK source directory.
-
-
- ==================
- Out-of-Tree Builds
- ==================
-
- Binary objects, libraries, and executables are generated in the same directory
- from which cmake was executed (the "binary directory"), and this directory need
- not necessarily be the same as the TigerVNC source directory. You can create
- multiple independent binary directories, in which different versions of
- TigerVNC can be built from the same source tree using different compilers or
- settings. In the sections below, {build_directory} refers to the binary
- directory, whereas {source_directory} refers to the TigerVNC source directory.
- For in-tree builds, these directories are the same.
-
-
- =================
- Building TigerVNC
- =================
-
-
- Unix/Mac
- --------
-
- The following procedure will build the TigerVNC Viewer on Linux and Unix
- systems. On 64-bit systems, this will build a 64-bit version of TigerVNC. See
- "Build Recipes" for specific build instructions for building a 32-bit version
- of TigerVNC on 64-bit systems.
-
- cd {build_directory}
- cmake -G "Unix Makefiles" {source_directory} [additional CMake flags]
- make
-
- Building the TigerVNC Server (Xvnc) is a bit trickier. On newer systems
- containing Xorg 7.4 or later (such as Fedora), Xvnc is typically built to use
- the X11 shared libraries provided with the system. The procedure for this is
- very system-specific, since it requires specifying such things as font and X
- resource directories. Thus, it cannot be described in terms general enough for
- this document.
-
- Those using systems with older versions of Xorg must build a "legacy-friendly"
- version of the TigerVNC Server. This is accomplished by downloading and
- building the more recent Xorg modules in a local directory and then building
- Xvnc such that it links against the local build of these libraries, not the X11
- libraries installed on the system. The "build-xorg" script in the TigerVNC
- source distribution (located under unix/) automates this process.
-
- The following procedure will build both the TigerVNC Viewer and a
- "legacy-friendly" version of the TigerVNC Server:
-
- cd {build_directory}
- sh {source_directory}/unix/build-xorg init
- sh {source_directory}/unix/build-xorg build [additional CMake flags]
-
- build-xorg generates a version of Xvnc that has no external dependencies on the
- X11 shared libraries or any other distribution-specific shared libraries. This
- version of Xvnc should be transportable across multiple O/S distributions.
- build-xorg should work on Red Hat Enterprise 4, its contemporaries, and later
- systems. It probably will not work on older systems. It has not been tested
- on non-Linux systems (yet).
-
- build-xorg can also be used to rebuild just the TigerVNC Server and Viewer,
- once the X11 modules and other dependencies have been built for the first time.
- This is convenient for testing changes that just apply to the TigerVNC source
- code. To accomplish this, run:
-
- sh {source_directory}/unix/build-xorg rebuild [additional make flags]
-
- For instance,
-
- sh {source_directory}/unix/build-xorg rebuild clean
-
- will clean both the Xvnc and vncviewer builds without destroying any of the
- build configuration or module dependencies.
-
-
- Visual C++ (Command Line)
- -------------------------
-
- cd {build_directory}
- cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release {source_directory}
- nmake
-
- This will build either a 32-bit or a 64-bit version of TigerVNC, depending
- on which version of cl.exe is in the PATH.
-
-
- Visual C++ (IDE)
- ----------------
-
- Choose the appropriate CMake generator option for your version of Visual Studio
- (run "cmake" with no arguments for a list of available generators.) For
- instance:
-
- cd {build_directory}
- cmake -G "Visual Studio 9 2008" {source_directory}
-
- You can then open ALL_BUILD.vcproj in Visual Studio and build one of the
- configurations in that project ("Debug", "Release", etc.) to generate a full
- build of TigerVNC.
-
-
- MinGW
- -----
-
- cd {build_directory}
- cmake -G "MSYS Makefiles" {source_directory}
- make
-
- This will generate only vncviewer. Currently, Visual C++ must be used to build
- WinVNC.
-
-
- Debug Build
- -----------
-
- Add "-DCMAKE_BUILD_TYPE=Debug" to the CMake command line. Or, if building with
- NMake, remove "-DCMAKE_BUILD_TYPE=Release" (Debug builds are the default with
- NMake.)
-
-
- Self-Contained MinGW Build
- --------------------------
-
- If TigerVNC is built using MinGW, then it may depend on the MinGW libgcc DLL.
- To eliminate this dependency, add
-
- -DCMAKE_C_FLAGS=-static-libgcc -DCMAKE_CXX_FLAGS=-static-libgcc
-
- to the CMake command line.
-
-
- ======================================
- Building Native Language Support (NLS)
- ======================================
-
- NLS requires gettext, which is supplied with most Linux distributions but not
- with most other operating systems. Building gettext from source is
- straightforward on Mac and other Unix variants, but on Windows it requires
- MinGW. Thus, it is not possible to enable NLS when building TigerVNC with
- Visual C++.
-
- You can override the ICONV_LIBRARIES and LIBINTL_LIBRARY CMake variables to
- specify the locations of libiconv and libintl, respectively. For instance,
- adding
-
- -DLIBINTL_LIBRARY=/opt/gettext/lib/libintl.a
-
- to the CMake command line would link TigerVNC against a static version of
- libintl located under /opt/gettext. Adding
-
- -DICONV_INCLUDE_DIR=/mingw/include \
- -DICONV_LIBRARIES=/mingw/lib/libiconv.a \
- -DGETTEXT_INCLUDE_DIR=/mingw/include \
- -DLIBINTL_LIBRARY=/mingw/lib/libintl.a
-
- to the CMake command line would link TigerVNC against the static versions of
- libiconv and libintl included in the MinGW Developer Toolkit.
-
-
- ===============================================
- Building Transport Layer Security (TLS) support
- ===============================================
-
- VeNCrypt (the TigerVNC security and authentication extensions) can be built
- with TLS support, which provides built-in encryption for VNC sessions. This
- requires GnuTLS, which is readily available in many Linux distributions but not
- as readily available in binary form on other types of systems. This section
- describes the issues associated with building a version of TigerVNC with TLS
- support and how to work around those issues.
-
-
- Unix/Mac
- --------
-
- In general, if you are building on a Unix-ish platform that has the GnuTLS
- libraries and include files installed in the standard system locations, then
- the TigerVNC build system should detect the system version of GnuTLS
- automatically and link against it. However, this produces a version of
- TigerVNC that depends on the GnuTLS dynamic libraries, and thus the TigerVNC
- binaries are not portable.
-
- To build a fully portable, cross-compatible version of TigerVNC with TLS
- support, it is necessary to link against the GnuTLS static library (as well
- as the static libraries of its dependencies.) If you are lucky enough, then
- your O/S distribution may include pre-packaged versions of these static
- libraries. Otherwise, it will be necessary to build GnuTLS, libgcrypt,
- libtasn1, and libgpg-error from source.
-
- You can manipulate the GNUTLS_INCLUDE_DIR and GNUTLS_LIBRARY CMake variables to
- build TigerVNC against a custom build of GnuTLS that is installed in a
- non-system directory. For instance, adding
-
- -DGNUTLS_INCLUDE_DIR=/opt/gnutls/include \
- -DGNUTLS_LIBRARY='/opt/gnutls/lib/libgnutls.a;/opt/gnutls/lib/libgcrypt.a;/opt/gnutls/lib/libgpg-error.a;/opt/gnutls/lib/libtasn1.a' \
- -DUSE_INCLUDED_ZLIB=1
-
- to the CMake or 'build-xorg build' command line will cause TigerVNC to be
- statically linked against a custom installation of GnuTLS that resides under
- /opt/gnutls. GnuTLS depends on zlib, so specifying -DUSE_INCLUDED_ZLIB=1 will
- satisfy that dependency using TigerVNC's in-tree version of zlib, which
- prevents TigerVNC from depending on the libz dynamic library.
-
-
- MinGW
- -----
-
- An installer containing the GnuTLS header files, as well as static and dynamic
- link libraries for 32-bit MinGW, can be downloaded from the following site:
-
- http://josefsson.org/gnutls4win/
-
- As of this writing, GnuTLS cannot be built cleanly with MinGW64 due to the fact
- that portions of the code assume an LP64 data model (Windows uses LLP64.)
- Thus, it is not possible at this time to produce a Win64 version of TigerVNC
- with TLS support.
-
- Whether you use the above installer or build GnuTLS from source, make sure that
- you install the libraries and headers into a pathname that doesn't contain
- spaces (the installer will try to install under c:\Program Files unless you
- tell it otherwise.) If the GnuTLS include path contains spaces, then the MinGW
- resource compiler will barf when you try to build TigerVNC.
-
- You can manipulate the GNUTLS_INCLUDE_DIR and GNUTLS_LIBRARY CMake variables to
- specify the directory under which you installed GnuTLS. For instance, adding
-
- -DGNUTLS_INCLUDE_DIR=/c/gnutls/include \
- -DGNUTLS_LIBRARY=/c/gnutls/lib/libgnutls.dll.a
-
- to the CMake command line when using MinGW will cause TigerVNC to be linked
- against GnuTLS DLLs that are installed under c:\gnutls.
-
- Adding
-
- -DGNUTLS_INCLUDE_DIR=/c/gnutls/include \
- -DGNUTLS_LIBRARY='/c/gnutls/lib/libgnutls.a;/c/gnutls/lib/libgcrypt.a;/c/gnutls/lib/libtasn1.a;/c/gnutls/lib/libgpg-error.a'
-
- to the CMake command line will cause TigerVNC to be statically linked against
- GnuTLS libraries that are installed under c:\gnutls.
-
- Note that the use of MinGW means that only the TigerVNC viewer can be built,
- not the server.
-
-
- Visual C++
- ----------
-
- There is generally no sane way to build GnuTLS and its dependencies using
- Visual C++. Thus, it is necessary to either build the libraries with MinGW (or
- download 32-bit versions of these from the link above), generate Visual C++
- import libraries from the DLLs, then link TigerVNC against the Visual C++
- import libraries.
-
- In the instructions below, {gnutls_path} indicates the path under which GnuTLS
- is installed (Example: c:\Program Files\GnuTLS-2.10.1).
-
- To generate Visual C++ import libraries:
-
- cd {gnutls_path}\lib
- lib /def:..\bin\libgnutls-{version}.def /out:libgnutls.lib
-
- Now, you can add the following arguments to the CMake command line:
-
- -DGNUTLS_INCLUDE_DIR={gnutls_path}\include \
- -DGNUTLS_LIBRARY={gnutls_path}\lib\libgnutls.lib
-
- to build TigerVNC against the GnuTLS DLLs installed under {gnutls_path}.
-
-
- ===================
- Installing TigerVNC
- ===================
-
- You can use the build system to install TigerVNC into a directory of your
- choosing. To do this, add:
-
- -DCMAKE_INSTALL_PREFIX={install_directory}
-
- to the CMake command line. Then, after building TigerVNC, you can run
- 'make install' or 'nmake install' (or build the "install" target in the Visual
- Studio IDE) to install it.
-
- If you don't specify CMAKE_INSTALL_PREFIX, then the default is
- c:\Program Files\TigerVNC on Windows and /usr/local on Unix.
-
-
- =========================
- Creating Release Packages
- =========================
-
- The following commands can be used to create various types of release packages:
-
-
- Unix
- ----
-
- (TODO: implement these in CMake. OS X viewer also needs to be packaged into
- an app instead of a package, since it can run stand-alone now.)
-
- make tarball
-
- Create a binary tarball containing the TigerVNC Viewer
-
- make servertarball
-
- Create a binary tarball containing both the TigerVNC Server and Viewer
-
- make dmg
-
- Create Macintosh package/disk image. This requires the PackageMaker
- application, which must be installed in /Developer/Applications/Utilities.
-
- make udmg [BUILDDIR32={32-bit build directory}]
-
- On 64-bit OS X systems, this creates a version of the Macintosh package and
- disk image which contains universal i386/x86-64 binaries. You should first
- configure a 32-bit out-of-tree build of TigerVNC, then configure a 64-bit
- out-of-tree build, then run 'make udmg' from the 64-bit build directory. The
- build system will look for the 32-bit build under {source_directory}/osxx86
- by default, but you can override this by setting the BUILDDIR32 variable on
- the make command line as shown above. Either the 64-bit or 32-bit build can
- be configured to be backward-compatible by using the instructions in the
- "Unix Build Recipes" section.
-
-
- Windows
- -------
-
- If using NMake:
-
- cd {build_directory}
- nmake installer
-
- If using MinGW:
-
- cd {build_directory}
- make installer
-
- If using the Visual Studio IDE, build the "installer" project.
-
- The installer package (TigerVNC[64].exe) will be located under
- {build_directory}. If building using the Visual Studio IDE, then the installer
- package will be located in a subdirectory with the same name as the
- configuration you built (such as {build_directory}\Debug\ or
- {build_directory}\Release\).
-
- NOTE: If TigerVNC is built with TLS support, then the build system will
- attempt to package the GnuTLS DLLs into the Windows installer. It looks for
- these DLLs in a directory called "bin" one level up from GNUTLS_INCLUDE_DIR.
-
-
- =============
- Build Recipes
- =============
-
-
- 32-bit Build on 64-bit Linux/Unix (including OS X)
- --------------------------------------------------
-
- Set the following environment variables before running CMake or
- 'build-xorg build':
-
- CFLAGS='-O3 -m32'
- CXXFLAGS='-O3 -m32'
- LDFLAGS=-m32
-
-
- 64-bit Backward-Compatible Build on 64-bit OS X
- -----------------------------------------------
-
- Add
-
- -DCMAKE_OSX_SYSROOT=/Developer/SDKs/MacOSX10.5.sdk \
- -DCMAKE_OSX_DEPLOYMENT_TARGET=10.5
-
- to the CMake command line. The OS X 10.5 SDK must be installed.
-
-
- 32-bit Backward-Compatible Build on 64-bit OS X
- -----------------------------------------------
-
- Set the following environment variables:
-
- CC=gcc-4.0
- CXX=g++-4.0
- CFLAGS='-O3 -m32'
- CXXFLAGS='-O3 -m32'
- LDFLAGS=-m32
-
- and add
-
- -DCMAKE_OSX_SYSROOT=/Developer/SDKs/MacOSX10.4u.sdk \
- -DCMAKE_OSX_DEPLOYMENT_TARGET=10.4
-
- to the CMake command line. The OS X 10.4 SDK must be installed.
-
-
- 64-bit MinGW Build on Cygwin
- ----------------------------
-
- cd {build_directory}
- CC=/usr/bin/x86_64-w64-mingw32-gcc CXX=/usr/bin/x86_64-w64-mingw32-g++ \
- RC=/usr/bin/x86_64-w64-mingw32-windres \
- cmake -G "Unix Makefiles" -DCMAKE_SYSTEM_NAME=Windows \
- -DCMAKE_AR=/usr/bin/x86_64-w64-mingw32-ar \
- -DCMAKE_RANLIB=/usr/bin/x86_64-w64-mingw32-ranlib {source_directory}
- make
-
- This produces a 64-bit build of TigerVNC that does not depend on cygwin1.dll or
- other Cygwin DLL's. The mingw64-x86_64-gcc-core and mingw64-x86_64-gcc-g++
- packages (and their dependencies) must be installed.
-
-
- 32-bit MinGW Build on Cygwin
- ----------------------------
-
- cd {build_directory}
- CC=/usr/bin/i686-w64-mingw32-gcc CXX=/usr/bin/i686-w64-mingw32-g++ \
- RC=/usr/bin/i686-w64-mingw32-windres \
- cmake -G "Unix Makefiles" -DCMAKE_SYSTEM_NAME=Windows \
- -DDCMAKE_AR=/usr/bin/i686-w64-mingw32-ar \
- -DCMAKE_RANLIB=/usr/bin/i686-w64-mingw32-ranlib {source_directory}
- make
-
- This produces a 32-bit build of TigerVNC that does not depend on cygwin1.dll or
- other Cygwin DLL's. The mingw64-i686-gcc-core and mingw64-i686-gcc-g++
- packages (and their dependencies) must be installed.
-
-
- MinGW-w64 Build on Windows
- --------------------------
-
- This produces a 64-bit build of TigerVNC using the "native" MinGW-w64 toolchain
- (which is faster than the Cygwin version):
-
- cd {build_directory}
- CC={mingw-w64_binary_path}/x86_64-w64-mingw32-gcc \
- CXX={mingw-w64_binary_path}/x86_64-w64-mingw32-g++ \
- RC={mingw-w64_binary_path}/x86_64-w64-mingw32-windres \
- cmake -G "MSYS Makefiles" \
- -DCMAKE_AR={mingw-w64_binary_path}/x86_64-w64-mingw32-ar \
- -DCMAKE_RANLIB={mingw-w64_binary_path}/x86_64-w64-mingw32-ranlib \
- {source_directory}
- make
-
-
- MinGW Build on Linux
- --------------------
-
- cd {build_directory}
- CC={mingw_binary_path}/i386-mingw32-gcc \
- CXX={mingw_binary_path}/i386-mingw32-g++ \
- RC={mingw_binary_path}/i386-mingw32-windres \
- cmake -G "Unix Makefiles" -DCMAKE_SYSTEM_NAME=Windows \
- -DCMAKE_AR={mingw_binary_path}/i386-mingw32-ar \
- -DCMAKE_RANLIB={mingw_binary_path}/i386-mingw32-ranlib \
- {source_directory}
- make
|