From 7ee5592092707da25bf8cccfe3097f0a2a4a84de Mon Sep 17 00:00:00 2001 From: "Tim E. Real" Date: Tue, 19 Oct 2010 06:28:13 +0000 Subject: See ChangeLog --- muse2/cmake/QtWrapMacros.cmake | 28 ++++++++ muse2/cmake/TargetDoc.cmake | 125 +++++++++++++++++++++++++++++++++++ muse2/cmake/UsePkgConfig1.cmake | 45 +++++++++++++ muse2/cmake/WrapMacros.cmake | 14 ++++ muse2/cmake/cmake_uninstall.cmake.in | 22 ++++++ 5 files changed, 234 insertions(+) create mode 100644 muse2/cmake/QtWrapMacros.cmake create mode 100644 muse2/cmake/TargetDoc.cmake create mode 100644 muse2/cmake/UsePkgConfig1.cmake create mode 100644 muse2/cmake/WrapMacros.cmake create mode 100644 muse2/cmake/cmake_uninstall.cmake.in diff --git a/muse2/cmake/QtWrapMacros.cmake b/muse2/cmake/QtWrapMacros.cmake new file mode 100644 index 00000000..662cabae --- /dev/null +++ b/muse2/cmake/QtWrapMacros.cmake @@ -0,0 +1,28 @@ + ## QT4_WRAP_UI3(outfiles inputfile ... ) + ## + ## Adapted from QT4_WRAP_UI in FindQt4.cmake module, for MusE, by Tim. + ## + ## + + MACRO (QT4_WRAP_UI3 outfiles ) + QT4_EXTRACT_OPTIONS(ui_files ui_options ${ARGN}) + + FOREACH (it ${ui_files}) + GET_FILENAME_COMPONENT(outfile ${it} NAME_WE) + GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE) + SET(outfile_h ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.h) + SET(outfile_cpp ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.cpp) + ADD_CUSTOM_COMMAND(OUTPUT ${outfile_h} ${outfile_cpp} + COMMAND ${QT_UIC3_EXECUTABLE} + ARGS ${ui_options} -o ${outfile_h} ${infile} + COMMAND ${QT_UIC3_EXECUTABLE} + ARGS ${ui_options} -o ${outfile_cpp} -impl ${outfile_h} ${infile} + COMMAND ${QT_MOC_EXECUTABLE} + ARGS ${outfile_h} >> ${outfile_cpp} + MAIN_DEPENDENCY ${infile}) + SET(${outfiles} ${${outfiles}} ${outfile_h} ${outfile_cpp}) + ENDFOREACH (it) + + ENDMACRO (QT4_WRAP_UI3) + + diff --git a/muse2/cmake/TargetDoc.cmake b/muse2/cmake/TargetDoc.cmake new file mode 100644 index 00000000..e6afb583 --- /dev/null +++ b/muse2/cmake/TargetDoc.cmake @@ -0,0 +1,125 @@ +# -helper macro to add a "doxy" target with CMake build system. +# and configure Doxyfile.in to Doxyfile +# +# target "doxy" allows building the documentation with doxygen/dot on WIN32 and Linux +# Creates .chm windows help file if MS HTML help workshop +# (available from http://msdn.microsoft.com/workshop/author/htmlhelp) +# is installed with its DLLs in PATH. +# +# +# Please note, that the tools, e.g.: +# doxygen, dot, latex, dvips, makeindex, gswin32, etc. +# must be in path. +# +# Note about Visual Studio Projects: +# MSVS hast its own path environment which may differ from the shell. +# See "Menu Tools/Options/Projects/VC++ Directories" in VS 7.1 +# +# author Jan Woetzel 2004-2006 +# www.mip.informatik.uni-kiel.de/~jw + +FIND_PACKAGE(Doxygen) + +IF (DOXYGEN) + + MESSAGE("found Doxygen") + + # click+jump in Emacs and Visual Studio (for Doxyfile) (jw) + IF (CMAKE_BUILD_TOOL MATCHES "(msdev|devenv)") + SET(DOXY_WARN_FORMAT "\"$file($line) : $text \"") + ELSE (CMAKE_BUILD_TOOL MATCHES "(msdev|devenv)") + SET(DOXY_WARN_FORMAT "\"$file:$line: $text \"") + ENDIF (CMAKE_BUILD_TOOL MATCHES "(msdev|devenv)") + + # we need latex for doxygen because of the formulas + FIND_PACKAGE(LATEX) + IF (NOT LATEX_COMPILER) + MESSAGE(STATUS "latex command LATEX_COMPILER not found but usually required. You will probably get warnings and user inetraction on doxy run.") + ENDIF (NOT LATEX_COMPILER) + IF (NOT MAKEINDEX_COMPILER) + MESSAGE(STATUS "makeindex command MAKEINDEX_COMPILER not found but usually required.") + ENDIF (NOT MAKEINDEX_COMPILER) + IF (NOT DVIPS_CONVERTER) + MESSAGE(STATUS "dvips command DVIPS_CONVERTER not found but usually required.") + ENDIF (NOT DVIPS_CONVERTER) + + IF (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in") + MESSAGE(STATUS "configured ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in --> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile") + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in + ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile + @ONLY ) + # use (configured) Doxyfile from (out of place) BUILD tree: + SET(DOXY_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile") + ELSE (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in") + # use static hand-edited Doxyfile from SOURCE tree: + SET(DOXY_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile") + IF (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile") + MESSAGE(STATUS "WARNING: using existing ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile instead of configuring from Doxyfile.in file.") + ELSE (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile") + IF (EXISTS "${CMAKE_MODULE_PATH}/Doxyfile.in") + # using template Doxyfile.in + MESSAGE(STATUS "configured ${CMAKE_CMAKE_MODULE_PATH}/Doxyfile.in --> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile") + CONFIGURE_FILE(${CMAKE_MODULE_PATH}/Doxyfile.in + ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile + @ONLY ) + SET(DOXY_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile") + ELSE (EXISTS "${CMAKE_MODULE_PATH}/Doxyfile.in") + # failed completely... + MESSAGE(SEND_ERROR "Please create ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in (or Doxyfile as fallback)") + ENDIF(EXISTS "${CMAKE_MODULE_PATH}/Doxyfile.in") + + ENDIF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile") + ENDIF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in") + + ADD_CUSTOM_TARGET(doxy ${DOXYGEN} ${DOXY_CONFIG}) + + # create a windows help .chm file using hhc.exe + # HTMLHelp DLL must be in path! + # fallback: use hhw.exe interactively + IF (WIN32) + FIND_PACKAGE(HTMLHelp) + IF (HTML_HELP_COMPILER) + SET (TMP "${CMAKE_CURRENT_BINARY_DIR}\\Doc\\html\\index.hhp") + STRING(REGEX REPLACE "[/]" "\\\\" HHP_FILE ${TMP} ) + # MESSAGE(SEND_ERROR "DBG HHP_FILE=${HHP_FILE}") + ADD_CUSTOM_TARGET(winhelp ${HTML_HELP_COMPILER} ${HHP_FILE}) + ADD_DEPENDENCIES (winhelp doxy) + + IF (NOT TARGET_DOC_SKIP_INSTALL) + # install windows help? + # determine useful name for output file + # should be project and version unique to allow installing + # multiple projects into one global directory + IF (EXISTS "${PROJECT_BINARY_DIR}/Doc/html/index.chm") + IF (PROJECT_NAME) + SET(OUT "${PROJECT_NAME}") + ELSE (PROJECT_NAME) + SET(OUT "Documentation") # default + ENDIF(PROJECT_NAME) + IF (${PROJECT_NAME}_VERSION_MAJOR) + SET(OUT "${OUT}-${${PROJECT_NAME}_VERSION_MAJOR}") + IF (${PROJECT_NAME}_VERSION_MINOR) + SET(OUT "${OUT}.${${PROJECT_NAME}_VERSION_MINOR}") + IF (${PROJECT_NAME}_VERSION_PATCH) + SET(OUT "${OUT}.${${PROJECT_NAME}_VERSION_PATCH}") + ENDIF(${PROJECT_NAME}_VERSION_PATCH) + ENDIF(${PROJECT_NAME}_VERSION_MINOR) + ENDIF(${PROJECT_NAME}_VERSION_MAJOR) + # keep suffix + SET(OUT "${OUT}.chm") + + #MESSAGE("DBG ${PROJECT_BINARY_DIR}/Doc/html/index.chm \n${OUT}") + # create target used by install and package commands + INSTALL(FILES "${PROJECT_BINARY_DIR}/Doc/html/index.chm" + DESTINATION "doxy" + RENAME "${OUT}" + ) + ENDIF(EXISTS "${PROJECT_BINARY_DIR}/Doc/html/index.chm") + ENDIF(NOT TARGET_DOC_SKIP_INSTALL) + + ENDIF(HTML_HELP_COMPILER) + # MESSAGE(SEND_ERROR "HTML_HELP_COMPILER=${HTML_HELP_COMPILER}") + ENDIF (WIN32) +ELSE(DOXYGEN) + MESSAGE("Doxygen not found") +ENDIF(DOXYGEN) diff --git a/muse2/cmake/UsePkgConfig1.cmake b/muse2/cmake/UsePkgConfig1.cmake new file mode 100644 index 00000000..55654d98 --- /dev/null +++ b/muse2/cmake/UsePkgConfig1.cmake @@ -0,0 +1,45 @@ +# - pkg-config module for CMake +# +# Defines the following macros: +# +# PKGCONFIG(package includedir libdir linkflags cflags) +# +# Calling PKGCONFIG will fill the desired information into the 4 given arguments, +# e.g. PKGCONFIG(libart-2.0 LIBART_INCLUDE_DIR LIBART_LINK_DIR LIBART_LINK_FLAGS LIBART_CFLAGS) +# if pkg-config was NOT found or the specified software package doesn't exist, the +# variable will be empty when the function returns, otherwise they will contain the respective information +# + +FIND_PROGRAM(PKGCONFIG_EXECUTABLE NAMES pkg-config PATHS /usr/bin /usr/local/bin ) + +MACRO(PKGCONFIG _package _minVersion _include_DIR _link_DIR _link_FLAGS _cflags) +# reset the variables at the beginning + SET(${_include_DIR}) + SET(${_link_DIR}) + SET(${_link_FLAGS}) + SET(${_cflags}) + + # if pkg-config has been found + IF(PKGCONFIG_EXECUTABLE) + + EXEC_PROGRAM(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --atleast-version=${_minVersion} RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull ) +# EXEC_PROGRAM(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --exists RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull ) + + # and if the package of interest also exists for pkg-config, then get the information + IF(NOT _return_VALUE) + + EXEC_PROGRAM(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --variable=includedir OUTPUT_VARIABLE ${_include_DIR} ) + + EXEC_PROGRAM(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --variable=libdir OUTPUT_VARIABLE ${_link_DIR} ) + + EXEC_PROGRAM(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --libs OUTPUT_VARIABLE ${_link_FLAGS} ) + + EXEC_PROGRAM(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --cflags OUTPUT_VARIABLE ${_cflags} ) + + ENDIF(NOT _return_VALUE) + + ENDIF(PKGCONFIG_EXECUTABLE) + +ENDMACRO(PKGCONFIG _include_DIR _link_DIR _link_FLAGS _cflags) + +MARK_AS_ADVANCED(PKGCONFIG_EXECUTABLE) diff --git a/muse2/cmake/WrapMacros.cmake b/muse2/cmake/WrapMacros.cmake new file mode 100644 index 00000000..79b3ef7a --- /dev/null +++ b/muse2/cmake/WrapMacros.cmake @@ -0,0 +1,14 @@ + +MACRO(WRAP_CPP outfiles ) + FOREACH(it ${ARGN}) + SET(${outfiles} ${${outfiles}} ${it}.cpp) + ENDFOREACH(it) + ENDMACRO(WRAP_CPP) + +MACRO(WRAP_H outfiles ) + FOREACH(it ${ARGN}) + SET(${outfiles} ${${outfiles}} ${it}.h) + ENDFOREACH(it) + ENDMACRO(WRAP_H) + + diff --git a/muse2/cmake/cmake_uninstall.cmake.in b/muse2/cmake/cmake_uninstall.cmake.in new file mode 100644 index 00000000..c8ff0b7e --- /dev/null +++ b/muse2/cmake/cmake_uninstall.cmake.in @@ -0,0 +1,22 @@ +IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") +ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + +FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) +STRING(REGEX REPLACE "\n" ";" files "${files}") +FOREACH(file ${files}) + MESSAGE(STATUS "Uninstalling \"${file}\"") + IF(EXISTS "${file}") + EXEC_PROGRAM( + "@CMAKE_COMMAND@" ARGS "-E remove \"${file}\"" + OUTPUT_VARIABLE rm_out + RETURN_VALUE rm_retval + ) + IF("${rm_retval}" STREQUAL 0) + ELSE("${rm_retval}" STREQUAL 0) + MESSAGE(FATAL_ERROR "Problem when removing \"${file}\"") + ENDIF("${rm_retval}" STREQUAL 0) + ELSE(EXISTS "${file}") + MESSAGE(STATUS "File \"${file}\" does not exist.") + ENDIF(EXISTS "${file}") +ENDFOREACH(file) -- cgit v1.2.3