From 73c46d539fae5a54bb557428ccebb7c317f23399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20Draho=C5=A1?= Date: Sun, 5 Dec 2010 18:25:48 +0100 Subject: [PATCH] Add basic testing support and options to specify install paths --- CMakeLists.txt | 51 +++++++++++++++++++++++++++++++++++++++++--------- README.md | 13 ++++++++----- 2 files changed, 50 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0953ab06e..e8b2e0df6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,11 +1,22 @@ # CMake build script for the libgit2 project -# Theres nothing wrong with the original Waf build besides dependency on Python which I lack on some systems. # Peter Drahos 2010 +# +# Building: +# > mkdir build && cd build +# > cmake .. && make -j3 +# +# Testing: +# > ctest -V +# +# Install: +# > make install + PROJECT(libgit2 C) CMAKE_MINIMUM_REQUIRED(VERSION 2.6) # Find required dependencies FIND_PACKAGE(zlib REQUIRED) +INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR} src) # Try finding openssl FIND_PACKAGE(OpenSSL) @@ -16,15 +27,15 @@ ELSEIF () ENDIF () # Sane defaults and options +SET(INSTALL_BIN bin CACHE PATH "Where to install binaries to.") +SET(INSTALL_LIB lib CACHE PATH "Where to install libraries to.") +SET(INSTALL_INC include/git CACHE PATH "Where to install headers to.") OPTION (BUILD_SHARED_LIBS "Build Shared Library (OFF for Static)" ON) OPTION (BUILD_TESTS "Build Tests" ON) IF (NOT CMAKE_BUILD_TYPE) SET(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE) ENDIF () - -INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR} src) - # Collect sourcefiles FILE(GLOB SRC src/*.c) FILE(GLOB SRC_SHA1 src/block-sha1/*.c) @@ -54,13 +65,35 @@ TARGET_LINK_LIBRARIES(git2 ${ZLIB_LIBRARY} ${LIB_SHA1}) # Install INSTALL(TARGETS git2 - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib + RUNTIME DESTINATION ${INSTALL_BIN} + LIBRARY DESTINATION ${INSTALL_LIB} + ARCHIVE DESTINATION ${INSTALL_LIB} ) -INSTALL(FILES ${SRC_H} DESTINATION include/git) +INSTALL(FILES ${SRC_H} DESTINATION ${INSTALL_INC} ) # Tests IF (BUILD_TESTS) - # TODO. The Waf build generates *.toc files for each test which complicates things. + ENABLE_TESTING() + # Find and build all tests + INCLUDE_DIRECTORIES(tests) + FILE (GLOB TESTS tests/t????-*.c) + + FOREACH (TEST_SRC ${TESTS}) + # Match the source to get test name + STRING(REGEX MATCH "(t....-.*).c$" TEST_NAME ${TEST_SRC}) + SET(TEST_NAME ${CMAKE_MATCH_1}) # This is the actual matched variable, got to love CMake macro language + + # Generate TOC by finding BEGIN_TEST entries in test source. + FILE(READ ${TEST_SRC} TEST_CODE) + STRING(REGEX MATCHALL "BEGIN_TEST\\([^\\)]*\\)\n" TEST_TOC ${TEST_CODE}) + FILE(WRITE tests/${TEST_NAME}.toc ${TEST_TOC}) # If desired this might be moved to the build dir + + # Compile + ADD_EXECUTABLE(${TEST_NAME} tests/test_main.c tests/test_lib.c tests/test_helpers.c ${TEST_SRC}) + TARGET_LINK_LIBRARIES(${TEST_NAME} git2) + SET_TARGET_PROPERTIES(${TEST_NAME} PROPERTIES COMPILE_DEFINITIONS TEST_TOC=\"${TEST_NAME}.toc\") + + # Add CTest + ADD_TEST(${TEST_NAME} ${TEST_NAME}) + ENDFOREACH () ENDIF () diff --git a/README.md b/README.md index c8c09cd49..820e92833 100644 --- a/README.md +++ b/README.md @@ -42,19 +42,22 @@ When building using CMake the following dependencies are required: * CMake 2.6+ -Probably already installed in your system are: +Required dependency: * zlib 1.2+ +Optional dependency: + * LibSSL -Generate makefile or IDE workspace specific to your system using CMake by pointing the CMakeGui to the CMakeLists.txt file. - -Optionally, you can build from commandline on most UNIX systems using: +On most Unix systems you can build the library using the following commands - $ ccmake . + $ mkdir build && cd build + $ cmake .. $ make install +Alternatively you can point the CMake GUI tool to the CMakeLists.txt file and generate platform specific build project or IDE workspace. + Building libgit2 - Unix systems ==================================