http://bugs.winehq.org/show_bug.cgi?id=59328 Bug ID: 59328 Summary: Microsoft Extensible Storage Engine (ESE) not compiling with WineLib Product: Wine Version: unspecified Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: winelib Assignee: wine-bugs@list.winehq.org Reporter: michael.grafnetter@outlook.com Distribution: --- Hello, has anyone considered implementing the Microsoft Extensible Storage Engine (ESE) API (esent.dll) (https://learn.microsoft.com/en-us/windows/win32/extensible-storage-engine/ex... I know that some Windows apps use this database engine to store their data, instead of sqlite. Microsoft has open-sourced this Windows built-in library a couple of years ago, so porting should not be that hard: https://github.com/microsoft/Extensible-Storage-Engine I tried to compile the project with WineLib on Linux myself, but I failed miserably. Their makefiles target Visual Studio build tools / msbuild heavily. I was able to remove makefile tests for Visual Studio platform: if("${CMAKE_GENERATOR}" MATCHES "Visual Studio") if("${CMAKE_GENERATOR_PLATFORM}" MATCHES "x64") .... else() message(FATAL_ERROR "NOTE: NOT setting 64-bit OR 32-bit symbols") Then they are looking for the message compiler (mc.exe): find_program(CMAKE_MESSAGE_COMPILER mc.exe HINTS "${sdk_bindir}") if (NOT CMAKE_MESSAGE_COMPILER) message(FATAL_ERROR "message compiler not found: required to build") I tried to create an alias for mc.exe pointing to wmc (Wine Message Compiler), but their parameter set is incompatible. After rewriting the makefiles, I stumbled upon hundreds of issues with GCC incompatibility with the _Field_size_opt_ C macro: typedef struct { unsigned long cbStruct; // size of this structure (for future expansion) WCHAR *szDatabaseName; // (optional) original database path WCHAR *szNewDatabaseName; // new database path _Field_size_opt_( csetdbparam ) JET_SETDBPARAM *rgsetdbparam; // (optional) array of database parameters unsigned long csetdbparam; // number of elements in rgsetdbparam JET_GRBIT grbit; // recovery options } JET_RSTMAP2_W; GCC complains that the csetdbparam field is referenced in code before it is defined, which is true, but Microsoft's MSVC compiler has no issues with this. I could not get any further with porting the ESE library. Is there any simple solution, please? I think this library could/should become part of Wine one day. Thanks, Michael -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.