Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package bcmatroska2 for openSUSE:Factory checked in at 2023-01-04 17:53:30 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/bcmatroska2 (Old) and /work/SRC/openSUSE:Factory/.bcmatroska2.new.1563 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "bcmatroska2" Wed Jan 4 17:53:30 2023 rev:6 rq:1055876 version:5.2.1 Changes: -------- --- /work/SRC/openSUSE:Factory/bcmatroska2/bcmatroska2.changes 2022-08-29 11:59:40.570255773 +0200 +++ /work/SRC/openSUSE:Factory/.bcmatroska2.new.1563/bcmatroska2.changes 2023-01-04 17:53:45.294589076 +0100 @@ -1,0 +2,8 @@ +Wed Jan 4 11:41:13 UTC 2023 - Paolo Stivanin <[email protected]> + +- Update to 5.2.1 (no changelog). +- Add fix-cmakelist-version.patch +- Add remove-file.patch +- Add fix-libmatroska-cmake.patch + +------------------------------------------------------------------- Old: ---- _service _servicedata bcmatroska2-0.23+git.20210209.tar.xz New: ---- bcmatroska2-5.2.1.tar.bz2 fix-cmakelist-version.patch fix-libmatroska-cmake.patch remove-file.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ bcmatroska2.spec ++++++ --- /var/tmp/diff_new_pack.lnXRUy/_old 2023-01-04 17:53:46.470596009 +0100 +++ /var/tmp/diff_new_pack.lnXRUy/_new 2023-01-04 17:53:46.474596032 +0100 @@ -1,7 +1,7 @@ # # spec file for package bcmatroska2 # -# Copyright (c) 2022 SUSE LLC +# Copyright (c) 2023 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,17 +18,21 @@ %define sover 0 Name: bcmatroska2 -Version: 0.23+git.20210209 +Version: 5.2.1 Release: 0 Summary: C Library to Deal with Matroska Files License: BSD-3-Clause AND Zlib AND GPL-2.0-or-later Group: Development/Libraries/C and C++ URL: https://gitlab.linphone.org/BC/public/bcmatroska2 -Source: bcmatroska2-%{version}.tar.xz +Source: https://gitlab.linphone.org/BC/public/bcmatroska2/-/archive/%{version}/%{name}-%{version}.tar.bz2 Source1: baselibs.conf Patch0: bcmatroska2-include-subdir.patch +Patch1: fix-cmakelist-version.patch +Patch2: remove-file.patch +Patch3: fix-libmatroska-cmake.patch BuildRequires: chrpath BuildRequires: cmake +BuildRequires: pkgconfig(bctoolbox) >= 5.2.0 %description Bcmatroska2 is a C library to parse Matroska files (.mkv and .mka). @@ -46,20 +50,18 @@ Requires: lib%{name}-%{sover} = %{version} # Needed by mediastreamer2. This is a fake minor version because upstream didn't release # a '.1', therefore we've gotta use this workaround. -Provides: %{name}-devel = 0.23.1 +Provides: %{name}-devel = 5.2.1 %description devel This package includes the files necessary for compiling and linking applications which will use libbcmatroska2. %prep -%setup -q -%patch0 -p1 +%autosetup -p1 %build %cmake \ - -DENABLE_STATIC=OFF \ - -DENABLE_STRICT=OFF + -DENABLE_STATIC=OFF %cmake_build %install ++++++ bcmatroska2-0.23+git.20210209.tar.xz -> bcmatroska2-5.2.1.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bcmatroska2-0.23+git.20210209/CMakeLists.txt new/bcmatroska2-5.2.1/CMakeLists.txt --- old/bcmatroska2-0.23+git.20210209/CMakeLists.txt 2021-02-09 21:29:18.000000000 +0100 +++ new/bcmatroska2-5.2.1/CMakeLists.txt 2022-11-29 11:25:07.000000000 +0100 @@ -45,6 +45,8 @@ configure_file(config.h.cmake ${CMAKE_BINARY_DIR}/config.h) +find_package(bctoolbox REQUIRED CONFIG) + include_directories( ${CMAKE_BINARY_DIR} corec diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bcmatroska2-0.23+git.20210209/build/rpm/bcmatroska2.spec.cmake new/bcmatroska2-5.2.1/build/rpm/bcmatroska2.spec.cmake --- old/bcmatroska2-0.23+git.20210209/build/rpm/bcmatroska2.spec.cmake 2021-02-09 21:29:18.000000000 +0100 +++ new/bcmatroska2-5.2.1/build/rpm/bcmatroska2.spec.cmake 2022-11-29 11:25:07.000000000 +0100 @@ -21,6 +21,8 @@ Source0: %{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot +Requires: %{pkg_prefix}bctoolbox + %description A libary to parse Matroska files (.mkv and .mka). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bcmatroska2-0.23+git.20210209/corec/corec/CMakeLists.txt new/bcmatroska2-5.2.1/corec/corec/CMakeLists.txt --- old/bcmatroska2-0.23+git.20210209/corec/corec/CMakeLists.txt 2021-02-09 21:29:18.000000000 +0100 +++ new/bcmatroska2-5.2.1/corec/corec/CMakeLists.txt 2022-11-29 11:25:07.000000000 +0100 @@ -44,7 +44,7 @@ list(APPEND COREC_SOURCES helpers/charconvert/charconvert_win32.c helpers/date/date_win32.c - helpers/file/file_win32.c + helpers/file/file_bctbx_win32.c helpers/system/ccsystem_win32.c multithread/multithread_win32.c str/str_win32.c @@ -53,6 +53,7 @@ list(APPEND COREC_SOURCES helpers/date/date_libc.c helpers/file/file_libc.c + helpers/file/file_bctbx.c multithread/multithread_pthread.c ) if (NOT IOS) @@ -91,6 +92,8 @@ add_library(corec-objects OBJECT ${COREC_SOURCES}) set_target_properties(corec-objects PROPERTIES POSITION_INDEPENDENT_CODE TRUE) +target_include_directories(corec-objects PRIVATE + $<TARGET_PROPERTY:bctoolbox,INTERFACE_INCLUDE_DIRECTORIES>) install(FILES banned.h diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bcmatroska2-0.23+git.20210209/corec/corec/helpers/file/file.proj new/bcmatroska2-5.2.1/corec/corec/helpers/file/file.proj --- old/bcmatroska2-0.23+git.20210209/corec/corec/helpers/file/file.proj 2021-02-09 21:29:18.000000000 +0100 +++ new/bcmatroska2-5.2.1/corec/corec/helpers/file/file.proj 2022-11-29 11:25:07.000000000 +0100 @@ -11,13 +11,13 @@ SOURCE streams.c {class Streams_Class:1} SOURCE tools.c - SOURCE(TARGET_LINUX || TARGET_OSX || TARGET_ANDROID) file_libc.c {class File_Class:1} + SOURCE(TARGET_LINUX || TARGET_OSX || TARGET_ANDROID) file_bctbx.c {class File_Class:1} SOURCE(TARGET_PALMOS) file_palmos.c {class File_Class:1} SOURCE(TARGET_PALMOS) filedb_palmos.c {class FileDb_Class:1} SOURCE(TARGET_PALMOS) filevfs_palmos.c {class VFS_Class:1} SOURCE(TARGET_PS2SDK) file_ps2sdk.c {class File_Class:1 reg FileXio:2} SOURCE(TARGET_SYMBIAN) file_symbian.cpp {class File_Class:1} - SOURCE(TARGET_WIN) file_win32.c {class File_Class:1} + SOURCE(TARGET_WIN) file_bctbx_win32.c {class File_Class:1} SOURCE(CONFIG_STDIO && !TARGET_PALMOS) stream_stdio.c {class Stdio_Class:2} USE(TARGET_PS2SDK) ps2sdk_filexio diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bcmatroska2-0.23+git.20210209/corec/corec/helpers/file/file_bctbx.c new/bcmatroska2-5.2.1/corec/corec/helpers/file/file_bctbx.c --- old/bcmatroska2-0.23+git.20210209/corec/corec/helpers/file/file_bctbx.c 1970-01-01 01:00:00.000000000 +0100 +++ new/bcmatroska2-5.2.1/corec/corec/helpers/file/file_bctbx.c 2022-11-29 11:25:07.000000000 +0100 @@ -0,0 +1,417 @@ +/***************************************************************************** + * + * Copyright (c) 2008-2010, CoreCodec, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of CoreCodec, Inc. nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY CoreCodec, Inc. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL CoreCodec, Inc. BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#include "config.h" + +#ifdef CONFIG_FILEPOS_64 +#define __USE_FILE_OFFSET64 +#endif + +#include <stdio.h> +#include <fcntl.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> +#include <dirent.h> +#include <errno.h> + +#define bool_t bctbx_bool_t +#include <bctoolbox/vfs.h> +#undef bool_t + +// Do not move. Define TARGET_*. +#include "file.h" + +#if defined(TARGET_OSX) +#include <sys/mount.h> +#elif defined(TARGET_QNX) +#include <sys/statvfs.h> +#else +#include <sys/vfs.h> +#endif + +#if defined(O_ACCMODE) +#define _RW_ACCESS_FILE (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH) +#define _RW_ACCESS_DIR (S_IRWXU|S_IRWXG|S_IRWXO) +#elif defined(S_IREAD) && defined(S_IWRITE) +#define _RW_ACCESS_FILE (S_IREAD|S_IWRITE) +#define _RW_ACCESS_DIR (S_IREAD|S_IWRITE|S_IEXEC) +#endif + +typedef struct filestream +{ + stream Stream; + bctbx_vfs_file_t *fp; + tchar_t URL[MAXPATH]; // TODO: turn into a dynamic data + filepos_t Length; + int Flags; + + tchar_t DirPath[MAXPATH]; // TODO: turn into a dynamic data + DIR *FindDir; + +} filestream; + +static err_t Open(filestream* p, const tchar_t* URL, int Flags) +{ + if (p->fp != -1) + bctbx_file_close(p->fp); + + p->Length = INVALID_FILEPOS_T; + p->fp = NULL; + + if (URL && URL[0]) + { + struct stat file_stats; + int mode = 0; + + if (Flags & SFLAG_WRONLY && !(Flags & SFLAG_RDONLY)) + mode = O_WRONLY; + else if (Flags & SFLAG_RDONLY && !(Flags & SFLAG_WRONLY)) + mode = O_RDONLY; + else + mode = O_RDWR; + + if (Flags & SFLAG_CREATE) + mode |= O_CREAT|O_TRUNC; + + //TODO: verify it works with Unicode files too + p->fp = bctbx_file_open2(bctbx_vfs_get_default(), URL, mode); + if (p->fp == NULL) + { + if ((Flags & (SFLAG_REOPEN|SFLAG_SILENT))==0) + NodeReportError(p,NULL,ERR_ID,ERR_FILE_NOT_FOUND,URL); + return ERR_FILE_NOT_FOUND; + } + + tcscpy_s(p->URL,TSIZEOF(p->URL),URL); + + if (stat(URL, &file_stats) == 0) + p->Length = file_stats.st_size; + + } + return ERR_NONE; +} + +static err_t Read(filestream* p,void* Data,size_t Size,size_t* Readed) +{ + err_t Err; + int n = bctbx_file_read2(p->fp, Data, (unsigned int)Size); + if (n<0) + { + n=0; + Err = ERR_READ; + } + else + Err = ((size_t)n != Size) ? ERR_END_OF_FILE:ERR_NONE; + + if (Readed) + *Readed = n; + return Err; +} + +static err_t ReadBlock(filestream* p,block* Block,size_t Ofs,size_t Size,size_t* Readed) +{ + return Read(p,(void*)(Block->Ptr+Ofs),Size,Readed); +} + +static err_t Write(filestream* p,const void* Data,size_t Size,size_t* Written) +{ + err_t Err; + int n = bctbx_file_write2(p->fp, Data, (unsigned int)Size); + + if (n<0) + { + n=0; + Err = ERR_WRITE; + } + else + Err = (n != Size) ? ERR_WRITE:ERR_NONE; + + if (Written) + *Written = n; + return Err; +} + +static filepos_t Seek(filestream* p,filepos_t Pos,int SeekMode) +{ + off_t NewPos = bctbx_file_seek(p->fp, Pos, SeekMode); + if (NewPos<0) + return INVALID_FILEPOS_T; + return NewPos; +} + +static err_t SetLength(filestream* p,dataid Id,const filepos_t* Data,size_t Size) +{ + if (Size != sizeof(filepos_t)) + return ERR_INVALID_DATA; + + if (bctbx_file_truncate(p->fp, *Data)!=0) + return ERR_BUFFER_FULL; + + return ERR_NONE; +} + +static err_t OpenDir(filestream* p,const tchar_t* Path,int UNUSED_PARAM(Flags)) +{ + if (p->FindDir) + closedir(p->FindDir); + + if (Path[0]==0) + Path = T("/"); + + p->FindDir = opendir(Path); + if (!p->FindDir) + { + if (errno == ENOTDIR) + return ERR_NOT_DIRECTORY; + else + return ERR_FILE_NOT_FOUND; + } + + tcscpy_s(p->DirPath,TSIZEOF(p->DirPath),Path); + AddPathDelimiter(p->DirPath,TSIZEOF(p->DirPath)); + return ERR_NONE; +} + +extern datetime_t LinuxToDateTime(time_t); + +static err_t EnumDir(filestream* p,const tchar_t* Exts,bool_t ExtFilter,streamdir* Item) +{ + struct dirent *Dirent; + + if (!p->FindDir) + return ERR_END_OF_FILE; + + Item->FileName[0] = 0; + Item->Size = INVALID_FILEPOS_T; + + while (!Item->FileName[0] && (Dirent = readdir(p->FindDir)) != NULL) + { + tchar_t FilePath[MAXPATH]; + struct stat file_stats; + + if (Dirent->d_name[0]=='.') // skip hidden files and current directory + continue; + + tcscpy_s(FilePath, TSIZEOF(FilePath), p->DirPath); + tcscat_s(FilePath, TSIZEOF(FilePath), Dirent->d_name); + tcscpy_s(Item->FileName,TSIZEOF(Item->FileName), Dirent->d_name); + + stat(FilePath, &file_stats); + + Item->ModifiedDate = LinuxToDateTime(file_stats.st_mtime); + if (S_ISDIR(file_stats.st_mode)) + { + Item->Type = FTYPE_DIR; + Item->Size = INVALID_FILEPOS_T; + } + else + { + Item->Size = file_stats.st_size; + Item->Type = CheckExts(Item->FileName,Exts); + + if (!Item->Type && ExtFilter) + Item->FileName[0] = 0; // skip + } + } + + if (!Item->FileName[0]) + { + closedir(p->FindDir); + p->FindDir = NULL; + return ERR_END_OF_FILE; + } + + return ERR_NONE; +} + +static void Delete(filestream* p) +{ + if (p->fp != NULL) + { + bctbx_file_close(p->fp); + p->fp = NULL; + } + if (p->FindDir) + closedir(p->FindDir); +} + +META_START(File_Class,FILE_CLASS) +META_CLASS(SIZE,sizeof(filestream)) +META_CLASS(PRIORITY,PRI_MINIMUM) +META_CLASS(DELETE,Delete) +META_VMT(TYPE_FUNC,stream_vmt,Open,Open) +META_VMT(TYPE_FUNC,stream_vmt,Read,Read) +META_VMT(TYPE_FUNC,stream_vmt,ReadBlock,ReadBlock) +META_VMT(TYPE_FUNC,stream_vmt,Write,Write) +META_VMT(TYPE_FUNC,stream_vmt,Seek,Seek) +META_VMT(TYPE_FUNC,stream_vmt,OpenDir,OpenDir) +META_VMT(TYPE_FUNC,stream_vmt,EnumDir,EnumDir) +META_CONST(TYPE_INT,filestream,fp,NULL) +META_DATA_RDONLY(TYPE_INT,STREAM_FLAGS,filestream,Flags) +META_DATA_RDONLY(TYPE_STRING,STREAM_URL,filestream,URL) +META_DATA_RDONLY(TYPE_STRING,STREAM_ENUM_BASE,filestream,DirPath) +META_PARAM(SET,STREAM_LENGTH,SetLength) +META_DATA(TYPE_FILEPOS,STREAM_LENGTH,filestream,Length) +META_PARAM(STRING,NODE_PROTOCOL,T("file")) +META_END(STREAM_CLASS) + +bool_t FileExists(nodecontext *p,const tchar_t* Path) +{ + struct stat file_stats; + return stat(Path, &file_stats) == 0; +} + +bool_t FileErase(nodecontext *p,const tchar_t* Path, bool_t Force, bool_t Safe) +{ + if (Force) + { + struct stat file_stats; + if (stat(Path, &file_stats) == 0) + { + if ((file_stats.st_mode & S_IWUSR)==0) + { + file_stats.st_mode |= S_IWUSR; + chmod(Path,file_stats.st_mode); + } + } + } + return unlink(Path) == 0; +} + +bool_t FolderErase(nodecontext *p,const tchar_t* Path, bool_t Force, bool_t Safe) +{ + if (Force) + { + struct stat file_stats; + if (stat(Path, &file_stats) == 0) + { + if ((file_stats.st_mode & S_IWUSR)==0) + { + file_stats.st_mode |= S_IWUSR; + chmod(Path,file_stats.st_mode); + } + } + } + return rmdir(Path) == 0; +} + +bool_t PathIsFolder(nodecontext *p,const tchar_t* Path) +{ + struct stat file_stats; + if (stat(Path, &file_stats) == 0) + { + return (file_stats.st_mode & S_IFDIR) == S_IFDIR; + } + return 0; +} + +datetime_t FileDateTime(nodecontext *p,const tchar_t* Path) +{ + datetime_t Date = INVALID_DATETIME_T; + struct stat file_stats; + if (stat(Path, &file_stats) == 0) + Date = LinuxToDateTime(file_stats.st_mtime); + return Date; +} + +bool_t FileMove(nodecontext *p,const tchar_t* In,const tchar_t* Out) +{ + return rename(In,Out) == 0; +} + +bool_t FolderCreate(nodecontext *p,const tchar_t* Path) +{ + return mkdir(Path,_RW_ACCESS_DIR) == 0; +} + +void FindFiles(nodecontext *p,const tchar_t* Path, const tchar_t* Mask,void(*Process)(const tchar_t*,void*),void* Param) +{ + DIR* Directory; + struct dirent* DirectoryInfo; + tchar_t TPathToFile[MAXPATH]; + + Directory = opendir(Path); + if (Directory) + { + while ( (DirectoryInfo = readdir(Directory)) != NULL ) + { + char* FileExtension = 0; + FileExtension = strrchr(DirectoryInfo->d_name, '.'); + if(FileExtension) + { + if (strcmp(Mask, FileExtension ) == 0 ) + { + tcscpy_s(TPathToFile, TSIZEOF(TPathToFile), Path); + tcscat_s(TPathToFile, TSIZEOF(TPathToFile), DirectoryInfo->d_name); + Process(TPathToFile, Param); + } + } + } + + closedir(Directory); + } + +} + +stream *FileTemp(anynode *Any) +{ +#ifndef TODO + assert(NULL); // not supported yet +#endif + return NULL; +} + +bool_t FileTempName(anynode *Any,tchar_t *Out, size_t OutLen) +{ +#ifndef TODO + assert(NULL); // not supported yet +#endif + return 0; +} + +int64_t GetPathFreeSpace(nodecontext* UNUSED_PARAM(p), const tchar_t* Path) +{ +#ifndef TODO + // need to an include (see at includes) +#if defined(TARGET_QNX) + struct statvfs st; + if (statvfs(Path, &st) < 0) +#else + struct statfs st; + if (statfs(Path, &st) < 0) +#endif + return -1; + return (int64_t)st.f_bsize * (int64_t)st.f_bavail; +#else + return -1; +#endif +} + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bcmatroska2-0.23+git.20210209/corec/corec/helpers/file/file_bctbx_win32.c new/bcmatroska2-5.2.1/corec/corec/helpers/file/file_bctbx_win32.c --- old/bcmatroska2-0.23+git.20210209/corec/corec/helpers/file/file_bctbx_win32.c 1970-01-01 01:00:00.000000000 +0100 +++ new/bcmatroska2-5.2.1/corec/corec/helpers/file/file_bctbx_win32.c 2022-11-29 11:25:07.000000000 +0100 @@ -0,0 +1,553 @@ +/***************************************************************************** + * + * Copyright (c) 2008-2010, CoreCodec, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of CoreCodec, Inc. nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY CoreCodec, Inc. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL CoreCodec, Inc. BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#include "file.h" + +#define bool_t bctbx_bool_t +#include <bctoolbox/vfs.h> +#undef bool_t + +#if defined(TARGET_WIN) + +#define FILE_FUNC_ID FOURCC('F','L','I','D') + +#ifndef STRICT +#define STRICT +#endif +#define WIN32_LEAN_AND_MEAN +#include <windows.h> +#include <shellapi.h> +#include <fileapi.h> + +#ifndef FO_DELETE +#define FO_DELETE 3 +#endif +#ifndef FOF_NO_UI +#define FOF_NO_UI (0x04|0x10|0x400|0x200) +#endif + +#if defined(TARGET_WINCE) +static HMODULE CEShellDLL = NULL; +#endif +#ifdef WINDOWS_DESKTOP +static int (WINAPI* FuncSHFileOperation)(SHFILEOPSTRUCT*) = NULL; +#else +static void *FuncSHFileOperation = NULL; +#endif + +#ifndef ERROR_INVALID_DRIVE_OBJECT +#define ERROR_INVALID_DRIVE_OBJECT 4321L +#endif + +#ifndef ERROR_DEVICE_NOT_AVAILABLE +#define ERROR_DEVICE_NOT_AVAILABLE 4319L +#endif + +#ifndef ERROR_DEVICE_REMOVED +#define ERROR_DEVICE_REMOVED 1617L +#endif + +#ifndef INVALID_SET_FILE_POINTER +#define INVALID_SET_FILE_POINTER ((DWORD)-1) +#endif + +typedef struct filestream +{ + stream Stream; + tchar_t URL[MAXPATH]; + bctbx_vfs_file_t *fp; + filepos_t Length; + filepos_t Pos; + int Flags; + + void* Find; + WIN32_FIND_DATA FindData; + int DriveNo; + +} filestream; + +static err_t Open(filestream* p, const tchar_t* URL, int Flags) +{ + if (p->fp != -1) + bctbx_file_close(p->fp); + + p->Length = INVALID_FILEPOS_T; + p->fp = NULL; + + if (URL && URL[0]) + { + struct stat file_stats; + int mode = 0; +#ifdef UNICODE + char url_buffer[1024]; + memset(url_buffer, 0, sizeof(url_buffer)); +#ifdef _WIN32 + if(WideCharToMultiByte(CP_ACP, 0, URL, -1, url_buffer, sizeof(url_buffer), 0, 0) == 0) { +#else + if (wcstombs_s(&return_length, url_buffer, sizeof(url_buffer), URL, sizeof(url_buffer) - 1) != 0) { +#endif + NodeReportError(p, NULL, ERR_ID, ERR_INVALID_PARAM, URL); + return ERR_INVALID_PARAM; + } +#else + const char* url_buffer = URL; +#endif + + if (Flags & SFLAG_WRONLY && !(Flags & SFLAG_RDONLY)) + mode = O_WRONLY; + else if (Flags & SFLAG_RDONLY && !(Flags & SFLAG_WRONLY)) + mode = O_RDONLY; + else + mode = O_RDWR; + + if (Flags & SFLAG_CREATE) + mode |= O_CREAT|O_TRUNC; + + p->fp = bctbx_file_open2(bctbx_vfs_get_default(), url_buffer, mode); + if (p->fp == NULL) + { + if ((Flags & (SFLAG_REOPEN|SFLAG_SILENT))==0) + NodeReportError(p,NULL,ERR_ID,ERR_FILE_NOT_FOUND, url_buffer); + return ERR_FILE_NOT_FOUND; + } + + tcscpy_s(p->URL,TSIZEOF(p->URL),URL); + if (stat(url_buffer, &file_stats) == 0) + p->Length = file_stats.st_size; + } + return ERR_NONE; +} + +static err_t Read(filestream* p,void* Data,size_t Size,size_t* Readed) +{ + err_t Err; + int n = bctbx_file_read2(p->fp, Data, (unsigned int)Size); + if (n<0) + { + n=0; + Err = ERR_READ; + } + else + Err = ((size_t)n != Size) ? ERR_END_OF_FILE:ERR_NONE; + + if (Readed) + *Readed = n; + return Err; +} + +static err_t ReadBlock(filestream* p,block* Block,size_t Ofs,size_t Size,size_t* Readed) +{ + return Read(p,(void*)(Block->Ptr+Ofs),Size,Readed); +} + +static err_t Write(filestream* p,const void* Data,size_t Size,size_t* Written) +{ + err_t Err; + int n = bctbx_file_write2(p->fp, Data, (unsigned int)Size); + + if (n<0) + { + n=0; + Err = ERR_WRITE; + } + else + Err = (n != Size) ? ERR_WRITE:ERR_NONE; + + if (Written) + *Written = n; + return Err; +} + +static filepos_t Seek(filestream* p,filepos_t Pos,int SeekMode) +{ + off_t NewPos = bctbx_file_seek(p->fp, Pos, SeekMode); + if (NewPos<0) + return INVALID_FILEPOS_T; + return NewPos; +} + +static err_t SetLength(filestream* p,dataid Id,const filepos_t* Data,size_t Size) +{ + if (Size != sizeof(filepos_t)) + return ERR_INVALID_DATA; + + if (bctbx_file_truncate(p->fp, *Data)!=0) + return ERR_BUFFER_FULL; + + return ERR_NONE; +} + +static err_t OpenDir(filestream* p,const tchar_t* URL,int UNUSED_PARAM(Flags)) +{ +#ifndef WINDOWS_DESKTOP + WIN32_FILE_ATTRIBUTE_DATA attr_data; +#else + DWORD Attrib; +#endif + tchar_t Path[MAXPATHFULL]; + + if (p->Find != INVALID_HANDLE_VALUE) + { + FindClose(p->Find); + p->Find = INVALID_HANDLE_VALUE; + } + p->DriveNo = -1; + +#if !defined(TARGET_WINCE) + if (!URL[0]) + { + p->DriveNo = 0; + } + else +#endif + { +#ifndef WINDOWS_DESKTOP + if (GetFileAttributesEx(URL, GetFileExInfoStandard, &attr_data) == 0) + return ERR_FILE_NOT_FOUND; + + if (!(attr_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) + return ERR_NOT_DIRECTORY; +#else + Attrib = GetFileAttributes(URL); + if (Attrib == (DWORD)-1) + return ERR_FILE_NOT_FOUND; + + if (!(Attrib & FILE_ATTRIBUTE_DIRECTORY)) + return ERR_NOT_DIRECTORY; +#endif + + tcscpy_s(Path,TSIZEOF(Path),URL); + AddPathDelimiter(Path,TSIZEOF(Path)); + tcscat_s(Path,TSIZEOF(Path),T("*.*")); +#ifndef WINDOWS_DESKTOP + WIN32_FIND_DATA FileData; + p->Find = FindFirstFileEx(Path, FindExInfoStandard, &FileData, FindExSearchNameMatch, NULL, 0); +#else + p->Find = FindFirstFile(Path, &p->FindData); +#endif + } + + return ERR_NONE; +} + +extern datetime_t FileTimeToRel(FILETIME*); + +static err_t EnumDir(filestream* p,const tchar_t* Exts,bool_t ExtFilter,streamdir* Item) +{ + Item->FileName[0] = 0; + Item->DisplayName[0] = 0; + +#if !defined(TARGET_WINCE) && defined(WINDOWS_DESKTOP) + if (p->DriveNo>=0) + { + size_t n = GetLogicalDriveStrings(0,NULL); + tchar_t* Drives = alloca((n+1)*sizeof(tchar_t)); + if (GetLogicalDriveStrings((DWORD)n,Drives)) + { + int No = p->DriveNo++; + + while (Drives[0] && --No>=0) + Drives += tcslen(Drives)+1; + + if (Drives[0]) + { + size_t n = tcslen(Drives); + if (Drives[n-1] == '\\') + Drives[n-1] = 0; + tcscpy_s(Item->FileName,TSIZEOF(Item->FileName),Drives); + Item->ModifiedDate = INVALID_DATETIME_T; + Item->Size = INVALID_FILEPOS_T; + Item->Type = FTYPE_DIR; + } + } + } + else +#endif + { + while (!Item->FileName[0] && p->Find != INVALID_HANDLE_VALUE) + { + if (p->FindData.cFileName[0]!='.' && // skip unix/mac hidden files and . .. directory entries + !(p->FindData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)) + { + tcscpy_s(Item->FileName,TSIZEOF(Item->FileName),p->FindData.cFileName); + + Item->ModifiedDate = FileTimeToRel(&p->FindData.ftLastWriteTime); + + if (p->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + { + Item->Size = INVALID_FILEPOS_T; + Item->Type = FTYPE_DIR; + } + else + { + Item->Size = (filepos_t)(((int64_t)p->FindData.nFileSizeHigh << 32) | p->FindData.nFileSizeLow); + Item->Type = CheckExts(Item->FileName,Exts); + + if (!Item->Type && ExtFilter) + Item->FileName[0] = 0; // skip + } + } + + if (!FindNextFile(p->Find,&p->FindData)) + { + FindClose(p->Find); + p->Find = INVALID_HANDLE_VALUE; + } + } + } + + if (!Item->FileName[0]) + { + if (p->Find != INVALID_HANDLE_VALUE) + { + FindClose(p->Find); + p->Find = INVALID_HANDLE_VALUE; + } + p->DriveNo = -1; + return ERR_END_OF_FILE; + } + + return ERR_NONE; +} + +static void Delete(filestream* p) +{ + Open(p,NULL,0); + if (p->Find != INVALID_HANDLE_VALUE) + FindClose(p->Find); +} + +static err_t CreateFunc(node* UNUSED_PARAM(p)) +{ +#if defined(TARGET_WINCE) + CEShellDLL = LoadLibrary(T("ceshell.dll")); + if (CEShellDLL) + *(FARPROC*)(void*)&FuncSHFileOperation = GetProcAddress(CEShellDLL,MAKEINTRESOURCE(14)); +#elif defined(ENABLE_MICROSOFT_STORE_APP) + FuncSHFileOperation = NULL; +#elif defined(WINDOWS_DESKTOP) + FuncSHFileOperation = SHFileOperation; +#endif + + return ERR_NONE; +} + +static void DeleteFunc(node* UNUSED_PARAM(p)) +{ +#if defined(TARGET_WINCE) + if (CEShellDLL) FreeLibrary(CEShellDLL); +#endif +} + +META_START(File_Class,FILE_CLASS) +META_CLASS(SIZE,sizeof(filestream)) +META_CLASS(PRIORITY,PRI_MINIMUM) +META_CLASS(DELETE,Delete) +META_VMT(TYPE_FUNC,stream_vmt,Open,Open) +META_VMT(TYPE_FUNC,stream_vmt,Read,Read) +META_VMT(TYPE_FUNC,stream_vmt,ReadBlock,ReadBlock) +META_VMT(TYPE_FUNC,stream_vmt,Write,Write) +META_VMT(TYPE_FUNC,stream_vmt,Seek,Seek) +META_VMT(TYPE_FUNC,stream_vmt,OpenDir,OpenDir) +META_VMT(TYPE_FUNC,stream_vmt,EnumDir,EnumDir) +META_CONST(TYPE_PTR,filestream,Find,INVALID_HANDLE_VALUE) +META_DATA_RDONLY(TYPE_INT,STREAM_FLAGS,filestream,Flags) +META_DATA_RDONLY(TYPE_STRING,STREAM_URL,filestream,URL) +META_PARAM(SET,STREAM_LENGTH,SetLength) +META_DATA(TYPE_FILEPOS,STREAM_LENGTH,filestream,Length) +META_PARAM(STRING,NODE_PROTOCOL,T("file")) +META_END_CONTINUE(STREAM_CLASS) + +META_START_CONTINUE(FILE_FUNC_ID) +META_CLASS(FLAGS,CFLAG_SINGLETON) +META_CLASS(CREATE,CreateFunc) +META_CLASS(DELETE,DeleteFunc) +META_END(NODE_CLASS) + +bool_t FolderCreate(nodecontext* UNUSED_PARAM(p),const tchar_t* Path) +{ + return CreateDirectory(Path,NULL) != FALSE; +} + +bool_t FileExists(nodecontext* UNUSED_PARAM(p),const tchar_t* Path) +{ +#ifndef WINDOWS_DESKTOP + WIN32_FILE_ATTRIBUTE_DATA attr_data; + return GetFileAttributesEx(Path, GetFileExInfoStandard, &attr_data) != 0; +#else + return GetFileAttributes(Path) != (DWORD)-1; +#endif +} + +#ifdef WINDOWS_DESKTOP +static bool_t FileRecycle(const tchar_t* Path) +{ + tchar_t PathEnded[MAXPATHFULL]; + SHFILEOPSTRUCT DelStruct; + int Ret; + size_t l; + + memset(&DelStruct,0,sizeof(DelStruct)); + DelStruct.wFunc = FO_DELETE; + l = min(tcslen(Path)+1,TSIZEOF(PathEnded)-1); + tcscpy_s(PathEnded,TSIZEOF(PathEnded),Path); + PathEnded[l]=0; + DelStruct.pFrom = PathEnded; + DelStruct.fFlags = FOF_ALLOWUNDO|FOF_NO_UI; + Ret = FuncSHFileOperation(&DelStruct); + return Ret == 0; +} +#endif + +bool_t FileErase(nodecontext* UNUSED_PARAM(p),const tchar_t* Path, bool_t Force, bool_t Safe) +{ + if (Force) + { +#ifndef WINDOWS_DESKTOP + WIN32_FILE_ATTRIBUTE_DATA attr_data; + if ((GetFileAttributesEx(Path, GetFileExInfoStandard, &attr_data) != 0) && (attr_data.dwFileAttributes & FILE_ATTRIBUTE_READONLY)) { + attr_data.dwFileAttributes ^= FILE_ATTRIBUTE_READONLY; + SetFileAttributes(Path, attr_data.dwFileAttributes); + } +#else + DWORD attr = GetFileAttributes(Path); + if ((attr != (DWORD)-1) && (attr & FILE_ATTRIBUTE_READONLY)) + { + attr ^= FILE_ATTRIBUTE_READONLY; + SetFileAttributes(Path,attr); + } +#endif + } + +#ifndef WINDOWS_DESKTOP + return DeleteFile(Path) != FALSE; +#else + if (!Safe || !FuncSHFileOperation) + return DeleteFile(Path) != FALSE; + else + return FileRecycle(Path); +#endif +} + +bool_t FolderErase(nodecontext* UNUSED_PARAM(p),const tchar_t* Path, bool_t Force, bool_t Safe) +{ + if (Force) + { +#ifndef WINDOWS_DESKTOP + WIN32_FILE_ATTRIBUTE_DATA attr_data; + if ((GetFileAttributesEx(Path, GetFileExInfoStandard, &attr_data) != 0) && (attr_data.dwFileAttributes & FILE_ATTRIBUTE_READONLY)) { + attr_data.dwFileAttributes ^= FILE_ATTRIBUTE_READONLY; + SetFileAttributes(Path, attr_data.dwFileAttributes); + } +#else + DWORD attr = GetFileAttributes(Path); + if ((attr != (DWORD)-1) && (attr & FILE_ATTRIBUTE_READONLY)) + { + attr ^= FILE_ATTRIBUTE_READONLY; + SetFileAttributes(Path,attr); + } +#endif + } + +#ifndef WINDOWS_DESKTOP + return RemoveDirectory(Path) != FALSE; +#else + if (!Safe || !FuncSHFileOperation) + return RemoveDirectory(Path) != FALSE; + else + return FileRecycle(Path); +#endif +} + +bool_t PathIsFolder(nodecontext* UNUSED_PARAM(p),const tchar_t* Path) +{ +#ifndef WINDOWS_DESKTOP + WIN32_FILE_ATTRIBUTE_DATA attr_data; + return (GetFileAttributesEx(Path, GetFileExInfoStandard, &attr_data) != 0) && ((attr_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY); +#else + DWORD attr = GetFileAttributes(Path); + return (attr != (DWORD)-1) && (attr & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY; +#endif +} + +datetime_t FileDateTime(nodecontext* UNUSED_PARAM(p),const tchar_t* Path) +{ + datetime_t Date = INVALID_DATETIME_T; + HANDLE Find; + WIN32_FIND_DATA FindData; + +#ifndef WINDOWS_DESKTOP + WIN32_FIND_DATA FileData; + Find = FindFirstFileEx(Path, FindExInfoStandard, &FileData, FindExSearchNameMatch, NULL, 0); +#else + Find = FindFirstFile(Path, &FindData); +#endif + if (Find != INVALID_HANDLE_VALUE) + { + Date = FileTimeToRel(&FindData.ftLastWriteTime); + FindClose(Find); + } + return Date; +} + +bool_t FileMove(nodecontext* UNUSED_PARAM(p),const tchar_t* In,const tchar_t* Out) +{ +#ifndef WINDOWS_DESKTOP + return MoveFileEx(In, Out, 0); +#else + return MoveFile(In,Out) != 0; +#endif +} + +stream *FileTemp(anynode* UNUSED_PARAM(Any)) +{ +#ifndef TODO + assert(NULL); // not supported yet +#endif + return NULL; +} + +bool_t FileTempName(anynode* UNUSED_PARAM(Any),tchar_t* UNUSED_PARAM(Out), size_t UNUSED_PARAM(OutLen)) +{ +#ifndef TODO + assert(NULL); // not supported yet +#endif + return 0; +} + +FILE_DLL int64_t GetPathFreeSpace(nodecontext* UNUSED_PARAM(p), const tchar_t* Path) +{ + ULARGE_INTEGER lpFreeBytesAvailable; + ULARGE_INTEGER lpTotal; + + if (!GetDiskFreeSpaceEx(Path, &lpFreeBytesAvailable, &lpTotal, NULL)) + return -1; + return (int64_t)lpFreeBytesAvailable.QuadPart; +} +#endif ++++++ bcmatroska2-include-subdir.patch ++++++ --- /var/tmp/diff_new_pack.lnXRUy/_old 2023-01-04 17:53:46.918598649 +0100 +++ /var/tmp/diff_new_pack.lnXRUy/_new 2023-01-04 17:53:46.922598673 +0100 @@ -1,7 +1,8 @@ -diff -ru a/BcMatroska2Config.cmake.in b/BcMatroska2Config.cmake.in ---- a/BcMatroska2Config.cmake.in 2021-07-14 11:19:44.426789310 +0200 -+++ b/BcMatroska2Config.cmake.in 2021-07-14 11:21:50.035321221 +0200 -@@ -39,6 +39,6 @@ +Index: bcmatroska2-5.2.1/BcMatroska2Config.cmake.in +=================================================================== +--- bcmatroska2-5.2.1.orig/BcMatroska2Config.cmake.in ++++ bcmatroska2-5.2.1/BcMatroska2Config.cmake.in +@@ -39,6 +39,6 @@ else() get_target_property(BCMATROSKA2_LIBRARIES ${BCMATROSKA2_TARGETNAME} LOCATION) endif() @@ -9,10 +10,11 @@ +set(BCMATROSKA2_INCLUDE_DIRS "@CMAKE_INSTALL_FULL_INCLUDEDIR@/bcmatroska2") set(BCMATROSKA2_FOUND 1) -diff -ru a/CMakeLists.txt b/CMakeLists.txt ---- a/CMakeLists.txt 2021-07-14 11:19:44.426789310 +0200 -+++ b/CMakeLists.txt 2021-07-14 11:21:14.463170591 +0200 -@@ -73,7 +73,7 @@ +Index: bcmatroska2-5.2.1/CMakeLists.txt +=================================================================== +--- bcmatroska2-5.2.1.orig/CMakeLists.txt ++++ bcmatroska2-5.2.1/CMakeLists.txt +@@ -75,7 +75,7 @@ add_subdirectory(libebml2) add_subdirectory(libmatroska2) install(FILES ${CMAKE_BINARY_DIR}/config.h @@ -21,10 +23,11 @@ ) include(CMakePackageConfigHelpers) -diff -ru a/corec/corec/CMakeLists.txt b/corec/corec/CMakeLists.txt ---- a/corec/corec/CMakeLists.txt 2021-07-14 11:19:44.426789310 +0200 -+++ b/corec/corec/CMakeLists.txt 2021-07-14 11:22:56.323601950 +0200 -@@ -101,18 +101,18 @@ +Index: bcmatroska2-5.2.1/corec/corec/CMakeLists.txt +=================================================================== +--- bcmatroska2-5.2.1.orig/corec/corec/CMakeLists.txt ++++ bcmatroska2-5.2.1/corec/corec/CMakeLists.txt +@@ -104,18 +104,18 @@ install(FILES memalloc.h memheap.h portab.h @@ -49,7 +52,7 @@ install(FILES helpers/parser/buffer.h helpers/parser/dataheap.h -@@ -122,16 +122,16 @@ +@@ -125,16 +125,16 @@ install(FILES helpers/parser/strtab.h helpers/parser/strtypes.h helpers/parser/urlpart.h @@ -71,21 +74,22 @@ ) -install(FILES str/str.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/corec/str) +install(FILES str/str.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/bcmatroska2/corec/str) -Binary files a/.git/index and b/.git/index differ -diff -ru a/libebml2/CMakeLists.txt b/libebml2/CMakeLists.txt ---- a/libebml2/CMakeLists.txt 2021-07-14 11:19:44.442789377 +0200 -+++ b/libebml2/CMakeLists.txt 2021-07-14 11:20:29.858981710 +0200 -@@ -34,5 +34,5 @@ +Index: bcmatroska2-5.2.1/libebml2/CMakeLists.txt +=================================================================== +--- bcmatroska2-5.2.1.orig/libebml2/CMakeLists.txt ++++ bcmatroska2-5.2.1/libebml2/CMakeLists.txt +@@ -34,5 +34,5 @@ add_library(ebml2-objects OBJECT set_target_properties(ebml2-objects PROPERTIES POSITION_INDEPENDENT_CODE TRUE) install(DIRECTORY ebml - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/bcmatroska2 ) -diff -ru a/libmatroska2/CMakeLists.txt b/libmatroska2/CMakeLists.txt ---- a/libmatroska2/CMakeLists.txt 2021-07-14 11:19:44.442789377 +0200 -+++ b/libmatroska2/CMakeLists.txt 2021-07-14 11:20:08.898892951 +0200 -@@ -76,5 +76,5 @@ +Index: bcmatroska2-5.2.1/libmatroska2/CMakeLists.txt +=================================================================== +--- bcmatroska2-5.2.1.orig/libmatroska2/CMakeLists.txt ++++ bcmatroska2-5.2.1/libmatroska2/CMakeLists.txt +@@ -76,5 +76,5 @@ if(ENABLE_SHARED) endif() install(DIRECTORY matroska ++++++ fix-cmakelist-version.patch ++++++ --- bcmatroska2-5.2.1/CMakeLists.txt.orig 2023-01-04 12:40:40.042374227 +0100 +++ bcmatroska2-5.2.1/CMakeLists.txt 2023-01-04 12:40:46.822409717 +0100 @@ -23,7 +23,7 @@ cmake_minimum_required(VERSION 3.1) project(bcmatroska2 - VERSION 0.23 + VERSION 5.2.1 LANGUAGES C ) ++++++ fix-libmatroska-cmake.patch ++++++ --- bcmatroska2-5.2.1/libmatroska2/CMakeLists.txt.orig 2023-01-04 14:22:06.937952129 +0100 +++ bcmatroska2-5.2.1/libmatroska2/CMakeLists.txt 2023-01-04 14:22:37.018106870 +0100 @@ -49,7 +49,7 @@ ) endif() if(ENABLE_SHARED) - add_library(bcmatroska2 SHARED $<TARGET_OBJECTS:corec-objects> $<TARGET_OBJECTS:ebml2-objects> ${MATROSKA2_SOURCE_FILES}) + add_library(bcmatroska2 SHARED $<TARGET_OBJECTS:corec-objects> $<TARGET_OBJECTS:ebml2-objects> $<TARGET_OBJECTS:bctoolbox> ${MATROSKA2_SOURCE_FILES}) set_target_properties(bcmatroska2 PROPERTIES VERSION 0.0.0 SOVERSION 0) set_target_properties(bcmatroska2 PROPERTIES POSITION_INDEPENDENT_CODE TRUE) if(NOT "${LINK_FLAGS_STR}" STREQUAL "") ++++++ remove-file.patch ++++++ --- bcmatroska2/corec/corec/CMakeLists.txt.orig 2023-01-04 14:08:11.653653391 +0100 +++ bcmatroska2/corec/corec/CMakeLists.txt 2023-01-04 14:08:24.565720225 +0100 @@ -52,7 +52,6 @@ else() list(APPEND COREC_SOURCES helpers/date/date_libc.c - helpers/file/file_libc.c helpers/file/file_bctbx.c multithread/multithread_pthread.c )
