ENH: merge in changes for beos support
This commit is contained in:
parent
de8ffcaef4
commit
3a32cec969
|
@ -59,6 +59,14 @@ IF(${CMAKE_GENERATOR} MATCHES "Visual Studio")
|
|||
SET(CMAKE_COMPILER_IS_GNUCXX_RUN 1)
|
||||
ENDIF(${CMAKE_GENERATOR} MATCHES "Visual Studio")
|
||||
|
||||
# The g++ that comes with BeOS 5 segfaults if you run "g++ -E"
|
||||
# ("gcc -E" is fine), which throws up a system dialog box that hangs cmake
|
||||
# until the user clicks "OK"...so for now, we just assume it's g++.
|
||||
IF(BEOS)
|
||||
SET(CMAKE_COMPILER_IS_GNUCXX 1)
|
||||
SET(CMAKE_COMPILER_IS_GNUCXX_RUN 1)
|
||||
ENDIF(BEOS)
|
||||
|
||||
IF(NOT CMAKE_COMPILER_IS_GNUCXX_RUN)
|
||||
# test to see if the cxx compiler is gnu
|
||||
SET(CMAKE_COMPILER_IS_GNUCXX_RUN 1)
|
||||
|
|
|
@ -16,7 +16,10 @@ int main(int ac, char*av[]){
|
|||
pthread_create(&tid[0], 0, runner, (void*)1);
|
||||
pthread_create(&tid[1], 0, runner, (void*)2);
|
||||
|
||||
#if defined(__BEOS__) && !defined(__ZETA__) // (no usleep on BeOS 5.)
|
||||
usleep(1); // for strange behavior on single-processor sun
|
||||
#endif
|
||||
|
||||
pthread_join(tid[0], 0);
|
||||
pthread_join(tid[1], 0);
|
||||
if(ac > 1000){return *av[0];}
|
||||
|
|
|
@ -48,6 +48,10 @@
|
|||
|
||||
#include <memory> // auto_ptr
|
||||
|
||||
#if defined(__BEOS__)
|
||||
#include <be/kernel/OS.h> /* disable_debugger() API. */
|
||||
#endif
|
||||
|
||||
#define DEBUGOUT std::cout << __LINE__ << " "; std::cout
|
||||
#define DEBUGERR std::cerr << __LINE__ << " "; std::cerr
|
||||
|
||||
|
@ -589,6 +593,8 @@ void cmCTest::BlockTestErrorDiagnostics()
|
|||
cmSystemTools::PutEnv("DASHBOARD_TEST_FROM_CTEST=" CMake_VERSION);
|
||||
#if defined(_WIN32)
|
||||
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
|
||||
#elif defined(__BEOS__)
|
||||
disable_debugger(1);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -23,6 +23,10 @@
|
|||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#if defined(__BEOS__)
|
||||
#include <unistd.h> /* prevents a conflict with a #define later on... */
|
||||
#endif
|
||||
|
||||
/* end standard C headers. */
|
||||
|
||||
/* flex integer type definitions */
|
||||
|
|
|
@ -22,6 +22,10 @@
|
|||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#if defined(__BEOS__)
|
||||
#include <unistd.h> /* prevents a conflict with a #define later on... */
|
||||
#endif
|
||||
|
||||
/* end standard C headers. */
|
||||
|
||||
/* flex integer type definitions */
|
||||
|
|
|
@ -1946,6 +1946,9 @@ void cmMakefile::AddDefaultDefinitions()
|
|||
#if defined(__QNXNTO__)
|
||||
this->AddDefinition("QNXNTO", "1");
|
||||
#endif
|
||||
#if defined(__BEOS__)
|
||||
this->AddDefinition("BEOS", "1");
|
||||
#endif
|
||||
|
||||
char temp[1024];
|
||||
sprintf(temp, "%d", cmVersion::GetMinorVersion());
|
||||
|
|
|
@ -1432,7 +1432,12 @@ int cmSystemToolsGZStructOpen(void* call_data, const char *pathname,
|
|||
return -1;
|
||||
}
|
||||
|
||||
#if !defined(_WIN32) || defined(__CYGWIN__)
|
||||
#if defined(__BEOS__) && !defined(__ZETA__) // no fchmod on BeOS 5...do pathname instead.
|
||||
if ((oflags & O_CREAT) && chmod(pathname, mode))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
#elif !defined(_WIN32) || defined(__CYGWIN__)
|
||||
if ((oflags & O_CREAT) && fchmod(fd, mode))
|
||||
{
|
||||
return -1;
|
||||
|
|
|
@ -319,7 +319,112 @@ const char* DynamicLoader::LastError()
|
|||
#endif //_WIN32
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// 4. Implementation for default UNIX machines.
|
||||
// 4. Implementation for BeOS
|
||||
#ifdef __BEOS__
|
||||
#include <string.h> // for strerror()
|
||||
#include <be/kernel/image.h>
|
||||
#include <be/support/Errors.h>
|
||||
#define DYNAMICLOADER_DEFINED 1
|
||||
|
||||
namespace KWSYS_NAMESPACE
|
||||
{
|
||||
|
||||
static image_id last_dynamic_err = B_OK;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
DynamicLoader::LibraryHandle DynamicLoader::OpenLibrary(const char* libname )
|
||||
{
|
||||
// image_id's are integers, errors are negative. Add one just in case we
|
||||
// get a valid image_id of zero (is that even possible?).
|
||||
image_id rc = load_add_on(libname);
|
||||
if (rc < 0)
|
||||
{
|
||||
last_dynamic_err = rc;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return rc+1;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int DynamicLoader::CloseLibrary(DynamicLoader::LibraryHandle lib)
|
||||
{
|
||||
if (!lib)
|
||||
{
|
||||
last_dynamic_err = B_BAD_VALUE;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
// The function dlclose() returns 0 on success, and non-zero on error.
|
||||
status_t rc = unload_add_on(lib-1);
|
||||
if (rc != B_OK)
|
||||
{
|
||||
last_dynamic_err = rc;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
DynamicLoader::SymbolPointer DynamicLoader::GetSymbolAddress(
|
||||
DynamicLoader::LibraryHandle lib, const char* sym)
|
||||
{
|
||||
// Hack to cast pointer-to-data to pointer-to-function.
|
||||
union
|
||||
{
|
||||
void* pvoid;
|
||||
DynamicLoader::SymbolPointer psym;
|
||||
} result;
|
||||
|
||||
result.psym = NULL;
|
||||
|
||||
if (!lib)
|
||||
{
|
||||
last_dynamic_err = B_BAD_VALUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
// !!! FIXME: BeOS can do function-only lookups...does this ever
|
||||
// !!! FIXME: actually _want_ a data symbol lookup, or was this union
|
||||
// !!! FIXME: a leftover of dlsym()? (s/ANY/TEXT for functions only).
|
||||
status_t rc = get_image_symbol(lib-1,sym,B_SYMBOL_TYPE_ANY,&result.pvoid);
|
||||
if (rc != B_OK)
|
||||
{
|
||||
last_dynamic_err = rc;
|
||||
result.psym = NULL;
|
||||
}
|
||||
}
|
||||
return result.psym;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
const char* DynamicLoader::LibPrefix()
|
||||
{
|
||||
return "lib";
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
const char* DynamicLoader::LibExtension()
|
||||
{
|
||||
return ".so";
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
const char* DynamicLoader::LastError()
|
||||
{
|
||||
const char *retval = strerror(last_dynamic_err);
|
||||
last_dynamic_err = B_OK;
|
||||
return retval;
|
||||
}
|
||||
|
||||
} // namespace KWSYS_NAMESPACE
|
||||
#endif
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// 5. Implementation for default UNIX machines.
|
||||
// if nothing has been defined then use this
|
||||
#ifndef DYNAMICLOADER_DEFINED
|
||||
#define DYNAMICLOADER_DEFINED 1
|
||||
|
|
|
@ -25,6 +25,8 @@
|
|||
#if MAC_OS_X_VERSION_MAX_ALLOWED < 1030
|
||||
#include <mach-o/dyld.h>
|
||||
#endif
|
||||
#elif defined(__BEOS__)
|
||||
#include <be/kernel/image.h>
|
||||
#endif
|
||||
|
||||
namespace @KWSYS_NAMESPACE@
|
||||
|
@ -62,6 +64,8 @@ public:
|
|||
#else
|
||||
typedef void* LibraryHandle;
|
||||
#endif
|
||||
#elif defined(__BEOS__)
|
||||
typedef image_id LibraryHandle;
|
||||
#else
|
||||
typedef void* LibraryHandle;
|
||||
#endif
|
||||
|
|
|
@ -108,6 +108,34 @@ public:
|
|||
#define _chdir chdir
|
||||
#endif
|
||||
|
||||
#if defined(__BEOS__) && !defined(__ZETA__)
|
||||
#include <be/kernel/OS.h>
|
||||
#include <be/storage/Path.h>
|
||||
|
||||
// BeOS 5 doesn't have usleep(), but it has snooze(), which is identical.
|
||||
static inline void usleep(unsigned int msec)
|
||||
{
|
||||
::snooze(msec);
|
||||
}
|
||||
|
||||
// BeOS 5 also doesn't have realpath(), but its C++ API offers something close.
|
||||
static inline char *realpath(const char *path, char *resolved_path)
|
||||
{
|
||||
const size_t maxlen = KWSYS_SYSTEMTOOLS_MAXPATH;
|
||||
snprintf(resolved_path, maxlen, "%s", path);
|
||||
BPath normalized(resolved_path, NULL, true);
|
||||
const char *resolved = normalized.Path();
|
||||
if (resolved != NULL) // NULL == No such file.
|
||||
{
|
||||
if (snprintf(resolved_path, maxlen, "%s", resolved) < maxlen)
|
||||
{
|
||||
return resolved_path;
|
||||
}
|
||||
}
|
||||
return NULL; // something went wrong.
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(_WIN32) && (defined(_MSC_VER) || defined(__WATCOMC__) || defined(__BORLANDC__) || defined(__MINGW32__))
|
||||
inline int Mkdir(const char* dir)
|
||||
{
|
||||
|
@ -291,7 +319,9 @@ void SystemTools::GetPath(kwsys_stl::vector<kwsys_stl::string>& path, const char
|
|||
kwsys_stl::string::size_type endpos = pathEnv.find(pathSep, start);
|
||||
if(endpos != kwsys_stl::string::npos)
|
||||
{
|
||||
path.push_back(pathEnv.substr(start, endpos-start));
|
||||
kwsys_stl::string convertedPath;
|
||||
Realpath(pathEnv.substr(start, endpos-start).c_str(), convertedPath);
|
||||
path.push_back(convertedPath);
|
||||
start = endpos+1;
|
||||
}
|
||||
else
|
||||
|
|
|
@ -17,6 +17,10 @@
|
|||
#include KWSYS_HEADER(ios/iostream)
|
||||
#include KWSYS_HEADER(stl/string)
|
||||
|
||||
#if defined(__BEOS__)
|
||||
#include <be/kernel/OS.h> /* disable_debugger() API. */
|
||||
#endif
|
||||
|
||||
// Work-around CMake dependency scanning limitation. This must
|
||||
// duplicate the above list of headers.
|
||||
#if 0
|
||||
|
@ -88,6 +92,8 @@ int main(int argc, char *argv[])
|
|||
{
|
||||
#if defined(_WIN32)
|
||||
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
|
||||
#elif defined(__BEOS__)
|
||||
disable_debugger(1);
|
||||
#endif
|
||||
int res;
|
||||
if( argc == 3 )
|
||||
|
|
|
@ -46,7 +46,9 @@ ADD_LIBRARY(CMakeTestModule MODULE moduleFile.c)
|
|||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTEST_C_FLAGS")
|
||||
ADD_LIBRARY(CMakeTestCLibraryShared SHARED testConly.c)
|
||||
SET_TARGET_PROPERTIES(CMakeTestCLibraryShared PROPERTIES FOO BAR)
|
||||
IF(NOT BEOS) # No libm on BeOS.
|
||||
SET_TARGET_PROPERTIES(CMakeTestCLibraryShared PROPERTIES LINK_FLAGS "-lm")
|
||||
ENDIF(NOT BEOS)
|
||||
GET_TARGET_PROPERTY(FOO_BAR_VAR CMakeTestCLibraryShared FOO)
|
||||
IF(${FOO_BAR_VAR} MATCHES "BAR")
|
||||
ELSE(${FOO_BAR_VAR} MATCHES "BAR")
|
||||
|
|
|
@ -46,7 +46,9 @@ ADD_LIBRARY(CMakeTestModule MODULE moduleFile.c)
|
|||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTEST_C_FLAGS")
|
||||
ADD_LIBRARY(CMakeTestCLibraryShared SHARED testConly.c)
|
||||
SET_TARGET_PROPERTIES(CMakeTestCLibraryShared PROPERTIES FOO BAR)
|
||||
IF(NOT BEOS) # No libm on BeOS.
|
||||
SET_TARGET_PROPERTIES(CMakeTestCLibraryShared PROPERTIES LINK_FLAGS "-lm")
|
||||
ENDIF(NOT BEOS)
|
||||
GET_TARGET_PROPERTY(FOO_BAR_VAR CMakeTestCLibraryShared FOO)
|
||||
IF(${FOO_BAR_VAR} MATCHES "BAR")
|
||||
ELSE(${FOO_BAR_VAR} MATCHES "BAR")
|
||||
|
|
|
@ -46,7 +46,9 @@ ADD_LIBRARY(CMakeTestModule MODULE moduleFile.c)
|
|||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTEST_C_FLAGS")
|
||||
ADD_LIBRARY(CMakeTestCLibraryShared SHARED testConly.c)
|
||||
SET_TARGET_PROPERTIES(CMakeTestCLibraryShared PROPERTIES FOO BAR)
|
||||
IF(NOT BEOS) # No libm on BeOS.
|
||||
SET_TARGET_PROPERTIES(CMakeTestCLibraryShared PROPERTIES LINK_FLAGS "-lm")
|
||||
ENDIF(NOT BEOS)
|
||||
GET_TARGET_PROPERTY(FOO_BAR_VAR CMakeTestCLibraryShared FOO)
|
||||
IF(${FOO_BAR_VAR} MATCHES "BAR")
|
||||
ELSE(${FOO_BAR_VAR} MATCHES "BAR")
|
||||
|
|
|
@ -135,6 +135,13 @@ CHECK_LIBRARY_EXISTS_CONCAT("ucb" gethostname HAVE_LIBUCB)
|
|||
CHECK_LIBRARY_EXISTS_CONCAT("socket" connect HAVE_LIBSOCKET)
|
||||
CHECK_LIBRARY_EXISTS("c" gethostbyname "" NOT_NEED_LIBNSL)
|
||||
|
||||
# Yellowtab Zeta needs different libraries than BeOS 5.
|
||||
IF(BEOS)
|
||||
SET(NOT_NEED_LIBNSL 1)
|
||||
CHECK_LIBRARY_EXISTS_CONCAT("bind" gethostbyname HAVE_LIBBIND)
|
||||
CHECK_LIBRARY_EXISTS_CONCAT("bnetapi" closesocket HAVE_LIBBNETAPI)
|
||||
ENDIF(BEOS)
|
||||
|
||||
IF(NOT NOT_NEED_LIBNSL)
|
||||
CHECK_LIBRARY_EXISTS_CONCAT("nsl" gethostbyname HAVE_LIBNSL)
|
||||
ENDIF(NOT NOT_NEED_LIBNSL)
|
||||
|
|
|
@ -197,11 +197,13 @@ void
|
|||
th_set_mode(TAR *t, mode_t fmode)
|
||||
{
|
||||
#ifndef WIN32
|
||||
#ifndef __BEOS__
|
||||
if (S_ISSOCK(fmode))
|
||||
{
|
||||
fmode &= ~S_IFSOCK;
|
||||
fmode |= S_IFIFO;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
/* Looks like on windows the st_mode is longer than 8 characters. */
|
||||
int_to_oct(fmode & 07777777, (t)->th_buf.mode, 8);
|
||||
|
|
|
@ -116,7 +116,7 @@ tar_set_file_perms(TAR *t, char *realname)
|
|||
return -1;
|
||||
}
|
||||
/* change permissions */
|
||||
if (!TH_ISSYM(t) && chmod(filename, mode) == -1)
|
||||
if (!TH_ISSYM(t) && chmod(filename, mode & 07777) == -1)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
perror("chmod()");
|
||||
|
@ -718,6 +718,7 @@ tar_extract_dir(TAR *t, char *realname)
|
|||
char *filename;
|
||||
char buf[T_BLOCKSIZE];
|
||||
char *pathname = 0;
|
||||
size_t len = 0;
|
||||
|
||||
if (!TH_ISDIR(t))
|
||||
{
|
||||
|
@ -750,14 +751,23 @@ tar_extract_dir(TAR *t, char *realname)
|
|||
return -1;
|
||||
}
|
||||
|
||||
/* Strip trailing '/'...it confuses some Unixes (and BeOS)... */
|
||||
strncpy(buf, filename, sizeof(buf)-1);
|
||||
buf[sizeof(buf)-1] = 0;
|
||||
len = strlen(buf);
|
||||
if ((len > 0) && (buf[len-1] == '/'))
|
||||
{
|
||||
buf[len-1] = '\0';
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
printf(" ==> extracting: %s (mode %04o, directory)\n", filename,
|
||||
mode);
|
||||
#endif
|
||||
#ifdef WIN32
|
||||
if (mkdir(filename) == -1)
|
||||
if (mkdir(buf) == -1)
|
||||
#else
|
||||
if (mkdir(filename, mode) == -1)
|
||||
if (mkdir(buf, mode & 07777) == -1)
|
||||
#endif
|
||||
{
|
||||
#ifdef __BORLANDC__
|
||||
|
@ -772,7 +782,7 @@ tar_extract_dir(TAR *t, char *realname)
|
|||
#endif
|
||||
if (errno == EEXIST)
|
||||
{
|
||||
if (chmod(filename, mode) == -1)
|
||||
if (chmod(filename, mode & 07777) == -1)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
perror("chmod()");
|
||||
|
@ -860,7 +870,7 @@ tar_extract_fifo(TAR *t, char *realname)
|
|||
printf(" ==> extracting: %s (fifo)\n", filename);
|
||||
#endif
|
||||
#ifndef WIN32
|
||||
if (mkfifo(filename, mode) == -1)
|
||||
if (mkfifo(filename, mode & 07777) == -1)
|
||||
#else
|
||||
(void)mode;
|
||||
#endif
|
||||
|
|
|
@ -99,8 +99,13 @@ static int libtar_gzopen(void* call_data, const char *pathname,
|
|||
return -1;
|
||||
}
|
||||
|
||||
#if !defined(_WIN32) || defined(__CYGWIN__)
|
||||
if ((oflags & O_CREAT) && fchmod(fd, mode))
|
||||
#if defined(__BEOS__) && !defined(__ZETA__) // no fchmod on BeOS...do pathname instead.
|
||||
if ((oflags & O_CREAT) && chmod(pathname, mode & 07777))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
#elif !defined(_WIN32) || defined(__CYGWIN__)
|
||||
if ((oflags & O_CREAT) && fchmod(fd, mode & 07777))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -100,6 +100,13 @@ mkdirhier(char *path)
|
|||
if (*dirp == '\0')
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Don't try to build current or parent dir. It doesn't make sense anyhow,
|
||||
* but it also returns EINVAL instead of EEXIST on BeOS!
|
||||
*/
|
||||
if ((strcmp(dirp, ".") == 0) || (strcmp(dirp, "..") == 0))
|
||||
continue;
|
||||
|
||||
if (dst[0] != '\0')
|
||||
strcat(dst, "/");
|
||||
strcat(dst, dirp);
|
||||
|
|
|
@ -10,6 +10,11 @@
|
|||
|
||||
#include "xmlrpc_config.h"
|
||||
|
||||
#if defined(__BEOS__)
|
||||
/* Some helpful system header has char==bool, then bool.h does int==bool. */
|
||||
#define HAVE_BOOL 1
|
||||
#endif
|
||||
|
||||
#include "bool.h"
|
||||
#include "mallocvar.h"
|
||||
#include "linklist.h"
|
||||
|
|
14
bootstrap
14
bootstrap
|
@ -52,6 +52,13 @@ else
|
|||
cmake_system_darwin=false
|
||||
fi
|
||||
|
||||
# Determine whether this is BeOS
|
||||
if echo "${cmake_system}" | grep BeOS >/dev/null 2>&1; then
|
||||
cmake_system_beos=true
|
||||
else
|
||||
cmake_system_beos=false
|
||||
fi
|
||||
|
||||
# Choose the generator to use for bootstrapping.
|
||||
if ${cmake_system_mingw}; then
|
||||
# Bootstrapping from an MSYS prompt.
|
||||
|
@ -549,6 +556,13 @@ else
|
|||
cmake_ld_flags=${LDFLAGS}
|
||||
fi
|
||||
|
||||
# Add BeOS toolkits...
|
||||
if ${cmake_system_beos}; then
|
||||
cmake_ld_flags="${LDFLAGS} -lroot -lbe"
|
||||
else
|
||||
cmake_ld_flags=${LDFLAGS}
|
||||
fi
|
||||
|
||||
# Test C compiler
|
||||
cmake_c_compiler=
|
||||
|
||||
|
|
Loading…
Reference in New Issue