Package: guix-patches;
Reported by: Ashvith Shetty <ashvithshetty10 <at> gmail.com>
Date: Tue, 6 Aug 2024 11:03:01 UTC
Severity: normal
Tags: patch
View this message in rfc822 format
From: Ashvith Shetty <ashvithshetty0010 <at> zohomail.in> To: "72494" <72494 <at> debbugs.gnu.org> Cc: Simon Tournier <zimon.toutoune <at> gmail.com>, Mathieu Othacehe <othacehe <at> gnu.org>, "Ludovic Courtès" <ludo <at> gnu.org>, Tobias Geerinckx-Rice <me <at> tobias.gr>, jgart <jgart <at> dismail.de>, Christopher Baines <guix <at> cbaines.net> Subject: [bug#72494] Help with packaging c3c-lang Date: Thu, 06 Mar 2025 13:52:20 +0530
Hello, This is my second attempt at packaging c3-lang (https://github.com/c3lang/c3c). I am planning to refer zig to build all the way from 0.5.1 to the lastest version. In the earlier patches, miniz was unbundled and replaced with the input-provided zlib - however, this time was able to make it work with the input-provided miniz (patch not provided). 1) In the earlier patch I have worked on, I just noticed that I had to substitute ${LLVM_LIBRARY_DIRS}: --8<---------------cut here---------------start------------->8--- + (snippet #~(begin + (use-modules (guix build utils)) + (substitute* "CMakeLists.txt" + (("\\$\\{LLVM_LIBRARY_DIRS\\}") + (string-append #$lld-18 "/lib/ " + #$llvm-18 "/lib/"))))))) --8<---------------cut here---------------start------------->8--- However, this seems to me like an improper way to deal with it. I have a limited understanding of CMake, so please bear with me: Variable ${LLVM_LIBRARY_DIRS} (which I am assuming is a combination of variables including, but not limited to ${LLVM_DIR} and ${LLD_DIR}) seems to include only /gnu/store/z0abzsad781af8qp2wzqq8icwwyxb4ms-llvm-18.1.8/lib/ (${LLVM_DIR}?), but not /gnu/store/62jn91571kx31hqza7c9jzsc3sinkxjr-lld-18.1.8/lib/ (${LLD_DIR}?). When I try printing ${LLD_DIR} in CMakeLists.txt (patch not provided), it appears to be an empty string. Is there anything wrong with the way CMake is configured in c3c? 2) c3c assumes that there exists a compiler or an alias `cc`, but there isn't any such variable in Guix (at least to my knowledge). How do I deal with this issue? Because if not resolved, it also causes the tests to fail. Do I patch cc to gcc/clang/#$(cc-for-target)? --8<---------------cut here---------------start------------->8--- + (substitute* '("src/compiler/target.c" + "src/compiler/linker.c") + (("\"cc\"") (string-append "\"" #$(cc-for-target) "\""))) + (substitute* "resources/testproject/project.json" + (("\"cc\" : \"cc\",") "")))) --8<---------------cut here---------------start------------->8--- Or is there a better way to deal with this? By the way, commit 297a6c9 (https://github.com/c3lang/c3c/commit/297a6c93481e2f3b62bf0250750e20549108129d) in v0.6.3 includes support for C3C_LIB and C3C_CC - can this be re-used for earlier patches? 3) Tests in C3C don't run (or maybe I am doing something wrong), so I had to add this instead (this is specific to v0.6.1): --8<---------------cut here---------------start------------->8--- (replace 'check (lambda* (#:key tests? #:allow-other-keys) (when tests? ;; Compile and run some examples (display "# Compile and run some examples #\n") (with-directory-excursion "../source/resources" (for-each (lambda (file) (invoke "../../build/c3c" "compile" file)) '("examples/base64.c3" "examples/binarydigits.c3" "examples/brainfk.c3" "examples/factorial_macro.c3" "examples/fasta.c3" "examples/gameoflife.c3" "examples/hash.c3" "examples/levenshtein.c3" "examples/load_world.c3" "examples/map.c3" "examples/mandelbrot.c3" "examples/plus_minus.c3" "examples/nbodies.c3" "examples/spectralnorm.c3" "examples/swap.c3" "examples/contextfree/boolerr.c3" "examples/contextfree/dynscope.c3" "examples/contextfree/guess_number.c3" "examples/contextfree/multi.c3" "examples/contextfree/cleanup.c3")) (for-each (lambda (file) (invoke "../../build/c3c" "compile-run" file)) '("examples/hello_world_many.c3" "examples/time.c3" "examples/fannkuch-redux.c3" "examples/contextfree/boolerr.c3" "examples/load_world.c3" "examples/process.c3" "examples/ls.c3" "linux_stack.c3")) (invoke "../../build/c3c" "compile-run" "--linker=builtin" "linux_stack.c3")) ;; Compile run unit tests (display "# Compile run unit tests #\n") (invoke "./c3c" "compile-test" "../source/test/unit") (with-directory-excursion "../source/resources/testproject" ;; Build testproject (display "# Build testproject #\n") (invoke "../../../build/c3c" "build" "--debug-log") ;; Build testproject direct linker (display "# Build testproject direct linker #\n") (invoke "../../../build/c3c" "build" "--debug-log" "--linker=builtin")) ;; Run compiler tests (display "# Run compiler tests #\n") (invoke "python3" "../source/test/src/tester.py" "./c3c" "../source/test/test_suite"))))))) --8<---------------cut here---------------start------------->8--- These tests come from `.github/workflows/main.yml`. I feel like there has to be a better way to do this. Regards, Ashvith
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.