Document build issues found during README testing
- Critical compilation error: direct access to internal ncurses structure members - Code compatibility issue with modern ncurses (curscr->_cury, curscr->_curx) - Affects both standard and manual build methods - Documented on macOS (darwin 25.0.0, Apple Silicon)
This commit is contained in:
125
BUILD_ISSUES.md
Normal file
125
BUILD_ISSUES.md
Normal file
@@ -0,0 +1,125 @@
|
||||
# Build Issues Found During README Testing
|
||||
|
||||
This document lists issues encountered when following the README.md build instructions on macOS (darwin 25.0.0, Apple Silicon).
|
||||
|
||||
## Date
|
||||
Testing performed: Following README.md Quick Start instructions
|
||||
|
||||
## Environment
|
||||
- **OS**: macOS (darwin 25.0.0)
|
||||
- **Architecture**: Apple Silicon (arm64)
|
||||
- **Compiler**: GCC/Clang (available)
|
||||
- **make**: Available
|
||||
- **ncurses**: Installed via Homebrew at `/opt/homebrew/opt/ncurses`
|
||||
|
||||
## Issues Found
|
||||
|
||||
### 1. Compilation Error: Incomplete Type 'WINDOW'
|
||||
|
||||
**Location**: `main.c:241-242`
|
||||
|
||||
**Error Message**:
|
||||
```
|
||||
main.c:241:11: error: incomplete definition of type 'WINDOW' (aka 'struct _win_st')
|
||||
241 | curscr->_cury = oy;
|
||||
| ~~~~~~^
|
||||
main.c:242:11: error: incomplete definition of type 'WINDOW' (aka 'struct _win_st')
|
||||
242 | curscr->_curx = ox;
|
||||
| ~~~~~~^
|
||||
```
|
||||
|
||||
**Root Cause**:
|
||||
The code attempts to access internal ncurses structure members (`curscr->_cury` and `curscr->_curx`) which are not part of the public API in modern ncurses libraries. These internal members are not accessible in both the system ncurses and Homebrew ncurses.
|
||||
|
||||
**Context**:
|
||||
The problematic code is in the `tstp()` function (lines 241-242), which handles stop/start signals (SIGTSTP). After resuming from a stop signal, the code tries to manually restore the cursor position by directly accessing internal ncurses structure members.
|
||||
|
||||
**Affected Code**:
|
||||
```c
|
||||
void
|
||||
tstp(int ignored)
|
||||
{
|
||||
// ... code ...
|
||||
getyx(curscr, y, x);
|
||||
mvcur(y, x, oy, ox);
|
||||
fflush(stdout);
|
||||
curscr->_cury = oy; // ERROR: Internal member access
|
||||
curscr->_curx = ox; // ERROR: Internal member access
|
||||
}
|
||||
```
|
||||
|
||||
**Impact**:
|
||||
- **Severity**: CRITICAL - Build fails completely
|
||||
- The game cannot be compiled on modern systems with standard ncurses
|
||||
- This affects all platforms using modern ncurses (not just macOS)
|
||||
|
||||
**Suggested Fix**:
|
||||
1. Remove the direct structure member access (lines 241-242)
|
||||
2. The `mvcur()` call on line 239 should be sufficient for cursor positioning
|
||||
3. If cursor position tracking is needed, use public ncurses API functions like `getyx()` and `move()` instead
|
||||
|
||||
**Workaround Attempted**:
|
||||
- Tried using Homebrew ncurses with explicit include/library paths as suggested in README troubleshooting section
|
||||
- Same error occurred with both system ncurses and Homebrew ncurses
|
||||
- Tried manual build using `Makefile.std` as documented in README (Alternative build method)
|
||||
- Same error occurred with manual build method
|
||||
- This confirms it's a code compatibility issue, not a configuration or build system issue
|
||||
|
||||
### 2. Compiler Warnings (Non-blocking)
|
||||
|
||||
**Location**: Multiple files
|
||||
|
||||
**Warning Messages**:
|
||||
- `main.c`: Multiple warnings about deprecated function prototypes (C23 compatibility)
|
||||
- Function declarations without prototypes in `extern.h` conflicting with definitions
|
||||
|
||||
**Impact**:
|
||||
- **Severity**: LOW - Warnings only, do not prevent compilation
|
||||
- Code compiles but may have issues with future C standards (C23)
|
||||
|
||||
**Note**: These warnings are expected for legacy C code and don't prevent the build from succeeding once the critical error is fixed.
|
||||
|
||||
## What Works
|
||||
|
||||
1. ✅ **Configure script**: Runs successfully
|
||||
- Detects compiler, headers, and libraries correctly
|
||||
- Creates `config.h` and `Makefile` properly
|
||||
- Works with both system ncurses and Homebrew ncurses paths
|
||||
|
||||
2. ✅ **Prerequisites**: All required tools are available
|
||||
- C compiler (gcc/clang)
|
||||
- make
|
||||
- ncurses library (via Homebrew)
|
||||
|
||||
3. ✅ **Build system**: Autotools configuration works correctly
|
||||
- `configure` script exists and is executable
|
||||
- No need for `autoreconf` (as documented in README)
|
||||
|
||||
## Recommendations for README Updates
|
||||
|
||||
1. **Add Known Compatibility Issue Section**:
|
||||
- Document that the codebase has compatibility issues with modern ncurses
|
||||
- Note that direct access to internal ncurses structures (`curscr->_cury`, `curscr->_curx`) will fail on modern systems
|
||||
- Provide information about which ncurses versions are known to work (if any)
|
||||
|
||||
2. **Update macOS Troubleshooting**:
|
||||
- The current macOS troubleshooting section mentions Homebrew ncurses paths, but this doesn't solve the compilation error
|
||||
- Add a note that even with correct ncurses paths, the build may fail due to code compatibility issues
|
||||
|
||||
3. **Add Build Status**:
|
||||
- Consider adding a "Known Issues" or "Build Status" section to the README
|
||||
- Indicate that the codebase may need patches for modern ncurses compatibility
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. **Code Fix Required**: The `main.c` file needs to be updated to remove direct access to internal ncurses structure members
|
||||
2. **Testing**: After fix, verify the game builds and runs correctly
|
||||
3. **Documentation**: Update README with any workarounds or fixes applied
|
||||
|
||||
## Additional Notes
|
||||
|
||||
- The README's Quick Start instructions are clear and easy to follow
|
||||
- The build system (Autotools) is properly configured
|
||||
- The issue is specifically with code compatibility, not with the build system or documentation
|
||||
- This appears to be a known issue with porting old curses-based code to modern ncurses
|
||||
|
||||
Reference in New Issue
Block a user