explicit variants revisited

108 views
Skip to first unread message

Mike Shal

unread,
May 1, 2021, 2:07:51 PM5/1/21
to tup-...@googlegroups.com
Hi all,

A while back (2015!) the explicit-variant branch was published to test moving away from the model of variants using the FUSE filesystem overlay, to one where your Tupfiles need to be aware of variants in order to use them. Although it requires a bit more work to use variants in your project, it has several benefits:


2) Paths stored in generated files with overlay variants can break external tools (eg: https://github.com/gittup/tup/issues/229). With explicit variants, tup isn't lying to other tools about paths.

The main downside is that your Tupfiles may need to be updated to be aware of variants. With overlay variants, this was mostly transparent (outside of !tup_preserve), but with explicit variants, you may need to point things to the build directory, which is referenced by $(TUP_VARIANTDIR).

For example, generating a header file and including it in a C file like so:

: |> echo '#define FOO 3' > %o |> foo.h
: foreach *.c | foo.h |> gcc -c %f -o %o |> %B.o

would need to be updated to add -I$(TUP_VARIANTDIR) in order for gcc to find the generated header file:

: |> echo '#define FOO 3' > %o |> foo.h
: foreach *.c | foo.h |> gcc -I$(TUP_VARIANTDIR) -c %f -o %o |> %B.o

With explicit variants, the subprocess runs in the src directory, and %o is a relative path pointing to the build directory (something like ../build/src/foo.o)

I have an updated explicit-variant2 branch available: https://github.com/gittup/tup/tree/explicit-variant2

I'm planning to merge this in 2 weeks time. If you use variants in your project, any testing you could do before then would be appreciated. If you have difficulty figuring out how to update your Tupfiles, feel free to contact either the mailing list or me privately.

Since this is a breaking change, I will make one more v0.7.X release prior to merging. After the merge, the next release will be v0.8

Thanks for your patience!
-Mike

Mike Shal

unread,
May 17, 2021, 2:34:13 PM5/17/21
to tup-...@googlegroups.com
Explicit variants are now merged into master. If you are using variants in your project, I recommend sticking with v0.7.11 until you have some time to update your Tupfiles to be compatible with explicit variants. Write to the mailing list with a small example if you are having issues converting things.

If you aren't using variants, upgrading to the latest master branch is hopefully uneventful.

Thanks!
-Mike

Bitkicker

unread,
Mar 29, 2023, 11:02:20 PM3/29/23
to tup-users
Whatever happened to the explicit variants? The repo is still on v0.7.11.111 and not yet on v0.8, so I assume explicit variants are not merged yet?

Would explicit variants also help with creating a single build directory in the project root and putting the variants inside that directory? I'm not happy with the way tup clutters my project directory with directories for every build variant. I'm building for 10 different platforms and the number of output directories tup creates is really significant here. I would much rather have them all stuffed into a single build directory with respective variant directories in there.

Thanks for any hints,
-Guido
Reply all
Reply to author
Forward
0 new messages