39 #include "magick/studio.h"
40 #include "magick/configure.h"
41 #include "magick/exception.h"
42 #include "magick/exception-private.h"
43 #include "magick/hashmap.h"
44 #include "magick/locale_.h"
45 #include "magick/memory_.h"
46 #include "magick/option.h"
47 #include "magick/string_.h"
48 #include "magick/utility.h"
49 #include "magick/version.h"
50 #include "magick/version-private.h"
55 #define MagickURLFilename "index.html"
75 MagickExport
const char *GetMagickCopyright(
void)
77 return(MagickCopyright);
100 MagickExport
const char *GetMagickDelegates(
void)
103 #if defined(MAGICKCORE_AUTOTRACE_DELEGATE)
106 #if defined(MAGICKCORE_BZLIB_DELEGATE)
109 #if defined(MAGICKCORE_CAIRO_DELEGATE)
112 #if defined(MAGICKCORE_DJVU_DELEGATE)
115 #if defined(MAGICKCORE_DPS_DELEGATE)
118 #if defined(MAGICKCORE_EMF_DELEGATE)
121 #if defined(MAGICKCORE_FFTW_DELEGATE)
124 #if defined(MAGICKCORE_FLIF_DELEGATE)
127 #if defined(MAGICKCORE_FONTCONFIG_DELEGATE)
130 #if defined(MAGICKCORE_FPX_DELEGATE)
133 #if defined(MAGICKCORE_FREETYPE_DELEGATE)
136 #if defined(MAGICKCORE_GS_DELEGATE) || defined(MAGICKCORE_WINDOWS_SUPPORT)
139 #if defined(MAGICKCORE_GVC_DELEGATE)
142 #if defined(MAGICKCORE_HEIC_DELEGATE)
145 #if defined(MAGICKCORE_JBIG_DELEGATE)
148 #if defined(MAGICKCORE_JPEG_DELEGATE) && defined(MAGICKCORE_PNG_DELEGATE)
151 #if defined(MAGICKCORE_LIBOPENJP2_DELEGATE)
154 #if defined(MAGICKCORE_JPEG_DELEGATE)
157 #if defined(MAGICKCORE_LCMS_DELEGATE)
160 #if defined(MAGICKCORE_LQR_DELEGATE)
163 #if defined(MAGICKCORE_LTDL_DELEGATE)
166 #if defined(MAGICKCORE_LZMA_DELEGATE)
169 #if defined(MAGICKCORE_OPENEXR_DELEGATE)
172 #if defined(MAGICKCORE_PANGOCAIRO_DELEGATE)
175 #if defined(MAGICKCORE_PNG_DELEGATE)
178 #if defined(MAGICKCORE_DPS_DELEGATE) || defined(MAGICKCORE_GS_DELEGATE) || \
179 defined(MAGICKCORE_WINDOWS_SUPPORT)
182 #if defined(MAGICKCORE_RAQM_DELEGATE)
185 #if defined(MAGICKCORE_RAW_R_DELEGATE)
188 #if defined(MAGICKCORE_RSVG_DELEGATE)
191 #if defined(MAGICKCORE_TIFF_DELEGATE)
194 #if defined(MAGICKCORE_WEBP_DELEGATE)
197 #if defined(MAGICKCORE_WMF_DELEGATE) || defined (MAGICKCORE_WMFLITE_DELEGATE)
200 #if defined(MAGICKCORE_X11_DELEGATE)
203 #if defined(MAGICKCORE_XML_DELEGATE)
206 #if defined(MAGICKCORE_ZLIB_DELEGATE)
232 MagickExport
const char *GetMagickFeatures(
void)
235 #if defined(MAGICKCORE_CIPHER_SUPPORT)
238 #if defined(MAGICKCORE_WINDOWS_SUPPORT) && defined(_DEBUG)
241 #if defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(MAGICKCORE_HAVE_SOCKET) && defined(MAGICKCORE_THREAD_SUPPORT)
244 #if defined(MAGICKCORE_HDRI_SUPPORT)
247 #if defined(MAGICKCORE_BUILD_MODULES) || defined(_DLL)
250 #if defined(MAGICKCORE_OPENCL_SUPPORT)
253 #if defined(MAGICKCORE_OPENMP_SUPPORT)
255 #if _OPENMP == 199810
257 #elif _OPENMP == 200203
259 #elif _OPENMP == 200505
261 #elif _OPENMP == 200805
263 #elif _OPENMP == 201107
265 #elif _OPENMP == 201307
267 #elif _OPENMP == 201511
269 #elif _OPENMP == 201811
275 #if defined(MAGICKCORE_HAVE_TCMALLOC)
278 #if defined(ZERO_CONFIGURATION_SUPPORT)
279 "Zero-configuration "
281 #if (MAGICKCORE_QUANTUM_DEPTH == 64)
282 "Q64 (experimental, not for production) "
305 MagickExport
char *GetMagickHomeURL(
void)
319 exception=AcquireExceptionInfo();
320 paths=GetConfigurePaths(MagickURLFilename,exception);
321 exception=DestroyExceptionInfo(exception);
323 return(ConstantString(MagickHomeURL));
324 element=(
const char *) GetNextValueInLinkedList(paths);
325 while (element != (
const char *) NULL)
327 (void) FormatLocaleString(path,MaxTextExtent,
"%s%s%s",element,
328 DirectorySeparator,MagickURLFilename);
329 if (IsPathAccessible(path) != MagickFalse)
331 paths=DestroyLinkedList(paths,RelinquishMagickMemory);
332 return(ConstantString(path));
334 element=(
const char *) GetNextValueInLinkedList(paths);
336 paths=DestroyLinkedList(paths,RelinquishMagickMemory);
337 return(ConstantString(MagickHomeURL));
358 MagickExport
const char *GetMagickLicense(
void)
360 return(MagickAuthoritativeLicense);
383 MagickExport
const char *GetMagickPackageName(
void)
385 return(MagickPackageName);
410 MagickExport
const char *GetMagickQuantumDepth(
size_t *depth)
412 if (depth != (
size_t *) NULL)
413 *depth=(size_t) MAGICKCORE_QUANTUM_DEPTH;
414 return(MagickQuantumDepth);
439 MagickExport
const char *GetMagickQuantumRange(
size_t *range)
441 if (range != (
size_t *) NULL)
442 *range=(size_t) QuantumRange;
443 return(MagickQuantumRange);
466 MagickExport
const char *GetMagickReleaseDate(
void)
468 return(MagickReleaseDate);
496 static unsigned int CRC32(
const unsigned char *message,
const size_t length)
501 static MagickBooleanType
502 crc_initial = MagickFalse;
513 if (crc_initial == MagickFalse)
521 for (i=0; i < 256; i++)
527 for (j=0; j < 8; j++)
528 alpha=(alpha & 0x01) ? (0xEDB88320 ^ (alpha >> 1)) : (alpha >> 1);
531 crc_initial=MagickTrue;
534 for (i=0; i < (ssize_t) length; i++)
535 crc=crc_xor[(crc ^ message[i]) & 0xff] ^ (crc >> 8);
536 return(crc ^ 0xFFFFFFFF);
539 MagickExport
unsigned int GetMagickCoreSignature(
const StringInfo *nonce)
550 version=AcquireStringInfo(MaxTextExtent);
551 p=GetStringInfoDatum(version);
552 signature=MAGICKCORE_QUANTUM_DEPTH;
553 (void) memcpy(p,&signature,
sizeof(signature));
554 p+=
sizeof(signature);
555 signature=MAGICKCORE_HDRI_ENABLE;
556 (void) memcpy(p,&signature,
sizeof(signature));
557 p+=
sizeof(signature);
558 signature=MagickLibInterface;
559 (void) memcpy(p,&signature,
sizeof(signature));
560 p+=
sizeof(signature);
562 (void) memcpy(p,&signature,
sizeof(signature));
563 p+=
sizeof(signature);
564 SetStringInfoLength(version,p-GetStringInfoDatum(version));
566 ConcatenateStringInfo(version,nonce);
567 signature=CRC32(GetStringInfoDatum(version),GetStringInfoLength(version));
568 version=DestroyStringInfo(version);
595 MagickExport
const char *GetMagickVersion(
size_t *version)
597 if (version != (
size_t *) NULL)
598 *version=MagickLibVersion;
599 return(MagickVersion);
626 MagickExport
void ListMagickVersion(FILE *file)
628 (void) FormatLocaleFile(file,
"Version: %s\n",
629 GetMagickVersion((
size_t *) NULL));
630 (void) FormatLocaleFile(file,
"Copyright: %s\n",GetMagickCopyright());
631 (void) FormatLocaleFile(file,
"License: %s\n",GetMagickLicense());
632 #if defined(MAGICKCORE_WINDOWS_SUPPORT) && defined(_MSC_FULL_VER)
633 (void) FormatLocaleFile(file,
"Visual C++: %d\n",_MSC_FULL_VER);
635 (void) FormatLocaleFile(file,
"Features: %s\n",GetMagickFeatures());
636 (void) FormatLocaleFile(file,
"Delegates (built-in): %s\n",
637 GetMagickDelegates());
638 if (IsEventLogging() != MagickFalse)
640 (void) FormatLocaleFile(file,
"Wizard attributes: ");
641 (void) FormatLocaleFile(file,
"QuantumRange=%g; ",(
double) QuantumRange);
642 (void) FormatLocaleFile(file,
"QuantumScale=%.*g; ",GetMagickPrecision(),
643 (double) QuantumScale);
644 (void) FormatLocaleFile(file,
"MagickEpsilon=%.*g; ",GetMagickPrecision(),
645 (double) MagickEpsilon);
646 (void) FormatLocaleFile(file,
"MaxMap=%g; ",(
double) MaxMap);
647 (void) FormatLocaleFile(file,
"MaxTextExtent=%g; ",(
double) MaxTextExtent);
648 (void) FormatLocaleFile(file,
"sizeof(Quantum)=%g; ",(
double)
650 (void) FormatLocaleFile(file,
"sizeof(MagickSizeType)=%g; ",(
double)
651 sizeof(MagickSizeType));
652 (void) FormatLocaleFile(file,
"sizeof(MagickOffsetType)=%g",(
double)
653 sizeof(MagickOffsetType));