If a directory name with an RPM shell variable is used in "%setup -n" with "%files -f", then RPM won't find the file list. For example, if this %setup line is used: %setup -c -n $RPM_PACKAGE_NAME -T with this %files line (and macro definition): %define FILE_LIST rpmfiles.mft %files -f %{FILE_LIST} Then RPM will fail to find the %{FILE_LIST} file. If "$RPM_PACKAGE_NAME" is hard-coded to the actual package name in %setup, then RPM will function correctly. I will attach a SPEC file that may be used as a test case. Note that /usr/src/redhat/SOURCES/foo.txt will need to be touched before running it. I am using rpm-3.0.2-5.x (the rpm-3.x upgrade for Red Hat 5.x users) on Red Hat 5.2.
%define FILE_LIST rpmfiles.mft Name: setup-files-bug Summary: Demonstrates %setup -n/%files -f bug. Version: 1.0 Release: 1 Source0: foo.txt Group: Regression/Test BuildRoot: /var/tmp/%{name}-buildroot Copyright: GPL Prefix: /usr %description Demonstrates %setup -n/%files -f bug. %prep %setup -c -n $RPM_PACKAGE_NAME -T %build %install mkdir -p $RPM_BUILD_ROOT cp -p %{SOURCE0} $RPM_BUILD_ROOT/ cd $RPM_BUILD_ROOT find . -type f | sed -e 's,^\.,\%attr(-\,root\,root) ,' \ > $RPM_BUILD_DIR/$RPM_PACKAGE_NAME/%{FILE_LIST} %clean rm -rf $RPM_BUILD_ROOT %files -f %{FILE_LIST} %changelog * Wed Feb 16 2000 David Kilzer <ddkilzer> - Created spec file
See also comment from oliver.nz on 02/07/00 22:01 in bug 9091. http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=9091
The problem is in %setup -c -n $RPM_PACKAGE_NAME -T The macro %setup does not run in a shell context, so the name is taken literally as '$RPM_PACKAGE_NAME'. Use %{name} instead, as that is the macro from which RPM_PACKAGE_NAME is set.
Actually, %setup works fine (probably by accident) with -n $RPM_PACKAGE_NAME since the literal name is used later in a shell context. It is %files that gets tripped up later in the build process by doing this. It would be nice if this 'feature' were documented since it was a pain to track down, and it is not at all obvious to the casual SPEC file writer.
"Works fine" only if you like literally '$RPM_PACKAGE_NAME' as a file name. A spec file is not a shell script, even though sections like %prep of the spec file are shell scriptlets written in shell.
Commit pushed to master at https://github.com/openshift/origin https://github.com/openshift/origin/commit/222912269321e0a506452df54c37ac9664fc947f Merge pull request #9583 from rhcarvalho/issue9508-new-app-env Merged by openshift-bot