Skip to content

Commit

Permalink
Add libpng-apng as a new port (microsoft#2578)
Browse files Browse the repository at this point in the history
* Add libpng-apng as a new ports definition

* Update portfile to use 7Z to extract patch + fix others
  • Loading branch information
alberthdev authored and ras0219-msft committed Feb 17, 2018
1 parent 14ef8e2 commit d60b48c
Show file tree
Hide file tree
Showing 4 changed files with 103 additions and 0 deletions.
4 changes: 4 additions & 0 deletions ports/libpng-apng/CONTROL
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Source: libpng-apng
Version: 1.6.34-2
Build-Depends: zlib
Description: libpng-apng is a library implementing an interface for reading and writing (A)PNG ((Animated) Portable Network Graphics) format files. This is backward compatible with the regular libpng, both in library usage and format.
78 changes: 78 additions & 0 deletions ports/libpng-apng/portfile.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
include(vcpkg_common_functions)

set(LIBPNG_APNG_VERSION 1.6.34)

vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO glennrp/libpng
REF v${LIBPNG_APNG_VERSION}
SHA512 23b6112a1d16a34c8037d5c5812944d4385fc96ed819a22172776bdd5acd3a34e55f073b46087b77d1c12cecc68f9e8ba7754c86b5ab6ed3016063e1c795de7a
HEAD_REF master
)

vcpkg_download_distfile(LIBPNG_APNG_PATCH_ARCHIVE
URLS "https://downloads.sourceforge.net/project/libpng-apng/libpng16/${LIBPNG_APNG_VERSION}/libpng-${LIBPNG_APNG_VERSION}-apng.patch.gz"
FILENAME "libpng-${LIBPNG_APNG_VERSION}-apng.patch.gz"
SHA512 0777b8e55aeee207ee92479f2258ef1f60f16d7951fdbc6d89a80ef533b86dadecd1ef659d6fe7602d8ea3a8e711a096b0f77ee09b993799b73dfffddfe5dd3c
)

vcpkg_find_acquire_program(7Z)

vcpkg_execute_required_process(
COMMAND ${7Z} x ${LIBPNG_APNG_PATCH_ARCHIVE} -aoa
WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/src
LOGNAME extract-patch.log
)

find_program(GIT NAMES git git.cmd)

# sed and awk are installed with git but in a different directory
get_filename_component(GIT_EXE_PATH ${GIT} DIRECTORY)
set(AWK_EXE_PATH "${GIT_EXE_PATH}/../usr/bin")
set(ENV{PATH} "$ENV{PATH};${AWK_EXE_PATH}")

vcpkg_apply_patches(
SOURCE_PATH ${SOURCE_PATH}
PATCHES
${CMAKE_CURRENT_LIST_DIR}/use-abort-on-all-platforms.patch
${CURRENT_BUILDTREES_DIR}/src/libpng-${LIBPNG_APNG_VERSION}-apng.patch
)

if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
set(PNG_STATIC_LIBS OFF)
set(PNG_SHARED_LIBS ON)
else()
set(PNG_STATIC_LIBS ON)
set(PNG_SHARED_LIBS OFF)
endif()

vcpkg_configure_cmake(
SOURCE_PATH ${SOURCE_PATH}
PREFER_NINJA
OPTIONS
-DPNG_STATIC=${PNG_STATIC_LIBS}
-DPNG_SHARED=${PNG_SHARED_LIBS}
-DPNG_TESTS=OFF
-DPNG_PREFIX=a
-DSKIP_INSTALL_PROGRAMS=ON
-DSKIP_INSTALL_EXECUTABLES=ON
-DSKIP_INSTALL_FILES=ON
OPTIONS_DEBUG
-DSKIP_INSTALL_HEADERS=ON
)

vcpkg_install_cmake()

if(VCPKG_LIBRARY_LINKAGE STREQUAL static)
file(RENAME ${CURRENT_PACKAGES_DIR}/lib/libpng16_static.lib ${CURRENT_PACKAGES_DIR}/lib/libpng16.lib)
file(RENAME ${CURRENT_PACKAGES_DIR}/debug/lib/libpng16_staticd.lib ${CURRENT_PACKAGES_DIR}/debug/lib/libpng16d.lib)
endif()

# Remove CMake config files as they are incorrectly generated and everyone uses built-in FindPNG anyway.
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/lib/libpng ${CURRENT_PACKAGES_DIR}/debug/lib/libpng)
file(COPY ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/libpng-apng)
file(RENAME ${CURRENT_PACKAGES_DIR}/share/libpng-apng/LICENSE ${CURRENT_PACKAGES_DIR}/share/libpng-apng/copyright)

vcpkg_copy_pdbs()

file(COPY ${CMAKE_CURRENT_LIST_DIR}/usage DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT})
4 changes: 4 additions & 0 deletions ports/libpng-apng/usage
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
The package libpng-apng is compatible with built-in CMake targets:

find_package(PNG REQUIRED)
target_link_libraries(main PRIVATE PNG::PNG)
17 changes: 17 additions & 0 deletions ports/libpng-apng/use-abort-on-all-platforms.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
diff --git a/pngpriv.h b/pngpriv.h
index fe3355d..5a049b5 100644
--- a/pngpriv.h
+++ b/pngpriv.h
@@ -457,11 +457,7 @@

/* Memory model/platform independent fns */
#ifndef PNG_ABORT
-# ifdef _WINDOWS_
-# define PNG_ABORT() ExitProcess(0)
-# else
-# define PNG_ABORT() abort()
-# endif
+# define PNG_ABORT() abort()
#endif

/* These macros may need to be architecture dependent. */

0 comments on commit d60b48c

Please sign in to comment.