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"
75MagickExport
const char *GetMagickCopyright(
void)
77 return(MagickCopyright);
100MagickExport
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)
232MagickExport
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)
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 MAGICKCORE_ZERO_CONFIGURATION_SUPPORT
279 "Zero-configuration "
281#if (MAGICKCORE_QUANTUM_DEPTH == 64)
282 "Q64 (experimental, not for production) "
305MagickExport
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));
358MagickExport
const char *GetMagickLicense(
void)
360 return(MagickAuthoritativeLicense);
383MagickExport
const char *GetMagickPackageName(
void)
385 return(MagickPackageName);
410MagickExport
const char *GetMagickQuantumDepth(
size_t *depth)
412 if (depth != (
size_t *) NULL)
413 *depth=(size_t) MAGICKCORE_QUANTUM_DEPTH;
414 return(MagickQuantumDepth);
439MagickExport
const char *GetMagickQuantumRange(
size_t *range)
441 if (range != (
size_t *) NULL)
442 *range=(size_t) QuantumRange;
443 return(MagickQuantumRange);
466MagickExport
const char *GetMagickReleaseDate(
void)
468 return(MagickReleaseDate);
496static 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);
539MagickExport
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);
595MagickExport
const char *GetMagickVersion(
size_t *version)
597 if (version != (
size_t *) NULL)
598 *version=MagickLibVersion;
599 return(MagickVersion);
626MagickExport
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));