;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2024 Ashvith Shetty ;;; Copyright © 2024 Adam Faiz ;;; ;;; This file is part of GNU Guix. ;;; ;;; GNU Guix is free software; you can redistribute it and/or modify it ;;; under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 3 of the License, or (at ;;; your option) any later version. ;;; ;;; GNU Guix is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Guix. If not, see . (define-module (gnu packages c3) #:use-module (gnu packages compression) #:use-module (gnu packages libffi) #:use-module (gnu packages llvm) #:use-module (gnu packages python) #:use-module (guix build-system cmake) #:use-module (guix gexp) #:use-module (guix git-download) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module (guix utils)) (define-public c3c-bootstrap (package (name "c3c") (version "0.6.1") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/c3lang/c3c") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0xjl3yghyqmqv9118nhcix3xywlpdirqc0dlmdaghdkja0wr19rw")) (modules '((guix build utils))) (snippet #~(begin ;; Unbundle miniz. (delete-file-recursively "dependencies") ;; Swap out miniz for zlib. (substitute* "CMakeLists.txt" (("add_library\\(miniz.*\\)\n$") "find_package(ZLIB REQUIRED)\n") (("target_include_directories\\(miniz PUBLIC") "") (("...*/dependencies/miniz/..") "") (("miniz") "z")) (substitute* "src/utils/unzipper.c" (("miniz\\.h") "zlib.h")))))) (build-system cmake-build-system) (arguments (list #:configure-flags #~(list "-DCMAKE_INSTALL_LIBDIR=lib") #:phases #~(modify-phases %standard-phases (add-before 'configure 'fix-build (lambda _ (substitute* "CMakeLists.txt" (("\\$\\{LLVM_LIBRARY_DIRS\\}") (string-append #$lld-18 "/lib/ " #$llvm-18 "/lib/"))) (substitute* '("src/compiler/target.c" "src/compiler/linker.c") (("\"cc\"") (string-append "\"" #$(cc-for-target) "\""))) (substitute* "resources/testproject/project.json" (("\"cc\" : \"cc\",") "")))) (replace 'check (lambda* (#:key tests? #:allow-other-keys) (when tests? (with-directory-excursion "../source/resources/testproject" (invoke "../../../build/c3c" "build")) (invoke "python3" "../source/test/src/tester.py" "./c3c" "../source/test/test_suite") (invoke "./c3c" "compile-test" "../source/test/unit"))))))) (native-inputs (list python)) (inputs (list libffi lld-18 llvm-18 zlib)) (synopsis "Compiler for the C3 language") (description "C3 is a programming language that builds on the syntax and semantics of the C language, with the goal of evolving it while still retaining familiarity for C programmers.") (home-page "https://c3-lang.org/") (supported-systems '("x86_64-linux" "aarch64-linux" "riscv64-linux")) (license (list license:lgpl3 license:expat))))