Distributing executables with homebrew

57 views
Skip to first unread message

James Geddes

unread,
Jun 7, 2019, 4:59:21 AM6/7/19
to Racket Users
Dear All,

Does anyone have experience sharing a Racket program using homebrew, for users who may or may not have the Racket distribution installed? (Homebrew is a popular package management system for the Mac.)

In particular, I'd like to ensure that a certain Racket package (gregor) is available but without necessarily changing the user's installation of Racket if they already have one.

(It doesn’t help that I have very little experience in distributing any kind of program with homebrew.)

If anyone has a homebrew “formula” that you would be willing to share, I’d greatly appreciate taking a look!

Many thanks,

James



Joel Dueck

unread,
Jun 9, 2019, 4:00:28 PM6/9/19
to Racket Users
I’m no expert, but since no one else has chimed in: if you’re distributing a program (vs a library) and you want it to work regardless of whether Racket is installed, what you probably want is to compile your program using raco distribute (https://docs.racket-lang.org/raco/exe-dist.html). Then distribute the resulting binary. This will be faster for your users.

I haven’t done much with Homebrew, but maybe this would be a good place to start: http://octavore.com/posts/2016/02/15/distributing-go-apps-os-x 

James Geddes

unread,
Jun 10, 2019, 5:58:12 AM6/10/19
to Joel Dueck, Racket Users
Many thanks Joel,

I do agree that `raco distribute` seems the way to go. Indeed, the setup described in the blog post you shared is just what I’m currently doings (so it’s nice to know I’m not doing something too crazy!).

What gave me pause, however, was that homebrew seems to discourage binary-only packages. You /can/ distribute a pre-built binary — as a “bottle” — but the process to create a bottle requires one to have a distributable source-code version first. (There are also “casks” for pre-built binaries but these seem to be specifically designed for MacOS GUI binaries, whereas I have a command-line utility.) So I feel I ought to follow that practice.

And I am also unsure about whether Racket modules written for an application "should be" distributed as a Racket package. Given how much of the Racket tooling is around packages (scribble, dependencies), I would have thought all of it. So one approach to building an executable might to be to set the collections directory to somewhere local (I’m assuming this is doable), then `raco pkg install my-app`, followed by compilation of the main module. But then, as far as I can tell, one can’t `raco exe` a library module, only a file. So I’m a bit stuck there, too.

These are rather incoherent thoughts to which I don’t except an answer. But I will continue to try to figure out a sensible approach and report back if anyone else is interested.


James
> --
> You received this message because you are subscribed to the Google Groups "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to racket-users...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/06889ecc-cf38-4037-9678-413169c8d5e2%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

James Platt

unread,
Jun 10, 2019, 12:02:28 PM6/10/19
to Racket Users
Another consideration with Homebrew is how far back you want to go with OS support. They recently ended support for macOS 10.11 "El Capitan". In fact, it's the very first thing which has become an issue for me still running El Capitan. I don't know exactly how far back you can support with Racket but it's farther than that.
> To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/602099D3-2101-4C4B-9B05-413E291630FA%40gmail.com.
Reply all
Reply to author
Forward
0 new messages