1PORTNAME=	ImageMagick
2DISTVERSION=	7.1.1-26
3PORTREVISION=	4
4CATEGORIES=	graphics perl5
5MASTER_SITES=	https://ftp.acc.umu.se/mirror/imagemagick.org/ftp/releases/ \
6		https://mirror.dogado.de/imagemagick/releases/ \
7		https://mirror.checkdomain.de/imagemagick/releases/ \
8		https://ftp.icm.edu.pl/pub/unix/graphics/ImageMagick/releases/ \
9		https://imagemagick.org/archive/releases/
10PKGNAMESUFFIX=	7
11
12MAINTAINER=	ports@MidnightBSD.org
13COMMENT=	Image processing tools
14WWW=		https://imagemagick.org/
15
16LICENSE=	Apache-2.0
17LICENSE_FILE=	${WRKSRC}/LICENSE
18
19LIB_DEPENDS=	libltdl.so:devel/libltdl	\
20		libzstd.so:archivers/zstd	\
21		libzip.so:archivers/libzip
22TEST_DEPENDS=	gsfonts>=0:print/gsfonts
23
24FLAVORS=		x11 nox11
25FLAVOR?=		${FLAVORS:[1]}
26FLAVORS_SUB=		yes
27nox11_PKGNAMESUFFIX=	7-nox11
28
29# bin/Magick++-config
30CONFLICTS_INSTALL=	ImageMagick6 ImageMagick6-nox11 \
31			ImageMagick7 ImageMagick7-nox11
32
33# This port uses .la files, keep libtool:keepla! (magick/module.c)
34USES=		cpe gettext-runtime gmake gnome libtool:keepla localbase \
35		pathfix perl5 pkgconfig:both shebangfix tar:xz
36CPE_PRODUCT=	imagemagick
37CPE_VENDOR=	imagemagick
38SHEBANG_FILES=	www/source/examples.pl
39GNU_CONFIGURE=	yes
40GNU_CONFIGURE_MANPREFIX=${PREFIX}/share
41CONFIGURE_ENV=	MAKE=${MAKE_CMD}
42CONFIGURE_ARGS=	--without-dps \
43		--with-zstd
44USE_LDCONFIG=	yes
45USE_GNOME=	libxml2
46
47SAMPLE_FILES=	colors.xml delegates.xml log.xml mime.xml policy.xml \
48		quantization-table.xml thresholds.xml type-apple.xml \
49		type-dejavu.xml type-ghostscript.xml type-urw-base35.xml \
50		type-windows.xml type.xml
51
52PLIST_SUB=	PORTVERSION=${PORTVERSION:R}
53
54OPTIONS_SUB=	yes
55OPTIONS_DEFINE=	BZIP2 DOCS DJVU FFMPEG FFTW FLIF FONTCONFIG FPX FREETYPE \
56		GRAPHVIZ GSLIB JPEG2000 JBIG JPEG JXL LCMS2 LZMA LQR MODULES \
57		OPENEXR OPENMP PDF PERL PNG TIFF WEBP WMF THREADS \
58		16BIT_PIXEL HDRI HEIF RAW
59OPTIONS_DEFAULT=16BIT_PIXEL BZIP2 FFTW FONTCONFIG FREETYPE HEIF \
60		JPEG2000 JBIG JPEG JXL LCMS2 LZMA LQR MODULES OPENEXR PDF PERL PNG \
61		TIFF WEBP WMF THREADS HDRI RAW
62
63.if ${FLAVOR:U} == x11
64# the SVG and PANGO plugins need X11
65OPTIONS_DEFINE+=	PANGO RAQM SVG
66OPTIONS_DEFAULT+=	RAQM SVG
67CONFIGURE_ARGS+=	--with-x
68USES+=			xorg
69USE_XORG=		ice sm x11 xext xt
70.else
71CONFIGURE_ARGS+=	--without-x
72.endif
73
74DJVU_DESC=		DJVU format support (needs THREADS)
75GSLIB_DESC=		libgs (Postscript SHLIB) support
76FFMPEG_DESC=		VIDEO codec support as FFmpeg
77FLIF_DESC=		Free Lossless Image Format support
78#SIMD_CONFIGURE_WITH=	gcc-arch
79CONFIGURE_ARGS+=	--without-gcc-arch
80
8116BIT_PIXEL_DESC=	16bit pixel support
8216BIT_PIXEL_CONFIGURE_OFF=--with-quantum-depth=8
8316BIT_PIXEL_VARS=	_QBIT=Q16
8416BIT_PIXEL_VARS_OFF=	_QBIT=Q8
85PLIST_SUB+=		QBIT=${_QBIT}
86
87# Produce BZip compressed MIFF images
88BZIP2_DESC=		bzip2 compressed MIFF images
89BZIP2_CONFIGURE_WITH=	bzlib
90
91FFTW_CONFIGURE_WITH=	fftw
92FFTW_LIB_DEPENDS=	libfftw3.so:math/fftw3
93
94FONTCONFIG_CONFIGURE_WITH=	fontconfig
95FONTCONFIG_LIB_DEPENDS=		libfontconfig.so:x11-fonts/fontconfig
96
97FREETYPE_CONFIGURE_WITH=	freetype
98FREETYPE_LIB_DEPENDS=		libfreetype.so:print/freetype2
99
100FLIF_CONFIGURE_WITH=	flif
101FLIF_LIB_DEPENDS=	libflif.so:graphics/flif
102
103# FPX (FlashPIX) images
104FPX_CONFIGURE_WITH=	fpx
105FPX_LIB_DEPENDS=	libfpx.so:graphics/libfpx
106
107GRAPHVIZ_CONFIGURE_WITH=	gvc
108GRAPHVIZ_LIB_DEPENDS=	libgvc.so:graphics/graphviz
109GRAPHVIZ_CFLAGS=	-I${LOCALBASE}/include/graphviz
110GRAPHVIZ_LDFLAGS=	-L${LOCALBASE}/lib/graphviz
111
112HEIF_CONFIGURE_WITH=	heic
113HEIF_LIB_DEPENDS=	libheif.so:graphics/libheif
114
115HDRI_DESC=		High dynamic range images support
116HDRI_CONFIGURE_ENABLE=	hdri
117HDRI_VARS=		_HDRI=HDRI
118HDRI_VARS_OFF=		_HDRI=""
119PLIST_SUB+=		HDRI=${_HDRI}
120
121# JBIG images (lossless compression for bi-level images)
122JBIG_CONFIGURE_WITH=	jbig
123JBIG_LIB_DEPENDS=	libjbig.so:graphics/jbigkit
124
125JPEG_CONFIGURE_WITH=	jpeg
126JPEG_USES=		jpeg
127
128# JPEG2000 images (wavelet-based lossy compression)
129JPEG2000_DESC=		OpenJPEG 2000 support via openjpeg
130JPEG2000_CONFIGURE_WITH=openjp2
131JPEG2000_LIB_DEPENDS=	libopenjp2.so:graphics/openjpeg
132
133JXL_CONFIGURE_WITH=	jxl
134JXL_LIB_DEPENDS=	libjxl.so:graphics/libjxl
135
136LCMS2_CONFIGURE_WITH=	lcms
137LCMS2_LIB_DEPENDS=	liblcms2.so:graphics/lcms2
138
139LQR_CONFIGURE_WITH=	lqr
140LQR_LIB_DEPENDS=	liblqr-1.so:graphics/liblqr-1
141LQR_USE=		gnome=glib20
142
143LZMA_CONFIGURE_WITH=	lzma
144
145# Loadable coders, smaller executable, but PerlMagick not really works
146# ('make test' there works)
147MODULES_DESC=		Modules support
148MODULES_CONFIGURE_WITH=	modules
149
150PANGO_CONFIGURE_WITH=	pango
151PANGO_USE=		gnome=pango
152
153PNG_CONFIGURE_WITH=	png
154PNG_LIB_DEPENDS=	libpng.so:graphics/png
155
156RAQM_DESC=		Complex text layout support
157RAQM_CONFIGURE_WITH=	raqm
158RAQM_LIB_DEPENDS=	libraqm.so:print/libraqm
159
160# libraw is by default liked to lcms2, whichs also ends up in IM regardless
161# of the IM LCMS option.
162RAW_DESC=		RAW format support (implies the lcms2 option)
163RAW_CONFIGURE_WITH=	raw
164RAW_LIB_DEPENDS=	libraw_r.so:graphics/libraw
165RAW_IMPLIES=		LCMS2
166
167SVG_DESC=		SVG vector image format support (via librsvg, implies the x11 option)
168SVG_CONFIGURE_WITH=	rsvg
169SVG_USE=		gnome=cairo,gdkpixbuf,librsvg2
170
171TIFF_CONFIGURE_WITH=	tiff
172TIFF_LIB_DEPENDS=	libtiff.so:graphics/tiff
173
174WEBP_CONFIGURE_WITH=	webp
175WEBP_LIB_DEPENDS=	libwebp.so:graphics/webp
176
177.include <bsd.mport.options.mk>
178
179.if ${PORT_OPTIONS:MTHREADS}
180_IMAGEMAGICK_THREADS=yes
181_IMAGEMAGICK_THREADS_MSG=with threads
182. if exists(${PERL})
183PERL_THREADED!=	${SH} -c 'case `perl --version` in *midnightbsd-thread*) ${ECHO_CMD} yes ;; esac'; ${ECHO_CMD}
184. else
185# if ${PERL} doesn't exists, assume we dealing with threaded perl.
186PERL_THREADED=	yes
187. endif
188.else
189_IMAGEMAGICK_THREADS=no
190_IMAGEMAGICK_THREADS_MSG=without threads
191_IMAGEMAGICK_THREADS_IGNORE_MSG=. Define WITH_THREADS
192.endif
193
194.if ${PORT_OPTIONS:MPERL}
195CONFIGURE_ARGS+=	--with-perl=${PERL} \
196			--with-perl-options="MAKE=${MAKE_CMD}"
197PLIST_SUB+=		WITH_PERL=''
198# PerlMagick does not work with threads, if perl is not threaded, and vice versa
199. if defined(PERL_THREADED)
200_IMAGEMAGICK_THREADS_PERL_MSG=Perl is threaded
201_IMAGEMAGICK_THREADS=yes
202. else
203_IMAGEMAGICK_THREADS_PERL_MSG=Perl is non-threaded
204_IMAGEMAGICK_THREADS_IGNORE_MSG=. ${_IMAGEMAGICK_THREADS_PERL_MSG}. Reinstall Perl with threads or undefine WITH_IMAGEMAGICK_PERL
205.  if ${_IMAGEMAGICK_THREADS} == "yes"
206IGNORE=${_IMAGEMAGICK_THREADS_IGNORE_MSG} or undefine WITH_THREADS
207.  endif
208_IMAGEMAGICK_THREADS=no
209. endif
210.else
211CONFIGURE_ARGS+=	--without-perl
212PLIST_SUB+=		WITH_PERL='@comment '
213.endif
214
215.if ${_IMAGEMAGICK_THREADS} == "yes"
216CONFIGURE_ARGS+=	--with-threads
217CONFIGURE_ENV+=		PTHREAD_LIBS="-lpthread"
218LDFLAGS+=		-lpthread
219.else
220CONFIGURE_ARGS+=	--without-threads
221_IMAGEMAGICK_THREADS=no
222.endif
223
224# OpenMP
225.if ${PORT_OPTIONS:MOPENMP}
226. if ${_IMAGEMAGICK_THREADS} == "no"
227IGNORE=OpenMP requires threads${_IMAGEMAGICK_THREADS_IGNORE_MSG}
228. else
229CONFIGURE_ARGS+=	--enable-openmp
230. endif
231.else
232CONFIGURE_ARGS+=	--disable-openmp
233.endif
234.if defined(WITH_WINDOWS_FONT_DIR)
235CONFIGURE_ARGS+=	--with-windows-font-dir=${WITH_WINDOWS_FONT_DIR}
236.endif
237
238.if ${PORT_OPTIONS:MOPENEXR}
239. if ${_IMAGEMAGICK_THREADS} == "no"
240IGNORE=OpenEXR requires threads. ${_IMAGEMAGICK_THREADS_IGNORE_MSG}
241. else
242LIB_DEPENDS+=		libOpenEXR.so:graphics/openexr \
243			libImath.so:math/Imath
244PLIST_SUB+=		OPENEXR=""
245. endif
246.else
247CONFIGURE_ARGS+=	--without-openexr
248PLIST_SUB+=		OPENEXR="@comment "
249.endif
250
251.if ${PORT_OPTIONS:MDJVU}
252. if ${_IMAGEMAGICK_THREADS} == "no"
253IGNORE=DjVu requires threads${_IMAGEMAGICK_THREADS_IGNORE_MSG}
254. endif
255LIB_DEPENDS+=		libdjvulibre.so:graphics/djvulibre
256PLIST_SUB+=		DJVU=""
257.else
258CONFIGURE_ARGS+=	--without-djvu
259PLIST_SUB+=		DJVU="@comment "
260.endif
261
262.if ${PORT_OPTIONS:MGSLIB}
263CONFIGURE_ARGS+=	--with-gslib
264. if ${FLAVOR:U} == x11
265USES+=		ghostscript:x11
266. else
267USES+=		ghostscript
268. endif
269.else
270CONFIGURE_ARGS+=	--without-gslib
271.endif
272
273# WMF (Windows Meta File) images
274.if ${PORT_OPTIONS:MWMF}
275. if ${FLAVOR:U} == x11
276LIB_DEPENDS+=		libwmf.so:graphics/libwmf
277. else
278LIB_DEPENDS+=		libwmf.so:graphics/libwmf-nox11
279. endif
280CONFIGURE_ARGS+=	--with-wmf=yes
281PLIST_SUB+=		WMF=""
282.else
283CONFIGURE_ARGS+=	--without-wmf
284PLIST_SUB+=		WMF="@comment "
285.endif
286
287# PDF (Adobe Portable Document Format) support
288.if ${PORT_OPTIONS:MPDF}
289. if ${FLAVOR:U} == x11
290USES+=		ghostscript:x11
291. else
292USES+=		ghostscript
293. endif
294.endif
295
296.if ${PORT_OPTIONS:MPDF} || ${PORT_OPTIONS:MGSLIB}
297RUN_DEPENDS+=	gsfonts>=0:print/gsfonts
298.endif
299
300.if ${PORT_OPTIONS:MFFMPEG}
301BUILD_DEPENDS+=		ffmpeg:multimedia/ffmpeg
302RUN_DEPENDS+=		ffmpeg:multimedia/ffmpeg
303.endif
304
305.if ${PORT_OPTIONS:MDOCS}
306INSTALL_TARGET=	install-strip install-docDATA install-data-html
307.else
308INSTALL_TARGET=	install-strip
309.endif
310
311.if ${PORT_OPTIONS:MTESTS}
312. if ${FLAVOR:U} == x11
313USES+=		ghostscript:x11,build
314. else
315USES+=		ghostscript:build
316. endif
317.endif
318
319post-patch:
320# strip library name of variable parts that can change due to
321# the HDRI and Q16 option
322	@${REINPLACE_CMD}  -e 's|_@MAGICK_ABI_SUFFIX@||g; \
323		s|\.@MAGICK_ABI_SUFFIX@||g' \
324		${WRKSRC}/Makefile.in
325	@${REINPLACE_CMD} -e 's|@\.@MAGICK_ABI_SUFFIX@|@|g' \
326		${WRKSRC}/PerlMagick/Makefile.PL.in \
327		${WRKSRC}/PerlMagick/quantum/Makefile.PL.in \
328		${WRKSRC}/Magick++/bin/Magick++-config.in \
329		${WRKSRC}/Magick++/lib/Magick++.pc.in \
330		${WRKSRC}/MagickCore/MagickCore-config.in \
331		${WRKSRC}/MagickCore/MagickCore.pc.in \
332		${WRKSRC}/MagickCore/ImageMagick.pc.in \
333		${WRKSRC}/MagickWand/MagickWand-config.in \
334		${WRKSRC}/MagickWand/MagickWand.pc.in
335	@${REINPLACE_CMD} -e '/^export PKG_CONFIG_LIBDIR/d' ${WRKSRC}/MagickWand/MagickWand-config.in
336
337pre-configure:
338.if defined(_IMAGEMAGICK_THREADS_PERL_MSG)
339	@${ECHO_CMD} '###################################################################'
340	@${ECHO_CMD} NOTICE: ${_IMAGEMAGICK_THREADS_PERL_MSG}. Building ImageMagick ${_IMAGEMAGICK_THREADS_MSG}.
341	@${ECHO_CMD} '###################################################################'
342.endif
343
344post-install:
345.for i in ${SAMPLE_FILES}
346	@${MV} ${PREFIX}/etc/ImageMagick-7/${i} \
347		${PREFIX}/etc/ImageMagick-7/${i}.sample
348.endfor
349
350.include <bsd.port.mk>
351