diff --git a/msvc/README-MSVC.txt b/msvc/README-MSVC.txt index 2587d3c5..da57e5d0 100644 --- a/msvc/README-MSVC.txt +++ b/msvc/README-MSVC.txt @@ -1,6 +1,91 @@ Notes about msvc build of exiv2 ------------------------------- +Code base: trunk/1657 +Sunday 20081101 22:30PST + +Changes since 20081101 17.00PST +------------------------------- + +1 Don't copy src\*_int.hpp to msvc/include/exiv2 directory + +2 Test Builds 2008 2005 2003 + Batch Build All Y Y Y + +3 Partial builds: select target/config + build (clean build) + exifprint Debug Y Y Y+W + DebugDLL Y Y Y + Release Y Y Y+W + ReleaseDLL Y Y Y + + exiv2 Debug Y Y Y+W + DebugDLL Y Y + Release Y Y Y+W + ReleaseDLL Y Y Y + + W = Warnings about multiple-defined externals + MSVC is linking expat twice. + +Changes since 20081030 +---------------------- + +1) zlib directory + zlib now lives in c:\gnu\zlib-1.2.3 + +2) Removed unnecessary copying of exv_msvc.h to msvc/include directory + +3) Investigated linker /EDITANDCONTINUE warning + For example: exiv2.lib(xmlparse.obj) : warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/INCREMENTAL:NO' specification + Cannot fix. It's coming from expat/expat-static Debug builds + Fix is to modify expat/expat-static.vcproj Compiler/Generaral/Debug Information ZI (not Zi) + +4) Investigated what happens when expat isn't built! + - documented below. + +5) Tested more 'partial' target builds + Tested: + { exiv2 |exiv2print } + { Debug | Release | DebugDLL | ReleaseDLL } Manual build (F7) + { Debug | Release | DebugDLL | ReleaseDLL } using Batch/Build + { VS 2003 | 2005 | 2008 } + + 2*3*8 = 48 partial builds + (and of course 3 full builds) + + VC71 (VS 2003) in not good at dependancies. On a 'clean' directory: + If I select exifprint+Debug Build (or Release or DebugDLL or ReleaseDLL) it builds successfully + If I use Batch Build/ and select exifprint { Debug etc } all 4 targets fail to build! + VC71 is not attempting to build the dependant sub projects. + + VC8 and VC9 (VS 2005 and 2008) are working fine. Both report + ========== Build: 14 succeeded, 0 failed, 0 up-to-date, 0 skipped ========== + + I think the Batch/Build feature in VC71 simply builds (It omits dependancy analysis). + I don't intend to do any more work on this on VC71. + +6) I did some debugging + exiv2.exe and exifprint.exe (Debug/DebugDLL on VS/2005) + + I was surprised when all .exe's relinked when I changed library code (not only the target .exe) + I'll have to investigate this. I'll fix this when I investigate the crashing DLLs + +Priorities for 0.18final +------------------------ + +1 Remove zlib4exiv2 project (see note below) +2 Get rid of the linker warnings with VS/2003 +3 Investigate the crashes in the DLLs (see Known Issue) +4 Improve the debugging experience +- dont relink every .exe when library code modified +5 Reduce the disk footprint (use less disk space) +6 Make the test program longer and deeper +7 Build and test pyexiv2 and exiv2net +- We're not going to distribute pyexiv2 or exiv2net +- I'd like to test that those work correctly with our builds +8 Maybe build and test MD (MDd) libraries +- this probably quite a lot of work +- would really like a solid 'customer' request for this + Tools ----- @@ -21,7 +106,7 @@ How to build and test nor does it have to be a topmost directory. c:\gnu\expat-2.0.1 <---- vanilla expat - c:\gnu\zlib <---- vanilla zlib + c:\gnu\zlib-1.2.3 <---- vanilla zlib c:\gnu\exiv2 <---- this directory 2) Build expat. See there for details. Something like this usually works: @@ -30,11 +115,12 @@ How to build and test project files Say "Yes" to everything. - Build/Batch Build/Select { debug | release } { expat | expat-static } - (4 targets) / Build + Build/Batch Build/Select + { debug | release } { expat | expat-static } (4 targets) + / Build Rattle roll.... less than a minute ...... rattle grrrrrrrr rump. - ========== Build: 4 succeeded, 0 failed, 0 up-to-date, 0 skipped ========== + ========== Build: 4 succeeded, 0 failed, 0 up-to-date, 0 skipped ========== 3) Open the sln file exiv2\msvc\exiv2.sln On VS2005 and up, the Wizard will offer to upgrade the project files. @@ -45,9 +131,21 @@ How to build and test This will build all the necessary libraries and all the test programs. At the end of building, you should see the beautiful output: - ========== Build: 94 succeeded, 0 failed, 0 up-to-date, 0 skipped ========== + ========== Build: 94 succeeded, 0 failed, 0 up-to-date, 0 skipped ========== + + If the build finishes: + Linking... + LINK : fatal error LNK1181: cannot open input file '..\exiv2lib\Debug\exiv2.lib' + Creating browse information file... + Microsoft Browse Information Maintenance Utility Version 8.00.50727 + Copyright (C) Microsoft Corporation. All rights reserved. + Build log was saved at "file://c:\gnu\exiv2\msvc\exifprint\Debug\BuildLog.htm" + exifprint - 1 error(s), 0 warning(s) + ========== Build: 6 succeeded, 88 failed, 0 up-to-date, 0 skipped ========== + + Then you probably forgot to build expat. Repeat steps 2 and 4. - The build take 6 minutes on my iMac with a 2.8GHz Duo Core Intel Processor + The build takes 6 minutes on my iMac with a 2.8GHz Duo Core Intel Processor and 4GBytes of Ram. (VS 2005 and VS 2008) And about 16 minutes on my elderly 2003 laptop (VS 2003 .Net) @@ -62,7 +160,7 @@ How to build and test The total build consumes 1.2GBytes of disk space. There are 94 targets. The pdb (debugging) files consume 400MB. - The debug exiv2 library (exiv2.lib) is 40MB + The debug exiv2 library alone (exiv2.lib) is 40MB A more modest build is to build exiv2 { Debug | Release | DebugDLL | ReleaseDLL } This consumes: 420MB @@ -101,17 +199,18 @@ Where are the libraries and executables? exiv2\msvc\bin\{Debug | DebugDLL | Release | ReleaseDLL } -What's been built ------------------ +What's been built? +------------------ Static and dynamic version of exiv2, expat, zlib and the exiv2 sample programs Debug and Release versions of all targets Everything is built as MT (MTd for Debug). The objects are built with the Static C runtime Libraries. -DLL targets link dynamically (exiv2.exe requires libexpat.dll, exiv2.dll and -zlib4exiv2.dll) -Static targets are statically linked (exiv2.exe has no dependancies. +DLL targets link dynamically +- exiv2.exe requires libexpat.dll, exiv2.dll and zlib4exiv2.dll +Static targets are statically linked +- exiv2.exe has no dependant DLLs. I've added a note at the bottom about zlib4exiv2.dll @@ -152,23 +251,6 @@ Information/Documentation : http://www.exiv2.org/index.html Discussion Forum : http://uk.groups.yahoo.com/group/exiv2/ The MSVC build environment : Please contact me directly by email. -To be done (hopefully for 0.18final) ------------------------------------ - -1 Remove zlib4exiv2 project (see note below) -2 Tidy up a little -- Fix the linker editcontinue warning (trivial) -- Reduce the disk demands of the build (see note below) -- Do some debugging (check that it debugs, links, builds OK) -- Test more 'partial' targets -- See what happens when expat isn't built! -3 Investigate the crashes in the DLLs (see Known Issue) -4 Make the test program much longer and deeper -5 Build and test pyexiv2 and exiv2net -- We're not going to distribute pyexiv2 or exiv2net -- I'd like to test that those work correctly with our builds -6 Maybe build and test MD (MDd) libraries (probably quite a lot of work) - Robin Mills robin@clanmills.com http://clanmills.com @@ -196,7 +278,7 @@ Reducing the disk demands At the moment, I build every target into it's own directory and then copy it to the bin directory. -For example: exiv2/msvc/exiv2.lib -> debug/exiv2.lib = copy => exiv2/msvc/bin/debug/exiv2.lib +For example: exiv2/msvc/exiv2.lib --outputs--> debug/exiv2.lib ==copies==> exiv2/msvc/bin/debug/exiv2.lib I did this for a good reasons at the time. I think I'll revisit this and build into the bin. This will save about 100-200MB of disk space on a complete build (10%-20%) diff --git a/msvc/addmoddel/addmoddel.vcproj b/msvc/addmoddel/addmoddel.vcproj index 2ae724d2..954ea071 100644 --- a/msvc/addmoddel/addmoddel.vcproj +++ b/msvc/addmoddel/addmoddel.vcproj @@ -43,7 +43,7 @@ diff --git a/msvc/exiv2lib/exiv2lib.vcproj b/msvc/exiv2lib/exiv2lib.vcproj index 31e47cc3..793aa05b 100644 --- a/msvc/exiv2lib/exiv2lib.vcproj +++ b/msvc/exiv2lib/exiv2lib.vcproj @@ -26,7 +26,7 @@ > @@ -566,7 +566,7 @@ > + @@ -248,7 +248,7 @@ Optimization="2" EnableIntrinsicFunctions="true" WholeProgramOptimization="false" - AdditionalIncludeDirectories="..\..\..\zlib" + AdditionalIncludeDirectories="../include;../include/exiv2;../../xmpsdk/include;../../xmpsdk/src;../../../expat-2.0.1/lib;../../../zlib-1.2.3;" PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS" RuntimeLibrary="0" EnableFunctionLevelLinking="true" @@ -267,9 +267,7 @@ /> + @@ -304,55 +305,55 @@ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" > @@ -362,47 +363,47 @@ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" >