Documentation update following review by Luis. Simplified command-line processing in build.sh

This commit is contained in:
Robin Mills 2018-10-18 10:49:40 +01:00 committed by Luis Díaz Más
parent 41d16d6ebd
commit ad155805dc
2 changed files with 117 additions and 151 deletions

215
README.md
View File

@ -7,22 +7,21 @@
1. [Welcome to Exiv2](#1)
2. [Building and Installing Exiv2](#2)
1. [Build/Install Exiv2 on a UNIX-like system](#2-1)
1. [Build/Install/Uninstall Exiv2 on a UNIX-like system](#2-1)
2. [Build/Install Exiv2 with Visual Studio](#2-2)
3. [Uninstall Exiv2 on a UNIX-like system](#2-3)
4. [Build Options](#2-4)
5. [Dependencies](#2-5)
6. [Consuming Exiv2 with CMake](#2-6)
7. [Building Exiv2 Documentation](#2-7)
8. [Building Exiv2 Packages](#2-8)
3. [License and Support](#2)
3. [Build Options](#2-3)
4. [Dependencies](#2-4)
5. [Consuming Exiv2 with CMake](#2-5)
6. [Building Exiv2 Documentation](#2-6)
7. [Building Exiv2 Packages](#2-7)
3. [License and Support](#3)
1. [License](#3-1)
2. [Support](#3-2)
4. [Platform Notes](#4)
1. [Linux](#4-1)
2. [MacOS-X](#4-2)
3. [MinGW/msys2](#4-3)
4. [Cygwin](#4-3)
3. [MinGW](#4-3)
4. [Cygwin](#4-4)
5. [Microsoft Visual C++](#4-5)
5. [Test Suit](#5)
1. [Running tests on a UNIX-like system](#5-1)
@ -33,68 +32,64 @@
![Exiv2](http://www.exiv2.org/include/exiv2-logo-big.png)
Exiv2 is a C++ library and a command line utility to read and
write Exif, IPTC and XMP image metadata. The homepage of Exiv2 is: https://github.com/Exiv2/exiv2
Exiv2 is a C++ library and a command line utility to read,
write, delete and modify Exif, IPTC, XMP and ICC image metadata.<br/>
The homepage of Exiv2 is: [https://github.com/Exiv2/exiv2](https://github.com/Exiv2/exiv2)
Downloads: [[Source](http://exiv2.dyndns.org/0.27.0.1/bundles/exiv2-0.27.0.1-Source.tar.gz)]
[[Linux](http://exiv2.dyndns.org/0.27.0.1/bundles/exiv2-0.27.0.1-Linux.tar.gz)]
[[MacOSX](http://exiv2.dyndns.org/0.27.0.1/bundles/exiv2-0.27.0.1-Darwin.tar.gz)]
[[Cygwin](http://exiv2.dyndns.org/0.27.0.1/bundles/exiv2-0.27.0.1-CYGWIN.tar.gz)]
[[MinGW](http://exiv2.dyndns.org/0.27.0.1/bundles/exiv2-0.27.0.1-MinGW.tar.gz)]
[[MSVC](http://exiv2.dyndns.org/0.27.0.1/bundles/exiv2-0.27.0.1-msvc.zip)]
[[Documentation](http://exiv2.dyndns.org/0.27.0.1/doc/index.html)]
Downloads: [[Source](exiv2-0.27.0.1-Source.tar.gz)]
[[Linux](exiv2-0.27.0.1-Linux.tar.gz)]
[[MacOSX](exiv2-0.27.0.1-Darwin.tar.gz)]
[[Cygwin](exiv2-0.27.0.1-CYGWIN.tar.gz)]
[[MinGW](exiv2-0.27.0.1-MinGW.tar.gz)]
[[MSVC](exiv2-0.27.0.1-msvc.zip)]
[[Documentation](doc/index.html)]
[[CMake](https://cmake.org/download/)]
The file "ReadMe.txt" in a bundle describes how to install/link code with libraries for their respective platform.
The file [license.txt](license.txt) in a bundle describes is a copy of GPLv2 License
The file ReadMe.txt in a bundle describes how to install/link code with libraries for their respective platform.
[TOC](#TOC)
<name id="2"></a>
## 2 Building and Installing
## 2 Building and Installing Exiv2
You need CMake to build Exiv2: https://cmake.org/download/
<name id="2-1"></a>
### 2.1 Build/Install Exiv2 on a UNIX-like system:
### 2.1 Build/Install/Uninstall Exiv2 on a UNIX-like system
$ cd <exiv2dir> ; mkdir build ; cd build
$ cmake .. -G "Unix Makefiles" ; cmake --build . ; make test
$ sudo make install
```
$ cd <exiv2dir> ; mkdir build ; cd build
$ cmake .. -G "Unix Makefiles" ; cmake --build . ; make test
$ sudo make install
```
### The default install locations are:
This will install the library into the "standard locations". The library will be install in `/usr/local/lib`, executables (including the exiv2 command-line program) in `/usr/local/bin/` and header files in `/usr/local/include/exiv2`
| Location | Purpose |
|:------------- |:------------- |
| /usr/local/lib | for the library |
| /usr/local/bin | for the `exiv2` utility |
| /usr/local/include/exiv2 | for header files |
#### Uninstall Exiv2 on a UNIX-like system
```
$ sudo make uninstall
```
[TOC](#TOC)
<name id="2-2"></a>
### 2.2 Build/Install Exiv2 with Visual Studio
We recommend that you use cocan with CMake to build Exiv2 with Visual Studio.
We recommend that you use conan with CMake to build Exiv2 with Visual Studio.
See [README-CONAN](README-CONAN.md) for more information
[TOC](#TOC)
<name id="2-3"></a>
### 2.3 Uninstall Exiv2 on a UNIX-like system:
### 2.3 Build options
$ sudo make uninstall
[TOC](#TOC)
<name id="2-4"></a>
### 2.4 Build options
There are two groups of CMake options. Options defined by CMake include:
There are two groups of CMake options. There are many options defined by CMake. Here are some particularly useful options:
| Options | Purpose |
|:------------- |:------------- |
| CMAKE\_INSTALL\_PREFIX | where to install on your computer _**(/usr/local)**_ |
| CMAKE\_BUILD\_TYPE | type of build _**(Release)**__|
| BUILD\_SHARED\_LIBS | build exiv2lib as shared or static _**(On)**_ |
| CMAKE\_INSTALL\_PREFIX<br/>CMAKE\_BUILD\_TYPE<br/>BUILD\_SHARED\_LIBS | where to install on your computer _**(/usr/local)**_<br/>type of build _**(Release)**_<br/>build exiv2lib as shared or static _**(On)**_ |
Options defined by <exiv2>/CMakeLists.txt:
Options defined by <exiv2>/CMakeLists.txt include:
```
576 rmills@rmillsmm:~/gnu/github/exiv2/exiv2 $ grep ^option CMakeLists.txt
@ -103,24 +98,7 @@ option( EXIV2_ENABLE_XMP "Build with XMP metadata support"
option( EXIV2_ENABLE_EXTERNAL_XMP "Use external version of XMP" OFF )
option( EXIV2_ENABLE_PNG "Build with png support (requires libz)" ON )
option( EXIV2_ENABLE_NLS "Build native language support (requires gettext)" ON )
option( EXIV2_ENABLE_PRINTUCS2 "Build with Printucs2" ON )
option( EXIV2_ENABLE_LENSDATA "Build including lens data" ON )
option( EXIV2_ENABLE_VIDEO "Build video support into library" OFF )
option( EXIV2_ENABLE_WEBREADY "Build webready support into library" OFF )
option( EXIV2_ENABLE_DYNAMIC_RUNTIME "Use dynamic runtime (used for static libs)" OFF )
option( EXIV2_ENABLE_WIN_UNICODE "Use Unicode paths (wstring) on Windows" OFF )
option( EXIV2_ENABLE_CURL "USE Libcurl for HttpIo" OFF )
option( EXIV2_ENABLE_SSH "USE Libssh for SshIo" OFF )
option( EXIV2_BUILD_SAMPLES "Build sample applications" ON )
option( EXIV2_BUILD_PO "Build translations files" OFF )
option( EXIV2_BUILD_EXIV2_COMMAND "Build exiv2 command-line executable" ON )
option( EXIV2_BUILD_UNIT_TESTS "Build unit tests" OFF )
option( EXIV2_BUILD_DOC "Add 'doc' target to generate documentation" OFF )
option( EXIV2_TEAM_EXTRA_WARNINGS "Add more sanity checks using compiler flags" OFF )
option( EXIV2_TEAM_WARNINGS_AS_ERRORS "Treat warnings as errors" OFF )
option( EXIV2_TEAM_USE_SANITIZERS "Enable ASAN and UBSAN when available" OFF )
option( BUILD_WITH_CCACHE "Use ccache to speed up compilations" OFF )
option( BUILD_WITH_COVERAGE "Add compiler flags to generate coverage stats" OFF )
...
577 rmills@rmillsmm:~/gnu/github/exiv2/exiv2 $
```
@ -130,40 +108,35 @@ $ cmake -DBUILD_SHARED_LIBS=On -DEXIV2_ENABLE_NLS=OFF
```
[TOC](#TOC)
<name id="2-5"></a>
### 2.5 Dependencies
<name id="2-4"></a>
### 2.4 Dependencies
You can choose to use dependent libraries using your platform's package installer.
The following Exiv2 features are enabled by default and require external libraries. You can disable the dependency with CMake options:
We also support conan which is especially useful for users of Visual Studio.
See [README-CONAN](http://exiv2.dyndns.org/0.27.0.1/README-CONAN.md) for more information
The following libexiv2 features are enabled by default and may
require external libraries. You can disable the dependency with CMake options
| Feature | Package | cmake option | Availability |
| Feature | Package | cmake option to disable | Availability |
|:-------------------------- |:-------- |:---------------------------- |:----------- |
|PNG image support | zlib | `-DEXIV2_ENABLE_PNG=Off` | http://www.gnu.org/software/gettext/ |
|Native language support | gettext | `-DEXIV2_ENABLE_NLS=Off` | http://zlib.net/ |
|XMP support | expat | `-DEXIV2_ENABLE_XMP=Off` | http://expat.sourceforge.net/ |
|PNG image support | zlib | -DEXIV2\_ENABLE\_PNG=Off | [http://www.gnu.org/software/gettext/](http://www.gnu.org/software/gettext/) |
|Native language support | gettext | -DEXIV2\_ENABLE\_NLS=Off | [http://zlib.net/](http://zlib.net/) |
|XMP support | expat | -DEXIV2\_ENABLE\_XMP=Off | [http://expat.sourceforge.net](http://expat.sourceforge.net)/<br/>Use _**Expat 2.2.6**_ and later |
On Linux, it is usually best to install the dependencies through the
package management system of the distribution together with the
corresponding development packages (for the header files and static
libraries).
On Linux, you may install the dependencies using the distribution's package management system. Install the development package of a dependency to install the header files and static libraries required to build Exiv2.
You may choose to install dependences with conan. This is supported on all platforms and is especially useful for users of Visual Studio.
See [README-CONAN](README-CONAN.md) for more information.
[TOC](#TOC)
<name id="2-5"></a>
### 2.5 Consuming Exiv2 with CMake
When installing exiv2 by running the **install** target we get some files under the folder
${CMAKE\_INSTALL\_PREFIX/share/exiv2/cmake/.
In the example project https://github.com/piponazo/exiv2Consumer you can see how to consume
exiv2 via CMake using these files.
[TOC](#TOC)
<name id="2-6"></a>
### 2.6 Consuming Exiv2 with CMake
When installing exiv2 by running the **install** target we get some files under the folder
`${CMAKE_INSTALL_PREFIX}/share/exiv2/cmake/`.
In the example project https://github.com/piponazo/exiv2Consumer you could see how to consume
exiv2 via CMake by using these files.
<name id="2-7"></a>
### 2.7 Building Exiv2 Documentation
### 2.6 Building Exiv2 Documentation
```
$ cmake ..options.. -DEXIV2_BUILD_DOC=On
@ -174,16 +147,11 @@ To build the documentation, you will need the following products:
| Product | Availability |
|:------------ |:------------ |
| doxygen | http://www.doxygen.org/ |
| graphviz | http://www.graphviz.org/ |
| python | http://www.python.org/ |
| xsltproc | http://xmlsoft.org/XSLT/ |
| md5sum | http://www.microbrew.org/tools/md5sha1sum/ |
| pkg-config | http://pkg-config.freedesktop.org/wiki/ |
| doxygen<br/>graphviz<br/>python<br/>xsltproc<br/>md5sum | [http://www.doxygen.org/](http://www.doxygen.org/)<br/>[http://www.graphviz.org/](http://www.graphviz.org/)<br/>[http://www.python.org/](http://www.python.org/)<br/>[http://xmlsoft.org/XSLT/](http://xmlsoft.org/XSLT/)<br/>[http://www.microbrew.org/tools/md5sha1sum/](http://www.microbrew.org/tools/md5sha1sum/) |
[TOC](#TOC)
<name id="2-8"></a>
### 2.8 Building Exiv2 Packages
<name id="2-7"></a>
### 2.7 Building Exiv2 Packages
There are two types of Exiv2 packages which are generated by cpack from the cmake command-line.
@ -212,7 +180,7 @@ CPack: - package: /path/to/exiv2/build/exiv2-0.27.0.1-Linux.tar.gz generated.
$ make package_source
Run CPack packaging tool for source...
...
CPack: - package: /media/linuxDev/programming/exiv2/build/exiv2-0.27.0.1-Source.tar.bz2 generated.
CPack: - package: /path/to/exiv2/build/exiv2-0.27.0.1-Source.tar.bz2 generated.
```
You may prefer to run `$ cmake --build . --config Release --target package_source`
@ -254,6 +222,8 @@ For new bug reports and feature requests, please open an issue in Github.
<name id="4"></a>
## 4 Platform Notes
There are many ways to set up and configure your platform. The following notes are provided as a guide.
<name id="4-1"></a>
### 4.1 Linux
@ -264,7 +234,7 @@ sudo apt --yes update
sudo apt install --yes build-essential git libxml2-utils cmake python3 libexpat1-dev
```
Get the code from Git and Build
Get the code from GitHub and build
```
$ mkdir -p ~/gnu/github/exiv2
@ -281,40 +251,42 @@ $ make
You will need to install Xcode and the Xcode command-line tools to build anything on the Mac.
You should build and install libexpat and zlib from source.
You should build and install libexpat and zlib. You may use brew, macports, build from source, or use conan.
You should build and install CMake from source.
I recommend that you build and install CMake from source.
[TOC](#TOC)
<name id="4-3"></a>
### 4.3 MinGW/msys2
### 4.3 MinGW
Support for MinGW/msys1.0 32 bit build was provided for Exiv2 v0.26.
We provide support for both 64bit and 32bit builds using MinGW/msys2. [https://www.msys2.org](https://www.msys2.org)<br/>
Support for MinGW/msys1.0 32 bit build was provided for Exiv2 v0.26. MinGW/msys1.0 is not supported by Team Exiv2 for Exiv2 v0.27 and later.
#### MSYS 64 bit
https://www.msys2.org
Download: http://repo.msys2.org/distrib/x86_64/msys2-x86_64-20180531.exe
#### MinGW/msys2 64 bit
Install: [http://repo.msys2.org/distrib/x86_64/msys2-x86_64-20180531.exe](http://repo.msys2.org/distrib/x86_64/msys2-x86_64-20180531.exe)
I use this batch file to start the MinGW bash shell from the Dos Command Prompt (cmd.exe)
I use the following batch file to start the MinGW/msys2 64 bit bash shell from the Dos Command Prompt (cmd.exe)
```
$ cat msys64.bat
setlocal
set "PATH=c:\msys64\usr\bin;c:\msys64\usr\local\bin;c:\msys64\mingw64\bin;"
set "HOME=c:\msys64\home\%USER%"
set "PS1=\! \u@\h-64:\w \$ "
bash.exe -norc
$
```
#### MSYS 32 bit
http://repo.msys2.org/distrib/i686/msys2-i686-20180531.exe
#### MinGW/msys2 32 bit
Install: [http://repo.msys2.org/distrib/i686/msys2-i686-20180531.exe](http://repo.msys2.org/distrib/i686/msys2-i686-20180531.exe)
I use this batch file to start the MinGW bash shell from the Dos Command Prompt (cmd.exe)
I use the following batch file to start the MinGW/msys2 32 bit bash shell from the Dos Command Prompt (cmd.exe)
```
$ cat msys32.bat
setlocal
set "PATH=c:\msys32\usr\bin;c:\msys32\usr\local\bin;c:\msys32\mingw64\bin;"
set "HOME=c:\msys32\home\%USER%"
set "PS1=\! \u@\h-32:\w \$ "
bash.exe -norc
$
@ -339,22 +311,21 @@ $ make
#### MinGW and Regex
The exiv2 command line program provides a `--grep` option which filters output. The implementation requires the header file `<regex.h>` and supporting library to be available during the build. When not available, the option degenerates to a substring match. Because there are multiple versions of `<regex.h>` available on the MinGW platform, detection of Regex is always disabled on this platform.
The exiv2 command line program provides a `--grep` option which filters output. The implementation requires the header file `<regex.h>` and supporting library to be available during the build. When not available, the option degrades to a substring match. Because there are multiple versions of `<regex.h>` available on the MinGW platform, detection of Regex is always disabled on this platform.
[TOC](#TOC)
<name id="4-4"></a>
### 4.4 Cygwin
Download: https://cygwin.com/install.html and run setup-x86_64.exe
Download: [https://cygwin.com/install.html](https://cygwin.com/install.html) and run setup-x86_64.exe
You need:
make, cmake, gcc, pkg-config, dos2unix, zlib-devel, libexpat1-devel, git, python3-interpreter, libiconv, libxml2-utils, libncurses.
Download and build libiconv-1.15:
https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz
Download and build libiconv-1.15: [https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz](https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz)
Download and build cmake from source because I can't get the cygwin installed cmake 3.6.2 to work
To build cmake from source (for 3.11+), you need libncurses.
Download and build cmake from source because I can't get the cygwin installed cmake 3.6.2 to work.
To build cmake from source, you need libncurses. [https://cmake.org/download/](https://cmake.org/download/)
[TOC](#TOC)
<name id="4-5"></a>
@ -363,9 +334,10 @@ To build cmake from source (for 3.11+), you need libncurses.
We recommend that you use Conan to build Exiv2 using Microsoft Visual C++. For v0.27, we support Visual Studio 2008, 2010, 2012, 2013, 2015 and 2017.
As well as Microsoft Visual Studio, you will need to install CMake, Python3, and Conan.
1) Binary installers for CMake on Windows are availably from kitware.org.
2) Binary installers for Python3 are available from python.org
3) Conan can be installed using python/pip. Details in README-CONAN.md
1) Binary installers for CMake on Windows are availably from [https://cmake.org/download/](https://cmake.org/download/).<br/>
2) Binary installers for Python3 are available from [python.org](https://python.org)<br/>
3) Conan can be installed using python/pip. Details in [README-CONAN.md](README-CONAN.md)
[TOC](#TOC)
<name id="5"></a>
@ -386,7 +358,7 @@ $ make tests
Summary report
```
You can run individual tests in the test directory using EXIV2\_BINDIR to specify the location of the build artifacts. For Cygwin and MinGW/msys builds, set EXIV2_EXT=.exe
You can run individual tests in the test directory using the environment variable EXIV2\_BINDIR to specify the location of the build artifacts. For Cygwin and MinGW/msys builds, also set EXIV2_EXT=.exe
```
rmills@rmillsmbp-w7 ~/gnu/github/exiv2/exiv2/build $ cd ../test
@ -411,9 +383,10 @@ $ export EXIV2_EXT=.exe
$ export EXIV2_BINDIR=${PWD}/../build/bin
```
You can proceed to execute the components of the test suite as described for Unix type systems:
Once you have modified the PATH and and exported EXIV2\_BINDIR and EXIV2\_EXT, you can execute the test suite as described for Unix type systems:
```
$ cd <exiv2dir>/test
$ make test
$ make newtests
$ ./icc-test.sh

View File

@ -3,7 +3,7 @@
syntax() {
echo "usage: $0 { --help | -? | -h | platform | option | switch }+ "
echo "platform: all | cygwin | linux | macosx | mingw | mingw32 | msvc "
echo "switch: --32 | --64 | --2015 | --2017 --publish | --verbose | --static | --status"
echo "switch: --2015 | --2017 | --publish | --verbose | --static | --status"
echo "option: --branch x | --server x | --user x"
}
@ -88,17 +88,15 @@ fi
##
# assign defaults
msvc=0
cygwin=0
mingw=0
cygwin=0
macosx=0
linux=0
macosx=0
mingw=0
mingw32=0
msvc=0
help=0
publish=0
verbose=0
b64=0
b32=0
static=0
edition=2017
branch=RC1
@ -124,10 +122,8 @@ while [ "$#" != "0" ]; do
linux) linux=1 ;;
macosx) macosx=1 ;;
mingw) mingw=1 ;;
mingw32) mingw=1;b32=1 ;;
mingw32) mingw32=1 ;;
msvc) msvc=1 ;;
--64) b64=1 ;;
--32) b32=1 ;;
--verbose) verbose=1 ;;
--dryrun) dryrun=1 ;;
--publish) publish=1 ;;
@ -138,7 +134,7 @@ while [ "$#" != "0" ]; do
--server) if [ $# -gt 0 ]; then server=$1; shift; else bomb $arg ; fi ;;
--branch) if [ $# -gt 0 ]; then branch=$1; shift; else bomb $arg ; fi ;;
--user) if [ $# -gt 0 ]; then user=$1 ; shift; else bomb $arg ; fi ;;
*) echo "invalid option: $arg" 1>&2; help=1; ;;
*) echo "*** invalid option: $arg ***" 1>&2; help=1; ;;
esac
done
@ -148,16 +144,20 @@ if [ $help == 1 ]; then
fi
if [ "$all" == "1" ]; then
cygwin=1; linux=1; macosx=1; mingw=1; msvc=1;
b64=1; b32=1;
cygwin=1; linux=1; macosx=1; mingw=1; mingw32=1;msvc=1;
fi
if [ "$b64" == "0" -a "$b32" == "0" ]; then b64=1; fi
##
# begin builds
if [ $linux == 1 ]; then
command=''
# perform builds
if [ $cygwin == 1 ]; then
cd=/home/rmills/gnu/github/exiv2/
command='c:\\cygwin64\\bin\\bash.exe'
unixBuild ${user}@${server}-w7 Cygwin
fi
if [ $linux == 1 ]; then
cd=/home/rmills/gnu/github/exiv2/
command=''
unixBuild ${user}@${server}-ubuntu Linux
fi
@ -168,22 +168,15 @@ if [ $macosx == 1 ]; then
fi
if [ $mingw == 1 ]; then
if [ $b64 == 1 ]; then
command='msys64'
cd=/home/rmills/gnu/github/exiv2/
unixBuild ${user}@${server}-w7 MinGW/64
fi
if [ $b32 == 1 ]; then
command='msys32'
cd=/home/rmills/gnu/github/exiv2/
unixBuild ${user}@${server}-w7 MinGW/32
fi
cd=/home/rmills/gnu/github/exiv2/
command='msys64'
unixBuild ${user}@${server}-w7 MinGW/64
fi
if [ $cygwin == 1 ]; then
if [ $mingw32 == 1 ]; then
cd=/home/rmills/gnu/github/exiv2/
command='c:\\cygwin64\\bin\\bash.exe'
unixBuild ${user}@${server}-w7 Cygwin
command='msys32'
unixBuild ${user}@${server}-w7 MinGW/32
fi
if [ $msvc == 1 ]; then