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.master
@@ -9,5 +9,6 @@ script: | |||||
- mkdir build && cd build | - mkdir build && cd build | ||||
- cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=gcc -DXML_PARSER_VERBOSE=On .. | - cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=gcc -DXML_PARSER_VERBOSE=On .. | ||||
- make | - make | ||||
after_script: ../run-tests.sh | |||||
after_script: | |||||
- make test | |||||
@@ -1,55 +1,51 @@ | |||||
# Project setup | # 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 | # Compiler setup | ||||
SET(CMAKE_C_FLAGS_DEBUG "-g -DDEBUG") | |||||
SET(CMAKE_C_FLAGS_RELEASE "-O2") | |||||
target_compile_options( | |||||
xml | |||||
PRIVATE | |||||
-std=c11 | |||||
) | |||||
# Options | # 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 | # 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") | |||||
@@ -0,0 +1,8 @@ | |||||
--- | |||||
base: ubuntu:16.04 | |||||
install: | |||||
- cmake | |||||
- g++ | |||||
- gcc | |||||
- valgrind | |||||
--- |
@@ -1,5 +0,0 @@ | |||||
#!/bin/bash | |||||
./test-xml-c | |||||
./test-xml-cpp | |||||
valgrind --tool=memcheck --leak-check=full --track-origins=yes -v ./test-xml-c | |||||
valgrind --tool=memcheck --leak-check=full --track-origins=yes -v ./test-xml-cpp |
@@ -20,6 +20,10 @@ | |||||
* | * | ||||
* 3. This notice may not be removed or altered from any source distribution. | * 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 <ctype.h> | ||||
#include <malloc.h> | #include <malloc.h> | ||||
#include <stdarg.h> | #include <stdarg.h> | ||||
@@ -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" | |||||
) | |||||
@@ -20,6 +20,7 @@ | |||||
* | * | ||||
* 3. This notice may not be removed or altered from any source distribution. | * 3. This notice may not be removed or altered from any source distribution. | ||||
*/ | */ | ||||
#include <alloca.h> | |||||
#include <stdbool.h> | #include <stdbool.h> | ||||
#include <stdio.h> | #include <stdio.h> | ||||
#include <stdlib.h> | #include <stdlib.h> | ||||