#  Copyright 1999-2019 ImageMagick Studio LLC, a non-profit organization
#  dedicated to making software imaging solutions freely available.
#
#  You may not use this file except in compliance with the License.  You may
#  obtain a copy of the License at
#
#    http://imagemagick.org/script/license.php
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
#
#  Makefile for building MagickWand API.
#

MagickWandincdir = $(INCLUDE_PATH)/MagickWand

MAGICKWAND_CPPFLAGS = $(AM_CPPFLAGS)

MAGICKWAND_SOURCES = \
	MagickWand/MagickWand.h \
	MagickWand/animate.c \
	MagickWand/animate.h \
	MagickWand/compare.c \
	MagickWand/compare.h \
	MagickWand/composite.c \
	MagickWand/composite.h \
	MagickWand/conjure.c \
	MagickWand/conjure.h \
	MagickWand/convert.c \
	MagickWand/convert.h \
	MagickWand/deprecate.h \
	MagickWand/deprecate.c \
	MagickWand/display.c \
	MagickWand/display.h \
	MagickWand/drawing-wand.c \
	MagickWand/drawing-wand.h \
	MagickWand/identify.c \
	MagickWand/identify.h \
	MagickWand/import.c \
	MagickWand/import.h \
	MagickWand/magick-cli.c \
	MagickWand/magick-cli.h \
	MagickWand/magick-image.c \
	MagickWand/magick-image.h \
	MagickWand/magick-property.c \
	MagickWand/magick-property.h \
	MagickWand/magick-wand.c \
	MagickWand/magick-wand-private.h \
	MagickWand/method-attribute.h \
	MagickWand/mogrify.c \
	MagickWand/mogrify.h \
	MagickWand/mogrify-private.h \
	MagickWand/montage.c \
	MagickWand/montage.h \
	MagickWand/operation.c \
	MagickWand/operation.h \
	MagickWand/operation-private.h \
	MagickWand/pixel-iterator.c \
	MagickWand/pixel-iterator.h \
	MagickWand/pixel-wand.c \
	MagickWand/pixel-wand.h \
	MagickWand/pixel-wand-private.h \
	MagickWand/script-token.c \
	MagickWand/script-token.h \
	MagickWand/stream.c \
	MagickWand/stream.h \
	MagickWand/studio.h \
	MagickWand/wand.c \
	MagickWand/wand.h \
	MagickWand/wandcli.c \
	MagickWand/wandcli.h \
	MagickWand/wandcli-private.h \
	MagickWand/wand-view.c \
	MagickWand/wand-view.h 

MAGICKWAND_INCLUDE_HDRS = \
	MagickWand/MagickWand.h \
	MagickWand/animate.h \
	MagickWand/compare.h \
	MagickWand/composite.h \
	MagickWand/conjure.h \
	MagickWand/convert.h \
	MagickWand/deprecate.h \
	MagickWand/display.h \
	MagickWand/drawing-wand.h \
	MagickWand/identify.h \
	MagickWand/import.h \
	MagickWand/magick-cli.h \
	MagickWand/magick-image.h \
	MagickWand/magick-property.h \
	MagickWand/method-attribute.h \
	MagickWand/mogrify.h \
	MagickWand/montage.h \
	MagickWand/operation.h \
	MagickWand/pixel-iterator.h \
	MagickWand/pixel-wand.h \
	MagickWand/stream.h \
	MagickWand/wandcli.h \
	MagickWand/wand-view.h

MAGICKWAND_NOINST_HDRS = \
	MagickWand/mogrify-private.h \
	MagickWand/magick-wand-private.h \
	MagickWand/operation-private.h \
	MagickWand/pixel-wand-private.h \
	MagickWand/script-token.h \
	MagickWand/studio.h \
	MagickWand/wand.h \
	MagickWand/wandcli-private.h

# Headers which are installed
MagickWandinc_HEADERS = \
	$(MAGICKWAND_INCLUDE_HDRS)

MAGICKWAND_BIN_SCRPTS = \
	MagickWand/MagickWand-config

MAGICKWAND_PKGCONFIG = \
	MagickWand/MagickWand.pc \
	MagickWand/MagickWand-@MAGICK_MAJOR_VERSION@.@MAGICK_ABI_SUFFIX@.pc

MAGICKWAND_MANS = \
	MagickWand/MagickWand-config.1

MAGICKWAND_BUILT_SRCS = 

MAGICKWAND_LIBS = MagickWand/libMagickWand-@MAGICK_MAJOR_VERSION@.@MAGICK_ABI_SUFFIX@.la

MagickWand_libMagickWand_@MAGICK_MAJOR_VERSION@_@MAGICK_ABI_SUFFIX@_la_SOURCES = $(MAGICKWAND_SOURCES)
MagickWand_libMagickWand_@MAGICK_MAJOR_VERSION@_@MAGICK_ABI_SUFFIX@_la_CPPFLAGS = $(MAGICKWAND_CPPFLAGS) $(LIBRARY_EXTRA_CPPFLAGS)

if HAVE_LD_VERSION_SCRIPT
MagickWand_libMagickWand_@MAGICK_MAJOR_VERSION@_@MAGICK_ABI_SUFFIX@_la_LDFLAGS_VERSION =  -Wl,--version-script=$(top_srcdir)/MagickWand/libMagickWand.map
else
MagickWand_libMagickWand_@MAGICK_MAJOR_VERSION@_@MAGICK_ABI_SUFFIX@_la_LDFLAGS_VERSION = -export-symbols-regex ".*"
endif

MagickWand_libMagickWand_@MAGICK_MAJOR_VERSION@_@MAGICK_ABI_SUFFIX@_la_LDFLAGS = -no-undefined \
  $(MagickWand_libMagickWand_@MAGICK_MAJOR_VERSION@_@MAGICK_ABI_SUFFIX@_la_LDFLAGS_VERSION) $(MAGICK_LT_RELEASE_OPTS) \
	-version-info \
	$(MAGICK_LIBRARY_CURRENT):$(MAGICK_LIBRARY_REVISION):$(MAGICK_LIBRARY_AGE)
MagickWand_libMagickWand_@MAGICK_MAJOR_VERSION@_@MAGICK_ABI_SUFFIX@_la_LIBADD = $(MAGICKCORE_LIBS) $(X11_LIBS) $(GOMP_LIBS) $(MATH_LIBS)

MAGICKWAND_EXTRA_DIST = \
	MagickWand/ChangeLog \
	MagickWand/libMagickWand.map \
	MagickWand/MagickWand-config.1 \
	MagickWand/MagickWand.pc.in

MAGICKWAND_CLEANFILES =
