Updated documentation

This commit is contained in:
Sridhar Boovaraghavan 2020-04-22 11:07:35 +05:30
parent 3bcc6c8156
commit 84dd66fef4

View File

@ -1,27 +1,12 @@
# exiv2-x86_x64
Visual Studio project files to compile exiv2 on Windows (x86/x64/Release/Debug)
# Motivation #
I use Visual Studio on Windows for my personal product development. I
needed to use exiv2 for a project to sync my photographs in
[Picasa](https://picasa.google.com/)[^1] to
[Piwigo](https://github.com/Piwigo/). I use Piwigo, running on my own
server, because I do not want to share my family photographs in
platforms like facebook, google photos, instagram, whatsapp etc. For
the same privacy concerns, this piwigo gallery on my server is not
public and is accessed through credentials shared only with family.
## Background ##
I started this project quite a while ago (mid-2016). I got it to a
working state by the end of 2019, mostly because it has been hard to
find solid time to devote to this. Needless to say, there was nothing
that did exactly what I wanted and few other projects that did some of
what I needed. I borrowed liberally to cobble up this solution.
One of the main building blocks was exiv2. When I started this
project, support for building on Windows using Visual Studio was quite
good and in particular, [Robin Mills](https://github.com/clanmills),
the then maintainer, was excellent in helping resolve questions.
One of the main building blocks for a personal product that I was
developing was exiv2. When I started this project, support for
building on Windows using Visual Studio was quite good and in
particular, [Robin Mills](https://github.com/clanmills), the then
maintainer, was excellent in helping resolve questions.
However, as time progressed, the maintainers changed and their primary
focus turned to Linux and Windows compilation was an afterthought
@ -45,10 +30,6 @@ utility of the product is diminished. This project is to help people
who would like to build exiv2 using Visual Studio on Windows, to do
so.
**Note** As the code in the master exiv2 repository changes, these
project files may not work out of the box. However, with small
changes, they could be made to work with the latest.
## Building Philosophy ##
Unlike the linux-style philosophy of installing everything in and then,
linking from, /usr/local-type folders, typically source trees on
@ -82,12 +63,149 @@ expat-static project is added as a reference to the exiv2
project. This make Visual Studio generate the correct dependency
heirarchy and compile correctly.
# Folder Structure #
Because these are project files that are pre-generated, they expect
exiv2 and its dependencies to be placed in a certain hierarchy.
Each of the dependencies will have to be placed at the same level as
the exiv2 source tree.
For e.g.
C:\Sources\exiv2
C:\Sources\zlib
C:\Sources\openssl
C:\Sources\libssh2
and so on. The requirement that it be at the same level as the exiv2
source tree is only mandated in a relative sense. That is, you could
have your exiv2 sources in C:\Sources or E:\Projects or
C:\Users\Sridhar\Documents\VS\exiv2. There are problems with spaces in
directory names, because there are some commands executed through
utilities like perl which may not handle them well. Please don't use
spaces.
## VS solution/projects for dependencies ##
Just like the solution/project file to compile exiv2 in VS (the one
that you are reading about now), most dependencies also have similar
VS solution/project files, because their VS-build infrastructure is
deficient. Specific instructions on fetching these project files
separately and copying them to the source tree is given below for each
dependency. I fetch these *-x86_x64 repositories into a separate
folder from these other source folders. For e.g., I keep these in
E:\Projects\github. Whereas the sources are in E:\Projects.
Theoretically, just fetching these dependency sources, placing them in
the correct folder hierarchies, fetching their associated VS project
files and placing them in the source tree in specific folders
(detailed below) should be enough to compile exiv2 directly. exiv2
links against static libraries of these dependencies. However, these
dependencies are full-fledged distributions that contain, apart from
those libraries that exiv2 needs, other executables and tests. These
can be compiled, optionally, if one needs to test the integrity of
those projects.
## Dependency Order ##
Some of these dependencies depend on other dependencies. Thus, it is
best if they are executed in the order shown below.
# Dependencies #
* [Strawberry Perl, used v5.30.1.1 x64](strawberryperl.com)
* [NASM, used 2.14.02 x64](https://www.nasm.us/)
* [Visual Studio, used Community 2019 edition](https://visualstudio.microsoft.com/)
* [zlib, tested w/ v1.2.11](https://github.com/madler/zlib.git)
* Optionally, switch the git tree to the 1.2.11 branch.
* Use my [zlib-x86_x64](https://github.com/sridharb1/zlib-x86_x64)
to compile on Windows using Visual Studio
* Copy the contents of this folder into the contrib folder
of the zlib repository. Thus, the contrib/vc14 folder of
zlib-x86_x64 should overwrite the same in zlib.
* Optionally, use zlibvc.sln to compile.
* [libexpat, tested w/ v2.2.9](https://github.com/libexpat/libexpat)
* Optionally, switch the git tree to the R_2_2_9 branch.
* Use my
[libexpat-x86_x64](https://github.com/sridharb1/libexpat-x86_x64)
to compile on Windows using Visual Studio
* Copy the build folder of libexpat-x86_x64 into the libexpat
source tree.
* Optionally, use expat.sln to compile.
* [OpenSSL, tested w/ v1.1.1g-DEV](https://github.com/openssl/openssl)
* Optionally, switch the git tree to the OpenSSL_1_1_1-stable branch.
* Use my
[openssl-x86_x64](https://github.com/sridharb1/openssl-x86_x64)
to compile on Windows using Visual Studio
* Copy the build folder of openssl-x86_x64 into the openssl tree.
* Optionally, use openssl1_1.sln to compile.
* [libssh, tested w/ v0.9.3](https://git.libssh.org/projects/libssh.git/)
* Optionally, switch the git tree to the stable-0.9 branch.
* Use my
[libssh-x86_x64](https://github.com/sridharb1/libssh-x86_x64.git)
to compile on Windows using Visual Studio
* Copy the build folder of libssh-x86_x64 into the libssh source tree.
* Optionally, use libssh.sln to compile.
* [libssh2, tested w/ v1.9.0](https://github.com/libssh2/libssh2.git)
* Optionally, switch the git tree to the libssh2-1.9.0 branch.
* Use my
[libssh2-x86_x64](https://github.com/sridharb1/libssh2-x86_x64.git)
to compile on Windows using Visual Studio
* Copy the build folder of libssh2-x86_x64 into the libssh2 source tree.
* Optionally, use libssh2.sln to compile.
* [brotli, tested w/ v1.0.7+](https://github.com/google/brotli)
* Use my
[brotli-x86_x64](https://github.com/sridharb1/brotli-x86_x64.git)
to compile on Windows using Visual Studio
* Copy the build_folder folder of brotli-x86_x64 into the brotli source tree.
* Optionally, use brotli.sln to compile.
* [curl, tested w/ v7.69.1](https://github.com/curl/curl.git)
* Optionally, switch the git tree to the 7_69_1 branch.
* Use my
[curl-x86_x64](https://github.com/sridharb1/curl-x86_x64.git)
to compile on Windows using Visual Studio
* Copy the contents of this folder into the **projects/Windows/VC15**
folder of the curl source tree. *Note: instructions different
from other projects*
* Optionally, use curl_all.sln to compile.
* [googletest, tested w/ v1.10.x](https://github.com/google/googletest.git)[^8]
* Optionally, switch the git tree to the v1.10.x branch.
* Use my
[googletest-x86_x64](https://github.com/sridharb1/googletest-x86_x64.git)
to compile on Windows using Visual Studio
* Copy the build folder of googletest-x86_x64 into the googletest source tree.
* Optionally, use googletest-distribution.sln to compile.
* [libintl (aka gettext), tested with v0.20.1](https://git.savannah.gnu.org/git/gettext.git)
* When you clone gettext, you might also clone a submodule called
gnulib. This is not necessary. You can turn off the recursive
flag while cloning.
* Optionally, switch the git tree to the 0.20.1 branch.
* Use my
[gettext-x86_x64](https://github.com/sridharb1/gettext-x86_x64)
to compile on Windows using Visual Studio
* Copy the build folder into the root folder of gettext source tree.
* Optionally, use gettext.sln to compile.
* [libiconv, tested w/ v1.16](https://github.com/sridharb1/libiconv-x86_x64)
* This dependency is a little different from the others in the
sense that in the others, you fetch the source and the VS
project files separately. In this case, this repository provides
both the source and the VS project files.
* Optionally, use libiconv.sln to compile.
# Sources #
* [Exiv2, tested w/ v0.27.2](https://github.com/Exiv2/exiv2)
* In v0.27.3, my solution/project files can be found in contrib/vs2019/solution
* For other versions, use my [exiv2-x86_x64](https://github.com/sridharb1/exiv2-x86_x64) to compile on Windows
* Place the contents of exiv2-x86_x64 in a folder called contrib/vs2019/solution in the exiv2 repository and build using the provided solution. Please note that the dependencies listed below are needed.
* `exiv2 -vV`
* For other versions, use my
[exiv2-x86_x64](https://github.com/sridharb1/exiv2-x86_x64) to
compile on Windows
* It may, in particular, not work for the HEAD or 0.28+ branches as
there have been incompatible changes made, that have not been
incorporated in these project files.
* Place the contents of exiv2-x86_x64 in a folder called
contrib/vs2019/solution in the exiv2 repository and build using
the provided solution. Please note that the dependencies listed
above are needed.
* `exiv2 -vV` (output of generated exiv2.exe on my machine for reference)
``` shell
exiv2 0.27.2
@ -250,44 +368,3 @@ heirarchy and compile correctly.
xmlns=xmpTPg:http://ns.adobe.com/xap/1.0/t/pg/
xmlns=xmpidq:http://ns.adobe.com/xmp/Identifier/qual/1.0/
```
# Dependencies #
* [zlib, tested w/ v1.2.11](https://github.com/madler/zlib.git)[^12]
* [Strawberry Perl, used v5.30.1.1 x64](strawberryperl.com)[^2]
* [NASM, used 2.14.02 x64](https://www.nasm.us/)[^3]
* [libexpat, tested w/ v2.2.9](https://github.com/libexpat/libexpat)[^4]
* [OpenSSL, tested w/ v1.1.1g-DEV](https://github.com/openssl/openssl)[^5]
* [libssh, tested w/ v0.9.3](https://git.libssh.org/projects/libssh.git/)[^10]
* [libssh2, tested w/ v1.9.0](https://github.com/libssh2/libssh2.git)[^6]
* [brotli, tested w/ v1.0.7+](https://github.com/google/brotli)[^11]
* [curl, tested w/ v7.69.1](https://github.com/curl/curl.git)[^7]
* [googletest, tested w/ v1.10.x](https://github.com/google/googletest.git)[^8]
* [libintl (aka gettext), tested with v0.20.1](https://git.savannah.gnu.org/git/gettext.git)[^9]
* [libiconv, tested w/ v1.16](https://github.com/sridharb1/libiconv-x86_x64)
* [Visual Studio, used Community 2019 edition](https://visualstudio.microsoft.com/)
[^1]: It has since been killed by google. (You can find the last released version here: [Picasa 3.9.141, build 259](https://1drv.ms/u/s!AuE8ZYzPkfMfiEzdlKtVVjN-MReT))
[^2]: I installed the binary distribution. perl is only used by the
openssl makefile to generate the initial configuration. Even this is
not necessary if the configuration that I chose applies to you.
[^3]: Binary distribution. See [^2].
[^4]: Use my [libexpat-x86_x64](https://github.com/sridharb1/libexpat-x86_x64) to compile on Windows using Visual Studio
[^5]: Use my [openssl-x86_x64](https://github.com/sridharb1/openssl-x86_x64) to compile on Windows using Visual Studio
[^6]: Use my [libssh2-x86_x64](https://github.com/sridharb1/libssh2-x86_x64.git) to compile on Windows using Visual Studio
[^7]: Use my [curl-x86_x64](https://github.com/sridharb1/curl-x86_x64.git) to compile on Windows using Visual Studio
[^8]: Use my [googletest-x86_x64](https://github.com/sridharb1/googletest-x86_x64.git) to compile on Windows using Visual Studio
[^9]: Use my [gettext-x86_x64](https://github.com/sridharb1/gettext-x86_x64) to compile on Windows using Visual Studio
[^10]: Use my [libssh-x86_x64](https://github.com/sridharb1/libssh-x86_x64.git) to compile on Windows using Visual Studio
[^11]: Use my [brotli-x86_x64](https://github.com/sridharb1/brotli-x86_x64)to compile on Windows using Visual Studio
[^12]: Use my [zlib-x86_x64](https://github.com/sridharb1/zlib-x86_x64)to compile on Windows using Visual Studio