escaping '%' in a file name.
Panu Matilainen
pmatilai at laiskiainen.org
Tue May 29 07:26:22 UTC 2012
On 05/29/2012 04:30 AM, Jordan Sissel wrote:
> On Mon, May 28, 2012 at 6:29 PM, Jordan Sissel<jls at semicomplete.com> wrote:
>
>> Howdy folks!
>>
>> I'm mostly noting this here for posterity.
>>
>> I'm trying to package software that has files with '%' in the names. I
>> tried a few things, but nothing worked. Googling found only this thread
>> from 2003 which indicated that "%%" "should" work but it does not (thread;
>> ://tech.groups.yahoo.com/group/rpm-list/message/21824<http://tech.groups.yahoo.com/group/rpm-list/message/21824>
>> )
>>
>> If my %files section is follows, for testing all possible permutations ;)
>>
>> %files
>> /example/%name
>> /example/%%name
>> /example/%%%name
>> /example/%%%%name
>> /example/%{%}name
>> /example/\%name
>>
>> The error with rpmbuild is:
>>
>> RPM build errors:
>> File not found:
>> /tmp/package-rpm-build20120528-31204-qsgxuu/BUILD/example/helloworld
>> File not found:
>> /tmp/package-rpm-build20120528-31204-qsgxuu/BUILD/example/helloworld
>> File not found:
>> /tmp/package-rpm-build20120528-31204-qsgxuu/BUILD/example/%helloworld
>> File not found:
>> /tmp/package-rpm-build20120528-31204-qsgxuu/BUILD/example/helloworld
>> File not found:
>> /tmp/package-rpm-build20120528-31204-qsgxuu/BUILD/example/%{%}name
>> File not found:
>> /tmp/package-rpm-build20120528-31204-qsgxuu/BUILD/example/\helloworld
>>
>> Judging from the above, it appears the correct way to escape a single % in
>> a filename is to use '%%%'
>>
>> -Jordan
>>
>
> Replying to my own nonsense.
>
> I misread the output. None of my attempted escapes actually worked.
>
> Any ideas?
The answer is that it depends. Double-escape, eg '%%foo' works... except
when %foo is actually a defined macro. And when such a macro is defined,
no amount of extra %'s appears to help as items in the %files list gets
macro-expanded more than once and escapes get lost somewhere in the
process (and yeah it does smell like a bug someplace)
So eg this works for packaging file named '/%fame':
%install
touch ${RPM_BUILD_ROOT}/%%fame
%files
/%%fame
...but for packaging a file named '/%name' this doesn't:
%install
touch ${RPM_BUILD_ROOT}/%%name
%files
/%%name
A simple way around it is using '?' wildcard in place of '%', eg this
works for packaging that pesky '/%name' file, is probably more readable
than some magic incantation of exactly 7 and half %'s and three \
escapes :) and should work for pretty much any rpm version out there:
%install
touch ${RPM_BUILD_ROOT}/%%name
%files
/?name
- Panu -
More information about the Rpm-list
mailing list