- debug and release targets now produce both shared and static libs
- obj dirs split into shared/ and static/ to keep fPIC objects isolated
- install no longer depends on release, guards with existence check instead
- build.sh handles privilege escalation for install/uninstall via doas or
sudo, falling back gracefully if already root
- uninstall cleans up static lib alongside shared
- Install headers to /include/stk/ instead of /include/
- Update README examples to use #include <stk/stk.h>
- Update Windows install instructions to reflect stk/ directory structure
- Add MPL-2.0 license badge to README
- Clarify DLL can be placed in binary or lib directory on Windows
This prevents header name collisions with other libraries and follows
standard library distribution conventions (similar to SDL).
Users now include stk headers as <stk/stk.h> rather than <stk.h>.
- Add PREFIX, LIBDIR, and INCDIR variables (default: /usr/local)
- Implement install target that builds release and installs to system paths
- Implement uninstall target to cleanly remove installed files
- Support custom install locations via PREFIX variable
- Add helpful message on Windows directing users to manual installation
Both gmake.mk and bmake.mk now support standard installation workflow
on Unix-like systems (Linux, BSD, macOS). Windows users are instructed
to copy files manually as per platform conventions.
Usage:
make install # Install to /usr/local (requires root)
make PREFIX=$HOME install # Install to custom location
make uninstall # Remove installed files
- Add test target to both bmake.mk and gmake.mk Makefiles
- Add test-related artifacts to .gitignore (excluding DLLs/shared libs)
- Create test directory with cross-platform Makefiles (bmake.mk, gmake.mk)
- Implement cross-platform test program with signal handling (test.c)
- Add test module source for compilation (test_mod.c)
- Set up automated test environment with mods/ directory
- Support both POSIX and Windows platforms
The test infrastructure allows running integration tests via 'make test'
and demonstrates stk library functionality with dynamic module loading.
Generated DLLs/shared libraries are excluded from version control.
Refactor memory allocation patterns:
- Replace realloc-in-loop with count-then-allocate pattern across all platforms
- Eliminate arbitrary buffer sizes (e.g., malloc(8 * ...)) in favor of exact counts
- Reduce allocation overhead by pre-counting items before malloc
Fix Windows file watching:
- Replace unreliable FindFirstChangeNotification with directory handle approach
- Add is_file_ready() to prevent events while compiler is still writing files
- Preserve timestamps when file is locked to retry on next poll
- Fix do-while loop in platform_directory_init_scan (was skipping first file)
Fix Linux inotify event handling:
- Consolidate DELETE+CREATE pairs into single RELOAD event
- Prevents duplicate events when compiler uses temp-file-and-rename pattern
Fix BSD/macOS kqueue implementation:
- Remove realloc loops from update_watches() and watch initialization
- Pre-count files before allocating file descriptor arrays
All platforms now correctly handle:
- Compiler overwrites (temp file operations)
- Manual copy/move operations
- Explicit file deletions
Tested on Linux, Windows 10, and FreeBSD.
- Split Makefile into gmake.mk (Linux/Windows) and bmake.mk (BSD/macOS)
- Added config.mk for shared variables.
- Added build.sh and build.bat dispatchers.
- Retains old build behavior with dependency tracking.