Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
140 changes: 140 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
CMAKE_MINIMUM_REQUIRED (VERSION 2.8.2)

PROJECT(uc)

OPTION(BUILD_EXAMPLES "Build example programs" OFF)
set(INSTALL_INCLUDE_DIR include CACHE PATH "Installation directory for header files")
set(INSTALL_CMAKE_DIR lib/CMake/${PROJECT_NAME} CACHE PATH "Installation directory for CMake files")

INCLUDE(version.cmake)

LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/Modules")

FIND_PACKAGE(MySQL)
FIND_PACKAGE(Sqlite3)
FIND_PACKAGE(FLEX)
FIND_PACKAGE(CURL)

SET(${PROJECT_NAME}_SRCS
src/buffer.cpp
src/buffer_util.cpp
src/string_util.cpp
src/uccontract.cpp
src/ucdb.cpp
src/ucio.cpp
src/ucoder_bin.cpp
src/ucoder_ini.cpp
src/ucontainer.cpp
src/uc_web.cpp
flex/json_parser.lex
${CMAKE_BINARY_DIR}/ucoder_json.cpp # This file is generated by the build
)

# Flex
# If we found the flex command, generate ucoder_json.cpp from json_parser.lex
# otherwise, use the fallback (which has (perhaps incorrectly) been under revision control
# throughout project history)
IF (FLEX_FOUND)
MESSAGE(STATUS "Flex found: ucoder_json will be generated")
FLEX_TARGET(flex_json flex/json_parser.lex ${CMAKE_BINARY_DIR}/ucoder_json.cpp)
ELSE (FLEX_FOUND)
MESSAGE(WARNING "Flex not found: will use fallback 'flex/ucoder_json.cpp.fallback'")
CONFIGURE_FILE(flex/ucoder_json.cpp.fallback ${CMAKE_BINARY_DIR}/ucoder_json.cpp COPY_ONLY)
ENDIF (FLEX_FOUND)

# MySql integration
IF (MYSQL_FOUND)
MESSAGE(STATUS "Found MySQL: ${MYSQL_LIBRARY}")

SET(${PROJECT_NAME}_SRCS ${${PROJECT_NAME}_SRCS} src/ucmysql.cpp)

INCLUDE_DIRECTORIES(${MYSQL_INCLUDE_DIR})
SET(${PROJECT_NAME}_LIBS ${${PROJECT_NAME}_LIBS} ${MYSQL_LIBRARIES})
ELSE ()
MESSAGE(STATUS "MySql not found - skipping support.")
ENDIF ()

# SqLite integration
IF (SQLITE3_FOUND)
# MESSAGE(STATUS "Found Sqlite3: ${SQLITE3_LIBRARY}") # For some reason the FIND_PACKAGE SQLITE3_FIND_QUIETLY switch doesn't seem to work and this message will already have been displayed

SET(${PROJECT_NAME}_SRCS ${${PROJECT_NAME}_SRCS} src/ucsqlite.cpp)

INCLUDE_DIRECTORIES(${SQLITE3_INCLUDE_DIR})
SET(${PROJECT_NAME}_LIBS ${${PROJECT_NAME}_LIBS} ${SQLITE3_LIBRARY})
ELSE ()
MESSAGE(STATUS "SqLite not found - skipping support.")
ENDIF ()

# Curl integration
IF (CURL_FOUND)
SET(${PROJECT_NAME}_SRCS ${${PROJECT_NAME}_SRCS} src/buffer_curl.cpp src/uc_curl.cpp)

INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIR})
SET(${PROJECT_NAME}_LIBS ${${PROJECT_NAME}_LIBS} ${CURL_LIBRARIES})
ELSE ()
MESSAGE(STATUS "Curl not found - skipping support.")
ENDIF ()

INCLUDE_DIRECTORIES(include)

ADD_LIBRARY(${PROJECT_NAME} SHARED ${${PROJECT_NAME}_SRCS})
TARGET_LINK_LIBRARIES(${PROJECT_NAME})
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES
VERSION "${APPLICATION_VERSION_MAJOR}.${APPLICATION_VERSION_MINOR}.${APPLICATION_VERSION_PATCH}"
OUTPUT_NAME ${PROJECT_NAME}
CLEAN_DIRECT_OUTPUT 1)
INSTALL(TARGETS ${PROJECT_NAME}
EXPORT ${PROJECT_NAME}Targets
DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
INSTALL(DIRECTORY include/ DESTINATION include FILES_MATCHING PATTERN "*.h")

IF (BUILD_EXAMPLES)
SET(EXAMPLE_SRCS examples/example.cpp)
ADD_EXECUTABLE(example ${EXAMPLE_SRCS})
TARGET_LINK_LIBRARIES(example ${PROJECT_NAME} ${CURL_LIBRARIES})

SET(CONTRACT_EXAMPLE_SRCS examples/contract_example.cpp)
ADD_EXECUTABLE(contract_example ${CONTRACT_EXAMPLE_SRCS})
TARGET_LINK_LIBRARIES(contract_example ${PROJECT_NAME} ${CURL_LIBRARIES})

CONFIGURE_FILE(examples/contract.json ${CMAKE_BINARY_DIR}/contract.json COPY_ONLY)
CONFIGURE_FILE(examples/data.json ${CMAKE_BINARY_DIR}/data.json COPY_ONLY)
ENDIF()

# Make relative paths absolute
foreach(p LIB BIN INCLUDE CMAKE)
set(var INSTALL_${p}_DIR)
if(NOT IS_ABSOLUTE "${${var}}")
set(${var} "${CMAKE_INSTALL_PREFIX}/${${var}}")
endif()
endforeach()

# Add all targets to the build-tree export set
export(TARGETS ${PROJECT_NAME} FILE "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake")

# Export the package for use from the build-tree
# (this registers the build-tree with a global CMake-registry)
export(PACKAGE ${PROJECT_NAME})

# Create the UcConfig.cmake and UcConfigVersion files
file(RELATIVE_PATH REL_INCLUDE_DIR "${INSTALL_CMAKE_DIR}" "${INSTALL_INCLUDE_DIR}")
# ... for the build tree
set(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}" "${PROJECT_BINARY_DIR}")
configure_file(cmake/UcConfig.cmake.in "${PROJECT_BINARY_DIR}/UcConfig.cmake" @ONLY)

# ... for the install tree
set(CONF_INCLUDE_DIRS "\${UC_CMAKE_DIR}/${REL_INCLUDE_DIR}")
configure_file(cmake/UcConfig.cmake.in "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/UcConfig.cmake" @ONLY)

# ... for both
configure_file(cmake/UcConfigVersion.cmake.in "${PROJECT_BINARY_DIR}/UcConfigVersion.cmake" @ONLY)

# Install the UcConfig.cmake and UcConfigVersion.cmake
install(FILES
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/UcConfig.cmake"
"${PROJECT_BINARY_DIR}/UcConfigVersion.cmake"
DESTINATION "${INSTALL_CMAKE_DIR}" COMPONENT dev)

# Install the export set for use with the install-tree
install(EXPORT ${PROJECT_NAME}Targets DESTINATION "${INSTALL_CMAKE_DIR}" COMPONENT dev)
64 changes: 0 additions & 64 deletions Make_Setup.inc

This file was deleted.

2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ ifeq ($(MYSQL),YES)
OPT_FILES += ucsqlite.o
endif

example : libuc.a example.o
example : example.o libuc.a
$(LINKXX) -o $@ $^


Expand Down
2 changes: 1 addition & 1 deletion README
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ the general purpose dictionaries of many popular scripting languages.
Included are variety of routines for REST style web programming, and
for database manipulation. This library is covered by the new BSD
license, see the LICENSE file for details. To build the library, run
the configure script then make. The file doc/index.html is the
cmake then make. The file doc/index.html is the
starting point for the documentation.

Jason Denton
Expand Down
46 changes: 46 additions & 0 deletions cmake/Modules/FindMySQL.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# - Find mysqlclient
# Find the native MySQL includes and library
#
# MYSQL_INCLUDE_DIR - where to find mysql.h, etc.
# MYSQL_LIBRARIES - List of libraries when using MySQL.
# MYSQL_FOUND - True if MySQL found.

IF (MYSQL_INCLUDE_DIR)
# Already in cache, be silent
SET(MYSQL_FIND_QUIETLY TRUE)
ENDIF (MYSQL_INCLUDE_DIR)

FIND_PATH(MYSQL_INCLUDE_DIR mysql.h
/usr/local/include/mysql
/usr/include/mysql
)

SET(MYSQL_NAMES mysqlclient mysqlclient_r)
FIND_LIBRARY(MYSQL_LIBRARY
NAMES ${MYSQL_NAMES}
PATHS /usr/lib /usr/local/lib
PATH_SUFFIXES mysql
)

IF (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY)
SET(MYSQL_FOUND TRUE)
SET( MYSQL_LIBRARIES ${MYSQL_LIBRARY} )
ELSE (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY)
SET(MYSQL_FOUND FALSE)
SET( MYSQL_LIBRARIES )
ENDIF (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY)

IF (MYSQL_FOUND)
IF (NOT MYSQL_FIND_QUIETLY)
MESSAGE(STATUS "Found MySQL: ${MYSQL_LIBRARY}")
ENDIF (NOT MYSQL_FIND_QUIETLY)
ELSE (MYSQL_FOUND)
IF (MYSQL_FIND_REQUIRED)
MESSAGE(FATAL_ERROR "Could NOT find MySQL library")
ENDIF (MYSQL_FIND_REQUIRED)
ENDIF (MYSQL_FOUND)

MARK_AS_ADVANCED(
MYSQL_LIBRARY
MYSQL_INCLUDE_DIR
)
76 changes: 76 additions & 0 deletions cmake/Modules/FindSqlite3.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# Find Sqlite3
# ~~~~~~~~~~~~
# Copyright (c) 2007, Martin Dobias <wonder.sk at gmail.com>
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#
# CMake module to search for Sqlite3 library
#
# If it's found it sets SQLITE3_FOUND to TRUE
# and following variables are set:
# SQLITE3_INCLUDE_DIR
# SQLITE3_LIBRARY


# FIND_PATH and FIND_LIBRARY normally search standard locations
# before the specified paths. To search non-standard paths first,
# FIND_* is invoked first with specified paths and NO_DEFAULT_PATH
# and then again with no specified paths to search the default
# locations. When an earlier FIND_* succeeds, subsequent FIND_*s
# searching for the same item do nothing.

# try to use framework on mac
# want clean framework path, not unix compatibility path
IF (APPLE)
IF (CMAKE_FIND_FRAMEWORK MATCHES "FIRST"
OR CMAKE_FRAMEWORK_PATH MATCHES "ONLY"
OR NOT CMAKE_FIND_FRAMEWORK)
SET (CMAKE_FIND_FRAMEWORK_save ${CMAKE_FIND_FRAMEWORK} CACHE STRING "" FORCE)
SET (CMAKE_FIND_FRAMEWORK "ONLY" CACHE STRING "" FORCE)
#FIND_PATH(SQLITE3_INCLUDE_DIR SQLite3/sqlite3.h)
FIND_LIBRARY(SQLITE3_LIBRARY SQLite3)
IF (SQLITE3_LIBRARY)
# FIND_PATH doesn't add "Headers" for a framework
SET (SQLITE3_INCLUDE_DIR ${SQLITE3_LIBRARY}/Headers CACHE PATH "Path to a file.")
ENDIF (SQLITE3_LIBRARY)
SET (CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK_save} CACHE STRING "" FORCE)
ENDIF ()
ENDIF (APPLE)

FIND_PATH(SQLITE3_INCLUDE_DIR sqlite3.h
"$ENV{LIB_DIR}/include"
"$ENV{LIB_DIR}/include/sqlite"
#mingw
c:/msys/local/include
NO_DEFAULT_PATH
)
FIND_PATH(SQLITE3_INCLUDE_DIR sqlite3.h)

FIND_LIBRARY(SQLITE3_LIBRARY NAMES sqlite3 sqlite3_i PATHS
$ENV{LIB}
/usr/lib
"$ENV{LIB_DIR}/lib"
#mingw
c:/msys/local/lib
NO_DEFAULT_PATH
)
FIND_LIBRARY(SQLITE3_LIBRARY NAMES sqlite3)

IF (SQLITE3_INCLUDE_DIR AND SQLITE3_LIBRARY)
SET(SQLITE3_FOUND TRUE)
ENDIF (SQLITE3_INCLUDE_DIR AND SQLITE3_LIBRARY)


IF (SQLITE3_FOUND)

IF (NOT SQLITE3_FIND_QUIETLY)
MESSAGE(STATUS "Found Sqlite3: ${SQLITE3_LIBRARY}")
ENDIF (NOT SQLITE3_FIND_QUIETLY)

ELSE (SQLITE3_FOUND)

IF (SQLITE3_FIND_REQUIRED)
MESSAGE(FATAL_ERROR "Could not find Sqlite3")
ENDIF (SQLITE3_FIND_REQUIRED)

ENDIF (SQLITE3_FOUND)
16 changes: 16 additions & 0 deletions cmake/UcConfig.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# - Config file for the UniversalContainer package
# - defines the following variables
# UC_INCLUDE_DIRS - include directories
# UC_LIBRARIES - libraries to link against

# Compute paths
get_filename_component(UC_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
set(UC_INCLUDE_DIRS @CONF_INCLUDE_DIRS@)

# Our library dependencies (contains definitions for IMPORTED targets)
if(NOT TARGET uc AND NOT UC_BINARY_DIR)
include("${UC_CMAKE_DIR}/UcTargets.cmake")
endif()

# These are IMPORTED targets created by UcTargets.cmake
set(UC_LIBRARIES @PROJECT_NAME@)
11 changes: 11 additions & 0 deletions cmake/UcConfigVersion.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
set(PACKAGE_VERSION "@APPLICATION_VERSION_STRING@")

# Check whether the requested PACKAGE_FIND_VERSION is compatible
if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}")
set(PACKAGE_VERSION_COMPATIBLE FALSE)
else()
set(PACKAGE_VERSION_COMPATIBLE TRUE)
if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}")
set(PACKAGE_VERSION_EXACT TRUE)
endif()
endif()
Loading