BSD Porting fixes, conditional compilation and use of gettimeofday()

This commit is contained in:
David Pello 2016-05-14 20:30:19 +02:00 committed by wmayer
parent b5dfc41759
commit 5f0073b9e0
8 changed files with 43 additions and 9 deletions

View File

@ -46,6 +46,7 @@ using namespace std;
#if !(defined(__MACH__) && defined(__APPLE__))
#include <sys/sysinfo.h>
#endif
#include <sys/wait.h>
#endif
// number of added entitis to check memory after

View File

@ -47,7 +47,10 @@
# include <Shlobj.h>
#endif
#if defined(FC_OS_BSD)
#include <sys/param.h>
#include <sys/sysctl.h>
#endif
#include "Application.h"
#include "Document.h"
@ -2091,7 +2094,18 @@ std::string Application::FindHomePath(const char* sCall)
// path. In the worst case we simply get q wrong path and FreeCAD is not
// able to load its modules.
char resolved[PATH_MAX];
#if defined(FC_OS_BSD)
int mib[4];
mib[0] = CTL_KERN;
mib[1] = KERN_PROC;
mib[2] = KERN_PROC_PATHNAME;
mib[3] = -1;
size_t cb = sizeof(resolved);
sysctl(mib, 4, resolved, &cb, NULL, 0);
int nchars = strlen(resolved);
#else
int nchars = readlink("/proc/self/exe", resolved, PATH_MAX);
#endif
if (nchars < 0 || nchars >= PATH_MAX)
throw Base::Exception("Cannot determine the absolute path of the executable");
resolved[nchars] = '\0'; // enfore null termination

View File

@ -57,10 +57,13 @@ TimeInfo::~TimeInfo()
void TimeInfo::setCurrent(void)
{
#if defined (_MSC_VER)
#if defined (FC_OS_WIN32)
_ftime( &timebuffer );
#elif defined(__GNUC__)
ftime( &timebuffer );
#else
struct timeval t;
gettimeofday(&t, NULL);
timebuffer.time = t.tv_sec;
timebuffer.millitm = t.tv_usec / 1000;
#endif
}

View File

@ -28,13 +28,25 @@
#include <stdio.h>
#if defined(FC_OS_WIN32)
#include <sys/timeb.h>
#else
#include <sys/time.h>
#endif
#include <time.h>
#ifdef __GNUC__
# include <stdint.h>
#endif
#if !defined(FC_OS_WIN32)
struct timeb
{
int64_t time;
unsigned short millitm;
};
#endif
namespace Base
{
/// BaseClass class and root of the type system

View File

@ -27,7 +27,7 @@
# undef _PreComp_
#endif
#ifdef FC_OS_LINUX
#ifdef FC_OS_LINUX || defined(FC_OS_BSD)
# include <unistd.h>
#endif
@ -71,7 +71,7 @@ BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserv
return true;
}
#elif defined(FC_OS_LINUX)
#elif defined(FC_OS_LINUX) || defined(FC_OS_BSD)
# ifndef GNU_SOURCE
# define GNU_SOURCE
# endif
@ -111,7 +111,7 @@ extern "C"
argv[0] = (char*)malloc(MAX_PATH);
strncpy(argv[0],szFileName,MAX_PATH);
argv[0][MAX_PATH-1] = '\0'; // ensure null termination
#elif defined(FC_OS_LINUX)
#elif defined(FC_OS_LINUX) || defined(FC_OS_BSD)
putenv("LANG=C");
putenv("LC_ALL=C");
// get whole path of the library

View File

@ -20,7 +20,9 @@
#endif
#include <time.h>
#if defined(FC_OS_WIN32)
#include <sys/timeb.h>
#endif
#include <Base/Exception.h>
#include <Base/Interpreter.h>

View File

@ -22,7 +22,7 @@ using namespace Wm4;
#include <sys/stat.h>
// support for GetTime
#ifdef __APPLE__
#if !defined(WIN32)
#include <sys/time.h>
static timeval gs_kInitial;
static bool gs_bInitializedTime = false;
@ -103,7 +103,7 @@ void System::EndianCopy (int iSize, int iQuantity, const void* pvSrc,
//----------------------------------------------------------------------------
double System::GetTime ()
{
#ifdef __APPLE__
#if !defined(WIN32)
if (!gs_bInitializedTime)
{
gs_bInitializedTime = true;

View File

@ -21,7 +21,9 @@
#endif
#include <time.h>
#if defined(FC_OS_WIN32)
#include <sys/timeb.h>
#endif
#include <Base/Exception.h>
#include <Base/Interpreter.h>