Improved ImageMagick detection

This commit is contained in:
Linus Dierheimer
2022-04-13 23:13:25 +02:00
parent 3b1314102f
commit 703ec597fa
5 changed files with 40 additions and 28 deletions
+12
View File
@@ -275,9 +275,15 @@ endif()
if(ENABLE_IMAGEMAGICK7)
pkg_check_modules(IMAGEMAGICK7 MagickCore-7.Q16HDRI)
if(NOT IMAGEMAGICK7_FOUND)
pkg_check_modules(IMAGEMAGICK7 /usr/lib/imagemagick7/pkgconfig/MagickCore-7.Q16HDRI.pc)
endif()
if(NOT IMAGEMAGICK7_FOUND)
pkg_check_modules(IMAGEMAGICK7 MagickCore-7.Q16)
endif()
if(NOT IMAGEMAGICK7_FOUND)
pkg_check_modules(IMAGEMAGICK7 /usr/lib/imagemagick7/pkgconfig/MagickCore-7.Q16.pc)
endif()
if(IMAGEMAGICK7_FOUND)
target_compile_definitions(libfastfetch PRIVATE FF_HAVE_IMAGEMAGICK7=1)
@@ -288,9 +294,15 @@ endif()
if(ENABLE_IMAGEMAGICK6)
pkg_check_modules(IMAGEMAGICK6 MagickCore-6.Q16HDRI)
if(NOT IMAGEMAGICK6_FOUND)
pkg_check_modules(IMAGEMAGICK6 /usr/lib/imagemagick6/pkgconfig/MagickCore-6.Q16HDRI.pc)
endif()
if(NOT IMAGEMAGICK6_FOUND)
pkg_check_modules(IMAGEMAGICK6 MagickCore-6.Q16)
endif()
if(NOT IMAGEMAGICK6_FOUND)
pkg_check_modules(IMAGEMAGICK6 /usr/lib/imagemagick6/pkgconfig/MagickCore-6.Q16.pc)
endif()
if(IMAGEMAGICK6_FOUND)
target_compile_definitions(libfastfetch PRIVATE FF_HAVE_IMAGEMAGICK6=1)
+2 -2
View File
@@ -12,8 +12,8 @@ static void* logoResize(const void* image, size_t width, size_t height, void* ex
FFLogoImageResult ffLogoPrintImageIM6(FFinstance* instance, FFLogoType type)
{
FF_LIBRARY_LOAD(imageMagick, instance->config.libImageMagick, FF_LOGO_SIXEL_RESULT_INIT_ERROR, "libMagickCore-6.Q16HDRI.so", 8, "libMagickCore-6.Q16.so", 8)
FF_LIBRARY_LOAD_SYMBOL_ADRESS(imageMagick, ffResizeImage, ResizeImage, FF_LOGO_SIXEL_RESULT_INIT_ERROR);
FF_LIBRARY_LOAD(imageMagick, instance->config.libImageMagick, FF_LOGO_IMAGE_RESULT_INIT_ERROR, "libMagickCore-6.Q16HDRI.so", 8, "libMagickCore-6.Q16.so", 8)
FF_LIBRARY_LOAD_SYMBOL_ADRESS(imageMagick, ffResizeImage, ResizeImage, FF_LOGO_IMAGE_RESULT_INIT_ERROR);
return ffLogoPrintImageImpl(instance, imageMagick, logoResize, type);
}
+2 -2
View File
@@ -12,8 +12,8 @@ static void* logoResize(const void* image, size_t width, size_t height, void* ex
FFLogoImageResult ffLogoPrintImageIM7(FFinstance* instance, FFLogoType type)
{
FF_LIBRARY_LOAD(imageMagick, instance->config.libImageMagick, FF_LOGO_SIXEL_RESULT_INIT_ERROR, "libMagickCore-7.Q16HDRI.so", 11, "libMagickCore-7.Q16.so", 11)
FF_LIBRARY_LOAD_SYMBOL_ADRESS(imageMagick, ffResizeImage, ResizeImage, FF_LOGO_SIXEL_RESULT_INIT_ERROR);
FF_LIBRARY_LOAD(imageMagick, instance->config.libImageMagick, FF_LOGO_IMAGE_RESULT_INIT_ERROR, "libMagickCore-7.Q16HDRI.so", 11, "libMagickCore-7.Q16.so", 11)
FF_LIBRARY_LOAD_SYMBOL_ADRESS(imageMagick, ffResizeImage, ResizeImage, FF_LOGO_IMAGE_RESULT_INIT_ERROR);
return ffLogoPrintImageImpl(instance, imageMagick, logoResize, type);
}
+20 -20
View File
@@ -13,23 +13,23 @@ FFLogoImageResult ffLogoPrintImageImpl(FFinstance* instance, void* imageMagick,
{
struct winsize winsize;
if(ioctl(STDOUT_FILENO, TIOCGWINSZ, &winsize) != 0)
return FF_LOGO_SIXEL_RESULT_RUN_ERROR;
return FF_LOGO_IMAGE_RESULT_RUN_ERROR;
FF_LIBRARY_LOAD_SYMBOL(imageMagick, AcquireExceptionInfo, FF_LOGO_SIXEL_RESULT_INIT_ERROR)
FF_LIBRARY_LOAD_SYMBOL(imageMagick, DestroyExceptionInfo, FF_LOGO_SIXEL_RESULT_INIT_ERROR)
FF_LIBRARY_LOAD_SYMBOL(imageMagick, AcquireImageInfo, FF_LOGO_SIXEL_RESULT_INIT_ERROR)
FF_LIBRARY_LOAD_SYMBOL(imageMagick, DestroyImageInfo, FF_LOGO_SIXEL_RESULT_INIT_ERROR)
FF_LIBRARY_LOAD_SYMBOL(imageMagick, CopyMagickString, FF_LOGO_SIXEL_RESULT_INIT_ERROR)
FF_LIBRARY_LOAD_SYMBOL(imageMagick, ReadImage, FF_LOGO_SIXEL_RESULT_INIT_ERROR)
FF_LIBRARY_LOAD_SYMBOL(imageMagick, DestroyImage, FF_LOGO_SIXEL_RESULT_INIT_ERROR)
FF_LIBRARY_LOAD_SYMBOL(imageMagick, ImageToBlob, FF_LOGO_SIXEL_RESULT_INIT_ERROR)
FF_LIBRARY_LOAD_SYMBOL(imageMagick, Base64Encode, FF_LOGO_SIXEL_RESULT_INIT_ERROR)
FF_LIBRARY_LOAD_SYMBOL(imageMagick, AcquireExceptionInfo, FF_LOGO_IMAGE_RESULT_INIT_ERROR)
FF_LIBRARY_LOAD_SYMBOL(imageMagick, DestroyExceptionInfo, FF_LOGO_IMAGE_RESULT_INIT_ERROR)
FF_LIBRARY_LOAD_SYMBOL(imageMagick, AcquireImageInfo, FF_LOGO_IMAGE_RESULT_INIT_ERROR)
FF_LIBRARY_LOAD_SYMBOL(imageMagick, DestroyImageInfo, FF_LOGO_IMAGE_RESULT_INIT_ERROR)
FF_LIBRARY_LOAD_SYMBOL(imageMagick, CopyMagickString, FF_LOGO_IMAGE_RESULT_INIT_ERROR)
FF_LIBRARY_LOAD_SYMBOL(imageMagick, ReadImage, FF_LOGO_IMAGE_RESULT_INIT_ERROR)
FF_LIBRARY_LOAD_SYMBOL(imageMagick, DestroyImage, FF_LOGO_IMAGE_RESULT_INIT_ERROR)
FF_LIBRARY_LOAD_SYMBOL(imageMagick, ImageToBlob, FF_LOGO_IMAGE_RESULT_INIT_ERROR)
FF_LIBRARY_LOAD_SYMBOL(imageMagick, Base64Encode, FF_LOGO_IMAGE_RESULT_INIT_ERROR)
ExceptionInfo* exceptionInfo = ffAcquireExceptionInfo();
if(exceptionInfo == NULL)
{
dlclose(imageMagick);
return FF_LOGO_SIXEL_RESULT_RUN_ERROR;
return FF_LOGO_IMAGE_RESULT_RUN_ERROR;
}
ImageInfo* imageInfoIn = ffAcquireImageInfo();
@@ -37,7 +37,7 @@ FFLogoImageResult ffLogoPrintImageImpl(FFinstance* instance, void* imageMagick,
{
ffDestroyExceptionInfo(exceptionInfo);
dlclose(imageMagick);
return FF_LOGO_SIXEL_RESULT_RUN_ERROR;
return FF_LOGO_IMAGE_RESULT_RUN_ERROR;
}
//+1, because we need to copy the null byte too
@@ -49,7 +49,7 @@ FFLogoImageResult ffLogoPrintImageImpl(FFinstance* instance, void* imageMagick,
{
ffDestroyExceptionInfo(exceptionInfo);
dlclose(imageMagick);
return FF_LOGO_SIXEL_RESULT_RUN_ERROR;
return FF_LOGO_IMAGE_RESULT_RUN_ERROR;
}
double characterPixelWidth = winsize.ws_xpixel / (double) winsize.ws_col;
@@ -64,7 +64,7 @@ FFLogoImageResult ffLogoPrintImageImpl(FFinstance* instance, void* imageMagick,
ffDestroyImage(originalImage);
ffDestroyExceptionInfo(exceptionInfo);
dlclose(imageMagick);
return FF_LOGO_SIXEL_RESULT_RUN_ERROR;
return FF_LOGO_IMAGE_RESULT_RUN_ERROR;
}
Image* resizedImage = (Image*) resizeFunc(originalImage, (size_t) imagePixelWidth, (size_t) imagePixelHeight, exceptionInfo);
@@ -73,7 +73,7 @@ FFLogoImageResult ffLogoPrintImageImpl(FFinstance* instance, void* imageMagick,
{
ffDestroyExceptionInfo(exceptionInfo);
dlclose(imageMagick);
return FF_LOGO_SIXEL_RESULT_RUN_ERROR;
return FF_LOGO_IMAGE_RESULT_RUN_ERROR;
}
ImageInfo* imageInfoOut = ffAcquireImageInfo();
@@ -82,7 +82,7 @@ FFLogoImageResult ffLogoPrintImageImpl(FFinstance* instance, void* imageMagick,
ffDestroyImage(resizedImage);
ffDestroyExceptionInfo(exceptionInfo);
dlclose(imageMagick);
return FF_LOGO_SIXEL_RESULT_RUN_ERROR;
return FF_LOGO_IMAGE_RESULT_RUN_ERROR;
}
if(type == FF_LOGO_TYPE_SIXEL)
@@ -123,7 +123,7 @@ FFLogoImageResult ffLogoPrintImageImpl(FFinstance* instance, void* imageMagick,
fputs("\033[9999999D", stdout);
printf("\033[%uA", instance->state.logoHeight);
return FF_LOGO_SIXEL_RESULT_SUCCESS;
return FF_LOGO_IMAGE_RESULT_SUCCESS;
}
#endif
@@ -136,14 +136,14 @@ bool ffLogoPrintImageIfExists(FFinstance* instance, FFLogoType type)
#ifdef FF_HAVE_IMAGEMAGICK7
FFLogoImageResult result = ffLogoPrintImageIM7(instance, type);
if(result == FF_LOGO_SIXEL_RESULT_SUCCESS)
if(result == FF_LOGO_IMAGE_RESULT_SUCCESS)
return true;
else if(result == FF_LOGO_SIXEL_RESULT_RUN_ERROR)
else if(result == FF_LOGO_IMAGE_RESULT_RUN_ERROR)
return false;
#endif
#ifdef FF_HAVE_IMAGEMAGICK6
return ffLogoPrintImageIM6(instance, type) == FF_LOGO_SIXEL_RESULT_SUCCESS;
return ffLogoPrintImageIM6(instance, type) == FF_LOGO_IMAGE_RESULT_SUCCESS;
#endif
return false;
+4 -4
View File
@@ -15,9 +15,9 @@
typedef enum FFLogoImageResult
{
FF_LOGO_SIXEL_RESULT_SUCCESS, //Logo printed
FF_LOGO_SIXEL_RESULT_INIT_ERROR, //Failed to load library, try again with next IM version
FF_LOGO_SIXEL_RESULT_RUN_ERROR //Failed to load / convert image, cancle whole sixel code
FF_LOGO_IMAGE_RESULT_SUCCESS, //Logo printed
FF_LOGO_IMAGE_RESULT_INIT_ERROR, //Failed to load library, try again with next IM version
FF_LOGO_IMAGE_RESULT_RUN_ERROR //Failed to load / convert image, cancle whole sixel code
} FFLogoImageResult;
typedef void*(*FFLogoIMResizeFunc)(const void* image, size_t width, size_t height, void* exceptionInfo);
@@ -32,7 +32,7 @@ FFLogoImageResult ffLogoPrintImageIM7(FFinstance* instance, FFLogoType type);
#ifdef FF_HAVE_IMAGEMAGICK6
#include <math.h>
FFLogoSixelResult ffLogoPrintImageIM6(FFinstance* instance, FFLogoType type);
FFLogoImageResult ffLogoPrintImageIM6(FFinstance* instance, FFLogoType type);
#endif