Quick setup for CMake projects
Project description
Starlet Setup
A lightweight Python utility to quickly clone, configure, and build CMake projects — from single repos to full mono-repos.
Table of Contents
Features
-
Single Repository Mode:
- Clone a GitHub repository with simple
username/reposyntax - Support for HTTPS (default) and SSH protocols
- Create a dedicated build directory
- Configure the project with CMake
- Build the project automatically
- Optional flags for build type, directory, cleaning, and skipping build
- Clone a GitHub repository with simple
-
Mono-repo Mode:
- Clone multiple related repositories into one workspace
- Automatically generate root CMakeLists.txt for mono-repo structure
- Build all modules together for easy debugging and development
- Customize which repositories to include
- Perfect for working across multiple interdependent projects
-
Profile Mode:
- Save frequently used mono-repo configuration as named profiles
- Quick access to predefined repository sets
- Manage multiple development environments effortlessly
- Default profile includes all core Starlet modules
Prerequisites
- Python 3.6+
- Git
- CMake
Installation
From PyPI
pip install starlet-setup
From GitHub
pip install git+https://github.com/masonlet/starlet-setup.git
Once installed, you can use the starlet-setup command from anywhere.
⚠️ Command not found? ⚠️
If you get an error saying the command is not found, you may need to add Python's user scripts directory to your PATH:
Find your scripts directory:
# Run this to find your exact scripts path
python -c "import sysconfig; print(sysconfig.get_path('scripts'))"
Then add it to your PATH:
Linux/macOS:
# Add to ~/.bashrc, ~/.zshrc, or equivalent
export PATH="$HOME/.local/bin:$PATH"
# Apply changes
source ~/.bashrc # or equivalent
Windows (Command Prompt):
# Add to PATH via System Properties > Environment Variables
# Add: %APPDATA%\Python\Scripts
Alternatively, you can run the script directly:
python -m starlet_setup username/repo
Configuration
Starlet Setup supports persistent configuration through a JSON file, allowing you to save your preferred defaults (e.g., SSH mode, build directory, mono-repo repositories).
1. Initialize Config
# Create a default configuration file in your current directory.
starlet-setup --init-config
This will create a .starlet-setup.json that can be edited to customize your setup preferences.
2. File Location
Starlet Setup checks for configuration files in this order:
./.starlet-setup.json(current directory)~/.starlet-setup.json(home directory)
Usage
Single Repository Mode
Basic Usage
# Clone and build a repository via HTTPS
starlet-setup username/repo
starlet-setup https://github.com/username/repo.git
# Clone and build a repository via SSH
starlet-setup username/repo --ssh
starlet-setup git@github.com:username/repo.git
Advanced Usage
# Specify build type (Debug, Release, RelWithDebInfo, MinSizeRel)
starlet-setup username/repo --build-type Release
# Specify a custom build directory
starlet-setup username/repo --build-dir my-build
# Only configure, skip building
starlet-setup username/repo --no-build
# Clean the build directory before building
starlet-setup username/repo --clean
# Show verbose output for debugging
starlet-setup username/repo --verbose
# Custom CMake args
starlet-setup username/repo --cmake-arg=-DCMAKE_CXX_COMPILER=clang++
Mono-Repo Mode
BUILD_LOCAL Usage
Mono-repo mode sets BUILD_LOCAL=ON in the root project's CMakeLists.txt.
This flag tells your test repository to link against local modules instead of fetching them via CMake's FetchContent:
# In your test repo's CMakeLists.txt
if(NOT BUILD_LOCAL)
# Fetch dependencies from GitHub
FetchContent_Declare(starlet_engine
GIT_REPOSITORY https://github.com/masonlet/starlet-engine.git
GIT_TAG main
)
# ... other dependencies
endif()
With mono-repo mode (BUILD_LOCAL=ON):
- All modules link locally from subdirectories
- Changes in any module immediately affect your test repo
- Full debugging across module boundaries
- Single unified build for the entire ecosystem
Without mono-repo mode (BUILD_LOCAL undefined):
- Dependencies fetched via FetchContent
- Standalone builds work independently
- Users can build your repo without the full ecosystem
- Automatic dependency management
This dual-mode design allows both integrated development and standalone distribution.
Basic Usage
Note: When using --repos or --profile, mono-repo mode is automatically enabled, so the --mono-repo flag is optional.
# Clone and build default Starlet modules with a test repository
starlet-setup username/repo --mono-repo
# Use SSH instead of HTTPS
starlet-setup username/repo --mono-repo --ssh
# Clone non-default repositories
starlet-setup username/repo --repos user/lib1 user/lib2
Advanced Usage
# Multiple flags
starlet-setup username/repo --mono-repo --verbose --mono-dir my-starlet
# Custom repos and multiple flags
starlet-setup username/repo --repos user/lib1 user/lib2 --ssh --verbose
# Custom CMake args
starlet-setup username/repo --mono-repo --cmake-arg=-DCMAKE_CXX_COMPILER=clang++
Default Repositories (🚀 Starlet Ecosystem)
When using mono-repo mode without --repos or --profile, the script clones repositories based on your configuration. The default profile includes:
masonlet/starlet-mathmasonlet/starlet-loggermasonlet/starlet-controlsmasonlet/starlet-scenemasonlet/starlet-graphicsmasonlet/starlet-serializermasonlet/starlet-engine- Your specified test repository (e.g.,
masonlet/starlet-samples)
Mono-Repo Structure
Mono-repo mode creates a workspace like this:
build-mono/
├── CMakeLists.txt # Auto-generated root project
├── starlet-math/
├── starlet-logger/
├── starlet-controls/
├── starlet-scene/
├── starlet-graphics/
├── starlet-serializer/
├── starlet-engine/
├── starlet-samples/ # Your test repo
└── build/ # Single build output
This structure allows you to:
- Edit any module directory
- Build everything together
- Debug across module boundaries
- Commit changes without digging into build directories
Profile Mode (Saved Configurations)
Save frequently used mono-repo configurations as named profiles for easy re-use.
Managing Profiles
# Add a new profile
starlet-setup --profile-add myprofile user/lib1 user/lib2
# List all saved profiles
starlet-setup --list-profiles
# Remove a profile
starlet-setup --profile-remove myprofile
Using Profiles
# Use the default profile
starlet-setup username/repo --profile
# Use a named profile
starlet-setup username/repo --profile myprofile
# Use a profile with SSH
starlet-setup username/repo --profile myprofile --ssh
Development
Running Tests
1. Clone the Repository
git clone https://github.com/masonlet/starlet-setup.git
cd starlet-setup
2. Install in Development Mode
pip install -e .
3. Run Tests
# Run all tests
pytest
# Run specific test file
pytest tests/test_config.py
# Run tests with flags
pytest -v
License
MIT License — see LICENSE for details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file starlet_setup-1.0.2.tar.gz.
File metadata
- Download URL: starlet_setup-1.0.2.tar.gz
- Upload date:
- Size: 19.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dd30a4432930ae5affc795b4920f4bae3e0a4d953dbfe965656cddc9edea2026
|
|
| MD5 |
30fab645b75f0c19316cbde73a4aea08
|
|
| BLAKE2b-256 |
61ab6a3bfae40b4c3783bc38a09e75231a870379ce5cfa838d948e902db8eca1
|
File details
Details for the file starlet_setup-1.0.2-py3-none-any.whl.
File metadata
- Download URL: starlet_setup-1.0.2-py3-none-any.whl
- Upload date:
- Size: 14.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2bee39f773c7ed72c033fc1827dae4ae2a34b2c541fa18d19ea8585b7657b1de
|
|
| MD5 |
e2aabb4a7a104351921ca09be3e97bff
|
|
| BLAKE2b-256 |
5dc62017683a1cf351f85711a7a0508ec374ef63696244943023489683a7d5a5
|