From 34926ef085752336cc5963f07dce9bdee13b1c5a Mon Sep 17 00:00:00 2001 From: Kimmo Varis Date: Sat, 6 Mar 2010 21:20:23 +0200 Subject: [PATCH 01/15] Add back CMake build files. --- CMake/xmlto.cmake | 103 ++++++++++++++++++++++++++++++++ CMakeLists.txt | 35 +++++++++++ cli/CMakeLists.txt | 52 ++++++++++++++++ gui/CMakeLists.txt | 141 ++++++++++++++++++++++++++++++++++++++++++++ lib/CMakeLists.txt | 61 +++++++++++++++++++ test/CMakeLists.txt | 65 ++++++++++++++++++++ 6 files changed, 457 insertions(+) create mode 100644 CMake/xmlto.cmake create mode 100644 CMakeLists.txt create mode 100644 cli/CMakeLists.txt create mode 100644 gui/CMakeLists.txt create mode 100644 lib/CMakeLists.txt create mode 100644 test/CMakeLists.txt diff --git a/CMake/xmlto.cmake b/CMake/xmlto.cmake new file mode 100644 index 00000000000..ab7f0e3b77d --- /dev/null +++ b/CMake/xmlto.cmake @@ -0,0 +1,103 @@ +# - Convert XML docBook files to various formats +# This will convert XML docBook files to various formats like: +# man html txt dvi ps pdf +# macro XMLTO(outfiles infiles... MODES modes...) + +set ( XmlTo_FOUND false ) + +find_program ( XMLTO_EXECUTABLE + NAMES xmlto + DOC "path to the xmlto docbook xslt frontend" +) + +if ( XMLTO_EXECUTABLE ) + set ( XmlTo_FOUND true ) +endif ( XMLTO_EXECUTABLE ) + +if ( NOT XmlTo_FIND_QUIETLY ) + if ( XmlTo_FIND_REQUIRED ) + FATAL_ERROR ( "xmlto not found" ) + endif ( XmlTo_FIND_REQUIRED ) +endif ( NOT XmlTo_FIND_QUIETLY ) + +macro ( _XMLTO_FILE outfiles mode) + #special settings + set ( XMLTO_FILEEXT_man 1 ) + set ( XMLTO_MODE_html xhtml-nochunks ) + + if ( NOT XMLTO_MODE_${mode}) + set ( XMLTO_MODE_${mode} ${mode} ) + endif ( NOT XMLTO_MODE_${mode} ) + if ( NOT XMLTO_FILEEXT_${mode} ) + set ( XMLTO_FILEEXT_${mode} ${mode} ) + endif ( NOT XMLTO_FILEEXT_${mode} ) + + foreach ( dbFile ${ARGN} ) + #TODO: set XMLTO_FILEEXT_man to value from + if ( "${mode}" STREQUAL "man" ) + file ( READ "${dbFile}" _DB_FILE_CONTENTS ) + string ( REGEX MATCH "[^<]*" XMLTO_FILEEXT_${mode} "${_DB_FILE_CONTENTS}" ) + string ( REGEX REPLACE "^" "" XMLTO_FILEEXT_${mode} "${XMLTO_FILEEXT_${mode}}" ) + string ( REGEX REPLACE "[[:space:]]" "" XMLTO_FILEEXT_${mode} "${XMLTO_FILEEXT_${mode}}" ) + endif ( "${mode}" STREQUAL "man" ) + + get_filename_component ( dbFilePath ${CMAKE_CURRENT_BINARY_DIR}/${dbFile} PATH ) + get_filename_component ( dbFileWE ${dbFile} NAME_WE ) + get_filename_component ( dbFileAbsWE ${dbFilePath}/${dbFileWE} ABSOLUTE ) + + add_custom_command ( + OUTPUT ${dbFileAbsWE}.${XMLTO_FILEEXT_${mode}} + COMMAND ${XMLTO_EXECUTABLE} ${XMLTO_COMMAND_ARGS} -o ${CMAKE_CURRENT_BINARY_DIR} + ${XMLTO_MODE_${mode}} "${CMAKE_CURRENT_SOURCE_DIR}/${dbFile}" + MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/${dbFile} + VERBATIM + ) + + set ( ${outfiles} + ${${outfiles}} + ${dbFileAbsWE}.${XMLTO_FILEEXT_${mode}} + ) + endforeach ( dbFile ) +endmacro ( _XMLTO_FILE outfiles ) + +macro ( XMLTO ) + set ( XMLTO_MODES ) + set ( XMLTO_FILES ) + set ( XMLTO_HAS_MODES false ) + set ( XMLTO_ADD_DEFAULT false ) + foreach ( arg ${ARGN} ) + if ( ${arg} STREQUAL "MODES" ) + set ( XMLTO_HAS_MODES true ) + elseif ( ${arg} STREQUAL "ALL" ) + set ( XMLTO_ADD_DEFAULT true ) + else ( ${arg} STREQUAL "MODES" ) + if ( XMLTO_HAS_MODES ) + set ( XMLTO_MODES ${XMLTO_MODES} ${arg} ) + else ( XMLTO_HAS_MODES ) + set ( XMLTO_FILES ${XMLTO_FILES} ${arg} ) + endif ( XMLTO_HAS_MODES ) + endif ( ${arg} STREQUAL "MODES" ) + endforeach ( arg ${ARGN} ) + if ( NOT XMLTO_MODES ) + set ( XMLTO_MODES html ) + endif ( NOT XMLTO_MODES ) + + foreach ( mode ${XMLTO_MODES} ) + _xmlto_file ( XMLTO_FILES_${mode} ${mode} ${XMLTO_FILES} ) + if ( XMLTO_ADD_DEFAULT ) + add_custom_target ( ${mode} ALL + DEPENDS ${XMLTO_FILES_${mode}} + VERBATIM + ) + else ( XMLTO_ADD_DEFAULT ) + add_custom_target ( ${mode} + DEPENDS ${XMLTO_FILES_${mode}} + VERBATIM + ) + endif ( XMLTO_ADD_DEFAULT ) + endforeach ( mode ) + + set ( XMLTO_MODES ) + set ( XMLTO_FILES ) +endmacro ( XMLTO ) + diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000000..efa4e400ec7 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,35 @@ +# Minimal CMake build file +# Builds: +# - static library from lib directory +# - commandline executable +# - test suite +# - Qt GUI + +# To build with CMake: +# - install CMake 2.6 or later +# - $ cmake . +# - $ make + +cmake_minimum_required (VERSION 2.6) + +PROJECT(CPPCHECK) + +# Building lib as static library is disabled due to bug +# #1299 CMake: The CheckClass is not used +# https://sourceforge.net/apps/trac/cppcheck/ticket/1299 +# Instead lib code is included directly into cli and gui targets +# ADD_SUBDIRECTORY(lib) + +ADD_SUBDIRECTORY(cli) + +# Exclude tests from command line targets but include them to VS IDE targets. +# There is 'make check' -target for compiling and running tests from +# command line. +IF (MSVC_IDE) + ADD_SUBDIRECTORY(test) +ELSE (MSVC_IDE) + ADD_SUBDIRECTORY(test EXCLUDE_FROM_ALL) +ENDIF (MSVC_IDE) + +ADD_SUBDIRECTORY(gui) +ADD_SUBDIRECTORY(man) diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt new file mode 100644 index 00000000000..0ea7021e786 --- /dev/null +++ b/cli/CMakeLists.txt @@ -0,0 +1,52 @@ +# Minimal CMake build file to build cppcheck command line executable + +SET(CHECKCLI_HDRS + cppcheckexecutor.h + threadexecutor.h +) + +SET(CHECKCLI_SRCS + cppcheckexecutor.cpp + threadexecutor.cpp + main.cpp +) + +# Add Windows resource file +if (WIN32) + SET(CHECKCLI_HDRS + ${CHECKCLI_HDRS} + resource.h + ) + + SET(CHECKCLI_SRCS + ${CHECKCLI_SRCS} + cppcheck.rc + ) +endif (WIN32) + +# Libraries to link +#set(CHECK_LIBS +# checklib +#) + +aux_source_directory(${CPPCHECK_SOURCE_DIR}/lib LIB_SRCS) + +# Windows needs additional shlwapi library +if (WIN32 AND NOT CYGWIN) +set(CHECK_LIBS + ${CHECK_LIBS} + shlwapi +) +endif (WIN32 AND NOT CYGWIN) + +if (CMAKE_COMPILER_IS_GNUCXX) + set(CMAKE_CXX_FLAGS + ${CMAKE_CXX_FLAGS} + "-Wall -Wextra -pedantic" + ) +endif (CMAKE_COMPILER_IS_GNUCXX) + +include_directories (${CPPCHECK_SOURCE_DIR}/lib) +ADD_EXECUTABLE(../cppcheck ${CHECKCLI_SRCS} ${CHECKCLI_HDRS} ${LIB_SRCS}) +TARGET_LINK_LIBRARIES(cppcheck ${CHECK_LIBS}) + diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt new file mode 100644 index 00000000000..0fb32182e04 --- /dev/null +++ b/gui/CMakeLists.txt @@ -0,0 +1,141 @@ +# Minimal CMake build file to build cppcheck Qt GUI + +# find and setup Qt4 for this project +find_package(Qt4) + +IF(QT4_FOUND) + +# Add needed Qt modules +set(QT_USE_QTMAIN TRUE) +set(QT_USE_QTXML TRUE) +include(${QT_USE_FILE}) + +include_directories (${CPPCHECK_SOURCE_DIR}/lib) +# Generated files (in build directory) need to know gui directory +include_directories (${CPPCHECK_SOURCE_DIR}/gui) + +# Header files - listed for mocking +SET(CHECK_HEADERS + aboutdialog.h + applicationdialog.h + applicationlist.h + checkthread.h + common.h + csvreport.h + fileviewdialog.h + mainwindow.h + projectfile.h + report.h + resultstree.h + resultsview.h + settingsdialog.h + threadhandler.h + threadresult.h + translationhandler.h + txtreport.h + xmlreport.h +) + +# Source files +SET(CHECKGUI_SRCS + aboutdialog.cpp + applicationdialog.cpp + applicationlist.cpp + checkthread.cpp + csvreport.cpp + fileviewdialog.cpp + main.cpp + mainwindow.cpp + projectfile.cpp + report.cpp + resultstree.cpp + resultsview.cpp + settingsdialog.cpp + threadhandler.cpp + threadresult.cpp + translationhandler.cpp + txtreport.cpp + xmlreport.cpp +) + +# Add Windows resource file +if (WIN32) + SET(CHECKGUI_SRCS + ${CHECKGUI_SRCS} + cppcheck-gui.rc + ) +endif (WIN32) + +# UI files +SET(CHECK_UIS + about.ui + application.ui + file.ui + main.ui + resultsview.ui + settings.ui +) + +# Translation files +SET(CHECK_TRANS + cppcheck_de.ts + cppcheck_fi.ts + cppcheck_pl.ts + cppcheck_se.ts + cppcheck_en.ts + cppcheck_nl.ts + cppcheck_ru.ts +) + +SET(CHECK_RCCS gui.qrc) + +aux_source_directory(${CPPCHECK_SOURCE_DIR}/lib LIB_SRCS) + +# Libraries to link +#set(CHECK_LIBS +# checklib +#) + +# Windows needs additional shlwapi library +if (WIN32 AND NOT CYGWIN) +set(CHECK_LIBS + ${CHECK_LIBS} + shlwapi + htmlhelp +) +endif (WIN32 AND NOT CYGWIN) + +if (CMAKE_COMPILER_IS_GNUCXX) + set(CMAKE_CXX_FLAGS + ${CMAKE_CXX_FLAGS} + "-Wall" + ) +endif (CMAKE_COMPILER_IS_GNUCXX) + +# Generate rules for building source files from the resources +QT4_ADD_RESOURCES(CHECK_RCC_SRCS ${CHECK_RCCS}) + +# Process UI files +QT4_WRAP_UI(CHECK_UIS_H ${CHECK_UIS}) + +# Mock header files +QT4_WRAP_CPP(CHECK_MOC_SRCS ${CHECK_HEADERS}) + +# add translations ... +QT4_ADD_TRANSLATION(CHECK_QM ${CHECK_TRANS}) + +# Create folders for Visual Studio IDE +SOURCE_GROUP("Header Files" FILES ${CHECK_HEADERS}) +SOURCE_GROUP("Ui Files" ".ui$") +SOURCE_GROUP("Moc Files" "moc_.*cxx$") + +# Include binary directory where code from UI files gets created +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +ADD_EXECUTABLE(gui WIN32 ${CHECKGUI_SRCS} ${CHECK_MOC_SRCS} ${CHECK_HEADERS} + ${CHECK_UIS_H} ${CHECK_RCC_SRCS} ${LIB_SRCS}) +TARGET_LINK_LIBRARIES(gui ${CHECK_LIBS} ${QT_LIBRARIES}) + +ELSE(QT4_FOUND) +message("GUI not built since QT4 not found.") +ENDIF(QT4_FOUND) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt new file mode 100644 index 00000000000..1f181a5f28d --- /dev/null +++ b/lib/CMakeLists.txt @@ -0,0 +1,61 @@ +# Minimal CMake build file to build static cppcheck library +# This static library is used to build executables: +# - cli +# - tests +# - Qt GUI + +SET(CHECKLIB_HDRS + check.h + checkautovariables.h + checkbufferoverrun.h + checkclass.h + checkdangerousfunctions.h + checkexceptionsafety.h + checkheaders.h + checkmemoryleak.h + checkother.h + checkstl.h + checkunusedfunctions.h + classinfo.h + cppcheck.h + errorlogger.h + executionpath.h + filelister.h + mathlib.h + preprocessor.h + settings.h + token.h + tokenize.h +) + +SET(CHECKLIB_SRCS + checkautovariables.cpp + checkbufferoverrun.cpp + checkclass.cpp + checkdangerousfunctions.cpp + checkexceptionsafety.cpp + checkheaders.cpp + checkmemoryleak.cpp + checkother.cpp + checkstl.cpp + checkunusedfunctions.cpp + cppcheck.cpp + errorlogger.cpp + executionpath.cpp + filelister.cpp + mathlib.cpp + preprocessor.cpp + settings.cpp + token.cpp + tokenize.cpp +) + +if (CMAKE_COMPILER_IS_GNUCXX) + set(CMAKE_CXX_FLAGS + ${CMAKE_CXX_FLAGS} + "-Wall -Wextra -pedantic" + ) +endif (CMAKE_COMPILER_IS_GNUCXX) + +ADD_LIBRARY(checklib STATIC ${CHECKLIB_SRCS} ${CHECKLIB_HDRS}) + diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 00000000000..87a0906ab2a --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,65 @@ +# Minimal CMake build file to build cppcheck test suite + +SET(CHECKTEST_HDRS + testsuite.h +) + +SET(CHECKTEST_SRCS + testmemleak.cpp + testother.cpp + testpreprocessor.cpp + testautovariables.cpp + testredundantif.cpp + testbufferoverrun.cpp + testrunner.cpp + testcharvar.cpp + testsimplifytokens.cpp + testclass.cpp + teststl.cpp + testconstructors.cpp + testsuite.cpp + testcppcheck.cpp + testdangerousfunctions.cpp + testtoken.cpp + testdivision.cpp + testtokenize.cpp + testexceptionsafety.cpp + testunusedfunctions.cpp + testfilelister.cpp + testunusedprivfunc.cpp + testincompletestatement.cpp + testunusedvar.cpp + testmathlib.cpp +) + +aux_source_directory(${CPPCHECK_SOURCE_DIR}/lib LIB_SRCS) + +# Libraries to link +#set(CHECK_LIBS +# checklib +#) + +# Windows needs additional shlwapi library +if (WIN32 AND NOT CYGWIN) +set(CHECK_LIBS + ${CHECK_LIBS} + shlwapi +) +endif (WIN32 AND NOT CYGWIN) + +if (CMAKE_COMPILER_IS_GNUCXX) + set(CMAKE_CXX_FLAGS + ${CMAKE_CXX_FLAGS} + "-Wall -Wextra -pedantic" + ) +endif (CMAKE_COMPILER_IS_GNUCXX) + +include_directories (${CPPCHECK_SOURCE_DIR}/lib) +ADD_EXECUTABLE(test ${CHECKTEST_SRCS} ${CHECKTEST_HDRS} ${LIB_SRCS}) +TARGET_LINK_LIBRARIES(test ${CHECK_LIBS}) + +# Add custom 'make check' -target +# It compiles and runs tests +add_custom_target(check COMMAND test) +add_dependencies(check test) + From 12c800c5849d2ec9083c82093119e745d3d10eb3 Mon Sep 17 00:00:00 2001 From: Kimmo Varis Date: Sun, 23 May 2010 21:50:22 +0300 Subject: [PATCH 02/15] CMake: Add some missing files. --- lib/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 1f181a5f28d..eefeac42112 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -21,6 +21,8 @@ SET(CHECKLIB_HDRS errorlogger.h executionpath.h filelister.h + filelister_unix.h + filelister_win32.h mathlib.h preprocessor.h settings.h @@ -43,6 +45,8 @@ SET(CHECKLIB_SRCS errorlogger.cpp executionpath.cpp filelister.cpp + filelister_unix.cpp + filelister_win32.cpp mathlib.cpp preprocessor.cpp settings.cpp From 57b0794860cc250d4221acf9d272e26a0cc4fd06 Mon Sep 17 00:00:00 2001 From: Kimmo Varis Date: Fri, 9 Jul 2010 19:33:27 +0300 Subject: [PATCH 03/15] CMake: Fix link path. --- cli/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt index 0ea7021e786..756d7670a42 100644 --- a/cli/CMakeLists.txt +++ b/cli/CMakeLists.txt @@ -48,5 +48,5 @@ endif (CMAKE_COMPILER_IS_GNUCXX) include_directories (${CPPCHECK_SOURCE_DIR}/lib) ADD_EXECUTABLE(../cppcheck ${CHECKCLI_SRCS} ${CHECKCLI_HDRS} ${LIB_SRCS}) -TARGET_LINK_LIBRARIES(cppcheck ${CHECK_LIBS}) +TARGET_LINK_LIBRARIES(../cppcheck ${CHECK_LIBS}) From 2469313157fae798f0ac07cd5a40c1c6c8da86b0 Mon Sep 17 00:00:00 2001 From: Kimmo Varis Date: Sun, 11 Jul 2010 17:47:12 +0300 Subject: [PATCH 04/15] CMake: Update gcc warning flags. --- cli/CMakeLists.txt | 2 +- lib/CMakeLists.txt | 2 +- test/CMakeLists.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt index 756d7670a42..54830ab0355 100644 --- a/cli/CMakeLists.txt +++ b/cli/CMakeLists.txt @@ -42,7 +42,7 @@ endif (WIN32 AND NOT CYGWIN) if (CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} - "-Wall -Wextra -pedantic" + "-Wall -Wextra -pedantic -Wshadow -Wno-long-long -Wfloat-equal -Wcast-qual" ) endif (CMAKE_COMPILER_IS_GNUCXX) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index eefeac42112..8286fb013f9 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -57,7 +57,7 @@ SET(CHECKLIB_SRCS if (CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} - "-Wall -Wextra -pedantic" + "-Wall -Wextra -pedantic -Wshadow -Wno-long-long -Wfloat-equal -Wcast-qual" ) endif (CMAKE_COMPILER_IS_GNUCXX) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 87a0906ab2a..a2eae30cf05 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -50,7 +50,7 @@ endif (WIN32 AND NOT CYGWIN) if (CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} - "-Wall -Wextra -pedantic" + "-Wall -Wextra -pedantic -Wshadow -Wno-long-long -Wfloat-equal -Wcast-qual" ) endif (CMAKE_COMPILER_IS_GNUCXX) From 64badd6c4d60acdeed5c82676876c87aeb6e8471 Mon Sep 17 00:00:00 2001 From: Markus Elfring Date: Wed, 16 Mar 2011 21:28:29 +0100 Subject: [PATCH 05/15] Deletion of unneeded variables in CMake scripts (bug #2524) Some header file names were assigned to CMake variables. Some of them were not needed to be mentioned explicitly because such dependencies will be automatically determined by the build system. Signed-off-by: Markus Elfring --- cli/CMakeLists.txt | 13 +------------ lib/CMakeLists.txt | 29 +---------------------------- test/CMakeLists.txt | 7 +------ 3 files changed, 3 insertions(+), 46 deletions(-) diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt index 54830ab0355..2d0ecd53f15 100644 --- a/cli/CMakeLists.txt +++ b/cli/CMakeLists.txt @@ -1,10 +1,5 @@ # Minimal CMake build file to build cppcheck command line executable -SET(CHECKCLI_HDRS - cppcheckexecutor.h - threadexecutor.h -) - SET(CHECKCLI_SRCS cppcheckexecutor.cpp threadexecutor.cpp @@ -13,11 +8,6 @@ SET(CHECKCLI_SRCS # Add Windows resource file if (WIN32) - SET(CHECKCLI_HDRS - ${CHECKCLI_HDRS} - resource.h - ) - SET(CHECKCLI_SRCS ${CHECKCLI_SRCS} cppcheck.rc @@ -47,6 +37,5 @@ if (CMAKE_COMPILER_IS_GNUCXX) endif (CMAKE_COMPILER_IS_GNUCXX) include_directories (${CPPCHECK_SOURCE_DIR}/lib) -ADD_EXECUTABLE(../cppcheck ${CHECKCLI_SRCS} ${CHECKCLI_HDRS} ${LIB_SRCS}) +ADD_EXECUTABLE(../cppcheck ${CHECKCLI_SRCS} ${LIB_SRCS}) TARGET_LINK_LIBRARIES(../cppcheck ${CHECK_LIBS}) - diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 8286fb013f9..345d8e0b7b1 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -4,32 +4,6 @@ # - tests # - Qt GUI -SET(CHECKLIB_HDRS - check.h - checkautovariables.h - checkbufferoverrun.h - checkclass.h - checkdangerousfunctions.h - checkexceptionsafety.h - checkheaders.h - checkmemoryleak.h - checkother.h - checkstl.h - checkunusedfunctions.h - classinfo.h - cppcheck.h - errorlogger.h - executionpath.h - filelister.h - filelister_unix.h - filelister_win32.h - mathlib.h - preprocessor.h - settings.h - token.h - tokenize.h -) - SET(CHECKLIB_SRCS checkautovariables.cpp checkbufferoverrun.cpp @@ -61,5 +35,4 @@ if (CMAKE_COMPILER_IS_GNUCXX) ) endif (CMAKE_COMPILER_IS_GNUCXX) -ADD_LIBRARY(checklib STATIC ${CHECKLIB_SRCS} ${CHECKLIB_HDRS}) - +ADD_LIBRARY(checklib STATIC ${CHECKLIB_SRCS}) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index a2eae30cf05..6542b43ac6f 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,9 +1,5 @@ # Minimal CMake build file to build cppcheck test suite -SET(CHECKTEST_HDRS - testsuite.h -) - SET(CHECKTEST_SRCS testmemleak.cpp testother.cpp @@ -55,11 +51,10 @@ if (CMAKE_COMPILER_IS_GNUCXX) endif (CMAKE_COMPILER_IS_GNUCXX) include_directories (${CPPCHECK_SOURCE_DIR}/lib) -ADD_EXECUTABLE(test ${CHECKTEST_SRCS} ${CHECKTEST_HDRS} ${LIB_SRCS}) +ADD_EXECUTABLE(test ${CHECKTEST_SRCS} ${LIB_SRCS}) TARGET_LINK_LIBRARIES(test ${CHECK_LIBS}) # Add custom 'make check' -target # It compiles and runs tests add_custom_target(check COMMAND test) add_dependencies(check test) - From 2deae3ba732133be6436bbb344fb2a8afbf590b3 Mon Sep 17 00:00:00 2001 From: Markus Elfring Date: Wed, 16 Mar 2011 21:40:32 +0100 Subject: [PATCH 06/15] Merge of checks for Windows in CMake scripts (bug #2524) A few checks for the Windows environment were merged to stress their relationship. Signed-off-by: Markus Elfring --- cli/CMakeLists.txt | 24 +++++++++--------------- gui/CMakeLists.txt | 25 +++++++++---------------- 2 files changed, 18 insertions(+), 31 deletions(-) diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt index 2d0ecd53f15..6f16c8831d8 100644 --- a/cli/CMakeLists.txt +++ b/cli/CMakeLists.txt @@ -6,14 +6,6 @@ SET(CHECKCLI_SRCS main.cpp ) -# Add Windows resource file -if (WIN32) - SET(CHECKCLI_SRCS - ${CHECKCLI_SRCS} - cppcheck.rc - ) -endif (WIN32) - # Libraries to link #set(CHECK_LIBS # checklib @@ -21,13 +13,15 @@ endif (WIN32) aux_source_directory(${CPPCHECK_SOURCE_DIR}/lib LIB_SRCS) -# Windows needs additional shlwapi library -if (WIN32 AND NOT CYGWIN) -set(CHECK_LIBS - ${CHECK_LIBS} - shlwapi -) -endif (WIN32 AND NOT CYGWIN) +if(WIN32) + # Add Windows resource file + set(CHECKCLI_SRCS ${CHECKCLI_SRCS} cppcheck.rc) + + if(NOT CYGWIN) + # Windows needs additional shlwapi library. + set(CHECK_LIBS ${CHECK_LIBS} shlwapi) + endif() +endif() if (CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index 0fb32182e04..6c0b6a68d82 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -58,14 +58,6 @@ SET(CHECKGUI_SRCS xmlreport.cpp ) -# Add Windows resource file -if (WIN32) - SET(CHECKGUI_SRCS - ${CHECKGUI_SRCS} - cppcheck-gui.rc - ) -endif (WIN32) - # UI files SET(CHECK_UIS about.ui @@ -96,14 +88,15 @@ aux_source_directory(${CPPCHECK_SOURCE_DIR}/lib LIB_SRCS) # checklib #) -# Windows needs additional shlwapi library -if (WIN32 AND NOT CYGWIN) -set(CHECK_LIBS - ${CHECK_LIBS} - shlwapi - htmlhelp -) -endif (WIN32 AND NOT CYGWIN) +if(WIN32) + # Add Windows resource file + set(CHECKGUI_SRCS ${CHECKGUI_SRCS} cppcheck-gui.rc) + + if(NOT CYGWIN) + # Windows needs additional shlwapi library. + set(CHECK_LIBS ${CHECK_LIBS} shlwapi htmlhelp) + endif() +endif() if (CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS From 56105a08fdfa7da410d19979d6bf515543abe94b Mon Sep 17 00:00:00 2001 From: Markus Elfring Date: Sat, 19 Mar 2011 10:24:51 +0100 Subject: [PATCH 07/15] Use of CMake module "FindPCRE" (bug #2524) A few build scripts were updated for the use of the module "FindPCRE.cmake" and corresponding variables so that the software can work with the programming interface "Perl-compatible regular expressions". Signed-off-by: Markus Elfring --- CMakeLists.txt | 2 ++ cli/CMakeLists.txt | 6 ++++-- cmake/modules/FindPCRE.cmake | 42 ++++++++++++++++++++++++++++++++++++ gui/CMakeLists.txt | 13 +++++------ lib/CMakeLists.txt | 3 +++ test/CMakeLists.txt | 5 +++-- 6 files changed, 61 insertions(+), 10 deletions(-) create mode 100644 cmake/modules/FindPCRE.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index efa4e400ec7..1c119d0bebf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,8 @@ cmake_minimum_required (VERSION 2.6) PROJECT(CPPCHECK) +set(CMAKE_MODULE_PATH "${CPPCHECK_SOURCE_DIR}/cmake/modules" ${CMAKE_MODULE_PATH}) + # Building lib as static library is disabled due to bug # #1299 CMake: The CheckClass is not used # https://sourceforge.net/apps/trac/cppcheck/ticket/1299 diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt index 6f16c8831d8..2b6d9d29041 100644 --- a/cli/CMakeLists.txt +++ b/cli/CMakeLists.txt @@ -1,4 +1,5 @@ # Minimal CMake build file to build cppcheck command line executable +find_package(PCRE REQUIRED) SET(CHECKCLI_SRCS cppcheckexecutor.cpp @@ -30,6 +31,7 @@ if (CMAKE_COMPILER_IS_GNUCXX) ) endif (CMAKE_COMPILER_IS_GNUCXX) -include_directories (${CPPCHECK_SOURCE_DIR}/lib) +include_directories("${CPPCHECK_SOURCE_DIR}/lib" + "${PCRE_INCLUDE_DIR}") ADD_EXECUTABLE(../cppcheck ${CHECKCLI_SRCS} ${LIB_SRCS}) -TARGET_LINK_LIBRARIES(../cppcheck ${CHECK_LIBS}) +TARGET_LINK_LIBRARIES(../cppcheck ${CHECK_LIBS} ${PCRE_LIBRARIES}) diff --git a/cmake/modules/FindPCRE.cmake b/cmake/modules/FindPCRE.cmake new file mode 100644 index 00000000000..2a53a6c9329 --- /dev/null +++ b/cmake/modules/FindPCRE.cmake @@ -0,0 +1,42 @@ +# - Try to find the PCRE regular expression library +# Once done this will define +# +# PCRE_FOUND - system has the PCRE library +# PCRE_INCLUDE_DIR - the PCRE include directory +# PCRE_LIBRARIES - The libraries needed to use PCRE + +# Copyright (c) 2006, Alexander Neundorf, +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + + +if (PCRE_INCLUDE_DIR AND PCRE_PCREPOSIX_LIBRARY AND PCRE_PCRE_LIBRARY) + # Already in cache, be silent + set(PCRE_FIND_QUIETLY TRUE) +endif (PCRE_INCLUDE_DIR AND PCRE_PCREPOSIX_LIBRARY AND PCRE_PCRE_LIBRARY) + + +if (NOT WIN32) + # use pkg-config to get the directories and then use these values + # in the FIND_PATH() and FIND_LIBRARY() calls + find_package(PkgConfig) + + pkg_check_modules(PC_PCRE QUIET libpcre) + + set(PCRE_DEFINITIONS ${PC_PCRE_CFLAGS_OTHER}) +endif (NOT WIN32) + +find_path(PCRE_INCLUDE_DIR pcre.h + HINTS "${PC_PCRE_INCLUDEDIR}" ${PC_PCRE_INCLUDE_DIRS} + PATH_SUFFIXES pcre) + +find_library(PCRE_PCRE_LIBRARY NAMES pcre pcred HINTS "${PC_PCRE_LIBDIR}" ${PC_PCRE_LIBRARY_DIRS}) +find_library(PCRE_PCREPOSIX_LIBRARY NAMES pcreposix pcreposixd HINTS "${PC_PCRE_LIBDIR}" ${PC_PCRE_LIBRARY_DIRS}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(PCRE DEFAULT_MSG PCRE_INCLUDE_DIR PCRE_PCRE_LIBRARY PCRE_PCREPOSIX_LIBRARY ) + +set(PCRE_LIBRARIES "${PCRE_PCRE_LIBRARY}" "${PCRE_PCREPOSIX_LIBRARY}") + +mark_as_advanced(PCRE_INCLUDE_DIR PCRE_LIBRARIES PCRE_PCREPOSIX_LIBRARY PCRE_PCRE_LIBRARY) diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index 6c0b6a68d82..7296ab3c276 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -1,4 +1,5 @@ # Minimal CMake build file to build cppcheck Qt GUI +find_package(PCRE REQUIRED) # find and setup Qt4 for this project find_package(Qt4) @@ -10,9 +11,12 @@ set(QT_USE_QTMAIN TRUE) set(QT_USE_QTXML TRUE) include(${QT_USE_FILE}) -include_directories (${CPPCHECK_SOURCE_DIR}/lib) +include_directories("${CPPCHECK_SOURCE_DIR}/lib" # Generated files (in build directory) need to know gui directory -include_directories (${CPPCHECK_SOURCE_DIR}/gui) + "${CPPCHECK_SOURCE_DIR}/gui" +# Include binary directory where code from UI files gets created + "${CMAKE_CURRENT_BINARY_DIR}" + "${PCRE_INCLUDE_DIR}") # Header files - listed for mocking SET(CHECK_HEADERS @@ -122,12 +126,9 @@ SOURCE_GROUP("Header Files" FILES ${CHECK_HEADERS}) SOURCE_GROUP("Ui Files" ".ui$") SOURCE_GROUP("Moc Files" "moc_.*cxx$") -# Include binary directory where code from UI files gets created -include_directories(${CMAKE_CURRENT_BINARY_DIR}) - ADD_EXECUTABLE(gui WIN32 ${CHECKGUI_SRCS} ${CHECK_MOC_SRCS} ${CHECK_HEADERS} ${CHECK_UIS_H} ${CHECK_RCC_SRCS} ${LIB_SRCS}) -TARGET_LINK_LIBRARIES(gui ${CHECK_LIBS} ${QT_LIBRARIES}) +TARGET_LINK_LIBRARIES(gui ${CHECK_LIBS} ${PCRE_LIBRARIES} ${QT_LIBRARIES}) ELSE(QT4_FOUND) message("GUI not built since QT4 not found.") diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 345d8e0b7b1..8fd2c43252d 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -3,6 +3,8 @@ # - cli # - tests # - Qt GUI +find_package(PCRE REQUIRED) +include_directories("${PCRE_INCLUDE_DIR}") SET(CHECKLIB_SRCS checkautovariables.cpp @@ -36,3 +38,4 @@ if (CMAKE_COMPILER_IS_GNUCXX) endif (CMAKE_COMPILER_IS_GNUCXX) ADD_LIBRARY(checklib STATIC ${CHECKLIB_SRCS}) +target_link_libraries(checklib ${PCRE_LIBRARIES}) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 6542b43ac6f..f9447f09e67 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,4 +1,5 @@ # Minimal CMake build file to build cppcheck test suite +find_package(PCRE REQUIRED) SET(CHECKTEST_SRCS testmemleak.cpp @@ -50,9 +51,9 @@ if (CMAKE_COMPILER_IS_GNUCXX) ) endif (CMAKE_COMPILER_IS_GNUCXX) -include_directories (${CPPCHECK_SOURCE_DIR}/lib) +include_directories("${CPPCHECK_SOURCE_DIR}/lib" "${PCRE_INCLUDE_DIR}") ADD_EXECUTABLE(test ${CHECKTEST_SRCS} ${LIB_SRCS}) -TARGET_LINK_LIBRARIES(test ${CHECK_LIBS}) +TARGET_LINK_LIBRARIES(test ${CHECK_LIBS} ${PCRE_LIBRARIES}) # Add custom 'make check' -target # It compiles and runs tests From a175c29c7696bd45ac1d96e807bc35e5ec3a1079 Mon Sep 17 00:00:00 2001 From: Markus Elfring Date: Sat, 19 Mar 2011 10:30:44 +0100 Subject: [PATCH 08/15] Deletion of path selection "../" for CLI executable in a CMake script (bug #2524) The path selection "../" was deleted for the executable target in the build script for the command line interface. File name conflicts can be avoided by proper out-of-source builds. Signed-off-by: Markus Elfring --- cli/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt index 2b6d9d29041..2d94e1462c7 100644 --- a/cli/CMakeLists.txt +++ b/cli/CMakeLists.txt @@ -33,5 +33,5 @@ endif (CMAKE_COMPILER_IS_GNUCXX) include_directories("${CPPCHECK_SOURCE_DIR}/lib" "${PCRE_INCLUDE_DIR}") -ADD_EXECUTABLE(../cppcheck ${CHECKCLI_SRCS} ${LIB_SRCS}) -TARGET_LINK_LIBRARIES(../cppcheck ${CHECK_LIBS} ${PCRE_LIBRARIES}) +ADD_EXECUTABLE(cppcheck ${CHECKCLI_SRCS} ${LIB_SRCS}) +TARGET_LINK_LIBRARIES(cppcheck ${CHECK_LIBS} ${PCRE_LIBRARIES}) From bfbebf94ebe2563e76e06cd5a84b105c7c0f262e Mon Sep 17 00:00:00 2001 From: Markus Elfring Date: Sat, 19 Mar 2011 14:49:04 +0100 Subject: [PATCH 09/15] Support for "QtHelp" in CMake script for the GUI (bug #2524) The activation of Qt's help module was added to the build specification for the graphical user interface. Signed-off-by: Markus Elfring --- gui/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index 7296ab3c276..87d7c2b82f7 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -7,6 +7,7 @@ find_package(Qt4) IF(QT4_FOUND) # Add needed Qt modules +set(QT_USE_QTHELP TRUE) set(QT_USE_QTMAIN TRUE) set(QT_USE_QTXML TRUE) include(${QT_USE_FILE}) @@ -27,6 +28,7 @@ SET(CHECK_HEADERS common.h csvreport.h fileviewdialog.h + helpwindow.h mainwindow.h projectfile.h report.h @@ -48,6 +50,7 @@ SET(CHECKGUI_SRCS checkthread.cpp csvreport.cpp fileviewdialog.cpp + helpwindow.cpp main.cpp mainwindow.cpp projectfile.cpp @@ -67,6 +70,7 @@ SET(CHECK_UIS about.ui application.ui file.ui + helpwindow.ui main.ui resultsview.ui settings.ui From 4e0e1084a2ad6abeb370bc44a422a9544f0466b8 Mon Sep 17 00:00:00 2001 From: Markus Elfring Date: Sat, 19 Mar 2011 15:31:04 +0100 Subject: [PATCH 10/15] Movement of filelister* sources to CLI in CMake scripts (bug #2524, #2445) A few source files were reorganised because of the bug report "Move FileLister classes from LIB to CLI". https://sourceforge.net/apps/trac/cppcheck/ticket/2445 The CMake build scripts were updated for these changes. Signed-off-by: Markus Elfring --- cli/CMakeLists.txt | 6 +++++- lib/CMakeLists.txt | 3 --- test/CMakeLists.txt | 20 +++++++++++++------- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt index 2d94e1462c7..5fd360a1af3 100644 --- a/cli/CMakeLists.txt +++ b/cli/CMakeLists.txt @@ -3,6 +3,7 @@ find_package(PCRE REQUIRED) SET(CHECKCLI_SRCS cppcheckexecutor.cpp + filelister.cpp threadexecutor.cpp main.cpp ) @@ -16,12 +17,15 @@ aux_source_directory(${CPPCHECK_SOURCE_DIR}/lib LIB_SRCS) if(WIN32) # Add Windows resource file - set(CHECKCLI_SRCS ${CHECKCLI_SRCS} cppcheck.rc) + set(CHECKCLI_SRCS ${CHECKCLI_SRCS} filelister_win32.cpp + cppcheck.rc) if(NOT CYGWIN) # Windows needs additional shlwapi library. set(CHECK_LIBS ${CHECK_LIBS} shlwapi) endif() +else() + set(CHECKCLI_SRCS ${CHECKCLI_SRCS} filelister_unix.cpp) endif() if (CMAKE_COMPILER_IS_GNUCXX) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 8fd2c43252d..58459e1994e 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -20,9 +20,6 @@ SET(CHECKLIB_SRCS cppcheck.cpp errorlogger.cpp executionpath.cpp - filelister.cpp - filelister_unix.cpp - filelister_win32.cpp mathlib.cpp preprocessor.cpp settings.cpp diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index f9447f09e67..9b4b9634733 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -2,6 +2,7 @@ find_package(PCRE REQUIRED) SET(CHECKTEST_SRCS + "${CPPCHECK_SOURCE_DIR}/cli/filelister.cpp" testmemleak.cpp testother.cpp testpreprocessor.cpp @@ -36,13 +37,18 @@ aux_source_directory(${CPPCHECK_SOURCE_DIR}/lib LIB_SRCS) # checklib #) -# Windows needs additional shlwapi library -if (WIN32 AND NOT CYGWIN) -set(CHECK_LIBS - ${CHECK_LIBS} - shlwapi -) -endif (WIN32 AND NOT CYGWIN) +if(WIN32) + set(CHECKTEST_SRCS ${CHECKTEST_SRCS} + "${CPPCHECK_SOURCE_DIR}/cli/filelister_win32.cpp") + + if(NOT CYGWIN) + # Windows needs additional shlwapi library. + set(CHECK_LIBS ${CHECK_LIBS} shlwapi) + endif() +else() + set(CHECKTEST_SRCS ${CHECKTEST_SRCS} + "${CPPCHECK_SOURCE_DIR}/cli/filelister_unix.cpp") +endif() if (CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS From 396e9325b26b974f1cfc296ecd0746a46a94bac4 Mon Sep 17 00:00:00 2001 From: Markus Elfring Date: Sat, 19 Mar 2011 16:10:25 +0100 Subject: [PATCH 11/15] Consistent use of Cppcheck's library sources in CMake scripts (bug #2524) Three build scripts used the command "aux_source_directory" while Cppcheck's library build script used the recommended way of listing the relevant source file names explicitly. This list of source file names was moved to a separate file which is referenced in the other scripts now. Signed-off-by: Markus Elfring --- cli/CMakeLists.txt | 10 +++------- gui/CMakeLists.txt | 10 +++------- lib/CMakeLists.txt | 24 +++--------------------- lib/library_sources.cmake | 24 ++++++++++++++++++++++++ test/CMakeLists.txt | 10 +++------- 5 files changed, 36 insertions(+), 42 deletions(-) create mode 100644 lib/library_sources.cmake diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt index 5fd360a1af3..a02bd10ebed 100644 --- a/cli/CMakeLists.txt +++ b/cli/CMakeLists.txt @@ -8,12 +8,8 @@ SET(CHECKCLI_SRCS main.cpp ) -# Libraries to link -#set(CHECK_LIBS -# checklib -#) - -aux_source_directory(${CPPCHECK_SOURCE_DIR}/lib LIB_SRCS) +set(CPPCHECK_LIB_DIR "${CPPCHECK_SOURCE_DIR}/lib/") +include("${CPPCHECK_LIB_DIR}library_sources.cmake") if(WIN32) # Add Windows resource file @@ -37,5 +33,5 @@ endif (CMAKE_COMPILER_IS_GNUCXX) include_directories("${CPPCHECK_SOURCE_DIR}/lib" "${PCRE_INCLUDE_DIR}") -ADD_EXECUTABLE(cppcheck ${CHECKCLI_SRCS} ${LIB_SRCS}) +add_executable(cppcheck ${CHECKCLI_SRCS} ${CPPCHECK_LIB_SOURCES}) TARGET_LINK_LIBRARIES(cppcheck ${CHECK_LIBS} ${PCRE_LIBRARIES}) diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index 87d7c2b82f7..22de045c4cd 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -89,12 +89,8 @@ SET(CHECK_TRANS SET(CHECK_RCCS gui.qrc) -aux_source_directory(${CPPCHECK_SOURCE_DIR}/lib LIB_SRCS) - -# Libraries to link -#set(CHECK_LIBS -# checklib -#) +set(CPPCHECK_LIB_DIR "${CPPCHECK_SOURCE_DIR}/lib/") +include("${CPPCHECK_LIB_DIR}library_sources.cmake") if(WIN32) # Add Windows resource file @@ -131,7 +127,7 @@ SOURCE_GROUP("Ui Files" ".ui$") SOURCE_GROUP("Moc Files" "moc_.*cxx$") ADD_EXECUTABLE(gui WIN32 ${CHECKGUI_SRCS} ${CHECK_MOC_SRCS} ${CHECK_HEADERS} - ${CHECK_UIS_H} ${CHECK_RCC_SRCS} ${LIB_SRCS}) + ${CHECK_UIS_H} ${CHECK_RCC_SRCS} ${CPPCHECK_LIB_SOURCES}) TARGET_LINK_LIBRARIES(gui ${CHECK_LIBS} ${PCRE_LIBRARIES} ${QT_LIBRARIES}) ELSE(QT4_FOUND) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 58459e1994e..0c2a1a7cb72 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -6,26 +6,8 @@ find_package(PCRE REQUIRED) include_directories("${PCRE_INCLUDE_DIR}") -SET(CHECKLIB_SRCS - checkautovariables.cpp - checkbufferoverrun.cpp - checkclass.cpp - checkdangerousfunctions.cpp - checkexceptionsafety.cpp - checkheaders.cpp - checkmemoryleak.cpp - checkother.cpp - checkstl.cpp - checkunusedfunctions.cpp - cppcheck.cpp - errorlogger.cpp - executionpath.cpp - mathlib.cpp - preprocessor.cpp - settings.cpp - token.cpp - tokenize.cpp -) +set(CPPCHECK_LIB_DIR "") +include("library_sources.cmake") if (CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS @@ -34,5 +16,5 @@ if (CMAKE_COMPILER_IS_GNUCXX) ) endif (CMAKE_COMPILER_IS_GNUCXX) -ADD_LIBRARY(checklib STATIC ${CHECKLIB_SRCS}) +add_library(checklib STATIC ${CPPCHECK_LIB_SOURCES}) target_link_libraries(checklib ${PCRE_LIBRARIES}) diff --git a/lib/library_sources.cmake b/lib/library_sources.cmake new file mode 100644 index 00000000000..84caa6bc86f --- /dev/null +++ b/lib/library_sources.cmake @@ -0,0 +1,24 @@ +set(CPPCHECK_LIB_SOURCES + "${CPPCHECK_LIB_DIR}checkautovariables.cpp" + "${CPPCHECK_LIB_DIR}checkbufferoverrun.cpp" + "${CPPCHECK_LIB_DIR}checkclass.cpp" + "${CPPCHECK_LIB_DIR}checkexceptionsafety.cpp" + "${CPPCHECK_LIB_DIR}checkmemoryleak.cpp" + "${CPPCHECK_LIB_DIR}checknullpointer.cpp" + "${CPPCHECK_LIB_DIR}checkobsoletefunctions.cpp" + "${CPPCHECK_LIB_DIR}checkother.cpp" + "${CPPCHECK_LIB_DIR}checkpostfixoperator.cpp" + "${CPPCHECK_LIB_DIR}checkstl.cpp" + "${CPPCHECK_LIB_DIR}checkuninitvar.cpp" + "${CPPCHECK_LIB_DIR}checkunusedfunctions.cpp" + "${CPPCHECK_LIB_DIR}cppcheck.cpp" + "${CPPCHECK_LIB_DIR}errorlogger.cpp" + "${CPPCHECK_LIB_DIR}executionpath.cpp" + "${CPPCHECK_LIB_DIR}mathlib.cpp" + "${CPPCHECK_LIB_DIR}path.cpp" + "${CPPCHECK_LIB_DIR}preprocessor.cpp" + "${CPPCHECK_LIB_DIR}settings.cpp" + "${CPPCHECK_LIB_DIR}symboldatabase.cpp" + "${CPPCHECK_LIB_DIR}timer.cpp" + "${CPPCHECK_LIB_DIR}token.cpp" + "${CPPCHECK_LIB_DIR}tokenize.cpp") diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 9b4b9634733..a1b5ce4bec2 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -30,12 +30,8 @@ SET(CHECKTEST_SRCS testmathlib.cpp ) -aux_source_directory(${CPPCHECK_SOURCE_DIR}/lib LIB_SRCS) - -# Libraries to link -#set(CHECK_LIBS -# checklib -#) +set(CPPCHECK_LIB_DIR "${CPPCHECK_SOURCE_DIR}/lib/") +include("${CPPCHECK_LIB_DIR}library_sources.cmake") if(WIN32) set(CHECKTEST_SRCS ${CHECKTEST_SRCS} @@ -58,7 +54,7 @@ if (CMAKE_COMPILER_IS_GNUCXX) endif (CMAKE_COMPILER_IS_GNUCXX) include_directories("${CPPCHECK_SOURCE_DIR}/lib" "${PCRE_INCLUDE_DIR}") -ADD_EXECUTABLE(test ${CHECKTEST_SRCS} ${LIB_SRCS}) +add_executable(test ${CHECKTEST_SRCS} ${CPPCHECK_LIB_SOURCES}) TARGET_LINK_LIBRARIES(test ${CHECK_LIBS} ${PCRE_LIBRARIES}) # Add custom 'make check' -target From 1950cfe180520ec1050b492f8006256241ef4889 Mon Sep 17 00:00:00 2001 From: Markus Elfring Date: Sat, 19 Mar 2011 17:40:37 +0100 Subject: [PATCH 12/15] Support for "TinyXML" in build files (bug #2524) Source files were embedded into the Cppcheck project from the class library "TinyXML". The build specifications were adjusted accordingly. The TinyXML header file is referenced by a few source files without specification of a subdirectory now. Signed-off-by: Markus Elfring --- cli/CMakeLists.txt | 10 ++++++++-- cli/cli.pro | 7 ++++--- cli/cmdlineparser.cpp | 2 +- cli/cppcheck.vcproj | 2 +- cli/cppcheck.vcxproj | 4 ++-- test/CMakeLists.txt | 11 +++++++++-- test/test.pro | 7 ++++--- test/test.vcproj | 4 ++-- test/test.vcxproj | 4 ++-- test/testcppcheck.cpp | 2 +- tools/dmake.cpp | 4 ++-- 11 files changed, 36 insertions(+), 21 deletions(-) diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt index a02bd10ebed..8424238e7ed 100644 --- a/cli/CMakeLists.txt +++ b/cli/CMakeLists.txt @@ -1,12 +1,17 @@ # Minimal CMake build file to build cppcheck command line executable find_package(PCRE REQUIRED) +set(TINYXML_INCLUDE_DIR "${CPPCHECK_SOURCE_DIR}/externals/tinyxml/") + SET(CHECKCLI_SRCS cppcheckexecutor.cpp filelister.cpp threadexecutor.cpp main.cpp -) + "${TINYXML_INCLUDE_DIR}tinystr.cpp" + "${TINYXML_INCLUDE_DIR}tinyxml.cpp" + "${TINYXML_INCLUDE_DIR}tinyxmlerror.cpp" + "${TINYXML_INCLUDE_DIR}tinyxmlparser.cpp") set(CPPCHECK_LIB_DIR "${CPPCHECK_SOURCE_DIR}/lib/") include("${CPPCHECK_LIB_DIR}library_sources.cmake") @@ -32,6 +37,7 @@ if (CMAKE_COMPILER_IS_GNUCXX) endif (CMAKE_COMPILER_IS_GNUCXX) include_directories("${CPPCHECK_SOURCE_DIR}/lib" - "${PCRE_INCLUDE_DIR}") + "${PCRE_INCLUDE_DIR}" + "${TINYXML_INCLUDE_DIR}") add_executable(cppcheck ${CHECKCLI_SRCS} ${CPPCHECK_LIB_SOURCES}) TARGET_LINK_LIBRARIES(cppcheck ${CHECK_LIBS} ${PCRE_LIBRARIES}) diff --git a/cli/cli.pro b/cli/cli.pro index 85702b9fb0e..69f95826573 100644 --- a/cli/cli.pro +++ b/cli/cli.pro @@ -1,13 +1,14 @@ TEMPLATE = app TARGET = cppcheck DEPENDPATH += . -INCLUDEPATH += . ../lib +TINYXML_DIR = ../externals/tinyxml/ +INCLUDEPATH += . ../lib $${TINYXML_DIR} OBJECTS_DIR = temp CONFIG += warn_on CONFIG -= qt app_bundle -BASEPATH = ../externals/tinyxml/ -include($$PWD/../externals/tinyxml/tinyxml.pri) +BASEPATH = $${TINYXML_DIR} +include($$PWD/$${TINYXML_DIR}tinyxml.pri) BASEPATH = ../lib/ include($$PWD/../lib/lib.pri) diff --git a/cli/cmdlineparser.cpp b/cli/cmdlineparser.cpp index a333804a86c..3d13d2a19b0 100644 --- a/cli/cmdlineparser.cpp +++ b/cli/cmdlineparser.cpp @@ -28,7 +28,7 @@ #include "path.h" // xml is used in rules -#include "tinyxml/tinyxml.h" +#include "tinyxml.h" static void AddFilesToList(const std::string& FileList, std::vector& PathNames) { diff --git a/cli/cppcheck.vcproj b/cli/cppcheck.vcproj index 5413634750f..696b28aaab7 100755 --- a/cli/cppcheck.vcproj +++ b/cli/cppcheck.vcproj @@ -19,7 +19,7 @@ UseOfMfc="0"> - ".";"..\lib";"..\externals";c:\Qt\VS4.7.0\mkspecs\win32-msvc2010;%(AdditionalIncludeDirectories) + ".";"..\lib";"..\externals\tinyxml";c:\Qt\VS4.7.0\mkspecs\win32-msvc2010;%(AdditionalIncludeDirectories) -Zm200 -w34100 -w34189 %(AdditionalOptions) temp\ false @@ -84,7 +84,7 @@ - ".";"..\lib";"..\externals";c:\Qt\VS4.7.0\mkspecs\win32-msvc2010;%(AdditionalIncludeDirectories) + ".";"..\lib";"..\externals\tinyxml";c:\Qt\VS4.7.0\mkspecs\win32-msvc2010;%(AdditionalIncludeDirectories) -Zm200 -w34100 -w34189 %(AdditionalOptions) temp\ false diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index a1b5ce4bec2..5af5c13d9f8 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,6 +1,8 @@ # Minimal CMake build file to build cppcheck test suite find_package(PCRE REQUIRED) +set(TINYXML_INCLUDE_DIR "${CPPCHECK_SOURCE_DIR}/externals/tinyxml/") + SET(CHECKTEST_SRCS "${CPPCHECK_SOURCE_DIR}/cli/filelister.cpp" testmemleak.cpp @@ -28,7 +30,10 @@ SET(CHECKTEST_SRCS testincompletestatement.cpp testunusedvar.cpp testmathlib.cpp -) + "${TINYXML_INCLUDE_DIR}tinystr.cpp" + "${TINYXML_INCLUDE_DIR}tinyxml.cpp" + "${TINYXML_INCLUDE_DIR}tinyxmlerror.cpp" + "${TINYXML_INCLUDE_DIR}tinyxmlparser.cpp") set(CPPCHECK_LIB_DIR "${CPPCHECK_SOURCE_DIR}/lib/") include("${CPPCHECK_LIB_DIR}library_sources.cmake") @@ -53,7 +58,9 @@ if (CMAKE_COMPILER_IS_GNUCXX) ) endif (CMAKE_COMPILER_IS_GNUCXX) -include_directories("${CPPCHECK_SOURCE_DIR}/lib" "${PCRE_INCLUDE_DIR}") +include_directories("${CPPCHECK_SOURCE_DIR}/lib" + "${PCRE_INCLUDE_DIR}" + "${TINYXML_INCLUDE_DIR}") add_executable(test ${CHECKTEST_SRCS} ${CPPCHECK_LIB_SOURCES}) TARGET_LINK_LIBRARIES(test ${CHECK_LIBS} ${PCRE_LIBRARIES}) diff --git a/test/test.pro b/test/test.pro index 0196222ed80..b5f1ccce660 100644 --- a/test/test.pro +++ b/test/test.pro @@ -2,7 +2,8 @@ TEMPLATE = app TARGET = test DEPENDPATH += . -INCLUDEPATH += . ../cli ../lib +TINYXML_DIR = ../externals/tinyxml/ +INCLUDEPATH += . ../cli ../lib $${TINYXML_DIR} OBJECTS_DIR = temp CONFIG += warn_on console CONFIG -= qt app_bundle @@ -10,8 +11,8 @@ win32 { LIBS += -lshlwapi } -BASEPATH = ../externals/tinyxml/ -include(../externals/tinyxml/tinyxml.pri) +BASEPATH = $${TINYXML_DIR} +include($${TINYXML_DIR}tinyxml.pri) BASEPATH = ../lib/ include(../lib/lib.pri) diff --git a/test/test.vcproj b/test/test.vcproj index 45d3f294825..e847bed4eb2 100755 --- a/test/test.vcproj +++ b/test/test.vcproj @@ -19,7 +19,7 @@ UseOfMfc="0"> - ".";"..\cli";"..\lib";"..\externals";c:\Qt\VS4.7.0\mkspecs\win32-msvc2010;%(AdditionalIncludeDirectories) + ".";"..\cli";"..\lib";"..\externals\tinyxml";c:\Qt\VS4.7.0\mkspecs\win32-msvc2010;%(AdditionalIncludeDirectories) -Zm200 -w34100 -w34189 %(AdditionalOptions) temp\ false @@ -84,7 +84,7 @@ - ".";"..\cli";"..\lib";"..\externals";c:\Qt\VS4.7.0\mkspecs\win32-msvc2010;%(AdditionalIncludeDirectories) + ".";"..\cli";"..\lib";"..\externals\tinyxml";c:\Qt\VS4.7.0\mkspecs\win32-msvc2010;%(AdditionalIncludeDirectories) -Zm200 -w34100 -w34189 %(AdditionalOptions) temp\ false diff --git a/test/testcppcheck.cpp b/test/testcppcheck.cpp index af6e33883d7..8241a75fe05 100644 --- a/test/testcppcheck.cpp +++ b/test/testcppcheck.cpp @@ -32,7 +32,7 @@ #include // use tinyxml with STL -#include "tinyxml/tinyxml.h" +#include "tinyxml.h" extern std::ostringstream errout; extern std::ostringstream output; diff --git a/tools/dmake.cpp b/tools/dmake.cpp index 0ff33c09938..66681fa41a0 100644 --- a/tools/dmake.cpp +++ b/tools/dmake.cpp @@ -256,8 +256,8 @@ int main(int argc, char **argv) fout << "\n###### Build\n\n"; compilefiles(fout, libfiles, "-Ilib"); - compilefiles(fout, clifiles, "-Ilib -Iexternals"); - compilefiles(fout, testfiles, "-Ilib -Icli -Iexternals"); + compilefiles(fout, clifiles, "-Ilib -Iexternals/tinyxml -Iexternals"); + compilefiles(fout, testfiles, "-Ilib -Icli -Iexternals/tinyxml -Iexternals"); return 0; } From e1dcda8d6b739f74b78e19f17872f26eee915f2e Mon Sep 17 00:00:00 2001 From: Markus Elfring Date: Sat, 19 Mar 2011 18:48:21 +0100 Subject: [PATCH 13/15] Completion of variable assignments in CMake scripts (bug #2524) Some source file names were added to variable assignments in CMake scripts to update relevant dependencies. This completes the specification of file lists which are involved in the building of the Cppcheck software. Signed-off-by: Markus Elfring --- cli/CMakeLists.txt | 3 ++- gui/CMakeLists.txt | 28 ++++++++++++++++++++++++---- test/CMakeLists.txt | 41 +++++++++++++++++++++++++++-------------- 3 files changed, 53 insertions(+), 19 deletions(-) diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt index 8424238e7ed..d24accf29e1 100644 --- a/cli/CMakeLists.txt +++ b/cli/CMakeLists.txt @@ -4,10 +4,11 @@ find_package(PCRE REQUIRED) set(TINYXML_INCLUDE_DIR "${CPPCHECK_SOURCE_DIR}/externals/tinyxml/") SET(CHECKCLI_SRCS + cmdlineparser.cpp cppcheckexecutor.cpp filelister.cpp - threadexecutor.cpp main.cpp + threadexecutor.cpp "${TINYXML_INCLUDE_DIR}tinystr.cpp" "${TINYXML_INCLUDE_DIR}tinyxml.cpp" "${TINYXML_INCLUDE_DIR}tinyxmlerror.cpp" diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index 22de045c4cd..3a7739c645d 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -24,17 +24,24 @@ SET(CHECK_HEADERS aboutdialog.h applicationdialog.h applicationlist.h + checkstatistics.h checkthread.h common.h csvreport.h + erroritem.h + filelist.h fileviewdialog.h helpwindow.h + logview.h mainwindow.h + project.h projectfile.h + projectfiledialog.h report.h resultstree.h resultsview.h settingsdialog.h + statsdialog.h threadhandler.h threadresult.h translationhandler.h @@ -45,19 +52,26 @@ SET(CHECK_HEADERS # Source files SET(CHECKGUI_SRCS aboutdialog.cpp - applicationdialog.cpp + applicationdialog.cpp applicationlist.cpp + checkstatistics.cpp checkthread.cpp csvreport.cpp + erroritem.cpp + filelist.cpp fileviewdialog.cpp helpwindow.cpp + logview.cpp main.cpp mainwindow.cpp + project.cpp projectfile.cpp + projectfiledialog.cpp report.cpp resultstree.cpp resultsview.cpp settingsdialog.cpp + statsdialog.cpp threadhandler.cpp threadresult.cpp translationhandler.cpp @@ -71,20 +85,26 @@ SET(CHECK_UIS application.ui file.ui helpwindow.ui + logview.ui main.ui + projectfile.ui resultsview.ui settings.ui + stats.ui ) # Translation files SET(CHECK_TRANS cppcheck_de.ts - cppcheck_fi.ts - cppcheck_pl.ts - cppcheck_se.ts cppcheck_en.ts + cppcheck_fi.ts + cppcheck_fr.ts + cppcheck_ja.ts cppcheck_nl.ts + cppcheck_pl.ts cppcheck_ru.ts + cppcheck_se.ts + cppcheck_sr.ts ) SET(CHECK_RCCS gui.qrc) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 5af5c13d9f8..679c590de8a 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -4,32 +4,44 @@ find_package(PCRE REQUIRED) set(TINYXML_INCLUDE_DIR "${CPPCHECK_SOURCE_DIR}/externals/tinyxml/") SET(CHECKTEST_SRCS + "${CPPCHECK_SOURCE_DIR}/cli/cmdlineparser.cpp" + "${CPPCHECK_SOURCE_DIR}/cli/cppcheckexecutor.cpp" "${CPPCHECK_SOURCE_DIR}/cli/filelister.cpp" + "${CPPCHECK_SOURCE_DIR}/cli/threadexecutor.cpp" + options.cpp + testautovariables.cpp + testbufferoverrun.cpp + testcharvar.cpp + testclass.cpp + testcmdlineparser.cpp + testconstructors.cpp + testcppcheck.cpp + testdivision.cpp + testerrorlogger.cpp + testexceptionsafety.cpp + testincompletestatement.cpp + testmathlib.cpp testmemleak.cpp + testnullpointer.cpp + testobsoletefunctions.cpp + testoptions.cpp testother.cpp + testpath.cpp + testpostfixoperator.cpp testpreprocessor.cpp - testautovariables.cpp - testredundantif.cpp - testbufferoverrun.cpp testrunner.cpp - testcharvar.cpp + testsettings.cpp testsimplifytokens.cpp - testclass.cpp teststl.cpp - testconstructors.cpp testsuite.cpp - testcppcheck.cpp - testdangerousfunctions.cpp + testsymboldatabase.cpp + testthreadexecutor.cpp testtoken.cpp - testdivision.cpp testtokenize.cpp - testexceptionsafety.cpp + testuninitvar.cpp testunusedfunctions.cpp - testfilelister.cpp testunusedprivfunc.cpp - testincompletestatement.cpp testunusedvar.cpp - testmathlib.cpp "${TINYXML_INCLUDE_DIR}tinystr.cpp" "${TINYXML_INCLUDE_DIR}tinyxml.cpp" "${TINYXML_INCLUDE_DIR}tinyxmlerror.cpp" @@ -47,7 +59,7 @@ if(WIN32) set(CHECK_LIBS ${CHECK_LIBS} shlwapi) endif() else() - set(CHECKTEST_SRCS ${CHECKTEST_SRCS} + set(CHECKTEST_SRCS ${CHECKTEST_SRCS} testfilelister_unix.cpp "${CPPCHECK_SOURCE_DIR}/cli/filelister_unix.cpp") endif() @@ -59,6 +71,7 @@ if (CMAKE_COMPILER_IS_GNUCXX) endif (CMAKE_COMPILER_IS_GNUCXX) include_directories("${CPPCHECK_SOURCE_DIR}/lib" + "${CPPCHECK_SOURCE_DIR}/cli" "${PCRE_INCLUDE_DIR}" "${TINYXML_INCLUDE_DIR}") add_executable(test ${CHECKTEST_SRCS} ${CPPCHECK_LIB_SOURCES}) From 6c1e017eb4e527cf879a7d9d6d80d25b98793c0c Mon Sep 17 00:00:00 2001 From: Markus Elfring Date: Sat, 19 Mar 2011 19:09:24 +0100 Subject: [PATCH 14/15] Correction for flags setting in CMake scripts (bug #2524) Additional compilation flags were passed to the command "set" as a second parameter. This had the effect that the passed parameters were converted to a CMake list. The variable "CMAKE_CXX_FLAGS" got an unwanted semicolon if it was not empty before. These flags are handled by a single string now. Signed-off-by: Markus Elfring --- cli/CMakeLists.txt | 5 +---- gui/CMakeLists.txt | 5 +---- lib/CMakeLists.txt | 5 +---- test/CMakeLists.txt | 5 +---- 4 files changed, 4 insertions(+), 16 deletions(-) diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt index d24accf29e1..a1ea5d59cec 100644 --- a/cli/CMakeLists.txt +++ b/cli/CMakeLists.txt @@ -31,10 +31,7 @@ else() endif() if (CMAKE_COMPILER_IS_GNUCXX) - set(CMAKE_CXX_FLAGS - ${CMAKE_CXX_FLAGS} - "-Wall -Wextra -pedantic -Wshadow -Wno-long-long -Wfloat-equal -Wcast-qual" - ) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -Wshadow -Wno-long-long -Wfloat-equal -Wcast-qual") endif (CMAKE_COMPILER_IS_GNUCXX) include_directories("${CPPCHECK_SOURCE_DIR}/lib" diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index 3a7739c645d..a06c9025982 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -123,10 +123,7 @@ if(WIN32) endif() if (CMAKE_COMPILER_IS_GNUCXX) - set(CMAKE_CXX_FLAGS - ${CMAKE_CXX_FLAGS} - "-Wall" - ) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") endif (CMAKE_COMPILER_IS_GNUCXX) # Generate rules for building source files from the resources diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 0c2a1a7cb72..625b2f6860d 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -10,10 +10,7 @@ set(CPPCHECK_LIB_DIR "") include("library_sources.cmake") if (CMAKE_COMPILER_IS_GNUCXX) - set(CMAKE_CXX_FLAGS - ${CMAKE_CXX_FLAGS} - "-Wall -Wextra -pedantic -Wshadow -Wno-long-long -Wfloat-equal -Wcast-qual" - ) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -Wshadow -Wno-long-long -Wfloat-equal -Wcast-qual") endif (CMAKE_COMPILER_IS_GNUCXX) add_library(checklib STATIC ${CPPCHECK_LIB_SOURCES}) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 679c590de8a..f54bf2a1ed3 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -64,10 +64,7 @@ else() endif() if (CMAKE_COMPILER_IS_GNUCXX) - set(CMAKE_CXX_FLAGS - ${CMAKE_CXX_FLAGS} - "-Wall -Wextra -pedantic -Wshadow -Wno-long-long -Wfloat-equal -Wcast-qual" - ) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -Wshadow -Wno-long-long -Wfloat-equal -Wcast-qual") endif (CMAKE_COMPILER_IS_GNUCXX) include_directories("${CPPCHECK_SOURCE_DIR}/lib" From 8e379f65ec6b29de134be4013536fafe4d760a1c Mon Sep 17 00:00:00 2001 From: Markus Elfring Date: Sat, 19 Mar 2011 20:22:13 +0100 Subject: [PATCH 15/15] Use of CMake module "FindXmlTo" (bug #2524) The documentation build script was updated for the use of the module "FindXmlTo.cmake". Signed-off-by: Markus Elfring --- cmake/modules/FindXmlTo.cmake | 105 ++++++++++++++++++++++++++++++++++ man/CMakeLists.txt | 28 ++++----- 2 files changed, 116 insertions(+), 17 deletions(-) create mode 100644 cmake/modules/FindXmlTo.cmake diff --git a/cmake/modules/FindXmlTo.cmake b/cmake/modules/FindXmlTo.cmake new file mode 100644 index 00000000000..47ee9ba3b1d --- /dev/null +++ b/cmake/modules/FindXmlTo.cmake @@ -0,0 +1,105 @@ +# Is Hendrik Sattler the original author of the following script? +# http://cmake.org/pipermail/cmake/2007-April/013545.html + +# - Convert XML docBook files to various formats +# This will convert XML docBook files to various formats like: +# man html txt dvi ps pdf +# macro XMLTO(outfiles infiles... MODES modes...) + +set ( XmlTo_FOUND false ) + +find_program ( XMLTO_EXECUTABLE NAMES xmlto + DOC "path to the xmlto docbook xslt frontend" ) + +if ( XMLTO_EXECUTABLE ) + set ( XmlTo_FOUND true ) + + if ( NOT XmlTo_FIND_QUIETLY ) + message ( STATUS "Found ${XMLTO_EXECUTABLE}" ) + endif ( NOT XmlTo_FIND_QUIETLY ) +else ( XMLTO_EXECUTABLE ) + if ( XmlTo_FIND_REQUIRED ) + message ( FATAL_ERROR "The xmlto program was not found." ) + endif ( XmlTo_FIND_REQUIRED ) +endif ( XMLTO_EXECUTABLE ) + +macro ( _XMLTO_FILE outfiles mode) + #special settings + set ( XMLTO_FILEEXT_man 1 ) + set ( XMLTO_MODE_html xhtml-nochunks ) + + if ( NOT XMLTO_MODE_${mode}) + set ( XMLTO_MODE_${mode} ${mode} ) + endif ( NOT XMLTO_MODE_${mode} ) + if ( NOT XMLTO_FILEEXT_${mode} ) + set ( XMLTO_FILEEXT_${mode} ${mode} ) + endif ( NOT XMLTO_FILEEXT_${mode} ) + + foreach ( dbFile ${ARGN} ) + #TODO: set XMLTO_FILEEXT_man to value from + if ( "${mode}" STREQUAL "man" ) + file ( READ "${dbFile}" _DB_FILE_CONTENTS ) + string ( REGEX MATCH "[^<]*" XMLTO_FILEEXT_${mode} "${_DB_FILE_CONTENTS}" ) + string ( REGEX REPLACE "^" "" XMLTO_FILEEXT_${mode} "${XMLTO_FILEEXT_${mode}}" ) + string ( REGEX REPLACE "[[:space:]]" "" XMLTO_FILEEXT_${mode} "${XMLTO_FILEEXT_${mode}}" ) + endif ( "${mode}" STREQUAL "man" ) + + get_filename_component ( dbFilePath "${CMAKE_CURRENT_BINARY_DIR}/${dbFile}" PATH ) + get_filename_component ( dbFileWE "${dbFile}" NAME_WE ) + get_filename_component ( dbFileAbsWE "${dbFilePath}/${dbFileWE}" ABSOLUTE ) + + add_custom_command ( + OUTPUT "${dbFileAbsWE}.${XMLTO_FILEEXT_${mode}}" + COMMAND "${XMLTO_EXECUTABLE}" ${XMLTO_COMMAND_ARGS} -o "${CMAKE_CURRENT_BINARY_DIR}" + ${XMLTO_MODE_${mode}} "${CMAKE_CURRENT_SOURCE_DIR}/${dbFile}" + MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/${dbFile}" + VERBATIM + ) + + set ( ${outfiles} + ${${outfiles}} + "${dbFileAbsWE}.${XMLTO_FILEEXT_${mode}}" + ) + endforeach ( dbFile ) +endmacro ( _XMLTO_FILE outfiles ) + +macro ( XMLTO ) + set ( XMLTO_MODES ) + set ( XMLTO_FILES ) + set ( XMLTO_HAS_MODES false ) + set ( XMLTO_ADD_DEFAULT false ) + foreach ( arg ${ARGN} ) + if ( ${arg} STREQUAL "MODES" ) + set ( XMLTO_HAS_MODES true ) + elseif ( ${arg} STREQUAL "ALL" ) + set ( XMLTO_ADD_DEFAULT true ) + else ( ${arg} STREQUAL "MODES" ) + if ( XMLTO_HAS_MODES ) + set ( XMLTO_MODES ${XMLTO_MODES} ${arg} ) + else ( XMLTO_HAS_MODES ) + set ( XMLTO_FILES ${XMLTO_FILES} ${arg} ) + endif ( XMLTO_HAS_MODES ) + endif ( ${arg} STREQUAL "MODES" ) + endforeach ( arg ${ARGN} ) + if ( NOT XMLTO_MODES ) + set ( XMLTO_MODES html ) + endif ( NOT XMLTO_MODES ) + + foreach ( mode ${XMLTO_MODES} ) + _xmlto_file ( XMLTO_FILES_${mode} ${mode} ${XMLTO_FILES} ) + if ( XMLTO_ADD_DEFAULT ) + add_custom_target ( ${mode} ALL + DEPENDS ${XMLTO_FILES_${mode}} + VERBATIM + ) + else ( XMLTO_ADD_DEFAULT ) + add_custom_target ( ${mode} + DEPENDS ${XMLTO_FILES_${mode}} + VERBATIM + ) + endif ( XMLTO_ADD_DEFAULT ) + endforeach ( mode ) + + set ( XMLTO_MODES ) + set ( XMLTO_FILES ) +endmacro ( XMLTO ) diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt index 3a6ff0e29ca..33cf79fce77 100644 --- a/man/CMakeLists.txt +++ b/man/CMakeLists.txt @@ -1,22 +1,16 @@ # Build Docbook manual # Run 'make html' to build manual -# Build manual in Linux/Cygwin - xmlto is not available in Windows +set(DOC_TARGETS "html") -SET(DOC_TARGETS "html") +if(CYGWIN) + # Build also htmlhelp in Cygwin - this can be used to build + # htmlhelp manual for Windows. + set(DOC_TARGETS ${DOC_TARGETS} "htmlhelp") +endif() -# Build also htmlhelp in Cygwin - this can be used to build -# htmlhelp manual for Windows. - -IF (CYGWIN) - SET(DOC_TARGETS - ${DOC_TARGETS} - "htmlhelp" - ) -ENDIF(CYGWIN) - -IF (UNIX OR CYGWIN) - #macro XMLTO(outfiles infiles... MODES modes...) - INCLUDE("../CMake/xmlto.cmake") - XMLTO("" "manual.docbook" MODES ${DOC_TARGETS}) -ENDIF (UNIX OR CYGWIN) +if(UNIX OR CYGWIN) + # Build manual in Linux/Cygwin - xmlto is not available in Windows + find_package(XmlTo REQUIRED) + xmlto("" "manual.docbook" MODES ${DOC_TARGETS}) +endif()