diff options
-rw-r--r-- | BUILDING.txt | 142 | ||||
-rw-r--r-- | CMakeLists.txt | 40 | ||||
-rw-r--r-- | cmake/BuildPackages.cmake | 11 | ||||
-rw-r--r-- | cmake/getdate.bat | 9 | ||||
-rw-r--r-- | java/CMakeLists.txt | 25 | ||||
-rw-r--r-- | release/tigervnc.iss.in | 6 | ||||
-rw-r--r-- | win/vncconfig/CMakeLists.txt | 5 | ||||
-rw-r--r-- | win/winvnc/CMakeLists.txt | 9 |
8 files changed, 32 insertions, 215 deletions
diff --git a/BUILDING.txt b/BUILDING.txt index 044e7c47..85b434ec 100644 --- a/BUILDING.txt +++ b/BUILDING.txt @@ -55,30 +55,7 @@ Build Requirements (Unix) 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 +-- MinGW or MinGW-w64 -- Inno Setup (needed to build the TigerVNC installer) Inno Setup can be downloaded from http://www.jrsoftware.org/isinfo.php. @@ -220,49 +197,24 @@ will clean both the Xvnc and vncviewer builds without destroying any of the build configuration or module dependencies. -Building the Windows TigerVNC Viewer/Server with Visual C++ (Command Line) --------------------------------------------------------------------------- - - cd {build_directory} - cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release [additional CMake flags] {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. - - -Building the Windows TigerVNC Viewer/Server with 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" [additional CMake flags] {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. - - Building the Windows TigerVNC Viewer with MinGW ----------------------------------------------- +If building the Windows version of TigerVNC on a Windows build system, use +the following procedure. + cd {build_directory} cmake -G "MSYS Makefiles" [additional CMake flags] {source_directory} make -This will generate only vncviewer. Currently, Visual C++ must be used to build -WinVNC. +If cross-compiling on a Unix/Linux system, then see the "Build Recipes" section +below. 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.) +Add "-DCMAKE_BUILD_TYPE=Debug" to the CMake command line. Self-Contained GCC Build @@ -292,9 +244,9 @@ thus the TigerVNC binaries are not portable. To build a fully portable, cross-compatible version of TigerVNC with high-performance JPEG support, it is necessary to link against the -libjpeg-turbo static library. This is also necessary when building TigerVNC on -Windows or OS X. To link against the libjpeg-turbo static library, first -install the libjpeg-turbo SDK, which is available from +libjpeg-turbo static library. This is also necessary when building the +Windows or OS X versions of TigerVNC. To link against the libjpeg-turbo static +library, first install the libjpeg-turbo SDK, which is available from https://sourceforge.net/projects/libjpeg-turbo/files/. Next, use the JPEG_INCLUDE_DIR and JPEG_LIBRARY CMake variables to specify the location of libjpeg-turbo. For example, adding @@ -308,15 +260,7 @@ location for the libjpeg-turbo SDK on Unix and Linux platforms.) Replace "lib" with "lib32" or "lib64" to use the 32-bit or 64-bit version of the library on 64-bit Linux platforms. -Adding - - -DJPEG_INCLUDE_DIR=c:\libjpeg-turbo[64]\include \ - -DJPEG_LIBRARY=c:\libjpeg-turbo[64]\lib\jpeg-static.lib - -to the CMake command line will link TigerVNC against the static version of -libjpeg-turbo provided by the libjpeg-turbo SDK for Visual C++. - -Adding +When building on Windows systems, adding -DJPEG_INCLUDE_DIR=/c/libjpeg-turbo-gcc[64]/include \ -DJPEG_LIBRARY=/c/libjpeg-turbo-gcc[64]/lib/libjpeg.a @@ -366,11 +310,9 @@ tarball. 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++. +NLS requires gettext, which is supplied with most Linux distributions and +with MinGW for Windows and which can easily be built from source on OS X and +other Unix variants. You can override the ICONV_LIBRARIES and LIBINTL_LIBRARY CMake variables to specify the locations of libiconv and libintl, respectively. For instance, @@ -470,34 +412,6 @@ Adding 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 @@ -508,9 +422,8 @@ choosing. To do this, add: -DCMAKE_INSTALL_PREFIX={install_directory} -to the CMake command line. Then, you can run 'make install' or 'nmake install' -(or build the "install" target in the Visual Studio IDE) to build and install -it. +to the CMake command line. Then, you can run 'make install' to build and +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. @@ -555,27 +468,10 @@ make udmg 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\). +make installer -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. + Create a Windows installer using Inno Setup. The installer package + (TigerVNC[64].exe) will be located under {build_directory}. ============= diff --git a/CMakeLists.txt b/CMakeLists.txt index 1c378685..fbd1dc91 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,17 +28,13 @@ add_definitions(-DPACKAGE_NAME="${CMAKE_PROJECT_NAME}") add_definitions(-DPACKAGE_VERSION="${VERSION}") add_definitions(-DLOCALEDIR="${CMAKE_INSTALL_PREFIX}/share/locale") -# Try to encode today's date into the build id. We assume that MSVC -# means we need to use a native Windows method, otherwise we assume -# some kind of Unix system. The id will be empty if things fail. -set(BUILD "") if(MSVC) - execute_process(COMMAND "${CMAKE_SOURCE_DIR}/cmake/getdate.bat" - OUTPUT_VARIABLE BUILD) -else() - execute_process(COMMAND "date" "+%Y%m%d" OUTPUT_VARIABLE BUILD) + message(FATAL "TigerVNC cannot be built with Visual Studio. Please use MinGW") endif() +set(BUILD "") +execute_process(COMMAND "date" "+%Y%m%d" OUTPUT_VARIABLE BUILD) + if(NOT BUILD) set(BUILD "") else() @@ -53,8 +49,6 @@ endif() message(STATUS "CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}") -# This only works if building from the command line. There is currently no way -# to set a variable's value based on the build type when using the MSVC IDE. if(CMAKE_BUILD_TYPE STREQUAL "Debug") set(BUILD "${BUILD}d") endif() @@ -66,27 +60,6 @@ if(NOT DEFINED BUILD_WINVNC) set(BUILD_WINVNC 1) endif() -if(MSVC) - # Use the static C library for all build types - foreach(var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE - CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO - CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE - CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) - if(${var} MATCHES "/MD") - string(REGEX REPLACE "/MD" "/MT" ${var} "${${var}}") - endif() - endforeach() - - # NOTE: 4244 and 4267 are 64-bit to 32-bit conversion warnings, so normally - # it is not a good idea to disable them, but we do this to duplicate the - # behavior of GCC, which is less strict. - add_definitions(-wd4244 -wd4267 -wd4800 -wd4996) - - # Avoid linker warning when doing Debug build if dependent libraries are - # linked with the Release version of the static C library. - set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:LIBCMT") -endif() - # Minimum version is Windows 2000 (5.0) if(WIN32) if(NOT CMAKE_SIZEOF_VOID_P MATCHES 8) @@ -163,7 +136,7 @@ endif() # MinGW64 has header support but no library support for IActiveDesktop, so we # need to check for both the header and library and use our own implementation -# in common/os if either doesn't exist. MSVC should have both. +# in common/os if either doesn't exist. if(WIN32) check_c_source_compiles("#include <windows.h>\n#include <wininet.h>\n#include <shlobj.h>\nint main(int c, char** v) {IActiveDesktop iad; return 0;}" HAVE_ACTIVE_DESKTOP_H) check_c_source_compiles("#include <windows.h>\n#include <wininet.h>\n#include <shlobj.h>\nint main(int c, char** v) {GUID i = CLSID_ActiveDesktop; return 0;}" HAVE_ACTIVE_DESKTOP_L) @@ -228,9 +201,6 @@ find_package(JPEG REQUIRED) # Warn if it doesn't seem to be the accelerated libjpeg that's found set(CMAKE_REQUIRED_LIBRARIES ${JPEG_LIBRARIES}) set(CMAKE_REQUIRED_FLAGS -I${JPEG_INCLUDE_DIR}) -if(MSVC) - set(CMAKE_REQUIRED_DEFINITIONS -MT) -endif() set(JPEG_TEST_SOURCE "\n #include <stdio.h>\n diff --git a/cmake/BuildPackages.cmake b/cmake/BuildPackages.cmake index 100ba05a..33043a31 100644 --- a/cmake/BuildPackages.cmake +++ b/cmake/BuildPackages.cmake @@ -15,14 +15,6 @@ else() set(INST_NAME ${CMAKE_PROJECT_NAME}-${VERSION}) endif() -if(MSVC_IDE) - set(INSTALLERDIR "$(OutDir)") - set(BUILDDIRDEF "-DBUILD_DIR=${INSTALLERDIR}\\") -else() - set(INSTALLERDIR .) - set(BUILDDIRDEF "-DBUILD_DIR=") -endif() - set(INST_DEPS vncviewer) if(BUILD_WINVNC) @@ -37,8 +29,7 @@ endif() configure_file(release/tigervnc.iss.in release/tigervnc.iss) add_custom_target(installer - iscc -o${INSTALLERDIR} ${INST_DEFS} ${BUILDDIRDEF} -F${INST_NAME} - release/tigervnc.iss + iscc -o. ${INST_DEFS} -DBUILD_DIR= -F${INST_NAME} release/tigervnc.iss DEPENDS ${INST_DEPS} SOURCES release/tigervnc.iss) diff --git a/cmake/getdate.bat b/cmake/getdate.bat deleted file mode 100644 index 09956baa..00000000 --- a/cmake/getdate.bat +++ /dev/null @@ -1,9 +0,0 @@ -@echo off - -if "%1"=="javadate" date /t & goto end -if "%1"=="javatime" time /t & goto end - -for /f "tokens=1-4 eol=/ DELIMS=/ " %%i in ('date /t') do set BUILD=%%l%%j%%k -echo %BUILD% - -:end diff --git a/java/CMakeLists.txt b/java/CMakeLists.txt index 4010aa61..9a8a6127 100644 --- a/java/CMakeLists.txt +++ b/java/CMakeLists.txt @@ -14,15 +14,8 @@ set(CLASSPATH com/tigervnc/vncviewer) set(JAVA_SRCDIR ${CMAKE_CURRENT_SOURCE_DIR}/${CLASSPATH}) set(JAVA_BINDIR ${CMAKE_CURRENT_BINARY_DIR}/${CLASSPATH}) -if(MSVC) - execute_process(COMMAND "${CMAKE_SOURCE_DIR}/cmake/getdate.bat" "javadate" - OUTPUT_VARIABLE JAVA_DATE) - execute_process(COMMAND "${CMAKE_SOURCE_DIR}/cmake/getdate.bat" "javatime" - OUTPUT_VARIABLE JAVA_TIME) -else() - execute_process(COMMAND "date" "+%b %d %Y" OUTPUT_VARIABLE JAVA_DATE) - execute_process(COMMAND "date" "+%H:%M:%S" OUTPUT_VARIABLE JAVA_TIME) -endif() +execute_process(COMMAND "date" "+%b %d %Y" OUTPUT_VARIABLE JAVA_DATE) +execute_process(COMMAND "date" "+%H:%M:%S" OUTPUT_VARIABLE JAVA_TIME) string(REGEX REPLACE "\n" "" JAVA_DATE ${JAVA_DATE}) string(REGEX REPLACE "\n" "" JAVA_TIME ${JAVA_TIME}) @@ -40,18 +33,12 @@ set(JAVA_CLASSNAMES UserPrefs VncViewer) -if(MSVC_IDE) - set(OBJDIR "${CMAKE_CURRENT_BINARY_DIR}/$(OutDir)") -else() - set(OBJDIR ${CMAKE_CURRENT_BINARY_DIR}) -endif() - set(JAVA_SOURCES "") set(JAVA_CLASSES_FULL "") foreach(class ${JAVA_CLASSNAMES}) set(JAVA_SOURCES ${JAVA_SOURCES} ${JAVA_SRCDIR}/${class}.java) set(JAVA_CLASSES_FULL ${JAVA_CLASSES_FULL} - ${OBJDIR}/${CLASSPATH}/${class}.class) + ${CMAKE_CURRENT_BINARY_DIR}/${CLASSPATH}/${class}.class) endforeach() file(GLOB DEPEND_SOURCES @@ -63,7 +50,8 @@ string(REGEX REPLACE " " ";" JAVACFLAGS "${JAVACFLAGS}") add_custom_command(OUTPUT ${JAVA_CLASSES_FULL} DEPENDS ${JAVA_SOURCES} ${DEPEND_SOURCES} COMMAND ${JAVA_COMPILE} - ARGS ${JAVACFLAGS} -cp ${CMAKE_CURRENT_SOURCE_DIR} -d ${OBJDIR} ${JAVA_SOURCES}) + ARGS ${JAVACFLAGS} -cp ${CMAKE_CURRENT_SOURCE_DIR} + -d ${CMAKE_CURRENT_BINARY_DIR} ${JAVA_SOURCES}) configure_file(${CLASSPATH}/timestamp.in ${CLASSPATH}/timestamp) @@ -99,8 +87,7 @@ add_custom_command(OUTPUT VncViewer.jar COMMAND ${CMAKE_COMMAND} ARGS -DJava_PATH=${Java_PATH} -DJAR_FILE=${CMAKE_CURRENT_BINARY_DIR}/VncViewer.jar - -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/SignJar.cmake - WORKING_DIRECTORY ${OBJDIR}) + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/SignJar.cmake) add_custom_target(java ALL DEPENDS VncViewer.jar) diff --git a/release/tigervnc.iss.in b/release/tigervnc.iss.in index 68d69dfa..71632b13 100644 --- a/release/tigervnc.iss.in +++ b/release/tigervnc.iss.in @@ -27,12 +27,6 @@ Source: "@CMAKE_CURRENT_BINARY_DIR@\win\vncconfig\{#BUILD_DIR}vncconfig.exe"; De Source: "@CMAKE_CURRENT_BINARY_DIR@\vncviewer\{#BUILD_DIR}vncviewer.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace; Source: "@CMAKE_SOURCE_DIR@\README.txt"; DestDir: "{app}"; Flags: ignoreversion Source: "@CMAKE_SOURCE_DIR@\LICENCE.TXT"; DestDir: "{app}"; Flags: ignoreversion -#ifdef HAVE_GNUTLS -Source: "@GNUTLS_INCLUDE_DIRS@\..\bin\libgnutls-*.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "@GNUTLS_INCLUDE_DIRS@\..\bin\libgcrypt-*.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "@GNUTLS_INCLUDE_DIRS@\..\bin\libtasn1-*.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "@GNUTLS_INCLUDE_DIRS@\..\bin\libgpg-error-*.dll"; DestDir: "{app}"; Flags: ignoreversion -#endif [Icons] diff --git a/win/vncconfig/CMakeLists.txt b/win/vncconfig/CMakeLists.txt index 9883dbd8..2cee4ee4 100644 --- a/win/vncconfig/CMakeLists.txt +++ b/win/vncconfig/CMakeLists.txt @@ -1,10 +1,5 @@ include_directories(${CMAKE_BINARY_DIR}/win) -# Disable auto-generated manifests, since we have our own -if(MSVC) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO") -endif() - add_executable(vncconfig WIN32 Legacy.cxx PasswordDialog.cxx diff --git a/win/winvnc/CMakeLists.txt b/win/winvnc/CMakeLists.txt index dd9117b5..72a007b4 100644 --- a/win/winvnc/CMakeLists.txt +++ b/win/winvnc/CMakeLists.txt @@ -1,19 +1,12 @@ include_directories(${CMAKE_BINARY_DIR}/win ${CMAKE_CURRENT_SOURCE_DIR}) -# Disable auto-generated manifests, since we have our own -if(MSVC) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO") -endif() - add_library(wm_hooks SHARED ../wm_hooks/wm_hooks.cxx ../wm_hooks/wm_hooks.def ../wm_hooks/wm_hooks.rc) # We want the DLL to be named wm_hooks.dll rather than libwm_hooks.dll -if(MINGW) - set_target_properties(wm_hooks PROPERTIES PREFIX "") -endif() +set_target_properties(wm_hooks PROPERTIES PREFIX "") set(VNCVIEWER_JAR_PATH ${CMAKE_BINARY_DIR}/java/VncViewer.jar) set(INDEX_VNC_PATH ${CMAKE_CURRENT_SOURCE_DIR}/index.vnc) |