aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/giflib
diff options
context:
space:
mode:
authorEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
committerEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
commit54409423f767d8b1cf30cb7d0efca6b4ca138823 (patch)
treed915ac7828703ce4b963efdd9728a1777ba18c1e /vcpkg/ports/giflib
move to own git serverHEADmaster
Diffstat (limited to 'vcpkg/ports/giflib')
-rw-r--r--vcpkg/ports/giflib/CMakeLists.txt44
-rw-r--r--vcpkg/ports/giflib/exports.def55
-rw-r--r--vcpkg/ports/giflib/msvc.diff89
-rw-r--r--vcpkg/ports/giflib/portfile.cmake30
-rw-r--r--vcpkg/ports/giflib/usage4
-rw-r--r--vcpkg/ports/giflib/vcpkg-cmake-wrapper.cmake25
-rw-r--r--vcpkg/ports/giflib/vcpkg.json14
7 files changed, 261 insertions, 0 deletions
diff --git a/vcpkg/ports/giflib/CMakeLists.txt b/vcpkg/ports/giflib/CMakeLists.txt
new file mode 100644
index 0000000..aa1fe7c
--- /dev/null
+++ b/vcpkg/ports/giflib/CMakeLists.txt
@@ -0,0 +1,44 @@
+cmake_minimum_required(VERSION 3.5)
+
+project(giflib C)
+
+set(GIFLIB_EXPORTS "NOTFOUND" CACHE FILEPATH "The path of the DEF file listing the DLL exports.")
+
+set(GIFLIB_HEADERS
+ gif_lib.h
+)
+
+set(GIFLIB_SOURCES
+ dgif_lib.c
+ egif_lib.c
+ gifalloc.c
+ gif_err.c
+ gif_font.c
+ gif_hash.c
+ openbsd-reallocarray.c
+)
+
+add_definitions(-D_CRT_SECURE_NO_WARNINGS)
+
+include(CheckSymbolExists)
+check_symbol_exists(reallocarray "stdlib.h" HAVE_REALLOCARRAY)
+if(HAVE_REALLOCARRAY)
+ add_definitions(-DHAVE_REALLOCARRAY)
+endif()
+
+add_library(gif ${GIFLIB_SOURCES})
+if(BUILD_SHARED_LIBS AND WIN32)
+ target_sources(gif PRIVATE "${GIFLIB_EXPORTS}")
+else()
+ set(UNUSED "${GIFLIB_EXPORTS}")
+endif()
+
+if (NOT GIFLIB_SKIP_HEADERS)
+ install(FILES ${GIFLIB_HEADERS} DESTINATION include)
+endif ()
+
+install(TARGETS gif
+ RUNTIME DESTINATION bin
+ LIBRARY DESTINATION lib
+ ARCHIVE DESTINATION lib
+)
diff --git a/vcpkg/ports/giflib/exports.def b/vcpkg/ports/giflib/exports.def
new file mode 100644
index 0000000..5f3edb9
--- /dev/null
+++ b/vcpkg/ports/giflib/exports.def
@@ -0,0 +1,55 @@
+EXPORTS
+ DGifCloseFile @1
+ DGifExtensionToGCB @2
+ DGifGetCode @3
+ DGifGetCodeNext @4
+ DGifGetExtension @5
+ DGifGetExtensionNext @6
+ DGifGetImageDesc @7
+ DGifGetLZCodes @8
+ DGifGetLine @9
+ DGifGetPixel @10
+ DGifGetRecordType @11
+ DGifGetScreenDesc @12
+ DGifOpen @13
+ DGifOpenFileHandle @14
+ DGifOpenFileName @15
+ DGifSavedExtensionToGCB @16
+ DGifSlurp @17
+ EGifCloseFile @18
+ EGifGCBToExtension @19
+ EGifGCBToSavedExtension @20
+ EGifGetGifVersion @21
+ EGifOpen @22
+ EGifOpenFileHandle @23
+ EGifOpenFileName @24
+ EGifPutCode @25
+ EGifPutCodeNext @26
+ EGifPutComment @27
+ EGifPutExtension @28
+ EGifPutExtensionBlock @29
+ EGifPutExtensionLeader @30
+ EGifPutExtensionTrailer @31
+ EGifPutImageDesc @32
+ EGifPutLine @33
+ EGifPutPixel @34
+ EGifPutScreenDesc @35
+ EGifSetGifVersion @36
+ EGifSpew @37
+ FreeLastSavedImage @38
+ GifAddExtensionBlock @39
+ GifApplyTranslation @40
+ GifAsciiTable8x8 @41 DATA
+ GifBitSize @42
+ GifDrawBox @43
+ GifDrawBoxedText8x8 @44
+ GifDrawRectangle @45
+ GifDrawText8x8 @46
+ GifErrorString @47
+ GifFreeExtensions @48
+ GifFreeMapObject @49
+ GifFreeSavedImages @50
+ GifMakeMapObject @51
+ GifMakeSavedImage @52
+ GifUnionColorMap @53
+ openbsd_reallocarray @54
diff --git a/vcpkg/ports/giflib/msvc.diff b/vcpkg/ports/giflib/msvc.diff
new file mode 100644
index 0000000..30ee894
--- /dev/null
+++ b/vcpkg/ports/giflib/msvc.diff
@@ -0,0 +1,89 @@
+diff --git a/dgif_lib.c b/dgif_lib.c
+index cbcf23f..15dee84 100644
+--- a/dgif_lib.c
++++ b/dgif_lib.c
+@@ -57,7 +57,7 @@ GifFileType *DGifOpenFileName(const char *FileName, int *Error) {
+ int FileHandle;
+ GifFileType *GifFile;
+
+- if ((FileHandle = open(FileName, O_RDONLY)) == -1) {
++ if ((FileHandle = _open(FileName, O_RDONLY)) == -1) {
+ if (Error != NULL) {
+ *Error = D_GIF_ERR_OPEN_FAILED;
+ }
+@@ -84,7 +84,7 @@ GifFileType *DGifOpenFileHandle(int FileHandle, int *Error) {
+ if (Error != NULL) {
+ *Error = D_GIF_ERR_NOT_ENOUGH_MEM;
+ }
+- (void)close(FileHandle);
++ (void)_close(FileHandle);
+ return NULL;
+ }
+
+@@ -99,7 +99,7 @@ GifFileType *DGifOpenFileHandle(int FileHandle, int *Error) {
+ if (Error != NULL) {
+ *Error = D_GIF_ERR_NOT_ENOUGH_MEM;
+ }
+- (void)close(FileHandle);
++ (void)_close(FileHandle);
+ free((char *)GifFile);
+ return NULL;
+ }
+@@ -110,7 +110,7 @@ GifFileType *DGifOpenFileHandle(int FileHandle, int *Error) {
+ _setmode(FileHandle, O_BINARY); /* Make sure it is in binary mode. */
+ #endif /* _WIN32 */
+
+- f = fdopen(FileHandle, "rb"); /* Make it into a stream: */
++ f = _fdopen(FileHandle, "rb"); /* Make it into a stream: */
+
+ /*@-mustfreeonly@*/
+ GifFile->Private = (void *)Private;
+diff --git a/egif_lib.c b/egif_lib.c
+index 1526868..6644eed 100644
+--- a/egif_lib.c
++++ b/egif_lib.c
+@@ -64,10 +64,10 @@ GifFileType *EGifOpenFileName(const char *FileName, const bool TestExistence,
+ GifFileType *GifFile;
+
+ if (TestExistence) {
+- FileHandle = open(FileName, O_WRONLY | O_CREAT | O_EXCL,
++ FileHandle = _open(FileName, O_WRONLY | O_CREAT | O_EXCL,
+ S_IREAD | S_IWRITE);
+ } else {
+- FileHandle = open(FileName, O_WRONLY | O_CREAT | O_TRUNC,
++ FileHandle = _open(FileName, O_WRONLY | O_CREAT | O_TRUNC,
+ S_IREAD | S_IWRITE);
+ }
+
+@@ -79,7 +79,7 @@ GifFileType *EGifOpenFileName(const char *FileName, const bool TestExistence,
+ }
+ GifFile = EGifOpenFileHandle(FileHandle, Error);
+ if (GifFile == (GifFileType *)NULL) {
+- (void)close(FileHandle);
++ (void)_close(FileHandle);
+ }
+ return GifFile;
+ }
+@@ -125,7 +125,7 @@ GifFileType *EGifOpenFileHandle(const int FileHandle, int *Error) {
+ _setmode(FileHandle, O_BINARY); /* Make sure it is in binary mode. */
+ #endif /* _WIN32 */
+
+- f = fdopen(FileHandle, "wb"); /* Make it into a stream: */
++ f = _fdopen(FileHandle, "wb"); /* Make it into a stream: */
+
+ GifFile->Private = (void *)Private;
+ Private->FileHandle = FileHandle;
+diff --git a/gif_font.c b/gif_font.c
+index 75f9731..c215795 100644
+--- a/gif_font.c
++++ b/gif_font.c
+@@ -200,6 +200,9 @@ void GifDrawRectangle(SavedImage *Image, const int x, const int y, const int w,
+ }
+ }
+
++#ifdef _MSC_VER
++# define strtok_r strtok_s
++#endif
+ 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/vcpkg/ports/giflib/portfile.cmake b/vcpkg/ports/giflib/portfile.cmake
new file mode 100644
index 0000000..c40de0f
--- /dev/null
+++ b/vcpkg/ports/giflib/portfile.cmake
@@ -0,0 +1,30 @@
+set(EXTRA_PATCHES "")
+if (VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
+ list(APPEND EXTRA_PATCHES msvc.diff)
+endif()
+
+vcpkg_from_sourceforge(
+ OUT_SOURCE_PATH SOURCE_PATH
+ REPO "giflib"
+ FILENAME "giflib-${VERSION}.tar.gz"
+ SHA512 0865ab2b1904fa14640c655fdb14bb54244ad18a66e358565c00287875d00912343f9be8bfac7658cc0146200d626f7ec9160d7a339f20ba3be6b9941d73975f
+ PATCHES
+ ${EXTRA_PATCHES}
+)
+
+file(COPY "${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt" DESTINATION "${SOURCE_PATH}")
+
+vcpkg_cmake_configure(
+ SOURCE_PATH "${SOURCE_PATH}"
+ OPTIONS
+ "-DGIFLIB_EXPORTS=${CMAKE_CURRENT_LIST_DIR}/exports.def"
+ OPTIONS_DEBUG
+ -DGIFLIB_SKIP_HEADERS=ON
+)
+
+vcpkg_cmake_install()
+vcpkg_copy_pdbs()
+
+file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/gif")
+file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
+vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/COPYING")
diff --git a/vcpkg/ports/giflib/usage b/vcpkg/ports/giflib/usage
new file mode 100644
index 0000000..ebd07d1
--- /dev/null
+++ b/vcpkg/ports/giflib/usage
@@ -0,0 +1,4 @@
+The package giflib is compatible with built-in CMake targets:
+
+ find_package(GIF REQUIRED)
+ target_link_libraries(main PRIVATE GIF::GIF)
diff --git a/vcpkg/ports/giflib/vcpkg-cmake-wrapper.cmake b/vcpkg/ports/giflib/vcpkg-cmake-wrapper.cmake
new file mode 100644
index 0000000..52ae01f
--- /dev/null
+++ b/vcpkg/ports/giflib/vcpkg-cmake-wrapper.cmake
@@ -0,0 +1,25 @@
+find_path(GIF_INCLUDE_DIR NAMES gif_lib.h PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include" NO_DEFAULT_PATH)
+find_library(GIF_LIBRARY_RELEASE NAMES gif PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib" NO_DEFAULT_PATH)
+find_library(GIF_LIBRARY_DEBUG NAMES gif PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib" NO_DEFAULT_PATH)
+include(SelectLibraryConfigurations)
+select_library_configurations(GIF)
+set(GIF_LIBRARY "${GIF_LIBRARY}" CACHE STRING "")
+unset(GIF_LIBRARY)
+unset(GIF_FOUND)
+if(NOT TARGET GIF::GIF)
+ add_library(GIF::GIF UNKNOWN IMPORTED)
+ set_target_properties(GIF::GIF PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${GIF_INCLUDE_DIR}"
+ IMPORTED_CONFIGURATIONS RELEASE
+ IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
+ IMPORTED_LOCATION_RELEASE "${GIF_LIBRARY_RELEASE}"
+ )
+ if(GIF_LIBRARY_DEBUG)
+ set_property(TARGET GIF::GIF APPEND PROPERTY
+ IMPORTED_CONFIGURATIONS DEBUG)
+ set_target_properties(GIF::GIF PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
+ IMPORTED_LOCATION_DEBUG "${GIF_LIBRARY_DEBUG}")
+ endif()
+endif()
+_find_package(${ARGS})
diff --git a/vcpkg/ports/giflib/vcpkg.json b/vcpkg/ports/giflib/vcpkg.json
new file mode 100644
index 0000000..893adc1
--- /dev/null
+++ b/vcpkg/ports/giflib/vcpkg.json
@@ -0,0 +1,14 @@
+{
+ "name": "giflib",
+ "version": "5.2.2",
+ "port-version": 2,
+ "description": "A library for reading and writing gif images.",
+ "homepage": "https://sourceforge.net/projects/giflib/",
+ "license": "MIT",
+ "dependencies": [
+ {
+ "name": "vcpkg-cmake",
+ "host": true
+ }
+ ]
+}