Wow, thank you so much for figuring all of that out. I tried to make the changes you suggested, and I'm still running into errors, but I'm not sure I have the exact version of str that you do, so I imagine that is the reason. I was able to make a build with a different package ("vector") and it worked fine. Who would have guessed it was a package I was using?
I think I will talk to the str developers upstream and let them know ecl won't MAKE-BUILD with it. In the meantime, I may implement the functions I used from str myself, or embed a source code file from str with just the functions I need, depending on the license of str. Thank you very much for your help, Brandon Hale On 2/10/23 14:36, Daniel Kochmański wrote: > I think that you should not call quickload in the package file. ASDF should > solve depenencies based on a sole (ql:quickload 'cl-i3). > > I've tried to reproduce your issue and I've succeeded. After quick > investigation it seems that the system cl-str expects that its > source code will be available to asdf at any time (even after the > compilation). The offensive line is this: > > cl-str-20221106-git/str.lisp:144:(defvar +version+ (asdf:component-version > (asdf:find-system "str"))) > > Basically it is as if you were expecting that both make and linux source code > are both available at startup. > > If you replace this line to maintain some reasonable sanity it will look like > this: > (defvar +version+ #.(asdf:component-version (asdf:find-system "str"))) > > Another issue with this system is that it does not declare dependencies on > "uiop" and "asdf" despite using both. str.asd > should have > > :depends-on (:cl-ppcre > :cl-ppcre-unicode > :cl-change-case > "asdf" > "uiop") > > note the last two lines. With that the following builds and runs without a > hitch: > > brandon.asd: > (in-package #:asdf-user) > (asdf:defsystem "brandon" > :name "brandon" > :depends-on ("str") > :components ((:file "main"))) > > main.lisp: > (defpackage #:brandon > (:use #:cl)) > (in-package #:brandon) > > (defun main (str) > (format t "Hello ~a!~%" str)) > > build.lisp (not part of the system): > (in-package #:cl-user) > > ;;; Make the system recognizable by ASDF > (asdf:load-asd "brandon.asd") > > ;;; Pull dependencies and load macros > (asdf:load-system "brandon") > > ;;; Build the program (shared object) > (asdf:make-build "brandon" :type :program > :move-here "./brandon.out") > > (asdf:make-build "brandon" :type :program > :monolithic t > :move-here ".") > > ---- > > note that if you don't want repl then probably you want to add (progn (main > "HI") (ext:quit)) in the epilogue code. > > Best regards, > Daniel > > p.s if you feel like it you may make issues in cl-str repository bugtracker. > > -- > Daniel Kochmański ;; aka jackdaniel | Przemyśl, Poland > TurtleWare - Daniel Kochmański | > www.turtleware.eu[http://www.turtleware.eu] > > "Be the change that you wish to see in the world." - Mahatma Gandhi > > > ------- Original Message ------- > On Friday, February 10th, 2023 at 20:02, Brandon Hale > <bthaleproducti...@gmail.com> wrote: > >> Maybe I should get my project up in a repo, but it looks like I have the >> dependency listed. Here is my package's .asd named cl-i3.asd: >> >> (asdf:defsystem #:cl-i3 >> :name "cl-i3" >> :description "A replacement for i3status written in Common Lisp." >> :author "Brandon Hale <bthaleproducti...@gmail.com>" >> :license "GPLv3" >> :version "1.0" >> :depends-on (#:cl-ansi-text #:trivial-battery #:str) >> :components ((:file "main"))) >> >> And the top portion of my main.lisp: >> >> (ql:quickload :trivial-battery) >> (ql:quickload :str) >> ;; allows for colors to be printed >> (ql:quickload :cl-ansi-text) >> (defpackage :cl-i3 >> (:use #:common-lisp)) >> >> I am definitely not an expert on Common Lisp packages, but this does load up >> in slime on my machine when I do a >> >> (ql:quickload :cl-i3) >> >> with ecl 21.2.1-3 from Arch Linux. >> >> >> I need to look at the well-commented example again to see what I'm doing >> wrong methinks. >> >> Brandon Hale >> >> On 2/10/23 01:07, Daniel Kochmański wrote: >>> Hello Brandon, >>> >>> >>> ------- Original Message ------- >>> On Friday, February 10th, 2023 at 00:20, Brandon Hale >>> <bthaleproducti...@gmail.com> wrote: >>> >>> >>>> Hello all, >>>> >>>> I apologize if this is either the wrong place to get help with ecl, or if >>>> this is asked all of the time. >>> this is the right place, don't worry :) >>> >>> >>>> I've written a small replacement for i3status with common lisp and want to >>>> use ecl to make a binary so when i3wm loads, it just loads the cl-i3status >>>> binary. I've looked at the ecl documentation online and it suggests doing >>>> something like this: >>>> >>>> (ql:quickload :cl-i3) >>>> >>>> (asdf:make-build :cl-i3 >>>> >>>> :type :program >>>> >>>> :move-here #P"/home/brandon/Programming/lisp/cl-i3/" >>>> >>>> :prologue-code '(require 'asdf)) >>>> >>>> So, I run this and the binary appears. However, when I try to run it, I >>>> get this output: >>>> >>>> ;;; Loading #P"/usr/lib/ecl-21.2.1/asdf.fas" >>>> ;;; Computing Hangul syllable names >>>> Condition of type: MISSING-COMPONENT >>>> Component "str" not found >>>> >>>> Available restarts: >>>> >>>> 1. (RETRY) Retry ASDF operation. >>>> 2. (CLEAR-CONFIGURATION-AND-RETRY) Retry ASDF operation after resetting >>>> the configuration. >>>> >>>> Top level in: #<process TOP-LEVEL 0x557ade1c2f80>. >>>>> >>>> I imagine it is just because of my use of quicklisp packages, but how do I >>>> compile the packages into the binary? >>> this error message seems to suggest that you use a system "str" without >>> declaring it in dependencies. In your >>> project file my-project.asd add >>> >>> (defsystem "my-project" >>> ... >>> :depends-on (... "str") >>> ...) >>> >>> depending on what you want from your project you may not need (require >>> 'asdf) in the prologue code. Also you >>> may consider passing :monolithic t flag to make-build. >>> >>> Make sure that you study well-commented example in ecl source repository >>> under examples/asdf_with_dependence/. >>> >>> Last but not least make sure that you use the latest release (currently it >>> is 21.2.1) or a build from the branch >>> "develop" if you are not afraid of cutting your self on the bleeding edge >>> ;). >>> >>> If none of these advises helps then please try to minimize the test case to >>> the minimum (basically an asd system >>> with a singly stub file and all dependencies you need) and make an issue >>> ticket on gitlab >>> >>> https://gitlab.com/embeddable-common-lisp/ecl/-/issues >>> >>> mind that such action requires registration on the gitlab platform. >>> >>>> Thank you very much for any help you can offer, >>>> >>>> Brandon Hale >>> Best regards, >>> Daniel >>> >>> -- >>> Daniel Kochmański ;; aka jackdaniel | Przemyśl, Poland >>> TurtleWare - Daniel Kochmański | >>> www.turtleware.eu[http://www.turtleware.eu] >>> >>> "Be the change that you wish to see in the world." - Mahatma Gandhi >>> >