<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Thanks Even,<div class=""><br class=""></div><div class="">After applying the patch and then running the ‘cmake' and 'cmake —build' again, it stops at the same point but produces much fewer errors (and I have found a dodgy work-around those - see below). Only two errors this time, both for the same file:</div><div class=""><br class=""></div><div class="">==========</div><div class=""><div class="">[ 6%] Building CXX object port/CMakeFiles/cpl.dir/cpl_compressor.cpp.o</div><div class="">[ 7%] Building CXX object port/CMakeFiles/cpl.dir/cpl_float.cpp.o</div><div class="">[ 7%] Building CXX object port/CMakeFiles/cpl.dir/cpl_vsil_unix_stdio_64.cpp.o</div><div class="">/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/port/cpl_vsil_unix_stdio_64.cpp:793:22: error: variable has incomplete type 'struct statvfs64'</div><div class=""> struct statvfs64 buf;</div><div class=""> ^</div><div class="">/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/port/cpl_vsil_unix_stdio_64.cpp:793:12: note: forward declaration of 'statvfs64'</div><div class=""> struct statvfs64 buf;</div><div class=""> ^</div><div class="">1 error generated.</div><div class="">make[2]: *** [port/CMakeFiles/cpl.dir/cpl_vsil_unix_stdio_64.cpp.o] Error 1</div><div class="">make[1]: *** [port/CMakeFiles/cpl.dir/all] Error 2</div><div class="">make: *** [all] Error 2</div></div><div class="">==========</div><div class=""><br class=""></div><div class="">So the patch has fixed the vast majority of the errors, but this one still persists.</div><div class=""><br class=""></div><div class="">DODGY WORK AROUND:</div><div class=""><br class=""></div><div class="">I then modified the file '<font color="#000000" class="">port/cpl_vsil_unix_stdio_64.cpp’ and deleted the ‘if' section for <span style="caret-color: rgb(0, 0, 0);" class="">‘HAVE_STATVFS64'</span>, forcing it to run the stavfs ‘else’ part instead, and this time the build continued on (as far as the “98%” mark before producing another error which I might post seperately if I can’t resolve it). Obviously this is not the <span style="caret-color: rgb(0, 0, 0);" class="">‘</span>correct’ way to fix the issue, but I hope that it demonstrates (part of) where the issue lies and hopefully might help to identify the correct solution?</font></div><div class=""><font color="#000000" class=""><br class=""></font></div><div class=""><font color="#000000" class="">So for some reason, when the '<span style="caret-color: rgb(0, 0, 0);" class="">port/cpl_vsil_unix_stdio_64.cpp’ file is used, it appears that </span></font><span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);" class="">HAVE_STATVFS64 is defined, despite the patch having been applied.</span></div><div class=""><br class=""></div><div class="">Following the patch, my cmake/helpers/configure.cmake file shows that the patch has been applied. The relevent portion of that file now looks like this:</div><div class=""><br class=""></div><div class="">==========</div><div class=""><div class=""> check_function_exists(ftruncate64 HAVE_FTRUNCATE64)</div><div class=""> if (HAVE_FTRUNCATE64)</div><div class=""> set(VSI_FTRUNCATE64 "ftruncate64")</div><div class=""> else ()</div><div class=""> set(VSI_FTRUNCATE64 "ftruncate")</div><div class=""> endif ()</div><div class=""><br class=""></div><div class=""> if (${CMAKE_SYSTEM_NAME} MATCHES "iOS")</div><div class=""> set(VSI_FOPEN64 "fopen")</div><div class=""> set(VSI_FTRUNCATE64 "ftruncate")</div><div class=""> set(VSI_FTELL64 "ftell")</div><div class=""> set(VSI_FSEEK64 "fseek")</div><div class=""> set(VSI_STAT64 stat)</div><div class=""> set(VSI_STAT64_T stat)</div><div class=""> unset(HAVE_FOPEN64)</div><div class=""> unset(HAVE_FTRUNCATE64)</div><div class=""> unset(HAVE_FTELL64)</div><div class=""> unset(HAVE_FSEEK64)</div><div class=""> unset(HAVE_STATVFS64)</div><div class=""> endif()</div><div class=""><br class=""></div><div class=""> set(UNIX_STDIO_64 TRUE)</div><div class=""><br class=""></div><div class=""> set(INCLUDE_XLOCALE_H)</div><div class=""> if(HAVE_XLOCALE_H)</div><div class=""> set(INCLUDE_XLOCALE_H "#include <xlocale.h>")</div><div class=""> endif()</div></div><div class="">==========</div><div class=""><br class=""></div><div class="">Cheers,</div><div class="">Nik.</div><div class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On 5 Jul 2022, at 9:23 pm, Even Rouault <<a href="mailto:even.rouault@spatialys.com" class="">even.rouault@spatialys.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class="">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" class="">
<div class=""><p class="">(re-adding the list)</p><p class="">ok, it's a bit weird CMake detects symbols that are not available
at build time, but there might be some subtelties in iOS SDK<br class="">
</p><p class="">Can you try the following patch which basically forces to remap
all "foo64" functions to "foo". I assume that iOS Unix I/O is
64-bit enabled by default...<br class="">
</p><p class="">diff --git a/cmake/helpers/configure.cmake
b/cmake/helpers/configure.cmake<br class="">
index c38604e23e..e5be264bf9 100644<br class="">
--- a/cmake/helpers/configure.cmake<br class="">
+++ b/cmake/helpers/configure.cmake<br class="">
@@ -241,6 +241,20 @@ else ()<br class="">
set(VSI_FTRUNCATE64 "ftruncate")<br class="">
endif ()<br class="">
<br class="">
+ if (${CMAKE_SYSTEM_NAME} MATCHES "iOS")<br class="">
+ set(VSI_FOPEN64 "fopen")<br class="">
+ set(VSI_FTRUNCATE64 "ftruncate")<br class="">
+ set(VSI_FTELL64 "ftell")<br class="">
+ set(VSI_FSEEK64 "fseek")<br class="">
+ set(VSI_STAT64 stat)<br class="">
+ set(VSI_STAT64_T stat)<br class="">
+ unset(HAVE_FOPEN64)<br class="">
+ unset(HAVE_FTRUNCATE64)<br class="">
+ unset(HAVE_FTELL64)<br class="">
+ unset(HAVE_FSEEK64)<br class="">
+ unset(HAVE_STATVFS64)<br class="">
+ endif()<br class="">
+<br class="">
set(UNIX_STDIO_64 TRUE)<br class="">
<br class="">
set(INCLUDE_XLOCALE_H)<br class="">
<br class="">
</p><p class=""><br class="">
</p>
<div class="moz-cite-prefix">Le 05/07/2022 à 13:07, Nik Sands a
écrit :<br class="">
</div>
<blockquote type="cite" cite="mid:33BE1262-EBE6-49A6-BF9D-232CF72294DC@nixanz.com" class="">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" class="">
<div class="">Hi Even,</div>
<div class=""><br class="">
</div>
<div class="">Thanks again for your advice. The debug message
did produce what I believe was the expected output as follows:</div>
<div class=""><br class="">
</div>
<div class="">
<div class="">CMake Warning at cmake/helpers/configure.cmake:175
(message):</div>
<div class=""> CMAKE_SYSTEM_NAME=iOS</div>
</div>
<div class=""><br class=""></div></blockquote></div></div></blockquote><blockquote type="cite" class=""><div class=""><div class=""><blockquote type="cite" cite="mid:33BE1262-EBE6-49A6-BF9D-232CF72294DC@nixanz.com" class=""><div class="">
</div>
<div class="">Making the suggested change to the configure.cmake
file (line 175 in the version 3.5 distribution I have) and
re-building certainly progresses further than my previous build
attempt. I now get the errors in the ouput listed below. Note
that I found one other location in the same configure.cmake file
where it was checking for “Darwin” and I made the same change to
that line, but it made no difference to these errors below.</div>
<div class=""><br class="">
</div>
<div class="">Cheers,</div>
<div class="">Nik.</div>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
<div class="">==========</div>
<div class="">…</div>
<div class="">…</div>
<div class="">
<div class="">[ 7%] Building CXX object
port/CMakeFiles/cpl.dir/cpl_vsil_unix_stdio_64.cpp.o</div>
<div class="">/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/port/cpl_vsil_unix_stdio_64.cpp:139:23:
error: use of undeclared identifier 'ftell64'</div>
<div class="">static_assert( sizeof(VSI_FTELL64(nullptr)) ==
sizeof(vsi_l_offset),</div>
<div class=""> ^</div>
<div class="">/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/build/port/cpl_config.h:152:21:
note: expanded from macro 'VSI_FTELL64'</div>
<div class="">#define VSI_FTELL64 ftell64</div>
<div class=""> ^</div>
<div class="">/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/port/cpl_vsil_unix_stdio_64.cpp:315:25:
error: use of undeclared identifier 'fseek64'</div>
<div class=""> const int nResult = VSI_FSEEK64( fp,
nOffsetIn, nWhence );</div>
<div class=""> ^</div>
<div class="">/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/build/port/cpl_config.h:149:21:
note: expanded from macro 'VSI_FSEEK64'</div>
<div class="">#define VSI_FSEEK64 fseek64</div>
<div class=""> ^</div>
<div class="">/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/port/cpl_vsil_unix_stdio_64.cpp:355:25:
error: use of undeclared identifier 'ftell64'</div>
<div class=""> m_nOffset = VSI_FTELL64( fp );</div>
<div class=""> ^</div>
<div class="">/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/build/port/cpl_config.h:152:21:
note: expanded from macro 'VSI_FTELL64'</div>
<div class="">#define VSI_FTELL64 ftell64</div>
<div class=""> ^</div>
<div class="">/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/port/cpl_vsil_unix_stdio_64.cpp:422:13:
error: use of undeclared identifier 'fseek64'</div>
<div class=""> if( VSI_FSEEK64( fp, m_nOffset, SEEK_SET )
!= 0 )</div>
<div class=""> ^</div>
<div class="">/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/build/port/cpl_config.h:149:21:
note: expanded from macro 'VSI_FSEEK64'</div>
<div class="">#define VSI_FSEEK64 fseek64</div>
<div class=""> ^</div>
<div class="">/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/port/cpl_vsil_unix_stdio_64.cpp:456:35:
error: use of undeclared identifier 'ftell64'</div>
<div class=""> vsi_l_offset nNewOffset = VSI_FTELL64( fp
);</div>
<div class=""> ^</div>
<div class="">/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/build/port/cpl_config.h:152:21:
note: expanded from macro 'VSI_FTELL64'</div>
<div class="">#define VSI_FTELL64 ftell64</div>
<div class=""> ^</div>
<div class="">/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/port/cpl_vsil_unix_stdio_64.cpp:484:13:
error: use of undeclared identifier 'fseek64'</div>
<div class=""> if( VSI_FSEEK64( fp, m_nOffset, SEEK_SET )
!= 0 )</div>
<div class=""> ^</div>
<div class="">/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/build/port/cpl_config.h:149:21:
note: expanded from macro 'VSI_FSEEK64'</div>
<div class="">#define VSI_FSEEK64 fseek64</div>
<div class=""> ^</div>
<div class="">/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/port/cpl_vsil_unix_stdio_64.cpp:532:12:
error: use of undeclared identifier 'ftruncate64'; did you
mean 'ftruncate'?</div>
<div class=""> return VSI_FTRUNCATE64( fileno(fp), nNewSize
);</div>
<div class=""> ^~~~~~~~~~~~~~~</div>
<div class=""> ftruncate</div>
<div class="">/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/build/port/cpl_config.h:146:25:
note: expanded from macro 'VSI_FTRUNCATE64'</div>
<div class="">#define VSI_FTRUNCATE64 ftruncate64</div>
<div class=""> ^</div>
<div class="">/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.5.sdk/usr/include/unistd.h:611:6:
note: 'ftruncate' declared here</div>
<div class="">int ftruncate(int, off_t);</div>
<div class=""> ^</div>
<div class="">/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/port/cpl_vsil_unix_stdio_64.cpp:645:16:
error: use of undeclared identifier 'fopen64'; did you mean
'fopen'?</div>
<div class=""> FILE *fp = VSI_FOPEN64( pszFilename, pszAccess
);</div>
<div class=""> ^~~~~~~~~~~</div>
<div class=""> fopen</div>
<div class="">/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/build/port/cpl_config.h:143:21:
note: expanded from macro 'VSI_FOPEN64'</div>
<div class="">#define VSI_FOPEN64 fopen64</div>
<div class=""> ^</div>
<div class="">/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.5.sdk/usr/include/stdio.h:153:7:
note: 'fopen' declared here</div>
<div class="">FILE *fopen(const char * __restrict __filename,
const char * __restrict __mode)
__DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_2_0,
__DARWIN_ALIAS(fopen));</div>
<div class=""> ^</div>
<div class="">/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/port/cpl_vsil_unix_stdio_64.cpp:793:22:
error: variable has incomplete type 'struct statvfs64'</div>
<div class=""> struct statvfs64 buf;</div>
<div class=""> ^</div>
<div class="">/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/port/cpl_vsil_unix_stdio_64.cpp:793:12:
note: forward declaration of 'statvfs64'</div>
<div class=""> struct statvfs64 buf;</div>
<div class=""> ^</div>
<div class="">9 errors generated.</div>
<div class="">make[2]: ***
[port/CMakeFiles/cpl.dir/cpl_vsil_unix_stdio_64.cpp.o] Error 1</div>
<div class="">make[1]: *** [port/CMakeFiles/cpl.dir/all] Error 2</div>
<div class="">make: *** [all] Error 2</div>
</div>
<div class="">==========</div>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
<div class=""><br class="">
<blockquote type="cite" class="">
<div class="">On 5 Jul 2022, at 5:00 pm, Even Rouault <<a href="mailto:even.rouault@spatialys.com" class="moz-txt-link-freetext" moz-do-not-send="true">even.rouault@spatialys.com</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div class="">Nik,<br class="">
<br class="">
in cmake/helpers/configure.cmake, there's a special case
of Darwin at line 183 in master<br class="">
<br class="">
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")<br class="">
<br class="">
Can you test if replacing it with<br class="">
<br class="">
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin" OR
${CMAKE_SYSTEM_NAME} MATCHES "iOS")<br class="">
<br class="">
works better? (I assume CMAKE_SYSTEM_NAME = iOS from <a href="https://cmake.org/cmake/help/latest/variable/IOS.html" class="moz-txt-link-freetext" moz-do-not-send="true">https://cmake.org/cmake/help/latest/variable/IOS.html</a>
, but you might want to add a 'message(WARNING
"CMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}")' debug statement
to check<br class="">
<br class="">
Even<br class="">
<br class="">
Le 05/07/2022 à 06:14, Nik Sands a écrit :<br class="">
<blockquote type="cite" class="">Hi GDAL devs,<br class="">
<br class="">
As per my earlier emails, I’m attempting to build GDAL
3.5 for iOS. The complete process (so far) for this is
below, at the end of this email.<br class="">
<br class="">
A quick summary of some relevant points is:<br class="">
• Using a 3rd party cmake toolchain file which caters
for iOS, macOS (as well as other Apple OSs) and can even
build a fat binary that works for both iOS device and
simulator (arm64/x86_64).<br class="">
• Using a 3rd party mirror of SQLite which includes
cmake configuration, so that I can incorporate the same
methodology to build iOS SQLite that I’m using for other
dependencies (the standard Apple bundled SQLite throws
an error when building GDAL)<br class="">
<br class="">
The 'cmake <options> ..’ succeeds to configure the
GDAL build. However, when I run ‘cmake —build .’ I get
the following output:<br class="">
<br class="">
==========<br class="">
[ 0%] Built target generate_gdal_version_h<br class="">
[ 0%] Building CXX object
apps/CMakeFiles/appslib.dir/gdalinfo_lib.cpp.o<br class="">
[ 0%] Building CXX object
apps/CMakeFiles/appslib.dir/gdalbuildvrt_lib.cpp.o<br class="">
[ 1%] Building CXX object
apps/CMakeFiles/appslib.dir/gdal_grid_lib.cpp.o<br class="">
/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/apps/gdal_grid_lib.cpp:1213:26:
error: variable has incomplete type 'VSIStatBufL' (aka
'stat64')<br class="">
VSIStatBufL sStat;<br class="">
^<br class="">
/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/port/cpl_vsi.h:195:16:
note: forward declaration of 'stat64'<br class="">
typedef struct VSI_STAT64_T VSIStatBufL;<br class="">
^<br class="">
/Users/nsands/Documents/Development/3rdParty/GDAL3/gdal-3.5.0/build/port/cpl_config.h:41:22:
note: expanded from macro 'VSI_STAT64_T'<br class="">
#define VSI_STAT64_T stat64<br class="">
^<br class="">
1 error generated.<br class="">
make[2]: ***
[apps/CMakeFiles/appslib.dir/gdal_grid_lib.cpp.o] Error
1<br class="">
make[1]: *** [apps/CMakeFiles/appslib.dir/all] Error 2<br class="">
make: *** [all] Error 2<br class="">
==========<br class="">
<br class="">
I found a GDAL bug that appears to be related, but it
was closed as ‘fixed’ about 8 years ago:<br class="">
<a href="https://trac.osgeo.org/gdal/ticket/1005" class="moz-txt-link-freetext" moz-do-not-send="true">https://trac.osgeo.org/gdal/ticket/1005</a><br class="">
<br class="">
This may also be relevant:<br class="">
<a class="moz-txt-link-freetext" href="https://www.spinics.net/lists/dash/msg02117.html">https://www.spinics.net/lists/dash/msg02117.html</a><br class="">
<br class="">
But this is somewhat beyond my (lack of) expertise to
resolve. Does anybody have any suggestions for
resolving this issue?<br class="">
<br class="">
Cheers,<br class="">
Nik.<br class="">
<br class="">
<br class="">
COMPLETE PROCESS TO BUILD iOS GDAL (so far):<br class="">
<br class="">
<br class="">
Install Homebrew package manager:<br class="">
/usr/bin/ruby -e "$(curl -fsSL
<a class="moz-txt-link-freetext" href="https://raw.githubusercontent.com/Homebrew/install/master/install">https://raw.githubusercontent.com/Homebrew/install/master/install</a>)"<br class="">
<br class="">
Install cmake using Homebrew:<br class="">
brew install cmakecmake --build . --target install<br class="">
<br class="">
Install ios.toolchain.cmake:<br class="">
Download from: <a class="moz-txt-link-freetext" href="https://github.com/leetal/ios-cmake">https://github.com/leetal/ios-cmake</a><br class="">
Install at:
$HOME/Documents/Development/3rdParty/ios-cmake-master/ios.toolchain.cmake<br class="">
<br class="">
Environment Variables:<br class="">
export PREFIX=$HOME/build/arm64<br class="">
export
CMTOOLCHAIN=$HOME/Documents/Development/3rdParty/ios-cmake-master/ios.toolchain.cmake<br class="">
<br class="">
Build SQLite:<br class="">
Download CMAKE-compatible SQLite amalgamation from:<br class="">
<a class="moz-txt-link-freetext" href="https://github.com/azadkuh/sqlite-amalgamation">https://github.com/azadkuh/sqlite-amalgamation</a><br class="">
<br class="">
cd sqlite-amalgamation-master<br class="">
mkdir build<br class="">
cd build<br class="">
cmake -DCMAKE_TOOLCHAIN_FILE=$CMTOOLCHAIN
-DPLATFORM=OS64 -DCMAKE_INSTALL_PREFIX=$PREFIX
-DSQLITE_ENABLE_RTREE=ON ..<br class="">
cmake --build .<br class="">
cmake --build . --target install<br class="">
<br class="">
Build Proj:<br class="">
cd proj-{VERSION}<br class="">
mkdir build<br class="">
cd build<br class="">
cmake -DCMAKE_TOOLCHAIN_FILE=$CMTOOLCHAIN
-DPLATFORM=OS64 -DCMAKE_INSTALL_PREFIX=$PREFIX
-DENABLE_TIFF=OFF -DENABLE_CURL=OFF -DBUILD_PROJSYNC=OFF
-DSQLITE3_INCLUDE_DIR=$PREFIX/include
-DSQLITE3_LIBRARY=$PREFIX/lib/libsqlite3.a ..<br class="">
cmake --build .<br class="">
cmake --build . --target install<br class="">
<br class="">
Build GDAL:<br class="">
(Specifying the path to PROJ is not required because
cmake automatically adds CMAKE_INSTALL_PREFIX to
CMAKE_SYSTEM_PREFIX_PATH<br class="">
<br class="">
cd gdal-{VERSION}<br class="">
mkdir build<br class="">
cd build<br class="">
cmake -DCMAKE_TOOLCHAIN_FILE=$CMTOOLCHAIN
-DPLATFORM=OS64 -DCMAKE_INSTALL_PREFIX=$PREFIX/arm64
-DBUILD_APPS=OFF -DBUILD_SHARED_LIBS=OFF
-DBUILD_PYTHON_BINDINGS=OFF
-DSQLITE3_INCLUDE_DIR=$PREFIX/include
-DSQLITE3_LIBRARY=$PREFIX/lib/libsqlite3.a
-DCMAKE_BUILD_TYPE=Release ..<br class="">
cmake --build .<br class="">
cmake --build . --target install<br class="">
_______________________________________________<br class="">
gdal-dev mailing list<br class="">
<a class="moz-txt-link-abbreviated" href="mailto:gdal-dev@lists.osgeo.org">gdal-dev@lists.osgeo.org</a><br class="">
<a class="moz-txt-link-freetext" href="https://lists.osgeo.org/mailman/listinfo/gdal-dev">https://lists.osgeo.org/mailman/listinfo/gdal-dev</a><br class="">
</blockquote>
<br class="">
-- <br class="">
<a href="http://www.spatialys.com/" class="moz-txt-link-freetext" moz-do-not-send="true">http://www.spatialys.com</a><br class="">
My software is free, but my time generally not.<br class="">
<br class="">
</div>
</div>
</blockquote>
</div>
<br class="">
<div class="">
<div style="letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div style="letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div style="letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div style="letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div style="letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-position: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br class="Apple-interchange-newline">
========================================================</div>
<div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-position: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">NIK SANDS</div>
<div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-position: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">Line Tamer | Time Traveller | Space
Cadet</div>
</div>
</div>
</div>
</div>
</div>
</div>
<br class="">
</blockquote>
<pre class="moz-signature" cols="72">--
<a class="moz-txt-link-freetext" href="http://www.spatialys.com/">http://www.spatialys.com</a>
My software is free, but my time generally not.</pre>
</div>
</div></blockquote></div><br class=""><div class="">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br class="Apple-interchange-newline">========================================================</div><div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">NIK SANDS</div><div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">Line Tamer | Time Traveller | Space Cadet</div></div></div></div></div></div>
</div>
<br class=""></div></body></html>