Update EXAMPLE_fix_libpng to reflect the current state of vcpkg

This commit is contained in:
Alexander Karatarakis 2016-09-19 15:32:12 -07:00
parent edb8b44b13
commit 7f04e737f3

View File

@ -4,13 +4,13 @@ Fixing libpng:x86-uwp
First, try building: First, try building:
``` ```
PS D:\src\cpp-packages> vcpkg install libpng:x86-uwp PS D:\src\vcpkg> vcpkg install libpng:x86-uwp
-- SYSROOT=D:/src/cpp-packages/sysroot/x86-uwp -- CURRENT_INSTALLED_DIR=D:/src/vcpkg/installed/x86-uwp
-- DISTDIR=D:/src/cpp-packages/distdir -- DOWNLOADS=D:/src/vcpkg/downloads
-- CURRENT_SOFTWARE_DIR=D:/src/cpp-packages/software/libpng_x86-uwp -- CURRENT_PACKAGES_DIR=D:/src/vcpkg/packages/libpng_x86-uwp
-- CURRENT_WORKSRC_DIR=D:/src/cpp-packages/worksrc/libpng -- CURRENT_BUILDTREES_DIR=D:/src/vcpkg/buildtrees/libpng
-- CURRENT_PORT_DIR=D:/src/cpp-packages/ports/libpng/. -- CURRENT_PORT_DIR=D:/src/vcpkg/ports/libpng/.
-- Using cached D:/src/cpp-packages/distdir/libpng-1.6.24.tar.xz -- Using cached D:/src/vcpkg/downloads/libpng-1.6.24.tar.xz
-- Extracting done -- Extracting done
-- Configuring x86-uwp-rel -- Configuring x86-uwp-rel
-- Configuring x86-uwp-rel done -- Configuring x86-uwp-rel done
@ -21,16 +21,16 @@ CMake Error at scripts/cmake/execute_required_process.cmake:14 (message):
Command failed: C:/Program Command failed: C:/Program
Files/CMake/bin/cmake.exe;--build;.;--config;Release Files/CMake/bin/cmake.exe;--build;.;--config;Release
Working Directory: D:/src/cpp-packages/worksrc/libpng/x86-uwp-rel Working Directory: D:/src/vcpkg/buildtrees/libpng/x86-uwp-rel
See logs for more information: See logs for more information:
D:\src\cpp-packages\worksrc\libpng\build-x86-uwp-rel-out.log D:\src\vcpkg\buildtrees\libpng\build-x86-uwp-rel-out.log
D:\src\cpp-packages\worksrc\libpng\build-x86-uwp-rel-err.log D:\src\vcpkg\buildtrees\libpng\build-x86-uwp-rel-err.log
Call Stack (most recent call first): Call Stack (most recent call first):
scripts/cmake/build_standard_cmake.cmake:3 (execute_required_process) scripts/cmake/vcpkg_build_cmake.cmake:3 (execute_required_process)
ports/libpng/portfile.cmake:22 (build_standard_cmake) ports/libpng/portfile.cmake:22 (vcpkg_build_cmake)
scripts/ports.cmake:84 (include) scripts/ports.cmake:84 (include)
@ -42,17 +42,17 @@ Next, looking at the above logs (build-...-out.log and build-...-err.log).
``` ```
// build-x86-uwp-rel-out.log // build-x86-uwp-rel-out.log
... ...
"D:\src\cpp-packages\worksrc\libpng\x86-uwp-rel\ALL_BUILD.vcxproj" (default target) (1) -> "D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\ALL_BUILD.vcxproj" (default target) (1) ->
"D:\src\cpp-packages\worksrc\libpng\x86-uwp-rel\png.vcxproj" (default target) (3) -> "D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\png.vcxproj" (default target) (3) ->
(ClCompile target) -> (ClCompile target) ->
D:\src\cpp-packages\worksrc\libpng\src\libpng-1.6.24\pngerror.c(775): warning C4013: 'ExitProcess' undefined; assuming extern returning int [D:\src\cpp-packages\worksrc\libpng\x86-uwp-rel\png.vcxproj] D:\src\vcpkg\buildtrees\libpng\src\libpng-1.6.24\pngerror.c(775): warning C4013: 'ExitProcess' undefined; assuming extern returning int [D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\png.vcxproj]
"D:\src\cpp-packages\worksrc\libpng\x86-uwp-rel\ALL_BUILD.vcxproj" (default target) (1) -> "D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\ALL_BUILD.vcxproj" (default target) (1) ->
"D:\src\cpp-packages\worksrc\libpng\x86-uwp-rel\png.vcxproj" (default target) (3) -> "D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\png.vcxproj" (default target) (3) ->
(Link target) -> (Link target) ->
pngerror.obj : error LNK2019: unresolved external symbol _ExitProcess referenced in function _png_longjmp [D:\src\cpp-packages\worksrc\libpng\x86-uwp-rel\png.vcxproj] pngerror.obj : error LNK2019: unresolved external symbol _ExitProcess referenced in function _png_longjmp [D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\png.vcxproj]
D:\src\cpp-packages\worksrc\libpng\x86-uwp-rel\Release\libpng16.dll : fatal error LNK1120: 1 unresolved externals [D:\src\cpp-packages\worksrc\libpng\x86-uwp-rel\png.vcxproj] D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\Release\libpng16.dll : fatal error LNK1120: 1 unresolved externals [D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\png.vcxproj]
1 Warning(s) 1 Warning(s)
2 Error(s) 2 Error(s)
@ -62,7 +62,7 @@ Time Elapsed 00:00:04.19
Taking a look at [MSDN](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682658(v=vs.85).aspx) shows that `ExitProcess` is only available for desktop apps. Additionally, it's useful to see the surrounding context: Taking a look at [MSDN](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682658(v=vs.85).aspx) shows that `ExitProcess` is only available for desktop apps. Additionally, it's useful to see the surrounding context:
```c ```c
/* worksrc\libpng\src\libpng-1.6.24\pngerror.c:769 */ /* buildtrees\libpng\src\libpng-1.6.24\pngerror.c:769 */
/* If control reaches this point, png_longjmp() must not return. The only /* If control reaches this point, png_longjmp() must not return. The only
* choice is to terminate the whole process (or maybe the thread); to do * choice is to terminate the whole process (or maybe the thread); to do
* this the ANSI-C abort() function is used unless a different method is * this the ANSI-C abort() function is used unless a different method is
@ -74,7 +74,7 @@ Taking a look at [MSDN](https://msdn.microsoft.com/en-us/library/windows/desktop
A recursive search for `PNG_ABORT` reveals the definition: A recursive search for `PNG_ABORT` reveals the definition:
``` ```
PS D:\src\cpp-packages\worksrc\libpng\src\libpng-1.6.24> findstr /snipl "PNG_ABORT" * PS D:\src\vcpkg\buildtrees\libpng\src\libpng-1.6.24> findstr /snipl "PNG_ABORT" *
CHANGES:701: Added PNG_SETJMP_SUPPORTED, PNG_SETJMP_NOT_SUPPORTED, and PNG_ABORT() macros CHANGES:701: Added PNG_SETJMP_SUPPORTED, PNG_SETJMP_NOT_SUPPORTED, and PNG_ABORT() macros
libpng-manual.txt:432:errors will result in a call to PNG_ABORT() which defaults to abort(). libpng-manual.txt:432:errors will result in a call to PNG_ABORT() which defaults to abort().
libpng-manual.txt:434:You can #define PNG_ABORT() to a function that does something libpng-manual.txt:434:You can #define PNG_ABORT() to a function that does something
@ -97,7 +97,7 @@ pngpriv.h:463:# define PNG_ABORT() abort()
This already gives us some great clues, but the full definition tells the complete story. This already gives us some great clues, but the full definition tells the complete story.
```c ```c
/* worksrc\libpng\src\libpng-1.6.24\pngpriv.h:459 */ /* buildtrees\libpng\src\libpng-1.6.24\pngpriv.h:459 */
#ifndef PNG_ABORT #ifndef PNG_ABORT
# ifdef _WINDOWS_ # ifdef _WINDOWS_
# define PNG_ABORT() ExitProcess(0) # define PNG_ABORT() ExitProcess(0)
@ -111,15 +111,15 @@ This already gives us some great clues, but the full definition tells the comple
I recommend using git to create the patch file, since you'll already have it installed. I recommend using git to create the patch file, since you'll already have it installed.
``` ```
PS D:\src\cpp-packages\worksrc\libpng\src\libpng-1.6.24> git init . PS D:\src\vcpkg\buildtrees\libpng\src\libpng-1.6.24> git init .
Initialized empty Git repository in D:/src/cpp-packages/worksrc/libpng/src/libpng-1.6.24/.git/ Initialized empty Git repository in D:/src/vcpkg/buildtrees/libpng/src/libpng-1.6.24/.git/
PS D:\src\cpp-packages\worksrc\libpng\src\libpng-1.6.24> git add . PS D:\src\vcpkg\buildtrees\libpng\src\libpng-1.6.24> git add .
warning: LF will be replaced by CRLF in ANNOUNCE. warning: LF will be replaced by CRLF in ANNOUNCE.
The file will have its original line endings in your working directory. The file will have its original line endings in your working directory.
... ...
PS D:\src\cpp-packages\worksrc\libpng\src\libpng-1.6.24> git commit -m "temp" PS D:\src\vcpkg\buildtrees\libpng\src\libpng-1.6.24> git commit -m "temp"
[master (root-commit) 68f253f] temp [master (root-commit) 68f253f] temp
422 files changed, 167717 insertions(+) 422 files changed, 167717 insertions(+)
... ...
@ -127,7 +127,7 @@ PS D:\src\cpp-packages\worksrc\libpng\src\libpng-1.6.24> git commit -m "temp"
Now we can modify `pngpriv.h` to use `abort()` everywhere. Now we can modify `pngpriv.h` to use `abort()` everywhere.
```c ```c
/* worksrc\libpng\src\libpng-1.6.24\pngpriv.h:459 */ /* buildtrees\libpng\src\libpng-1.6.24\pngpriv.h:459 */
#ifndef PNG_ABORT #ifndef PNG_ABORT
# define PNG_ABORT() abort() # define PNG_ABORT() abort()
#endif #endif
@ -135,51 +135,48 @@ Now we can modify `pngpriv.h` to use `abort()` everywhere.
The output of `git diff` is already in patch format, so we just need to save the patch into the `ports/libpng` directory. The output of `git diff` is already in patch format, so we just need to save the patch into the `ports/libpng` directory.
``` ```
PS worksrc\libpng\src\libpng-1.6.24> git diff | out-file -enc ascii ..\..\..\..\ports\libpng\use-abort-on-all-platforms.patch PS buildtrees\libpng\src\libpng-1.6.24> git diff | out-file -enc ascii ..\..\..\..\ports\libpng\use-abort-on-all-platforms.patch
``` ```
Finally, we need to apply the patch after extracting the source. Finally, we need to apply the patch after extracting the source.
```cmake ```cmake
# ports\libpng\portfile.cmake # ports\libpng\portfile.cmake
... ...
extract_source_archive(${ARCHIVE}) vcpkg_extract_source_archive(${ARCHIVE})
find_program(GIT git) find_program(GIT git)
execute_required_process( vcpkg_execute_required_process(
COMMAND ${GIT} init COMMAND ${GIT} init
WORKING_DIRECTORY ${CURRENT_WORKSRC_DIR}/src/libpng-1.6.24 WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/src/libpng-1.6.24
LOGNAME git-init LOGNAME git-init
) )
execute_process( execute_process(
COMMAND ${GIT} apply "${CMAKE_CURRENT_LIST_DIR}/use-abort-on-all-platforms.patch" --ignore-whitespace --whitespace=nowarn COMMAND ${GIT} apply "${CMAKE_CURRENT_LIST_DIR}/use-abort-on-all-platforms.patch" --ignore-whitespace --whitespace=nowarn
WORKING_DIRECTORY ${CURRENT_WORKSRC_DIR}/src/libpng-1.6.24 WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/src/libpng-1.6.24
) )
configure_standard_cmake( vcpkg_configure_cmake(
... ...
``` ```
To be completely sure this works from the top, we need to clear out all the caches. To be completely sure this works from the top, we need to purge the package:
``` ```
PS D:\src\cpp-packages> vcpkg remove libpng:x86-uwp PS D:\src\vcpkg> vcpkg remove --purge libpng:x86-uwp
Package libpng:x86-uwp was successfully removed Package libpng:x86-uwp was successfully removed
PS D:\src\cpp-packages> vcpkg purge libpng:x86-uwp
Cleaned up D:\src\cpp-packages\software\libpng_x86-uwp
PS D:\src\cpp-packages> vcpkg clean libpng
Cleaned up D:\src\cpp-packages\worksrc\libpng
``` ```
and delete the building directory: D:\src\vcpkg\buildtrees\libpng
Now we try a fresh, from scratch install. Now we try a fresh, from scratch install.
``` ```
PS D:\src\cpp-packages> vcpkg install libpng:x86-uwp PS D:\src\vcpkg> vcpkg install libpng:x86-uwp
-- SYSROOT=D:/src/cpp-packages/sysroot/x86-uwp -- CURRENT_INSTALLED_DIR=D:/src/vcpkg/installed/x86-uwp
-- DISTDIR=D:/src/cpp-packages/distdir -- DOWNLOADS=D:/src/vcpkg/downloads
-- CURRENT_SOFTWARE_DIR=D:/src/cpp-packages/software/libpng_x86-uwp -- CURRENT_PACKAGES_DIR=D:/src/vcpkg/packages/libpng_x86-uwp
-- CURRENT_WORKSRC_DIR=D:/src/cpp-packages/worksrc/libpng -- CURRENT_BUILDTREES_DIR=D:/src/vcpkg/buildtrees/libpng
-- CURRENT_PORT_DIR=D:/src/cpp-packages/ports/libpng/. -- CURRENT_PORT_DIR=D:/src/vcpkg/ports/libpng/.
-- Using cached D:/src/cpp-packages/distdir/libpng-1.6.24.tar.xz -- Using cached D:/src/vcpkg/downloads/libpng-1.6.24.tar.xz
-- Extracting source D:/src/cpp-packages/distdir/libpng-1.6.24.tar.xz -- Extracting source D:/src/vcpkg/downloads/libpng-1.6.24.tar.xz
-- Extracting done -- Extracting done
-- Configuring x86-uwp-rel -- Configuring x86-uwp-rel
-- Configuring x86-uwp-rel done -- Configuring x86-uwp-rel done