mirror of
https://github.com/reactos/CMake.git
synced 2025-01-22 11:24:56 +00:00
Merge branch 'upstream-KWSys' into update-kwsys
* upstream-KWSys: KWSys 2017-11-01 (6ffca34c)
This commit is contained in:
commit
7576e9f8a3
@ -1147,17 +1147,22 @@ IF(KWSYS_STANDALONE OR CMake_SOURCE_DIR)
|
||||
SET_TESTS_PROPERTIES(kwsys.testProcess-${n} PROPERTIES TIMEOUT 120)
|
||||
ENDFOREACH()
|
||||
|
||||
SET(testProcess_COMPILE_FLAGS "")
|
||||
# Some Apple compilers produce bad optimizations in this source.
|
||||
IF(APPLE AND CMAKE_C_COMPILER_ID MATCHES "^(GNU|LLVM)$")
|
||||
SET_SOURCE_FILES_PROPERTIES(testProcess.c PROPERTIES COMPILE_FLAGS -O0)
|
||||
STRING(APPEND testProcess_COMPILE_FLAGS " -O0")
|
||||
ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "XL" AND
|
||||
NOT (CMAKE_SYSTEM MATCHES "Linux.*ppc64le" AND
|
||||
NOT CMAKE_C_COMPILER_VERSION VERSION_LESS "13.1.1"))
|
||||
# Tell IBM XL not to warn about our test infinite loop
|
||||
# v13.1.1 and newer on Linux ppc64le is clang based and does not accept
|
||||
# the -qsuppress option
|
||||
SET_PROPERTY(SOURCE testProcess.c PROPERTY COMPILE_FLAGS -qsuppress=1500-010)
|
||||
STRING(APPEND testProcess_COMPILE_FLAGS " -qsuppress=1500-010")
|
||||
ENDIF()
|
||||
IF(CMAKE_C_FLAGS MATCHES "-fsanitize=")
|
||||
STRING(APPEND testProcess_COMPILE_FLAGS " -DCRASH_USING_ABORT")
|
||||
ENDIF()
|
||||
SET_PROPERTY(SOURCE testProcess.c PROPERTY COMPILE_FLAGS "${testProcess_COMPILE_FLAGS}")
|
||||
|
||||
# Test SharedForward
|
||||
CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/testSharedForward.c.in
|
||||
|
@ -62,9 +62,6 @@
|
||||
!defined(@KWSYS_NAMESPACE@_LFS_NO_DEFINE_FILE_OFFSET_BITS)
|
||||
#define _FILE_OFFSET_BITS 64
|
||||
#endif
|
||||
#if 0 && (defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS < 64)
|
||||
#error "_FILE_OFFSET_BITS must be defined to at least 64"
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -751,15 +751,15 @@ FILE* SystemTools::Fopen(const std::string& file, const char* mode)
|
||||
#endif
|
||||
}
|
||||
|
||||
bool SystemTools::MakeDirectory(const char* path)
|
||||
bool SystemTools::MakeDirectory(const char* path, const mode_t* mode)
|
||||
{
|
||||
if (!path) {
|
||||
return false;
|
||||
}
|
||||
return SystemTools::MakeDirectory(std::string(path));
|
||||
return SystemTools::MakeDirectory(std::string(path), mode);
|
||||
}
|
||||
|
||||
bool SystemTools::MakeDirectory(const std::string& path)
|
||||
bool SystemTools::MakeDirectory(const std::string& path, const mode_t* mode)
|
||||
{
|
||||
if (SystemTools::PathExists(path)) {
|
||||
return SystemTools::FileIsDirectory(path);
|
||||
@ -774,8 +774,12 @@ bool SystemTools::MakeDirectory(const std::string& path)
|
||||
std::string topdir;
|
||||
while ((pos = dir.find('/', pos)) != std::string::npos) {
|
||||
topdir = dir.substr(0, pos);
|
||||
Mkdir(topdir);
|
||||
pos++;
|
||||
|
||||
if (Mkdir(topdir) == 0 && mode != 0) {
|
||||
SystemTools::SetPermissions(topdir, *mode);
|
||||
}
|
||||
|
||||
++pos;
|
||||
}
|
||||
topdir = dir;
|
||||
if (Mkdir(topdir) != 0) {
|
||||
@ -790,7 +794,10 @@ bool SystemTools::MakeDirectory(const std::string& path)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
} else if (mode != 0) {
|
||||
SystemTools::SetPermissions(topdir, *mode);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -553,13 +553,20 @@ public:
|
||||
*/
|
||||
static FILE* Fopen(const std::string& file, const char* mode);
|
||||
|
||||
/**
|
||||
* Visual C++ does not define mode_t (note that Borland does, however).
|
||||
*/
|
||||
#if defined(_MSC_VER)
|
||||
typedef unsigned short mode_t;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Make a new directory if it is not there. This function
|
||||
* can make a full path even if none of the directories existed
|
||||
* prior to calling this function.
|
||||
*/
|
||||
static bool MakeDirectory(const char* path);
|
||||
static bool MakeDirectory(const std::string& path);
|
||||
static bool MakeDirectory(const char* path, const mode_t* mode = 0);
|
||||
static bool MakeDirectory(const std::string& path, const mode_t* mode = 0);
|
||||
|
||||
/**
|
||||
* Copy the source file to the destination file only
|
||||
@ -749,13 +756,6 @@ public:
|
||||
*/
|
||||
static long int CreationTime(const std::string& filename);
|
||||
|
||||
/**
|
||||
* Visual C++ does not define mode_t (note that Borland does, however).
|
||||
*/
|
||||
#if defined(_MSC_VER)
|
||||
typedef unsigned short mode_t;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Get and set permissions of the file. If honor_umask is set, the umask
|
||||
* is queried and applied to the given permissions. Returns false if
|
||||
|
@ -107,6 +107,7 @@ static int test3(int argc, const char* argv[])
|
||||
|
||||
static int test4(int argc, const char* argv[])
|
||||
{
|
||||
#ifndef CRASH_USING_ABORT
|
||||
/* Prepare a pointer to an invalid address. Don't use null, because
|
||||
dereferencing null is undefined behaviour and compilers are free to
|
||||
do whatever they want. ex: Clang will warn at compile time, or even
|
||||
@ -114,6 +115,7 @@ static int test4(int argc, const char* argv[])
|
||||
'volatile' and a slightly larger address, based on a runtime value. */
|
||||
volatile int* invalidAddress = 0;
|
||||
invalidAddress += argc ? 1 : 2;
|
||||
#endif
|
||||
|
||||
#if defined(_WIN32)
|
||||
/* Avoid error diagnostic popups since we are crashing on purpose. */
|
||||
@ -128,9 +130,13 @@ static int test4(int argc, const char* argv[])
|
||||
fprintf(stderr, "Output before crash on stderr from crash test.\n");
|
||||
fflush(stdout);
|
||||
fflush(stderr);
|
||||
#ifdef CRASH_USING_ABORT
|
||||
abort();
|
||||
#else
|
||||
assert(invalidAddress); /* Quiet Clang scan-build. */
|
||||
/* Provoke deliberate crash by writing to the invalid address. */
|
||||
*invalidAddress = 0;
|
||||
#endif
|
||||
fprintf(stdout, "Output after crash on stdout from crash test.\n");
|
||||
fprintf(stderr, "Output after crash on stderr from crash test.\n");
|
||||
return 0;
|
||||
@ -149,7 +155,12 @@ static int test5(int argc, const char* argv[])
|
||||
fprintf(stderr, "Output on stderr before recursive test.\n");
|
||||
fflush(stdout);
|
||||
fflush(stderr);
|
||||
r = runChild(cmd, kwsysProcess_State_Exception, kwsysProcess_Exception_Fault,
|
||||
r = runChild(cmd, kwsysProcess_State_Exception,
|
||||
#ifdef CRASH_USING_ABORT
|
||||
kwsysProcess_Exception_Other,
|
||||
#else
|
||||
kwsysProcess_Exception_Fault,
|
||||
#endif
|
||||
1, 1, 1, 0, 15, 0, 1, 0, 0, 0);
|
||||
fprintf(stdout, "Output on stdout after recursive test.\n");
|
||||
fprintf(stderr, "Output on stderr after recursive test.\n");
|
||||
@ -628,11 +639,16 @@ int main(int argc, const char* argv[])
|
||||
kwsysProcess_State_Exception /* Process group test */
|
||||
};
|
||||
int exceptions[10] = {
|
||||
kwsysProcess_Exception_None, kwsysProcess_Exception_None,
|
||||
kwsysProcess_Exception_None, kwsysProcess_Exception_Fault,
|
||||
kwsysProcess_Exception_None, kwsysProcess_Exception_None,
|
||||
kwsysProcess_Exception_None, kwsysProcess_Exception_None,
|
||||
kwsysProcess_Exception_None, kwsysProcess_Exception_Interrupt
|
||||
kwsysProcess_Exception_None, kwsysProcess_Exception_None,
|
||||
kwsysProcess_Exception_None,
|
||||
#ifdef CRASH_USING_ABORT
|
||||
kwsysProcess_Exception_Other,
|
||||
#else
|
||||
kwsysProcess_Exception_Fault,
|
||||
#endif
|
||||
kwsysProcess_Exception_None, kwsysProcess_Exception_None,
|
||||
kwsysProcess_Exception_None, kwsysProcess_Exception_None,
|
||||
kwsysProcess_Exception_None, kwsysProcess_Exception_Interrupt
|
||||
};
|
||||
int values[10] = { 0, 123, 1, 1, 0, 0, 0, 0, 1, 1 };
|
||||
int shares[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 };
|
||||
|
Loading…
x
Reference in New Issue
Block a user