If condition inside the %Files section on a SPEC file

cjdcordeiro picture cjdcordeiro · Sep 9, 2013 · Viewed 19.1k times · Source

I'm kinda a new to writing spec files and building RPM's. Currently I have one RPM that is supposed to deploy some files in 1 of 2 possible directories that will vary with the OS.

How can I, within the %files section, verify them? I can't use variable...I can't verify both paths because one will for sure fail...I tried to define a macro earlier in the %install section but it will be defined just once and won't be redefined on every RPM installation...

what can I do here?

Thanks

Answer

dotbugfix picture dotbugfix · Jan 30, 2014

I had a similar situation where additional files were included in the RPM in case of a DEBUG build over and above all files in the RELEASE build.

The trick is to pass a list of files to %files alongwith a regular list of files below it:

%install
# Create a temporary file containing the list of files
EXTRA_FILES=$RPM_BUILD_ROOT/ExtraFiles.list
touch %{EXTRA_FILES}

# If building in DEBUG mode, then include additional test binaries in the package
%if %{build_mode} == "DEBUG"
# %{build_mode} is a variable that is passed to the spec file when invoked by the build script
# Like: rpmbuild --define "build_mode DEBUG"
echo path/to/file1 > %{EXTRA_FILES}
echo path/to/file2 >> %{EXTRA_FILES}
%endif

%files -f %{EXTRA_FILES}
path/to/release/file1
path/to/release/file2

In your case, you can leverage the %if conditional in the %install section, use the OS as a spec variable passed to rpmbuild (or detect it in the RPM spec itself) and then pass the file containing the list to %files