]> git.ipfire.org Git - thirdparty/rrdtool-1.x.git/commitdiff
VS2013, modifications to compile as C++ and on Windows .
authorpetgit <mo1607bil>
Thu, 24 Jul 2014 06:27:56 +0000 (08:27 +0200)
committerpetgit <mo1607bil>
Thu, 24 Jul 2014 06:27:56 +0000 (08:27 +0200)
21 files changed:
.gitignore
WIN32-BUILD-TIPS.txt [new file with mode: 0644]
src/mkstemp.c [new file with mode: 0644]
src/mkstemp.h [new file with mode: 0644]
src/rrd_client.c
src/rrd_create.c
src/rrd_modify.c
src/rrd_restore.c
src/rrd_rpncalc.c
src/rrd_snprintf.c
src/rrd_update.c
win32/RCa02816 [new file with mode: 0644]
win32/librrd-4.def
win32/librrd-4.vcxproj [new file with mode: 0644]
win32/librrd-4.vcxproj.user [new file with mode: 0644]
win32/rrd.sln [new file with mode: 0644]
win32/rrd_config.h
win32/rrdtool.sln [new file with mode: 0644]
win32/rrdtool.vcxproj [new file with mode: 0644]
win32/rrdupdate.sln [new file with mode: 0644]
win32/rrdupdate.vcxproj [new file with mode: 0644]

index 88d5b3dc3c9a5b17f28ea19215d34a876c6362d9..0bf38ba58d3c7b707aab4e23d7fd7d2d2485637c 100644 (file)
@@ -70,3 +70,11 @@ Makefile
 /doc/*.3
 /doc/pod2*.tmp
 /doc/RRD?.pod
+/contrib
+/win32/Debug
+/win32/Release
+/win32/ReleaseDLL
+/win32/*.suo
+/win32/*.sdf
+/bindings/dotnet/*.suo
+/win32/*.opensdf
diff --git a/WIN32-BUILD-TIPS.txt b/WIN32-BUILD-TIPS.txt
new file mode 100644 (file)
index 0000000..c8651bb
--- /dev/null
@@ -0,0 +1,389 @@
+Compiling RRDtool on Win32 with Microsoft Visual C++:
+---------------------------------------------------------------
+2010-06-04 Chris Larsen clarsen@euphoriaaudio.com
+2008-03-12 Stefan Ludewig stefan.ludewig@exitgames.com
+
+Here are step by step instructions for building librrd-4.dll and rrdtool.exe
+version 1.4.5 and newer with Microsoft Visual Studio 2013 (12.0.x).
+
+(1) Create a folder named "contrib" in the directory where this text file is located.
+
+(2) Download the following libraries that rrdtool depends on into this folder:
+
+    - cairo:    http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/cairo_1.8.10-3_win32.zip 
+      and       http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/cairo-dev_1.8.10-3_win32.zip
+
+    - glib:     http://ftp.gnome.org/pub/gnome/binaries/win32/glib/2.24/glib_2.24.1-1_win32.zip
+      and       http://ftp.gnome.org/pub/gnome/binaries/win32/glib/2.24/glib-dev_2.24.1-1_win32.zip
+
+    - libpng:   http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/libpng_1.4.0-1_win32.zip
+      and       http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/libpng-dev_1.4.0-1_win32.zip
+
+    - libxml2:  http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/libxml2_2.7.7-1_win32.zip
+      and       http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/libxml2-dev_2.7.7-1_win32.zip
+
+    - pango:    http://ftp.gnome.org/pub/gnome/binaries/win32/pango/1.28/pango_1.28.0-1_win32.zip
+      and       http://ftp.gnome.org/pub/gnome/binaries/win32/pango/1.28/pango-dev_1.28.0-1_win32.zip
+
+    - zlib:     http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/zlib_1.2.4-2_win32.zip
+      and       http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/zlib-dev_1.2.4-2_win32.zip
+      
+    - fontconfig:  http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/fontconfig_2.8.0-2_win32.zip
+    
+    - freetype: http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/freetype_2.3.12-1_win32.zip
+    
+    - expat:    http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/expat_2.0.1-1_win32.zip
+
+(3) Extract all of the .zip files into the contrib folder. Do not extract each library into it's own
+    directory. We want all of the files merged into a structure consisting of "bin, include, lib..."
+    etc folders.
+
+(4) Open the Visual Studio 2013 Solution "rrd.sln" in the win32 folder of
+    your rrdtool-folder and build either the project librrd-4 (for the
+    rrdtool-library), rrdtool (for the rrdtool-executable depending on the
+    libraray) or the complete solution. A post-build event automatically copies
+    all the dlls, needed by rrdtool, next to the .exe, when you build the
+    executable. These DLLs must be available on all hosts where rrdtool will
+    run.
+       
+24/7/14 Peter
+Update VS2008 project from branch 1.4 to VS2013 for the actual master.
+Change sources for C++ / Windows compatibility.
+
+6/10/10 Chris
+Updated project to include latest files and libraries. 
+Builds static or dynamic rrdlib
+
+5/1/05 Tobi
+to help windows deal with the reentrant versions of many unix
+calls link with win32comp.c
+
+4/10/05 Tobi
+The windows implementation of strftime does not seem to support
+the ISO 8601 week number (%V) I have therfore included the file
+strftime.[ch] which provides strftime_ ... if you compile rrdtool
+with -Dstrftime=_strftime and link strftime.o then you will
+get propper support for %V.
+
+7/29/04 Jake Brutlag
+
+As of Jan 2004, code for libraries utilized by rrdtool 
+(png, libart, freetype, and zlib) is no longer distributed with
+rrdtool. This requires some changes to the compile process on
+Win32. The solution described here is to compile rrdtool to
+link against these libraries dynamically. There is an advantage
+to this approach: namely the rrdtool distribution doesn't have to
+worry about how to compile these libraries on Win32. In theory,
+since others already provide and maintain Win32 binaries for these
+libraries the users don't have to worry about how to compile them
+either. The disadvantage of this approach is that the DLLs for
+these libraries must be available on the hosts where rrdtool will run.
+
+Here are step by step instructions for compiling rrdtool.exe and
+the perl shared library (RRDS.dll) with Microsoft Visual C++ 6.0.
+(1) Download libraries rrdtool depends on from GnuWin32:
+http://gnuwin32.sourceforge.net/
+For freetype, libpng, and zlib download the "Complete Package"; each of
+these will be a self-extracting self-installing executable.
+For libart, download both the "Binaries" and "Developer Files" packages.
+Unfortunately at this time GnuWin32 doesn't provide the "Complete Package"
+installer for libart. Perhaps by the time you are following these
+instructions GnuWin32 will have a "Complete Package" for libart.
+(2) Install the GnuWin32 libraries by running the executables for freetype,
+libpng, and zlib. These instructions and the Visual C++ project files
+distributed with rrdtool assume that you will use the default install
+location: C:\Program Files\GnuWin32. Extract the two zip files for libart,
+libart-2.3.3-bin.zip and libart-2.3.3-1-lib.zip into the GnuWin32 directory;
+the appropriate libart files will be added to the include, lib, and bin
+subdirectories.
+(3) Add C:\Program Files\GnuWin32\bin to the PATH (Control Panel ->
+System -> Advanced -> Environment Variables).
+(4) Start Microsoft Visual C++ 6.0. Load the workspace file, rrdtool.dsw,
+from the src subdirectory of your rrdtool code directory.
+(5) Compile the Release build of the rrdtool project (since rrdtool depends
+on the rrd project, the rrd library will also be compiled). At this
+time, the compile will fail in zconf.h, a zlib header file. The problem
+is a preprocessor directive that loads unistd.h. Open zconf.h in VC++
+(this file is in C:\Program Files\GnuWin32\include) and find the following
+code block:
+
+#if 1           /* HAVE_UNISTD_H -- this line is updated by ./configure */
+#  include <sys/types.h> /* for off_t */
+#  include <unistd.h>    /* for SEEK_* and off_t */
+#  ifdef VMS
+#    include <unixio.h>   /* for off_t */
+#  endif
+#  define z_off_t  off_t
+#endif 
+
+Change it to reads as follows (this is code from zlib-1.1.4):
+
+#if HAVE_UNISTD_H
+#  include <sys/types.h> /* for off_t */
+#  include <unistd.h>    /* for SEEK_* and off_t */
+#  ifdef VMS
+#    include <unixio.h>   /* for off_t */
+#  endif
+#  define z_off_t  off_t
+#endif 
+
+Note that it is actually just a one line change. Save the file and
+recompile rrdtool. By the time you are following these instructions
+this issue with zconf.h may be resolved.
+(6) At this point, you can run the executable rrdtool.exe in the
+src\toolrelease subdirectory. Note that if you wish to run rrdtool
+on other machines, you will need the following DLLs installed (on the
+path) on those machines:
+zlib1.dll
+libpng12.dll
+libart_lgpl.dll
+freetype6.dll
+msvcrt.dll
+The names of the first four DLLs might vary from what is listed here
+depending on the versions of the packages you downloaded from GnuWin32.
+The fifth DLL, msvcrt.dll, is a system DLL for most versions of Windows.
+If you are running on old version of Windows, you can install/upgrade to
+IE4.0 to get this DLL.
+(7) To compile the perl-shared library, open a Command Prompt (DOS box)
+and cd to the bindings\perl-shared subdirectory.
+(8) Run vcvars32.bat; this batch file, in your vc98\bin directory will
+set necessary environment options for command line compiling.
+(9) In bindings\perl-shared, run
+perl ntmake-build
+nmake
+nmake test
+If nmake test succeeds, you are good to go. RRDs.dll is in 
+blib\arch\auto\RRDs. If you plan to install via the Active State ppm
+tool, tar and gzip the blib directory. You can use the RRDs.ppd file
+in bindings\perl-shared directory. Remember that as in the case of
+rrdtool.exe you will need the DLLs listed in (6) on the machine where
+you are going to use RRDs.dll.
+
+Microsoft Visual C++ 7.1 (.NET 2003):
+
+Unfortunately, this is more difficult than with VC++ 6.0. The problem
+is that by default the C runtime dll for VC++ 7.1 is msvcr71.dll rather
+than msvcrt.dll. The GnuWin32 library binaries are all compiled
+to use msvcrt.dll and you can't mix msvcr71.dll and msvcrt.dll in the
+same process. One option is to download the source code for the libraries
+(available from http://gnuwin32.sourceforge.net) recompile them with
+VC++ 7.l. Then all the components will use msvcr71.dll. Once you are
+going to go this route, you can also use static multi-threaded libraries
+and use static linking between rrdtool (or RRDs.dll) and its dependencies.
+
+To use the GnuWin32 library binaries, you need to trick VC++ 7.1 into
+compiling rrdtool to use the older msvcrt.dll. Follow steps (1) - (3)
+as above, then:
+(4) Obtain a different version of the msvcrt.lib import library that
+is compatible with vc7 and points to msvcrt.dll:
+msvcrtlib_for_vc7.zip from http://xchat.org/win32/testing
+Backup msvcrt.lib in your vc7\lib directory 
+(\Program Files\Microsoft Visual Studio .NET 2003\vc7\lib)
+Then extract the msvcrt.lib from the zip file into the vc7\lib directory.
+WARNING: Use this msvcrt.lib at your own risk! This is not a Microsoft
+supplied file nor a file supported by anyone associated with rrdtool.
+(5) Start Microsoft Visual C++ 7.1. Load the solution file, rrdtool.sln,
+from the src subdirectory of your rrdtool code directory. Edit zconf.h,
+as needed, as described under (5) above. Compile the release build of
+the rrdtool project.
+Proceed with steps (6) - (9) as above, if you are using/picking up
+the wrong msvcrt.lib import library then nmake test for perl-shared
+will fail.
+
+Note: it is possible in the future that GnuWin32 will provide Win32
+binaries that utilize msvcr71.dll rather than msvcrt.dll.
+
+5/14/02 Jake Brutlag
+
+These notes share some insight I gained compiling 1.1.x with
+MS Visual C++ 6.0 (using project files). This information may or
+may not be accurate at the time you are reading this.
+
+(1) freetype and rrdtool cannot use precompiled headers (which are
+enabled by default for MSVC++ projects).  MSVC++ 6.0 does not
+support precompiled headers if #include directives contain MACROS.
+(2) Compile Release build with Default optimization, not the
+Maximize Speed optimization. I encountered some strange errors
+(related to argument processing for complex commands like graph--
+perhaps the getopt stuff is too blame) with Maximize Speed.
+(3) libart relies upon config.h (ostensibly generated by the
+configure script-- but of course not on Win32 platforms). ..\..\confignt
+(which contains a static Win32 version of config.h) should be on
+the include path.
+(4) Fonts are located in the %windir%\fonts, so the default font
+is c:\winnt\fonts\cour.ttf. (6/19/02) At Kerry Calvert's suggestion
+this setting was moved to confignt\config.h.
+(5) libart requires a custom build step to generate art_config.h; this
+is done manually via the commands:
+cl -I..\..\confignt gen_art_config.c
+gen_art_config.exe > art_config.h
+
+Currently, to compile rrd.lib and rrdtool.exe using
+the MSVC++ project files, first start MSVC++ 6.0. Open the rrdtool
+workspace (rrdtool.dsw in the src directory). The active project/
+configuration should be rrdtool-Win32 Release. Select Rebuild All
+from the Build menu. The static link library (rrd.lib) will
+be generated in src\release directory and executable will be generated
+in the src\toolrelease directory.
+
+Compiling RRDtool on NT ... work in progress
+---------------------------------------------------------------
+                         by Tamas Kovacshazy (khazy@mit.bme.hu)
+
+Persisting Problems with the current NT port:
+
+Unfortunately, the RRD perl modules does not work with Perl
+(ActivePerl) using the current distribution.
+
+The RRD shared perl module can be compiled after some
+modification...
+
+Follow these steps:
+
+0. Install perl if you do not have it!
+   Visit http://www.ActiveState.com/pw32/ for a complete distribution.
+
+1. Copy ..\gd1.2\release\gd.lib  to ..\gd1.2\
+2. Copy ..\src\release\rrd.lib to ..\src
+3. perl Makefile.pl
+
+In this step the system complains about something I do not
+understand. The error message is the following:
+
+Note (probably harmless): No library found for '-lm'
+
+Is a library missing? But it does not stop with an error...
+
+4. nmake test (You must have Visual C++ on the machine!)
+
+After these steps it generates the test files (svgs and rrds),
+and they seem to be good.
+
+The real problem in the shared perl modul is the following:
+
+I do not know how this installation stuff works. The problem is
+that the installation stuff looks for the gd.lib and the
+rrd.lib in the ..\gd1.2 and ..\src directory. The UNIX compile
+puts the files into these directories, but the NT compile does
+not.
+
+It is all for today,
+
+khazy
+
+Tamas Kovacshazy  E-mail: khazy@mit.bme.hu  
+WWW: http://www.mit.bme.hu/~khazy
+Technical University of Budapest 
+Department of Measurement and Information Systems
+
+
+Compiling RRDtool 1.2.x on Win32 with MingW32 gcc:
+---------------------------------------------------------------
+
+1. Obtain and install the current version of the MingW package.
+
+     http://www.mingw.org/download.shtml
+
+   In the MinGW set you will need the gcc and binutils as a minimum.
+
+2. Obtain either of the following awk versions and install in a directory
+   on your System Path:
+
+   - awk.exe
+
+     http://cm.bell-labs.com/cm/cs/awkbook/index.html
+
+     Note: This version has no dependencies to other libs.
+
+   - gawk.exe  (GnuWin32 version)
+
+     http://gnuwin32.sourceforge.net/packages/gawk.htm
+
+     Note: Also fetch the dependant libraries for it from the same page.
+
+3. If you plan to create a 'distribution' release of the RRD Tools, the
+   Makefile.Win32 will copy all the needed files to an output directory and
+   then zip the entire directory. A suitable zip utility can be obtained here:
+
+     http://www.info-zip.org/
+
+   Install in a directory on your System Path.
+
+4. Obtain the following libraries, ideally install them all under a common
+   directory:
+
+   = zlib
+
+     http://oss.oetiker.ch/rrdtool/pub/libs/zlib-1.2.3.tar.gz
+     http://www.zlib.net/
+
+   = libpng
+
+     http://oss.oetiker.ch/rrdtool/pub/libs/libpng-1.2.12.tar.gz
+     http://libpng.sourceforge.net/
+
+   = freetype
+
+     http://oss.oetiker.ch/rrdtool/pub/libs/freetype-2.2.1.tar.gz
+     http://freetype.sourceforge.net/index2.html
+   = libart_lgpl
+
+     http://oss.oetiker.ch/rrdtool/pub/libs/libart_lgpl-2.3.17.tar.gz
+     http://www.levien.com/libart/
+
+     Note: libart_lgpl needs a special tweak because the archive contains
+     only the base directory, but the libart headers are usually included with
+     a directory prefix; therefore create a subfolder 'libart_lgpl' and move
+     all files into this subfolder.
+
+5. Set up for DOS environment.
+
+   Add MingW\bin and MSYS\bin directories to your System path.
+
+   If the libraries share a common directory set the following environment var:
+
+     set LIBBASE=<shared director>
+     e.g set LIBBASE=C:\Libraries
+
+   If the libraries are scattered, set the following environment vers:
+
+     set ZLIBSDK=<path to zlib>
+     e.g set ZLIBSDK=C:\mytest\zlib-1.2.3
+     set LIBPNG=<path to libpng>
+     set LIBFT2=<path to freetype>
+     set LIBART=<path to libart>
+
+   If using the Gnu Awk (gawk.exe), edit the Makefile.Win32 and change the line:
+
+      AWK      = awk
+
+   to
+
+      AWK      = gawk
+
+6. Compile the project.
+
+   All dependent libs are statically linked in. This has the benefit that the
+   binaries do not depend on any other DLLs.
+   In order to build the static freetype lib enter the freetype base directory
+   and type 'make'. If everything is fine a message appears that gcc is detected,
+   and that you should again type 'make'. Follow that in order to build freetype.
+   All other libs are build from the sources with the RRDTool Makefile.Win32.
+
+   Switch to the RRDTOOL .\src directory. Then:
+
+      make -f Makefile.Win32 help
+
+   to see the build options, or
+
+      make -f Makefile.Win32 all
+
+   should build the entire package.
+
+6. Happy Graphing!
+
+
+written by normw & gk.
+
+
diff --git a/src/mkstemp.c b/src/mkstemp.c
new file mode 100644 (file)
index 0000000..4bb8ae9
--- /dev/null
@@ -0,0 +1,113 @@
+/* mkstemp extracted from libc/sysdeps/posix/tempname.c.  Copyright
+   (C) 1991-1999, 2000, 2001, 2006 Free Software Foundation, Inc.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.  */
+//http://stackoverflow.com/questions/6036227/mkstemp-implementation-for-win32
+
+#include <errno.h>
+#include "rrd_tool.h"
+#include <fcntl.h>
+
+
+static const char letters[] =
+"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+
+/* Generate a temporary file name based on TMPL.  TMPL must match the
+   rules for mk[s]temp (i.e. end in "XXXXXX").  The name constructed
+   does not exist at the time of the call to mkstemp.  TMPL is
+   overwritten with the result.  */
+int
+mkstemp (char *tmpl)
+{
+  int len;
+  char *XXXXXX;
+  static unsigned long long value;
+  unsigned long long random_time_bits;
+  unsigned int count;
+  int fd = -1;
+  int save_errno = errno;
+
+  /* A lower bound on the number of temporary files to attempt to
+     generate.  The maximum total number of temporary file names that
+     can exist for a given template is 62**6.  It should never be
+     necessary to try all these combinations.  Instead if a reasonable
+     number of names is tried (we define reasonable as 62**3) fail to
+     give the system administrator the chance to remove the problems.  */
+#define ATTEMPTS_MIN (62 * 62 * 62)
+
+  /* The number of times to attempt to generate a temporary file.  To
+     conform to POSIX, this must be no smaller than TMP_MAX.  */
+#if ATTEMPTS_MIN < TMP_MAX
+  unsigned int attempts = TMP_MAX;
+#else
+  unsigned int attempts = ATTEMPTS_MIN;
+#endif
+
+  len = strlen (tmpl);
+  if (len < 6 || strcmp (&tmpl[len - 6], "XXXXXX"))
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+/* This is where the Xs start.  */
+  XXXXXX = &tmpl[len - 6];
+
+  /* Get some more or less random data.  */
+  {
+    SYSTEMTIME      stNow;
+    FILETIME ftNow;
+
+    // get system time
+    GetSystemTime(&stNow);
+    stNow.wMilliseconds = 500;
+    if (!SystemTimeToFileTime(&stNow, &ftNow))
+    {
+        errno = -1;
+        return -1;
+    }
+
+    random_time_bits = (((unsigned long long)ftNow.dwHighDateTime << 32)
+                        | (unsigned long long)ftNow.dwLowDateTime);
+  }
+  value += random_time_bits ^ (unsigned long long)GetCurrentThreadId ();
+
+  for (count = 0; count < attempts; value += 7777, ++count)
+    {
+      unsigned long long v = value;
+
+      /* Fill in the random bits.  */
+      XXXXXX[0] = letters[v % 62];
+      v /= 62;
+      XXXXXX[1] = letters[v % 62];
+      v /= 62;
+      XXXXXX[2] = letters[v % 62];
+      v /= 62;
+      XXXXXX[3] = letters[v % 62];
+      v /= 62;
+      XXXXXX[4] = letters[v % 62];
+      v /= 62;
+      XXXXXX[5] = letters[v % 62];
+
+#define _O_EXCL         0x0400
+#define O_EXCL          _O_EXCL
+#define _S_IREAD        0000400         /* read permission, owner */
+#define _S_IWRITE       0000200         /* write permission, owner */
+
+      fd = open (tmpl, O_RDWR | O_CREAT | O_EXCL, _S_IREAD | _S_IWRITE);
+      if (fd >= 0)
+    {
+      errno = save_errno;
+      return fd;
+    }
+      else if (errno != EEXIST)
+    return -1;
+    }
+
+  /* We got out of the loop because we ran out of combinations to try.  */
+  errno = EEXIST;
+  return -1;
+}
\ No newline at end of file
diff --git a/src/mkstemp.h b/src/mkstemp.h
new file mode 100644 (file)
index 0000000..42f1f91
--- /dev/null
@@ -0,0 +1 @@
+int mkstemp(char *tmpl);
index a5f225792e363ff2df2b1b5a07bf04d0cec46edb..ec1058c58943e24313af3bcfa03112d3eb5ac49b 100644 (file)
  **/
 
 #ifdef WIN32
+
+#include <ws2tcpip.h> // contain #include <winsock2.h>
+// Need to link with Ws2_32.lib
+#pragma comment(lib, "ws2_32.lib") 
 #include <time.h>
-#include <ws2tcpip.h>
-#include <winsock2.h>
 #include <io.h>
 #include <fcntl.h>
 #include <tchar.h>
 #include <locale.h>
+
 #endif
 
 #include "rrd_strtod.h"
index 185e2d4d0e5d01a58589c2f2eab1b56edd87b3ff..600cc7df759e80a77628a42b1d465a92850d3135 100644 (file)
@@ -645,7 +645,7 @@ void parseGENERIC_DS(
         char     *colonp;
 
         /* convert heartbeat as count or duration */
-        colonp = strchr(def, ':');
+        colonp = (char *) strchr(def, ':');
         if (! colonp) {
             parsetime_error = "missing separator";
             break;
index 97afb21dd543ad908d4987a1589b7a75e17b80dd..00001ecbec8b93bb17b190132be7411c08d208b7 100644 (file)
 #include "fnv.h"
 
 #include <locale.h>
+#include "rrd_config.h"
+#ifdef WIN32
+#include <stdlib.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#endif
+
+
 
 // calculate a % b, guaranteeing a positive result...
 static int positive_mod(int a, int b) {
@@ -178,16 +186,25 @@ static candidate_t *find_candidate_rras(const rrd_t *rrd, const rra_def_t *rra,
        enum cf_en other_cf = cf_conv(other_rra->cf_nam);
        if (other_cf == cf ||
            (other_cf == CF_AVERAGE && other_rra->pdp_cnt == 1)) {
+#ifdef _WINDOWS
+               candidate_t c;
+               c.rrd = rrd;
+               c.rra_index = i;
+               c.values = rrd->rrd_value + rrd->stat_head->ds_cnt * total_rows;
+               c.rra = rrd->rra_def + i;
+               c.ptr = rrd->rra_ptr + i;
+               c.cdp = rrd->cdp_prep + rrd->stat_head->ds_cnt * i;
+#else
            candidate_t c = { 
                .rrd = rrd, 
                .rra_index = i,
                .values = rrd->rrd_value + rrd->stat_head->ds_cnt * total_rows,
                .rra = rrd->rra_def + i,
                .ptr = rrd->rra_ptr + i,
-               .cdp = rrd->cdp_prep + rrd->stat_head->ds_cnt * i 
-               
+               .cdp = rrd->cdp_prep + rrd->stat_head->ds_cnt * i       
            };
-           candidates = copy_over_realloc(candidates, *cnt,
+#endif
+               candidates = (candidate_t *) copy_over_realloc(candidates, *cnt,
                                           &c, 0, sizeof(c));
            if (candidates == NULL) {
                rrd_set_error("out of memory");
@@ -223,12 +240,12 @@ static int copy_or_delete_DSs(const rrd_t *in, rrd_t *out, char *ops) {
     for (unsigned int in_ds = 0 ; in_ds < in->stat_head->ds_cnt ; in_ds++) {
        switch (ops[in_ds]) {
        case 'c': {
-           out->ds_def = copy_over_realloc(out->ds_def, out->stat_head->ds_cnt, 
+           out->ds_def = (ds_def_t *) copy_over_realloc(out->ds_def, out->stat_head->ds_cnt, 
                                           in->ds_def, in_ds,
                                           sizeof(ds_def_t));
            if (out->ds_def == NULL) goto done;
            
-           out->pdp_prep = copy_over_realloc(out->pdp_prep, out->stat_head->ds_cnt, 
+               out->pdp_prep = (pdp_prep_t *) copy_over_realloc(out->pdp_prep, out->stat_head->ds_cnt,
                                             in->pdp_prep, in_ds,
                                             sizeof(pdp_prep_t));
            if (out->pdp_prep == NULL) goto done;
@@ -266,7 +283,7 @@ static int handle_rra_defs(const rrd_t *in, rrd_t *out,
 {
     int rc = -1;
     unsigned int j, r;
-    rra_ptr_t rra_0_ptr = { .cur_row = 0 };
+       rra_ptr_t rra_0_ptr; rra_0_ptr.cur_row = 0;
     cdp_prep_t empty_cdp_prep;
     memset(&empty_cdp_prep, 0, sizeof(empty_cdp_prep));
 
@@ -308,7 +325,7 @@ static int handle_rra_defs(const rrd_t *in, rrd_t *out,
            continue;
        }
 
-       out->cdp_prep = realloc(out->cdp_prep, 
+       out->cdp_prep = (cdp_prep_t *) realloc(out->cdp_prep,
                               sizeof(cdp_prep_t) * out->stat_head->ds_cnt 
                               * (out->stat_head->rra_cnt + 1));
        
@@ -323,7 +340,7 @@ static int handle_rra_defs(const rrd_t *in, rrd_t *out,
        int start_index_in  = in->stat_head->ds_cnt * j;
        int start_index_out = out->stat_head->ds_cnt * out->stat_head->rra_cnt;
        
-       out->rra_def = copy_over_realloc(out->rra_def, out->stat_head->rra_cnt,
+       out->rra_def = (rra_def_t *) copy_over_realloc(out->rra_def, out->stat_head->rra_cnt,
                                         in->rra_def, j,
                                         sizeof(rra_def_t));
        if (out->rra_def == NULL) goto done;
@@ -331,7 +348,7 @@ static int handle_rra_defs(const rrd_t *in, rrd_t *out,
        // adapt row count:
        out->rra_def[out->stat_head->rra_cnt].row_cnt = final_row_count;
 
-       out->rra_ptr = copy_over_realloc(out->rra_ptr, out->stat_head->rra_cnt,
+       out->rra_ptr = (rra_ptr_t *) copy_over_realloc(out->rra_ptr, out->stat_head->rra_cnt,
                                        &rra_0_ptr, 0,
                                        sizeof(rra_ptr_t));
        if (out->rra_ptr == NULL) goto done; 
@@ -408,10 +425,10 @@ static int add_dss(const rrd_t UNUSED(*in), rrd_t *out,
        }
 
        // copy parse result to output RRD
-       out->ds_def = copy_over_realloc(out->ds_def, out->stat_head->ds_cnt, 
+       out->ds_def = (ds_def_t *) copy_over_realloc(out->ds_def, out->stat_head->ds_cnt,
                                        &added, 0,
                                        sizeof(ds_def_t));
-       if (out->ds_def == NULL) {
+       if (out->ds_def ==  NULL) {
            goto done;
        }
 
@@ -424,7 +441,7 @@ static int add_dss(const rrd_t UNUSED(*in), rrd_t *out,
        added_pdp_prep.scratch[PDP_unkn_sec_cnt].u_cnt =
            out->live_head->last_up % out->stat_head->pdp_step;
 
-       out->pdp_prep = copy_over_realloc(out->pdp_prep, 
+       out->pdp_prep = (pdp_prep_t *) copy_over_realloc(out->pdp_prep,
                                          out->stat_head->ds_cnt, 
                                          &added_pdp_prep, 0,
                                          sizeof(pdp_prep_t));
@@ -814,7 +831,7 @@ static rrd_t *rrd_modify_structure(const rrd_t *in,
     unsigned int ds_ops_cnt = 0;
     int *ds_map = NULL;
     
-    out = malloc(sizeof(rrd_t));
+       out = (rrd_t *) malloc(sizeof(rrd_t));
     if (out == NULL) {
        rrd_set_error("Out of memory");
        goto done;
@@ -849,7 +866,7 @@ static rrd_t *rrd_modify_structure(const rrd_t *in,
     out->stat_head->ds_cnt = 0;
     out->stat_head->rra_cnt = 0;
     
-    out->live_head = copy_over_realloc(out->live_head, 0, in->live_head, 0,
+       out->live_head = (live_head_t *) copy_over_realloc(out->live_head, 0, in->live_head, 0,
                                       sizeof(live_head_t));
     
     if (out->live_head == NULL) goto done;
@@ -864,7 +881,7 @@ static rrd_t *rrd_modify_structure(const rrd_t *in,
     - 'a' will be added.
     */
     ds_ops_cnt = in->stat_head->ds_cnt;
-    ds_ops = malloc(ds_ops_cnt);
+    ds_ops = (char *) malloc(ds_ops_cnt);
     
     if (ds_ops == NULL) {
        rrd_set_error("parse_tag_rrd: malloc failed.");
@@ -899,7 +916,7 @@ static rrd_t *rrd_modify_structure(const rrd_t *in,
     }
     if (added_cnt > 0) {
        // and extend the ds_ops array as well
-       ds_ops = realloc(ds_ops, ds_ops_cnt + added_cnt);
+               ds_ops = (char *) realloc(ds_ops, ds_ops_cnt + added_cnt);
        for(; added_cnt > 0 ; added_cnt--) {
            ds_ops[ds_ops_cnt++] = 'a';
        }
@@ -908,7 +925,7 @@ static rrd_t *rrd_modify_structure(const rrd_t *in,
     /* prepare explicit data source index to map from output index to
        input index */
     
-    ds_map = malloc(sizeof(int) * out->stat_head->ds_cnt);
+    ds_map = (int *) malloc(sizeof(int) * out->stat_head->ds_cnt);
     
     j = 0;
     for (i = 0 ; i < ds_ops_cnt ; i++) {
@@ -950,7 +967,7 @@ static rrd_t *rrd_modify_structure(const rrd_t *in,
     */
     
     /* prepare space for output data */
-    out->rrd_value = realloc(out->rrd_value,
+       out->rrd_value = (rrd_value_t *) realloc(out->rrd_value,
                             total_out_rra_rows * out->stat_head->ds_cnt
                             * sizeof(rrd_value_t));
     
@@ -1263,7 +1280,7 @@ static int add_rras(const rrd_t *in, rrd_t *out, const int *ds_map,
                goto done;
             }
 
-           out->rra_def = copy_over_realloc(out->rra_def, out->stat_head->rra_cnt,
+               out->rra_def = (rra_def_t *) copy_over_realloc(out->rra_def, out->stat_head->rra_cnt,
                                            &rra_def, 0,
                                            sizeof(rra_def_t));
            if (out->rra_def == NULL) goto done;
@@ -1279,7 +1296,7 @@ static int add_rras(const rrd_t *in, rrd_t *out, const int *ds_map,
 
     if (last_rra_cnt < out->stat_head->rra_cnt) {
        // extend cdp_prep and rra_ptr arrays
-       out->cdp_prep = realloc(out->cdp_prep, 
+               out->cdp_prep = (cdp_prep_t *) realloc(out->cdp_prep,
                                sizeof(cdp_prep_t) * out->stat_head->ds_cnt 
                                * (out->stat_head->rra_cnt));
 
@@ -1288,7 +1305,7 @@ static int add_rras(const rrd_t *in, rrd_t *out, const int *ds_map,
            goto done;
        }
        
-       out->rra_ptr = realloc(out->rra_ptr,
+       out->rra_ptr = (rra_ptr_t *) realloc(out->rra_ptr,
                               sizeof(rra_ptr_t) * out->stat_head->rra_cnt);
        
        if (out->rra_ptr == NULL) {
@@ -1318,7 +1335,7 @@ static int add_rras(const rrd_t *in, rrd_t *out, const int *ds_map,
        total_out_rra_rows += rra_def->row_cnt;
 
        /* prepare space for output data */
-       out->rrd_value = realloc(out->rrd_value,
+       out->rrd_value = (rrd_value_t *) realloc(out->rrd_value,
                                (total_out_rra_rows) * out->stat_head->ds_cnt
                                * sizeof(rrd_value_t));
     
@@ -1363,7 +1380,7 @@ static int write_rrd(const char *outfilename, rrd_t *out) {
        // to stdout
     } else {
        /* create RRD with a temporary name, rename atomically afterwards. */
-       tmpfilename = malloc(strlen(outfilename) + 7);
+               tmpfilename = (char *) malloc(strlen(outfilename) + 7);
        if (tmpfilename == NULL) {
            rrd_set_error("out of memory");
            goto done;
@@ -1371,8 +1388,11 @@ static int write_rrd(const char *outfilename, rrd_t *out) {
 
        strcpy(tmpfilename, outfilename);
        strcat(tmpfilename, "XXXXXX");
-       
+
+
+
        int tmpfd = mkstemp(tmpfilename);
+
        if (tmpfd < 0) {
            rrd_set_error("Cannot create temporary file");
            goto done;
@@ -1401,6 +1421,9 @@ static int write_rrd(const char *outfilename, rrd_t *out) {
               WILL NOT take care of any ACLs that may be set. Go
               figure. */
            if (stat(outfilename, &stat_buf) != 0) {
+#ifdef WIN32
+                       stat_buf.st_mode = _S_IREAD | _S_IWRITE;  // have to test it is 
+#else
                /* an error occurred (file not found, maybe?). Anyway:
                   set the mode to 0666 using current umask */
                stat_buf.st_mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
@@ -1409,6 +1432,7 @@ static int write_rrd(const char *outfilename, rrd_t *out) {
                umask(mask);
 
                stat_buf.st_mode &= ~mask;
+#endif
            }
            if (chmod(tmpfilename, stat_buf.st_mode) != 0) {
                rrd_set_error("Cannot chmod temporary file!");
@@ -1461,7 +1485,7 @@ int handle_modify(const rrd_t *in, const char *outfilename,
     
     for (i = optidx ; i < argc ; i++) {
        if (strncmp("DEL:", argv[i], 4) == 0 && strlen(argv[i]) > 4) {
-           del = realloc(del, (rcnt + 2) * sizeof(char*));
+               del = (const char **) realloc(del, (rcnt + 2) * sizeof(char*));
            if (del == NULL) {
                rrd_set_error("out of memory");
                rc = -1;
@@ -1478,7 +1502,7 @@ int handle_modify(const rrd_t *in, const char *outfilename,
            rcnt++;
            del[rcnt] = NULL;
        } else if (strncmp("DS:", argv[i], 3) == 0 && strlen(argv[i]) > 3) {
-           add = realloc(add, (acnt + 2) * sizeof(char*));
+               add = (const char **) realloc(add, (acnt + 2) * sizeof(char*));
            if (add == NULL) {
                rrd_set_error("out of memory");
                rc = -1;
@@ -1495,7 +1519,8 @@ int handle_modify(const rrd_t *in, const char *outfilename,
            acnt++;
            add[acnt] = NULL;
        } else if (strncmp("RRA#", argv[i], 4) == 0 && strlen(argv[i]) > 4) {
-           rra_mod_op_t rra_mod = { .def = NULL };
+               rra_mod_op_t rra_mod; // = { .def = NULL };  // not in VS2013
+               rra_mod.def = NULL;
            char sign;
            unsigned int number;
            unsigned int idx;
@@ -1522,7 +1547,7 @@ int handle_modify(const rrd_t *in, const char *outfilename,
                goto done;
            }
 
-           rra_ops = copy_over_realloc(rra_ops, rraopcnt,
+           rra_ops = (rra_mod_op_t *) copy_over_realloc(rra_ops, rraopcnt,
                                        &rra_mod, 0, sizeof(rra_mod));
            if (rra_ops == NULL) {
                rrd_set_error("out of memory");
@@ -1542,7 +1567,7 @@ int handle_modify(const rrd_t *in, const char *outfilename,
                goto done;
            }
 
-           rra_ops = copy_over_realloc(rra_ops, rraopcnt,
+               rra_ops = (rra_mod_op_t *) copy_over_realloc(rra_ops, rraopcnt,
                                        &rra_mod, 0, sizeof(rra_mod));
            if (rra_ops == NULL) {
                rrd_set_error("out of memory");
@@ -1551,11 +1576,16 @@ int handle_modify(const rrd_t *in, const char *outfilename,
            }
            rraopcnt++;
        } else if (strncmp("DELRRA:", argv[i], 7) == 0 && strlen(argv[i]) > 7) {
-           rra_mod_op_t rra_mod = { .def = NULL,
+               rra_mod_op_t rra_mod;
+               /* NOT in VS2013 C++ allowed
+               = { .def = NULL,
                                     .op = '=', 
                                     .row_count = 0 // eg. deletion
-           };
-           
+           };*/
+               rra_mod.def = NULL;
+               rra_mod.op = '='; 
+               rra_mod.row_count = 0; // eg. deletion
+
            rra_mod.index = atoi(argv[i] + 7);
            if (rra_mod.index < 0 ) {
                rrd_set_error("DELRRA requires a non-negative, integer argument");
@@ -1563,7 +1593,7 @@ int handle_modify(const rrd_t *in, const char *outfilename,
                goto done;
            }
 
-           rra_ops = copy_over_realloc(rra_ops, rraopcnt,
+               rra_ops = (rra_mod_op_t *) copy_over_realloc(rra_ops, rraopcnt,
                                        &rra_mod, 0, sizeof(rra_mod));
            if (rra_ops == NULL) {
                rrd_set_error("out of memory");
index bfdfa73c686d32deb888ad873f29e2ec77548b12..672f0262dbc49e56eaf2b510b6ef51d80b523454 100644 (file)
@@ -1173,7 +1173,7 @@ static rrd_t *parse_file(
     /* special handling for XML on stdin (like it is the case when using
        the pipe interface) */
     if (strcmp(filename, "-") == 0) {
-       sctx = malloc(sizeof(*sctx));
+               sctx = (stdioXmlReaderContext *) malloc(sizeof(*sctx));
        if (sctx == NULL) {
            rrd_set_error("parse_file: malloc failed.");
            return (NULL);
index bf87e6a896ffc710acbd47261b5caf534b56754c..87516035c28ab9a4de50a69125ce844f03e8cb50 100644 (file)
@@ -886,12 +886,12 @@ short rpn_calc(
                int doshifts=shifts;
                if (shifts<0) { doshifts=-shifts; }
                /* alloc memory */
-               double *extra = rpnp[rpi].extra;
+               double *extra = (double *) rpnp[rpi].extra;
                if (rpnp[rpi].op == OP_PREDICTPERC) {
                    if (! extra) {
                      int size = (doshifts + 1) * (locstep + 2);
                      rpnp[rpi].extra =
-                         extra =  malloc(sizeof(double) * size);
+                         extra =  (double *) malloc(sizeof(double) * size);
                    }
                }
                /* loop the shifts */
index be4a094c2011fbcb73ecc6bb07ebe2dcf6aff049..0fd4f026e44f342820382760a2d0244e612ff9d8 100644 (file)
@@ -878,7 +878,9 @@ rpl_vsnprintf(char *str, size_t size, const char *format, va_list args)
                                 * characters, in an implementation-defined
                                 * manner." (C99: 7.19.6.1, 8)
                                 */
-                               if ((strvalue = va_arg(args, void *)) == NULL)
+                               // if ((strvalue = va_arg(args, void *)) == NULL)
+                               //error C2440: '=' : cannot convert from 'void *' to 'const char *'
+                               if ((strvalue = va_arg(args, char *)) == NULL)
                                        /*
                                         * We use the glibc format.  BSD prints
                                         * "0x0", SysV "0".
@@ -1519,8 +1521,8 @@ mypow10(int exponent)
 void *
 mymemcpy(void *dst, void *src, size_t len)
 {
-       const char *from = src;
-       char *to = dst;
+       const char *from = (const char *) src;
+       char *to = (char *) dst;
 
        /* No need for optimization, we use this only to replace va_copy(3). */
        while (len-- > 0)
@@ -1539,7 +1541,7 @@ rpl_vasprintf(char **ret, const char *format, va_list ap)
        VA_COPY(aq, ap);
        len = vsnprintf(NULL, 0, format, aq);
        VA_END_COPY(aq);
-       if (len < 0 || (*ret = malloc(size = len + 1)) == NULL)
+       if (len < 0 || (*ret = (char *) malloc(size = len + 1)) == NULL)
                return -1;
        return vsnprintf(*ret, size, format, ap);
 }
index eb994bc71d6a928c1dfd1f7d4554f072446956f9..7a1a08948a22b926c0a3b86534965fc065455269 100644 (file)
@@ -371,7 +371,7 @@ static char *rrd_get_file_template(const char *filename) /* {{{ */
        rrd_file_t *rrd_file;
        unsigned int i;
        size_t len=0;
-       char *template = NULL;
+       char *filetemplate = NULL; //template is a key word in C++ , see http://msdn.microsoft.com/de-de/library/2e6a4at9.aspx
 
        /* open file */
        rrd_init(&rrd);
@@ -384,23 +384,23 @@ static char *rrd_get_file_template(const char *filename) /* {{{ */
                len += strlen(rrd.ds_def[i].ds_nam)+1;
        }
        /* now that we got it allocate memory */
-       template = malloc(len);
-       if (!template)
+       filetemplate = (char *) malloc(len);
+       if (!filetemplate)
                goto err_close;
-       template[0] = 0;
+       filetemplate[0] = 0;
 
        /* fill in for real */
        for (i = 0; i < rrd.stat_head->ds_cnt; i++) {
                if (i)
-                       strcat(template,":");
-               strcat(template,rrd.ds_def[i].ds_nam);
+                       strcat(filetemplate,":");
+               strcat(filetemplate,rrd.ds_def[i].ds_nam);
        }
 
 err_close:
        rrd_close(rrd_file);
 err_free:
        rrd_free(&rrd);
-       return (template);
+       return (filetemplate);
 } /* }}} const char *rrd_get_file_template */
 
 
@@ -412,7 +412,7 @@ static gint cache_compare_names (gconstpointer name1,
                                gpointer data)
 {
        (void)(data); /* to avoid unused message */
-       return (strcmp (name1, name2));
+       return (strcmp((const char *)name1, (const char *)name2));
 }
 
 static void cache_destroy(gpointer data)
@@ -514,7 +514,7 @@ static int _concat_field(
        size_t len = 0;
 
        /* get length */
-       char *colon = strchr(field, ':');
+       char *colon = strchr((char *)field, ':');
        if (colon) {
                len=colon-field;
        } else
@@ -586,7 +586,7 @@ static char *rrd_map_template_to_values(const char *tpl,  /* {{{ */
                                                */
                * 2 /* = strlen(":U") */; 
 
-       mapped = malloc(len);
+       mapped = (char *) malloc(len);
        if (!mapped)
                return NULL;
        mapped[0] = 0;
@@ -643,7 +643,7 @@ static int rrd_template_update(const char *filename,  /* {{{ */
 
 
        /* now start to map those fields */
-       mapped_values = calloc(values_num,sizeof(char*));
+       mapped_values = (char **)calloc(values_num,sizeof(char*));
        if (!mapped_values) {
                rrd_set_error("rrd_template_update: "
                        " could not allocate memory");
diff --git a/win32/RCa02816 b/win32/RCa02816
new file mode 100644 (file)
index 0000000..071686c
Binary files /dev/null and b/win32/RCa02816 differ
index 8a55892b476c91e93a5de69562f360d04fc5100d..94392e6d95a026b6bc65d99c7c0d726e4529036a 100644 (file)
@@ -59,10 +59,10 @@ rrd_update_v
 rrd_version
 rrd_write
 rrd_xport
-;rrdc_connect
-;rrdc_is_connected
-;rrdc_disconnect
-;rrdc_flush
-;rrdc_stats_free
-;rrdc_stats_get
-;rrdc_update
+rrdc_connect
+rrdc_is_connected
+rrdc_disconnect
+rrdc_flush
+rrdc_stats_free
+rrdc_stats_get
+rrdc_update
diff --git a/win32/librrd-4.vcxproj b/win32/librrd-4.vcxproj
new file mode 100644 (file)
index 0000000..6ece051
--- /dev/null
@@ -0,0 +1,284 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugDLL|Win32">
+      <Configuration>DebugDLL</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="ReleaseDLL|Win32">
+      <Configuration>ReleaseDLL</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Static Debug|Win32">
+      <Configuration>Static Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{CC158E1D-1364-43CA-9B2D-4AF54225C7CA}</ProjectGuid>
+    <RootNamespace>librrd-4</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+    <CLRSupport>false</CLRSupport>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Static Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLL|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Static Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLL|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.21005.1</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(Configuration)\</OutDir>
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)$(Configuration)\</OutDir>
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLL|Win32'">
+    <OutDir>$(SolutionDir)$(Configuration)\</OutDir>
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Static Debug|Win32'">
+    <OutDir>$(SolutionDir)$(Configuration)\</OutDir>
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|Win32'">
+    <OutDir>$(SolutionDir)$(Configuration)\</OutDir>
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>.;../contrib/include/cairo;../contrib/include/pango-1.0;../contrib/include/glib-2.0;../contrib/lib/glib-2.0/include;../contrib/include;../contrib/include/libpng12;../contrib/include/libxml2;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USE_32BIT_TIME_T;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;strftime=strftime_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <PrecompiledHeaderFile />
+      <ProgramDataBaseFileName>$(IntDir)librrd-4.pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <CompileAs>CompileAsCpp</CompileAs>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+    </ClCompile>
+    <Lib>
+      <AdditionalDependencies>cairo.lib;pango-1.0.lib;pangocairo-1.0.lib;libpng.lib;zdll.lib;glib-2.0.lib;gobject-2.0.lib;libxml2.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>../contrib/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <ModuleDefinitionFile />
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <AdditionalIncludeDirectories>.;../contrib/include/cairo;../contrib/include/pango-1.0;../contrib/include/glib-2.0;../contrib/lib/glib-2.0/include;../contrib/include;../contrib/include/libpng12;../contrib/include/libxml2;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;WIN32_LEAN_AND_MEAN;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;strftime=strftime_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader />
+      <PrecompiledHeaderFile>precompiled.h</PrecompiledHeaderFile>
+      <ProgramDataBaseFileName>$(IntDir)librrd-4.pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <CompileAs>CompileAsCpp</CompileAs>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+    </ClCompile>
+    <Lib>
+      <AdditionalDependencies>cairo.lib;pango-1.0.lib;pangocairo-1.0.lib;libpng.lib;zdll.lib;glib-2.0.lib;gobject-2.0.lib;libxml2.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>../contrib/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLL|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>.;../contrib/include/cairo;../contrib/include/pango-1.0;../contrib/include/glib-2.0;../contrib/lib/glib-2.0/include;../contrib/include;../contrib/include/libpng12;../contrib/include/libxml2;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USE_32BIT_TIME_T;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;strftime=strftime_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <PrecompiledHeader />
+      <PrecompiledHeaderFile />
+      <ProgramDataBaseFileName>$(IntDir)librrd-4.pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <CompileAs>CompileAsCpp</CompileAs>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>cairo.lib;glib-2.0.lib;gobject-2.0.lib;libpng.lib;libxml2.lib;pango-1.0.lib;pangocairo-1.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>../contrib/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <ModuleDefinitionFile>librrd-4.def</ModuleDefinitionFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Static Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>.;../contrib/include/cairo;../contrib/include/pango-1.0;../contrib/include/glib-2.0;../contrib/lib/glib-2.0/include;../contrib/include;../contrib/include/libpng12;../contrib/include/libxml2;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <PrecompiledHeader />
+      <PrecompiledHeaderFile />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <CompileAs>CompileAsCpp</CompileAs>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+    </ClCompile>
+    <Lib>
+      <AdditionalDependencies>cairo.lib;pango-1.0.lib;pangocairo-1.0.lib;libpng.lib;zdll.lib;glib-2.0.lib;gobject-2.0.lib;libxml2.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>../contrib/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <ModuleDefinitionFile />
+      <IgnoreSpecificDefaultLibraries>LIBCMTD.lib;LIBCMT.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>.;../contrib/include/cairo;../contrib/include/pango-1.0;../contrib/include/glib-2.0;../contrib/lib/glib-2.0/include;../contrib/include;../contrib/include/libpng12;../contrib/include/libxml2;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;_USE_32BIT_TIME_T;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;strftime=strftime_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <PrecompiledHeader />
+      <PrecompiledHeaderFile />
+      <ProgramDataBaseFileName>$(IntDir)librrd-4.pdb</ProgramDataBaseFileName>
+      <WarningLevel>TurnOffAllWarnings</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <CompileAs>CompileAsCpp</CompileAs>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <DisableLanguageExtensions>false</DisableLanguageExtensions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>cairo.lib;glib-2.0.lib;gobject-2.0.lib;libpng.lib;libxml2.lib;pango-1.0.lib;ws2_32.lib;pangocairo-1.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>../contrib/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <ModuleDefinitionFile>librrd-4.def</ModuleDefinitionFile>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\hash_32.c" />
+    <ClCompile Include="..\src\mkstemp.c" />
+    <ClCompile Include="..\src\mutex.c" />
+    <ClCompile Include="..\src\plbasename.c" />
+    <ClCompile Include="..\src\pngsize.c" />
+    <ClCompile Include="..\src\rrd_client.c" />
+    <ClCompile Include="..\src\rrd_create.c" />
+    <ClCompile Include="..\src\rrd_diff.c" />
+    <ClCompile Include="..\src\rrd_dump.c" />
+    <ClCompile Include="..\src\rrd_error.c" />
+    <ClCompile Include="..\src\rrd_fetch.c" />
+    <ClCompile Include="..\src\rrd_fetch_cb.c" />
+    <ClCompile Include="..\src\rrd_first.c" />
+    <ClCompile Include="..\src\rrd_flushcached.c" />
+    <ClCompile Include="..\src\rrd_format.c" />
+    <ClCompile Include="..\src\rrd_getopt.c" />
+    <ClCompile Include="..\src\rrd_getopt1.c" />
+    <ClCompile Include="..\src\rrd_gfx.c" />
+    <ClCompile Include="..\src\rrd_graph.c" />
+    <ClCompile Include="..\src\rrd_graph_helper.c" />
+    <ClCompile Include="..\src\rrd_hw.c" />
+    <ClCompile Include="..\src\rrd_hw_math.c" />
+    <ClCompile Include="..\src\rrd_hw_update.c" />
+    <ClCompile Include="..\src\rrd_info.c" />
+    <ClCompile Include="..\src\rrd_last.c" />
+    <ClCompile Include="..\src\rrd_lastupdate.c" />
+    <ClCompile Include="..\src\rrd_modify.c" />
+    <ClCompile Include="..\src\rrd_nan_inf.c" />
+    <ClCompile Include="..\src\rrd_open.c" />
+    <ClCompile Include="..\src\rrd_parsetime.c" />
+    <ClCompile Include="..\src\rrd_resize.c" />
+    <ClCompile Include="..\src\rrd_restore.c" />
+    <ClCompile Include="..\src\rrd_rpncalc.c" />
+    <ClCompile Include="..\src\rrd_snprintf.c" />
+    <ClCompile Include="..\src\rrd_strtod.c" />
+    <ClCompile Include="..\src\rrd_thread_safe_nt.c" />
+    <ClCompile Include="..\src\rrd_tune.c" />
+    <ClCompile Include="..\src\rrd_update.c" />
+    <ClCompile Include="..\src\rrd_utils.c" />
+    <ClCompile Include="..\src\rrd_version.c" />
+    <ClCompile Include="..\src\rrd_xport.c" />
+    <ClCompile Include="..\src\strftime.c" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\mkstemp.h" />
+    <ClInclude Include="..\src\mutex.h" />
+    <ClInclude Include="..\src\rrd_modify.h" />
+    <ClInclude Include="rrd_config.h" />
+    <ClInclude Include="..\src\fnv.h" />
+    <ClInclude Include="..\src\plbasename.h" />
+    <ClInclude Include="..\src\rrd.h" />
+    <ClInclude Include="..\src\rrd_format.h" />
+    <ClInclude Include="..\src\rrd_getopt.h" />
+    <ClInclude Include="..\src\rrd_graph.h" />
+    <ClInclude Include="..\src\rrd_hw.h" />
+    <ClInclude Include="..\src\rrd_hw_math.h" />
+    <ClInclude Include="..\src\rrd_hw_update.h" />
+    <ClInclude Include="..\src\rrd_i18n.h" />
+    <ClInclude Include="..\src\rrd_is_thread_safe.h" />
+    <ClInclude Include="..\src\rrd_parsetime.h" />
+    <ClInclude Include="..\src\rrd_rpncalc.h" />
+    <ClInclude Include="..\src\rrd_tool.h" />
+    <ClInclude Include="..\src\rrd_xport.h" />
+    <ClInclude Include="..\src\strftime.h" />
+    <ClInclude Include="..\src\unused.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="librrd-4.def" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/win32/librrd-4.vcxproj.user b/win32/librrd-4.vcxproj.user
new file mode 100644 (file)
index 0000000..ef5ff2a
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup />
+</Project>
\ No newline at end of file
diff --git a/win32/rrd.sln b/win32/rrd.sln
new file mode 100644 (file)
index 0000000..c421928
--- /dev/null
@@ -0,0 +1,51 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.30110.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "librrd-4", "librrd-4.vcxproj", "{CC158E1D-1364-43CA-9B2D-4AF54225C7CA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rrdtool", "rrdtool.vcxproj", "{11CD05F8-E5E1-476E-A75F-A112655D4E94}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rrdupdate", "rrdupdate.vcxproj", "{3AAE1E07-78D7-420D-968B-D2087D732D3B}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               DebugDLL|Win32 = DebugDLL|Win32
+               Release|Win32 = Release|Win32
+               ReleaseDLL|Win32 = ReleaseDLL|Win32
+               Static Debug|Win32 = Static Debug|Win32
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {CC158E1D-1364-43CA-9B2D-4AF54225C7CA}.Debug|Win32.ActiveCfg = Debug|Win32
+               {CC158E1D-1364-43CA-9B2D-4AF54225C7CA}.Debug|Win32.Build.0 = Debug|Win32
+               {CC158E1D-1364-43CA-9B2D-4AF54225C7CA}.DebugDLL|Win32.ActiveCfg = DebugDLL|Win32
+               {CC158E1D-1364-43CA-9B2D-4AF54225C7CA}.DebugDLL|Win32.Build.0 = DebugDLL|Win32
+               {CC158E1D-1364-43CA-9B2D-4AF54225C7CA}.Release|Win32.ActiveCfg = Release|Win32
+               {CC158E1D-1364-43CA-9B2D-4AF54225C7CA}.Release|Win32.Build.0 = Release|Win32
+               {CC158E1D-1364-43CA-9B2D-4AF54225C7CA}.ReleaseDLL|Win32.ActiveCfg = ReleaseDLL|Win32
+               {CC158E1D-1364-43CA-9B2D-4AF54225C7CA}.ReleaseDLL|Win32.Build.0 = ReleaseDLL|Win32
+               {CC158E1D-1364-43CA-9B2D-4AF54225C7CA}.Static Debug|Win32.ActiveCfg = Static Debug|Win32
+               {CC158E1D-1364-43CA-9B2D-4AF54225C7CA}.Static Debug|Win32.Build.0 = Static Debug|Win32
+               {11CD05F8-E5E1-476E-A75F-A112655D4E94}.Debug|Win32.ActiveCfg = Debug|Win32
+               {11CD05F8-E5E1-476E-A75F-A112655D4E94}.Debug|Win32.Build.0 = Debug|Win32
+               {11CD05F8-E5E1-476E-A75F-A112655D4E94}.DebugDLL|Win32.ActiveCfg = Debug|Win32
+               {11CD05F8-E5E1-476E-A75F-A112655D4E94}.Release|Win32.ActiveCfg = Release|Win32
+               {11CD05F8-E5E1-476E-A75F-A112655D4E94}.Release|Win32.Build.0 = Release|Win32
+               {11CD05F8-E5E1-476E-A75F-A112655D4E94}.ReleaseDLL|Win32.ActiveCfg = Release|Win32
+               {11CD05F8-E5E1-476E-A75F-A112655D4E94}.Static Debug|Win32.ActiveCfg = Static Debug|Win32
+               {11CD05F8-E5E1-476E-A75F-A112655D4E94}.Static Debug|Win32.Build.0 = Static Debug|Win32
+               {3AAE1E07-78D7-420D-968B-D2087D732D3B}.Debug|Win32.ActiveCfg = Debug|Win32
+               {3AAE1E07-78D7-420D-968B-D2087D732D3B}.Debug|Win32.Build.0 = Debug|Win32
+               {3AAE1E07-78D7-420D-968B-D2087D732D3B}.DebugDLL|Win32.ActiveCfg = Debug|Win32
+               {3AAE1E07-78D7-420D-968B-D2087D732D3B}.Release|Win32.ActiveCfg = Release|Win32
+               {3AAE1E07-78D7-420D-968B-D2087D732D3B}.Release|Win32.Build.0 = Release|Win32
+               {3AAE1E07-78D7-420D-968B-D2087D732D3B}.ReleaseDLL|Win32.ActiveCfg = Release|Win32
+               {3AAE1E07-78D7-420D-968B-D2087D732D3B}.Static Debug|Win32.ActiveCfg = Static Debug|Win32
+               {3AAE1E07-78D7-420D-968B-D2087D732D3B}.Static Debug|Win32.Build.0 = Static Debug|Win32
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
index a8f289fbef4c45a4b5d0168df0203c502fb4b4d0..01647fa36fc85d13ca189f2ac59e333283531d74 100644 (file)
@@ -82,6 +82,9 @@
 /* Define to 1 if you have the <sys/stat.h> header file. */
 #define HAVE_SYS_STAT_H 1
 
+/* Define to 1 if you have the <stdarg.h> header file. */
+#define HAVE_STDARG_H 1
+
 /* is there an external timezone variable instead ? */
 #define HAVE_TIMEZONE 1
 
 #define ENOBUFS WSAENOBUFS
 #define ENOTCONN WSAENOTCONN
 
+
 #include <ctype.h>
 #include <direct.h>
 #include <float.h>
 #include <math.h>
+#include <io.h>
+#include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <WinSock.h>
 
+
+#include <errno.h>
+#include "mkstemp.h"
+
+
 #define isinf(a) (_fpclass(a) == _FPCLASS_NINF || _fpclass(a) == _FPCLASS_PINF)
 #define isnan _isnan
 #define finite _finite
 #define strcasecmp _stricmp
 #define strcasencmp _strnicmp
 
-#pragma warning(disable: 4244)
-__inline int round(double a){ return (int) (a + 0.5); }
+// in MSVC++ 12.0 / Visual Studio 2013 is a definition of round in math.h
+// some values of _MSC_VER
+//MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013)
+//MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012)
+//MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010)
+//MSVC++ 9.0  _MSC_VER == 1500 (Visual Studio 2008)
+//MSVC++ 8.0  _MSC_VER == 1400 (Visual Studio 2005)
+//MSVC++ 7.1  _MSC_VER == 1310 (Visual Studio 2003)
+//MSVC++ 7.0  _MSC_VER == 1300
+//MSVC++ 6.0  _MSC_VER == 1200
+//MSVC++ 5.0  _MSC_VER == 1100
+#if _MSC_VER < 1800
+__inline int round(double a){ int x = (a + 0.5); return x; }
+#endif
 
 #endif
diff --git a/win32/rrdtool.sln b/win32/rrdtool.sln
new file mode 100644 (file)
index 0000000..855e165
--- /dev/null
@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.30110.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rrdtool", "rrdtool.vcxproj", "{11CD05F8-E5E1-476E-A75F-A112655D4E94}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Release|Win32 = Release|Win32
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {11CD05F8-E5E1-476E-A75F-A112655D4E94}.Debug|Win32.ActiveCfg = Debug|Win32
+               {11CD05F8-E5E1-476E-A75F-A112655D4E94}.Debug|Win32.Build.0 = Debug|Win32
+               {11CD05F8-E5E1-476E-A75F-A112655D4E94}.Release|Win32.ActiveCfg = Release|Win32
+               {11CD05F8-E5E1-476E-A75F-A112655D4E94}.Release|Win32.Build.0 = Release|Win32
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/win32/rrdtool.vcxproj b/win32/rrdtool.vcxproj
new file mode 100644 (file)
index 0000000..1751954
--- /dev/null
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Static Debug|Win32">
+      <Configuration>Static Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{11CD05F8-E5E1-476E-A75F-A112655D4E94}</ProjectGuid>
+    <RootNamespace>rrdtool</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Static Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Static Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.21005.1</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(Configuration)\</OutDir>
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)$(Configuration)\</OutDir>
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Static Debug|Win32'">
+    <OutDir>$(SolutionDir)$(Configuration)\</OutDir>
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <InlineFunctionExpansion>Default</InlineFunctionExpansion>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USE_32BIT_TIME_T;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <ProgramDataBaseFileName>$(IntDir)rrdtool.pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>librrd-4.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <ShowProgress>LinkVerboseLib</ShowProgress>
+      <AdditionalLibraryDirectories>$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <IgnoreSpecificDefaultLibraries>LIBCMTD.lib;LIBCMT.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>NotSet</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Message>get all the dlls, needed for running</Message>
+      <Command>copy $(ProjectDir)\..\contrib\bin\freetype6.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libcairo-2.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libfontconfig-1.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libglib-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libgmodule-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libgobject-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libgthread-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpango-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpangocairo-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpangoft2-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpangowin32-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpng14-14.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libxml2-2.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\zlib1.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libexpat-1.dll $(TargetDir)\
+</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <AdditionalIncludeDirectories>.;../../contrib/cairo/include/cairo;../../contrib/pango/include/pango-1.0;../../contrib/glib/include/glib-2.0;../../contrib/glib/lib/glib-2.0/include;../../contrib/libpng/include;../../contrib/zlib/include;../../contrib/libxml2/include/libxml2;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;_USE_32BIT_TIME_T;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <ProgramDataBaseFileName>$(IntDir)rrdtool.pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>librrd-4.lib;cairo.lib;pango-1.0.lib;pangocairo-1.0.lib;libpng.lib;zdll.lib;glib-2.0.lib;gobject-2.0.lib;libxml2.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Configuration); ../contrib/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>false</GenerateDebugInformation>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Message>get all the dlls, needed for running</Message>
+      <Command>copy $(ProjectDir)\..\contrib\bin\freetype6.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libcairo-2.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libfontconfig-1.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libglib-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libgmodule-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libgobject-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libgthread-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpango-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpangocairo-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpangoft2-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpangowin32-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpng14-14.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libxml2-2.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\zlib1.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libexpat-1.dll $(TargetDir)\
+</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Static Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <InlineFunctionExpansion>Default</InlineFunctionExpansion>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>librrd-4.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <ShowProgress>LinkVerboseLib</ShowProgress>
+      <AdditionalLibraryDirectories>$(Configuration);../contrib/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>NotSet</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Message>get all the dlls, needed for running</Message>
+      <Command>copy $(ProjectDir)\..\contrib\bin\freetype6.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libcairo-2.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libfontconfig-1.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libglib-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libgmodule-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libgobject-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libgthread-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpango-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpangocairo-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpangoft2-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpangowin32-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpng14-14.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libxml2-2.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\zlib1.dll $(TargetDir)\
+
+
+</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\rrd_tool.c" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="rrd_config.h" />
+    <ClInclude Include="..\src\rrd_tool.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="librrd-4.vcxproj">
+      <Project>{cc158e1d-1364-43ca-9b2d-4af54225c7ca}</Project>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/win32/rrdupdate.sln b/win32/rrdupdate.sln
new file mode 100644 (file)
index 0000000..9e8921a
--- /dev/null
@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.30110.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rrdupdate", "rrdupdate.vcxproj", "{3AAE1E07-78D7-420D-968B-D2087D732D3B}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Release|Win32 = Release|Win32
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {3AAE1E07-78D7-420D-968B-D2087D732D3B}.Debug|Win32.ActiveCfg = Debug|Win32
+               {3AAE1E07-78D7-420D-968B-D2087D732D3B}.Debug|Win32.Build.0 = Debug|Win32
+               {3AAE1E07-78D7-420D-968B-D2087D732D3B}.Release|Win32.ActiveCfg = Release|Win32
+               {3AAE1E07-78D7-420D-968B-D2087D732D3B}.Release|Win32.Build.0 = Release|Win32
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/win32/rrdupdate.vcxproj b/win32/rrdupdate.vcxproj
new file mode 100644 (file)
index 0000000..8135a1c
--- /dev/null
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Static Debug|Win32">
+      <Configuration>Static Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{3AAE1E07-78D7-420D-968B-D2087D732D3B}</ProjectGuid>
+    <RootNamespace>rrdtool</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Static Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Static Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.21005.1</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(Configuration)\</OutDir>
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)$(Configuration)\</OutDir>
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Static Debug|Win32'">
+    <OutDir>$(SolutionDir)$(Configuration)\</OutDir>
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <InlineFunctionExpansion>Default</InlineFunctionExpansion>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <ProgramDataBaseFileName>$(IntDir)rrdupdate.pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>librrd-4.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <ShowProgress>LinkVerboseLib</ShowProgress>
+      <AdditionalLibraryDirectories>$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <IgnoreSpecificDefaultLibraries>LIBCMTD.lib;LIBCMT.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>NotSet</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Message>get all the dlls, needed for running</Message>
+      <Command>copy $(ProjectDir)\..\contrib\bin\freetype6.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libcairo-2.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libfontconfig-1.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libglib-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libgmodule-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libgobject-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libgthread-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpango-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpangocairo-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpangoft2-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpangowin32-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpng14-14.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libxml2-2.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\zlib1.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libexpat-1.dll $(TargetDir)\
+</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <AdditionalIncludeDirectories>.;../../contrib/cairo/include/cairo;../../contrib/pango/include/pango-1.0;../../contrib/glib/include/glib-2.0;../../contrib/glib/lib/glib-2.0/include;../../contrib/libpng/include;../../contrib/zlib/include;../../contrib/libxml2/include/libxml2;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <ProgramDataBaseFileName>$(IntDir)rrdupdate.pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>librrd-4.lib;cairo.lib;pango-1.0.lib;pangocairo-1.0.lib;libpng.lib;zdll.lib;glib-2.0.lib;gobject-2.0.lib;libxml2.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(Configuration); ../contrib/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Message>get all the dlls, needed for running</Message>
+      <Command>copy $(ProjectDir)\..\contrib\bin\freetype6.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libcairo-2.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libfontconfig-1.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libglib-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libgmodule-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libgobject-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libgthread-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpango-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpangocairo-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpangoft2-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpangowin32-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpng14-14.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libxml2-2.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\zlib1.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libexpat-1.dll $(TargetDir)\
+</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Static Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <InlineFunctionExpansion>Default</InlineFunctionExpansion>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>librrd-4.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <ShowProgress>LinkVerboseLib</ShowProgress>
+      <AdditionalLibraryDirectories>$(Configuration);../contrib/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>NotSet</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Message>get all the dlls, needed for running</Message>
+      <Command>copy $(ProjectDir)\..\contrib\bin\freetype6.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libcairo-2.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libfontconfig-1.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libglib-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libgmodule-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libgobject-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libgthread-2.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpango-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpangocairo-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpangoft2-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpangowin32-1.0-0.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libpng14-14.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\libxml2-2.dll $(TargetDir)\
+copy $(ProjectDir)\..\contrib\bin\zlib1.dll $(TargetDir)\
+
+
+</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\rrdupdate.c" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="rrd_config.h" />
+    <ClInclude Include="..\src\rrd_tool.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="librrd-4.vcxproj">
+      <Project>{cc158e1d-1364-43ca-9b2d-4af54225c7ca}</Project>
+    </ProjectReference>
+    <ProjectReference Include="rrdtool.vcxproj">
+      <Project>{11cd05f8-e5e1-476e-a75f-a112655d4e94}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file