Fix Flash Support - #61
Conversation
…iscord/Website links, rewrite README AppImage (issue: missing from Linux nightly): - linuxdeploy-plugin-qt / -plugin-appimage were downloaded from the linuxdeploy/linuxdeploy repo, which 404s — each tool lives in its own repo. This silently set TOOLS_OK=0 and skipped AppImage generation on every build. Download each tool from its correct repo, with retries. - Stop swallowing linuxdeploy failures with `|| true`; emit ::warning:: so a missing AppImage is visible in CI instead of silent. - Publish a standalone Flare-x86_64.AppImage release asset (not only buried inside the tarball) and document it in the release notes. - Applied to both nightly.yml and workflow_linux.yml. Default UI = Adobe Animate (#2, part of #47): - The "Default" room set was a stripped single-room layout merely named "Adobe Animate". The real 4-room Animate workspace (Drawing/Animation/ Rigging/Compositing, with Flash import/export in its menubar) lived in a separate "Animate" folder users had to switch to manually. - Promote the real Animate workspace to Default and remove the duplicate Animate folder. The classic layout remains available as the OpenToonz preset. This also surfaces the Flash Open/Export menu items by default, addressing the room-layout half of #47. In-app community links (#5): - New Help menu items "Join us on Discord..." and "Flare Website..." (MI_OpenDiscord / MI_OpenWebsite) wired through mainwindow + menubar + Default and OpenToonz menubar templates. README (#5): rewritten from the shallow OpenToonz copy into a real intro with feature list, Flash support status table, download table, and prominent Discord + website links. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Assessment + roadmap for merging Next2Flash (MIT SWF round-trip editor with a native AS3 decompiler) into Flare. A direct merge is infeasible (C++/Qt vs Python/JS/Electron), so the plan ports the native-friendly SWF reader/writer pieces and bridges AS3 as an optional FFmpeg-style helper, preserving Flare's zero-runtime-dependency promise for the common FLA-import case. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
extractZip() stripped a leading '/' from archive entries, silently relativizing absolute paths under the output dir. A well-formed FLA/XFL/SWC never contains absolute entries, so reject them outright instead — clearer and stricter. Updated the standalone test mirror to match; the Flash parser test suite now passes 22/22 (was 21/22, the failing case being exactly this absolute-path entry). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Deterministic minimal-but-valid sample files (FLA, XFL, SWF, SWC, FLV, F4V, AS) plus generate_fixtures.py and verify_fixtures.py. verify checks each fixture against the exact format contract flashimport.cpp/XFLReader rely on (11/11 pass). Complements the in-process C++ parser tests in test_flashimport.cpp (22/22 pass after the Zip Slip fix). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Build fix (Linux AppImage): - The AppImage download fix worked and exposed the next failure: the appimage plugin validates the .desktop file and rejected Categories=...;Animation; because "Animation" is not a registered freedesktop category. Use registered categories (Graphics;2DGraphics;RasterGraphics;VectorGraphics;) and move the animation tag to the allowed X- extension form (X-Animation;). Legacy binary FLA (issue #47): - The FLA reported in #47 is an OLE2 / Compound File Binary Format document (Flash CS4 and earlier), not a ZIP/XFL. extractZip() failed on it with a misleading "invalid/corrupt ZIP" error. - Detect the OLE2 magic (D0CF11E0A1B11AE1) and route legacy FLAs to a dedicated path that tells the user exactly what the file is and how to convert it (re-save as CS5+/XFL in Animate), instead of the cryptic ZIP error. - Best-effort bitmap recovery: carve embedded images and validate each with QImage so a false-positive marker in entropy data never yields a broken image. On the #47 sample this recovers 5 real bitmaps. - Full binary-FLA timeline/symbol parsing (CFBF stream reassembly) is documented as future work alongside the Next2Flash merge. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The desktop-file fix let the build reach appimagetool, which then failed
AppStream validation (exit 3) and took the whole Linux job down:
- referenced a screenshot (screenshot1.png) that 404s -> validation warning
- used the deprecated <developer_name> tag
- the description was garbled by the OpenToonz->Flare rename
("a fork of Flare", "Toonz (now called Flare) (now called Flare)")
Rewrite appdata.xml: modern component type + <developer> tag, corrected
description, real homepage URL, and drop the missing screenshot so
validation passes cleanly.
Also make workflow_linux.yml's linuxdeploy step non-fatal (::warning::
instead of exit 1), matching nightly.yml — AppImage packaging problems no
longer fail the build+smoke-test job.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The macos-15-intel runner now pre-links qtsvg in addition to qtbase and
qtdeclarative; qt@5 refuses to install while any conflicting Qt6 component
is linked ("Cannot install qt@5 because conflicting formulae are
installed: ... qtsvg"). Expand the unlink list in both workflow_macos.yml
and nightly.yml to cover the full Qt6 set.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Root cause of the persistent qt@5 conflict: opencv depends on Qt 6 and (re)links qtbase/qtsvg/qtdeclarative during its own install, so unlinking Qt6 once at the top is undone by the time qt@5 is installed. Split the install: everything except qt@5 first (incl. opencv), THEN unlink the full Qt6 set, THEN install qt@5. Applied to workflow_macos.yml and nightly.yml. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Directory-based XFL (issue #47, "Save as XFL" from Adobe Animate): - A directory-based XFL project is a FOLDER (DOMDocument.xml, LIBRARY/, bin/) with a tiny "<name>.xfl" marker FILE inside it. Selecting that marker made XFLReader use the marker's own path as the project root, so it looked for "<name>.xfl/DOMDocument.xml" and failed with "DOMDocument.xml not found in XFL directory". - XFLReader::readFromDirectory() now resolves a marker file to its parent directory. flashimport.cpp routes .xfl marker files (not just dirs) to the XFL reader and uses the resolved folder for asset copy / href lookup. - xfl_handler.py had the same bug and worse: it treated ANY .xfl path as a ZIP. It now detects ZIPs by magic bytes and resolves marker files to the project folder. Verified: selecting the marker now parses 550x400. Legacy binary FLA bitmap recovery (CFBF): - Add a minimal OLE2/Compound File Binary Format reader and carve bitmaps per-stream instead of scanning the whole file. On the real assets_2-2.fla from #47 this recovers 11 valid bitmaps vs 5 for the whole-file scan, because legacy FLAs store bitmaps in non-contiguous per-symbol streams. - Falls back to the whole-file carve if CFBF parsing fails. Each candidate is still validated with QImage so no broken image is ever imported. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The AppImage built but aborted immediately with "FLAREROOT not set" /
"Undefined or empty", because:
1. the workflow MOVED stuff/ out of the AppImage into the tarball, so the
AppImage had no data directory; and
2. Linux had no way to detect a bundled portablestuff/ — portable mode was
only detected from the CWD (which, for an AppImage, is the user's launch
dir, not the mount point), and the exe-dir fallback existed only on
Windows/macOS and relied on QApplication, which does not yet exist when
getStuffDir() runs (main.cpp calls it before building QApplication).
Fixes:
- tenv.cpp: on Linux, resolve the executable's own directory via
/proc/self/exe (works before QApplication exists) and treat a sibling
portablestuff/ as a portable install.
- nightly.yml / workflow_linux.yml: bundle portablestuff INSIDE the AppImage
next to the binary (usr/bin/portablestuff) instead of stripping it out, so
the AppImage is self-contained. A copy is still shipped in the tarball.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
Review Complete
This PR successfully implements comprehensive Flash/Animate format import support with proper security measures. The implementation demonstrates thorough attention to:
Security ✓
- Zip Slip protection with path traversal validation
- Proper bounds checking and overflow prevention in binary parsing
- Size limits on decompression operations (100MB cap for SWF)
- Input validation for all file formats
Code Quality ✓
- Well-structured with clear separation of concerns
- Comprehensive error handling throughout
- Detailed comments explaining format specifications
- Extensive test coverage with unit tests and fixture generation
Functionality ✓
- Supports multiple Flash formats (FLA, XFL, SWF, SWC, FLV, F4V, AS)
- Legacy binary FLA detection and bitmap recovery
- Native XFL scene import with timeline/layer mapping
- Proper handling of both ZIP-based and directory-based XFL projects
The changes are ready for merge.
You can now have the agent implement changes and create commits directly on your pull request's source branch. Simply comment with /q followed by your request in natural language to ask the agent to make changes.
There was a problem hiding this comment.
Pull request overview
This PR improves Flare’s Flash/Animate interoperability and distribution UX by hardening XFL/FLA import handling (including legacy binary FLAs), adding deterministic Flash fixtures for verification, and updating UI/docs/CI packaging to better support the Flash-focused workflow.
Changes:
- Fix XFL directory “marker file” handling and tighten Zip Slip protections during FLA/XFL/SWC extraction.
- Add legacy (pre-CS5) binary
.fladetection with partial bitmap recovery plus updated Flash support documentation/roadmap. - Update workspace/menu templates, add Help links (Discord/Website), and improve Linux/macOS CI packaging reliability (AppImage + Qt5 setup).
Reviewed changes
Copilot reviewed 30 out of 38 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
| tools/flash/xfl_handler.py | Detect ZIP via magic bytes; treat directory-based .xfl marker as project root parent. |
| tests/flash_fixtures/verify_fixtures.py | New fixture verifier script for Flash formats and container contracts. |
| tests/flash_fixtures/sample.as | Minimal AS3 source fixture. |
| tests/flash_fixtures/sample_xfl/sample.xfl | Directory-based XFL marker-file fixture. |
| tests/flash_fixtures/sample_xfl/DOMDocument.xml | Minimal XFL DOMDocument fixture. |
| tests/flash_fixtures/README.md | Documents fixture intent and how to run checks. |
| tests/flash_fixtures/generate_fixtures.py | Deterministic generator for Flash fixtures. |
| stuff/profiles/layouts/rooms/OpenToonz/menubar_template.xml | Add Help menu items for Discord/Website. |
| stuff/profiles/layouts/rooms/Default/room4.ini | New default room layout (Compositing). |
| stuff/profiles/layouts/rooms/Default/room3.ini | New default room layout (Rigging). |
| stuff/profiles/layouts/rooms/Default/room2.ini | New default room layout (Animation). |
| stuff/profiles/layouts/rooms/Default/room1.ini | Rename room to “Drawing”. |
| stuff/profiles/layouts/rooms/Default/menubar_template.xml | Promote Flash commands + add Help links/Flash guide placement. |
| stuff/profiles/layouts/rooms/Default/layouts.txt | Register additional rooms (room2–room4). |
| stuff/profiles/layouts/rooms/Animate/room1.ini | Remove Animate room layout file. |
| stuff/profiles/layouts/rooms/Animate/menubar_template.xml | Remove Animate room menubar template. |
| stuff/profiles/layouts/rooms/Animate/layouts.txt | Remove Animate room layouts list. |
| README.md | Rewrite project overview; add download links + Flash support status table. |
| flare/sources/xdg-data/io.github.Flare.desktop | Adjust desktop categories and metadata. |
| flare/sources/xdg-data/io.github.Flare.appdata.xml | Update AppStream metadata (developer block, summary, homepage URL). |
| flare/sources/flare/test_flashimport.cpp | Align Zip Slip guard behavior with extraction logic. |
| flare/sources/flare/menubarcommandids.h | Add MI_OpenDiscord / MI_OpenWebsite command IDs. |
| flare/sources/flare/menubar.cpp | Add new Help menu items. |
| flare/sources/flare/mainwindow.h | Add handlers for Discord/Website actions. |
| flare/sources/flare/mainwindow.cpp | Wire handlers and actions for Discord/Website. |
| flare/sources/flare/flashimport.cpp | Legacy binary FLA detection + bitmap carving; improved XFL marker handling; Zip Slip tightening. |
| flare/sources/common/tapptools/tenv.cpp | Linux portable-mode detection via /proc/self/exe (AppImage support). |
| flare/sources/common/flash/XFLReader.cpp | Fix directory-based .xfl marker selection by resolving to parent dir. |
| doc/NEXT2FLASH_INTEGRATION.md | New integration roadmap doc for Next2Flash. |
| doc/FLASH_SUPPORT.md | Document legacy binary FLA behavior + Next2Flash roadmap section. |
| .github/workflows/workflow_macos.yml | More robust Qt6 unlinking before installing Qt5. |
| .github/workflows/workflow_linux.yml | Bundle portablestuff/ into AppImage; fix linuxdeploy download sources + warning behavior. |
| .github/workflows/nightly.yml | Same Linux AppImage fixes; upload standalone AppImage artifact; improved macOS Qt handling. |
| #define MI_OpenWhatsNew "MI_OpenWhatsNew" | ||
| #define MI_OpenCommunityForum "MI_OpenCommunityForum" | ||
| #define MI_OpenDiscord "MI_OpenDiscord" | ||
| #define MI_OpenWebsite "MI_OpenWebsite" |
| Terminal=false | ||
| Type=Application | ||
| Categories=Graphics;RasterGraphics;2DGraphics;Animation; | ||
| Categories=Graphics;2DGraphics;RasterGraphics;VectorGraphics;X-Animation; |
| QFile flaFile(srcPath); | ||
| QStringList bitmaps; | ||
| if (flaFile.open(QIODevice::ReadOnly)) { | ||
| QByteArray flaData = flaFile.readAll(); | ||
| flaFile.close(); | ||
| bitmaps = extractLegacyFlaBitmaps(flaData, outPath); | ||
| } |
| QByteArray readChain(quint32 start) const { | ||
| QByteArray out; | ||
| const QVector<quint32> secs = chainSectors(start); | ||
| for (quint32 s : secs) out += sector(s); | ||
| return out; |
| swf = open(os.path.join(HERE, 'sample.swf'), 'rb').read() | ||
| dims = read_swf_dims(swf) |
| check('SWF FWS header + RECT', dims == (5, 550, 400), f'ver/w/h={dims}') | ||
|
|
||
| # FLV | ||
| flv = open(os.path.join(HERE, 'sample.flv'), 'rb').read() |
| f'flags=0x{flv[4]:02x}') | ||
|
|
||
| # F4V | ||
| f4v = open(os.path.join(HERE, 'sample.f4v'), 'rb').read() |
| f'brand={f4v[8:12]!r}') | ||
|
|
||
| # AS | ||
| src = open(os.path.join(HERE, 'sample.as'), encoding='utf-8').read() |
Vendoring slot (tools/flash/next2flash/vendor/) + flare_as3_bridge.py, a Flare-authored CLI contract implementing the flare-as3 interface from doc/NEXT2FLASH_INTEGRATION.md. Stub reports AS3 support unavailable until Next2Flash's as3_decompiler package (MIT) is vendored in — no behavior change to existing FLA/XFL import. Network access to clone the upstream repo was unavailable this pass; see the README for the drop-in steps. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 32 out of 40 changed files in this pull request and generated 3 comments.
Comments suppressed due to low confidence (2)
flare/sources/flare/menubarcommandids.h:462
- MI_OpenDiscord / MI_OpenWebsite are introduced here and referenced by room menubar templates, but the flare_legacy command ID header and action wiring don’t define/handle these IDs yet. Since flare_legacy is the primary executable, this likely results in missing/disabled menu actions (or unresolved command IDs) at runtime. Add the same MI_* definitions and handlers in flare/sources/flare_legacy/* (menubarcommandids.h, mainwindow.cpp, menubar.cpp) to keep rooms consistent.
#define MI_OpenOnlineManual "MI_OpenOnlineManual"
#define MI_OpenWhatsNew "MI_OpenWhatsNew"
#define MI_OpenCommunityForum "MI_OpenCommunityForum"
#define MI_OpenDiscord "MI_OpenDiscord"
#define MI_OpenWebsite "MI_OpenWebsite"
flare/sources/flare/test_flashimport.cpp:563
- In isPathSafeForExtraction(), entry.replace('\','/') already removes all backslashes, so the subsequent
entry.contains('\\')check is unreachable and can be removed to keep the test helper consistent and readable.
// Absolute paths are rejected outright (not relativized) — matches extractZip().
if (entry.startsWith('/')) return false;
// Reject any remaining backslash after normalisation
if (entry.contains('\\')) return false;
// Reject '..' path traversal segments (including trailing '..')
| @staticmethod | ||
| def _looks_like_zip(path: str) -> bool: | ||
| """Return True if *path* is a file beginning with the ZIP signature.""" | ||
| if not os.path.isfile(path): | ||
| return False | ||
| try: | ||
| with open(path, 'rb') as f: | ||
| return f.read(2) == b'PK' | ||
| except OSError: | ||
| return False |
| quint32 nxt = difatStart; int guard = 0; | ||
| while (nxt < 0xFFFFFFFE && guard++ < 1000000) { | ||
| QByteArray sec = sector(nxt); | ||
| if (sec.size() < static_cast<int>(m_secSize)) break; | ||
| int cnt = static_cast<int>(m_secSize) / 4; | ||
| for (int i = 0; i < cnt - 1; ++i) difat.append(u32(sec, i * 4)); | ||
| nxt = u32(sec, (cnt - 1) * 4); | ||
| } |
| // ---- Legacy binary FLA (Flash CS4 and earlier; OLE2 compound document) ---- | ||
| if (ext == "fla" && isOle2CompoundFile(srcPath)) { | ||
| QFile flaFile(srcPath); | ||
| QStringList bitmaps; | ||
| if (flaFile.open(QIODevice::ReadOnly)) { | ||
| QByteArray flaData = flaFile.readAll(); | ||
| flaFile.close(); | ||
| bitmaps = extractLegacyFlaBitmaps(flaData, outPath); | ||
| } | ||
| exported += bitmaps; | ||
| info = QObject::tr( | ||
| "Legacy binary FLA detected (Adobe Flash CS4 or earlier).\n" | ||
| "Flare natively imports XFL-based FLAs (Animate / Flash CS5 and " | ||
| "newer). Full timeline and symbol import for the older binary format " | ||
| "is not supported yet — to import everything, open this file in Adobe " | ||
| "Animate and re-save it as a CS5+ FLA or an uncompressed XFL."); | ||
| if (!bitmaps.isEmpty()) | ||
| info += QObject::tr("\n Recovered %1 embedded bitmap(s) from the file.") | ||
| .arg(bitmaps.size()); | ||
| else | ||
| info += QObject::tr("\n No embedded bitmaps could be recovered."); | ||
|
|
||
| // ---- FLA / XFL / SWC : ZIP-based container ---- | ||
| if (ext == "fla" || ext == "swc" || (ext == "xfl" && XFL::isFLAZipBased(fp))) { | ||
| } else if (ext == "fla" || ext == "swc" || | ||
| (ext == "xfl" && XFL::isFLAZipBased(fp))) { |
# Conflicts: # flare/sources/flare/flashimport.cpp
FLA/SWF/FLV/F4V were already core-declared in tiio.cpp; XFL (Flare's other primary Adobe Animate project format) was missing from TFileType, so it only showed up via the import dialog, not native file-open/browser. Adds it alongside fla using the same TFileType::declare mechanism — no existing format removed or changed.
|
Automated build logs – Windows (truncated) --- CMake configure log --- --- Build log --- --- Smoke test (DLL check + launch test) --- --- DLLs present in FlarePortable (root) --- --- dumpbin /DEPENDENTS FlarePortable\Flare.exe --- --- Runtime launch test (8-second timeout, hidden window) --- Note: log files missing – checkout or prior step may have failed. |
|
Automated build logs – macOS (truncated) --- CMake configure log --- --- Build log --- --- Smoke test (dylib check + launch test) --- Note: log files missing – checkout or prior step may have failed. |
|
Automated build logs – Linux (clang) (truncated) --- CMake configure log --- This warning is for project developers. Use -Wno-dev to suppress it. -- Found Boost: /usr/lib/x86_64-linux-gnu/cmake/Boost-1.83.0/BoostConfig.cmake (found version "1.83.0") subdir: flare_legacy (application) -- Build files have been written to: /home/runner/work/Flare/Flare/flare/build --- Build log --- --- Smoke test (launch check) --- |
|
Automated build logs – Linux (gcc) (truncated) --- CMake configure log --- This warning is for project developers. Use -Wno-dev to suppress it. -- Found Boost: /usr/lib/x86_64-linux-gnu/cmake/Boost-1.83.0/BoostConfig.cmake (found version "1.83.0") subdir: flare_legacy (application) -- Build files have been written to: /home/runner/work/Flare/Flare/flare/build --- Build log --- --- Smoke test (launch check) --- |
|
CI status for commit 0581fe7 (branch fix/appimage-preset-readme-flash)
❌ One or more platform workflows failed. Please check the logs in the respective workflow runs. |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 9 out of 9 changed files in this pull request and generated 2 comments.
Comments suppressed due to low confidence (1)
flare/sources/flare/flashimport.cpp:520
- The DIFAT traversal loop is bounded by a hard-coded
guard++ < 1000000. On a corrupt file this can still spin for a long time. Since the maximum possible number of sectors is bounded by the file size, it’s safer to cap the loop using that bound.
quint32 nxt = difatStart; int guard = 0;
while (nxt < 0xFFFFFFFE && guard++ < 1000000) {
QByteArray sec = sector(nxt);
| quint64 size = static_cast<quint64>(u32(m_dir, i + 120)) | | ||
| (static_cast<quint64>(u32(m_dir, i + 124)) << 32); | ||
| QByteArray blob = (size < m_miniCutoff) | ||
| ? readMini(start, static_cast<quint32>(size)) | ||
| : readChain(start).left(static_cast<int>(size)); |
| VENDOR_DIR = Path(__file__).parent / "vendor" / "as3_decompiler" | ||
|
|
||
|
|
||
| def _vendor_available() -> bool: | ||
| return (VENDOR_DIR / "__init__.py").is_file() |
|
CI status for commit 379a8d8 (branch fix/appimage-preset-readme-flash)
⏳ Waiting for remaining platform workflows to complete. |
|
Automated build logs – macOS (truncated) --- CMake configure log --- subdir: flare_legacy (application) -- Build files have been written to: /Users/runner/work/Flare/Flare/flare/build --- Build log --- ... (truncated) ... l.h:2463:13: note: 'glDisableClientState' has been explicitly marked deprecated here --- Smoke test (dylib check + launch test) --- |
|
Automated build logs – Linux (gcc) (truncated) --- CMake configure log --- This warning is for project developers. Use -Wno-dev to suppress it. -- Found Boost: /usr/lib/x86_64-linux-gnu/cmake/Boost-1.83.0/BoostConfig.cmake (found version "1.83.0") subdir: flare_legacy (application) -- Build files have been written to: /home/runner/work/Flare/Flare/flare/build --- Build log --- ... (truncated) ... p.o --- Smoke test (launch check) --- |
|
Automated build logs – Linux (clang) (truncated) --- CMake configure log --- This warning is for project developers. Use -Wno-dev to suppress it. -- Found Boost: /usr/lib/x86_64-linux-gnu/cmake/Boost-1.83.0/BoostConfig.cmake (found version "1.83.0") subdir: flare_legacy (application) -- Build files have been written to: /home/runner/work/Flare/Flare/flare/build --- Build log --- ... (truncated) ... p.o --- Smoke test (launch check) --- |
|
Automated build logs – Windows (truncated) --- CMake configure log --- Environment variable Boost_ROOT is set to: For compatibility, CMake is ignoring the variable. CMake Warning (dev) at D:/a/Flare/Flare/vcpkg/scripts/buildsystems/vcpkg.cmake:939 (_find_package): Call Stack (most recent call first): -- Found Boost: C:/local/boost_1_87_0 (found suitable version "1.87.0", minimum required is "1.55") -- Build files have been written to: D:/a/Flare/Flare/build --- Build log --- 1>Checking Build System
lrelease czech/flareqt.qm
... (truncated) ... prise\VC\Tools\MSVC\14.44.35207\include\map(72,7): D:\a\Flare\Flare\flare\sources\include\flareqt\menubarcommand.h(130,31): warning C4251: 'CommandManager::m_qactionTable': 'std::map<QAction *,CommandManager::Node *,std::less<QAction *>,std::allocator<std::pair<QAction *const ,CommandManager::Node *>>>' needs to have dll-interface to be used by clients of 'CommandManager' [D:\a\Flare\Flare\build\flare_legacy\Flare.vcxproj] D:\a\Flare\Flare\flare\sources\include\flareqt\menubarcommand.h(131,33): warning C4251: 'CommandManager::m_shortcutTable': 'std::map<std::string,CommandManager::Node *,std::lessstd::string,std::allocator<std::pair<const std::string,CommandManager::Node *>>>' needs to have dll-interface to be used by clients of 'CommandManager' [D:\a\Flare\Flare\build\flare_legacy\Flare.vcxproj] D:\a\Flare\Flare\flare\sources\include\flareqt\selection.h(89,28): warning C4251: 'TSelection::m_alternativeCommandNames': 'QMap<CommandId,QString>' needs to have dll-interface to be used by clients of 'TSelection' [D:\a\Flare\Flare\build\flare_legacy\Flare.vcxproj] moc_expressionreferencemanager.cpp D:\a\Flare\Flare\flare\sources\include\tcolorstyles.h(120,16): warning C4251: 'TColorStyle::m_globalName': 'std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>' needs to have dll-interface to be used by clients of 'TColorStyle' [D:\a\Flare\Flare\build\flare_legacy\Flare.vcxproj] D:\a\Flare\Flare\flare\sources\include\tcolorstyles.h(121,16): warning C4251: 'TColorStyle::m_originalName': 'std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>' needs to have dll-interface to be used by clients of 'TColorStyle' [D:\a\Flare\Flare\build\flare_legacy\Flare.vcxproj] D:\a\Flare\Flare\flare\sources\include\tcolorstyles.h(133,7): warning C4251: 'TColorStyle::m_pickedPosition': 'TColorStyle::PickedPosition' needs to have dll-interface to be used by clients of 'TColorStyle' [D:\a\Flare\Flare\build\flare_legacy\Flare.vcxproj] moc_stopmotionserial.cpp --- Smoke test (DLL check + launch test) --- --- DLLs present in FlarePortable (root) --- ... (truncated) ... l.dll --- dumpbin /DEPENDENTS FlarePortable\Flare.exe --- --- Runtime launch test (8-second timeout, hidden window) --- |
No description provided.