From 5cdcb5457fb3aef663db4bed4e2dae766d86e78b Mon Sep 17 00:00:00 2001 From: rr- Date: Fri, 19 Feb 2016 19:31:51 +0100 Subject: [PATCH] Add CMake; prepare basic structure - Added Catch (downloaded automatically by cmake) for unit tests - Added basic tests/ and src/ directories - Added basic unit test example. Any changes to files other than main.cc in src/ will recompile the relevant tests as needed - Added CMakeLists that compiles the project using cmake - Moved the man page to docs/ - Moved old source file to src/ - Since libogg doesn't support cmake based builds, I've added also a module in CMakeModules that searches for it, but I haven't tested if it works yet... - Haven't really touched Makefile - I've changed it only to refer to the new file locations --- .gitignore | 2 ++ CMakeLists.txt | 55 ++++++++++++++++++++++++++++++++++++ Makefile | 6 ++-- opustags.1 => doc/opustags.1 | 0 modules/FindOgg.cmake | 23 +++++++++++++++ src/dummy.cc | 6 ++++ src/dummy.h | 6 ++++ src/main.cc | 8 ++++++ opustags.c => src/opustags.c | 0 tests/dummy_test.cc | 7 +++++ tests/main.cc | 2 ++ 11 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 .gitignore create mode 100644 CMakeLists.txt rename opustags.1 => doc/opustags.1 (100%) create mode 100644 modules/FindOgg.cmake create mode 100644 src/dummy.cc create mode 100644 src/dummy.h create mode 100644 src/main.cc rename opustags.c => src/opustags.c (100%) create mode 100644 tests/dummy_test.cc create mode 100644 tests/main.cc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0683d73 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/build +tests/catch.h diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..5bd18aa --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,55 @@ +cmake_minimum_required (VERSION 2.8.8) +project (opustags) +set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD_REQUIRED on) +set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/modules/") + +# ------------ +# Dependencies +# ------------ +find_package(Ogg REQUIRED) +include_directories(${ogg_INCLUDE_DIR}) +link_directories(${ogg_LIBRARY_DIRS}) + +# -------------------- +# Global build options +# -------------------- +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wold-style-cast") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14") # for MinGW-w64 +endif() + +# ------------ +# Source files +# ------------ +set(CMAKE_SOURCE_DIR "${CMAKE_BINARY_DIR}/../") +file(GLOB_RECURSE common_sources "${CMAKE_SOURCE_DIR}/src/*.cc") +file(GLOB_RECURSE common_headers "${CMAKE_SOURCE_DIR}/src/*.h") +file(GLOB_RECURSE test_sources "${CMAKE_SOURCE_DIR}/tests/*.cc") +file(GLOB_RECURSE test_headers "${CMAKE_SOURCE_DIR}/tests/*.h") +list(REMOVE_ITEM common_sources "${CMAKE_SOURCE_DIR}/src/main.cc") +list(REMOVE_ITEM test_sources "${CMAKE_SOURCE_DIR}/tests/main.cc") + +# ------------------- +# 3rd party libraries +# ------------------- +# Catch +set(CATCH_PATH "${CMAKE_SOURCE_DIR}/tests/catch.h") +if (NOT EXISTS "${CATCH_PATH}") + message("Downloading Catch...") + file(DOWNLOAD "http://raw.githubusercontent.com/philsquared/Catch/master/single_include/catch.hpp" "${CATCH_PATH}") +endif() + +# ------------------- +# Linking definitions +# ------------------- +add_library(common OBJECT ${common_sources} ${common_headers}) +add_executable(opustags "${CMAKE_SOURCE_DIR}/src/main.cc" $) +add_executable(run_tests "${CMAKE_SOURCE_DIR}/tests/main.cc" $ ${test_sources} ${test_headers}) +target_include_directories(common BEFORE PUBLIC "${CMAKE_SOURCE_DIR}/src") +target_include_directories(opustags BEFORE PUBLIC "${CMAKE_SOURCE_DIR}/src") +target_include_directories(run_tests BEFORE PUBLIC "${CMAKE_SOURCE_DIR}/src") +target_include_directories(run_tests BEFORE PUBLIC "${CMAKE_SOURCE_DIR}/tests") diff --git a/Makefile b/Makefile index a682072..2b7101a 100644 --- a/Makefile +++ b/Makefile @@ -5,10 +5,10 @@ LDFLAGS=-logg all: opustags -opustags: opustags.c +opustags: src/opustags.c -man: opustags.1 - gzip opustags.1.gz +man: doc/opustags.1 + gzip opustags.1.gz install: opustags man mkdir -p $(DESTDIR)/bin $(DESTDIR)/$(MANDEST)/man1 diff --git a/opustags.1 b/doc/opustags.1 similarity index 100% rename from opustags.1 rename to doc/opustags.1 diff --git a/modules/FindOgg.cmake b/modules/FindOgg.cmake new file mode 100644 index 0000000..9dc3984 --- /dev/null +++ b/modules/FindOgg.cmake @@ -0,0 +1,23 @@ +# Base Io build system +# Written by Jeremy Tregunna +# +# Find libogg. + +FIND_PATH(OGG_INCLUDE_DIR ogg/ogg.h) + +SET(OGG_NAMES ${OGG_NAMES} ogg libogg) +FIND_LIBRARY(OGG_LIBRARY NAMES ${OGG_NAMES} PATH) + +IF(OGG_INCLUDE_DIR AND OGG_LIBRARY) + SET(OGG_FOUND TRUE) +ENDIF(OGG_INCLUDE_DIR AND OGG_LIBRARY) + +IF(OGG_FOUND) + IF(NOT Ogg_FIND_QUIETLY) + MESSAGE(STATUS "Found Ogg: ${OGG_LIBRARY}") + ENDIF (NOT Ogg_FIND_QUIETLY) +ELSE(OGG_FOUND) + IF(Ogg_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "Could not find ogg") + ENDIF(Ogg_FIND_REQUIRED) +ENDIF (OGG_FOUND) diff --git a/src/dummy.cc b/src/dummy.cc new file mode 100644 index 0000000..71eed64 --- /dev/null +++ b/src/dummy.cc @@ -0,0 +1,6 @@ +#include "dummy.h" + +int opustags::return_one() +{ + return 1; +} diff --git a/src/dummy.h b/src/dummy.h new file mode 100644 index 0000000..47819c4 --- /dev/null +++ b/src/dummy.h @@ -0,0 +1,6 @@ +#pragma once + +namespace opustags +{ + int return_one(); +} diff --git a/src/main.cc b/src/main.cc new file mode 100644 index 0000000..7de2e9c --- /dev/null +++ b/src/main.cc @@ -0,0 +1,8 @@ +#include +#include "dummy.h" + +int main(int argc, const char **argv) +{ + std::cout << opustags::return_one() << std::endl; + return 0; +} diff --git a/opustags.c b/src/opustags.c similarity index 100% rename from opustags.c rename to src/opustags.c diff --git a/tests/dummy_test.cc b/tests/dummy_test.cc new file mode 100644 index 0000000..9b1a015 --- /dev/null +++ b/tests/dummy_test.cc @@ -0,0 +1,7 @@ +#include "dummy.h" +#include "catch.h" + +TEST_CASE("A dummy test") +{ + REQUIRE(opustags::return_one() == 1); +} diff --git a/tests/main.cc b/tests/main.cc new file mode 100644 index 0000000..07efe23 --- /dev/null +++ b/tests/main.cc @@ -0,0 +1,2 @@ +#define CATCH_CONFIG_MAIN +#include "catch.h"