aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoratkawa7 <atkawa7@yahoo.com>2017-11-03 09:59:44 -0700
committerAlexander Karatarakis <alex@karatarakis.com>2017-11-03 16:44:35 -0700
commit3cb9769d7b1a0f87dbb5be0dce2386f569fbbe95 (patch)
tree4e79adac278d303e0c19ec6364ef1934d559b4cc
parentad884fc2966c0d8fdff6835d481fd301bfc438ad (diff)
downloadvcpkg-3cb9769d7b1a0f87dbb5be0dce2386f569fbbe95.tar.gz
vcpkg-3cb9769d7b1a0f87dbb5be0dce2386f569fbbe95.zip
libaiff
-rw-r--r--ports/libaiff/CMakeLists.txt32
-rw-r--r--ports/libaiff/CONTROL3
-rw-r--r--ports/libaiff/allow_utf_16_filename.patch214
-rw-r--r--ports/libaiff/config.h12
-rw-r--r--ports/libaiff/portfile.cmake40
5 files changed, 301 insertions, 0 deletions
diff --git a/ports/libaiff/CMakeLists.txt b/ports/libaiff/CMakeLists.txt
new file mode 100644
index 000000000..9dcfd46d2
--- /dev/null
+++ b/ports/libaiff/CMakeLists.txt
@@ -0,0 +1,32 @@
+cmake_minimum_required (VERSION 3.9)
+project (libaiff)
+set(SRC
+ iff.c aifx.c lpcm.c g711.c
+ float32.c libaiff.c
+ extended.c pascal.c
+)
+
+if(MSVC)
+ add_compile_options(/W4 -D_CRT_SECURE_NO_WARNINGS -DHAVE_INTTYPES_H -DHAVE_STDINT_H -DHAVE_STRING_H -DHAVE_STDLIB_H)
+endif()
+
+if(BUILD_SHARED_LIBS)
+ set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
+endif()
+
+include_directories(.)
+
+add_library(libaiff ${SRC})
+
+
+install(
+ TARGETS libaiff
+ RUNTIME DESTINATION bin
+ LIBRARY DESTINATION lib
+ ARCHIVE DESTINATION lib
+)
+
+
+if(NOT DISABLE_INSTALL_HEADERS)
+ install(FILES libaiff/libaiff.h libaiff/config.h libaiff/endian.h DESTINATION include/libaiff)
+endif()
diff --git a/ports/libaiff/CONTROL b/ports/libaiff/CONTROL
new file mode 100644
index 000000000..21078bfe8
--- /dev/null
+++ b/ports/libaiff/CONTROL
@@ -0,0 +1,3 @@
+Source: libaiff
+Version: 5.0
+Description: LibAiff is an open-source library, providing C applications transparent read & write operations for Audio Interchange File Format (AIFF) files, with the goal of supporting all of its features
diff --git a/ports/libaiff/allow_utf_16_filename.patch b/ports/libaiff/allow_utf_16_filename.patch
new file mode 100644
index 000000000..fb927763f
--- /dev/null
+++ b/ports/libaiff/allow_utf_16_filename.patch
@@ -0,0 +1,214 @@
+diff --git a/libaiff.c b/libaiff.c
+index d0ad40d..e266802 100644
+--- a/libaiff.c
++++ b/libaiff.c
+@@ -44,6 +44,8 @@ static struct decoder* decoders[] = {
+
+ static AIFF_Ref AIFF_ReadOpen (const char *, int);
+ static AIFF_Ref AIFF_WriteOpen (const char *, int);
++static AIFF_Ref AIFF_ReadOpenW (const wchar_t*, int);
++static AIFF_Ref AIFF_WriteOpenW (const wchar_t*, int);
+ static void AIFF_ReadClose (AIFF_Ref);
+ static int AIFF_WriteClose (AIFF_Ref);
+ static void* InitBuffer (AIFF_Ref, size_t);
+@@ -53,6 +55,21 @@ static int Prepare (AIFF_Ref);
+ static void Unprepare (AIFF_Ref);
+ static struct decoder* FindDecoder (IFFType);
+
++#ifdef _WIN32
++AIFF_Ref
++AIFF_OpenFileW(const wchar_t *file, int flags)
++{
++ AIFF_Ref ref = NULL;
++
++ if (flags & F_RDONLY) {
++ ref = AIFF_ReadOpenW(file, flags);
++ } else if (flags & F_WRONLY) {
++ ref = AIFF_WriteOpenW(file, flags);
++ }
++
++ return ref;
++}
++#endif
+ AIFF_Ref
+ AIFF_OpenFile(const char *file, int flags)
+ {
+@@ -86,6 +103,76 @@ AIFF_CloseFile(AIFF_Ref ref)
+ return r;
+ }
+
++#ifdef _WIN32
++static AIFF_Ref
++AIFF_ReadOpenW(const wchar_t *file, int flags)
++{
++ AIFF_Ref r;
++ IFFHeader hdr;
++
++ r = malloc(kAIFFRefSize);
++ if (!r) {
++ return NULL;
++ }
++ r->fd = _wfopen(file, L"rb");
++ if (r->fd == NULL) {
++ free(r);
++ return NULL;
++ }
++ r->flags = F_RDONLY | flags;
++ if (fread(&hdr, 1, 4, r->fd) < 4) {
++ fclose(r->fd);
++ free(r);
++ return NULL;
++ }
++ switch (hdr.hid) {
++ case AIFF_TYPE_IFF:
++ /* Continue reading the IFF header */
++ if (fread(&(hdr.len), 1, 8, r->fd) < 8) {
++ fclose(r->fd);
++ free(r);
++ return NULL;
++ }
++ if (hdr.len == 0) {
++ fclose(r->fd);
++ free(r);
++ return NULL;
++ }
++ /*
++ * Check the format type (AIFF or AIFC)
++ */
++ r->format = hdr.fid;
++ switch (r->format) {
++ case AIFF_TYPE_AIFF:
++ case AIFF_TYPE_AIFC:
++ break;
++ default:
++ fclose(r->fd);
++ free(r);
++ return NULL;
++ }
++
++ if (init_aifx(r) < 1) {
++ fclose(r->fd);
++ free(r);
++ return NULL;
++ }
++ break;
++ default:
++ fclose(r->fd);
++ free(r);
++ return NULL;
++ }
++
++ r->stat = 0;
++ r->buffer = NULL;
++ r->buflen = 0;
++
++ return r;
++}
++
++#endif
++
+ static AIFF_Ref
+ AIFF_ReadOpen(const char *file, int flags)
+ {
+@@ -450,6 +537,89 @@ AIFF_ReadClose(AIFF_Ref r)
+ return;
+ }
+
++#ifdef WIN32
++static AIFF_Ref
++AIFF_WriteOpenW(const wchar_t *file, int flags)
++{
++ AIFF_Ref w;
++ IFFHeader hdr;
++ ASSERT(sizeof(IFFHeader) == 12);
++
++ w = malloc(kAIFFRefSize);
++ if (!w) {
++err0:
++ return NULL;
++ }
++
++ /*
++ * Simultaneous open for reading & writing
++ */
++ w->fd = _wfopen(file, L"w+b");
++ if (w->fd == NULL) {
++err1:
++ free(w);
++ goto err0;
++ }
++ hdr.hid = ARRANGE_BE32(AIFF_FORM);
++ w->len = 4;
++ hdr.len = ARRANGE_BE32(4);
++ if (flags & F_AIFC)
++ hdr.fid = ARRANGE_BE32(AIFF_AIFC);
++ else
++ hdr.fid = ARRANGE_BE32(AIFF_AIFF);
++
++ if (fwrite(&hdr, 1, 12, w->fd) < 12) {
++err2:
++ fclose(w->fd);
++ goto err1;
++ }
++ w->stat = 0;
++ w->segmentSize = 0;
++ w->buffer = NULL;
++ w->buflen = 0;
++ w->tics = 0;
++
++ /*
++ * If writing AIFF-C, write the required FVER chunk
++ */
++ if (flags & F_AIFC) {
++ IFFChunk chk;
++ uint32_t vers;
++ ASSERT(sizeof(IFFChunk) == 8);
++
++ chk.id = ARRANGE_BE32(AIFF_FVER);
++ chk.len = ARRANGE_BE32(4);
++ vers = ARRANGE_BE32(AIFC_STD_DRAFT_082691);
++
++ if (fwrite(&chk, 1, 8, w->fd) < 8 ||
++ fwrite(&vers, 1, 4, w->fd) < 4) {
++ goto err2;
++ }
++
++ w->len += 12;
++
++ /*
++ * If no endianness specified for AIFF-C,
++ * default to big endian
++ */
++ if (!(flags & (LPCM_LTE_ENDIAN | LPCM_BIG_ENDIAN))) {
++ flags |= LPCM_BIG_ENDIAN;
++ }
++ } else {
++ /*
++ * If writing regular AIFF, make sure we
++ * write big-endian data
++ */
++ flags &= ~LPCM_LTE_ENDIAN;
++ flags |= LPCM_BIG_ENDIAN;
++ }
++
++ w->flags = F_WRONLY | flags;
++
++ return w;
++}
++#endif
++
+ static AIFF_Ref
+ AIFF_WriteOpen(const char *file, int flags)
+ {
+diff --git a/libaiff/libaiff.h b/libaiff/libaiff.h
+index 56fc77f..e1940a5 100644
+--- a/libaiff/libaiff.h
++++ b/libaiff/libaiff.h
+@@ -165,6 +165,7 @@ typedef struct s_Instrument Instrument ;
+
+ /* == Function prototypes == */
+ AIFF_Ref AIFF_OpenFile(const char *, int) ;
++AIFF_Ref AIFF_OpenFile(const wchar_t *, int) ;
+ int AIFF_CloseFile(AIFF_Ref) ;
+ char* AIFF_GetAttribute(AIFF_Ref,IFFType) ;
+ int AIFF_GetInstrumentData(AIFF_Ref,Instrument*) ;
diff --git a/ports/libaiff/config.h b/ports/libaiff/config.h
new file mode 100644
index 000000000..f7c04eebf
--- /dev/null
+++ b/ports/libaiff/config.h
@@ -0,0 +1,12 @@
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "marcotrillo@gmail.com"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "LibAiff (MSVC)"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "LibAiff (MSVC) $Revision: 1.1 $"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "$Revision: 1.1 $"
+
diff --git a/ports/libaiff/portfile.cmake b/ports/libaiff/portfile.cmake
new file mode 100644
index 000000000..146d24c7f
--- /dev/null
+++ b/ports/libaiff/portfile.cmake
@@ -0,0 +1,40 @@
+include(vcpkg_common_functions)
+set(SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/libaiff-5.0)
+vcpkg_download_distfile(ARCHIVE
+ URLS "https://sourceforge.net/projects/aifftools/files/libaiff/LibAiff%205.0/libaiff-5.0-release.tar.gz"
+ FILENAME "libaiff-5.0-release.tar.gz"
+ SHA512 7800f9a3fbd0c5a17b8cc6c9b60181131d159ab5f5fb8e7de54e8f88c151717a988231de664a635e61940267c854a9ce83d58b12e322dcdda3aa8080c7b15f66
+)
+vcpkg_extract_source_archive(${ARCHIVE})
+
+
+vcpkg_apply_patches(
+ SOURCE_PATH ${SOURCE_PATH}
+ PATCHES
+ "${CMAKE_CURRENT_LIST_DIR}/allow_utf_16_filename.patch"
+)
+
+file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt DESTINATION ${SOURCE_PATH})
+file(COPY ${CMAKE_CURRENT_LIST_DIR}/config.h DESTINATION ${SOURCE_PATH}/libaiff)
+
+
+vcpkg_configure_cmake(
+ SOURCE_PATH ${SOURCE_PATH}
+ PREFER_NINJA
+ OPTIONS_DEBUG -DDISABLE_INSTALL_HEADERS=ON
+)
+
+vcpkg_install_cmake()
+
+file(GLOB HEADERS "${CURRENT_PACKAGES_DIR}/include/libaiff/*.h")
+foreach(HEADER ${HEADERS})
+ file(READ "${HEADER}" _contents)
+ string(REPLACE "#ifdef HAVE_STDINT_H" "#if 1" _contents "${_contents}")
+ string(REPLACE "#ifdef HAVE_STRING_H" "#if 1" _contents "${_contents}")
+ string(REPLACE "#ifdef HAVE_STDLIB_H" "#if 1" _contents "${_contents}")
+ string(REPLACE "#ifdef HAVE_INTTYPES_H" "#if 1" _contents "${_contents}")
+ file(WRITE "${HEADER}" "${_contents}")
+endforeach()
+
+# Handle copyright
+file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/libaiff RENAME copyright)