39#include "MagickCore/studio.h"
40#include "MagickCore/configure.h"
41#include "MagickCore/exception.h"
42#include "MagickCore/exception-private.h"
43#include "MagickCore/linked-list.h"
44#include "MagickCore/locale_.h"
45#include "MagickCore/option.h"
46#include "MagickCore/string_.h"
47#include "MagickCore/utility.h"
48#include "MagickCore/utility-private.h"
49#include "MagickCore/version.h"
50#include "MagickCore/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_DMR_DELEGATE)
115#if defined(MAGICKCORE_DJVU_DELEGATE)
118#if defined(MAGICKCORE_DPS_DELEGATE)
121#if defined(MAGICKCORE_EMF_DELEGATE)
124#if defined(MAGICKCORE_FFTW_DELEGATE)
127#if defined(MAGICKCORE_FLIF_DELEGATE)
130#if defined(MAGICKCORE_FONTCONFIG_DELEGATE)
133#if defined(MAGICKCORE_FPX_DELEGATE)
136#if defined(MAGICKCORE_FREETYPE_DELEGATE)
139#if defined(MAGICKCORE_GS_DELEGATE) || defined(MAGICKCORE_WINDOWS_SUPPORT)
142#if defined(MAGICKCORE_GVC_DELEGATE)
145#if defined(MAGICKCORE_HEIC_DELEGATE)
148#if defined(MAGICKCORE_JBIG_DELEGATE)
151#if defined(MAGICKCORE_JPEG_DELEGATE) && defined(MAGICKCORE_PNG_DELEGATE)
154#if defined(MAGICKCORE_LIBOPENJP2_DELEGATE)
157#if defined(MAGICKCORE_JPEG_DELEGATE)
160#if defined(MAGICKCORE_JXL_DELEGATE)
163#if defined(MAGICKCORE_LCMS_DELEGATE)
166#if defined(MAGICKCORE_LQR_DELEGATE)
169#if defined(MAGICKCORE_LTDL_DELEGATE)
172#if defined(MAGICKCORE_LZMA_DELEGATE)
175#if defined(MAGICKCORE_OPENEXR_DELEGATE)
178#if defined(MAGICKCORE_PANGOCAIRO_DELEGATE)
181#if defined(MAGICKCORE_PNG_DELEGATE)
184#if defined(MAGICKCORE_DPS_DELEGATE) || defined(MAGICKCORE_GS_DELEGATE) || \
185 defined(MAGICKCORE_WINDOWS_SUPPORT)
188#if defined(MAGICKCORE_RAQM_DELEGATE)
191#if defined(MAGICKCORE_RAW_R_DELEGATE)
194#if defined(MAGICKCORE_RSVG_DELEGATE)
197#if defined(MAGICKCORE_TIFF_DELEGATE)
200#if defined(MAGICKCORE_WEBP_DELEGATE)
203#if defined(MAGICKCORE_WMF_DELEGATE) || defined (MAGICKCORE_WMFLITE_DELEGATE)
206#if defined(MAGICKCORE_X11_DELEGATE)
209#if defined(MAGICKCORE_XML_DELEGATE)
212#if defined(MAGICKCORE_ZIP_DELEGATE)
215#if defined(MAGICKCORE_ZLIB_DELEGATE)
241MagickExport
const char *GetMagickFeatures(
void)
244#if defined(MAGICKCORE_WINDOWS_SUPPORT) && defined(_DEBUG)
247#if defined(MAGICKCORE_CIPHER_SUPPORT)
250#if defined(MAGICKCORE_DPC_SUPPORT)
253#if defined(MAGICKCORE_HDRI_SUPPORT)
256#if defined(MAGICKCORE_BUILD_MODULES) || defined(_DLL)
259#if defined(MAGICKCORE_OPENCL_SUPPORT)
262#if defined(MAGICKCORE_OPENMP_SUPPORT)
266#elif _OPENMP == 200203
268#elif _OPENMP == 200505
270#elif _OPENMP == 200805
272#elif _OPENMP == 201107
274#elif _OPENMP == 201307
276#elif _OPENMP == 201511
278#elif _OPENMP == 201811
284#if defined(MAGICKCORE_HAVE_TCMALLOC)
287#if MAGICKCORE_ZERO_CONFIGURATION_SUPPORT
288 "Zero-configuration "
290#if (MAGICKCORE_QUANTUM_DEPTH == 64)
291 "Q64 (experimental, not for production) "
314MagickExport
char *GetMagickHomeURL(
void)
317 path[MagickPathExtent];
328 exception=AcquireExceptionInfo();
329 paths=GetConfigurePaths(MagickURLFilename,exception);
330 exception=DestroyExceptionInfo(exception);
332 return(ConstantString(MagickHomeURL));
333 element=(
const char *) GetNextValueInLinkedList(paths);
334 while (element != (
const char *) NULL)
336 (void) FormatLocaleString(path,MagickPathExtent,
"%s%s%s",element,
337 DirectorySeparator,MagickURLFilename);
338 if (IsPathAccessible(path) != MagickFalse)
340 paths=DestroyLinkedList(paths,RelinquishMagickMemory);
341 return(ConstantString(path));
343 element=(
const char *) GetNextValueInLinkedList(paths);
345 paths=DestroyLinkedList(paths,RelinquishMagickMemory);
346 return(ConstantString(MagickHomeURL));
367MagickExport
const char *GetMagickLicense(
void)
369 return(MagickAuthoritativeLicense);
392MagickExport
const char *GetMagickPackageName(
void)
394 return(MagickPackageName);
419MagickExport
const char *GetMagickQuantumDepth(
size_t *depth)
421 if (depth != (
size_t *) NULL)
422 *depth=(size_t) MAGICKCORE_QUANTUM_DEPTH;
423 return(MagickQuantumDepth);
448MagickExport
const char *GetMagickQuantumRange(
size_t *range)
450 if (range != (
size_t *) NULL)
451 *range=(size_t) QuantumRange;
452 return(MagickQuantumRange);
475MagickExport
const char *GetMagickReleaseDate(
void)
477 return(MagickReleaseDate);
505static unsigned int CRC32(
const unsigned char *message,
const size_t length)
510 static MagickBooleanType
511 crc_initial = MagickFalse;
522 if (crc_initial == MagickFalse)
530 for (j=0; j < 256; j++)
536 for (k=0; k < 8; k++)
537 alpha=(alpha & 0x01) ? (0xEDB88320 ^ (alpha >> 1)) : (alpha >> 1);
540 crc_initial=MagickTrue;
543 for (i=0; i < (ssize_t) length; i++)
544 crc=crc_xor[(crc ^ message[i]) & 0xff] ^ (crc >> 8);
545 return(crc ^ 0xFFFFFFFF);
548MagickExport
unsigned int GetMagickSignature(
const StringInfo *nonce)
559 version=AcquireStringInfo(MagickPathExtent);
560 p=GetStringInfoDatum(version);
561 signature=MAGICKCORE_QUANTUM_DEPTH;
562 (void) memcpy(p,&signature,
sizeof(signature));
563 p+=
sizeof(signature);
564 signature=MAGICKCORE_HDRI_ENABLE;
565 (void) memcpy(p,&signature,
sizeof(signature));
566 p+=
sizeof(signature);
567 signature=MagickLibInterface;
568 (void) memcpy(p,&signature,
sizeof(signature));
569 p+=
sizeof(signature);
571 (void) memcpy(p,&signature,
sizeof(signature));
572 p+=
sizeof(signature);
573 SetStringInfoLength(version,p-GetStringInfoDatum(version));
575 ConcatenateStringInfo(version,nonce);
576 signature=CRC32(GetStringInfoDatum(version),GetStringInfoLength(version));
577 version=DestroyStringInfo(version);
604MagickExport
const char *GetMagickVersion(
size_t *version)
606 if (version != (
size_t *) NULL)
607 *version=MagickLibVersion;
608 return(MagickVersion);
635MagickExport
void ListMagickVersion(FILE *file)
637 (void) FormatLocaleFile(file,
"Version: %s\n",
638 GetMagickVersion((
size_t *) NULL));;
639 (void) FormatLocaleFile(file,
"Copyright: %s\n",GetMagickCopyright());
640 (void) FormatLocaleFile(file,
"License: %s\n",GetMagickLicense());
641 (void) FormatLocaleFile(file,
"Features: %s\n",GetMagickFeatures());
642 (void) FormatLocaleFile(file,
"Delegates (built-in): %s\n",
643 GetMagickDelegates());
644#if defined(MAGICKCORE_MSC_VER)
645 (void) FormatLocaleFile(file,
"Compiler: Visual Studio %d (%d)\n",
646 MAGICKCORE_MSC_VER,_MSC_FULL_VER);
647#elif defined(__GNUC__)
648 (void) FormatLocaleFile(file,
"Compiler: gcc (%d.%d)\n",__GNUC__,
650#elif defined(__clang__)
651 (void) FormatLocaleFile(file,
"Compiler: clang (%d.%d.%d)\n",__clang_major__,
652 __clang_minor__,__clang_patchlevel__);
653#elif defined(__MINGW32_MAJOR_VERSION)
654 (void) FormatLocaleFile(file,
"Compiler: MinGW (%d.%d)\n",
655 __MINGW32_MAJOR_VERSION,__MINGW32_MINOR_VERSION);
656#elif defined(__MINGW64_VERSION_MAJOR)
657 (void) FormatLocaleFile(file,
"Compiler: MinGW-w64 (%d.%d)\n",
658 __MINGW64_VERSION_MAJOR ,__MINGW64_VERSION_MINOR);
660 if (IsEventLogging() != MagickFalse)
662 (void) FormatLocaleFile(file,
"Wizard attributes: ");
663 (void) FormatLocaleFile(file,
"QuantumRange=%g; ",(
double) QuantumRange);
664 (void) FormatLocaleFile(file,
"QuantumScale=%.*g; ",GetMagickPrecision(),
665 (double) QuantumScale);
666 (void) FormatLocaleFile(file,
"MagickEpsilon=%.*g; ",GetMagickPrecision(),
667 (double) MagickEpsilon);
668 (void) FormatLocaleFile(file,
"MaxMap=%g; ",(
double) MaxMap);
669 (void) FormatLocaleFile(file,
"MagickPathExtent=%g; ",
670 (
double) MagickPathExtent);
671 (void) FormatLocaleFile(file,
"sizeof(Quantum)=%g; ",(
double)
673 (void) FormatLocaleFile(file,
"sizeof(MagickSizeType)=%g; ",(
double)
674 sizeof(MagickSizeType));
675 (void) FormatLocaleFile(file,
"sizeof(MagickOffsetType)=%g",(
double)
676 sizeof(MagickOffsetType));