From 180c0167b41bfcbfa33cd6a145ee0dc7b62505b2 Mon Sep 17 00:00:00 2001 From: DRC Date: Wed, 27 Oct 2010 07:20:27 +0000 Subject: [PATCH] CMake build system for Windows git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4171 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- CMakeLists.txt | 127 ++++++++++++ Makefile.am | 2 + cmakescripts/getdate.bat | 3 + common/CMakeLists.txt | 7 + common/Makefile.am | 2 + common/Xregion/CMakeLists.txt | 2 + common/Xregion/Makefile.am | 2 + common/jpeg/CMakeLists.txt | 117 +++++++++++ common/jpeg/Makefile.am | 12 ++ common/jpeg/simd/CMakeLists.txt | 62 ++++++ common/jpeg/simd/Makefile.am | 2 +- common/network/CMakeLists.txt | 4 + common/network/Makefile.am | 1 + common/os/CMakeLists.txt | 5 + common/os/Makefile.am | 1 + common/rdr/CMakeLists.txt | 17 ++ common/rdr/Makefile.am | 2 + common/rfb/CMakeLists.txt | 70 +++++++ common/rfb/Makefile.am | 2 + common/zlib/CMakeLists.txt | 18 ++ common/zlib/Makefile.am | 8 +- release/BUILDING.txt | 277 +++++++++++++++++++++++-- win/CMakeLists.txt | 12 ++ win/Makefile.am | 2 +- win/README_BINARY.txt | 1 + win/resdefs.h.in | 4 + win/rfb_win32/CMakeLists.txt | 48 +++++ win/rfb_win32/Makefile.am | 2 + win/{tigervnc.iss => tigervnc.iss.in} | 99 +++++---- win/vncconfig/CMakeLists.txt | 18 ++ win/vncconfig/Makefile.am | 2 +- win/vncconfig/vncconfig.exe.manifest64 | 22 ++ win/vncconfig/vncconfig.rc | 22 +- win/vncviewer/CMakeLists.txt | 28 +++ win/vncviewer/Makefile.am | 2 +- win/vncviewer/vncviewer.rc | 20 +- win/winvnc/CMakeLists.txt | 33 +++ win/winvnc/Makefile.am | 2 +- win/winvnc/winvnc.rc | 22 +- win/winvnc/winvnc4.exe.manifest64 | 22 ++ win/wm_hooks/wm_hooks.def | 2 +- win/wm_hooks/wm_hooks.rc | 16 +- 42 files changed, 1030 insertions(+), 92 deletions(-) create mode 100644 CMakeLists.txt create mode 100644 cmakescripts/getdate.bat create mode 100644 common/CMakeLists.txt create mode 100644 common/Xregion/CMakeLists.txt create mode 100644 common/jpeg/CMakeLists.txt create mode 100644 common/jpeg/simd/CMakeLists.txt create mode 100644 common/network/CMakeLists.txt create mode 100644 common/os/CMakeLists.txt create mode 100644 common/rdr/CMakeLists.txt create mode 100644 common/rfb/CMakeLists.txt create mode 100644 common/zlib/CMakeLists.txt create mode 100644 win/CMakeLists.txt create mode 100644 win/resdefs.h.in create mode 100644 win/rfb_win32/CMakeLists.txt rename win/{tigervnc.iss => tigervnc.iss.in} (58%) create mode 100644 win/vncconfig/CMakeLists.txt create mode 100644 win/vncconfig/vncconfig.exe.manifest64 create mode 100644 win/vncviewer/CMakeLists.txt create mode 100644 win/winvnc/CMakeLists.txt create mode 100644 win/winvnc/winvnc4.exe.manifest64 diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..f390767d --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,127 @@ +# +# Setup +# + +cmake_minimum_required(VERSION 2.6) + +project(TigerVNC) +set(VERSION 1.0.90) + +# The RC version must always be four comma-separated numbers +set(RCVERSION 1,0,90,0) + +if(MINGW OR CYGWIN) + execute_process(COMMAND "date" "+%Y%m%d" OUTPUT_VARIABLE BUILD) + string(REGEX REPLACE "\n" "" BUILD ${BUILD}) +elseif(WIN32) + execute_process(COMMAND "${CMAKE_SOURCE_DIR}/cmakescripts/getdate.bat" + OUTPUT_VARIABLE BUILD) + string(REGEX REPLACE "\n" "" BUILD ${BUILD}) +else() + message(FATAL_ERROR "Platform not supported by this build system. Use autotools instead.") +endif() + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +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() + +message(STATUS "VERSION = ${VERSION}, BUILD = ${BUILD}") + +if(NOT DEFINED BUILD_WINVNC) + if(MSVC) + set(BUILD_WINVNC 1) + else() + set(BUILD_WINVNC 0) + endif() +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) +endif() + +# Detect whether compiler is 64-bit +if((MSVC AND CMAKE_CL_64) OR (CMAKE_SIZEOF_VOID_P MATCHES 8)) + set(64BIT 1) + set(WIN64 1) +endif() + +if(64BIT) + message(STATUS "64-bit build") +else() + message(STATUS "32-bit build") +endif() + +# CMake doesn't properly support resource compilation with MinGW. Boo! +if(MINGW) + if(NOT DEFINED RC) + set(CMAKE_RC_COMPILER_INIT windres) + else() + set(CMAKE_RC_COMPILER_INIT ${RC}) + endif() + enable_language(RC) + message(STATUS "Resource compiler: ${CMAKE_RC_COMPILER}") + set(CMAKE_RC_COMPILE_OBJECT + " -o --output-format=coff ") +endif() + + +add_subdirectory(common) +add_subdirectory(win) + + +# +# Installer +# + +set(INST_NAME ${CMAKE_PROJECT_NAME}) + +if(64BIT) + set(INST_NAME ${INST_NAME}64) + set(INST_DEFS -DWIN64) +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) + set(INST_DEFS ${INST_DEFS} -DBUILD_WINVNC) + set(INST_DEPS ${INST_DEPS} winvnc4 wm_hooks vncconfig) +endif() + +configure_file(win/tigervnc.iss.in tigervnc.iss) + +add_custom_target(installer + iscc -o${INSTALLERDIR} ${INST_DEFS} ${BUILDDIRDEF} -F${INST_NAME} tigervnc.iss + DEPENDS ${INST_DEPS} + SOURCES tigervnc.iss) + +install(FILES ${CMAKE_SOURCE_DIR}/win/README_BINARY.txt + ${CMAKE_SOURCE_DIR}/LICENCE.txt DESTINATION .) diff --git a/Makefile.am b/Makefile.am index 9b7120e7..b7de812c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -18,3 +18,5 @@ endif dmg: all sh $(srcdir)/release/makemacpkg ${PACKAGE_NAME} ${VERSION} ${BUILD} ${srcdir} + +EXTRA_DIST = CMakeLists.txt cmakescripts/getdate.bat diff --git a/cmakescripts/getdate.bat b/cmakescripts/getdate.bat new file mode 100644 index 00000000..b4251bbb --- /dev/null +++ b/cmakescripts/getdate.bat @@ -0,0 +1,3 @@ +@echo off +for /f "tokens=1-4 eol=/ DELIMS=/ " %%i in ('date /t') do set BUILD=%%l%%j%%k +echo %BUILD% diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt new file mode 100644 index 00000000..aaede056 --- /dev/null +++ b/common/CMakeLists.txt @@ -0,0 +1,7 @@ +add_subdirectory(os) +add_subdirectory(zlib) +add_subdirectory(jpeg) +add_subdirectory(rdr) +add_subdirectory(network) +add_subdirectory(Xregion) +add_subdirectory(rfb) diff --git a/common/Makefile.am b/common/Makefile.am index d8058096..15400c29 100644 --- a/common/Makefile.am +++ b/common/Makefile.am @@ -8,3 +8,5 @@ SUBDIRS += jpeg endif SUBDIRS += rdr network Xregion rfb + +EXTRA_DIST = CMakeLists.txt diff --git a/common/Xregion/CMakeLists.txt b/common/Xregion/CMakeLists.txt new file mode 100644 index 00000000..d12554c4 --- /dev/null +++ b/common/Xregion/CMakeLists.txt @@ -0,0 +1,2 @@ +add_library(Xregion STATIC + Region.c) diff --git a/common/Xregion/Makefile.am b/common/Xregion/Makefile.am index fb6a1c74..7ea4c80f 100644 --- a/common/Xregion/Makefile.am +++ b/common/Xregion/Makefile.am @@ -3,3 +3,5 @@ noinst_LTLIBRARIES = libXregion.la HDRS = region.h Xregion.h libXregion_la_SOURCES = $(HDRS) Region.c + +EXTRA_DIST = CMakeLists.txt diff --git a/common/jpeg/CMakeLists.txt b/common/jpeg/CMakeLists.txt new file mode 100644 index 00000000..cd867e72 --- /dev/null +++ b/common/jpeg/CMakeLists.txt @@ -0,0 +1,117 @@ +# +# Setup +# + +cmake_minimum_required(VERSION 2.6) + +project(libjpeg-turbo) +set(VERSION 1.0.90) + +if(NOT DEFINED WITH_SIMD) + set(WITH_SIMD 1) +endif() + +# Detect whether compiler is 64-bit +if(MSVC AND CMAKE_CL_64) + set(SIMD_X86_64 1) + set(64BIT 1) +elseif(CMAKE_SIZEOF_VOID_P MATCHES 8) + set(SIMD_X86_64 1) + set(64BIT 1) +endif() + +if(64BIT) + message(STATUS "64-bit build") +else() + message(STATUS "32-bit build") +endif() + +include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/win) + + +# +# Targets +# + +set(JPEG_SOURCES jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c + jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c jcphuff.c + jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c jdatadst.c jdatasrc.c + jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c + jdmaster.c jdmerge.c jdphuff.c jdpostct.c jdsample.c jdtrans.c jerror.c + jfdctflt.c jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c + jquant1.c jquant2.c jutils.c jmemmgr.c jmemnobs.c) + +if(WITH_SIMD) + add_definitions(-DWITH_SIMD) + add_subdirectory(simd) + if(SIMD_X86_64) + set(JPEG_SOURCES ${JPEG_SOURCES} simd/jsimd_x86_64.c) + else() + set(JPEG_SOURCES ${JPEG_SOURCES} simd/jsimd_i386.c) + endif() + # This tells CMake that the "source" files haven't been generated yet + set_source_files_properties(${SIMD_OBJS} PROPERTIES GENERATED 1) +else() + set(JPEG_SOURCES ${JPEG_SOURCES} jsimd_none.c) + message(STATUS "Not using SIMD acceleration") +endif() + +add_library(jpeg STATIC ${JPEG_SOURCES} ${SIMD_OBJS}) +if(WITH_SIMD) + add_dependencies(jpeg simd) +endif() + +add_executable(jpegut jpegut.c turbojpegl.c) +target_link_libraries(jpegut jpeg) + +add_executable(jpgtest jpgtest.cxx bmp.c turbojpegl.c) +target_link_libraries(jpgtest jpeg) + +add_executable(cjpeg cjpeg.c cdjpeg.c rdbmp.c rdgif.c rdppm.c rdswitch.c + rdtarga.c) +set_property(TARGET cjpeg PROPERTY COMPILE_FLAGS + "-DBMP_SUPPORTED -DGIF_SUPPORTED -DPPM_SUPPORTED -DTARGA_SUPPORTED") +target_link_libraries(cjpeg jpeg) + +add_executable(djpeg djpeg.c cdjpeg.c rdcolmap.c rdswitch.c wrbmp.c wrgif.c + wrppm.c wrtarga.c) +set_property(TARGET djpeg PROPERTY COMPILE_FLAGS + "-DBMP_SUPPORTED -DGIF_SUPPORTED -DPPM_SUPPORTED -DTARGA_SUPPORTED") +target_link_libraries(djpeg jpeg) + +add_executable(jpegtran jpegtran.c cdjpeg.c rdswitch.c transupp.c) +target_link_libraries(jpegtran jpeg) + + +# +# Tests +# + +enable_testing() +add_test(jpegut jpegut) +add_test(cjpeg-int cjpeg -dct int -outfile testoutint.jpg ${CMAKE_CURRENT_SOURCE_DIR}/testorig.ppm) +add_test(cjpeg-int-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_CURRENT_SOURCE_DIR}/testimgint.jpg testoutint.jpg) +add_test(cjpeg-fast cjpeg -dct fast -opt -outfile testoutfst.jpg ${CMAKE_CURRENT_SOURCE_DIR}/testorig.ppm) +add_test(cjpeg-fast-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_CURRENT_SOURCE_DIR}/testimgfst.jpg testoutfst.jpg) +add_test(cjpeg-float cjpeg -dct float -outfile testoutflt.jpg ${CMAKE_CURRENT_SOURCE_DIR}/testorig.ppm) +if(WITH_SIMD) +add_test(cjpeg-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_CURRENT_SOURCE_DIR}/testimgflt.jpg testoutflt.jpg) +else() +add_test(cjpeg-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_CURRENT_SOURCE_DIR}/testimgflt-nosimd.jpg testoutflt.jpg) +endif() +add_test(djpeg-int djpeg -dct int -fast -ppm -outfile testoutint.ppm ${CMAKE_CURRENT_SOURCE_DIR}/testorig.jpg) +add_test(djpeg-int-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_CURRENT_SOURCE_DIR}/testimgint.ppm testoutint.ppm) +add_test(djpeg-fast djpeg -dct fast -ppm -outfile testoutfst.ppm ${CMAKE_CURRENT_SOURCE_DIR}/testorig.jpg) +add_test(djpeg-fast-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_CURRENT_SOURCE_DIR}/testimgfst.ppm testoutfst.ppm) +add_test(djpeg-float djpeg -dct float -ppm -outfile testoutflt.ppm ${CMAKE_CURRENT_SOURCE_DIR}/testorig.jpg) +if(WITH_SIMD) +add_test(djpeg-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_CURRENT_SOURCE_DIR}/testimgflt.ppm testoutflt.ppm) +else() +add_test(djpeg-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_CURRENT_SOURCE_DIR}/testorig.ppm testoutflt.ppm) +endif() +add_test(djpeg-256 djpeg -dct int -bmp -colors 256 -outfile testout.bmp ${CMAKE_CURRENT_SOURCE_DIR}/testorig.jpg) +add_test(djpeg-256-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_CURRENT_SOURCE_DIR}/testimg.bmp testout.bmp) +add_test(cjpeg-prog cjpeg -dct int -progressive -outfile testoutp.jpg ${CMAKE_CURRENT_SOURCE_DIR}/testorig.ppm) +add_test(cjpeg-prog-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_CURRENT_SOURCE_DIR}/testimgp.jpg testoutp.jpg) +add_test(jpegtran-prog jpegtran -outfile testoutt.jpg testoutp.jpg) +add_test(jpegtran-prog-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_CURRENT_SOURCE_DIR}/testimgint.jpg testoutt.jpg) diff --git a/common/jpeg/Makefile.am b/common/jpeg/Makefile.am index bae191ae..cd1c2212 100644 --- a/common/jpeg/Makefile.am +++ b/common/jpeg/Makefile.am @@ -57,6 +57,18 @@ jpegtran_SOURCES = jpegtran.c rdswitch.c cdjpeg.c transupp.c transupp.h jpegtran_LDADD = libjpeg.la +DOCS= README README-turbo.txt LICENSE.txt LGPL.txt + +TESTFILES= testorig.jpg testorig.ppm testimg.bmp testimgflt.jpg \ + testimgfst.jpg testimgint.jpg testimgp.jpg testimgflt.ppm testimgfst.ppm \ + testimgint.ppm testimgflt-nosimd.jpg + +EXTRA_DIST = win $(DOCS) $(TESTFILES) CMakeLists.txt + +dist-hook: + rm -rf `find $(distdir) -name .svn` + + if WITH_SIMD test: testclean all diff --git a/common/jpeg/simd/CMakeLists.txt b/common/jpeg/simd/CMakeLists.txt new file mode 100644 index 00000000..5be325e9 --- /dev/null +++ b/common/jpeg/simd/CMakeLists.txt @@ -0,0 +1,62 @@ +if(NOT DEFINED NASM) + set(NASM nasm) +endif() + +if(SIMD_X86_64) + set(NAFLAGS -fwin64 -DWIN64 -D__x86_64__ -I${CMAKE_SOURCE_DIR}/win/ + -I${CMAKE_CURRENT_SOURCE_DIR}/) +else() + set(NAFLAGS -fwin32 -DWIN32 -I${CMAKE_SOURCE_DIR}/win/ + -I${CMAKE_CURRENT_SOURCE_DIR}/) +endif() + +if(MSVC) + set(NAFLAGS ${NAFLAGS} -DMSVC) +endif() + +# 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" + OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") + set(NAFLAGS ${NAFLAGS} -g) +endif() + +if(SIMD_X86_64) + set(SIMD_BASENAMES jfsseflt-64 jccolss2-64 jdcolss2-64 jcsamss2-64 + jdsamss2-64 jdmerss2-64 jcqnts2i-64 jfss2fst-64 jfss2int-64 jiss2red-64 + jiss2int-64 jiss2fst-64 jcqnts2f-64 jiss2flt-64) + message(STATUS "Building x86_64 SIMD extensions") +else() + set(SIMD_BASENAMES jsimdcpu jccolmmx jdcolmmx jcsammmx jdsammmx jdmermmx + jcqntmmx jfmmxfst jfmmxint jimmxred jimmxint jimmxfst jcqnt3dn jf3dnflt + ji3dnflt jcqntsse jfsseflt jisseflt jccolss2 jdcolss2 jcsamss2 jdsamss2 + jdmerss2 jcqnts2i jfss2fst jfss2int jiss2red jiss2int jiss2fst jcqnts2f + jiss2flt) + message(STATUS "Building i386 SIMD extensions") +endif() + +if(MSVC_IDE) + set(OBJDIR "${CMAKE_CURRENT_BINARY_DIR}/$(OutDir)") +else() + set(OBJDIR ${CMAKE_CURRENT_BINARY_DIR}) +endif() + +foreach(file ${SIMD_BASENAMES}) + set(DEPFILE "") + set(SIMD_SRC ${CMAKE_CURRENT_SOURCE_DIR}/${file}.asm) + if(${file} MATCHES col) + set(DEPFILE ${SIMD_SRC}) + string(REGEX REPLACE "col" "clr" DEPFILE ${DEPFILE}) + endif() + if(${file} MATCHES mer) + set(DEPFILE ${SIMD_SRC}) + string(REGEX REPLACE "mer" "mrg" DEPFILE ${DEPFILE}) + endif() + set(SIMD_OBJ ${OBJDIR}/${file}.obj) + add_custom_command(OUTPUT ${SIMD_OBJ} DEPENDS ${SIMD_SRC} ${DEPFILE} *.inc + COMMAND ${NASM} ${NAFLAGS} ${SIMD_SRC} -o${SIMD_OBJ}) + set(SIMD_OBJS ${SIMD_OBJS} ${SIMD_OBJ}) +endforeach() + +set(SIMD_OBJS ${SIMD_OBJS} PARENT_SCOPE) +add_custom_target(simd DEPENDS ${SIMD_OBJS}) diff --git a/common/jpeg/simd/Makefile.am b/common/jpeg/simd/Makefile.am index a114c371..81c23af8 100644 --- a/common/jpeg/simd/Makefile.am +++ b/common/jpeg/simd/Makefile.am @@ -4,7 +4,7 @@ BUILT_SOURCES = jsimdcfg.inc EXTRA_DIST = nasm_lt.sh jcclrmmx.asm jcclrss2.asm jdclrmmx.asm jdclrss2.asm \ jdmrgmmx.asm jdmrgss2.asm jcclrss2-64.asm jdclrss2-64.asm \ - jdmrgss2-64.asm + jdmrgss2-64.asm CMakeLists.txt if SIMD_X86_64 diff --git a/common/network/CMakeLists.txt b/common/network/CMakeLists.txt new file mode 100644 index 00000000..2afba7c0 --- /dev/null +++ b/common/network/CMakeLists.txt @@ -0,0 +1,4 @@ +include_directories(${CMAKE_SOURCE_DIR}/common) + +add_library(network STATIC + TcpSocket.cxx) diff --git a/common/network/Makefile.am b/common/network/Makefile.am index 3db55362..ab8d5ae8 100644 --- a/common/network/Makefile.am +++ b/common/network/Makefile.am @@ -6,3 +6,4 @@ libnetwork_la_SOURCES = $(HDRS) TcpSocket.cxx libnetwork_la_CPPFLAGS = -I$(top_srcdir)/common +EXTRA_DIST = CMakeLists.txt diff --git a/common/os/CMakeLists.txt b/common/os/CMakeLists.txt new file mode 100644 index 00000000..bbeec501 --- /dev/null +++ b/common/os/CMakeLists.txt @@ -0,0 +1,5 @@ +include_directories(${CMAKE_SOURCE_DIR}/common) + +add_library(os STATIC + print.c + net.c) diff --git a/common/os/Makefile.am b/common/os/Makefile.am index 5e372906..ed98579d 100644 --- a/common/os/Makefile.am +++ b/common/os/Makefile.am @@ -6,3 +6,4 @@ libos_la_SOURCES = $(HDRS) print.c net.c libos_la_CPPFLAGS = -I$(top_srcdir)/common +EXTRA_DIST = CMakeLists.txt diff --git a/common/rdr/CMakeLists.txt b/common/rdr/CMakeLists.txt new file mode 100644 index 00000000..2872fd71 --- /dev/null +++ b/common/rdr/CMakeLists.txt @@ -0,0 +1,17 @@ +include_directories(${CMAKE_SOURCE_DIR}/common ${CMAKE_SOURCE_DIR}/common/zlib) + +add_library(rdr STATIC + Exception.cxx + FdInStream.cxx + FdOutStream.cxx + HexInStream.cxx + HexOutStream.cxx + InStream.cxx + RandomStream.cxx + TLSException.cxx + TLSInStream.cxx + TLSOutStream.cxx + ZlibInStream.cxx + ZlibOutStream.cxx) + +target_link_libraries(rdr zlib os) diff --git a/common/rdr/Makefile.am b/common/rdr/Makefile.am index ff741c8b..ef911c24 100644 --- a/common/rdr/Makefile.am +++ b/common/rdr/Makefile.am @@ -18,3 +18,5 @@ if INCLUDED_ZLIB librdr_la_CPPFLAGS += -I$(top_srcdir)/common/zlib librdr_la_LIBADD += $(top_builddir)/common/zlib/libz.la endif + +EXTRA_DIST = CMakeLists.txt diff --git a/common/rfb/CMakeLists.txt b/common/rfb/CMakeLists.txt new file mode 100644 index 00000000..6bfb5fef --- /dev/null +++ b/common/rfb/CMakeLists.txt @@ -0,0 +1,70 @@ +include_directories(${CMAKE_SOURCE_DIR}/common ${CMAKE_SOURCE_DIR}/win + ${CMAKE_SOURCE_DIR}/common/jpeg ${CMAKE_SOURCE_DIR}/common/jpeg/win) + +add_library(rfb STATIC + Blacklist.cxx + CConnection.cxx + CMsgHandler.cxx + CMsgReader.cxx + CMsgReaderV3.cxx + CMsgWriter.cxx + CMsgWriterV3.cxx + CSecurityPlain.cxx + CSecurityStack.cxx + CSecurityVeNCrypt.cxx + CSecurityVncAuth.cxx + CapsContainer.cxx + CapsList.cxx + ComparingUpdateTracker.cxx + Configuration.cxx + ConnParams.cxx + Cursor.cxx + Decoder.cxx + d3des.c + Encoder.cxx + HTTPServer.cxx + HextileDecoder.cxx + HextileEncoder.cxx + KeyRemapper.cxx + LogWriter.cxx + Logger.cxx + Logger_file.cxx + Logger_stdio.cxx + Password.cxx + PixelBuffer.cxx + PixelFormat.cxx + RREEncoder.cxx + RREDecoder.cxx + RawDecoder.cxx + RawEncoder.cxx + Region.cxx + SConnection.cxx + SMsgHandler.cxx + SMsgReader.cxx + SMsgReaderV3.cxx + SMsgWriter.cxx + SMsgWriterV3.cxx + ServerCore.cxx + Security.cxx + SecurityServer.cxx + SecurityClient.cxx + SSecurityPlain.cxx + SSecurityStack.cxx + SSecurityVncAuth.cxx + SSecurityVeNCrypt.cxx + ScaledPixelBuffer.cxx + ScaleFilters.cxx + Timer.cxx + TightDecoder.cxx + TightEncoder.cxx + TightPalette.cxx + TransImageGetter.cxx + UpdateTracker.cxx + VNCSConnectionST.cxx + VNCServerST.cxx + ZRLEEncoder.cxx + ZRLEDecoder.cxx + encodings.cxx + util.cxx) + +target_link_libraries(rfb jpeg os) diff --git a/common/rfb/Makefile.am b/common/rfb/Makefile.am index ce196c6e..796c10b6 100644 --- a/common/rfb/Makefile.am +++ b/common/rfb/Makefile.am @@ -66,3 +66,5 @@ if INCLUDED_JPEG librfb_la_CPPFLAGS += -I$(top_srcdir)/common/jpeg -I$(top_builddir)/common/jpeg librfb_la_LIBADD += $(top_builddir)/common/jpeg/libjpeg.la endif + +EXTRA_DIST = CMakeLists.txt diff --git a/common/zlib/CMakeLists.txt b/common/zlib/CMakeLists.txt new file mode 100644 index 00000000..3f1db1b8 --- /dev/null +++ b/common/zlib/CMakeLists.txt @@ -0,0 +1,18 @@ +add_definitions(-DNO_VIZ -DWINDOWS) + +add_library(zlib STATIC + adler32.c + compress.c + crc32.c + deflate.c + gzclose.c + gzlib.c + gzread.c + gzwrite.c + inflate.c + infback.c + inftrees.c + inffast.c + trees.c + uncompr.c + zutil.c) diff --git a/common/zlib/Makefile.am b/common/zlib/Makefile.am index a8c73184..743ac5c0 100644 --- a/common/zlib/Makefile.am +++ b/common/zlib/Makefile.am @@ -3,6 +3,8 @@ noinst_LTLIBRARIES = libz.la HDRS = deflate.h infblock.h infcodes.h inffast.h inffixed.h inftrees.h \ infutil.h trees.h zconf.h zlib.h zutil.h -libz_la_SOURCES = $(HDRS) adler32.c compress.c crc32.c deflate.c gzclose.c \ - gzlib.c gzread.c gzwrite.c inflate.c infback.c inftrees.c inffast.c \ - trees.c uncompr.c zutil.c +libz_la_SOURCES = $(HDRS) adler32.c compress.c crc32.c deflate.c gzclose.c \ + gzlib.c gzread.c gzwrite.c inflate.c infback.c inftrees.c inffast.c \ + trees.c uncompr.c zutil.c + +EXTRA_DIST = CMakeLists.txt diff --git a/release/BUILDING.txt b/release/BUILDING.txt index 4dc84412..6c08bc31 100644 --- a/release/BUILDING.txt +++ b/release/BUILDING.txt @@ -1,5 +1,5 @@ ******************************************************************************* -** Building TigerVNC +** Building on Unix Platforms (including Cygwin) ******************************************************************************* @@ -8,9 +8,7 @@ Build Requirements ================== -- autoconf 2.57 or later - -- automake 1.7 or later - -- libtool 1.4 or later -- NASM @@ -19,9 +17,9 @@ Build Requirements * NASM 2.07 or later is required for a 64-bit build on OS X. This can be obtained from MacPorts (http://www.macports.org/). - The NASM 2.05 RPMs do not work on older Linux systems, such as Enterprise - Linux 4. On such systems, you can easily build and install NASM 2.05 - from the source RPM by executing the following as root: + The NASM 2.05 RPMs do not work on older Linux systems, such as Red Hat + Enterprise Linux 4. On such systems, you can easily build and install NASM + 2.05 from the source RPM by executing the following as root: ARCH=`uname -m` wget http://www.nasm.us/pub/nasm/releasebuilds/2.05.01/nasm-2.05.01-1.src.rpm @@ -40,6 +38,20 @@ Build Requirements * OpenSSL v0.9.7 or later +================== +Out-of-Tree Builds +================== + +Binary objects, libraries, and executables are generated in the same directory +from which configure 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 ================= @@ -49,13 +61,14 @@ systems. On 64-bit systems, this may build a 32-bit version of TigerVNC, depending on the default compiler configuration for your system. See below for specific build instructions for 64-bit systems. - cd tigervnc + cd {source_directory} autoreconf -fiv - sh ./configure [additional configure flags] + cd {build_directory} + sh {source_directory}/configure [additional configure flags] make -NOTE: Running autoreconf is only necessary if building TigerVNC from the SVN -repository. +NOTE: Running autoreconf in the source directory is only necessary if building +TigerVNC from the SVN repository. Building the TigerVNC server (Xvnc) is a bit trickier. On newer systems, such as Fedora, Xvnc is typically built to use the X11 shared libraries provided @@ -70,15 +83,15 @@ distribution automates this process. The following procedure will build both the TigerVNC viewer and a "legacy-friendly" version of the TigerVNC server: - cd tigervnc - unix/build-xorg init -version 7.4 - unix/build-xorg build -version 7.4 [-static] [additional configure flags] + cd {build_directory} + sh {source_directory}/unix/build-xorg init -version 7.4 + sh {source_directory}/unix/build-xorg build -version 7.4 [-static] [additional configure flags] Passing an argument of "-static" to the build command line will generate 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. The legacy-friendly -build should work on RedHat Enterprise 4, its contemporaries, and later +build 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). @@ -87,11 +100,11 @@ once the X11 modules and other dependencies have been built the first time. This is convenient for testing changes that just apply to the TigerVNC source code. To accomplish this, run: - unix/build-xorg rebuild [additional make flags] + sh {source_directory}/unix/build-xorg rebuild [additional make flags] For instance, - unix/build-xorg rebuild clean + 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. @@ -109,7 +122,7 @@ Add --host i686-pc-linux-gnu CFLAGS='-O3 -m32' CXXFLAGS='-O3 -m32' LDFLAGS=-m32 -to the configure and build command lines. +to the configure or build command lines. 64-bit Build on 64-bit OS X @@ -188,12 +201,220 @@ GnuTLS, add the following monstrosity to the configure command line: /opt/local/lib/libintl.a -framework CoreFoundation' +******************************************************************************* +** Building on Windows (Visual C++ or MinGW) +******************************************************************************* + + +================== +Build Requirements +================== + +-- CMake (http://www.cmake.org) v2.6 or later + +-- 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 + + GCC v4.1 or later recommended for best performance + +-- NASM (http://www.nasm.us/) 0.98 or later (NASM 2.05 or later is required for + a 64-bit build) + +-- 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. + + +================== +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 +================= + + +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.) + + +=================== +Installing TigerVNC +=================== + +You can use the build system to install TigerVNC into a directory of your +choosing (as opposed to creating an installer.) To do this, add: + + -DCMAKE_INSTALL_PREFIX={install_directory} + +to the cmake command line. + +For example, + + cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=c:\TigerVNC {source_directory} + nmake install + +If you don't specify CMAKE_INSTALL_PREFIX, then the default is +c:\Program Files\TigerVNC. + + +============= +Build Recipes +============= + + +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 + + ******************************************************************************* ** Creating Release Packages ******************************************************************************* The following commands can be used to create various types of release packages: + +Unix +---- + make dmg Create Macintosh package/disk image. This requires the PackageMaker @@ -207,3 +428,25 @@ make udmg later (OS X 10.4 compatibility SDK required.) If building on OS X 10.6 ("Snow Leopard") or later, the 64-bit fork can be made backward compatible with 10.5 by using the instructions in the "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\). diff --git a/win/CMakeLists.txt b/win/CMakeLists.txt new file mode 100644 index 00000000..ee0a5c02 --- /dev/null +++ b/win/CMakeLists.txt @@ -0,0 +1,12 @@ +add_definitions(-D_WIN32_IE=0x0500 -D_WIN32_WINNT=0x0500) + +include_directories(${CMAKE_SOURCE_DIR}/common ${CMAKE_SOURCE_DIR}/win) + +configure_file(resdefs.h.in resdefs.h) + +add_subdirectory(rfb_win32) +add_subdirectory(vncviewer) +if(BUILD_WINVNC) +add_subdirectory(vncconfig) +add_subdirectory(winvnc) +endif() diff --git a/win/Makefile.am b/win/Makefile.am index 7f2d96cc..372b6991 100644 --- a/win/Makefile.am +++ b/win/Makefile.am @@ -4,4 +4,4 @@ if BUILD_WINVNC SUBDIRS += vncconfig winvnc endif -EXTRA_DIST = logmessages/messages.h +EXTRA_DIST = logmessages/messages.h CMakeLists.txt diff --git a/win/README_BINARY.txt b/win/README_BINARY.txt index 36dff100..fbef3521 100644 --- a/win/README_BINARY.txt +++ b/win/README_BINARY.txt @@ -5,6 +5,7 @@ TigerVNC Binary Distribution for Windows platforms Copyright (C) 2002-2004 RealVNC Ltd. All Rights Reserved. Copyright (C) 2000-2004 Constantin Kaplinsky. Copyright (C) 2004-2009 Peter Astrand for Cendio AB +Copyright (C) 2009-2010 D. R. Commander This software is distributed under the GNU General Public Licence as published by the Free Software Foundation. See the file LICENCE.TXT diff --git a/win/resdefs.h.in b/win/resdefs.h.in new file mode 100644 index 00000000..b61db53e --- /dev/null +++ b/win/resdefs.h.in @@ -0,0 +1,4 @@ +#define __VERSIONSTR "@VERSION@\0" +#define __RCVERSION @RCVERSION@ +#define __RCVERSIONSTR "@RCVERSION@\0" +#cmakedefine WIN64 diff --git a/win/rfb_win32/CMakeLists.txt b/win/rfb_win32/CMakeLists.txt new file mode 100644 index 00000000..60af6db5 --- /dev/null +++ b/win/rfb_win32/CMakeLists.txt @@ -0,0 +1,48 @@ +set(RFB_WIN32_SOURCES + AboutDialog.cxx + CKeyboard.cxx + Clipboard.cxx + CPointer.cxx + CurrentUser.cxx + DeviceContext.cxx + DeviceFrameBuffer.cxx + Dialog.cxx + DIBSectionBuffer.cxx + DynamicFn.cxx + EventManager.cxx + LaunchProcess.cxx + ListViewControl.cxx + LowLevelKeyEvents.cxx + MonitorInfo.cxx + MsgWindow.cxx + OSVersion.cxx + ProgressControl.cxx + RegConfig.cxx + Registry.cxx + ScaledDIBSectionBuffer.cxx + SDisplayCorePolling.cxx + SDisplayCoreWMHooks.cxx + SDisplay.cxx + Security.cxx + Service.cxx + SInput.cxx + SocketManager.cxx + TCharArray.cxx + Threading.cxx + ToolBar.cxx + TsSessions.cxx + Win32Util.cxx + WMCursor.cxx + WMHooks.cxx + WMNotifier.cxx + WMPoller.cxx + WMShatter.cxx + WMWindowCopyRect.cxx) + +if(BUILD_WINVNC) + set(RFB_WIN32_SOURCES ${RFB_WIN32_SOURCES} CleanDesktop.cxx) +endif() + +add_library(rfb_win32 STATIC ${RFB_WIN32_SOURCES}) + +target_link_libraries(rfb_win32 user32.lib comctl32.lib version.lib) diff --git a/win/rfb_win32/Makefile.am b/win/rfb_win32/Makefile.am index 74f74e8e..80d9286f 100644 --- a/win/rfb_win32/Makefile.am +++ b/win/rfb_win32/Makefile.am @@ -104,3 +104,5 @@ endif librfb_win32_la_CPPFLAGS = -I$(top_srcdir)/common -I$(top_srcdir)/win librfb_win32_la_LIBADD = + +EXTRA_DIST = CMakeLists.txt diff --git a/win/tigervnc.iss b/win/tigervnc.iss.in similarity index 58% rename from win/tigervnc.iss rename to win/tigervnc.iss.in index ae7697af..2d967a45 100644 --- a/win/tigervnc.iss +++ b/win/tigervnc.iss.in @@ -1,42 +1,57 @@ - -[Setup] -OutputDir=. -AppName=TigerVNC -AppVerName=TigerVNC 1.0.90 -AppVersion=1.0.90 -AppPublisher=TigerVNC project -AppPublisherURL=http://tigervnc.org -DefaultDirName={pf}\TigerVNC -DefaultGroupName=TigerVNC -LicenseFile=LICENCE.txt - -[Files] -Source: "Release\winvnc4.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace; -Source: "Release\wm_hooks.dll"; DestDir: "{app}"; Flags: ignoreversion restartreplace; -Source: "Release\vncviewer.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace; -Source: "Release\vncconfig.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace; -Source: "README_BINARY.txt"; DestDir: "{app}"; Flags: ignoreversion -Source: "LICENCE.txt"; DestDir: "{app}"; Flags: ignoreversion - - -[Icons] -Name: "{group}\TigerVNC Viewer"; FileName: "{app}\vncviewer.exe"; -Name: "{group}\Listening TigerVNC Viewer"; FileName: "{app}\vncviewer.exe"; Parameters: "-listen"; - -Name: "{group}\VNC Server (User-Mode)\Run VNC Server"; FileName: "{app}\winvnc4.exe"; Parameters: "-noconsole"; -Name: "{group}\VNC Server (User-Mode)\Configure VNC Server"; FileName: "{app}\vncconfig.exe"; Parameters: "-user"; - -Name: "{group}\VNC Server (Service-Mode)\Configure VNC Service"; FileName: "{app}\vncconfig.exe"; Parameters: "-noconsole -service"; -Name: "{group}\VNC Server (Service-Mode)\Register VNC Service"; FileName: "{app}\winvnc4.exe"; Parameters: "-register"; -Name: "{group}\VNC Server (Service-Mode)\Unregister VNC Service"; FileName: "{app}\winvnc4.exe"; Parameters: "-unregister"; -Name: "{group}\VNC Server (Service-Mode)\Start VNC Service"; FileName: "{app}\winvnc4.exe"; Parameters: "-noconsole -start"; -Name: "{group}\VNC Server (Service-Mode)\Stop VNC Service"; FileName: "{app}\winvnc4.exe"; Parameters: "-noconsole -stop"; -Name: "{group}\License"; FileName: "{app}\LICENCE.txt"; - -[Tasks] -Name: installservice; Description: "&Register new TigerVNC Server as a system service"; GroupDescription: "Server configuration:"; -Name: startservice; Description: "&Start or restart TigerVNC service"; GroupDescription: "Server configuration:"; - -[Run] -Filename: "{app}\winvnc4.exe"; Parameters: "-register"; Tasks: installservice -Filename: "net"; Parameters: "start winvnc4"; Tasks: startservice +[Setup] +#ifdef WIN64 +ArchitecturesInstallIn64BitMode=x64 +AppName=TigerVNC 64-bit +AppVerName=TigerVNC 64-bit @VERSION@ (@BUILD@) +#else +AppName=TigerVNC +AppVerName=TigerVNC v@VERSION@ (@BUILD@) +#endif +AppVersion=@VERSION@ +AppPublisher=TigerVNC project +AppPublisherURL=http://tigervnc.org +DefaultDirName={pf}\TigerVNC +#ifdef WIN64 +DefaultGroupName=TigerVNC 64-bit +#else +DefaultGroupName=TigerVNC +#endif +LicenseFile=@CMAKE_SOURCE_DIR@\LICENCE.txt + +[Files] +#ifdef BUILD_WINVNC +Source: "@CMAKE_CURRENT_BINARY_DIR@\win\winvnc\{#BUILD_DIR}winvnc4.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace; +Source: "@CMAKE_CURRENT_BINARY_DIR@\win\winvnc\{#BUILD_DIR}wm_hooks.dll"; DestDir: "{app}"; Flags: ignoreversion restartreplace; +Source: "@CMAKE_CURRENT_BINARY_DIR@\win\vncconfig\{#BUILD_DIR}vncconfig.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace; +#endif +Source: "@CMAKE_CURRENT_BINARY_DIR@\win\vncviewer\{#BUILD_DIR}vncviewer.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace; +Source: "@CMAKE_SOURCE_DIR@\win\README_BINARY.txt"; DestDir: "{app}"; Flags: ignoreversion +Source: "@CMAKE_SOURCE_DIR@\LICENCE.txt"; DestDir: "{app}"; Flags: ignoreversion + + +[Icons] +Name: "{group}\TigerVNC Viewer"; FileName: "{app}\vncviewer.exe"; +Name: "{group}\Listening TigerVNC Viewer"; FileName: "{app}\vncviewer.exe"; Parameters: "-listen"; + +#ifdef BUILD_WINVNC +Name: "{group}\VNC Server (User-Mode)\Run VNC Server"; FileName: "{app}\winvnc4.exe"; Parameters: "-noconsole"; +Name: "{group}\VNC Server (User-Mode)\Configure VNC Server"; FileName: "{app}\vncconfig.exe"; Parameters: "-user"; + +Name: "{group}\VNC Server (Service-Mode)\Configure VNC Service"; FileName: "{app}\vncconfig.exe"; Parameters: "-noconsole -service"; +Name: "{group}\VNC Server (Service-Mode)\Register VNC Service"; FileName: "{app}\winvnc4.exe"; Parameters: "-register"; +Name: "{group}\VNC Server (Service-Mode)\Unregister VNC Service"; FileName: "{app}\winvnc4.exe"; Parameters: "-unregister"; +Name: "{group}\VNC Server (Service-Mode)\Start VNC Service"; FileName: "{app}\winvnc4.exe"; Parameters: "-noconsole -start"; +Name: "{group}\VNC Server (Service-Mode)\Stop VNC Service"; FileName: "{app}\winvnc4.exe"; Parameters: "-noconsole -stop"; +#endif +Name: "{group}\License"; FileName: "{app}\LICENCE.txt"; +Name: "{group}\Uninstall TigerVNC"; FileName: "{uninstallexe}"; WorkingDir: "{app}"; + +#ifdef BUILD_WINVNC +[Tasks] +Name: installservice; Description: "&Register new TigerVNC Server as a system service"; GroupDescription: "Server configuration:"; +Name: startservice; Description: "&Start or restart TigerVNC service"; GroupDescription: "Server configuration:"; + +[Run] +Filename: "{app}\winvnc4.exe"; Parameters: "-register"; Tasks: installservice +Filename: "net"; Parameters: "start winvnc4"; Tasks: startservice +#endif diff --git a/win/vncconfig/CMakeLists.txt b/win/vncconfig/CMakeLists.txt new file mode 100644 index 00000000..9883dbd8 --- /dev/null +++ b/win/vncconfig/CMakeLists.txt @@ -0,0 +1,18 @@ +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 + vncconfig.cxx + vncconfig.rc) + +target_link_libraries(vncconfig rfb_win32 rfb Xregion network rdr ws2_32.lib) + +install(TARGETS vncconfig + RUNTIME DESTINATION . +) diff --git a/win/vncconfig/Makefile.am b/win/vncconfig/Makefile.am index 84d1b0ff..b22b28c1 100644 --- a/win/vncconfig/Makefile.am +++ b/win/vncconfig/Makefile.am @@ -14,7 +14,7 @@ vncconfig_LDADD = $(top_builddir)/win/rfb_win32/librfb_win32.la \ $(top_builddir)/common/rdr/librdr.la -lws2_32 -lgdi32 -lversion -lole32 \ -lcomctl32 resources.o -EXTRA_DIST = vncconfig.ico vncconfig.rc vncconfig.exe.manifest +EXTRA_DIST = vncconfig.ico vncconfig.rc vncconfig.exe.manifest CMakeLists.txt resources.o: vncconfig.rc $(WINDRES) $^ -o $@ diff --git a/win/vncconfig/vncconfig.exe.manifest64 b/win/vncconfig/vncconfig.exe.manifest64 new file mode 100644 index 00000000..10eefa30 --- /dev/null +++ b/win/vncconfig/vncconfig.exe.manifest64 @@ -0,0 +1,22 @@ + + + +.NET control deployment tool + + + + + + diff --git a/win/vncconfig/vncconfig.rc b/win/vncconfig/vncconfig.rc index 7292f1a5..df6cfdde 100644 --- a/win/vncconfig/vncconfig.rc +++ b/win/vncconfig/vncconfig.rc @@ -1,6 +1,7 @@ //Microsoft Developer Studio generated resource script. // #include "resource.h" +#include "resdefs.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// @@ -438,8 +439,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,90,0 - PRODUCTVERSION 1,0,90,0 + FILEVERSION __RCVERSION + PRODUCTVERSION __RCVERSION FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -456,15 +457,20 @@ BEGIN BEGIN VALUE "Comments", "\0" VALUE "CompanyName", "TigerVNC Project\0" + #ifdef WIN64 + VALUE "FileDescription", "TigerVNC Server Configuration Applet for Win64\0" + VALUE "ProductName", "TigerVNC Server Configuration Applet for Win64\0" + #else VALUE "FileDescription", "TigerVNC Server Configuration Applet for Win32\0" - VALUE "FileVersion", "1.0.90\0" + VALUE "ProductName", "TigerVNC Server Configuration Applet for Win32\0" + #endif + VALUE "FileVersion", __RCVERSIONSTR VALUE "InternalName", "vncconfig\0" - VALUE "LegalCopyright", "Copyright (C) 1998-2009 [many holders]\0" + VALUE "LegalCopyright", "Copyright (C) 1998-2010 [many holders]\0" VALUE "LegalTrademarks", "TigerVNC\0" VALUE "OriginalFilename", "vncconfig.exe\0" VALUE "PrivateBuild", "\0" - VALUE "ProductName", "TigerVNC Configurator\0" - VALUE "ProductVersion", "1.0.90\0" + VALUE "ProductVersion", __VERSIONSTR VALUE "SpecialBuild", "\0" END END @@ -482,7 +488,11 @@ END // 24 // +#ifdef WIN64 +IDR_MANIFEST 24 DISCARDABLE "vncconfig.exe.manifest64" +#else IDR_MANIFEST 24 DISCARDABLE "vncconfig.exe.manifest" +#endif #endif // English (U.K.) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/win/vncviewer/CMakeLists.txt b/win/vncviewer/CMakeLists.txt new file mode 100644 index 00000000..863e2d07 --- /dev/null +++ b/win/vncviewer/CMakeLists.txt @@ -0,0 +1,28 @@ +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(vncviewer WIN32 + buildTime.cxx + CConn.cxx + CConnOptions.cxx + CConnThread.cxx + ConnectingDialog.cxx + ConnectionDialog.cxx + DesktopWindow.cxx + InfoDialog.cxx + OptionsDialog.cxx + UserPasswdDialog.cxx + ViewerToolBar.cxx + vncviewer.cxx + vncviewer.rc) + +target_link_libraries(vncviewer rfb rfb_win32 Xregion network rdr + ws2_32.lib) + +install(TARGETS vncviewer + RUNTIME DESTINATION . +) diff --git a/win/vncviewer/Makefile.am b/win/vncviewer/Makefile.am index db398aef..1a486254 100644 --- a/win/vncviewer/Makefile.am +++ b/win/vncviewer/Makefile.am @@ -42,7 +42,7 @@ vncviewer_LDADD = $(top_builddir)/common/rfb/librfb.la \ vncviewer_LDFLAGS = -I$(top_srcdir)/win -mwindows EXTRA_DIST = vncviewer.rc vncviewer.ico cursor1.cur vncviewer.exe.manifest \ - vncviewer.bmp toolbar.bmp + vncviewer.bmp toolbar.bmp CMakeLists.txt resources.o: vncviewer.rc $(WINDRES) $^ -o $@ diff --git a/win/vncviewer/vncviewer.rc b/win/vncviewer/vncviewer.rc index 076d5b8b..60aa6363 100644 --- a/win/vncviewer/vncviewer.rc +++ b/win/vncviewer/vncviewer.rc @@ -1,6 +1,7 @@ //Microsoft Developer Studio generated resource script. // #include "resource.h" +#include "resdefs.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// @@ -67,8 +68,8 @@ IDI_ICON ICON DISCARDABLE "vncviewer.ico" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,90,0 - PRODUCTVERSION 1,0,90,0 + FILEVERSION __RCVERSION + PRODUCTVERSION __RCVERSION FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -85,15 +86,20 @@ BEGIN BEGIN VALUE "Comments", "\0" VALUE "CompanyName", "TigerVNC Project\0" + #ifdef WIN64 + VALUE "FileDescription", "TigerVNC Viewer for Win64\0" + VALUE "ProductName", "TigerVNC Viewer for Win64\0" + #else VALUE "FileDescription", "TigerVNC Viewer for Win32\0" - VALUE "FileVersion", "1.0.90\0" + VALUE "ProductName", "TigerVNC Viewer for Win32\0" + #endif + VALUE "FileVersion", __RCVERSIONSTR VALUE "InternalName", "free4/vncviewer/win\0" - VALUE "LegalCopyright", "Copyright (C) 1998-2009 [many holders]\0" + VALUE "LegalCopyright", "Copyright (C) 1998-2010 [many holders]\0" VALUE "LegalTrademarks", "TigerVNC\0" VALUE "OriginalFilename", "vncviewer.exe\0" VALUE "PrivateBuild", "\0" - VALUE "ProductName", "TigerVNC Viewer\0" - VALUE "ProductVersion", "1.0.90\0" + VALUE "ProductVersion", __VERSIONSTR VALUE "SpecialBuild", "\0" END END @@ -534,7 +540,7 @@ END // 24 // -#ifdef _WIN64 +#ifdef WIN64 IDR_MANIFEST 24 DISCARDABLE "vncviewer.exe.manifest64" #else IDR_MANIFEST 24 DISCARDABLE "vncviewer.exe.manifest" diff --git a/win/winvnc/CMakeLists.txt b/win/winvnc/CMakeLists.txt new file mode 100644 index 00000000..811492c2 --- /dev/null +++ b/win/winvnc/CMakeLists.txt @@ -0,0 +1,33 @@ +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_library(wm_hooks SHARED + ../wm_hooks/wm_hooks.cxx + ../wm_hooks/wm_hooks.def + ../wm_hooks/wm_hooks.rc) + +add_executable(winvnc4 WIN32 + buildTime.cxx + ControlPanel.cxx + JavaViewer.cxx + ManagedListener.cxx + QueryConnectDialog.cxx + STrayIcon.cxx + VNCServerService.cxx + VNCServerWin32.cxx + winvnc.cxx + winvnc.rc) + +target_link_libraries(winvnc4 rfb rfb_win32 Xregion network rdr ws2_32.lib) + +install(TARGETS winvnc4 + RUNTIME DESTINATION . +) + +install(TARGETS wm_hooks + RUNTIME DESTINATION . +) diff --git a/win/winvnc/Makefile.am b/win/winvnc/Makefile.am index 19f3ada2..0ede9218 100644 --- a/win/winvnc/Makefile.am +++ b/win/winvnc/Makefile.am @@ -20,7 +20,7 @@ winvnc4_LDADD = $(top_builddir)/common/rfb/librfb.la \ winvnc4_LDFLAGS = -mwindows EXTRA_DIST = winvnc.rc winvnc.ico connected.ico icon_dis.ico connecte.ico \ - winvnc4.exe.manifest winvnc.bmp + winvnc4.exe.manifest winvnc.bmp CMakeLists.txt resources.o: winvnc.rc $(WINDRES) $^ -o $@ diff --git a/win/winvnc/winvnc.rc b/win/winvnc/winvnc.rc index 3cbc0a45..d514c4a5 100644 --- a/win/winvnc/winvnc.rc +++ b/win/winvnc/winvnc.rc @@ -1,6 +1,7 @@ //Microsoft Developer Studio generated resource script. // #include "resource.h" +#include "resdefs.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// @@ -58,8 +59,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,90,0 - PRODUCTVERSION 1,0,90,0 + FILEVERSION __RCVERSION + PRODUCTVERSION __RCVERSION FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -76,15 +77,20 @@ BEGIN BEGIN VALUE "Comments", "\0" VALUE "CompanyName", "TigerVNC Project\0" + #ifdef WIN64 + VALUE "FileDescription", "TigerVNC Server for Win64\0" + VALUE "ProductName", "TigerVNC Server for Win64\0" + #else VALUE "FileDescription", "TigerVNC Server for Win32\0" - VALUE "FileVersion", "1.0.90\0" + VALUE "ProductName" "TigerVNC Server for Win32\0" + #endif + VALUE "FileVersion", __RCVERSIONSTR VALUE "InternalName", "winvnc\0" - VALUE "LegalCopyright", "Copyright (C) 1998-2009 [many holders]\0" + VALUE "LegalCopyright", "Copyright (C) 1998-2010 [many holders]\0" VALUE "LegalTrademarks", "TigerVNC\0" VALUE "OriginalFilename", "winvnc4.exe\0" VALUE "PrivateBuild", "\0" - VALUE "ProductName", "TigerVNC Server\0" - VALUE "ProductVersion", "1.0.90\0" + VALUE "ProductVersion", __VERSIONSTR VALUE "SpecialBuild", "\0" END END @@ -222,7 +228,11 @@ END // 24 // +#ifdef WIN64 +IDR_MANIFEST 24 DISCARDABLE "winvnc4.exe.manifest64" +#else IDR_MANIFEST 24 DISCARDABLE "winvnc4.exe.manifest" +#endif ///////////////////////////////////////////////////////////////////////////// // diff --git a/win/winvnc/winvnc4.exe.manifest64 b/win/winvnc/winvnc4.exe.manifest64 new file mode 100644 index 00000000..be022436 --- /dev/null +++ b/win/winvnc/winvnc4.exe.manifest64 @@ -0,0 +1,22 @@ + + + +.NET control deployment tool + + + + + + diff --git a/win/wm_hooks/wm_hooks.def b/win/wm_hooks/wm_hooks.def index b9198ab9..a70908a9 100644 --- a/win/wm_hooks/wm_hooks.def +++ b/win/wm_hooks/wm_hooks.def @@ -1,5 +1,5 @@ LIBRARY "wm_hooks" -DESCRIPTION 'Window Message Hooks Dynamic Link Library' +; DESCRIPTION 'Window Message Hooks Dynamic Link Library' SECTIONS .WM_Hooks_Shared read write shared diff --git a/win/wm_hooks/wm_hooks.rc b/win/wm_hooks/wm_hooks.rc index 5a11fd28..d80c983f 100644 --- a/win/wm_hooks/wm_hooks.rc +++ b/win/wm_hooks/wm_hooks.rc @@ -1,6 +1,7 @@ //Microsoft Developer Studio generated resource script. // #include "resource.h" +#include "resdefs.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// @@ -54,8 +55,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 4,1,0,0 - PRODUCTVERSION 4,1,0,0 + FILEVERSION __RCVERSION + PRODUCTVERSION __RCVERSION FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -72,15 +73,20 @@ BEGIN BEGIN VALUE "Comments", "\0" VALUE "CompanyName", "Constantin Kaplinsky\0" + #ifdef WIN64 + VALUE "FileDescription", "TigerVNC Server Hooking DLL for Win64\0" + VALUE "ProductName", "TigerVNC Server Hooking DLL for Win64\0" + #else VALUE "FileDescription", "TigerVNC Server Hooking DLL for Win32\0" - VALUE "FileVersion", "4.1\0" + VALUE "ProductName", "TigerVNC Server Hooking DLL for Win32\0" + #endif + VALUE "FileVersion", __RCVERSIONSTR VALUE "InternalName", "\0" VALUE "LegalCopyright", "Copyright (C) 1998-2005 [many holders]\0" VALUE "LegalTrademarks", "TigerVNC\0" VALUE "OriginalFilename", "wm_hooks.dll\0" VALUE "PrivateBuild", "\0" - VALUE "ProductName", "TigerVNC Server\0" - VALUE "ProductVersion", "4.1\0" + VALUE "ProductVersion", __VERSIONSTR VALUE "SpecialBuild", "\0" END END -- 2.39.5