Contributing to Development - Shin-Aska/DosboxStagingReplacerForGOGGalaxy GitHub Wiki
Contributing to Development
Welcome to the development and contribution guide for Dosbox Staging Replacer for GOG Galaxy.
Whether you're fixing a bug, implementing a new feature, or improving documentation, this page will help you get started with contributing.
Getting Started
-
Fork the repository and clone your fork:
git clone https://github.com/YOUR_USERNAME/DosboxStagingReplacerForGOGGalaxy.git cd DosboxStagingReplacerForGOGGalaxy -
Install dependencies:
- C++20-compatible compiler (Tested to work as low as GCC-11)
- CMake version 3.30 or up
-
Create a build folder (in this example, we will create a folder for debug)
mkdir -p cmake-build-debug -
Change to the build folder
cd cmake-build-debug -
Run CMake to generate the build files
cmake .. -
Build the project
cmake --build . --config Debug -
Run test
ctest -
Run the application
DosboxStagingReplacer.exe --help
IDE Integration
- CLion: CLion automatically detects and configures the project using the provided
CMakeLists.txt. No additional setup is required. - Visual Studio Code (VSCode): Install the C++ extension (by Microsoft), which includes built-in support for CMake. Once installed, open the repository folder and VSCode will detect the
CMakeLists.txtfile at the root. You can configure build settings and targets via the Command Palette (Ctrl+Shift+P) using commands likeCMake: ConfigureandCMake: Build. - Other IDEs: If your IDE supports CMake natively, it should recognize the root
CMakeLists.txtfile and configure the project automatically. If not, check whether a CMake plugin is available for your IDE. Alternatively, you can use CMake's-Goption to generate project files (e.g., for Code::Blocks or Eclipse), though note that this method is deprecated by CMake since version 3.27
Note: It is recommended to name build directories with a cmake-build- prefix (e.g., cmake-build-debug, cmake-build-release). The repository's .gitignore is configured to exclude such folders automatically.
Contribution Guidelines
Areas You Can Help With
- Feature Additions
- Support alternate DOSBox versions (
--dosbox-version-manual)
- Support alternate DOSBox versions (
- Code Improvements
- Refactor loops to use const refs
- Enforce consistent naming (
operationsCount,SqlLiteService) - Improve exception handling on filesystem or DB edge cases
- File & Config Tools
- Expand
ScriptEditServiceto handle edge cases in.confparsing
- Expand
- Documentation
- Expand code documentation (Doxygen-friendly)
- Help maintain class diagrams or flow charts
- Security
- Due to the nature of bundling third-party libraries via amalgamation, manually update these libraries to their latest versions
- Test case
- Help in creating new and maintaining existing test cases
Development Notes
- Most result models like
PlayTaskInformationimplement afillFromStatement()method for populating from SQLite. - Service classes (e.g.,
GogGalaxyService,FileBackupService) are designed to be testable and loosely coupled. - Currently the diagram is manually created. Will explore automated solutions in the future.
Submitting a Pull Request
-
Create a feature branch:
git checkout -b feature/your-change -
Commit changes using conventional commit format:
git commit -m "feat(service): add custom launch parameter support" -
Push and open a pull request to
main.
Unit Testing
To add a new test:
- Create a new
*.cppfile in thetests/directory containing your test code. - Re-run
cmake ..in your build directory to configure the new test. - Re-run
cmake --buildin your build directory to recompile all test cases (including your newly created one) - Execute
ctestto verify
To update an existing test:
- Modify the existing test
.cppfile under thetests/directory. - Rebuild the tests by running
cmake .. - Recompile all tests again using
cmake --build - Execute
ctestto verify
Tips
- Stick to camelCase for variables and PascalCase for class names.
- Keep classes that require factories in
interfaces/, utility classes inhelpers/and logic inservices/.
Questions?
Open a discussion or ping directly via a PR comment.