aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--CMakeLists.txt99
-rw-r--r--Makefile33
-rw-r--r--Makefile.inc30
-rw-r--r--cmake/FindCppUnit.cmake18
-rw-r--r--cmake/FindFTGL.cmake16
-rw-r--r--cmake/FindSDL_gfx.cmake88
-rw-r--r--cmake/Findlog4cpp.cmake7
-rw-r--r--cmake/Require.cmake24
-rw-r--r--test/Makefile78
9 files changed, 252 insertions, 141 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 00000000..2f0e768a
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,99 @@
+cmake_minimum_required (VERSION 2.6)
+project (usdx-cpp)
+
+set(cflags "-Wall -Werror -pedantic")
+set(cxxflags "${cflags} -std=c++1y")
+set(debug "-g -O0")
+
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${cflags}")
+set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${debug}")
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${cxxflags}")
+set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${debug}")
+
+#
+# dependency handling
+#
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
+set(Boost_USE_MULTITHREADED "ON")
+
+include("Require")
+require(FTGL)
+require(Freetype)
+require(SDL)
+require(SDL_image)
+require(SDL_gfx)
+require(log4cpp)
+require(Boost COMPONENTS filesystem locale program_options system thread)
+require(OpenGL)
+
+#
+# get main sources
+#
+include_directories(src/)
+file(GLOB_RECURSE sources src/*.cpp)
+list(REMOVE_ITEM sources "${CMAKE_SOURCE_DIR}/src/main.cpp")
+add_library(objects OBJECT ${sources})
+
+#
+# main usdx binary
+#
+add_executable(usdx "src/main.cpp" $<TARGET_OBJECTS:objects>)
+target_link_libraries(usdx ${LIBS})
+
+#
+# make run
+#
+add_custom_target(run
+ COMMAND usdx
+ DEPENDS usdx
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+)
+
+#
+# tests
+#
+include(CTest)
+
+if(BUILD_TESTING)
+ require_test(CppUnit)
+
+ file(GLOB_RECURSE testing_sources test/*.cpp)
+ add_executable(test/usdx-test ${testing_sources} $<TARGET_OBJECTS:objects>)
+ target_link_libraries(test/usdx-test ${LIBS} ${TEST_LIBS})
+ add_test(NAME test
+ COMMAND test/test
+ WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/test/"
+ )
+endif()
+
+#
+# tests with coverage
+#
+set(coverage-dir "${PROJECT_SOURCE_DIR}/test/coverage")
+
+add_executable(test/usdx-test-coverage EXCLUDE_FROM_ALL
+ ${testing_sources} ${sources})
+target_link_libraries(test/usdx-test-coverage ${LIBS} ${TEST_LIBS} "-coverage")
+set_target_properties(test/usdx-test-coverage
+ PROPERTIES COMPILE_FLAGS "${debug} -fprofile-arcs -ftest-coverage")
+
+get_property(coverage-binary TARGET test/usdx-test-coverage PROPERTY LOCATION)
+add_custom_target(test-coverage WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/test/"
+ # prepare coverage checks
+ COMMAND rm -f .error
+ COMMAND mkdir -p "${coverage-dir}"
+ COMMAND lcov --directory "${PROJECT_SOURCE_DIR}" --zerocounters
+
+ # running checks and save result for later use
+ COMMAND sh -c \"${coverage-binary} || touch .error\"
+
+ # building coverage pages
+ COMMAND lcov --directory "${PROJECT_SOURCE_DIR}" --capture --output-file "${coverage-dir}/coverage.info.tmp"
+ COMMAND lcov --extract "${coverage-dir}/coverage.info.tmp" "'${PROJECT_SOURCE_DIR}/src/*'" -o "${coverage-dir}/coverage.info"
+ COMMAND genhtml "${coverage-dir}/coverage.info" -o "${coverage-dir}/html/" -p "${PROJECT_SOURCE_DIR}/src"
+
+ # returing check status
+ COMMAND test ! -e .error
+)
+add_dependencies(test-coverage test/usdx-test-coverage)
diff --git a/Makefile b/Makefile
deleted file mode 100644
index ee5c1138..00000000
--- a/Makefile
+++ /dev/null
@@ -1,33 +0,0 @@
-TARGET:=usdx
-include Makefile.inc
-
-headers+=$(wildcard src/*.hpp)
-sources+=$(wildcard src/*.cpp)
-
-##############################################################################
-
-.PHONY: all clean run
-
-all: $(TARGET)
-
-clean:
- -$(RM) -r $(TARGET) $(objects) $(deps)
-
-run: $(TARGET)
- ./$(TARGET)
-
-ifneq ($(MAKECMDGOALS),clean)
--include $(deps)
-endif
-
-##############################################################################
-# normal build
-
-$(TARGET): $(objects) $(deps)
- $(CXX) $(LDFLAGS) -o $(TARGET) $(objects)
-
-%.o: %.cpp
- $(CXX) $(CXXFLAGS) -MMD -c $< -o $@
-
-%.d: %.cpp
- $(CXX) $(CXXFLAGS) -MM -c $< -MF $@
diff --git a/Makefile.inc b/Makefile.inc
deleted file mode 100644
index 6d4fb05a..00000000
--- a/Makefile.inc
+++ /dev/null
@@ -1,30 +0,0 @@
-# -*- mode: makefile -*-
-TOP:=$(dir $(lastword $(MAKEFILE_LIST)))
-
-headers+=$(wildcard $(TOP)src/*/*.hpp) $(wildcard $(TOP)src/*/*/*.hpp)
-sources+=$(wildcard $(TOP)src/*/*.cpp) $(wildcard $(TOP)src/*/*/*.cpp)
-
-deps=$(sources:.cpp=.d)
-objects=$(sources:.cpp=.o)
-
-# APPS
-PKG_CONFIG:=pkg-config
-LOG4CPP_CONFIG:=log4cpp-config
-
-# CFLAGS
-PEDENTIC:=-Wall -Werror
-DEBUG:=-g
-INC_PATH:=-I$(TOP)src/
-FTGL_CFLAGS:=$(shell $(PKG_CONFIG) ftgl --cflags)
-
-# LDFLAGS
-SQLITE_LDFLAGS:=-lsqlite3
-LOG4CPP_LDFLAGS:=$(shell $(LOG4CPP_CONFIG) --libs)
-BOOST_LDFLAGS:=-lboost_program_options-mt -lboost_filesystem-mt -lboost_thread-mt -lboost_system-mt
-SDL_LDFLAGS:=-lSDL -lSDL_image -lSDL_gfx
-GL_LDFLAGS:=-lGL
-FTGL_LDFLAGS:=$(shell $(PKG_CONFIG) ftgl --libs)
-
-
-CXXFLAGS:=$(PEDENTIC) $(INC_PATH) $(DEBUG) $(FTGL_CFLAGS)
-LDFLAGS:=$(SQLITE_LDFLAGS) $(LOG4CPP_LDFLAGS) $(BOOST_LDFLAGS) $(SDL_LDFLAGS) $(GL_LDFLAGS) $(FTGL_LDFLAGS)
diff --git a/cmake/FindCppUnit.cmake b/cmake/FindCppUnit.cmake
new file mode 100644
index 00000000..71d50356
--- /dev/null
+++ b/cmake/FindCppUnit.cmake
@@ -0,0 +1,18 @@
+INCLUDE(FindPkgConfig)
+PKG_CHECK_MODULES(CPPUNIT "cppunit")
+
+IF(CPPUNIT_FOUND)
+
+ SET(CPPUNIT_LIBRARY "${CPPUNIT_LIBRARIES}")
+
+ELSE()
+
+ FIND_PATH(CPPUNIT_INCLUDE_DIRS cppunit/TestCase.h)
+ FIND_LIBRARY(CPPUNIT_LIBRARY NAMES cppunit libcppunit)
+
+ INCLUDE(FindPackageHandleStandardArgs)
+ FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARY CPPUNIT_INCLUDE_DIRS)
+
+ MARK_AS_ADVANCED(CPPUNIT_INCLUDE_DIRS CPPUNIT_LIBRARY)
+
+ENDIF()
diff --git a/cmake/FindFTGL.cmake b/cmake/FindFTGL.cmake
new file mode 100644
index 00000000..a5d44fb1
--- /dev/null
+++ b/cmake/FindFTGL.cmake
@@ -0,0 +1,16 @@
+# - Locate FTGL library
+# This module defines
+# FTGL_LIBRARIES, the library to link against
+# FTGL_FOUND, if false, do not try to link to FTGL
+# FTGL_INCLUDE_DIRS, where to find headers.
+#
+# $FTGL_DIR is an environment variable that points to the main ftgl directory.
+
+FIND_PATH(FTGL_INCLUDE_DIRS FTGL/ftgl.h HINTS $ENV{FTGL_DIR})
+FIND_LIBRARY(FTGL_LIBRARY NAMES ftgl libftgl ftgl_static HINTS $ENV{FTGL_DIR})
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(FTGL DEFAULT_MSG FTGL_LIBRARY FTGL_INCLUDE_DIRS)
+
+MARK_AS_ADVANCED(FTGL_LIBRARY FTGL_INCLUDE_DIRS)
+
diff --git a/cmake/FindSDL_gfx.cmake b/cmake/FindSDL_gfx.cmake
new file mode 100644
index 00000000..314363c2
--- /dev/null
+++ b/cmake/FindSDL_gfx.cmake
@@ -0,0 +1,88 @@
+# - Locate SDL_gfx library
+# This module defines:
+# SDL_GFX_LIBRARIES, the name of the library to link against
+# SDL_GFX_INCLUDE_DIRS, where to find the headers
+# SDL_GFX_FOUND, if false, do not try to link against
+# SDL_GFX_VERSION_STRING - human-readable string containing the version of SDL_gfx
+#
+# For backward compatiblity the following variables are also set:
+# SDLGFX_LIBRARY (same value as SDL_GFX_LIBRARIES)
+# SDLGFX_INCLUDE_DIR (same value as SDL_GFX_INCLUDE_DIRS)
+# SDLGFX_FOUND (same value as SDL_GFX_FOUND)
+#
+# $SDLDIR is an environment variable that would
+# correspond to the ./configure --prefix=$SDLDIR
+# used in building SDL.
+#
+# Created by Eric Wing. This was influenced by the FindSDL.cmake
+# module, but with modifications to recognize OS X frameworks and
+# additional Unix paths (FreeBSD, etc).
+
+#=============================================================================
+# Copyright 2005-2009 Kitware, Inc.
+# Copyright 2012 Benjamin Eikel
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+if(NOT SDL_GFX_INCLUDE_DIR AND SDLGFX_INCLUDE_DIR)
+ set(SDL_GFX_INCLUDE_DIR ${SDLGFX_INCLUDE_DIR} CACHE PATH "directory cache
+entry initialized from old variable name")
+endif()
+find_path(SDL_GFX_INCLUDE_DIR SDL_gfxPrimitives.h
+ HINTS
+ ENV SDLGFXDIR
+ ENV SDLDIR
+ PATH_SUFFIXES include/SDL include/SDL12 include/SDL11 include
+)
+
+if(NOT SDL_GFX_LIBRARY AND SDLGFX_LIBRARY)
+ set(SDL_GFX_LIBRARY ${SDLGFX_LIBRARY} CACHE FILEPATH "file cache entry
+initialized from old variable name")
+endif()
+find_library(SDL_GFX_LIBRARY
+ NAMES SDL_gfx
+ HINTS
+ ENV SDLGFXDIR
+ ENV SDLDIR
+ PATH_SUFFIXES lib
+)
+
+if(SDL_GFX_INCLUDE_DIR AND EXISTS "${SDL_GFX_INCLUDE_DIR}/SDL_gfxPrimitives.h")
+ file(STRINGS "${SDL_GFX_INCLUDE_DIR}/SDL_gfxPrimitives.h" SDL_GFX_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL_GFX_MAJOR_VERSION[ \t]+[0-9]+$")
+ file(STRINGS "${SDL_GFX_INCLUDE_DIR}/SDL_gfxPrimitives.h" SDL_GFX_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL_GFX_MINOR_VERSION[ \t]+[0-9]+$")
+ file(STRINGS "${SDL_GFX_INCLUDE_DIR}/SDL_gfxPrimitives.h" SDL_GFX_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL_GFX_PATCHLEVEL[ \t]+[0-9]+$")
+ string(REGEX REPLACE "^#define[ \t]+SDL_GFX_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL_GFX_VERSION_MAJOR "${SDL_GFX_VERSION_MAJOR_LINE}")
+ string(REGEX REPLACE "^#define[ \t]+SDL_GFX_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL_GFX_VERSION_MINOR "${SDL_GFX_VERSION_MINOR_LINE}")
+ string(REGEX REPLACE "^#define[ \t]+SDL_GFX_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL_GFX_VERSION_PATCH "${SDL_GFX_VERSION_PATCH_LINE}")
+ set(SDL_GFX_VERSION_STRING ${SDL_GFX_VERSION_MAJOR}.${SDL_GFX_VERSION_MINOR}.${SDL_GFX_VERSION_PATCH})
+ unset(SDL_GFX_VERSION_MAJOR_LINE)
+ unset(SDL_GFX_VERSION_MINOR_LINE)
+ unset(SDL_GFX_VERSION_PATCH_LINE)
+ unset(SDL_GFX_VERSION_MAJOR)
+ unset(SDL_GFX_VERSION_MINOR)
+ unset(SDL_GFX_VERSION_PATCH)
+endif()
+
+set(SDL_GFX_LIBRARIES ${SDL_GFX_LIBRARY})
+set(SDL_GFX_INCLUDE_DIRS ${SDL_GFX_INCLUDE_DIR})
+
+include("FindPackageHandleStandardArgs")
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL_gfx
+ REQUIRED_VARS SDL_GFX_LIBRARIES SDL_GFX_INCLUDE_DIRS
+ VERSION_VAR SDL_GFX_VERSION_STRING)
+
+# for backward compatiblity
+set(SDLGFX_LIBRARY ${SDL_GFX_LIBRARIES})
+set(SDLGFX_INCLUDE_DIR ${SDL_GFX_INCLUDE_DIRS})
+set(SDLGFX_FOUND ${SDL_GFX_FOUND})
+
+mark_as_advanced(SDL_GFX_LIBRARY SDL_GFX_INCLUDE_DIR)
diff --git a/cmake/Findlog4cpp.cmake b/cmake/Findlog4cpp.cmake
new file mode 100644
index 00000000..c96b1c78
--- /dev/null
+++ b/cmake/Findlog4cpp.cmake
@@ -0,0 +1,7 @@
+FIND_PATH(LOG4CPP_INCLUDE_DIRS log4cpp/FileAppender.hh)
+FIND_LIBRARY(LOG4CPP_LIBRARY NAMES liblog4cpp.so)
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(LOG4CPP DEFAULT_MSG LOG4CPP_LIBRARY LOG4CPP_INCLUDE_DIRS)
+
+MARK_AS_ADVANCED(LOG4CPP_INCLUDE_DIRS LOG4CPP_LIBRARY)
diff --git a/cmake/Require.cmake b/cmake/Require.cmake
new file mode 100644
index 00000000..466d9aaa
--- /dev/null
+++ b/cmake/Require.cmake
@@ -0,0 +1,24 @@
+macro(find lib)
+ find_package(${lib} REQUIRED ${ARGN})
+ string(TOUPPER ${lib} LIB)
+
+ # ignore case (at least Boost uses mixed-case prefix)
+ if(DEFINED ${lib}_INCLUDE_DIRS)
+ set(${LIB}_INCLUDE_DIR ${${lib}_INCLUDE_DIRS})
+ endif()
+ if(DEFINED ${lib}_LIBRARIES)
+ set(${LIB}_LIBRARY ${${lib}_LIBRARIES})
+ endif()
+
+ include_directories(${${LIB}_INCLUDE_DIRS})
+endmacro()
+
+macro(require lib)
+ find(${ARGV})
+ set(LIBS ${LIBS} ${${LIB}_LIBRARY})
+endmacro()
+
+macro(require_test lib)
+ find(${ARGV})
+ set(TEST_LIBS ${TEST_LIBS} ${${LIB}_LIBRARY})
+endmacro()
diff --git a/test/Makefile b/test/Makefile
deleted file mode 100644
index 57b9df50..00000000
--- a/test/Makefile
+++ /dev/null
@@ -1,78 +0,0 @@
-TARGET:=usdx-tests
-include ../Makefile.inc
-
-headers+=$(wildcard *.hpp) $(wildcard */*.hpp) $(wildcard */*/*.hpp)
-sources+=$(wildcard *.cpp) $(wildcard */*.cpp) $(wildcard */*/*.cpp)
-
-LDFLAGS+=-lcppunit
-CXXFLAGS-COVERAGE:=-fprofile-arcs -ftest-coverage
-LDFLAGS-COVERAGE:=-coverage
-TARGET-COVERAGE:=$(TARGET)-coverage
-COVERAGE-DIR:=$(TOP)coverage
-
-objects-coverage:=$(patsubst %,$(COVERAGE-DIR)/obj/test/%,$(sources:.cpp=.o))
-coverage:=$(COVERAGE-DIR)/coverage.info.tmp $(COVERAGE-DIR)/coverage.info \
- $(objects-coverage:.o=.gcda) $(objects-coverage:.o=.gcno) \
- $(COVERAGE-DIR)/obj/
-
-# include the apropriate dir from main src tree
-SRC_INC=$(addprefix -I$(TOP)src/,$(filter-out ..%,$(dir $<)))
-
-##############################################################################
-
-.PHONY: all clean run
-
-all: $(TARGET)
-
-clean:
- -$(RM) -r $(TARGET) $(TARGET-COVERAGE) $(objects) $(deps) $(coverage)
-
-run: $(TARGET)
- ./$(TARGET)
-
-ifneq ($(MAKECMDGOALS),clean)
--include $(deps)
-endif
-
-##############################################################################
-# normal build
-
-$(TARGET): $(objects) $(deps)
- $(CXX) $(LDFLAGS) -o $(TARGET) $(objects)
-
-%.o: %.cpp
- $(CXX) $(CXXFLAGS) $(SRC_INC) -MMD -c $< -o $@
-
-%.d: %.cpp
- $(CXX) $(CXXFLAGS) $(SRC_INC) -MM -c $< -MF $@
-
-##############################################################################
-# build and execute tests with code coverage and build nice html pages
-
-test-with-coverage: $(COVERAGE-DIR)/html/index.html
- @test ! -e .error
-
-$(COVERAGE-DIR)/html/index.html: $(COVERAGE-DIR)/coverage.info
- genhtml $(COVERAGE-DIR)/coverage.info -o $(COVERAGE-DIR)/html/ -p \
- "$(realpath ./$(TOP)/src)"
-
-$(COVERAGE-DIR)/coverage.info: $(COVERAGE-DIR)/coverage.info.tmp
- lcov --extract $(COVERAGE-DIR)/coverage.info.tmp \
- "$(realpath ./$(TOP))/src/*" \
- -o $(COVERAGE-DIR)/coverage.info
-
-$(COVERAGE-DIR)/coverage.info.tmp: $(TARGET-COVERAGE)
- -$(RM) .error
- lcov --directory $(TOP) --zerocounters
- ./$(TARGET-COVERAGE) || touch .error
- lcov --directory $(TOP) --capture \
- --output-file $(COVERAGE-DIR)/coverage.info.tmp -b .
-
-$(TARGET-COVERAGE): $(objects-coverage) $(deps)
- $(CXX) $(LDFLAGS) $(LDFLAGS-COVERAGE) -o $(TARGET-COVERAGE) \
- $(objects-coverage)
-
-$(COVERAGE-DIR)/obj/test/%.o: %.cpp
- @[ -d $(dir $@) ] || mkdir -p $(dir $@)
- $(CXX) $(CXXFLAGS) $(CXXFLAGS-COVERAGE) $(SRC_INC) -MMD -c $< -o $@
-