Conversation
Document and persist the Ubuntu->macOS GUI runtime fix that previously required manual relinking on LittlePaul.\n\nWhat this commit changes:\n- src/CMakeLists.txt\n - Bundle libz into SolveSpace.app/Contents/Frameworks during APPLE builds.\n - Set bundled libz install name to @rpath/libz.1.dylib.\n - Replace stale build-tree rpath with @executable_path/../Frameworks for SolveSpace.app.\n - Use CMAKE_INSTALL_NAME_TOOL for post-build install-name edits (including existing OpenMP paths), avoiding host-tool assumptions during cross builds.\n- asyn0c/,test,tooltime,x,ubuntu,mac\n - Detect and require osxcross install_name_tool for the selected target triple.\n - Export CMAKE_INSTALL_NAME_TOOL in generated toolchain file.\n\nWhy:\n- Fixes dyld launch failure on macOS: @rpath/libz.1.dylib not found.\n- Prevents leaking Linux build paths into macOS LC_RPATH entries.\n- Makes install-name rewriting reliable in Linux cross-compilation environments where plain install_name_tool is unavailable.\n\nValidation performed:\n- Full Ubuntu cross build completed successfully.\n- Synced to LittlePaul via rsync --update.\n- Verified SolveSpace.app links @rpath/libz.1.dylib, has only bundle-safe rpath, and launches without dyld missing-library abort.
Cross-built macOS bundles currently skip ibtool/iconutil resource compilation on Linux, so MainMenu.nib may be absent at runtime.\n\nThis change makes startup resilient by:\n- Checking whether loadNibNamed("MainMenu") succeeds.\n- Creating a minimal fallback application menu (including Quit) if the nib is missing.\n- Explicitly calling [NSApp finishLaunching] and [NSApp activateIgnoringOtherApps:YES] in manual startup flow.\n\nResult:\n- Prevents the blank bouncing dock icon / no-window startup dead-end when nib resources are unavailable in cross builds.\n- Keeps GUI startup functional until native nib/icon generation is restored in the packaging pipeline.
Recover file-save and export workflows in cross-built mac bundles where Cocoa nib resources are unavailable.\n\nThis change set captures the end-to-end stabilization work that restored reliable Save As and Auto Save-and-Export behavior:\n- harden Cocoa save dialog creation so missing/failed SaveFormatAccessory nib no longer aborts dialog flow\n- keep save/open diagnostics available to isolate modal lifecycle and persisted folder state\n- preserve operation by cleanly falling back to default NSSavePanel when accessory UI cannot load\n- include locale-message updates used during runtime freshness verification\n\nResult: Open, Save As, and Auto Save-and-Export now complete successfully in the cross-compiled app on target mac hosts, even when nib compilation is skipped.
Post-recovery cleanup after validating Save As and Auto Save-and-Export on target mac hosts.\n\n- remove temporary menu/save-path tracing from save command flow\n- keep Cocoa file-dialog diagnostics behind TOOLTIME_FILE_DIALOG_DEBUG\n- avoid default-runtime note spam when SaveFormatAccessory.nib is absent in cross-built bundles\n- record follow-up task to package/generate mac nib resources in cross pipeline
Embed post-build rsync synchronization into both Ubuntu cross-target scripts so invoking the compiler also refreshes the corresponding remote host workspace.\n\nmac script:\n- add configurable RSYNC_SOURCE/RSYNC_DEST defaults based on repo_root\n- run rsync after successful osxcross build\n- print completion summary\n\nwindows script:\n- add build_dir and configurable RSYNC_SOURCE/RSYNC_DEST defaults\n- default destination set to sync0x@LittleJohn.z.asyn0c.net:~/ToolTime/\n- preserve existing MinGW toolchain build flow\n- run rsync after successful build and print completion summary\n\nThis keeps LittlePaul and LittleJohn in sync automatically with each build invocation while allowing env-var override of source/destination when needed.
Add build provenance to the About dialog and fix the cross-build mac fallback menu so standard app-menu items remain available when MainMenu.nib is absent. This changeset: - prepends build date/time and git revision to the About text using compile-time macros - adds a dedicated GIT_REVISION config macro alongside the existing package version/hash URL - corrects the mac fallback app menu to include About plus standard Hide/Hide Others/Show All items instead of only Quit - fixes repo_root resolution in the Ubuntu cross-build scripts so rsync source paths and Windows ANGLE detection point at the ToolTime workspace - updates tracked Windows build outputs produced by the refreshed cross-build Validation: - mac cross-build completed and synced to LittlePaul via the mac build script - windows cross-build completed and synced to LittleJohn via the win build script
mac-first commit. Includes ToolTime_mac/bin/SolveSpace.app payload (with Mach-O and dylib tracked via LFS) plus version/reporting updates used by the About dialog. About box now begins with specific provenance lines: - Build: <compile date/time> - Snapshot: <git describe/tag lineage> - Git revision: <short commit hash> Version semantics are now separated: - PACKAGE_VERSION = stable release (e.g. 3.1) - SNAPSHOT_VERSION = moving snapshot tag/describe string - GIT_REVISION = short hash Also updates git describe capture in CMake and fallback handling so snapshot data is always populated.
windows-second commit. Updates tracked ToolTime_win/bin artifacts after rebuild so runtime matches the About provenance prefix introduced in source: - Build: <compile date/time> - Snapshot: <git describe/tag lineage> - Git revision: <short commit hash> No additional source changes in this commit; binaries are refreshed to align with the same version-reporting scheme shipped in the mac commit.
Commit remaining workspace change by adding the all-target Ubuntu helper script path.\n\nAbout dialog context now shipped in prior commits and referenced by runtime builds:\n- Build: compile-time date/time\n- Snapshot: git describe/tag lineage\n- Git revision: short hash\n- Release line remains the stable package version\n\nThis placeholder file keeps the scripted path tracked for later orchestration of mac+win build runners.
Document local experimental build workflow in-repo. Changes: - unignore .vscode so IDE task configuration is retained in this experimental repository - add default VS Code build task invoking asyn0c/,test,tooltime,x,ubuntu,all - add all-target orchestrator script that runs local Linux, mac cross, and win cross scripts directly - keep current execution model in series for simpler, linear logs and troubleshooting Future intent: - run the three platform builds in parallel once logging/aggregation is ready, while preserving clear per-target diagnostics.
…pilation science
CMakeLists.txt / src/CMakeLists.txt:
- Widen SpaceWare (3Dconnexion) enablement to any 32-bit Windows build
when extlib/si SDK files are present, not just MSVC.
- MinGW vendored-zlib link fixes: force OUTPUT_NAME, replace raw
zlibstatic token in ZLIB_LIBRARY and png_static interface with
$<TARGET_FILE:zlibstatic> to avoid 'cannot find zlibstatic' link
failure on MinGW.
- Stage MinGW runtime DLLs (libwinpthread-1, libgcc_s_dw2-1,
libstdc++-6) into bin/ at configure time.
- Link solvespace with -Wl,-Bstatic -lwinpthread -Wl,-Bdynamic to
remove hard runtime dependency on libwinpthread-1.dll.
Build tree naming convention (all platforms):
- Cross-compiled from Linux: ToolTime_lin / ToolTime_win / ToolTime_mac
(OS suffix only; single canonical cross toolchain per platform)
- Native Windows builds carry an extra qualifier:
ToolTime_win_ucrt64 MSYS2 MinGW-w64 UCRT 64-bit
ToolTime_win_ming32 MSYS2 MinGW-w64 32-bit
ToolTime_win_msvc Visual Studio / MSVC
(qualifier required because multiple coexisting toolchains are
realistic on Windows; absence of qualifier implies cross-compiled)
asyn0c/,test,tooltime,windows:
- Renamed build directory mkdir/cd from ToolTime_win to ToolTime_win_msvc.
.gitignore:
- Added artifact-retention blocks for ToolTime_win_ucrt64,
ToolTime_win_ming32, and ToolTime_win_msvc matching the existing
ToolTime_win and ToolTime_mac patterns.
asyn0c/provision-msys2-tooltime.sh (new file):
- Scripted MSYS2 provisioning for ucrt64 and mingw32 toolchains.
- Defaults to both targets; supports --targets, --no-upgrade,
--update-only flags.
- Installs MSYS base automation tools plus per-target gcc/cmake/ninja/
make/pkgconf/python/ccache/gdb package families.
- Summary output maps each target to its canonical build directory name
and MSYSTEM/PATH environment.
- Records clean env -i remote shell launch patterns in header comments.
asyn0c/the-science-of-cross-compilation-from-ubuntu-to-doswin.md (new file):
Added in this commit:
- Final naming convention section explaining ToolTime_win_ucrt64 /
ToolTime_win_ming32 and the rationale (win prefix, balanced suffix
length, no ambiguity for ming32 in this context).
- Host inventory update: both ucrt64 and mingw32 are now provisioned
and confirmed working; package state recorded.
- Canonical build tree and shell environment section with copy-paste
env -i / MSYSTEM / CHERE_INVOKING launch patterns for both targets.
- 'What We Learned Actually Building Under MSYS2' section covering:
1. MSYS as control plane vs target ABI
2. Explicit per-target out-of-source directories
3. Why deleting the build tree is often the fastest link-debug step
(CMake/Ninja link graph changes require clean reconfigure to verify)
4. Inspecting generated build.ninja to locate phantom library tokens
5. Runtime DLL validation as a distinct phase after link success
6. Warning triage by severity to stay focused on the blocking failure
7. Preserving exact successful remote command lines for future reuse
- 'ToolTime-Specific 32-Bit Notes That Generalize Well' section for
any future package targeting 32-bit Windows.
- Recommended baseline cmake commands for both ming32 and ucrt64.
- Updated Bottom Line section reflecting provisioned state.
Unifies export layer naming across DXF and SVG to the stable mechanical rule used by the old convention: - always prefix style index as s%03x_ - map every non-alphanumeric character to '_' - remove SVG-only hardcoded fallback translations This intentionally favors deterministic, cross-format parity over special cases. I am confident this is a robust default for production workflows that depend on predictable layer-token contracts.
Reverts forced file-path cache overrides for vendored zlib/png libraries in CMakeLists when vendored packages are used. Rationale: - Full all-platform host run exposed ordering failures in generated builds: - macOS cross: No rule to make target 'bin/libz.a' (needed by libslvs) - Windows cross: No rule to make target 'bin/libpng16.a' (needed by libslvs) - Forcing PNG_LIBRARY/ZLIB_LIBRARY to concrete archive paths removed target- level dependency edges in some generated graphs. Fix: - Keep vendored linkage target-based (no forced path assignment for these vars) so CMake preserves build-time target dependencies and correct ordering. - Retains the MinGW interface-token rewrite for raw zlibstatic propagation. Validated by clean local rebuilds from this host via asyn0c/,test,tooltime,x,ubuntu,all with OSXCROSS_ROOT set; Linux, macOS-cross, and Windows-cross now complete successfully.
…onvention for DXF and SVG exports.
Add xmlns:i namespace declaration and i:layer="yes" attribute to SVG layer groups so that Adobe Illustrator recognises them as proper layers rather than plain groups. Without i:layer="yes" the groups are opaque to Illustrator's layer model, causing them to disappear when emptied and preventing layer-aware scripting without patching the consumer. Also propagate the SolveSpace style stroke colour into the standard SVG color presentation attribute on each layer <g>. Illustrator reads this attribute as the layer selection-highlight swatch, replacing the random colour it would otherwise assign. The value is sourced from Style::Color(hs, forExport=true), consistent with the CSS class already written for each style in StartFile().
…t in this fork is sixteen years old; standards have changed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Establish identity of the fork