From 75fb96990a3edc7ed2c216c9e89ec4769d1f505c Mon Sep 17 00:00:00 2001 From: oetiker Date: Tue, 15 Aug 2006 05:24:39 +0000 Subject: [PATCH] windows is not NT anymore ... lets call it WIN32 git-svn-id: svn://svn.oetiker.ch/rrdtool/branches/1.2/program@878 a5681a0c-68f1-0310-ab6d-d61299d08faa --- Makefile.am | 2 +- WIN32-BUILD-TIPS.txt | 223 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 224 insertions(+), 1 deletion(-) create mode 100644 WIN32-BUILD-TIPS.txt diff --git a/Makefile.am b/Makefile.am index de19d0f..ca96a3f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -5,7 +5,7 @@ RSYNC = rsync --rsh=ssh SUBDIRS = src bindings doc examples # the following files are not mentioned in any other Makefile -EXTRA_DIST = COPYRIGHT CHANGES NT-BUILD-TIPS.txt TODO CONTRIBUTORS THREADS \ +EXTRA_DIST = COPYRIGHT CHANGES WIN32-BUILD-TIPS.txt TODO CONTRIBUTORS THREADS \ rrdtool.spec confignt/config.h favicon.ico diff --git a/WIN32-BUILD-TIPS.txt b/WIN32-BUILD-TIPS.txt new file mode 100644 index 0000000..68b5373 --- /dev/null +++ b/WIN32-BUILD-TIPS.txt @@ -0,0 +1,223 @@ +Compiling RRDtool 1.1.x on Win32 with Microsoft Visual C++: +--------------------------------------------------------------- +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 /* for off_t */ +# include /* for SEEK_* and off_t */ +# ifdef VMS +# include /* 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 /* for off_t */ +# include /* for SEEK_* and off_t */ +# ifdef VMS +# include /* 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.pl +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 -- 2.30.2