changeset 35:22f78a6faa3e

Migrate the build system to CMake, tweak Doxyfile, add vtkplot.cpp as a skeleton for a VTK plotting class
author Jordi Gutiérrez Hermoso <jordigh@gmail.com>
date Mon, 08 Feb 2010 19:59:28 -0600
parents 7f31f9e2d196
children e32da6c38b59
files CMakeLists.txt Doxyfile src/CMakeLists.txt src/FindGSL.cmake src/Makefile src/vtkplot.cpp
diffstat 6 files changed, 229 insertions(+), 76 deletions(-) [+]
line wrap: on
line diff
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,16 +1,9 @@
-project (vtk_test)
+project (kwantix)
 
-#set(CMAKE_VERBOSE_MAKEFILE TRUE)
+## set(CMAKE_VERBOSE_MAKEFILE TRUE)
 set(CMAKE_CXX_COMPILER "g++-4.4")
 
 cmake_minimum_required(VERSION 2.6)
 
-include (${CMAKE_ROOT}/Modules/FindVTK.cmake)
+add_subdirectory(src)
 
-if (USE_VTK_FILE)
-  include(${USE_VTK_FILE})
-endif (USE_VTK_FILE)
-
-add_executable(terrain_test terrain_test.cpp)
-target_link_libraries(terrain_test vtkRendering vtkHybrid)
-set_target_properties(terrain_test PROPERTIES COMPILE_FLAGS "-std=c++0x")
--- a/Doxyfile
+++ b/Doxyfile
@@ -25,7 +25,7 @@
 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
 # by quotes) that should identify the project.
 
-PROJECT_NAME           =  RBF-DDM
+PROJECT_NAME           =  Kwantix
 
 # The PROJECT_NUMBER tag can be used to enter a project or revision number. 
 # This could be handy for archiving the generated documentation or 
@@ -106,7 +106,7 @@
 # path before files name in the file list and in the header files. If set 
 # to NO the shortest path that makes the file name unique will be used.
 
-FULL_PATH_NAMES        = YES
+FULL_PATH_NAMES        = NO
 
 # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
 # can be used to strip a user-defined part of the path. Stripping is 
@@ -178,7 +178,7 @@
 # The TAB_SIZE tag can be used to set the number of spaces in a tab. 
 # Doxygen uses this value to replace tabs by spaces in code fragments.
 
-TAB_SIZE               = 8
+TAB_SIZE               = 4
 
 # This tag can be used to specify a number of aliases that acts 
 # as commands in the documentation. An alias has the form "name=value". 
@@ -514,7 +514,7 @@
 # "myfile.cpp" or directories like "/usr/src/myproject". Separate the
 # files or directories with spaces.
 
-INPUT                  = 
+INPUT                  = src/
 
 # This tag can be used to specify the character encoding of the source files 
 # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,16 +1,56 @@
-project (kwantix)
-
-#set(CMAKE_VERBOSE_MAKEFILE TRUE)
-set(CMAKE_CXX_COMPILER "g++-4.4")
-
-cmake_minimum_required(VERSION 2.6)
-
 include (${CMAKE_ROOT}/Modules/FindVTK.cmake)
+include (FindGSL.cmake)
 
 if (USE_VTK_FILE)
   include(${USE_VTK_FILE})
 endif (USE_VTK_FILE)
 
-add_executable(terrain_test terrain_test.cpp)
-target_link_libraries(terrain_test vtkRendering vtkHybrid)
-set_target_properties(terrain_test PROPERTIES COMPILE_FLAGS "-std=c++0x")
+set(PEDANTIC_COMPILE_FLAGS
+  "-Wall -pedantic  -Werror -W -Wconversion -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -fshort-enums -fno-common -Wfatal-errors -Wno-deprecated -std=c++0x"
+  )
+set(LAX_COMPILE_FLAGS
+  "-Wall -Wfatal-errors -std=c++0x"
+)
+
+if(CMAKE_BUILD_TYPE STREQUAL "Debug")
+  set(PEDANTIC_COMPILE_FLAGS "${PEDANTIC_COMPILE_FLAGS} -pg")
+  set(LAX_COMPILE_FLAGS "${LAX_COMPILE_FLAGS} -pg")
+endif()
+
+set(KWANTIX_SOURCES
+    bvp
+    ddm
+    diff_op
+    error
+    func
+    interpolator
+    interp_values
+    linalg
+    rbf
+    utils
+    main
+)
+
+set(
+  VTK_SOURCES
+  vtkplot
+)
+
+set_source_files_properties(
+  ${KWANTIX_SOURCES} 
+  PROPERTIES COMPILE_FLAGS ${PEDANTIC_COMPILE_FLAGS}
+  )
+
+set_source_files_properties(
+  ${VTK_SOURCES}
+  PROPERTIES COMPILE_FLAGS ${LAX_COMPILE_FLAGS}
+)
+
+add_executable(kwantix ${KWANTIX_SOURCES} ${VTK_SOURCES})
+target_link_libraries(kwantix
+  vtkRendering
+  ${GSL_LIBRARIES}
+  ${GSL_CBLAS_LIBRARIES}
+)
+
+set_target_properties(kwantix PROPERTIES RUNTIME_OUTPUT_DIRECTORY "../")
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/src/FindGSL.cmake
@@ -0,0 +1,171 @@
+# Try to find gnu scientific library GSL
+# See
+# http://www.gnu.org/software/gsl/  and
+# http://gnuwin32.sourceforge.net/packages/gsl.htm
+#
+# Once run this will define:
+#
+# GSL_FOUND       = system has GSL lib
+#
+# GSL_LIBRARIES   = full path to the libraries
+#    on Unix/Linux with additional linker flags from "gsl-config --libs"
+#
+# CMAKE_GSL_CXX_FLAGS  = Unix compiler flags for GSL, essentially "`gsl-config --cxxflags`"
+#
+# GSL_INCLUDE_DIR      = where to find headers
+#
+# GSL_LINK_DIRECTORIES = link directories, useful for rpath on Unix
+# GSL_EXE_LINKER_FLAGS = rpath on Unix
+#
+# Felix Woelk 07/2004
+# Jan Woetzel
+#
+# www.mip.informatik.uni-kiel.de
+# --------------------------------
+
+IF(WIN32)
+  SET(GSL_POSSIBLE_ROOT_DIRS
+    ${GSL_ROOT_DIR}
+    $ENV{GSL_ROOT_DIR}
+    ${GSL_DIR}
+    ${GSL_HOME}
+    $ENV{GSL_DIR}
+    $ENV{GSL_HOME}
+    $ENV{EXTERN_LIBS_DIR}/gsl
+    $ENV{EXTRA}
+    )
+  FIND_PATH(GSL_INCLUDE_DIR
+    NAMES gsl/gsl_cdf.h gsl/gsl_randist.h
+    PATHS ${GSL_POSSIBLE_ROOT_DIRS}
+    PATH_SUFFIXES include
+    DOC "GSL header include dir"
+    )
+
+  FIND_LIBRARY(GSL_GSL_LIBRARY
+    NAMES gsl libgsl
+    PATHS  ${GSL_POSSIBLE_ROOT_DIRS}
+    PATH_SUFFIXES lib
+    DOC "GSL library dir" )
+
+  FIND_LIBRARY(GSL_GSLCBLAS_LIBRARY
+    NAMES gslcblas libgslcblas
+    PATHS  ${GSL_POSSIBLE_ROOT_DIRS}
+    PATH_SUFFIXES lib
+    DOC "GSL cblas library dir" )
+
+  SET(GSL_LIBRARIES ${GSL_GSL_LIBRARY})
+
+
+ELSE(WIN32)
+
+  IF(UNIX)
+    SET(GSL_CONFIG_PREFER_PATH
+      "$ENV{GSL_DIR}/bin"
+      "$ENV{GSL_DIR}"
+      "$ENV{GSL_HOME}/bin"
+      "$ENV{GSL_HOME}"
+      CACHE STRING "preferred path to GSL (gsl-config)")
+    FIND_PROGRAM(GSL_CONFIG gsl-config
+      ${GSL_CONFIG_PREFER_PATH}
+      /usr/bin/
+      )
+    # MESSAGE("DBG GSL_CONFIG ${GSL_CONFIG}")
+
+    IF (GSL_CONFIG)
+
+      MESSAGE(STATUS "GSL using gsl-config ${GSL_CONFIG}")
+      # set CXXFLAGS to be fed into CXX_FLAGS by the user:
+      EXEC_PROGRAM(${GSL_CONFIG}
+        ARGS --cflags
+        OUTPUT_VARIABLE  GSL_CXX_FLAGS )
+      #SET(GSL_CXX_FLAGS "`${GSL_CONFIG} --cflags`")
+
+      # set INCLUDE_DIRS to prefix+include
+      EXEC_PROGRAM(${GSL_CONFIG}
+        ARGS --prefix
+        OUTPUT_VARIABLE GSL_PREFIX)
+      SET(GSL_INCLUDE_DIR ${GSL_PREFIX}/include CACHE STRING INTERNAL)
+
+      # set link libraries and link flags
+
+      #SET(GSL_LIBRARIES "`${GSL_CONFIG} --libs`")
+
+      # extract link dirs for rpath
+      EXEC_PROGRAM(${GSL_CONFIG}
+        ARGS --libs
+        OUTPUT_VARIABLE  GSL_CONFIG_LIBS )
+      SET(GSL_LIBRARIES "${GSL_CONFIG_LIBS}")
+
+      # split off the link dirs (for rpath)
+      # use regular expression to match wildcard equivalent "-L*"
+      # with  is a space or a semicolon
+      STRING(REGEX MATCHALL "[-][L]([^ ;])+"
+        GSL_LINK_DIRECTORIES_WITH_PREFIX
+        "${GSL_CONFIG_LIBS}" )
+      #      MESSAGE("DBG  GSL_LINK_DIRECTORIES_WITH_PREFIX=${GSL_LINK_DIRECTORIES_WITH_PREFIX}")
+
+      # remove prefix -L because we need the pure directory for LINK_DIRECTORIES
+
+      IF (GSL_LINK_DIRECTORIES_WITH_PREFIX)
+        STRING(REGEX REPLACE "[-][L]" "" GSL_LINK_DIRECTORIES ${GSL_LINK_DIRECTORIES_WITH_PREFIX} )
+      ENDIF (GSL_LINK_DIRECTORIES_WITH_PREFIX)
+      SET(GSL_EXE_LINKER_FLAGS "-Wl,-rpath,${GSL_LINK_DIRECTORIES}" CACHE STRING INTERNAL)
+      #      MESSAGE("DBG  GSL_LINK_DIRECTORIES=${GSL_LINK_DIRECTORIES}")
+      #      MESSAGE("DBG  GSL_EXE_LINKER_FLAGS=${GSL_EXE_LINKER_FLAGS}")
+
+      #      ADD_DEFINITIONS("-DHAVE_GSL")
+      #      SET(GSL_DEFINITIONS "-DHAVE_GSL")
+      MARK_AS_ADVANCED(
+        GSL_CXX_FLAGS
+        GSL_INCLUDE_DIR
+        GSL_LIBRARIES
+        GSL_LINK_DIRECTORIES
+        GSL_DEFINITIONS
+        )
+      MESSAGE(STATUS "Using GSL from ${GSL_PREFIX}")
+
+    ELSE(GSL_CONFIG)
+
+      INCLUDE(UsePkgConfig) #needed for PKGCONFIG(...)
+
+      MESSAGE(STATUS "GSL using pkgconfig")
+      #      PKGCONFIG(gsl includedir libdir linkflags cflags)
+      PKGCONFIG(gsl GSL_INCLUDE_DIR GSL_LINK_DIRECTORIES GSL_LIBRARIES GSL_CXX_FLAGS)
+      IF(GSL_INCLUDE_DIR)
+        MARK_AS_ADVANCED(
+          GSL_CXX_FLAGS
+          GSL_INCLUDE_DIR
+          GSL_LIBRARIES
+          GSL_LINK_DIRECTORIES
+          )
+
+      ELSE(GSL_INCLUDE_DIR) 
+        MESSAGE("FindGSL.cmake: gsl-config/pkg-config gsl not found. Please set it manually. GSL_CONFIG=${GSL_CONFIG}")
+      ENDIF(GSL_INCLUDE_DIR)
+
+    ENDIF(GSL_CONFIG)
+
+  ENDIF(UNIX)
+ENDIF(WIN32)
+
+
+IF(GSL_LIBRARIES)
+  IF(GSL_INCLUDE_DIR OR GSL_CXX_FLAGS)
+
+    SET(GSL_FOUND 1)
+
+  ENDIF(GSL_INCLUDE_DIR OR GSL_CXX_FLAGS)
+ENDIF(GSL_LIBRARIES)
+
+
+# ==========================================
+IF(NOT GSL_FOUND)
+  # make FIND_PACKAGE friendly
+  IF(NOT GSL_FIND_QUIETLY)
+    IF(GSL_FIND_REQUIRED)
+      MESSAGE(FATAL_ERROR "GSL required, please specify it's location.")
+    ELSE(GSL_FIND_REQUIRED)
+      MESSAGE(STATUS       "ERROR: GSL was not found.")
+    ENDIF(GSL_FIND_REQUIRED)
+  ENDIF(NOT GSL_FIND_QUIETLY)
+ENDIF(NOT GSL_FOUND)
\ No newline at end of file
deleted file mode 100644
--- a/src/Makefile
+++ /dev/null
@@ -1,51 +0,0 @@
-CPP = g++
-LINKING = -lgsl -lgslcblas
-CFLAGS = -pg -O2 -g
-OPTIONS = -Wall -pedantic  -W -Werror -Wconversion -Wshadow \
-	  -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings  \
-	  -fshort-enums -fno-common -Wfatal-errors 
-OBJECTFILES = interpolator.o linalg.o error.o utils.o rbf.o bvp.o \
-	      diff_op.o ddm.o func.o main.o interp_values.o
-HEADERFILES = include/linalg.hpp include/error.hpp include/utils.hpp \
-	      include/rbf.hpp include/bvp.hpp include/diff_op.hpp \
-	      include/interpolator.hpp include/ddm.hpp \
-	      include/interp_values.hpp
-
-.SUFFIXES : .cpp .o
-
-.cpp.o :
-	$(CPP) $(CFLAGS) $(OPTIONS) -c $< 
-
-kwantix: $(OBJECTFILES) 
-	$(CPP) -o rbf-ddm $(OBJECTFILES)  $(LINKING)
-
-all: doc test
-
-doc: Doxyfile
-	doxygen Doxyfile
-
-test: kwantix
-	kwantix	
-
-linalg.o: linalg.cpp include/linalg.hpp
-error.o: error.cpp include/error.hpp
-utils.o: utils.cpp include/utils.hpp
-rbf.o:	rbf.cpp include/rbf.hpp
-bvp.o: bvp.cpp include/bvp.hpp
-diff-op.o: diff_op.cpp include/diff_op.hpp
-interpolator.o : interpolator.cpp include/interpolator.hpp
-ddm.o: ddm.cpp include/ddm.hpp
-func.o : func.cpp include/func.hpp
-interp_values.o : interp_values.cpp include/interp_values.hpp
-
-main.o: main.cpp $(HEADERFILES)
-
-clean:
-	rm -f *.o rbf-ddm
-
-cleandata:
-	rm -f data/*.matrix data/*.map data/*.vector \
-	 	results/*.matrix results/*.map results/*.png results/*.vector
-# DO NOT DELETE
-
-
--- a/src/vtkplot.cpp
+++ b/src/vtkplot.cpp
@@ -44,7 +44,7 @@
   return atan(x*y*sin(y));
 }
 
-int main (int argc, char ** argv)
+int run ()
 {
 	auto delaunay = TriangulateTerrain(&F);	
   PlotPoints(delaunay,true);