aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAybe <aybe@users.noreply.github.com>2017-11-17 02:10:21 +0100
committerAybe <aybe@users.noreply.github.com>2017-11-17 02:10:21 +0100
commit295bb9f45429900d019562e487272a5acde59f16 (patch)
tree30d1e427084f781cd5578ef69c6df06124825686
parentde7382ce8945fae70d947590262c2e0b9ce4a6bf (diff)
downloadvcpkg-295bb9f45429900d019562e487272a5acde59f16.tar.gz
vcpkg-295bb9f45429900d019562e487272a5acde59f16.zip
[libsndfile] patches for UWP builds
-rw-r--r--ports/libsndfile/CONTROL2
-rw-r--r--ports/libsndfile/portfile.cmake9
-rw-r--r--ports/libsndfile/uwp-createfile.patch39
-rw-r--r--ports/libsndfile/uwp-getfilesize.patch29
4 files changed, 78 insertions, 1 deletions
diff --git a/ports/libsndfile/CONTROL b/ports/libsndfile/CONTROL
index 67e058991..70be2ab6c 100644
--- a/ports/libsndfile/CONTROL
+++ b/ports/libsndfile/CONTROL
@@ -1,4 +1,4 @@
Source: libsndfile
-Version: 1.0.29-6830c42-1
+Version: 1.0.29-6830c42-2
Description: Library to read, write and manipulate many soundfile types. Authored by Eric de Castro Lopo
Build-Depends: libogg, libflac, libvorbis
diff --git a/ports/libsndfile/portfile.cmake b/ports/libsndfile/portfile.cmake
index ac07f96a0..304bc005b 100644
--- a/ports/libsndfile/portfile.cmake
+++ b/ports/libsndfile/portfile.cmake
@@ -19,6 +19,15 @@ vcpkg_download_distfile(ARCHIVE
)
vcpkg_extract_source_archive(${ARCHIVE})
+if (VCPKG_CMAKE_SYSTEM_NAME STREQUAL WindowsStore)
+ vcpkg_apply_patches(
+ SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/libsndfile-6830c421899e32f8d413a903a21a9b6cf384d369
+ PATCHES
+ "${CMAKE_CURRENT_LIST_DIR}/uwp-createfile.patch"
+ "${CMAKE_CURRENT_LIST_DIR}/uwp-getfilesize.patch"
+ )
+endif()
+
if (VCPKG_CRT_LINKAGE STREQUAL "dynamic")
set(CRT_LIB_STATIC 0)
elseif (VCPKG_CRT_LINKAGE STREQUAL "static")
diff --git a/ports/libsndfile/uwp-createfile.patch b/ports/libsndfile/uwp-createfile.patch
new file mode 100644
index 000000000..d4b58a74f
--- /dev/null
+++ b/ports/libsndfile/uwp-createfile.patch
@@ -0,0 +1,39 @@
+diff --git a/src/file_io.c b/src/file_io.c
+index 7cf8f0c..a47ce6b 100644
+--- a/src/file_io.c
++++ b/src/file_io.c
+@@ -787,26 +787,14 @@ psf_open_handle (PSF_FILE * pfile)
+ return NULL ;
+ } ;
+
+- if (pfile->use_wchar)
+- handle = CreateFileW (
+- pfile->path.wc, /* pointer to name of the file */
+- dwDesiredAccess, /* access (read-write) mode */
+- dwShareMode, /* share mode */
+- 0, /* pointer to security attributes */
+- dwCreationDistribution, /* how to create */
+- FILE_ATTRIBUTE_NORMAL, /* file attributes (could use FILE_FLAG_SEQUENTIAL_SCAN) */
+- NULL /* handle to file with attributes to copy */
+- ) ;
+- else
+- handle = CreateFile (
+- pfile->path.c, /* pointer to name of the file */
+- dwDesiredAccess, /* access (read-write) mode */
+- dwShareMode, /* share mode */
+- 0, /* pointer to security attributes */
+- dwCreationDistribution, /* how to create */
+- FILE_ATTRIBUTE_NORMAL, /* file attributes (could use FILE_FLAG_SEQUENTIAL_SCAN) */
+- NULL /* handle to file with attributes to copy */
+- ) ;
++ if (!pfile->use_wchar)
++ return NULL;
++
++ CREATEFILE2_EXTENDED_PARAMETERS cfParams = {0};
++ cfParams.dwSize = sizeof(CREATEFILE2_EXTENDED_PARAMETERS);
++ cfParams.dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
++
++ handle = CreateFile2(pfile->path.wc, dwDesiredAccess, dwShareMode, dwCreationDistribution, &cfParams);
+
+ if (handle == INVALID_HANDLE_VALUE)
+ return NULL ;
diff --git a/ports/libsndfile/uwp-getfilesize.patch b/ports/libsndfile/uwp-getfilesize.patch
new file mode 100644
index 000000000..1ecbcda7f
--- /dev/null
+++ b/ports/libsndfile/uwp-getfilesize.patch
@@ -0,0 +1,29 @@
+diff --git a/src/file_io.c b/src/file_io.c
+index a47ce6b..4b38455 100644
+--- a/src/file_io.c
++++ b/src/file_io.c
+@@ -1093,19 +1093,16 @@ psf_is_pipe (SF_PRIVATE *psf)
+ /* USE_WINDOWS_API */ sf_count_t
+ psf_get_filelen_handle (HANDLE handle)
+ { sf_count_t filelen ;
+- DWORD dwFileSizeLow, dwFileSizeHigh, dwError = NO_ERROR ;
++ DWORD dwError = NO_ERROR ;
++ LARGE_INTEGER size;
+
+- dwFileSizeLow = GetFileSize (handle, &dwFileSizeHigh) ;
+-
+- if (dwFileSizeLow == 0xFFFFFFFF)
+- dwError = GetLastError () ;
++ if (!GetFileSizeEx(handle, &size))
++ dwError = GetLastError();
+
+ if (dwError != NO_ERROR)
+ return (sf_count_t) -1 ;
+
+- filelen = dwFileSizeLow + ((__int64) dwFileSizeHigh << 32) ;
+-
+- return filelen ;
++ return size.QuadPart;
+ } /* psf_get_filelen_handle */
+
+ /* USE_WINDOWS_API */ void