Update of /cvsroot/octaviz/octaviz/Common
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv2044/Common
Modified Files:
CMakeLists.txt
Log Message:
Revamped build system
Interface to the WRAP macro simplified.
Parallel builds should work now; out-of-source build should work as well.
A pre-compiled header file can be used (alas, it doesn't seem to speed the
build up that much).
Index: CMakeLists.txt
===================================================================
RCS file: /cvsroot/octaviz/octaviz/Common/CMakeLists.txt,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- CMakeLists.txt 12 Oct 2007 10:09:32 -0000 1.11
+++ CMakeLists.txt 22 Dec 2007 22:03:54 -0000 1.12
@@ -1,27 +1,46 @@
-SET(KIT_WRAP_DEPS)
-
ADD_LIBRARY( octaviz SHARED octaviz.cc )
-OCTAVE_WRAP_VTK(Common "${KIT_WRAP_DEPS}")
+OCTAVE_WRAP_VTK(Common)
+# This sets INCLUDE_FLAGS and LINK_FLAGS also for the .cc files below
+
INCLUDE_DIRECTORIES(${OCTINCLUDEDIR} "${OCTINCLUDEDIR}/octave" )
LINK_LIBRARIES(octinterp octave cruft vtkCommon)
LINK_DIRECTORIES(${OCTLIBDIR})
-ADD_CUSTOM_COMMAND( OUTPUT vtk_init.oct COMMAND ${MKOCTFILE} ${oct_flags} ${oct_link_flags} -Wno-deprecated -loctaviz -L. vtk_init.cc )
-ADD_CUSTOM_COMMAND( OUTPUT vtkInitializeInteractor.oct COMMAND ${MKOCTFILE} ${oct_flags} ${oct_link_flags} -Wno-deprecated -loctaviz -L. vtkInitializeInteractor.cc)
-ADD_CUSTOM_COMMAND( OUTPUT vtkRaiseWindow.oct COMMAND ${MKOCTFILE} ${oct_flags} ${oct_link_flags} -Wno-deprecated -loctaviz -lvtkRendering -L. vtkRaiseWindow.cc )
-ADD_CUSTOM_COMMAND( OUTPUT vtk_print_ref_table.oct COMMAND ${MKOCTFILE} ${oct_flags} ${oct_link_flags} -Wno-deprecated -loctaviz -L. vtk_print_ref_table.cc )
-ADD_CUSTOM_COMMAND( OUTPUT vtk_get_pointer.oct COMMAND ${MKOCTFILE} ${oct_flags} ${oct_link_flags} -Wno-deprecated -loctaviz -L. vtk_get_pointer.cc )
-
-ADD_CUSTOM_TARGET( Common ALL COMMAND touch Common DEPENDS octaviz ${all_oct} vtk_init.oct vtkInitializeInteractor.oct vtkRaiseWindow.oct vtk_print_ref_table.oct vtk_get_pointer.oct )
+SET (common_octs)
+ # track the .oct files for shorter DEPENDS lines
-#ADD_CUSTOM_TARGET(vtkWindow.oct ALL mkoctfile ${oct_flags} ${oct_link_flags} vtkWindow.cc)
+# How to build the .oct files in this directory
+FOREACH(class vtk_init vtkInitializeInteractor vtk_print_ref_table vtk_get_pointer vtkRaiseWindow)
-INSTALL_PROGRAMS(${OCT_INST_DIR}/octaviz vtkInitializeInteractor.oct vtk_init.oct vtkRaiseWindow.oct vtk_get_pointer.oct vtk_print_ref_table.oct)
-INSTALL_PROGRAMS(${OCT_INST_DIR}/octaviz ${all_oct})
-#MESSAGE(${all_oct})
+ # FIXME: vtkRaiseWindow needs vtkRendering on Apple?!
+ IF(${class} STREQUAL "vtkRaiseWindow")
+ SET(APPLE_FLAG "-lvtkRendering")
+ ELSE(${class} STREQUAL "vtkRaiseWindow")
+ SET(APPLE_FLAG)
+ ENDIF(${class} STREQUAL "vtkRaiseWindow")
+
+ ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${class}.oct
+ COMMAND ${CMAKE_COMMAND}
+ ARGS -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/${class}.cc
+ ${CMAKE_CURRENT_BINARY_DIR}/${class}.cc
+ # mkoctfile leaves .o files in the directory where it is called, so we
+ # must call it in the binary build directory
+ COMMAND ${MKOCTFILE}
+ ARGS --verbose ${WNODEPRECATED} ${INCLUDE_FLAGS} -I${CMAKE_CURRENT_SOURCE_DIR}
+ ${LINK_FLAGS} ${APPLE_FLAG}
+ -Wl,-rpath=${OCTAVIZ_RPATH}
+ --output ${CMAKE_CURRENT_BINARY_DIR}/${class}.oct
+ ${CMAKE_CURRENT_BINARY_DIR}/${class}.cc
+ DEPENDS octaviz
+ COMMENT "Building Octaviz' ${class}.oct from ${class}.cc"
+ )
+ SET (common_octs ${common_octs} ${CMAKE_CURRENT_BINARY_DIR}/${class}.oct)
+ENDFOREACH(class)
-# Remove prefix from octave lib install dir
-STRING(REGEX REPLACE "${CMAKE_INSTALL_PREFIX}" "" OUT_MTCH ${OCTLIBDIR})
-INSTALL_TARGETS(${OUT_MTCH} octaviz)
+# Build the few .oct files as part of a "OctavizCommonFiles" target
+ADD_CUSTOM_TARGET( OctavizCommonFiles ALL DEPENDS octaviz ${common_octs} )
+# Install the .oct files and the shared library
+INSTALL(PROGRAMS ${common_octs} DESTINATION ${OCTAVIZ_OCT_DIR})
+INSTALL(TARGETS octaviz LIBRARY DESTINATION ${OCTAVIZ_SHARED_DIR})
|