ADDED   CMakeLists.txt
Index: CMakeLists.txt
==================================================================
--- CMakeLists.txt
+++ CMakeLists.txt
@@ -0,0 +1,215 @@
+PROJECT(Fossil C)
+
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
+
+# Build options.
+OPTION(FOSSIL_BUILD_STATIC "Build Fossil static" TRUE)
+OPTION(FOSSIL_ENABLE_SSL "Enable SSL support" FALSE)
+
+# Include some macros.
+INCLUDE(CheckIncludeFile)
+
+# Source files which gets processed by the translate program.
+SET(TRANS_SRCS
+  add allrepo attach bag bisect blob branch browse captcha cgi checkin
+  checkout clearsign clone comformat configure content db delta deltacmd
+  descendants diff diffcmd doc encode event export file finfo glob graph gzip
+  http http_socket http_transport import info leaf login main manifest md5
+  merge merge3 name path pivot popen pqueue printf rebuild report rss schema
+  search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main
+  timeline tkt tktsetup undo update url user verify vfile wiki wikiformat
+  winhttp xfer zip http_ssl
+)
+
+# Additional source files.
+SET(OTHER_SRCS
+  src/sqlite3.c src/shell.c src/th.c src/th_lang.c
+)
+
+# Add the resource file on windows to the source files.
+IF(WIN32)
+  SET(OTHER_SRCS ${OTHER_SRCS} win/fossil.rc)
+ENDIF(WIN32)
+
+# Set compile definitions for src/shell.c.
+SET(SHELL_COMP_DEFS
+  main=sqlite3_shell
+  SQLITE_OMIT_LOAD_EXTENSION=1
+)
+SET_SOURCE_FILES_PROPERTIES(src/shell.c
+  PROPERTIES COMPILE_DEFINITIONS "${SHELL_COMP_DEFS}"
+)
+
+# Set compile definitions for src/sqlite.c.
+SET(SQLITE3_COMP_DEFS
+  SQLITE_OMIT_LOAD_EXTENSION=1
+  SQLITE_THREADSAFE=0
+  SQLITE_DEFAULT_FILE_FORMAT=4
+  SQLITE_ENABLE_STAT2
+  SQLITE_ENABLE_LOCKING_STYLE=0
+  localtime=fossil_localtime
+)
+SET_SOURCE_FILES_PROPERTIES(src/sqlite3.c
+  PROPERTIES COMPILE_DEFINITIONS "${SQLITE3_COMP_DEFS}"
+)
+
+# Build the makeheaders program.
+ADD_EXECUTABLE(makeheaders src/makeheaders.c)
+GET_TARGET_PROPERTY(MAKEHEADERS_LOC makeheaders LOCATION)
+
+# Build the translate program.
+ADD_EXECUTABLE(translate src/translate.c)
+GET_TARGET_PROPERTY(TRANSLATE_LOC translate LOCATION)
+
+# Build the mkindex program.
+ADD_EXECUTABLE(mkindex src/mkindex.c)
+GET_TARGET_PROPERTY(MKINDEX_LOC mkindex LOCATION)
+
+# Build the version program.
+ADD_EXECUTABLE(version win/version.c)
+GET_TARGET_PROPERTY(VERSION_LOC version LOCATION)
+
+# Custom command to build the VERSION.h include file.
+ADD_CUSTOM_COMMAND(
+  OUTPUT  ${PROJECT_BINARY_DIR}/VERSION.h
+  DEPENDS version
+          ${PROJECT_SOURCE_DIR}/manifest.uuid
+          ${PROJECT_SOURCE_DIR}/manifest
+  COMMAND ${VERSION_LOC}
+  ARGS    ${PROJECT_SOURCE_DIR}/manifest.uuid
+          ${PROJECT_SOURCE_DIR}/manifest
+        > ${PROJECT_BINARY_DIR}/VERSION.h
+  COMMENT "Generating VERSION.h ..."
+)
+
+# Custom commands to build the translated sources.
+FOREACH(SRC ${TRANS_SRCS})
+
+  ADD_CUSTOM_COMMAND(
+    OUTPUT  ${PROJECT_BINARY_DIR}/${SRC}_.c
+    DEPENDS translate
+            ${PROJECT_SOURCE_DIR}/src/${SRC}.c
+    COMMAND ${TRANSLATE_LOC}
+    ARGS    ${PROJECT_SOURCE_DIR}/src/${SRC}.c
+          > ${PROJECT_BINARY_DIR}/${SRC}_.c
+    COMMENT "Translating src/${SRC}.c ..."
+  )
+
+  # Build a list of all the results.
+  SET(TRANS_SRC ${TRANS_SRC} ${PROJECT_BINARY_DIR}/${SRC}_.c)
+
+ENDFOREACH(SRC)
+
+# Custom command to build page_index.h.
+ADD_CUSTOM_COMMAND(
+  OUTPUT  ${PROJECT_BINARY_DIR}/page_index.h
+  DEPENDS mkindex
+          ${TRANS_SRC}
+  COMMAND ${MKINDEX_LOC}
+  ARGS    ${TRANS_SRC}
+        > ${PROJECT_BINARY_DIR}/page_index.h
+  COMMENT "Generating page_index.h ..."
+)
+ADD_CUSTOM_TARGET(page_index DEPENDS ${PROJECT_BINARY_DIR}/page_index.h)
+
+# Create an input file for the makeheaders program.
+FILE(WRITE ${PROJECT_BINARY_DIR}/mkhdr.dat
+"# Warning: this file is automatically generated by CMake.
+${PROJECT_SOURCE_DIR}/src/sqlite3.h
+${PROJECT_SOURCE_DIR}/src/th.h
+${PROJECT_BINARY_DIR}/VERSION.h\n"
+)
+FOREACH(SRC ${TRANS_SRCS})
+  FILE(APPEND ${PROJECT_BINARY_DIR}/mkhdr.dat
+    "${PROJECT_BINARY_DIR}/${SRC}_.c:${PROJECT_BINARY_DIR}/${SRC}.h\n"
+  )
+  # Build a list of all the generated header files.
+  SET(GEN_HDRS ${GEN_HDRS} ${PROJECT_BINARY_DIR}/${SRC}.h)
+ENDFOREACH(SRC)
+
+# Custom commands to build the header files.
+ADD_CUSTOM_COMMAND(
+  OUTPUT  ${PROJECT_BINARY_DIR}/headers ${GEN_HDRS}
+  DEPENDS makeheaders
+          ${PROJECT_SOURCE_DIR}/src/sqlite3.h
+          ${PROJECT_SOURCE_DIR}/src/th.h
+          ${PROJECT_BINARY_DIR}/VERSION.h
+          ${TRANS_SRC}
+  COMMAND ${MAKEHEADERS_LOC}
+  ARGS    -f mkhdr.dat
+  COMMAND ${CMAKE_COMMAND}
+  ARGS    -E echo Headers generated > ${PROJECT_BINARY_DIR}/headers
+  COMMENT "Generating header files..."
+)
+ADD_CUSTOM_TARGET(hdr_files DEPENDS ${PROJECT_BINARY_DIR}/headers)
+
+# Make sure that the CMake output directory and the source file directory
+# gets searched for include files.
+SET(FOSSIL_INCL_DIRS ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR}/src)
+
+# Disable internationalization.
+SET(FOSSIL_COMP_DEFS FOSSIL_I18N=0)
+
+# Fossil requires the Zlib library.
+CHECK_INCLUDE_FILE(zlib.h ZLIB_INTRINSIC)
+IF(ZLIB_INTRINSIC)
+  SET(FOSSIL_LINK_LIBS ${FOSSIL_LINK_LIBS} z)
+ELSE(ZLIB_INTRINSIC)
+  FIND_PACKAGE(ZLIB REQUIRED)
+  IF(ZLIB_FOUND)
+    SET(FOSSIL_LINK_LIBS ${FOSSIL_LINK_LIBS} ${ZLIB_LIBRARIES})
+    SET(FOSSIL_INCL_DIRS ${FOSSIL_INCL_DIRS} ${ZLIB_INCLUDE_DIRS})
+  ENDIF(ZLIB_FOUND)
+ENDIF(ZLIB_INTRINSIC)
+
+IF(FOSSIL_ENABLE_SSL)
+  CHECK_INCLUDE_FILE(openssl/ssl.h OPENSSL_INTRINSIC)
+  IF(OPENSSL_INTRINSIC)
+    SET(FOSSIL_LINK_LIBS ${FOSSIL_LINK_LIBS} ssl crypto)
+  ELSE(OPENSSL_INTRINSIC)
+    FIND_PACKAGE(OpenSSL REQUIRED)
+    IF(OPENSSL_FOUND)
+      SET(FOSSIL_LINK_LIBS ${FOSSIL_LINK_LIBS} ${OPENSSL_LIBRARIES})
+      SET(FOSSIL_INCL_DIRS ${FOSSIL_INCL_DIRS} ${OPENSSL_INCLUDE_DIR})
+    ENDIF(OPENSSL_FOUND)
+  ENDIF(OPENSSL_INTRINSIC)
+  SET(FOSSIL_COMP_DEFS ${FOSSIL_COMP_DEFS} FOSSIL_ENABLE_SSL=1)
+ENDIF(FOSSIL_ENABLE_SSL)
+
+# On Windows, Fossil requires the socket library.
+IF(WIN32)
+  SET(FOSSIL_LINK_LIBS ${FOSSIL_LINK_LIBS} ws2_32)
+ENDIF(WIN32)
+
+# Set the include diretories.
+INCLUDE_DIRECTORIES(BEFORE ${FOSSIL_INCL_DIRS})
+
+# Build the Fossil program.
+ADD_EXECUTABLE(fossil ${TRANS_SRC} ${OTHER_SRCS})
+
+# Fossil depends on the generated header files.
+ADD_DEPENDENCIES(fossil hdr_files page_index)
+
+# Set flags for building fossil static.
+IF(FOSSIL_BUILD_STATIC)
+  SET(FOSSIL_LINK_FLAGS ${FOSSIL_LINK_FLAGS} -static)
+ENDIF(FOSSIL_BUILD_STATIC)
+
+# Set the additional link flags for the fossil target.
+IF(DEFINED FOSSIL_LINK_FLAGS)
+  SET_TARGET_PROPERTIES(fossil PROPERTIES
+    LINK_FLAGS ${FOSSIL_LINK_FLAGS}
+  )
+ENDIF(DEFINED FOSSIL_LINK_FLAGS)
+
+# Set the compile definitions for the fossil target.
+IF(DEFINED FOSSIL_COMP_DEFS)
+  SET_TARGET_PROPERTIES(fossil PROPERTIES
+    COMPILE_DEFINITIONS "${FOSSIL_COMP_DEFS}"
+  )
+ENDIF(DEFINED FOSSIL_COMP_DEFS)
+
+# Set the additional link libraries for the fossil target.
+IF(DEFINED FOSSIL_LINK_LIBS)
+  TARGET_LINK_LIBRARIES(fossil ${FOSSIL_LINK_LIBS})
+ENDIF(DEFINED FOSSIL_LINK_LIBS)