I'm modifying an automated build, and want to tell rpmbuild
to use a specific build area when invoking it.
This is similar to an existing question, but more specific.
I don't want to run any of the build commands as the root user; the aim is only to have an RPM, not to install anything into the system.
I don't want to require the user to change their dotfiles (e.g. $HOME/.rpmrc
); the build should be self-contained and not affect the user's existing settings.
I don't want to hard-code the location into the foo.spec
file; that file should be useable as-is if the user wants to build in a different location.
The --buildroot
option is not what I need; that sets a pseudo-root filesystem for the make
part of the build process, but I need to specify the “build area” for the entire RPM build process.
What I'm looking for is a hypothetical --build-area FOODIR
option that can be given to the rpmbuild
command, or an equivalent environment variable. It should thus affect just that single invocation of the command and cause it to use a specified user-writable location for its build area.
I've seen references to a _topdir
macro that seems to be what I'm talking about, but it doesn't appear to be configurable per invocation.
It would be ideal if rpmbuild
could set up its own environment in that location when it needs it, but I don't mind setting up the directories for that per build, since that can be automated as part of the build. The goal is to have that user-writable location exist only for the duration of the build run, and then clean up by deleting that entire location once the RPM file is generated.
It's not documented, but the _topdir
macro determines the build area.
So you can set this per-invocation with rpmbuild --define "_topdir ${PWD}/foobar" ...
to set the directory to whatever you want.
--define
is the key to setting values for any macro, not just _topdir.