From 7807b5350e341ca11a35b8550e35972b7749d9ed Mon Sep 17 00:00:00 2001
From: Christoph Lipka <c-lipka@users.noreply.github.com>
Date: Mon, 16 Dec 2013 12:23:37 +0100
Subject: [PATCH] added header files to hold Unix flavor-specific config
 settings; also thrown out the unused fseek64 macro from both Unix and Windows
 syspovconfig.h; should fix GitHub issue #9.

corresponds to Perforce changes 6129, 6131, 6133.
---
 vfe/unix/syspovconfig.h       | 65 +++++++++++++++++++++++++++++---------
 vfe/unix/syspovconfig_bsd.h   | 72 +++++++++++++++++++++++++++++++++++++++++++
 vfe/unix/syspovconfig_linux.h | 58 ++++++++++++++++++++++++++++++++++
 vfe/unix/syspovconfig_osx.h   | 61 ++++++++++++++++++++++++++++++++++++
 vfe/unix/syspovconfig_posix.h | 71 ++++++++++++++++++++++++++++++++++++++++++
 vfe/win/syspovconfig.h        | 13 ++++----
 6 files changed, 319 insertions(+), 21 deletions(-)
 create mode 100644 vfe/unix/syspovconfig_bsd.h
 create mode 100644 vfe/unix/syspovconfig_linux.h
 create mode 100644 vfe/unix/syspovconfig_osx.h
 create mode 100644 vfe/unix/syspovconfig_posix.h

diff --git a/vfe/unix/syspovconfig.h b/vfe/unix/syspovconfig.h
index 65d11ba..b805c6a 100644
--- a/vfe/unix/syspovconfig.h
+++ b/vfe/unix/syspovconfig.h
@@ -24,19 +24,17 @@
  * DKBTrace was originally written by David K. Buck.
  * DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
  * ---------------------------------------------------------------------------
- * $File: //depot/public/povray/3.x/vfe/unix/syspovconfig.h $
- * $Revision: #1 $
- * $Change: 6069 $
- * $DateTime: 2013/11/06 11:59:40 $
- * $Author: chrisc $
+ * $File: //depot/povray/smp/vfe/unix/syspovconfig.h $
+ * $Revision: #15 $
+ * $Change: 6129 $
+ * $DateTime: 2013/11/25 11:09:30 $
+ * $Author: clipka $
  *******************************************************************************/
 
 #ifndef __SYSPOVCONFIG_H__
 #define __SYSPOVCONFIG_H__
 
-#define _FILE_OFFSET_BITS	64
-
-#define fseek64(stream,offset,whence) fseeko(stream,offset,whence)
+#define _FILE_OFFSET_BITS 64 // Required for some Unix flavors to get a 64-bit off_t type on 32-bit systems.
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -91,8 +89,6 @@ using boost::shared_ptr;
 const int NULL=0;
 #endif
 
-#define POV_LONG long long
-
 #define DELETE_FILE(name)  unlink(name)
 
 #if defined (PATH_MAX)
@@ -113,9 +109,50 @@ const int NULL=0;
 #define METADATA_PLATFORM_STRING BUILD_ARCH
 #define METADATA_COMPILER_STRING COMPILER_VERSION
 
-#define DECLARE_THREAD_LOCAL_PTR(ptrType, ptrName)                __thread ptrType *ptrName
-#define IMPLEMENT_THREAD_LOCAL_PTR(ptrType, ptrName, ignore)      __thread ptrType *ptrName
-#define GET_THREAD_LOCAL_PTR(ptrName)                             (ptrName)
-#define SET_THREAD_LOCAL_PTR(ptrName, ptrValue)                   (ptrName = ptrValue)
+// Pull in additional settings depending on Unix flavor
+
+#if defined(_AIX)
+	// IBM AIX detected.
+	// Not officially supported yet; comment-out the following line to try with default POSIX settings.
+	#error IBM AIX detected, but not explicitly supported yet; proceed at your own risk.
+	#include "syspovconfig_posix.h"
+#elif defined(__hpux)
+	// Hewlett-Packard HP-UX detected.
+	// Not officially supported yet; comment-out the following line to try with default POSIX settings.
+	#error Hewlett-Packard HP-UX detected, but not explicitly supported yet; proceed at your own risk.
+	#include "syspovconfig_posix.h"
+#elif defined(__linux__)
+	// GNU/Linux detected.
+	#include "syspovconfig_linux.h"
+#elif defined(__APPLE__) && defined(__MACH__)
+	// Apple Mac OS X detected.
+	#include "syspovconfig_osx.h"
+#elif defined(__sun) && defined(__SVR4)
+	// Sun/Oracle Solaris detected.
+	// Not officially supported yet; comment-out the following line to try with default POSIX settings.
+	#error Sun/Oracle Solaris detected, but not explicitly supported yet; proceed at your own risk.
+	#include "syspovconfig_posix.h"
+#elif defined(__CYGWIN__)
+	// Cygwin detected.
+	// Not officially supported yet; comment-out the following line to try with default POSIX settings.
+	#error Cygwin detected, but not explicitly supported yet; proceed at your own risk.
+	#include "syspovconfig_posix.h"
+#elif defined(__unix__)
+	// Some Unix other than the above detected.
+	#include <sys/param.h>
+	#if defined(BSD)
+		// BSD-style Unix detected.
+		#include "syspovconfig_bsd.h"
+	#else
+		// Not officially supported yet; comment-out the following line to try with default POSIX settings.
+		#error Unix detected, but flavor not identified; proceed at your own risk.
+		#include "syspovconfig_posix.h"
+	#endif
+#else
+	// Doesn't look like a Unix at all.
+	// Comment-out the following line to try with default POSIX settings.
+	#error No Unix detected; proceed at your own risk.
+	#include "syspovconfig_posix.h"
+#endif
 
 #endif
diff --git a/vfe/unix/syspovconfig_bsd.h b/vfe/unix/syspovconfig_bsd.h
new file mode 100644
index 0000000..749ca8c
--- /dev/null
+++ b/vfe/unix/syspovconfig_bsd.h
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * syspovconfig_bsd.h
+ *
+ * This file contains Unix flavor-specific defines for compiling the VFE
+ * on BSD-style Unix systems.
+ *
+ * ---------------------------------------------------------------------------
+ * Persistence of Vision Ray Tracer ('POV-Ray') version 3.7.
+ * Copyright 1991-2013 Persistence of Vision Raytracer Pty. Ltd.
+ *
+ * POV-Ray is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * POV-Ray is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ * ---------------------------------------------------------------------------
+ * POV-Ray is based on the popular DKB raytracer version 2.12.
+ * DKBTrace was originally written by David K. Buck.
+ * DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
+ * ---------------------------------------------------------------------------
+ * $File: //depot/povray/smp/vfe/unix/syspovconfig_bsd.h $
+ * $Revision: #2 $
+ * $Change: 6133 $
+ * $DateTime: 2013/11/25 15:28:53 $
+ * $Author: clipka $
+ *******************************************************************************/
+
+#ifndef __SYSPOVCONFIG_BSD_H__
+#define __SYSPOVCONFIG_BSD_H__
+
+#include <unistd.h>
+
+#if defined(_POSIX_V6_LPBIG_OFFBIG) || defined(_POSIX_V6_LP64_OFF64) || defined(_POSIX_V6_ILP32_OFFBIG)
+	// off_t is at least 64 bits
+	#define lseek64(handle,offset,whence) lseek(handle,offset,whence)
+#elif defined(_POSIX_V6_ILP32_OFF32)
+	// off_t is 32 bits
+	// Comment-out the following line to proceed anyway.
+	#error Image size will be limited to approx. 100 Megapixels. Proceed at your own risk.
+	#define lseek64(handle,offset,whence) lseek(handle,offset,whence)
+#else
+	// Unable to detect off_t size at compile-time; comment-out the following line to proceed anyway.
+	#error Image size may be limited to approx. 100 Megapixels. Proceed at your own risk.
+	#define lseek64(handle,offset,whence) lseek(handle,offset,whence)
+#endif
+
+// TODO - the POV_LONG stuff is just copied from the Posix settings; someone needs to verify universal BSD compatibility.
+#if defined(_POSIX_V6_LPBIG_OFFBIG) || defined(_POSIX_V6_LP64_OFF64)
+	// long is at least 64 bits.
+	#define POV_LONG long
+#elif defined(_POSIX_V6_ILP32_OFFBIG) || defined(_POSIX_V6_ILP32_OFF32)
+	// long is 32 bits.
+	#define POV_LONG long long
+#else
+	// Unable to detect long size at compile-time, assuming less than 64 bits.
+	#define POV_LONG long long
+#endif
+
+// TODO - the TLS stuff is just copied from the Linux settings; someone needs to verify universal BSD compatibility.
+#define DECLARE_THREAD_LOCAL_PTR(ptrType, ptrName)                __thread ptrType *ptrName
+#define IMPLEMENT_THREAD_LOCAL_PTR(ptrType, ptrName, ignore)      __thread ptrType *ptrName
+#define GET_THREAD_LOCAL_PTR(ptrName)                             (ptrName)
+#define SET_THREAD_LOCAL_PTR(ptrName, ptrValue)                   (ptrName = ptrValue)
+
+#endif
diff --git a/vfe/unix/syspovconfig_linux.h b/vfe/unix/syspovconfig_linux.h
new file mode 100644
index 0000000..35ed8be
--- /dev/null
+++ b/vfe/unix/syspovconfig_linux.h
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * syspovconfig_linux.h
+ *
+ * This file contains Unix flavor-specific defines for compiling the VFE
+ * on GNU/Linux systems.
+ *
+ * ---------------------------------------------------------------------------
+ * Persistence of Vision Ray Tracer ('POV-Ray') version 3.7.
+ * Copyright 1991-2013 Persistence of Vision Raytracer Pty. Ltd.
+ *
+ * POV-Ray is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * POV-Ray is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ * ---------------------------------------------------------------------------
+ * POV-Ray is based on the popular DKB raytracer version 2.12.
+ * DKBTrace was originally written by David K. Buck.
+ * DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
+ * ---------------------------------------------------------------------------
+ * $File: //depot/povray/smp/vfe/unix/syspovconfig_linux.h $
+ * $Revision: #1 $
+ * $Change: 6129 $
+ * $DateTime: 2013/11/25 11:09:30 $
+ * $Author: clipka $
+ *******************************************************************************/
+
+#ifndef __SYSPOVCONFIG_LINUX_H__
+#define __SYSPOVCONFIG_LINUX_H__
+
+#include <unistd.h>
+
+// lseek64 is natively supported on GNU/Linux systems.
+
+#if defined(_POSIX_V6_LPBIG_OFFBIG) || defined(_POSIX_V6_LP64_OFF64)
+	// long is at least 64 bits.
+	#define POV_LONG long
+#elif defined(_POSIX_V6_ILP32_OFFBIG) || defined(_POSIX_V6_ILP32_OFF32)
+	// long is 32 bits.
+	#define POV_LONG long long
+#else
+	// Unable to detect long size at compile-time, assuming less than 64 bits.
+	#define POV_LONG long long
+#endif
+
+#define DECLARE_THREAD_LOCAL_PTR(ptrType, ptrName)                __thread ptrType *ptrName
+#define IMPLEMENT_THREAD_LOCAL_PTR(ptrType, ptrName, ignore)      __thread ptrType *ptrName
+#define GET_THREAD_LOCAL_PTR(ptrName)                             (ptrName)
+#define SET_THREAD_LOCAL_PTR(ptrName, ptrValue)                   (ptrName = ptrValue)
+
+#endif
diff --git a/vfe/unix/syspovconfig_osx.h b/vfe/unix/syspovconfig_osx.h
new file mode 100644
index 0000000..49a7e7a
--- /dev/null
+++ b/vfe/unix/syspovconfig_osx.h
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * syspovconfig_osx.h
+ *
+ * This file contains Unix flavor-specific defines for compiling the VFE
+ * on MAC OS X systems.
+ *
+ * ---------------------------------------------------------------------------
+ * Persistence of Vision Ray Tracer ('POV-Ray') version 3.7.
+ * Copyright 1991-2013 Persistence of Vision Raytracer Pty. Ltd.
+ *
+ * POV-Ray is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * POV-Ray is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ * ---------------------------------------------------------------------------
+ * POV-Ray is based on the popular DKB raytracer version 2.12.
+ * DKBTrace was originally written by David K. Buck.
+ * DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
+ * ---------------------------------------------------------------------------
+ * $File: //depot/povray/smp/vfe/unix/syspovconfig_osx.h $
+ * $Revision: #2 $
+ * $Change: 6133 $
+ * $DateTime: 2013/11/25 15:28:53 $
+ * $Author: clipka $
+ *******************************************************************************/
+
+#ifndef __SYSPOVCONFIG_OSX_H__
+#define __SYSPOVCONFIG_OSX_H__
+
+#include <unistd.h>
+
+// TODO - someone needs to verify that off_t is indeed always 64 bit on Mac OS X
+#define lseek64(handle,offset,whence) lseek(handle,offset,whence)
+
+// TODO - the POV_LONG stuff is just copied from the Posix settings; someone needs to test this on OS X.
+#if defined(_POSIX_V6_LPBIG_OFFBIG) || defined(_POSIX_V6_LP64_OFF64)
+	// long is at least 64 bits.
+	#define POV_LONG long
+#elif defined(_POSIX_V6_ILP32_OFFBIG) || defined(_POSIX_V6_ILP32_OFF32)
+	// long is 32 bits.
+	#define POV_LONG long long
+#else
+	// Unable to detect long size at compile-time, assuming less than 64 bits.
+	#define POV_LONG long long
+#endif
+
+// TODO - the TLS stuff is just copied from the Linux settings; someone needs to verify OS X compatibility.
+#define DECLARE_THREAD_LOCAL_PTR(ptrType, ptrName)                __thread ptrType *ptrName
+#define IMPLEMENT_THREAD_LOCAL_PTR(ptrType, ptrName, ignore)      __thread ptrType *ptrName
+#define GET_THREAD_LOCAL_PTR(ptrName)                             (ptrName)
+#define SET_THREAD_LOCAL_PTR(ptrName, ptrValue)                   (ptrName = ptrValue)
+
+#endif
diff --git a/vfe/unix/syspovconfig_posix.h b/vfe/unix/syspovconfig_posix.h
new file mode 100644
index 0000000..5b4b96a
--- /dev/null
+++ b/vfe/unix/syspovconfig_posix.h
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * syspovconfig_posix.h
+ *
+ * This file contains Unix flavor-specific defines for compiling the VFE
+ * on generic POSIX-conformant Unix systems.
+ *
+ * ---------------------------------------------------------------------------
+ * Persistence of Vision Ray Tracer ('POV-Ray') version 3.7.
+ * Copyright 1991-2013 Persistence of Vision Raytracer Pty. Ltd.
+ *
+ * POV-Ray is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * POV-Ray is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ * ---------------------------------------------------------------------------
+ * POV-Ray is based on the popular DKB raytracer version 2.12.
+ * DKBTrace was originally written by David K. Buck.
+ * DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
+ * ---------------------------------------------------------------------------
+ * $File: //depot/povray/smp/vfe/unix/syspovconfig_posix.h $
+ * $Revision: #1 $
+ * $Change: 6129 $
+ * $DateTime: 2013/11/25 11:09:30 $
+ * $Author: clipka $
+ *******************************************************************************/
+
+#ifndef __SYSPOVCONFIG_POSIX_H__
+#define __SYSPOVCONFIG_POSIX_H__
+
+#include <unistd.h>
+
+#if defined(_POSIX_V6_LPBIG_OFFBIG) || defined(_POSIX_V6_LP64_OFF64) || defined(_POSIX_V6_ILP32_OFFBIG)
+	// off_t is at least 64 bits
+	#define lseek64(handle,offset,whence) lseek(handle,offset,whence)
+#elif defined(_POSIX_V6_ILP32_OFF32)
+	// off_t is 32 bits
+	// Comment-out the following line to proceed anyway.
+	#error Image size will be limited to approx. 100 Megapixels. Proceed at your own risk.
+	#define lseek64(handle,offset,whence) lseek(handle,offset,whence)
+#else
+	// Unable to detect off_t size at compile-time; comment-out the following line to proceed anyway.
+	#error Image size may be limited to approx. 100 Megapixels. Proceed at your own risk.
+	#define lseek64(handle,offset,whence) lseek(handle,offset,whence)
+#endif
+
+#if defined(_POSIX_V6_LPBIG_OFFBIG) || defined(_POSIX_V6_LP64_OFF64)
+	// long is at least 64 bits.
+	#define POV_LONG long
+#elif defined(_POSIX_V6_ILP32_OFFBIG) || defined(_POSIX_V6_ILP32_OFF32)
+	// long is 32 bits.
+	#define POV_LONG long long
+#else
+	// Unable to detect long size at compile-time, assuming less than 64 bits.
+	#define POV_LONG long long
+#endif
+
+// TODO - the TLS stuff is just copied from the Linux settings; someone needs to check universal POSIX compatibility.
+#define DECLARE_THREAD_LOCAL_PTR(ptrType, ptrName)                __thread ptrType *ptrName
+#define IMPLEMENT_THREAD_LOCAL_PTR(ptrType, ptrName, ignore)      __thread ptrType *ptrName
+#define GET_THREAD_LOCAL_PTR(ptrName)                             (ptrName)
+#define SET_THREAD_LOCAL_PTR(ptrName, ptrValue)                   (ptrName = ptrValue)
+
+#endif
diff --git a/vfe/win/syspovconfig.h b/vfe/win/syspovconfig.h
index 59d118d..44c69a5 100644
--- a/vfe/win/syspovconfig.h
+++ b/vfe/win/syspovconfig.h
@@ -26,11 +26,11 @@
  * DKBTrace was originally written by David K. Buck.
  * DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
  * ---------------------------------------------------------------------------
- * $File: //depot/public/povray/3.x/vfe/win/syspovconfig.h $
- * $Revision: #1 $
- * $Change: 6069 $
- * $DateTime: 2013/11/06 11:59:40 $
- * $Author: chrisc $
+ * $File: //depot/povray/smp/vfe/win/syspovconfig.h $
+ * $Revision: #40 $
+ * $Change: 6131 $
+ * $DateTime: 2013/11/25 11:38:15 $
+ * $Author: clipka $
  *******************************************************************************/
 
 #ifndef __SYSPOVCONFIG_H__
@@ -194,8 +194,7 @@ namespace povwin
 #pragma warning(pop)
 #endif
 
-#define fseek64(stream,offset,whence)       _fseeki64(stream,offset,whence)
-#define lseek64(handle,offset,whence)       _lseeki64(handle,offset,whence)
+#define lseek64(handle,offset,whence) _lseeki64(handle,offset,whence)
 
 namespace pov_base
 {
-- 
1.8.5.2

