Skip to content

Commit

Permalink
Rewrote build system to make use of modern CMake features
Browse files Browse the repository at this point in the history
Now using modern CMake features as discussed by Daniel Pfeifer on C++Now 2017. Moreover a full build environment is defined by the provided [mini-cross](https://github.com/ooxi/mini-cross) description.
  • Loading branch information
ooxi committed Dec 27, 2017
1 parent 16fc76f commit 5910520
Show file tree
Hide file tree
Showing 7 changed files with 147 additions and 44 deletions.
3 changes: 2 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@ script:
- mkdir build && cd build
- cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=gcc -DXML_PARSER_VERBOSE=On ..
- make
after_script: ../run-tests.sh
after_script:
- make test

72 changes: 34 additions & 38 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,55 +1,51 @@
# Project setup
PROJECT(xml)
SET(VERSION_MAJOR "0")
SET(VERSION_MINOR "1")
SET(VERSION_PATCH "4")
CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0 FATAL_ERROR)
project(xml C CXX)
set(VERSION_MAJOR "0")
set(VERSION_MINOR "2")
set(VERSION_PATCH "0")
cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)


# Define main library target
add_library(xml STATIC "")


# Compiler setup
SET(CMAKE_C_FLAGS_DEBUG "-g -DDEBUG")
SET(CMAKE_C_FLAGS_RELEASE "-O2")
target_compile_options(
xml
PRIVATE
-std=c11
)


# Options
OPTION(XML_PARSER_VERBOSE "Enable to be told everything the xml parser does" OFF)
option(XML_PARSER_VERBOSE "Enable to be told everything the xml parser does" OFF)

IF(XML_PARSER_VERBOSE)
ADD_DEFINITIONS(-DXML_PARSER_VERBOSE)
ENDIF(XML_PARSER_VERBOSE)
if(XML_PARSER_VERBOSE)
target_compile_definitions(
xml
PRIVATE
XML_PARSER_VERBOSE
)
endif(XML_PARSER_VERBOSE)


# Sources
SET(SOURCE_DIRECTORY src)
SET(TEST_SOURCE_DIRECTORY test)


# Build library
ADD_LIBRARY(xml STATIC
${SOURCE_DIRECTORY}/xml.c
target_sources(
xml
PRIVATE
"${CMAKE_CURRENT_LIST_DIR}/src/xml.c"
)


# Build unit cases
INCLUDE_DIRECTORIES(${SOURCE_DIRECTORY})

ADD_EXECUTABLE(test-xml-c
${TEST_SOURCE_DIRECTORY}/test-xml-c
)
TARGET_LINK_LIBRARIES(test-xml-c xml)

ADD_EXECUTABLE(test-xml-cpp
${TEST_SOURCE_DIRECTORY}/test-xml-cpp
)
TARGET_LINK_LIBRARIES(test-xml-cpp xml)

FILE( COPY ${TEST_SOURCE_DIRECTORY}/test.xml
DESTINATION ${PROJECT_BINARY_DIR}
target_include_directories(
xml
PUBLIC
"${CMAKE_CURRENT_LIST_DIR}/src/"
)


# Building example
ADD_EXECUTABLE(example
${TEST_SOURCE_DIRECTORY}/example
)
TARGET_LINK_LIBRARIES(example xml)
# Build unit cases
enable_testing()
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/test")

8 changes: 8 additions & 0 deletions mc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
base: ubuntu:16.04
install:
- cmake
- g++
- gcc
- valgrind
---
5 changes: 0 additions & 5 deletions run-tests.sh

This file was deleted.

4 changes: 4 additions & 0 deletions src/xml.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@
*
* 3. This notice may not be removed or altered from any source distribution.
*/
#ifdef XML_PARSER_VERBOSE
#include <alloca.h>
#endif

#include <ctype.h>
#include <malloc.h>
#include <stdarg.h>
Expand Down
98 changes: 98 additions & 0 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
# xml.c / test
cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)



# Example
add_executable(
"${PROJECT_NAME}-example"
"${CMAKE_CURRENT_LIST_DIR}/example.c"
)

target_compile_options(
"${PROJECT_NAME}-example"
PRIVATE
-std=c11
)

target_link_libraries(
"${PROJECT_NAME}-example"
PRIVATE
xml
)

add_test(
NAME "${PROJECT_NAME}-example"
COMMAND "${PROJECT_NAME}-example"
)



# Test case
FILE( COPY "${CMAKE_CURRENT_LIST_DIR}/test.xml"
DESTINATION "${CMAKE_CURRENT_BINARY_DIR}"
)



# Test (C)
add_executable(
"${PROJECT_NAME}-test-c"
"${CMAKE_CURRENT_LIST_DIR}/test-xml-c.c"
)

target_compile_options(
"${PROJECT_NAME}-test-c"
PRIVATE
-std=c11
)

target_link_libraries(
"${PROJECT_NAME}-test-c"
PRIVATE
xml
)


add_test(
NAME "${PROJECT_NAME}-test-c"
COMMAND "${PROJECT_NAME}-test-c"
)

add_test(
NAME "${PROJECT_NAME}-test-c-valgrind"
COMMAND valgrind --tool=memcheck --leak-check=full --track-origins=yes -v "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-test-c"
)



# Test (C++)
add_executable(
"${PROJECT_NAME}-test-cpp"
"${CMAKE_CURRENT_LIST_DIR}/test-xml-cpp.cpp"
)

target_compile_options(
"${PROJECT_NAME}-test-cpp"
PRIVATE
-std=c++11
)

target_link_libraries(
"${PROJECT_NAME}-test-cpp"
PRIVATE
xml
)


add_test(
NAME "${PROJECT_NAME}-test-cpp"
COMMAND "${PROJECT_NAME}-test-cpp"
)


add_test(
NAME "${PROJECT_NAME}-test-cpp-valgrind"
COMMAND valgrind --tool=memcheck --leak-check=full --track-origins=yes -v "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-test-cpp"
)

1 change: 1 addition & 0 deletions test/test-xml-c.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
*
* 3. This notice may not be removed or altered from any source distribution.
*/
#include <alloca.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
Expand Down

0 comments on commit 5910520

Please sign in to comment.