On 16.06.2011 14:32, Richard Hipp wrote:
On Mon, Jun 13, 2011 at 7:07 PM, Steve Havelka<smh...@gmail.com>  wrote:

Is it necessary that it's autoconf?  Or would you take a CMake-based build
script?



Though I think autoconf is also necessary (for use by people who do not have
cmake installed) I will also consider having appropriate cmake scripts in
the tree, for use by people have and prefer cmake.  Would anybody care to
contribute the appropriate files?


Attached is my experiment of building Fossil with CMake. I was able to
successfully generate a makefile for MinGW on Windows and for a Linux
distribution based on Debian.
Place the CMakeLists.txt file in the top directory of the Fossil development tree.

On Windows, the makeheaders program needs a small patch because the
generated makefile uses the -f option and there was a problem with full
pathnames which include a colon in the device name.

--
tsbg
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)
Index: src/makeheaders.c
===================================================================
--- src/makeheaders.c
+++ src/makeheaders.c
@@ -3066,11 +3066,11 @@
   */
   if( zSrc[nSrc]==':' ){
     int nHdr;
     char *zHdr;
     zHdr = &zSrc[nSrc+1];
-    for(nHdr=0; zHdr[nHdr] && zHdr[nHdr]!=':'; nHdr++){}
+    for(nHdr=0; zHdr[nHdr]; nHdr++){}
     pFile->zHdr = StrDup(zHdr,nHdr);
   }
 
   /* Look for any 'c' or 'C' in the suffix of the file name and change
   ** that character to 'h' or 'H' respectively.  If no 'c' or 'C' is found,

_______________________________________________
fossil-users mailing list
fossil-users@lists.fossil-scm.org
http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users

Reply via email to