Add BUILD_SERVER similar to BUILD_VIEWER

Add a BUILD_SERVER option similar to BUILD_VIEWER.  When BUILD_SERVER is
not active, we do not require pam, so also disable everything that needs
pam.  This allows building the viewer on a machine where pam is not
installed.

See https://bugs.gentoo.org/852830

Set ENABLE_WAYLAND to 0 if BUILD_SERVER is not active.

Do not define _FORTIFY_SOURCE, it is already defined in Gentoo.

--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -76,7 +76,6 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
 
 # Tell the compiler to be stringent
-add_compile_definitions(_FORTIFY_SOURCE=2)
 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wformat=2 -Wvla")
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wformat=2 -Wvla")
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wzero-as-null-pointer-constant")
@@ -260,6 +259,7 @@ if(BUILD_JAVA)
   add_subdirectory(java)
 endif()
 
+trioption(BUILD_SERVER "Build TigerVNC server")
 trioption(BUILD_VIEWER "Build TigerVNC viewer")
 if(BUILD_VIEWER)
   # Check for FLTK
@@ -341,7 +341,7 @@ if (ENABLE_NETTLE)
 endif()
 
 # Check for PAM library
-if(UNIX AND NOT APPLE)
+if(BUILD_SERVER AND UNIX AND NOT APPLE)
   find_package(PAM REQUIRED)
 endif()
 
@@ -391,7 +391,7 @@ if(UNIX AND NOT APPLE)
 endif()
 
 # check for libraries needed for wayland support
-if(UNIX AND NOT APPLE)
+if(BUILD_SERVER AND UNIX AND NOT APPLE)
   trioption(ENABLE_WAYLAND "Enable wayland support")
   if(ENABLE_WAYLAND STREQUAL "AUTO")
     find_package(GLib)
@@ -423,6 +423,8 @@ if(UNIX AND NOT APPLE)
     set(ENABLE_WAYLAND 0)
     message(WARNING "GLib, Gio, Gobject, PipeWire, Uuid, WaylandClient or Xkbcommon NOT found. w0vncserver disabled.")
   endif()
+else()
+  set(ENABLE_WAYLAND 0)
 endif()
 
 find_package(GTest)
--- a/common/rfb/CMakeLists.txt
+++ b/common/rfb/CMakeLists.txt
@@ -76,7 +76,7 @@ if(WIN32)
   target_sources(rfb PRIVATE WinPasswdValidator.cxx)
 endif(WIN32)
 
-if(UNIX AND NOT APPLE)
+if(BUILD_SERVER AND UNIX AND NOT APPLE)
   target_sources(rfb PRIVATE UnixPasswordValidator.cxx)
   target_include_directories(rfb SYSTEM PRIVATE ${PAM_INCLUDE_DIRS})
   target_link_libraries(rfb ${PAM_LIBRARIES})
--- a/tests/perf/CMakeLists.txt
+++ b/tests/perf/CMakeLists.txt
@@ -8,8 +8,10 @@ target_link_libraries(convperf test_util rfb)
 add_executable(decperf decperf.cxx)
 target_link_libraries(decperf test_util rdr rfb)
 
-add_executable(encperf encperf.cxx)
-target_link_libraries(encperf test_util core rdr rfb)
+if(BUILD_SERVER)
+  add_executable(encperf encperf.cxx)
+  target_link_libraries(encperf test_util core rdr rfb)
+endif()
 
 if (BUILD_VIEWER)
   add_executable(fbperf
--- a/unix/CMakeLists.txt
+++ b/unix/CMakeLists.txt
@@ -4,10 +4,12 @@ endif()
 
 add_subdirectory(tx)
 add_subdirectory(common)
-add_subdirectory(vncconfig)
-add_subdirectory(vncpasswd)
-add_subdirectory(vncserver)
-add_subdirectory(x0vncserver)
+if(BUILD_SERVER)
+  add_subdirectory(vncconfig)
+  add_subdirectory(vncpasswd)
+  add_subdirectory(vncserver)
+  add_subdirectory(x0vncserver)
+endif()
 
 if (ENABLE_WAYLAND)
   add_subdirectory(w0vncserver)
