Hi,

we had a lot of fun debugging our nightly builds in the last couple of days. 
Part of our build process are some programs that get build using Apache Maven 
and are used to generate other files later on. It's something like this:

ADD_CUSTOM_COMMAND(
        OUTPUT ${artifact}
        DEPENDS ${sources}
        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
        COMMAND ${MAVEN_EXECUTABLE} --quiet install
        COMMENT "Building Java artifacts using Apache Maven..."
        VERBATIM
)
ADD_CUSTOM_TARGET(${target} ALL DEPENDS ${artifact})

And then some other ADD_CUSTOM_COMMANDS that depend on ${target}. When this 
was run on any of our desktops it worked fine, when we log in to the build 
machines it works fine, but when it runs with cron it doesn't work (not even 
on the Windows hosts). Since the first errors we got in CDash log were those 
of the target files that could not be generated because the maven output was 
missing we suspected some sort of dependency problem. It took us a while to 
find out that the dependencies were fine and Maven really wrote out some 
errors but CTest just didn't catch them. At the end it was just JAVA_HOME 
environment not being set when running with cron (easily fixed by "source 
/etc/profile" in the nightly script).

To prevent other people wasting their time hunting bugs that are simply not 
there: here is a small patch that tells CTest to detect Mavens error and 
warning messages.

Eike
From 36fdcaf33df5435a3f351158c8e1a3040518d210 Mon Sep 17 00:00:00 2001
From: Rolf Eike Beer <e...@sf-mail.de>
Date: Fri, 18 Mar 2011 09:38:34 +0100
Subject: [PATCH] CTest: catch warning output of Apache Maven

Some samples of things that got unnoticed by our nightly builds:

$ JAVA_HOME= mvn
Warning: JAVA_HOME environment variable is not set.
...

$ mvn
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
...
---
 Source/CTest/cmCTestBuildHandler.cxx |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/Source/CTest/cmCTestBuildHandler.cxx b/Source/CTest/cmCTestBuildHandler.cxx
index 9678ac4..86bd85d 100644
--- a/Source/CTest/cmCTestBuildHandler.cxx
+++ b/Source/CTest/cmCTestBuildHandler.cxx
@@ -93,6 +93,7 @@ static const char* cmCTestErrorMatches[] = {
   ": No such file or directory",
   ": Invalid argument",
   "^The project cannot be built\\.",
+  "^\\[ERROR\\]",
   0
 };
 
@@ -119,7 +120,7 @@ static const char* cmCTestWarningMatches[] = {
   "^\"[^\"]+\", line [0-9]+: [Ww](arning|arnung)",
   "([^:]+): warning[ \\t]*[0-9]+[ \\t]*:",
   "^(Warning|Warnung) ([0-9]+):",
-  "^(Warning|Warnung) ",
+  "^(Warning|Warnung)[ :]",
   "WARNING: ",
   "([^ :]+) : warning",
   "([^:]+): warning",
@@ -131,6 +132,7 @@ static const char* cmCTestWarningMatches[] = {
   "\".*\", line [0-9]+: remark\\([0-9]*\\):",
   "cc-[0-9]* CC: REMARK File = .*, Line = [0-9]*",
   "^CMake Warning.*:",
+  "^\\[WARNING\\]",
   0
 };
 
-- 
1.7.3.4

_______________________________________________
cmake-developers mailing list
cmake-developers@cmake.org
http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers

Reply via email to