# ************************************************************* -*- Makefile -*- # # Copyright (C) 2004-2015 Andreas Huggel # # This Makefile is part of the Exiv2 distribution. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the following # disclaimer in the documentation and/or other materials provided # with the distribution. # 3. The name of the author may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER # IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # File: Makefile # Author(s): Andreas Huggel (ahu) # History: 08-Oct-07, ahu: created # # Description: # Makefile to build sample programs. # Requires installed exiv2 library # # Restrictions: # Requires GNU make. # # Default make target all: samples # ****************************************************************************** # Source files # Add source files of sample programs to this list BINSRC = addmoddel.cpp \ convert-test.cpp \ easyaccess-test.cpp \ exifcomment.cpp \ exifdata-test.cpp \ exifdata.cpp \ exifprint.cpp \ exifvalue.cpp \ httptest.cpp \ iotest.cpp \ iptceasy.cpp \ iptcprint.cpp \ iptctest.cpp \ key-test.cpp \ largeiptc-test.cpp \ mmap-test.cpp \ prevtest.cpp \ remotetest.cpp \ stringto-test.cpp \ taglist.cpp \ tiff-test.cpp \ werror-test.cpp \ write-test.cpp \ write2-test.cpp \ xmpparse.cpp \ xmpparser-test.cpp \ xmpprint.cpp \ xmpsample.cpp # Samples that need special treatment during compilation or linking OTHERSRC = exiv2json.cpp \ geotag.cpp \ metacopy.cpp \ path-test.cpp \ toexv.cpp top_srcdir = .. include $(top_srcdir)/config/config.mk # ****************************************************************************** # Initialisations SHELL = /bin/sh PKGCONFIG=pkg-config BAR='****************************************' .SUFFIXES: .SUFFIXES: .c .cpp .o .so .PRECIOUS: %.cpp CPPFLAGS := `pkg-config exiv2 --cflags` LDFLAGS := `pkg-config exiv2 --libs` BINOBJ = $(BINSRC:.cpp=.o) BINARY = $(BINSRC:.cpp=) OTHEROBJ = $(OTHERSRC:.cpp=.o) Jzon.o OTHERBIN = $(OTHERSRC:.cpp=) EXECUTABLE = $(BINSRC:%.cpp=../bin/%$(EXEEXT)) $(OTHERSRC:%.cpp=../bin/%$(EXEEXT)) ifdef DEP_TRACKING DEP = $(BINSRC:%.cpp=$(DEPDIR)/%.d) $(OTHERSRC:%.cpp=$(DEPDIR)/%.d) $(DEPDIR)/Jzon.d endif PREFIX = /usr/local/lib LINK.cc += -rpath $(PREFIX) -L$(PREFIX) COMPILE.cc += -I$(top_srcdir)/include -I$(top_srcdir)/include/exiv2 # ****************************************************************************** # Rules samples: $(BINARY) $(OTHERBIN) $(BINOBJ): %.o: %.cpp @if [ -z `which $(PKGCONFIG)` ]; then echo $(BAR) $'\\n***' utility $(PKGCONFIG) not available $'***\n'$(BAR) ; exit 42 ; fi $(COMPILE.cc) -o $@ $< @$(MAKEDEPEND) @$(POSTDEPEND) $(BINARY): %: %.o mkdir -pv ../bin 2>&1 > /dev/null $(LIBTOOL) --mode=link $(LINK.cc) -o ../bin/$@ $@.o %.o: %.cpp $(COMPILE.cc) -o $@ $< @$(MAKEDEPEND) @$(POSTDEPEND) %.ii: %.cpp set -e; \ $(CXXCPP) -E $(CPPFLAGS) $< | sed '/^[ ]*$$/d' > $@ # ****************************************************************************** # Targets .PHONY: all relink binclean mostlyclean clean distclean maintainer-clean ifdef DEP_TRACKING # Include targets from dependency files -include $(DEP) endif relink: binclean samples # link expat directly to geotag geotag: %: %.cpp $(COMPILE.cc) -I../src -o $@.o $< @$(MAKEDEPEND) @$(POSTDEPEND) $(LIBTOOL) --mode=link $(LINK.cc) -lexpat $@.o -o ../bin/$@ # link applications which require src/utils.cpp support metacopy path-test toexv: %: %.cpp ../src/utils.o $(COMPILE.cc) -I../src -o $@.o $< @$(MAKEDEPEND) @$(POSTDEPEND) $(LIBTOOL) --mode=link $(LINK.cc) $@.o ../src/utils.o -o ../bin/$@ # exiv2json sample requires Jzon exiv2json: %: %.cpp Jzon.o $(COMPILE.cc) -o $@.o $< @$(MAKEDEPEND) @$(POSTDEPEND) $(LIBTOOL) --mode=link $(LINK.cc) Jzon.o $@.o -o ../bin/$@ # mt-test requires C++11 mt-test: %: %.cpp $(COMPILE.cc) -std=c++11 -o $@.o $< @$(MAKEDEPEND) @$(POSTDEPEND) $(LIBTOOL) --mode=link $(LINK.cc) $@.o -o ../bin/$@ # Remove binaries, e.g., to relink them binclean: $(RM) $(EXECUTABLE) mostlyclean: $(RM) core $(RM) $(BINSRC:.cpp=.ii) $(OTHERSRC:.cpp=.ii) Jzon.ii $(RM) $(BINOBJ) $(OTHEROBJ) clean: binclean mostlyclean # Run `make distclean' from the top source directory to also remove # files created by configuring the program. distclean: clean ifdef DEP_TRACKING $(RM) $(DEP) -rmdir $(DEPDIR) endif $(RM) *~ *.bak *# # This command is intended for maintainers to use; it deletes files # that may need special tools to rebuild. maintainer-clean: distclean