A command-line calculator project with a C backend, Python interface via C-Python API, and multiple supporting tools like Ninja, Sphinx documentation, pre-commit hooks, and GitHub Actions CI/CD.
CLI-calculator/
├── c_backend/
│ ├── calc.c # C backend logic
│ ├── calc.h # C function declarations
│
├── python_interface/
│ ├── calculator.c # Python C extension wrapper
│ ├── init.py # Python package initializer
│ ├── cli.py # CLI tool (argparse)
│
├── tests/
│ └── test_calc.c # C unit tests
│ └── test_calculator.py # Python unit tests
│
├── docs/
│ ├── source/ # reStructuredText source files
│ └── conf.py # Sphinx config
│ └── Makefile/ # Generated documentation
│
├── .github/
│ └── workflows/
│ └── ci.yml # GitHub Actions CI/CD workflow
│
├── .pre-commit-config.yaml # Pre-commit hooks config
├── build.ninja # Ninja build system file
├── setup.py # Python packaging setup
├── pyproject.toml # PEP 518 build system file
├── requirements.txt # Python dependencies
├── Doxyfile # Doxygen setup file
└── README.md # This file
-
Python 3.12 assumed — adjust paths in build.ninja if needed.
-
<Python.h> is added in the c package. if not search for folder path Python.h (usually in appdata/local/programs/python/pythonver/include) then add the folder extension to your C interpreter.
✅ Modular C backend logic
✅ Python C extension module
✅ Command-line interface with argparse
✅ C and Python unit tests
✅ Ninja build system (Windows-optimized)
✅ Sphinx developer documentation
✅ Pre-commit hooks for code formatting and linting
✅ GitHub Actions CI/CD workflow
It is recommended to create a local environment inside the folder to avoid issues coming from having multiple interpreters installed, even on Anaconda.
python -m venv .venv
cd .venv/Scripts
activate.bat
cd ..
cd ..
This step is important for any of the following methods.
Recommended if you have Chocolatey installed. Install Make via Chocolatey in an elevated windows powershell (Administrator):
choco install make
Then:
1️⃣ Clone the repository:
git clone https://github.com/tahaaa22/CLI-calculator
cd CLI-calculator
2️⃣ Install project dependencies:
pip install -r requirements.txt
3️⃣ Install pre-commit hooks:
python -m pre_commit install
python -m pre_commit run --all-files
4️⃣ Install and build:
make install
make build
5️⃣ Run tests:
make test_python
6️⃣ Clean build artifacts:
make clean
1️⃣ Clone the repository:
git clone https://github.com/tahaaa22/CLI-calculator
cd CLI-calculator
2️⃣ Install dependencies:
pip install -r requirements.txt
python -m pre_commit install
3️⃣ Install in development (editable) mode:
pip install -e .
4️⃣ Test it in Python shell:
>>> import calculator as cal
>>> cal.mul(1, 2)
2.0
>>> cal.add(5.5, 3.2)
8.7
>>> cal.divide(10, 2)
5.0
>>> cal.sub(15, 7)
8.0
>>> exit()
1️⃣ Install dependencies:
pip install -r requirements.txt
pip install sphinx pre-commit ninja
✅ Install Ninja executable:
-
Extract ninja.exe to a folder
-
Add the folder to your system PATH
2️⃣ Build the extension:
ninja extbuild
3️⃣ Run C unit tests:
ninja testc_compile
ninja testc_run
ninja testc
4️⃣ Run Python unit tests:
ninja testpy
5️⃣ Run the CLI:
python python_interface/cli.py add 5 3
Install Doxygen : https://www.doxygen.nl/download.html
(make sure you are in the root)
doxygen Doxyfile
sphinx-build -b html docs/source docs/build
cd docs/build
start index.html
or via Ninja:
cd ..
cd .. #return to the root
ninja docs
7️⃣ Clean build artifacts:
ninja cleanall
python -m pre_commit install
python -m pre_commit run --all-files
MIT License © 2025 Ahmed Taha