Giter Club home page Giter Club logo

ccake's Introduction

bvanseg

GitHub followers Stars

Hello there, my name is Boston! Take a look around, grab some coffee and make yourself at home!

Social Media GitHub logo GitLab logo Stackoverflow logo

Personal Interests

Linux Linux Mint Arch Linux Manjaro Ubuntu

GNU LLVM

Brave Firefox

Android F Droid


Experienced With

Backend

C Java Kotlin Rust

Frontend

HTML5 CSS3 JavaScript TypeScript

Scripting

Python PowerShell

Build Tools

Gradle Maven

Frameworks, Platforms and Libraries

Spring Apache Kafka Bootstrap Electron.js Expo Express.js JWT NPM Next JS NodeJS OpenGL React React Native React Hook Form Socket.io TailwindCSS Webpack Yarn

Databases

Postgres Redis

Hosting/SaaS

AWS EC2 ECS CloudWatch S3

Servers

Apache Tomcat

IDEs/Editors

Android Studio Eclipse IntelliJ IDEA Notepad++ Visual Studio Code

Source Control

Git GitHub GitLab


Currently Learning

Frontend

WebAssembly AssemblyScript

Backend

C++ Haskell

Scripting

Lua

Frameworks, Platforms and Libraries

Vite Tauri


Want to Learn

Backend

C# Elixir Go

Interop

GraphQL

Frameworks, Platforms and Libraries

.Net Angular Django Laravel Redux Vulkan

Databases

ApacheCassandra

Hosting/SaaS

Azure Google Cloud Firebase Vercel

Servers

Nginx

ML/DL

TensorFlow

ccake's People

Contributors

aburd avatar bvanseg avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

aburd

ccake's Issues

Custom Commands

Is your feature request related to a problem? Please describe.
CCake's existing function set is sound enough to be able to build a simple C/C++ project, but when it comes to more complex projects that may have more needs, CCake's existing set of commands is not sufficient to complete complex tasks.

Describe the solution you'd like
To allow for more complex projects, CCake can greatly benefit from custom commands that can be executed through a new command, such that the cli input looks like the following: ccake run <custom-command-name>.

These custom commands would be defined in the ccake.toml file like so:

[commands]
clean-build = "ccake build --clean"
install-build = "ccake install && ccake build"
# python and shell scripts should also be valid, not just ccake commands :)

Describe alternatives you've considered
N/A.

Additional context
N/A.

Multi-version support of packages

Is your feature request related to a problem? Please describe.
Currently, CCake supports installing a single toolchain such as MinGW in a global scope (within a .ccake file in the user's home dir). While this is convenient, it will become a hassle if some project A needs version X of the same toolchain that also happens to be used in another project B as version Y.

Describe the solution you'd like
To avoid duplicate dependencies across multiple projects, packages should still be maintained globally, but different versions should be maintained under the same tool/lib name. Projects should contain a dependencies section where dependency identifiers (keys) along with their versions (values) can be specified. Ultimately in the CLI this would look like ccake install mingw@version where version is some version identifier specific to the tool or library. On the file system, mingw would be a folder within the .ccake/cache folder which contains folder names matching the version (Ex. .ccake/cache/mingw/x.y.z).

Describe alternatives you've considered
N/A.

Additional context
The prescribed design is similar to Gradle. However, this design can lead to bit rot, where unused dependencies in the global scope are no longer used, but still sit on the file system taking up unnecessary space. To help prevent this, CCake could potentially keep track of where dependencies are used in what projects. If a dependency no longer has references to any projects on the file system, it could be safely cleaned up with a ccake clean command.

Search for and use native toolchains before installing

Is your feature request related to a problem? Please describe.
Currently, ccake install will pull a download script and attempt to install the target tool/lib without any questions. The problem with this is that when used for toolchains, the toolchain may already be located on the user's system somewhere. If the versions of the ccake install target and the native toolchain match up, then the native toolchain should be preferred instead of needlessly redownloading it to .ccake/cache.

Describe the solution you'd like
Search the user's system for the native toolchain and use that toolchain instead of redownloading it. If a user is trying to use gcc for example, but gcc is already present, the native gcc should be preferred only if its versioning is greater or equal to the current install target.

Describe alternatives you've considered
N/A

Additional context
N/A

Use standard log crate

Is your feature request related to a problem? Please describe.

Consider using a community standard logging facade: https://crates.io/crates/log
Rather than the implementation we have src/terminal/ansi.rs

Describe the solution you'd like

  • A logging solution which is accessible
    • Everything uses this and changing the log level will be helpful for any dependency troubleshooting

Describe alternatives you've considered
None as of now

Additional context
Add any other context or screenshots about the feature request here.

Install script aliasing

Is your feature request related to a problem? Please describe.
If a user wants to install gcc on Windows, they currently have to run ccake install mingw. There are a couple problems with this. MinGW will not be necessary on linux machines, as gcc should be the native toolchain. A linux user should therefore not be expected to run ccake install mingw, but ccake install gcc instead. Ideally, both windows and linux users should have to type the same thing, which should be ccake install gcc.

Describe the solution you'd like
If a Windows user types ccake install gcc, CCake should really treat the identifier gcc as mingw, but only on Windows.

Describe alternatives you've considered
N/A

Additional context
N/A

Default behavior with no arguments passed

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

ccake doesn't do anything by default when you call it with no args (e.g. ccake)

Describe the solution you'd like
A clear and concise description of what you want to happen.

I would like some direction from the tool. Most tools will print a message saying what you did wrong or a help message.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

I haven't considered any at this time. I suppose even a non-zero exit code would be helpful feedback.

Additional context
Add any other context or screenshots about the feature request here.

Verify that a tool/lib is already installed before attempting to install

Is your feature request related to a problem? Please describe.
Currently, install scripts will run with no problem, even if the installed tool/library is already present. This ideally shouldn't happen.

Describe the solution you'd like
Within the ccake install command logic, verify that the target tool/lib is already present on the system before attempting to download. If the user really wants to redownload the package, they should be allowed to with a --force/-f flag (Ex. ccake install mingw --force or ccake install mingw -f).

Describe alternatives you've considered
N/A

Additional context
N/A

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.