Update iwork

This commit is contained in:
Green
2024-11-30 15:36:35 +03:00
committed by Oleg Korshul
parent 0c1864a136
commit 4501adbc61
2 changed files with 92 additions and 21 deletions

View File

@ -11,18 +11,18 @@ if not base.is_dir("mdds"):
base.cmd("git", ["clone", "https://github.com/kohei-us/mdds.git"])
base.cmd_in_dir("mdds", "git", ["checkout", "0783158939c6ce4b0b1b89e345ab983ccb0f0ad0"], "--quiet")
linux_cpp_version = "#if __cplusplus < 201402L\n"
linux_cpp_version += "#ifndef _MSC_VER\n"
linux_cpp_version += "namespace std {\n"
linux_cpp_version += " template<bool __v>\n"
linux_cpp_version += " using bool_constant = integral_constant<bool, __v>;\n\n"
linux_cpp_version += " template <class... _Types>\n"
linux_cpp_version += " using void_t = void;\n"
linux_cpp_version += "}\n#endif\n"
linux_cpp_version += "#endif\n\n"
linux_cpp_version += "namespace mdds {"
fix_cpp_version = "#if __cplusplus < 201402L\n"
fix_cpp_version += "#ifndef _MSC_VER\n"
fix_cpp_version += "namespace std {\n"
fix_cpp_version += " template<bool __v>\n"
fix_cpp_version += " using bool_constant = integral_constant<bool, __v>;\n\n"
fix_cpp_version += " template <class... _Types>\n"
fix_cpp_version += " using void_t = void;\n"
fix_cpp_version += "}\n#endif\n"
fix_cpp_version += "#endif\n\n"
fix_cpp_version += "namespace mdds {"
base.replaceInFile("./mdds/include/mdds/global.hpp", "namespace mdds {", linux_cpp_version)
base.replaceInFile("./mdds/include/mdds/global.hpp", "namespace mdds {", fix_cpp_version)
if not base.is_dir("librevenge"):
base.cmd("git", ["clone", "https://github.com/Distrotech/librevenge.git"])
@ -39,6 +39,58 @@ if not base.is_dir("librevenge"):
base.replaceInFile("./librevenge/src/lib/RVNGDirectoryStream.cpp", "#include <librevenge-stream/librevenge-stream.h>",
"#include <librevenge-stream/librevenge-stream.h>\n\n" + stat_windows)
fix_RVNG_H = "explicit RVNGFileStream(const char *filename);\n"
fix_RVNG_H += " #if defined(_WIN32) || defined(_WIN64)\n"
fix_RVNG_H += " explicit RVNGFileStream(const wchar_t *filename);\n"
fix_RVNG_H += " #endif\n"
base.replaceInFile("./librevenge/inc/librevenge-stream/RVNGStreamImplementation.h", "explicit RVNGFileStream(const char *filename);", fix_RVNG_H)
fix_RVNG_CPP_include = "#if defined(_WIN32) || defined(_WIN64)\n"
fix_RVNG_CPP_include += "#include <sys/stat.h>\n\n"
fix_RVNG_CPP_include += "static __inline int wstat(wchar_t const* const _FileName, struct stat* const _Stat)\n"
fix_RVNG_CPP_include += "{\n"
fix_RVNG_CPP_include += " _STATIC_ASSERT(sizeof(struct stat) == sizeof(struct _stat64i32));\n";
fix_RVNG_CPP_include += " return _wstat64i32(_FileName, (struct _stat64i32*)_Stat);\n";
fix_RVNG_CPP_include += "}\n"
fix_RVNG_CPP_include += "#endif\n\n"
fix_RVNG_CPP_include += "namespace librevenge"
base.replaceInFile("./librevenge/src/lib/RVNGStreamImplementation.cpp", "namespace librevenge", fix_RVNG_CPP_include)
fix_RVNG_CPP = "#if defined(_WIN32) || defined(_WIN64)\n"
fix_RVNG_CPP += "RVNGFileStream::RVNGFileStream(const wchar_t *filename) :\n"
fix_RVNG_CPP += " RVNGInputStream(),\n"
fix_RVNG_CPP += " d(new RVNGFileStreamPrivate())\n"
fix_RVNG_CPP += "{\n"
fix_RVNG_CPP += " d->file = _wfopen(filename, L\"rb\");\n"
fix_RVNG_CPP += " if (!d->file || ferror(d->file))\n"
fix_RVNG_CPP += " {\n"
fix_RVNG_CPP += " delete d;\n"
fix_RVNG_CPP += " d = 0;\n"
fix_RVNG_CPP += " return;\n"
fix_RVNG_CPP += " }\n\n"
fix_RVNG_CPP += " struct stat status;\n"
fix_RVNG_CPP += " const int retval = wstat(filename, &status);\n"
fix_RVNG_CPP += " if ((0 != retval) || !S_ISREG(status.st_mode))\n"
fix_RVNG_CPP += " {\n"
fix_RVNG_CPP += " delete d;\n"
fix_RVNG_CPP += " d = 0;\n"
fix_RVNG_CPP += " return;\n"
fix_RVNG_CPP += " }\n\n"
fix_RVNG_CPP += " fseek(d->file, 0, SEEK_END);\n\n"
fix_RVNG_CPP += " d->streamSize = (unsigned long) ftell(d->file);\n"
fix_RVNG_CPP += " if (d->streamSize == (unsigned long)-1)\n"
fix_RVNG_CPP += " d->streamSize = 0;\n"
fix_RVNG_CPP += " if (d->streamSize > (std::numeric_limits<unsigned long>::max)() / 2)\n"
fix_RVNG_CPP += " d->streamSize = (std::numeric_limits<unsigned long>::max)() / 2;\n"
fix_RVNG_CPP += " fseek(d->file, 0, SEEK_SET);\n"
fix_RVNG_CPP += "}\n"
fix_RVNG_CPP += "#endif\n\n"
fix_RVNG_CPP += "RVNGFileStream::~RVNGFileStream()"
base.replaceInFile("./librevenge/src/lib/RVNGStreamImplementation.cpp", "RVNGFileStream::~RVNGFileStream()", fix_RVNG_CPP)
if not base.is_dir("libodfgen"):
base.cmd("git", ["clone", "https://github.com/Distrotech/libodfgen.git"])
base.cmd_in_dir("libodfgen", "git", ["checkout", "8ef8c171ebe3c5daebdce80ee422cf7bb96aa3bc", "--quiet"])