diff --git a/cmake/StaticBuild.cmake b/cmake/StaticBuild.cmake
new file mode 100644
index 0000000..4ef2905
--- /dev/null
+++ b/cmake/StaticBuild.cmake
@@ -0,0 +1,96 @@
+#
+# Best-effort magic that tries to produce semi-static binaries
+# (i.e. only depends on "safe" libraries like libc and libX11)
+#
+# Note that this often fails as there is no way to automatically
+# determine the dependencies of the libraries we depend on, and
+# a lot of details change with each different build environment.
+#
+
+option(BUILD_STATIC
+    "Link statically against most libraries, if possible" ON)
+
+if(BUILD_STATIC)
+  message(STATUS "Attempting to link static binaries...")
+
+  set(JPEG_LIBRARIES "-Wl,-Bstatic -ljpeg -Wl,-Bdynamic")
+
+  if(WIN32 AND NOT USE_INCLUDED_ZLIB)
+    set(ZLIB_LIBRARIES "-Wl,-Bstatic -lz -Wl,-Bdynamic")
+  endif()
+
+  # gettext is included in libc on many unix systems
+  if(NOT LIBC_HAS_DGETTEXT)
+    set(GETTEXT_LIBRARIES "-Wl,-Bstatic -lintl -liconv -Wl,-Bdynamic")
+  endif()
+
+  if(GNUTLS_FOUND)
+    # GnuTLS has historically had different crypto backends
+    FIND_LIBRARY(GCRYPT_LIBRARY NAMES gcrypt libgcrypt
+      HINTS ${PC_GNUTLS_LIBDIR} ${PC_GNUTLS_LIBRARY_DIRS})
+    FIND_LIBRARY(NETTLE_LIBRARY NAMES nettle libnettle
+      HINTS ${PC_GNUTLS_LIBDIR} ${PC_GNUTLS_LIBRARY_DIRS})
+
+    set(GNUTLS_LIBRARIES "-Wl,-Bstatic -lgnutls -ltasn1")
+
+    if(NETTLE_LIBRARY)
+      set(GNUTLS_LIBRARIES "${GNUTLS_LIBRARIES} -lnettle -lhogweed -lgmp")
+    endif()
+    if(GCRYPT_LIBRARY)
+      set(GNUTLS_LIBRARIES "${GNUTLS_LIBRARIES} -lgcrypt -lgpg-error")
+    endif()
+
+    set(GNUTLS_LIBRARIES "${GNUTLS_LIBRARIES} -Wl,-Bdynamic")
+
+    # nanosleep() lives here on Solaris
+    if(${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
+      set(GNUTLS_LIBRARIES ${GNUTLS_LIBRARIES} -lrt)
+    endif()
+  endif()
+
+  if(FLTK_FOUND)
+    set(FLTK_LIBRARIES "-Wl,-Bstatic -lfltk_images -lpng -ljpeg -lfltk -Wl,-Bdynamic")
+
+    if(WIN32)
+      set(FLTK_LIBRARIES ${FLTK_LIBRARIES} comctl32)
+    elseif(APPLE)
+      set(FLTK_LIBRARIES ${FLTK_LIBRARIES} "-framework Cocoa")
+    else()
+      set(FLTK_LIBRARIES ${FLTK_LIBRARIES} m)
+    endif()
+
+    if(X11_FOUND AND NOT APPLE)
+      if(${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
+        set(FLTK_LIBRARIES ${FLTK_LIBRARIES} ${X11_Xcursor_LIB} ${X11_Xfixes_LIB} "-Wl,-Bstatic -lXft -Wl,-Bdynamic" fontconfig Xext -R/usr/sfw/lib)
+      else()
+        set(FLTK_LIBRARIES ${FLTK_LIBRARIES} "-Wl,-Bstatic -lXcursor -lXfixes -lXft -lfontconfig -lexpat -lfreetype -lbz2 -lXrender -lXext -lXinerama -Wl,-Bdynamic")
+      endif()
+
+      set(FLTK_LIBRARIES ${FLTK_LIBRARIES} X11)
+    endif()
+  endif()
+
+  # X11 libraries change constantly on Linux systems so we have to link
+  # them statically, even libXext. libX11 is somewhat stable, although
+  # even it has had an ABI change once or twice.
+  if(X11_FOUND AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
+    set(X11_LIBRARIES "-Wl,-Bstatic -lXext -Wl,-Bdynamic" X11)
+    if(X11_XTest_LIB)
+      set(X11_XTest_LIB "-Wl,-Bstatic -lXtst -Wl,-Bdynamic")
+    endif()
+    if(X11_Xdamage_LIB)
+      set(X11_Xdamage_LIB "-Wl,-Bstatic -lXdamage -Wl,-Bdynamic")
+    endif()
+  endif()
+
+  # This ensures that we don't depend on libstdc++ or libgcc_s
+  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -nodefaultlibs")
+  set(STATIC_BASE_LIBRARIES "-Wl,-Bstatic -lstdc++ -Wl,-Bdynamic")
+  if(WIN32)
+    set(STATIC_BASE_LIBRARIES "${STATIC_BASE_LIBRARIES} -lmingw32 -lmoldname -lmingwex -lgcc -lgcc_eh -lmsvcrt -lkernel32")
+  else()
+    set(STATIC_BASE_LIBRARIES "${STATIC_BASE_LIBRARIES} -lgcc -lgcc_eh -lc")
+  endif()
+  set(CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} ${STATIC_BASE_LIBRARIES}")
+
+endif()
