Development
Want to help with cjsh? This page is the quickest path from clone to a tested local build. For the full contributor workflow, see the repository's CONTRIBUTING.md.
Requirements
- C compiler
- C++ compiler
- CMake 3.25 or newer
- Ninja
- Python 3 for parts of the test suite
Build
From the repository root:
git clone https://github.com/CadenFinley/cjsh && cd cjsh
cmake --preset release
cmake --build --preset release --parallel
Run the shell with:
Useful presets:
release: optimized default builddebug: debug build with AddressSanitizer enabledminimal: size-focused release profile
Test
Use CTest for all automated tests. Run all shell files and focused C, C++, and Python suites with four workers from the repository root:
Adjust 4 to control concurrency, or use 1 for a serial run. Timing and
system-wide process-count tests run alone. Add -L shell to select only shell
files, or -LE shell to select only focused suites.
CTest's built-in total counts registered suites and shell files. After it finishes, an additional summary shows the individual tests reported by the selected suites, with passed, failed, and skipped counts. Scripts that exercise one continuous integration scenario count as one test. Suites that stop before reporting results are listed separately when their individual counts are unavailable.
Run one shell file by its CTest name, using the filename without .sh:
Repeat failed suites with ctest --preset release --rerun-failed --output-on-failure.
For a custom build directory, use ctest --test-dir build --parallel 4 --output-on-failure,
replacing build with your configured directory. CTest selects its built cjsh
binary automatically.
If you are changing parser behavior, runtime execution, job control, or interactive input handling, also build and test the debug preset.
Work On Docs
Documentation contributions are always useful, especially when they clarify behavior, explain configuration, or document new builtins and options.
To preview the docs locally:
Themes And Prompt Styling
Prompt, theme, and styling contributions are welcome. If you have a PS1, RPS1, or cjshopt style_def setup worth sharing, open a pull request that adds it to the docs or examples. The Prompt Markup and Styling guide covers the available knobs.