Feature #733

Improve compile-time control over size and functionality of the library

Added by Andreas Huggel over 6 years ago. Updated 10 months ago.

Status:ClosedStart date:03 Oct 2010
Priority:NormalDue date:
Assignee:Robin Mills% Done:

100%

Category:buildEstimated time:10.00 hours
Target version:0.26

Description

The complete exiv2 library is quite large. For applications, which distribute the library and use only a specific subset of its features it is desirable to have a smaller library with only the required functionality.

A simple way to achieve this is by adding compiler switches to turn individual features on or off.
Currently there are switches to control XMP, PNG and NLS support (which depend on external libraries).

Ideas for additional features to be controlled this way:

  • Metadata types: IPTC, Exif (in addition to XMP)
  • File formats
  • Makernotes
  • Tag reference data (tag lists)
  • Write support

EXV_ENABLE_AUDIO_VIDEO.patch Magnifier (7.92 KB) Thomas Beutlich, 05 Aug 2013 11:49

EXV_ENABLE_AUDIO_VIDEO.patch Magnifier (6.51 KB) Thomas Beutlich, 09 Sep 2014 12:00

EXV_ENABLE_AUDIO_VIDEO.patch Magnifier (7.96 KB) Thomas Beutlich, 26 Apr 2015 19:22


Related issues

Related to Exiv2 - Bug #1069: Make Video Code a build option Closed 26 Apr 2015

History

#1 Updated by Andreas Huggel over 6 years ago

  • Subject changed from Impreove compile-time control over size and functionality of the library to Improve compile-time control over size and functionality of the library

#2 Updated by Nikolai Saoukh over 6 years ago

With proper function (and/or datum) placement in source files the static libraries will help too.

#3 Updated by Andreas Huggel over 6 years ago

Good point, Nikolai

#4 Updated by Thomas Beutlich over 3 years ago

Attached is my MSVC-only (Sorry!) patch to enable/disable audio/video metadata support at compile time by new define EXV_ENABLE_AUDIO_VIDEO (to be set in exv_msvc.h).

#5 Updated by Thomas Beutlich over 2 years ago

Update EXV_ENABLE_AUDIO_VIDEO.patch to be compatible with r3358.

#6 Updated by Robin Mills over 2 years ago

  • Category set to build
  • Status changed from New to Assigned
  • Assignee set to Robin Mills
  • Target version set to 0.25

Thanks for this, Thomas.

I'd like to wait a little before dealing with this for the following reasons:

1) The msvc environment on trunk is rather badly broken at the moment. I integrated the GSoC2013 View Write feature on Sunday. It builds and passes the test suite on Mac/Cygwin/Linux. Msvc builds, however it's failing the test suite. I'd like to get this fixed before making changes to exv_msvc.h

2) If this feature's in exv_msvc.h, we should expose it in the autotools (./configure) and CMake builds environment.

3) There are two GSoC2013 projects to integrate on trunk. "View Write" and "Web Ready". "Web Ready" will bring changes to all build environments as it provides optional support for various web protocols (http/ftp/ssh and others). So more trunk turbulence can be expected in the next few days, even after I fix msvc/test/video-write (r3355).

So thanks for the patch. I will work on this once I have the GSoC2013 code integrated and the trunk is stable on all supported platforms.

#7 Updated by Robin Mills over 2 years ago

  • Status changed from Assigned to Rejected

I'm going to mark this "resolved". It's a feature request and I don't have the time to work on this. The build matrix for Exiv2 is large and getting larger. The effort to build and test all possible combinations of Exiv2 with build environments CMake (in-source and out-of-source), auto tools and MSVC (2003/5/8/10/12/13) with static/dll 32/64 bits on Mac/Linux/Windows is already a lot. To add fine-grained feature control imposes additional work on the build team with no clear purpose or gain.

The build team have 3 major projects in progress for v0.24
1) Integrating GSoC2013 Video Write
2) Integrating GSoC2013 Web Ready
3) Implementing a Jenkins build server to build on-demand and in response to submission.

If I needed any proof of the effort involved, I only have to look at the effort involved in getting Exiv2 to report the SVN number of the build. This has resulted in several bug reports, mostly concerning CMake.

Without another engineer to undertake this feature, I am declining this request.

#8 Updated by Andreas Huggel over 2 years ago

We usually just leave issues open that nobody has time to take up. Agree that we have too many build environments: the only solution I can think of is still to make cmake the one and only and drop everything else. Then we'll also have room for complexity added by such compile-time switches. They are important for some use cases.

#9 Updated by Robin Mills almost 2 years ago

  • Status changed from Rejected to Assigned
  • Target version changed from 0.25 to 53

Thomas' patch deserves more attention.

I agree with Andreas that it would be great to only support CMake and drop 'native' builds using autotools and MSVC solution/project files. Daniel has been provided MSVC patches to help us get there. Gilles believes that Islam will be able to achieve this during the GSoC2015 webm/webp project. Having a solid CMake/MSVC build environment has not yet been achieved.

#10 Updated by Robin Mills over 1 year ago

  • Target version changed from 53 to 0.26

This is the only issue targeted at v0.24.1. I'm going to target this at v0.26. To be honest, I'd like to mark this as "Resolved". However, instead I'll assign it to Thomas B.

I am very reluctant to increase the size of the build matrix. We have a lot of platforms and optional build switches. The build/test matrix is now too vast to be 100% built and tested.

The days of limited disk and memory space are over. A typical 64 bit build of exiv2 on the Mac is less than 3mb. I don't think it's worth the trouble to do anything about this:

902 rmills@rmillsmbp:~/gnu/exiv2/trunk $ ls -alt /usr/local/lib/libexiv2.13.dylib
-rw-r--r--  1 root  admin  2737716 26 Apr 19:38 /usr/local/lib/libexiv2.13.dylib
903 rmills@rmillsmbp:~/gnu/exiv2/trunk $ 
If somebody is building Exiv2 for an embedded controller with very limited resources, they will probably take a released copy of the Exiv2 code and edit it to the configuration that suits their purpose.

#11 Updated by Robin Mills over 1 year ago

  • Assignee changed from Robin Mills to Thomas Beutlich

#12 Updated by Thomas Beutlich over 1 year ago

Update patch (based on r3740).

#13 Updated by Thomas Beutlich over 1 year ago

  • Assignee deleted (Thomas Beutlich)

#14 Updated by Robin Mills over 1 year ago

  • Target version changed from 0.26 to 53

#15 Updated by Robin Mills 10 months ago

  • Status changed from Assigned to Closed
  • Assignee set to Robin Mills
  • Target version changed from 53 to 0.26
  • % Done changed from 0 to 100
  • Estimated time set to 10.00

I'm not doing this. Case closed. The Exiv2 Build Engineering team doesn't have the resources to undertake this task.

Also available in: Atom PDF

Redmine Appliance - Powered by TurnKey Linux