lcio
diff -u -r1.9 -r1.10
--- CMakeLists.txt 29 May 2007 16:29:23 -0000 1.9
+++ CMakeLists.txt 19 Jun 2007 08:33:01 -0000 1.10
@@ -19,25 +19,26 @@
OPTION( BUILD_SHARED_LIBS "Set this to OFF to build static libraries " ON )
OPTION( BUILD_LCIO_TESTJOBS "Set to ON to build LCIO testjobs" OFF )
OPTION( BUILD_F77_TESTJOBS "Set to ON to build LCIO F77 testjobs" OFF )
+OPTION( INSTALL_DOC "Set to ON to install Documentation" ON )
# project version
SET( ${PROJECT_NAME}_MAJOR_VERSION 1 )
SET( ${PROJECT_NAME}_MINOR_VERSION 8 )
SET( ${PROJECT_NAME}_PATCH_LEVEL 3 )
SET( ${PROJECT_NAME}_VERSION
- "${${PROJECT_NAME}_MAJOR_VERSION}.${${PROJECT_NAME}_MINOR_VERSION}.${${PROJECT_NAME}_PATCH_LEVEL}" )
+ "${${PROJECT_NAME}_MAJOR_VERSION}.${${PROJECT_NAME}_MINOR_VERSION}.${${PROJECT_NAME}_PATCH_LEVEL}" )
SET( ${PROJECT_NAME}_SOVERSION
- "${${PROJECT_NAME}_MAJOR_VERSION}.${${PROJECT_NAME}_MINOR_VERSION}" )
+ "${${PROJECT_NAME}_MAJOR_VERSION}.${${PROJECT_NAME}_MINOR_VERSION}" )
# set default cmake build type to RelWithDebInfo
IF( NOT CMAKE_BUILD_TYPE )
- SET( CMAKE_BUILD_TYPE "RelWithDebInfo" )
+ SET( CMAKE_BUILD_TYPE "RelWithDebInfo" )
ENDIF()
# set default install prefix to project root directory
#IF( CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT )
IF( CMAKE_INSTALL_PREFIX STREQUAL "/usr/local" )
- SET( CMAKE_INSTALL_PREFIX "${${PROJECT_NAME}_SOURCE_DIR}" )
+ SET( CMAKE_INSTALL_PREFIX "${${PROJECT_NAME}_SOURCE_DIR}" )
ENDIF()
# add library install path to the rpath list
@@ -50,20 +51,206 @@
# output directories
SET( EXECUTABLE_OUTPUT_PATH "${${PROJECT_NAME}_BINARY_DIR}/bin" CACHE PATH
- "EXECUTABLE_OUTPUT_PATH" FORCE )
+ "EXECUTABLE_OUTPUT_PATH" FORCE )
SET( LIBRARY_OUTPUT_PATH "${${PROJECT_NAME}_BINARY_DIR}/lib" CACHE PATH
- "LIBRARY_OUTPUT_PATH" FORCE )
+ "LIBRARY_OUTPUT_PATH" FORCE )
MARK_AS_ADVANCED( EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH )
+# generate header files with ant aid.generate
+IF( NOT EXISTS "${${PROJECT_NAME}_SOURCE_DIR}/src/cpp/include/EVENT/LCIO.h" )
+ # check if java is available
+ # FIXME put this stuff into a module FindJDK.cmake?
+
+ IF( NOT DEFINED ENV{JDK_HOME} AND NOT DEFINED ENV{JAVA_HOME} )
+ MESSAGE( STATUS "Autodetecting java..." )
+ FIND_PACKAGE( Java )
+ IF( JAVA_RUNTIME )
+ SET( java_bin "${JAVA_RUNTIME}" )
+ IF( UNIX )
+ # initialize flow-control variable
+ SET( link_found TRUE )
+
+ # dereference links
+ WHILE( link_found )
+ # check if the java binary is a symbolic link
+ EXEC_PROGRAM( file ARGS "${java_bin}"
+ OUTPUT_VARIABLE out_tmp
+ RETURN_VALUE out_ret )
+ IF( out_ret )
+ MESSAGE( SEND_ERROR "Error dereferencing links to Java Home!!" )
+ MESSAGE( FATAL_ERROR "${out_tmp}" )
+ ENDIF()
+ # set variable if link is found
+ STRING( REGEX MATCH " symbolic link to " link_found "${out_tmp}" )
+ IF( link_found )
+ # get the file to where the link points to
+ STRING( REGEX REPLACE ".* symbolic link to (.*)" "\\1" out_regex "${out_tmp}" )
+ MESSAGE( STATUS "Java binary ${java_bin} is a symbolic link to ${out_regex}" )
+ SET( java_bin "${out_regex}" )
+ ENDIF()
+ ENDWHILE()
+ ENDIF()
+ # get java_path out of java binary
+ STRING( REGEX REPLACE "(.*)\\/bin\\/java$" "\\1" java_path ${java_bin} )
+ ELSE()
+ MESSAGE( FATAL_ERROR "Java was not found in your system!!" )
+ ENDIF()
+ ELSE()
+ # in case JDK_HOME or JAVA_HOME already set ensure that both variables
+ # are set correctly (JDK_HOME as well as JAVA_HOME)
+ IF( DEFINED ENV{JDK_HOME} AND DEFINED ENV{JAVA_HOME} )
+ IF( ENV{JDK_HOME} STREQUAL "$ENV{JAVA_HOME}" )
+ SET( java_path "$ENV{JDK_HOME}" )
+ ELSE()
+ MESSAGE( SEND_ERROR
+ "JDK_HOME and JAVA_HOME are set to different paths!!" )
+ MESSAGE( STATUS "JDK_HOME: $ENV{JDK_HOME}" )
+ MESSAGE( STATUS "JAVA_HOME: $ENV{JAVA_HOME}" )
+ MESSAGE( FATAL_ERROR
+ "Please unset one of them or set both correctly!!" )
+ ENDIF()
+ ELSE()
+ IF( DEFINED ENV{JDK_HOME} )
+ SET( java_path "$ENV{JDK_HOME}" )
+ ENDIF()
+ IF( DEFINED ENV{JAVA_HOME} )
+ SET( java_path "$ENV{JAVA_HOME}" )
+ ENDIF()
+ ENDIF()
+ SET( java_bin "${java_path}/bin/java" )
+ IF( NOT EXISTS "${java_bin}" )
+ MESSAGE( FATAL_ERROR
+ "Java runtime not found in: ${java_bin}" )
+ ENDIF()
+ ENDIF()
+
+ # parse the output of java -version
+ EXEC_PROGRAM( "${java_bin}" ARGS "-version"
+ OUTPUT_VARIABLE out_tmp
+ RETURN_VALUE out_ret )
+ IF( out_ret )
+ MESSAGE( SEND_ERROR "Error executing java -version!!" )
+ ENDIF()
+ STRING( REGEX REPLACE ".* version \"([0-9]+\\.[0-9]+\\.[0-9]+).*"
+ "\\1" java_version "${out_tmp}" )
+
+ # display info
+ MESSAGE( STATUS "JDK_HOME and JAVA_HOME set to ${java_path}" )
+ MESSAGE( STATUS "Java version ${java_version} configured successfully!" )
+
+ # set environment variables
+ SET( ENV{JDK_HOME} "${java_path}" )
+ SET( ENV{JAVA_HOME} "${java_path}" )
+ SET( ENV{LCIO} "${${PROJECT_NAME}_SOURCE_DIR}" )
+ SET( ENV{PATH} "${${PROJECT_NAME}_SOURCE_DIR}/tools:${java_path}/bin:$ENV{PATH}" )
+
+ # now generate header files
+ MESSAGE( STATUS "Generating ${PROJECT_NAME} header files with ant aid.generate..." )
+ EXEC_PROGRAM( ant "${${PROJECT_NAME}_SOURCE_DIR}"
+ ARGS aid.generate
+ OUTPUT_VARIABLE out_tmp
+ RETURN_VALUE out_ret )
+ # check if everything went ok
+ IF( NOT out_ret )
+ MESSAGE( STATUS "Header files successfully generated..." )
+ ELSE()
+ MESSAGE( SEND_ERROR "Error generating header files!!" )
+ MESSAGE( FATAL_ERROR "${out_tmp}" )
+ ENDIF()
+ENDIF()
+
# input directories
ADD_SUBDIRECTORY( sio sio )
ADD_SUBDIRECTORY( src/cpp lcio )
ADD_SUBDIRECTORY( src/f77 f77 )
+# find doc tools
+FIND_PACKAGE( Doxygen )
+FIND_PACKAGE( LATEX )
+
+IF( LATEX_COMPILER AND MAKEINDEX_COMPILER AND PDFLATEX_COMPILER
+ AND DVIPS_CONVERTER AND LATEX2HTML_CONVERTER AND DOXYGEN_FOUND )
+
+ # api documentation
+ ADD_CUSTOM_COMMAND(
+ OUTPUT "${${PROJECT_NAME}_SOURCE_DIR}/doc/doxygen_api/html"
+ COMMAND "${DOXYGEN_EXECUTABLE}"
+ WORKING_DIRECTORY "${${PROJECT_NAME}_SOURCE_DIR}/doc/doxygen_api"
+ COMMENT "Building API Documentation..."
+ VERBATIM )
+
+ ADD_CUSTOM_TARGET( doc_api
+ DEPENDS "${${PROJECT_NAME}_SOURCE_DIR}/doc/doxygen_api/html" )
+
+ # user manual
+ ADD_CUSTOM_COMMAND(
+ OUTPUT "${${PROJECT_NAME}_SOURCE_DIR}/src/latex/manual.dvi"
+ COMMAND "${LATEX_COMPILER}" ARGS "manual.tex"
+ COMMAND "${DVIPS_CONVERTER}" ARGS "manual.dvi"
+ COMMAND "${PDFLATEX_COMPILER}" ARGS "manual.tex"
+ COMMAND "${LATEX2HTML_CONVERTER}" ARGS
+ "-mkdir -dir ${${PROJECT_NAME}_SOURCE_DIR}/doc/manual_html -info 0 -no_auto_link -split 0 -no_navigation manual.tex"
+ WORKING_DIRECTORY "${${PROJECT_NAME}_SOURCE_DIR}/src/latex"
+ COMMENT "Building Documentation - Users Manual..."
+ VERBATIM )
+
+ ADD_CUSTOM_TARGET( doc_manual
+ DEPENDS "${${PROJECT_NAME}_SOURCE_DIR}/src/latex/manual.dvi" )
+
+ # reference manual
+ ADD_CUSTOM_COMMAND(
+ OUTPUT "${${PROJECT_NAME}_SOURCE_DIR}/doc/doxygen_api/latex/refman.dvi"
+ COMMAND "${LATEX_COMPILER}" ARGS "refman.tex"
+ COMMAND "${DVIPS_CONVERTER}" ARGS "refman.dvi"
+ # FIXME psnup should be detected
+ COMMAND "psnup" ARGS "-2 refman.ps ${${PROJECT_NAME}_SOURCE_DIR}/doc/lciorefman.ps"
+ COMMAND "${PDFLATEX_COMPILER}" ARGS "refman.tex"
+ WORKING_DIRECTORY "${${PROJECT_NAME}_SOURCE_DIR}/doc/doxygen_api/latex"
+ COMMENT "Building Documentation - Reference Manual..."
+ VERBATIM )
+
+ ADD_CUSTOM_TARGET( doc_refman
+ DEPENDS
+ "${${PROJECT_NAME}_SOURCE_DIR}/doc/doxygen_api/html"
+ "${${PROJECT_NAME}_SOURCE_DIR}/doc/doxygen_api/latex/refman.dvi" )
+
+ # add custom target for building all documentation
+ ADD_CUSTOM_TARGET( doc DEPENDS doc_api doc_refman doc_manual )
+
+ELSE()
+ IF( NOT DOXYGEN_FOUND )
+ MESSAGE( SEND_ERROR "Doxygen not found in your system!!" )
+ ELSE()
+ MESSAGE( SEND_ERROR "Latex or one of its tools (dvips, pdflatex, latex2html, makeindex) not found in your system!!" )
+ ENDIF()
+ IF( INSTALL_DOC )
+ MESSAGE( STATUS "INSTALL_DOC forced to OFF" )
+ SET( INSTALL_DOC OFF )
+ ENDIF()
+ENDIF()
+
+
+# install documentation rules
+IF( INSTALL_DOC )
+ # make sure documentation is built before make install is called
+ INSTALL( CODE "EXEC_PROGRAM(${CMAKE_BUILD_TOOL} ${${PROJECT_NAME}_BINARY_DIR} ARGS doc)" )
+
+ # install documentation
+ INSTALL( DIRECTORY "${${PROJECT_NAME}_SOURCE_DIR}/doc"
+ DESTINATION .
+ PATTERN "*CVS*" EXCLUDE )
+
+ INSTALL( FILES
+ "${${PROJECT_NAME}_SOURCE_DIR}/src/latex/manual.ps"
+ "${${PROJECT_NAME}_SOURCE_DIR}/src/latex/manual.pdf"
+ DESTINATION doc )
+
+ENDIF()
+
# create uninstall configuration file
CONFIGURE_FILE( "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
- "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
- IMMEDIATE @ONLY )
+ "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
+ IMMEDIATE @ONLY )
# create uninstall target
ADD_CUSTOM_TARGET( uninstall
@@ -71,11 +258,11 @@
# create configuration file from .in file
CONFIGURE_FILE( "${${PROJECT_NAME}_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in"
- "${${PROJECT_NAME}_BINARY_DIR}/${PROJECT_NAME}Config.cmake" @ONLY )
+ "${${PROJECT_NAME}_BINARY_DIR}/${PROJECT_NAME}Config.cmake" @ONLY )
# install configuration file
INSTALL( FILES "${${PROJECT_NAME}_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
- DESTINATION . )
+ DESTINATION . )
# display status message for important variables
MESSAGE( STATUS )
@@ -86,6 +273,7 @@
MESSAGE( STATUS "CMAKE_MODULE_PATH = ${CMAKE_MODULE_PATH}" )
MESSAGE( STATUS "BUILD_LCIO_TESTJOBS = ${BUILD_LCIO_TESTJOBS}" )
MESSAGE( STATUS "BUILD_F77_TESTJOBS = ${BUILD_F77_TESTJOBS}" )
+MESSAGE( STATUS "INSTALL_DOC = ${INSTALL_DOC}" )
MESSAGE( STATUS "Change a value with: cmake -D<Variable>=<Value>" )
MESSAGE( STATUS "-------------------------------------------------------------------------------" )
MESSAGE( STATUS )
@@ -93,17 +281,19 @@
# force some variables that could be defined in the command line
# to be written to cache
SET( BUILD_SHARED_LIBS "${BUILD_SHARED_LIBS}" CACHE BOOL
- "Build shared libraries flag" FORCE )
+ "Build shared libraries flag" FORCE )
SET( CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE PATH
- "Where to install ${PROJECT_NAME}" FORCE )
+ "Where to install ${PROJECT_NAME}" FORCE )
SET( CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING
- "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE )
+ "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE )
SET( CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" CACHE PATH
- "Path to custom CMake Modules" FORCE )
+ "Path to custom CMake Modules" FORCE )
SET( BUILD_LCIO_TESTJOBS "${BUILD_LCIO_TESTJOBS}" CACHE BOOL
- "Set to ON to build LCIO testbobs" FORCE )
+ "Set to ON to build LCIO testbobs" FORCE )
SET( BUILD_F77_TESTJOBS "${BUILD_F77_TESTJOBS}" CACHE BOOL
- "Set to ON to build LCIO F77 testbobs" FORCE )
+ "Set to ON to build LCIO F77 testbobs" FORCE )
+SET( INSTALL_DOC "${INSTALL_DOC}" CACHE BOOL
+ "Set to ON to install Documentation" FORCE )
# export library dependencies (keep this as the last line in the file)
EXPORT_LIBRARY_DEPENDENCIES( "${PROJECT_NAME}LibDeps.cmake" )