Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
CMake
CMake
Commits
a442f171
Commit
a442f171
authored
Dec 01, 2003
by
Ken Martin
Browse files
a start on the dashboard driver
parent
81be61b1
Changes
3
Hide whitespace changes
Inline
Side-by-side
Source/cmCTest.cxx
View file @
a442f171
...
...
@@ -15,7 +15,11 @@
=========================================================================*/
#include "cmCTest.h"
#include "cmSystemTools.h"
#include "cmake.h"
#include "cmMakefile.h"
#include "cmLocalGenerator.h"
#include "cmGlobalGenerator.h"
#include <cmsys/Directory.hxx>
#include "cmListFileCache.h"
#ifdef HAVE_CURL
...
...
@@ -258,14 +262,15 @@ bool TryExecutable(const char *dir, const char *file,
cmCTest
::
cmCTest
()
{
m_UseIncludeRegExp
=
false
;
m_UseExcludeRegExp
=
false
;
m_UseExcludeRegExpFirst
=
false
;
m_Verbose
=
false
;
m_DartMode
=
false
;
m_ShowOnly
=
false
;
m_TestModel
=
cmCTest
::
EXPERIMENTAL
;
m_TimeOut
=
0
;
m_UseIncludeRegExp
=
false
;
m_UseExcludeRegExp
=
false
;
m_UseExcludeRegExpFirst
=
false
;
m_Verbose
=
false
;
m_DartMode
=
false
;
m_ShowOnly
=
false
;
m_RunConfigurationScript
=
false
;
m_TestModel
=
cmCTest
::
EXPERIMENTAL
;
m_TimeOut
=
0
;
int
cc
;
for
(
cc
=
0
;
cc
<
cmCTest
::
LAST_TEST
;
cc
++
)
{
...
...
@@ -2518,3 +2523,152 @@ const char* cmCTest::GetTestStatus(int status)
}
return
statuses
[
status
];
}
void
cmCTestRemoveDirectory
(
const
char
*
binDir
)
{
cmsys
::
Directory
dir
;
dir
.
Load
(
binDir
);
size_t
fileNum
;
for
(
fileNum
=
0
;
fileNum
<
dir
.
GetNumberOfFiles
();
++
fileNum
)
{
if
(
strcmp
(
dir
.
GetFile
(
static_cast
<
unsigned
long
>
(
fileNum
)),
"."
)
&&
strcmp
(
dir
.
GetFile
(
static_cast
<
unsigned
long
>
(
fileNum
)),
".."
))
{
std
::
string
fullPath
=
binDir
;
fullPath
+=
"/"
;
fullPath
+=
dir
.
GetFile
(
static_cast
<
unsigned
long
>
(
fileNum
));
if
(
cmSystemTools
::
FileIsDirectory
(
fullPath
.
c_str
()))
{
cmCTestRemoveDirectory
(
fullPath
.
c_str
());
}
else
{
if
(
!
cmSystemTools
::
RemoveFile
(
fullPath
.
c_str
()))
{
std
::
string
m
=
"Remove failed on file: "
;
m
+=
fullPath
;
cmSystemTools
::
ReportLastSystemError
(
m
.
c_str
());
}
}
}
}
}
int
cmCTest
::
RunConfigurationScript
()
{
m_ConfigurationScript
=
cmSystemTools
::
CollapseFullPath
(
m_ConfigurationScript
.
c_str
());
// make sure the file exists
if
(
!
cmSystemTools
::
FileExists
(
m_ConfigurationScript
.
c_str
()))
{
return
-
1
;
}
// create a cmake instance to read the configuration script
cmake
cm
;
cmGlobalGenerator
gg
;
gg
.
SetCMakeInstance
(
&
cm
);
// read in the list file to fill the cache
cmLocalGenerator
*
lg
=
gg
.
CreateLocalGenerator
();
lg
->
SetGlobalGenerator
(
&
gg
);
if
(
!
lg
->
GetMakefile
()
->
ReadListFile
(
0
,
m_ConfigurationScript
.
c_str
()))
{
return
-
2
;
}
// no popup widows
cmSystemTools
::
SetRunCommandHideConsole
(
true
);
// get some info that should be set
cmMakefile
*
mf
=
lg
->
GetMakefile
();
const
char
*
srcDir
=
mf
->
GetDefinition
(
"CTEST_SOURCE_DIRECTORY"
);
const
char
*
binDir
=
mf
->
GetDefinition
(
"CTEST_BINARY_DIRECTORY"
);
const
char
*
ctestCmd
=
mf
->
GetDefinition
(
"CTEST_COMMAND"
);
// make sure the required info is here
if
(
!
srcDir
||
!
binDir
||
!
ctestCmd
)
{
cmSystemTools
::
Error
(
"Some required settings in the configuration file were missing"
);
return
-
3
;
}
// clear the binary directory?
if
(
mf
->
IsOn
(
"CTEST_START_WITH_EMPTY_BINARY_DIRECTORY"
))
{
// try to avoid deleting directories that we shouldn't
std
::
string
check
=
binDir
;
check
+=
"/CMakeCache.txt"
;
if
(
cmSystemTools
::
FileExists
(
check
.
c_str
()))
{
cmCTestRemoveDirectory
(
binDir
);
}
}
// make sure the binary directory exists
if
(
!
cmSystemTools
::
FileExists
(
binDir
))
{
if
(
!
cmSystemTools
::
MakeDirectory
(
binDir
))
{
cmSystemTools
::
Error
(
"Unable to create the binary directory"
);
return
-
4
;
}
}
std
::
string
command
;
std
::
string
output
;
int
retVal
=
0
;
bool
res
=
0
;
// do an initial cvs update on the src dir
const
char
*
cvsCmd
=
mf
->
GetDefinition
(
"CTEST_CVS_COMMAND"
);
if
(
cvsCmd
)
{
command
=
cvsCmd
;
output
.
empty
();
retVal
=
0
;
res
=
cmSystemTools
::
RunSingleCommand
(
command
.
c_str
(),
&
output
,
&
retVal
,
binDir
,
m_Verbose
,
0
/*m_TimeOut*/
);
}
// put the initial cache into the bin dir
if
(
mf
->
GetDefinition
(
"CTEST_INITIAL_CACHE"
))
{
// the cache file will always be next to the configuration script
std
::
string
initialCache
=
cmSystemTools
::
GetFilenamePath
(
m_ConfigurationScript
);
initialCache
+=
"/"
;
initialCache
+=
mf
->
GetDefinition
(
"CTEST_INITIAL_CACHE"
);
std
::
string
destCache
=
binDir
;
destCache
+=
"/CMakeCache.txt"
;
cmSystemTools
::
CopyFileIfDifferent
(
initialCache
.
c_str
(),
destCache
.
c_str
());
}
// do an initial cmake to setup the DartConfig file
const
char
*
cmakeCmd
=
mf
->
GetDefinition
(
"CTEST_CMAKE_COMMAND"
);
if
(
cmakeCmd
)
{
command
=
cmakeCmd
;
command
+=
" "
;
command
+=
srcDir
;
output
.
empty
();
retVal
=
0
;
res
=
cmSystemTools
::
RunSingleCommand
(
command
.
c_str
(),
&
output
,
&
retVal
,
binDir
,
m_Verbose
,
0
/*m_TimeOut*/
);
}
// run ctest
command
=
ctestCmd
;
output
.
empty
();
retVal
=
0
;
res
=
cmSystemTools
::
RunSingleCommand
(
command
.
c_str
(),
&
output
,
&
retVal
,
binDir
,
m_Verbose
,
0
/*m_TimeOut*/
);
return
0
;
}
Source/cmCTest.h
View file @
a442f171
...
...
@@ -24,6 +24,11 @@
class
cmCTest
{
public:
/**
* Run a dashboard using a specified confiuration script
*/
int
RunConfigurationScript
();
/**
* Initialize and finalize testing
*/
...
...
@@ -120,6 +125,9 @@ public:
bool
m_DartMode
;
bool
m_ShowOnly
;
bool
m_RunConfigurationScript
;
std
::
string
m_ConfigurationScript
;
enum
{
EXPERIMENTAL
,
NIGHTLY
,
...
...
Source/ctest.cxx
View file @
a442f171
...
...
@@ -73,6 +73,12 @@ static const cmDocumentationEntry cmDocumentationOptions[] =
"a dashboard test. All tests are ModeTest, where Mode can be Experimental, "
"Nightly, and Continuous, and Test can be Start, Update, Configure, "
"Build, Test, Coverage, and Submit."
},
{
"-S <ConfigScript>"
,
"Execute a dashboard for a configuration"
,
"This option tells ctest to load in a configuration script which sets "
"a number of parameters such as the binary and source directories. Then "
"ctest will do what is required to create and run a dashboard. This "
"option basically sets up a dashboard and then runs ctest -D with the "
"appropriate options."
},
{
0
,
0
,
0
}
};
...
...
@@ -146,6 +152,12 @@ int main (int argc, char *argv[])
inst
.
m_ShowOnly
=
true
;
}
if
(
arg
.
find
(
"-S"
,
0
)
==
0
&&
i
<
args
.
size
()
-
1
)
{
inst
.
m_RunConfigurationScript
=
true
;
inst
.
m_ConfigurationScript
=
args
[
i
+
1
];
}
if
(
arg
.
find
(
"-D"
,
0
)
==
0
&&
i
<
args
.
size
()
-
1
)
{
inst
.
m_DartMode
=
true
;
...
...
@@ -367,10 +379,18 @@ int main (int argc, char *argv[])
}
// call process directory
inst
.
Initialize
();
int
res
=
inst
.
ProcessTests
();
inst
.
Finalize
();
int
res
;
if
(
inst
.
m_RunConfigurationScript
)
{
res
=
inst
.
RunConfigurationScript
();
}
else
{
inst
.
Initialize
();
res
=
inst
.
ProcessTests
();
inst
.
Finalize
();
}
return
res
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment