From 00ec6913e05b3527861bc68f40f36c2cf9f23149 Mon Sep 17 00:00:00 2001 From: Piotr Podsiadly Date: Thu, 25 Jun 2020 17:47:30 +0200 Subject: [PATCH 1/3] Add giflib/5.2.1 --- recipes/giflib/5.2.1/CMakeLists.txt | 29 ++ recipes/giflib/5.2.1/conandata.yml | 4 + recipes/giflib/5.2.1/conanfile.py | 60 ++++ recipes/giflib/5.2.1/patches/5.2.1.patch | 261 ++++++++++++++++++ .../giflib/5.2.1/test_package/CMakeLists.txt | 9 + .../giflib/5.2.1/test_package/conanfile.py | 18 ++ .../giflib/5.2.1/test_package/test_package.c | 131 +++++++++ recipes/giflib/config.yml | 4 +- 8 files changed, 515 insertions(+), 1 deletion(-) create mode 100644 recipes/giflib/5.2.1/CMakeLists.txt create mode 100644 recipes/giflib/5.2.1/conandata.yml create mode 100644 recipes/giflib/5.2.1/conanfile.py create mode 100644 recipes/giflib/5.2.1/patches/5.2.1.patch create mode 100644 recipes/giflib/5.2.1/test_package/CMakeLists.txt create mode 100644 recipes/giflib/5.2.1/test_package/conanfile.py create mode 100644 recipes/giflib/5.2.1/test_package/test_package.c diff --git a/recipes/giflib/5.2.1/CMakeLists.txt b/recipes/giflib/5.2.1/CMakeLists.txt new file mode 100644 index 0000000000000..81036b7ddb7d6 --- /dev/null +++ b/recipes/giflib/5.2.1/CMakeLists.txt @@ -0,0 +1,29 @@ +cmake_minimum_required(VERSION 3.1) + +project(GifLib) + +set(sources + "source_subfolder/dgif_lib.c" + "source_subfolder/egif_lib.c" + "source_subfolder/gifalloc.c" + "source_subfolder/gif_err.c" + "source_subfolder/gif_font.c" + "source_subfolder/gif_hash.c" + "source_subfolder/openbsd-reallocarray.c" +) + +add_library(gif ${sources}) +target_include_directories(gif PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/source_subfolder") + +if(BUILD_SHARED_LIBS) + target_compile_definitions(gif PUBLIC -DBUILD_GIF_DLL) +else() + target_compile_definitions(gif PUBLIC -DUSE_GIF_LIB) +endif() + +if(MSVC) + target_link_libraries(gif PUBLIC -NODEFAULTLIB) +endif() + +install(TARGETS gif ARCHIVE DESTINATION "lib" LIBRARY DESTINATION "lib" RUNTIME DESTINATION "bin") +install(FILES "source_subfolder/gif_lib.h" DESTINATION "include") diff --git a/recipes/giflib/5.2.1/conandata.yml b/recipes/giflib/5.2.1/conandata.yml new file mode 100644 index 0000000000000..32e1ab1e80ed9 --- /dev/null +++ b/recipes/giflib/5.2.1/conandata.yml @@ -0,0 +1,4 @@ +sources: + "5.2.1": + url: "https://downloads.sourceforge.net/project/giflib/giflib-5.2.1.tar.gz" + sha256: "31da5562f44c5f15d63340a09a4fd62b48c45620cd302f77a6d9acf0077879bd" diff --git a/recipes/giflib/5.2.1/conanfile.py b/recipes/giflib/5.2.1/conanfile.py new file mode 100644 index 0000000000000..b1d3131d5c475 --- /dev/null +++ b/recipes/giflib/5.2.1/conanfile.py @@ -0,0 +1,60 @@ +from conans import CMake, ConanFile, tools +from conans.errors import ConanInvalidConfiguration +import os + +class GiflibConan(ConanFile): + name = "giflib" + description = "A library and utilities for reading and writing GIF images." + url = "https://github.com/conan-io/conan-center-index" + license = "MIT" + homepage = "http://giflib.sourceforge.net" + topics = ("conan", "giflib", "image", "multimedia", "format", "graphics") + settings = "os", "arch", "compiler", "build_type" + options = {"shared": [True, False], "fPIC": [True, False]} + default_options = {"shared": False, "fPIC": True} + exports_sources = ["CMakeLists.txt", "patches/*"] + + _cmake = None + + @property + def _source_subfolder(self): + return "source_subfolder" + + def config_options(self): + if self.settings.os == "Windows": + del self.options.fPIC + + def configure(self): + del self.settings.compiler.libcxx + del self.settings.compiler.cppstd + + def source(self): + tools.get(**self.conan_data["sources"][self.version]) + os.rename("%s-%s" % (self.name, self.version), self._source_subfolder) + tools.patch(base_path=self._source_subfolder, patch_file="patches/%s.patch" % self.version, strip=1) + + def _configure_cmake(self): + if self._cmake: + return self._cmake + + self._cmake = CMake(self) + + self._cmake.configure() + return self._cmake + + def build(self): + cmake = self._configure_cmake() + cmake.build() + + def package(self): + cmake = self._configure_cmake() + cmake.install() + + self.copy("COPYING", src=self._source_subfolder, dst="licenses") + + def package_info(self): + self.cpp_info.libs = tools.collect_libs(self) + + if not self.options.shared: + self.cpp_info.defines.append("USE_GIF_LIB") + diff --git a/recipes/giflib/5.2.1/patches/5.2.1.patch b/recipes/giflib/5.2.1/patches/5.2.1.patch new file mode 100644 index 0000000000000..1d2ff2f9c25ed --- /dev/null +++ b/recipes/giflib/5.2.1/patches/5.2.1.patch @@ -0,0 +1,261 @@ +diff --git a/giflib-5.2.1/gif_font.c b/source_subfolder/gif_font.c +index d90783c..0fd20ed 100644 +--- a/giflib-5.2.1/gif_font.c ++++ b/source_subfolder/gif_font.c +@@ -11,6 +11,10 @@ SPDX-License-Identifier: MIT + + #include "gif_lib.h" + ++#ifdef _MSC_VER ++# define strtok_r strtok_s ++#endif ++ + /***************************************************************************** + Ascii 8 by 8 regular font - only first 128 characters are supported. + *****************************************************************************/ +diff --git a/giflib-5.2.1/gif_hash.h b/source_subfolder/gif_hash.h +index 6a1b585..6311cd1 100644 +--- a/giflib-5.2.1/gif_hash.h ++++ b/source_subfolder/gif_hash.h +@@ -9,7 +9,11 @@ SPDX-License-Identifier: MIT + #ifndef _GIF_HASH_H_ + #define _GIF_HASH_H_ + ++#ifdef _WIN32 ++#else + #include ++#endif ++ + #include + + #define HT_SIZE 8192 /* 12bits = 4096 or twice as big! */ +diff --git a/giflib-5.2.1/gif_lib.h b/source_subfolder/gif_lib.h +index ebdbd3c..8a75838 100644 +--- a/giflib-5.2.1/gif_lib.h ++++ b/source_subfolder/gif_lib.h +@@ -9,6 +9,20 @@ SPDX-License-Identifier: MIT + #ifndef _GIF_LIB_H_ + #define _GIF_LIB_H_ 1 + ++#ifdef _MSC_VER ++ #ifdef USE_GIF_LIB ++ #define GIF_EXPORT ++ #else /* USE_GIF_LIB */ ++ #ifdef BUILD_GIF_DLL ++ #define GIF_EXPORT __declspec(dllexport) ++ #else /* BUILD_GIF_DLL */ ++ #define GIF_EXPORT __declspec(dllimport) ++ #endif /* BUILD_GIF_DLL */ ++ #endif /* USE_GIF_LIB */ ++#else /* _MSC_VER */ ++ #define GIF_EXPORT ++#endif /* _MSC_VER */ ++ + #ifdef __cplusplus + extern "C" { + #endif /* __cplusplus */ +@@ -125,13 +139,13 @@ typedef struct GraphicsControlBlock { + ******************************************************************************/ + + /* Main entry points */ +-GifFileType *EGifOpenFileName(const char *GifFileName, ++GIF_EXPORT GifFileType *EGifOpenFileName(const char *GifFileName, + const bool GifTestExistence, int *Error); +-GifFileType *EGifOpenFileHandle(const int GifFileHandle, int *Error); +-GifFileType *EGifOpen(void *userPtr, OutputFunc writeFunc, int *Error); +-int EGifSpew(GifFileType * GifFile); +-const char *EGifGetGifVersion(GifFileType *GifFile); /* new in 5.x */ +-int EGifCloseFile(GifFileType *GifFile, int *ErrorCode); ++GIF_EXPORT GifFileType *EGifOpenFileHandle(const int GifFileHandle, int *Error); ++GIF_EXPORT GifFileType *EGifOpen(void *userPtr, OutputFunc writeFunc, int *Error); ++GIF_EXPORT int EGifSpew(GifFileType * GifFile); ++GIF_EXPORT const char *EGifGetGifVersion(GifFileType *GifFile); /* new in 5.x */ ++GIF_EXPORT int EGifCloseFile(GifFileType *GifFile, int *ErrorCode); + + #define E_GIF_SUCCEEDED 0 + #define E_GIF_ERR_OPEN_FAILED 1 /* And EGif possible errors. */ +@@ -146,31 +160,31 @@ int EGifCloseFile(GifFileType *GifFile, int *ErrorCode); + #define E_GIF_ERR_NOT_WRITEABLE 10 + + /* These are legacy. You probably do not want to call them directly */ +-int EGifPutScreenDesc(GifFileType *GifFile, ++GIF_EXPORT int EGifPutScreenDesc(GifFileType *GifFile, + const int GifWidth, const int GifHeight, + const int GifColorRes, + const int GifBackGround, + const ColorMapObject *GifColorMap); +-int EGifPutImageDesc(GifFileType *GifFile, ++GIF_EXPORT int EGifPutImageDesc(GifFileType *GifFile, + const int GifLeft, const int GifTop, + const int GifWidth, const int GifHeight, + const bool GifInterlace, + const ColorMapObject *GifColorMap); +-void EGifSetGifVersion(GifFileType *GifFile, const bool gif89); +-int EGifPutLine(GifFileType *GifFile, GifPixelType *GifLine, ++GIF_EXPORT void EGifSetGifVersion(GifFileType *GifFile, const bool gif89); ++GIF_EXPORT int EGifPutLine(GifFileType *GifFile, GifPixelType *GifLine, + int GifLineLen); +-int EGifPutPixel(GifFileType *GifFile, const GifPixelType GifPixel); +-int EGifPutComment(GifFileType *GifFile, const char *GifComment); +-int EGifPutExtensionLeader(GifFileType *GifFile, const int GifExtCode); +-int EGifPutExtensionBlock(GifFileType *GifFile, ++GIF_EXPORT int EGifPutPixel(GifFileType *GifFile, const GifPixelType GifPixel); ++GIF_EXPORT int EGifPutComment(GifFileType *GifFile, const char *GifComment); ++GIF_EXPORT int EGifPutExtensionLeader(GifFileType *GifFile, const int GifExtCode); ++GIF_EXPORT int EGifPutExtensionBlock(GifFileType *GifFile, + const int GifExtLen, const void *GifExtension); +-int EGifPutExtensionTrailer(GifFileType *GifFile); +-int EGifPutExtension(GifFileType *GifFile, const int GifExtCode, ++GIF_EXPORT int EGifPutExtensionTrailer(GifFileType *GifFile); ++GIF_EXPORT int EGifPutExtension(GifFileType *GifFile, const int GifExtCode, + const int GifExtLen, + const void *GifExtension); +-int EGifPutCode(GifFileType *GifFile, int GifCodeSize, ++GIF_EXPORT int EGifPutCode(GifFileType *GifFile, int GifCodeSize, + const GifByteType *GifCodeBlock); +-int EGifPutCodeNext(GifFileType *GifFile, ++GIF_EXPORT int EGifPutCodeNext(GifFileType *GifFile, + const GifByteType *GifCodeBlock); + + /****************************************************************************** +@@ -178,11 +192,11 @@ int EGifPutCodeNext(GifFileType *GifFile, + ******************************************************************************/ + + /* Main entry points */ +-GifFileType *DGifOpenFileName(const char *GifFileName, int *Error); +-GifFileType *DGifOpenFileHandle(int GifFileHandle, int *Error); +-int DGifSlurp(GifFileType * GifFile); +-GifFileType *DGifOpen(void *userPtr, InputFunc readFunc, int *Error); /* new one (TVT) */ +- int DGifCloseFile(GifFileType * GifFile, int *ErrorCode); ++GIF_EXPORT GifFileType *DGifOpenFileName(const char *GifFileName, int *Error); ++GIF_EXPORT GifFileType *DGifOpenFileHandle(int GifFileHandle, int *Error); ++GIF_EXPORT int DGifSlurp(GifFileType * GifFile); ++GIF_EXPORT GifFileType *DGifOpen(void *userPtr, InputFunc readFunc, int *Error); /* new one (TVT) */ ++GIF_EXPORT int DGifCloseFile(GifFileType * GifFile, int *ErrorCode); + + #define D_GIF_SUCCEEDED 0 + #define D_GIF_ERR_OPEN_FAILED 101 /* And DGif possible errors. */ +@@ -200,26 +214,26 @@ GifFileType *DGifOpen(void *userPtr, InputFunc readFunc, int *Error); /* new + #define D_GIF_ERR_EOF_TOO_SOON 113 + + /* These are legacy. You probably do not want to call them directly */ +-int DGifGetScreenDesc(GifFileType *GifFile); +-int DGifGetRecordType(GifFileType *GifFile, GifRecordType *GifType); +-int DGifGetImageHeader(GifFileType *GifFile); +-int DGifGetImageDesc(GifFileType *GifFile); +-int DGifGetLine(GifFileType *GifFile, GifPixelType *GifLine, int GifLineLen); +-int DGifGetPixel(GifFileType *GifFile, GifPixelType GifPixel); +-int DGifGetExtension(GifFileType *GifFile, int *GifExtCode, ++GIF_EXPORT int DGifGetScreenDesc(GifFileType *GifFile); ++GIF_EXPORT int DGifGetRecordType(GifFileType *GifFile, GifRecordType *GifType); ++GIF_EXPORT int DGifGetImageHeader(GifFileType *GifFile); ++GIF_EXPORT int DGifGetImageDesc(GifFileType *GifFile); ++GIF_EXPORT int DGifGetLine(GifFileType *GifFile, GifPixelType *GifLine, int GifLineLen); ++GIF_EXPORT int DGifGetPixel(GifFileType *GifFile, GifPixelType GifPixel); ++GIF_EXPORT int DGifGetExtension(GifFileType *GifFile, int *GifExtCode, + GifByteType **GifExtension); +-int DGifGetExtensionNext(GifFileType *GifFile, GifByteType **GifExtension); +-int DGifGetCode(GifFileType *GifFile, int *GifCodeSize, ++GIF_EXPORT int DGifGetExtensionNext(GifFileType *GifFile, GifByteType **GifExtension); ++GIF_EXPORT int DGifGetCode(GifFileType *GifFile, int *GifCodeSize, + GifByteType **GifCodeBlock); +-int DGifGetCodeNext(GifFileType *GifFile, GifByteType **GifCodeBlock); +-int DGifGetLZCodes(GifFileType *GifFile, int *GifCode); +-const char *DGifGetGifVersion(GifFileType *GifFile); ++GIF_EXPORT int DGifGetCodeNext(GifFileType *GifFile, GifByteType **GifCodeBlock); ++GIF_EXPORT int DGifGetLZCodes(GifFileType *GifFile, int *GifCode); ++GIF_EXPORT const char *DGifGetGifVersion(GifFileType *GifFile); + + + /****************************************************************************** + Error handling and reporting. + ******************************************************************************/ +-extern const char *GifErrorString(int ErrorCode); /* new in 2012 - ESR */ ++GIF_EXPORT extern const char *GifErrorString(int ErrorCode); /* new in 2012 - ESR */ + + /***************************************************************************** + Everything below this point is new after version 1.2, supporting `slurp +@@ -230,43 +244,43 @@ extern const char *GifErrorString(int ErrorCode); /* new in 2012 - ESR */ + Color map handling from gif_alloc.c + ******************************************************************************/ + +-extern ColorMapObject *GifMakeMapObject(int ColorCount, ++GIF_EXPORT extern ColorMapObject *GifMakeMapObject(int ColorCount, + const GifColorType *ColorMap); +-extern void GifFreeMapObject(ColorMapObject *Object); +-extern ColorMapObject *GifUnionColorMap(const ColorMapObject *ColorIn1, ++GIF_EXPORT extern void GifFreeMapObject(ColorMapObject *Object); ++GIF_EXPORT extern ColorMapObject *GifUnionColorMap(const ColorMapObject *ColorIn1, + const ColorMapObject *ColorIn2, + GifPixelType ColorTransIn2[]); +-extern int GifBitSize(int n); ++GIF_EXPORT extern int GifBitSize(int n); + + /****************************************************************************** + Support for the in-core structures allocation (slurp mode). + ******************************************************************************/ + +-extern void GifApplyTranslation(SavedImage *Image, GifPixelType Translation[]); +-extern int GifAddExtensionBlock(int *ExtensionBlock_Count, ++GIF_EXPORT extern void GifApplyTranslation(SavedImage *Image, GifPixelType Translation[]); ++GIF_EXPORT extern int GifAddExtensionBlock(int *ExtensionBlock_Count, + ExtensionBlock **ExtensionBlocks, + int Function, + unsigned int Len, unsigned char ExtData[]); +-extern void GifFreeExtensions(int *ExtensionBlock_Count, ++GIF_EXPORT extern void GifFreeExtensions(int *ExtensionBlock_Count, + ExtensionBlock **ExtensionBlocks); +-extern SavedImage *GifMakeSavedImage(GifFileType *GifFile, ++GIF_EXPORT extern SavedImage *GifMakeSavedImage(GifFileType *GifFile, + const SavedImage *CopyFrom); +-extern void GifFreeSavedImages(GifFileType *GifFile); ++GIF_EXPORT extern void GifFreeSavedImages(GifFileType *GifFile); + + /****************************************************************************** + 5.x functions for GIF89 graphics control blocks + ******************************************************************************/ + +-int DGifExtensionToGCB(const size_t GifExtensionLength, ++GIF_EXPORT int DGifExtensionToGCB(const size_t GifExtensionLength, + const GifByteType *GifExtension, + GraphicsControlBlock *GCB); +-size_t EGifGCBToExtension(const GraphicsControlBlock *GCB, ++GIF_EXPORT size_t EGifGCBToExtension(const GraphicsControlBlock *GCB, + GifByteType *GifExtension); + +-int DGifSavedExtensionToGCB(GifFileType *GifFile, ++GIF_EXPORT int DGifSavedExtensionToGCB(GifFileType *GifFile, + int ImageIndex, + GraphicsControlBlock *GCB); +-int EGifGCBToSavedExtension(const GraphicsControlBlock *GCB, ++GIF_EXPORT int EGifGCBToSavedExtension(const GraphicsControlBlock *GCB, + GifFileType *GifFile, + int ImageIndex); + +@@ -276,21 +290,21 @@ int EGifGCBToSavedExtension(const GraphicsControlBlock *GCB, + + #define GIF_FONT_WIDTH 8 + #define GIF_FONT_HEIGHT 8 +-extern const unsigned char GifAsciiTable8x8[][GIF_FONT_WIDTH]; ++GIF_EXPORT extern const unsigned char GifAsciiTable8x8[][GIF_FONT_WIDTH]; + +-extern void GifDrawText8x8(SavedImage *Image, ++GIF_EXPORT extern void GifDrawText8x8(SavedImage *Image, + const int x, const int y, + const char *legend, const int color); + +-extern void GifDrawBox(SavedImage *Image, ++GIF_EXPORT extern void GifDrawBox(SavedImage *Image, + const int x, const int y, + const int w, const int d, const int color); + +-extern void GifDrawRectangle(SavedImage *Image, ++GIF_EXPORT extern void GifDrawRectangle(SavedImage *Image, + const int x, const int y, + const int w, const int d, const int color); + +-extern void GifDrawBoxedText8x8(SavedImage *Image, ++GIF_EXPORT extern void GifDrawBoxedText8x8(SavedImage *Image, + const int x, const int y, + const char *legend, + const int border, const int bg, const int fg); diff --git a/recipes/giflib/5.2.1/test_package/CMakeLists.txt b/recipes/giflib/5.2.1/test_package/CMakeLists.txt new file mode 100644 index 0000000000000..ba760c4a87072 --- /dev/null +++ b/recipes/giflib/5.2.1/test_package/CMakeLists.txt @@ -0,0 +1,9 @@ +cmake_minimum_required(VERSION 2.8.11) +project(test_package) + +include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) +conan_basic_setup() + +add_executable(${PROJECT_NAME} test_package.c) +target_link_libraries(${PROJECT_NAME} ${CONAN_LIBS}) +set_property(TARGET ${CMAKE_PROJECT_NAME} PROPERTY C_STANDARD 99) diff --git a/recipes/giflib/5.2.1/test_package/conanfile.py b/recipes/giflib/5.2.1/test_package/conanfile.py new file mode 100644 index 0000000000000..bd087afa29d0c --- /dev/null +++ b/recipes/giflib/5.2.1/test_package/conanfile.py @@ -0,0 +1,18 @@ +from conans import ConanFile, CMake, tools +import os + +class TestPackageConan(ConanFile): + settings = "os", "compiler", "build_type", "arch" + generators = "cmake" + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def test(self): + if not tools.cross_building(self.settings): + img_name = os.path.join(self.source_folder, "testimg.gif") + bin_path = os.path.join("bin", "test_package") + command = "%s %s" % (bin_path, img_name) + self.run(command, run_environment=True) diff --git a/recipes/giflib/5.2.1/test_package/test_package.c b/recipes/giflib/5.2.1/test_package/test_package.c new file mode 100644 index 0000000000000..7e36b181016e3 --- /dev/null +++ b/recipes/giflib/5.2.1/test_package/test_package.c @@ -0,0 +1,131 @@ +#include +#include +#include +#include + +#include "gif_lib.h" + + +#define LINE_LEN 40 +#define IMAGEWIDTH LINE_LEN*GIF_FONT_WIDTH + +static int BackGround = 0; +static void QuitGifError(GifFileType *GifFile); +static void GenRasterTextLine(GifRowType *RasterBuffer, char *TextLine, + int BufferWidth, int ForeGroundIndex); + +/****************************************************************************** + Interpret the command line and generate the given GIF file. +******************************************************************************/ +int main(int argc, char **argv) +{ + int i, j, l, ColorMapSize, ErrorCode; + char Line[LINE_LEN]; + GifRowType RasterBuffer[GIF_FONT_HEIGHT]; + ColorMapObject *ColorMap; + GifFileType *GifFile; + GifColorType ScratchMap[256]; + + /* Allocate the raster buffer for GIF_FONT_HEIGHT scan lines. */ + for (i = 0; i < GIF_FONT_HEIGHT; i++) + { + if ((RasterBuffer[i] = (GifRowType) malloc(sizeof(GifPixelType) * + IMAGEWIDTH)) == NULL) + exit(1); + } + + /* Open stdout for the output file: */ + if ((GifFile = EGifOpenFileName("out.gif", 0, &ErrorCode)) == NULL) { + printf("error: %d\n", ErrorCode); + exit(EXIT_FAILURE); + } + + /* Read the color map in ColorFile into this color map: */ + for (ColorMapSize = 0; ColorMapSize < 256; ColorMapSize++) + { + ScratchMap[ColorMapSize].Red = ColorMapSize; + ScratchMap[ColorMapSize].Green = ColorMapSize; + ScratchMap[ColorMapSize].Blue = ColorMapSize; + } + + if ((ColorMap = GifMakeMapObject(1 << GifBitSize(ColorMapSize), ScratchMap)) == NULL) + exit(1); + + if (EGifPutScreenDesc(GifFile, + IMAGEWIDTH, ColorMapSize * GIF_FONT_HEIGHT, + GifBitSize(ColorMapSize), + BackGround, ColorMap) == GIF_ERROR) + QuitGifError(GifFile); + + /* Dump out the image descriptor: */ + if (EGifPutImageDesc(GifFile, + 0, 0, IMAGEWIDTH, ColorMapSize * GIF_FONT_HEIGHT, false, NULL) == GIF_ERROR) + QuitGifError(GifFile); + + printf("\n%s: Image 1 at (%d, %d) [%dx%d]: \n", + "test_package", GifFile->Image.Left, GifFile->Image.Top, + GifFile->Image.Width, GifFile->Image.Height); + + for (i = l = 0; i < ColorMap->ColorCount; i++) { + (void)snprintf(Line, sizeof(Line), + "Color %-3d: [%-3d, %-3d, %-3d] ", i, + ColorMap->Colors[i].Red, + ColorMap->Colors[i].Green, + ColorMap->Colors[i].Blue); + GenRasterTextLine(RasterBuffer, Line, IMAGEWIDTH, i); + for (j = 0; j < GIF_FONT_HEIGHT; j++) { + if (EGifPutLine(GifFile, RasterBuffer[j], IMAGEWIDTH) == GIF_ERROR) + QuitGifError(GifFile); + printf("\b\b\b\b%-4d", l++); + } + } + + if (EGifCloseFile(GifFile, &ErrorCode) == GIF_ERROR) + { + printf("error: %d\n", ErrorCode); + if (GifFile != NULL) { + EGifCloseFile(GifFile, NULL); + } + exit(EXIT_FAILURE); + } + + return 0; +} + +/****************************************************************************** + Close output file (if open), and exit. +******************************************************************************/ +static void GenRasterTextLine(GifRowType *RasterBuffer, char *TextLine, + int BufferWidth, int ForeGroundIndex) +{ + unsigned char c; + unsigned char Byte, Mask; + int i, j, k, CharPosX, Len = (int)strlen(TextLine); + + for (i = 0; i < BufferWidth; i++) + for (j = 0; j < GIF_FONT_HEIGHT; j++) RasterBuffer[j][i] = BackGround; + + for (i = CharPosX = 0; i < Len; i++, CharPosX += GIF_FONT_WIDTH) { + c = TextLine[i]; + for (j = 0; j < GIF_FONT_HEIGHT; j++) { + Byte = GifAsciiTable8x8[(unsigned short)c][j]; + for (k = 0, Mask = 128; k < GIF_FONT_WIDTH; k++, Mask >>= 1) + if (Byte & Mask) + RasterBuffer[j][CharPosX + k] = ForeGroundIndex; + } + } +} + +/****************************************************************************** + Close output file (if open), and exit. +******************************************************************************/ +static void QuitGifError(GifFileType *GifFile) +{ + if (GifFile != NULL) { + printf("error: %d\n", GifFile->Error); + EGifCloseFile(GifFile, NULL); + } + exit(EXIT_FAILURE); +} + +/* vim: ts=8 sw=8 et */ diff --git a/recipes/giflib/config.yml b/recipes/giflib/config.yml index 2deb7b64b69a9..14396ebe0c59c 100644 --- a/recipes/giflib/config.yml +++ b/recipes/giflib/config.yml @@ -1,3 +1,5 @@ versions: "5.1.4": - folder: all + folder: all + "5.2.1": + folder: "5.2.1" From 8b3455f269dbdc17eec2d008f28ff3aa824646ad Mon Sep 17 00:00:00 2001 From: Piotr Podsiadly Date: Fri, 26 Jun 2020 17:15:04 +0200 Subject: [PATCH 2/3] giflib/5.2.1: remove shared option --- recipes/giflib/5.2.1/CMakeLists.txt | 10 - recipes/giflib/5.2.1/conanfile.py | 10 - recipes/giflib/5.2.1/patches/5.2.1.patch | 230 ----------------------- 3 files changed, 250 deletions(-) diff --git a/recipes/giflib/5.2.1/CMakeLists.txt b/recipes/giflib/5.2.1/CMakeLists.txt index 81036b7ddb7d6..4591a6bc0e6a2 100644 --- a/recipes/giflib/5.2.1/CMakeLists.txt +++ b/recipes/giflib/5.2.1/CMakeLists.txt @@ -15,15 +15,5 @@ set(sources add_library(gif ${sources}) target_include_directories(gif PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/source_subfolder") -if(BUILD_SHARED_LIBS) - target_compile_definitions(gif PUBLIC -DBUILD_GIF_DLL) -else() - target_compile_definitions(gif PUBLIC -DUSE_GIF_LIB) -endif() - -if(MSVC) - target_link_libraries(gif PUBLIC -NODEFAULTLIB) -endif() - install(TARGETS gif ARCHIVE DESTINATION "lib" LIBRARY DESTINATION "lib" RUNTIME DESTINATION "bin") install(FILES "source_subfolder/gif_lib.h" DESTINATION "include") diff --git a/recipes/giflib/5.2.1/conanfile.py b/recipes/giflib/5.2.1/conanfile.py index b1d3131d5c475..336a57a0b87a4 100644 --- a/recipes/giflib/5.2.1/conanfile.py +++ b/recipes/giflib/5.2.1/conanfile.py @@ -10,8 +10,6 @@ class GiflibConan(ConanFile): homepage = "http://giflib.sourceforge.net" topics = ("conan", "giflib", "image", "multimedia", "format", "graphics") settings = "os", "arch", "compiler", "build_type" - options = {"shared": [True, False], "fPIC": [True, False]} - default_options = {"shared": False, "fPIC": True} exports_sources = ["CMakeLists.txt", "patches/*"] _cmake = None @@ -20,10 +18,6 @@ class GiflibConan(ConanFile): def _source_subfolder(self): return "source_subfolder" - def config_options(self): - if self.settings.os == "Windows": - del self.options.fPIC - def configure(self): del self.settings.compiler.libcxx del self.settings.compiler.cppstd @@ -54,7 +48,3 @@ def package(self): def package_info(self): self.cpp_info.libs = tools.collect_libs(self) - - if not self.options.shared: - self.cpp_info.defines.append("USE_GIF_LIB") - diff --git a/recipes/giflib/5.2.1/patches/5.2.1.patch b/recipes/giflib/5.2.1/patches/5.2.1.patch index 1d2ff2f9c25ed..b58421ddb53e1 100644 --- a/recipes/giflib/5.2.1/patches/5.2.1.patch +++ b/recipes/giflib/5.2.1/patches/5.2.1.patch @@ -29,233 +29,3 @@ index 6a1b585..6311cd1 100644 #include #define HT_SIZE 8192 /* 12bits = 4096 or twice as big! */ -diff --git a/giflib-5.2.1/gif_lib.h b/source_subfolder/gif_lib.h -index ebdbd3c..8a75838 100644 ---- a/giflib-5.2.1/gif_lib.h -+++ b/source_subfolder/gif_lib.h -@@ -9,6 +9,20 @@ SPDX-License-Identifier: MIT - #ifndef _GIF_LIB_H_ - #define _GIF_LIB_H_ 1 - -+#ifdef _MSC_VER -+ #ifdef USE_GIF_LIB -+ #define GIF_EXPORT -+ #else /* USE_GIF_LIB */ -+ #ifdef BUILD_GIF_DLL -+ #define GIF_EXPORT __declspec(dllexport) -+ #else /* BUILD_GIF_DLL */ -+ #define GIF_EXPORT __declspec(dllimport) -+ #endif /* BUILD_GIF_DLL */ -+ #endif /* USE_GIF_LIB */ -+#else /* _MSC_VER */ -+ #define GIF_EXPORT -+#endif /* _MSC_VER */ -+ - #ifdef __cplusplus - extern "C" { - #endif /* __cplusplus */ -@@ -125,13 +139,13 @@ typedef struct GraphicsControlBlock { - ******************************************************************************/ - - /* Main entry points */ --GifFileType *EGifOpenFileName(const char *GifFileName, -+GIF_EXPORT GifFileType *EGifOpenFileName(const char *GifFileName, - const bool GifTestExistence, int *Error); --GifFileType *EGifOpenFileHandle(const int GifFileHandle, int *Error); --GifFileType *EGifOpen(void *userPtr, OutputFunc writeFunc, int *Error); --int EGifSpew(GifFileType * GifFile); --const char *EGifGetGifVersion(GifFileType *GifFile); /* new in 5.x */ --int EGifCloseFile(GifFileType *GifFile, int *ErrorCode); -+GIF_EXPORT GifFileType *EGifOpenFileHandle(const int GifFileHandle, int *Error); -+GIF_EXPORT GifFileType *EGifOpen(void *userPtr, OutputFunc writeFunc, int *Error); -+GIF_EXPORT int EGifSpew(GifFileType * GifFile); -+GIF_EXPORT const char *EGifGetGifVersion(GifFileType *GifFile); /* new in 5.x */ -+GIF_EXPORT int EGifCloseFile(GifFileType *GifFile, int *ErrorCode); - - #define E_GIF_SUCCEEDED 0 - #define E_GIF_ERR_OPEN_FAILED 1 /* And EGif possible errors. */ -@@ -146,31 +160,31 @@ int EGifCloseFile(GifFileType *GifFile, int *ErrorCode); - #define E_GIF_ERR_NOT_WRITEABLE 10 - - /* These are legacy. You probably do not want to call them directly */ --int EGifPutScreenDesc(GifFileType *GifFile, -+GIF_EXPORT int EGifPutScreenDesc(GifFileType *GifFile, - const int GifWidth, const int GifHeight, - const int GifColorRes, - const int GifBackGround, - const ColorMapObject *GifColorMap); --int EGifPutImageDesc(GifFileType *GifFile, -+GIF_EXPORT int EGifPutImageDesc(GifFileType *GifFile, - const int GifLeft, const int GifTop, - const int GifWidth, const int GifHeight, - const bool GifInterlace, - const ColorMapObject *GifColorMap); --void EGifSetGifVersion(GifFileType *GifFile, const bool gif89); --int EGifPutLine(GifFileType *GifFile, GifPixelType *GifLine, -+GIF_EXPORT void EGifSetGifVersion(GifFileType *GifFile, const bool gif89); -+GIF_EXPORT int EGifPutLine(GifFileType *GifFile, GifPixelType *GifLine, - int GifLineLen); --int EGifPutPixel(GifFileType *GifFile, const GifPixelType GifPixel); --int EGifPutComment(GifFileType *GifFile, const char *GifComment); --int EGifPutExtensionLeader(GifFileType *GifFile, const int GifExtCode); --int EGifPutExtensionBlock(GifFileType *GifFile, -+GIF_EXPORT int EGifPutPixel(GifFileType *GifFile, const GifPixelType GifPixel); -+GIF_EXPORT int EGifPutComment(GifFileType *GifFile, const char *GifComment); -+GIF_EXPORT int EGifPutExtensionLeader(GifFileType *GifFile, const int GifExtCode); -+GIF_EXPORT int EGifPutExtensionBlock(GifFileType *GifFile, - const int GifExtLen, const void *GifExtension); --int EGifPutExtensionTrailer(GifFileType *GifFile); --int EGifPutExtension(GifFileType *GifFile, const int GifExtCode, -+GIF_EXPORT int EGifPutExtensionTrailer(GifFileType *GifFile); -+GIF_EXPORT int EGifPutExtension(GifFileType *GifFile, const int GifExtCode, - const int GifExtLen, - const void *GifExtension); --int EGifPutCode(GifFileType *GifFile, int GifCodeSize, -+GIF_EXPORT int EGifPutCode(GifFileType *GifFile, int GifCodeSize, - const GifByteType *GifCodeBlock); --int EGifPutCodeNext(GifFileType *GifFile, -+GIF_EXPORT int EGifPutCodeNext(GifFileType *GifFile, - const GifByteType *GifCodeBlock); - - /****************************************************************************** -@@ -178,11 +192,11 @@ int EGifPutCodeNext(GifFileType *GifFile, - ******************************************************************************/ - - /* Main entry points */ --GifFileType *DGifOpenFileName(const char *GifFileName, int *Error); --GifFileType *DGifOpenFileHandle(int GifFileHandle, int *Error); --int DGifSlurp(GifFileType * GifFile); --GifFileType *DGifOpen(void *userPtr, InputFunc readFunc, int *Error); /* new one (TVT) */ -- int DGifCloseFile(GifFileType * GifFile, int *ErrorCode); -+GIF_EXPORT GifFileType *DGifOpenFileName(const char *GifFileName, int *Error); -+GIF_EXPORT GifFileType *DGifOpenFileHandle(int GifFileHandle, int *Error); -+GIF_EXPORT int DGifSlurp(GifFileType * GifFile); -+GIF_EXPORT GifFileType *DGifOpen(void *userPtr, InputFunc readFunc, int *Error); /* new one (TVT) */ -+GIF_EXPORT int DGifCloseFile(GifFileType * GifFile, int *ErrorCode); - - #define D_GIF_SUCCEEDED 0 - #define D_GIF_ERR_OPEN_FAILED 101 /* And DGif possible errors. */ -@@ -200,26 +214,26 @@ GifFileType *DGifOpen(void *userPtr, InputFunc readFunc, int *Error); /* new - #define D_GIF_ERR_EOF_TOO_SOON 113 - - /* These are legacy. You probably do not want to call them directly */ --int DGifGetScreenDesc(GifFileType *GifFile); --int DGifGetRecordType(GifFileType *GifFile, GifRecordType *GifType); --int DGifGetImageHeader(GifFileType *GifFile); --int DGifGetImageDesc(GifFileType *GifFile); --int DGifGetLine(GifFileType *GifFile, GifPixelType *GifLine, int GifLineLen); --int DGifGetPixel(GifFileType *GifFile, GifPixelType GifPixel); --int DGifGetExtension(GifFileType *GifFile, int *GifExtCode, -+GIF_EXPORT int DGifGetScreenDesc(GifFileType *GifFile); -+GIF_EXPORT int DGifGetRecordType(GifFileType *GifFile, GifRecordType *GifType); -+GIF_EXPORT int DGifGetImageHeader(GifFileType *GifFile); -+GIF_EXPORT int DGifGetImageDesc(GifFileType *GifFile); -+GIF_EXPORT int DGifGetLine(GifFileType *GifFile, GifPixelType *GifLine, int GifLineLen); -+GIF_EXPORT int DGifGetPixel(GifFileType *GifFile, GifPixelType GifPixel); -+GIF_EXPORT int DGifGetExtension(GifFileType *GifFile, int *GifExtCode, - GifByteType **GifExtension); --int DGifGetExtensionNext(GifFileType *GifFile, GifByteType **GifExtension); --int DGifGetCode(GifFileType *GifFile, int *GifCodeSize, -+GIF_EXPORT int DGifGetExtensionNext(GifFileType *GifFile, GifByteType **GifExtension); -+GIF_EXPORT int DGifGetCode(GifFileType *GifFile, int *GifCodeSize, - GifByteType **GifCodeBlock); --int DGifGetCodeNext(GifFileType *GifFile, GifByteType **GifCodeBlock); --int DGifGetLZCodes(GifFileType *GifFile, int *GifCode); --const char *DGifGetGifVersion(GifFileType *GifFile); -+GIF_EXPORT int DGifGetCodeNext(GifFileType *GifFile, GifByteType **GifCodeBlock); -+GIF_EXPORT int DGifGetLZCodes(GifFileType *GifFile, int *GifCode); -+GIF_EXPORT const char *DGifGetGifVersion(GifFileType *GifFile); - - - /****************************************************************************** - Error handling and reporting. - ******************************************************************************/ --extern const char *GifErrorString(int ErrorCode); /* new in 2012 - ESR */ -+GIF_EXPORT extern const char *GifErrorString(int ErrorCode); /* new in 2012 - ESR */ - - /***************************************************************************** - Everything below this point is new after version 1.2, supporting `slurp -@@ -230,43 +244,43 @@ extern const char *GifErrorString(int ErrorCode); /* new in 2012 - ESR */ - Color map handling from gif_alloc.c - ******************************************************************************/ - --extern ColorMapObject *GifMakeMapObject(int ColorCount, -+GIF_EXPORT extern ColorMapObject *GifMakeMapObject(int ColorCount, - const GifColorType *ColorMap); --extern void GifFreeMapObject(ColorMapObject *Object); --extern ColorMapObject *GifUnionColorMap(const ColorMapObject *ColorIn1, -+GIF_EXPORT extern void GifFreeMapObject(ColorMapObject *Object); -+GIF_EXPORT extern ColorMapObject *GifUnionColorMap(const ColorMapObject *ColorIn1, - const ColorMapObject *ColorIn2, - GifPixelType ColorTransIn2[]); --extern int GifBitSize(int n); -+GIF_EXPORT extern int GifBitSize(int n); - - /****************************************************************************** - Support for the in-core structures allocation (slurp mode). - ******************************************************************************/ - --extern void GifApplyTranslation(SavedImage *Image, GifPixelType Translation[]); --extern int GifAddExtensionBlock(int *ExtensionBlock_Count, -+GIF_EXPORT extern void GifApplyTranslation(SavedImage *Image, GifPixelType Translation[]); -+GIF_EXPORT extern int GifAddExtensionBlock(int *ExtensionBlock_Count, - ExtensionBlock **ExtensionBlocks, - int Function, - unsigned int Len, unsigned char ExtData[]); --extern void GifFreeExtensions(int *ExtensionBlock_Count, -+GIF_EXPORT extern void GifFreeExtensions(int *ExtensionBlock_Count, - ExtensionBlock **ExtensionBlocks); --extern SavedImage *GifMakeSavedImage(GifFileType *GifFile, -+GIF_EXPORT extern SavedImage *GifMakeSavedImage(GifFileType *GifFile, - const SavedImage *CopyFrom); --extern void GifFreeSavedImages(GifFileType *GifFile); -+GIF_EXPORT extern void GifFreeSavedImages(GifFileType *GifFile); - - /****************************************************************************** - 5.x functions for GIF89 graphics control blocks - ******************************************************************************/ - --int DGifExtensionToGCB(const size_t GifExtensionLength, -+GIF_EXPORT int DGifExtensionToGCB(const size_t GifExtensionLength, - const GifByteType *GifExtension, - GraphicsControlBlock *GCB); --size_t EGifGCBToExtension(const GraphicsControlBlock *GCB, -+GIF_EXPORT size_t EGifGCBToExtension(const GraphicsControlBlock *GCB, - GifByteType *GifExtension); - --int DGifSavedExtensionToGCB(GifFileType *GifFile, -+GIF_EXPORT int DGifSavedExtensionToGCB(GifFileType *GifFile, - int ImageIndex, - GraphicsControlBlock *GCB); --int EGifGCBToSavedExtension(const GraphicsControlBlock *GCB, -+GIF_EXPORT int EGifGCBToSavedExtension(const GraphicsControlBlock *GCB, - GifFileType *GifFile, - int ImageIndex); - -@@ -276,21 +290,21 @@ int EGifGCBToSavedExtension(const GraphicsControlBlock *GCB, - - #define GIF_FONT_WIDTH 8 - #define GIF_FONT_HEIGHT 8 --extern const unsigned char GifAsciiTable8x8[][GIF_FONT_WIDTH]; -+GIF_EXPORT extern const unsigned char GifAsciiTable8x8[][GIF_FONT_WIDTH]; - --extern void GifDrawText8x8(SavedImage *Image, -+GIF_EXPORT extern void GifDrawText8x8(SavedImage *Image, - const int x, const int y, - const char *legend, const int color); - --extern void GifDrawBox(SavedImage *Image, -+GIF_EXPORT extern void GifDrawBox(SavedImage *Image, - const int x, const int y, - const int w, const int d, const int color); - --extern void GifDrawRectangle(SavedImage *Image, -+GIF_EXPORT extern void GifDrawRectangle(SavedImage *Image, - const int x, const int y, - const int w, const int d, const int color); - --extern void GifDrawBoxedText8x8(SavedImage *Image, -+GIF_EXPORT extern void GifDrawBoxedText8x8(SavedImage *Image, - const int x, const int y, - const char *legend, - const int border, const int bg, const int fg); From 2c63fc1987f48ea4384961a1a59958e84716d139 Mon Sep 17 00:00:00 2001 From: Uilian Ries Date: Fri, 26 Jun 2020 17:42:12 -0300 Subject: [PATCH 3/3] Improve giflib 5.2.1 Signed-off-by: Uilian Ries --- recipes/giflib/5.2.1/CMakeLists.txt | 19 --------------- recipes/giflib/5.2.x/CMakeLists.txt | 24 +++++++++++++++++++ recipes/giflib/{5.2.1 => 5.2.x}/conandata.yml | 4 ++++ recipes/giflib/{5.2.1 => 5.2.x}/conanfile.py | 21 +++++++++------- .../patches/0001-msvc-unistd.patch} | 20 ++++++++-------- .../test_package/CMakeLists.txt | 3 +-- .../test_package/conanfile.py | 3 +-- .../test_package/test_package.c | 0 recipes/giflib/config.yml | 4 ++-- 9 files changed, 55 insertions(+), 43 deletions(-) delete mode 100644 recipes/giflib/5.2.1/CMakeLists.txt create mode 100644 recipes/giflib/5.2.x/CMakeLists.txt rename recipes/giflib/{5.2.1 => 5.2.x}/conandata.yml (63%) rename recipes/giflib/{5.2.1 => 5.2.x}/conanfile.py (79%) rename recipes/giflib/{5.2.1/patches/5.2.1.patch => 5.2.x/patches/0001-msvc-unistd.patch} (70%) rename recipes/giflib/{5.2.1 => 5.2.x}/test_package/CMakeLists.txt (64%) rename recipes/giflib/{5.2.1 => 5.2.x}/test_package/conanfile.py (78%) rename recipes/giflib/{5.2.1 => 5.2.x}/test_package/test_package.c (100%) diff --git a/recipes/giflib/5.2.1/CMakeLists.txt b/recipes/giflib/5.2.1/CMakeLists.txt deleted file mode 100644 index 4591a6bc0e6a2..0000000000000 --- a/recipes/giflib/5.2.1/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -cmake_minimum_required(VERSION 3.1) - -project(GifLib) - -set(sources - "source_subfolder/dgif_lib.c" - "source_subfolder/egif_lib.c" - "source_subfolder/gifalloc.c" - "source_subfolder/gif_err.c" - "source_subfolder/gif_font.c" - "source_subfolder/gif_hash.c" - "source_subfolder/openbsd-reallocarray.c" -) - -add_library(gif ${sources}) -target_include_directories(gif PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/source_subfolder") - -install(TARGETS gif ARCHIVE DESTINATION "lib" LIBRARY DESTINATION "lib" RUNTIME DESTINATION "bin") -install(FILES "source_subfolder/gif_lib.h" DESTINATION "include") diff --git a/recipes/giflib/5.2.x/CMakeLists.txt b/recipes/giflib/5.2.x/CMakeLists.txt new file mode 100644 index 0000000000000..a9fc12cfa4181 --- /dev/null +++ b/recipes/giflib/5.2.x/CMakeLists.txt @@ -0,0 +1,24 @@ +cmake_minimum_required(VERSION 2.8.12) +project(gif C) + +include(conanbuildinfo.cmake) +conan_basic_setup() + +set(SOURCE_FILES + "source_subfolder/dgif_lib.c" + "source_subfolder/egif_lib.c" + "source_subfolder/gifalloc.c" + "source_subfolder/gif_err.c" + "source_subfolder/gif_font.c" + "source_subfolder/gif_hash.c" + "source_subfolder/openbsd-reallocarray.c" +) + +add_library(${PROJECT_NAME} ${SOURCE_FILES}) +target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/source_subfolder") + +install(TARGETS ${PROJECT_NAME} + ARCHIVE DESTINATION "lib" + LIBRARY DESTINATION "lib" + RUNTIME DESTINATION "bin") +install(FILES "source_subfolder/gif_lib.h" DESTINATION "include") diff --git a/recipes/giflib/5.2.1/conandata.yml b/recipes/giflib/5.2.x/conandata.yml similarity index 63% rename from recipes/giflib/5.2.1/conandata.yml rename to recipes/giflib/5.2.x/conandata.yml index 32e1ab1e80ed9..8eae06423d9f4 100644 --- a/recipes/giflib/5.2.1/conandata.yml +++ b/recipes/giflib/5.2.x/conandata.yml @@ -2,3 +2,7 @@ sources: "5.2.1": url: "https://downloads.sourceforge.net/project/giflib/giflib-5.2.1.tar.gz" sha256: "31da5562f44c5f15d63340a09a4fd62b48c45620cd302f77a6d9acf0077879bd" +patches: + "5.2.1": + - patch_file: "patches/0001-msvc-unistd.patch" + base_path: source_subfolder diff --git a/recipes/giflib/5.2.1/conanfile.py b/recipes/giflib/5.2.x/conanfile.py similarity index 79% rename from recipes/giflib/5.2.1/conanfile.py rename to recipes/giflib/5.2.x/conanfile.py index 336a57a0b87a4..f7972f2d0b1fc 100644 --- a/recipes/giflib/5.2.1/conanfile.py +++ b/recipes/giflib/5.2.x/conanfile.py @@ -1,5 +1,4 @@ from conans import CMake, ConanFile, tools -from conans.errors import ConanInvalidConfiguration import os class GiflibConan(ConanFile): @@ -11,13 +10,17 @@ class GiflibConan(ConanFile): topics = ("conan", "giflib", "image", "multimedia", "format", "graphics") settings = "os", "arch", "compiler", "build_type" exports_sources = ["CMakeLists.txt", "patches/*"] - + generators = "cmake" _cmake = None @property def _source_subfolder(self): return "source_subfolder" + @property + def _build_subfolder(self): + return "build_subfolder" + def configure(self): del self.settings.compiler.libcxx del self.settings.compiler.cppstd @@ -25,18 +28,20 @@ def configure(self): def source(self): tools.get(**self.conan_data["sources"][self.version]) os.rename("%s-%s" % (self.name, self.version), self._source_subfolder) - tools.patch(base_path=self._source_subfolder, patch_file="patches/%s.patch" % self.version, strip=1) def _configure_cmake(self): if self._cmake: return self._cmake - self._cmake = CMake(self) - - self._cmake.configure() + self._cmake.configure(build_folder=self._build_subfolder) return self._cmake - + + def _patch_sources(self): + for patch in self.conan_data.get("patches", {}).get(self.version, []): + tools.patch(**patch) + def build(self): + self._patch_sources() cmake = self._configure_cmake() cmake.build() @@ -45,6 +50,6 @@ def package(self): cmake.install() self.copy("COPYING", src=self._source_subfolder, dst="licenses") - + def package_info(self): self.cpp_info.libs = tools.collect_libs(self) diff --git a/recipes/giflib/5.2.1/patches/5.2.1.patch b/recipes/giflib/5.2.x/patches/0001-msvc-unistd.patch similarity index 70% rename from recipes/giflib/5.2.1/patches/5.2.1.patch rename to recipes/giflib/5.2.x/patches/0001-msvc-unistd.patch index b58421ddb53e1..a42bf0e663d57 100644 --- a/recipes/giflib/5.2.1/patches/5.2.1.patch +++ b/recipes/giflib/5.2.x/patches/0001-msvc-unistd.patch @@ -1,11 +1,11 @@ -diff --git a/giflib-5.2.1/gif_font.c b/source_subfolder/gif_font.c +diff --git a/gif_font.c b/gif_font.c index d90783c..0fd20ed 100644 ---- a/giflib-5.2.1/gif_font.c -+++ b/source_subfolder/gif_font.c +--- a/gif_font.c ++++ b/gif_font.c @@ -11,6 +11,10 @@ SPDX-License-Identifier: MIT - + #include "gif_lib.h" - + +#ifdef _MSC_VER +# define strtok_r strtok_s +#endif @@ -13,19 +13,19 @@ index d90783c..0fd20ed 100644 /***************************************************************************** Ascii 8 by 8 regular font - only first 128 characters are supported. *****************************************************************************/ -diff --git a/giflib-5.2.1/gif_hash.h b/source_subfolder/gif_hash.h +diff --git a/gif_hash.h b/gif_hash.h index 6a1b585..6311cd1 100644 ---- a/giflib-5.2.1/gif_hash.h -+++ b/source_subfolder/gif_hash.h +--- a/gif_hash.h ++++ b/gif_hash.h @@ -9,7 +9,11 @@ SPDX-License-Identifier: MIT #ifndef _GIF_HASH_H_ #define _GIF_HASH_H_ - + +#ifdef _WIN32 +#else #include +#endif + #include - + #define HT_SIZE 8192 /* 12bits = 4096 or twice as big! */ diff --git a/recipes/giflib/5.2.1/test_package/CMakeLists.txt b/recipes/giflib/5.2.x/test_package/CMakeLists.txt similarity index 64% rename from recipes/giflib/5.2.1/test_package/CMakeLists.txt rename to recipes/giflib/5.2.x/test_package/CMakeLists.txt index ba760c4a87072..f34af0144ebaf 100644 --- a/recipes/giflib/5.2.1/test_package/CMakeLists.txt +++ b/recipes/giflib/5.2.x/test_package/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8.11) +cmake_minimum_required(VERSION 2.8.12) project(test_package) include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) @@ -6,4 +6,3 @@ conan_basic_setup() add_executable(${PROJECT_NAME} test_package.c) target_link_libraries(${PROJECT_NAME} ${CONAN_LIBS}) -set_property(TARGET ${CMAKE_PROJECT_NAME} PROPERTY C_STANDARD 99) diff --git a/recipes/giflib/5.2.1/test_package/conanfile.py b/recipes/giflib/5.2.x/test_package/conanfile.py similarity index 78% rename from recipes/giflib/5.2.1/test_package/conanfile.py rename to recipes/giflib/5.2.x/test_package/conanfile.py index bd087afa29d0c..8e01d688316b3 100644 --- a/recipes/giflib/5.2.1/test_package/conanfile.py +++ b/recipes/giflib/5.2.x/test_package/conanfile.py @@ -12,7 +12,6 @@ def build(self): def test(self): if not tools.cross_building(self.settings): - img_name = os.path.join(self.source_folder, "testimg.gif") bin_path = os.path.join("bin", "test_package") - command = "%s %s" % (bin_path, img_name) + command = "%s testimg.gif" % (bin_path) self.run(command, run_environment=True) diff --git a/recipes/giflib/5.2.1/test_package/test_package.c b/recipes/giflib/5.2.x/test_package/test_package.c similarity index 100% rename from recipes/giflib/5.2.1/test_package/test_package.c rename to recipes/giflib/5.2.x/test_package/test_package.c diff --git a/recipes/giflib/config.yml b/recipes/giflib/config.yml index 14396ebe0c59c..53310203d323d 100644 --- a/recipes/giflib/config.yml +++ b/recipes/giflib/config.yml @@ -1,5 +1,5 @@ versions: "5.1.4": - folder: all + folder: "all" "5.2.1": - folder: "5.2.1" + folder: "5.2.x"