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"
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_JXL_DELEGATE)
160 #if defined(MAGICKCORE_LCMS_DELEGATE)
163 #if defined(MAGICKCORE_LQR_DELEGATE)
166 #if defined(MAGICKCORE_LTDL_DELEGATE)
169 #if defined(MAGICKCORE_LZMA_DELEGATE)
172 #if defined(MAGICKCORE_OPENEXR_DELEGATE)
175 #if defined(MAGICKCORE_PANGOCAIRO_DELEGATE)
178 #if defined(MAGICKCORE_PNG_DELEGATE)
181 #if defined(MAGICKCORE_DPS_DELEGATE) || defined(MAGICKCORE_GS_DELEGATE) || \
182 defined(MAGICKCORE_WINDOWS_SUPPORT)
185 #if defined(MAGICKCORE_RAQM_DELEGATE)
188 #if defined(MAGICKCORE_RAW_R_DELEGATE)
191 #if defined(MAGICKCORE_RSVG_DELEGATE)
194 #if defined(MAGICKCORE_TIFF_DELEGATE)
197 #if defined(MAGICKCORE_WEBP_DELEGATE)
200 #if defined(MAGICKCORE_WMF_DELEGATE) || defined (MAGICKCORE_WMFLITE_DELEGATE)
203 #if defined(MAGICKCORE_X11_DELEGATE)
206 #if defined(MAGICKCORE_XML_DELEGATE)
209 #if defined(MAGICKCORE_ZIP_DELEGATE)
212 #if defined(MAGICKCORE_ZLIB_DELEGATE)
238 MagickExport
const char *GetMagickFeatures(
void)
241 #if defined(MAGICKCORE_WINDOWS_SUPPORT) && defined(_DEBUG)
244 #if defined(MAGICKCORE_CIPHER_SUPPORT)
247 #if defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(MAGICKCORE_HAVE_SOCKET) && defined(MAGICKCORE_THREAD_SUPPORT)
250 #if defined(MAGICKCORE_HDRI_SUPPORT)
253 #if defined(MAGICKCORE_BUILD_MODULES) || defined(_DLL)
256 #if defined(MAGICKCORE_OPENCL_SUPPORT)
259 #if defined(MAGICKCORE_OPENMP_SUPPORT)
261 #if _OPENMP == 199810
263 #elif _OPENMP == 200203
265 #elif _OPENMP == 200505
267 #elif _OPENMP == 200805
269 #elif _OPENMP == 201107
271 #elif _OPENMP == 201307
273 #elif _OPENMP == 201511
275 #elif _OPENMP == 201811
281 #if defined(MAGICKCORE_HAVE_TCMALLOC)
284 #if defined(ZERO_CONFIGURATION_SUPPORT)
285 "Zero-configuration "
287 #if (MAGICKCORE_QUANTUM_DEPTH == 64)
288 "Q64 (experimental, not for production) "
311 MagickExport
char *GetMagickHomeURL(
void)
314 path[MagickPathExtent];
325 exception=AcquireExceptionInfo();
326 paths=GetConfigurePaths(MagickURLFilename,exception);
327 exception=DestroyExceptionInfo(exception);
329 return(ConstantString(MagickHomeURL));
330 element=(
const char *) GetNextValueInLinkedList(paths);
331 while (element != (
const char *) NULL)
333 (void) FormatLocaleString(path,MagickPathExtent,
"%s%s%s",element,
334 DirectorySeparator,MagickURLFilename);
335 if (IsPathAccessible(path) != MagickFalse)
337 paths=DestroyLinkedList(paths,RelinquishMagickMemory);
338 return(ConstantString(path));
340 element=(
const char *) GetNextValueInLinkedList(paths);
342 paths=DestroyLinkedList(paths,RelinquishMagickMemory);
343 return(ConstantString(MagickHomeURL));
364 MagickExport
const char *GetMagickLicense(
void)
366 return(MagickAuthoritativeLicense);
389 MagickExport
const char *GetMagickPackageName(
void)
391 return(MagickPackageName);
416 MagickExport
const char *GetMagickQuantumDepth(
size_t *depth)
418 if (depth != (
size_t *) NULL)
419 *depth=(size_t) MAGICKCORE_QUANTUM_DEPTH;
420 return(MagickQuantumDepth);
445 MagickExport
const char *GetMagickQuantumRange(
size_t *range)
447 if (range != (
size_t *) NULL)
448 *range=(size_t) QuantumRange;
449 return(MagickQuantumRange);
472 MagickExport
const char *GetMagickReleaseDate(
void)
474 return(MagickReleaseDate);
502 static unsigned int CRC32(
const unsigned char *message,
const size_t length)
507 static MagickBooleanType
508 crc_initial = MagickFalse;
519 if (crc_initial == MagickFalse)
527 for (j=0; j < 256; j++)
533 for (k=0; k < 8; k++)
534 alpha=(alpha & 0x01) ? (0xEDB88320 ^ (alpha >> 1)) : (alpha >> 1);
537 crc_initial=MagickTrue;
540 for (i=0; i < (ssize_t) length; i++)
541 crc=crc_xor[(crc ^ message[i]) & 0xff] ^ (crc >> 8);
542 return(crc ^ 0xFFFFFFFF);
545 MagickExport
unsigned int GetMagickSignature(
const StringInfo *nonce)
556 version=AcquireStringInfo(MagickPathExtent);
557 p=GetStringInfoDatum(version);
558 signature=MAGICKCORE_QUANTUM_DEPTH;
559 (void) memcpy(p,&signature,
sizeof(signature));
560 p+=
sizeof(signature);
561 signature=MAGICKCORE_HDRI_ENABLE;
562 (void) memcpy(p,&signature,
sizeof(signature));
563 p+=
sizeof(signature);
564 signature=MagickLibInterface;
565 (void) memcpy(p,&signature,
sizeof(signature));
566 p+=
sizeof(signature);
568 (void) memcpy(p,&signature,
sizeof(signature));
569 p+=
sizeof(signature);
570 SetStringInfoLength(version,p-GetStringInfoDatum(version));
572 ConcatenateStringInfo(version,nonce);
573 signature=CRC32(GetStringInfoDatum(version),GetStringInfoLength(version));
574 version=DestroyStringInfo(version);
601 MagickExport
const char *GetMagickVersion(
size_t *version)
603 if (version != (
size_t *) NULL)
604 *version=MagickLibVersion;
605 return(MagickVersion);
632 MagickExport
void ListMagickVersion(FILE *file)
634 (void) FormatLocaleFile(file,
"Version: %s\n",
635 GetMagickVersion((
size_t *) NULL));;
636 (void) FormatLocaleFile(file,
"Copyright: %s\n",GetMagickCopyright());
637 (void) FormatLocaleFile(file,
"License: %s\n",GetMagickLicense());
638 (void) FormatLocaleFile(file,
"Features: %s\n",GetMagickFeatures());
639 (void) FormatLocaleFile(file,
"Delegates (built-in): %s\n",
640 GetMagickDelegates());
641 #if defined(MAGICKCORE_MSC_VER)
642 (void) FormatLocaleFile(file,
"Compiler: Visual Studio %d (%d)\n",
643 MAGICKCORE_MSC_VER,_MSC_FULL_VER);
644 #elif defined(__GNUC__)
645 (void) FormatLocaleFile(file,
"Compiler: gcc (%d.%d)\n",__GNUC__,
647 #elif defined(__clang__)
648 (void) FormatLocaleFile(file,
"Compiler: clang (%d.%d.%d)\n",__clang_major__,
649 __clang_minor__,__clang_patchlevel__);
650 #elif defined(__MINGW32_MAJOR_VERSION)
651 (void) FormatLocaleFile(file,
"Compiler: MinGW (%d.%d)\n",
652 __MINGW32_MAJOR_VERSION,__MINGW32_MINOR_VERSION);
653 #elif defined(__MINGW64_VERSION_MAJOR)
654 (void) FormatLocaleFile(file,
"Compiler: MinGW-w64 (%d.%d)\n",
655 __MINGW64_VERSION_MAJOR ,__MINGW64_VERSION_MINOR);
657 if (IsEventLogging() != MagickFalse)
659 (void) FormatLocaleFile(file,
"Wizard attributes: ");
660 (void) FormatLocaleFile(file,
"QuantumRange=%g; ",(
double) QuantumRange);
661 (void) FormatLocaleFile(file,
"QuantumScale=%.*g; ",GetMagickPrecision(),
662 (double) QuantumScale);
663 (void) FormatLocaleFile(file,
"MagickEpsilon=%.*g; ",GetMagickPrecision(),
664 (double) MagickEpsilon);
665 (void) FormatLocaleFile(file,
"MaxMap=%g; ",(
double) MaxMap);
666 (void) FormatLocaleFile(file,
"MagickPathExtent=%g; ",
667 (
double) MagickPathExtent);
668 (void) FormatLocaleFile(file,
"sizeof(Quantum)=%g; ",(
double)
670 (void) FormatLocaleFile(file,
"sizeof(MagickSizeType)=%g; ",(
double)
671 sizeof(MagickSizeType));
672 (void) FormatLocaleFile(file,
"sizeof(MagickOffsetType)=%g",(
double)
673 sizeof(MagickOffsetType));