Hi! >>>>> "Niels" == Niels Thykier <ni...@thykier.net> writes:
Niels> On Mon, 23 Jun 2003 09:59:52 -0400 Joe Nahmias <j...@nahmias.net> wrote: Now, this is quite an ancient issue! :D >> dh_install has problems handling files listed in debian/pkgname.install >> when the filename contains (an) embedded space(s). For example, when >> debian/fceu-doc.install contains the line: >> >> Documentation/tech/ppu/2C02\ technical\ operation.TXT usr/share/doc/fceu-doc/tech/ >> >> the following results: >> >> dh_install >> cp: cannot stat `./Documentation/tech/ppu/2C02\\': No such file or directory >> dh_install: command returned error code 256 >> make: *** [install] Error 1 Niels> A couple of points/ideas: Niels> * dh-exec and debhelper should /preferably/ agree on users write their Niels> spaces to be preserved (so the interface is the same for users with Niels> and without dh-exec). Agreed. I'll see if there are any parts of dh-exec that need to handle spaces better. My gut feeling is, that apart from dh-exec-install-rename, there aren't any. Niels> * The internal communication between dh-exec and debhelper does not Niels> have to be the same as the input format. Especially not if it would Niels> save you trouble of having to do complex "decode and recode" cycles Right now, dh-exec just preprocesses the file, there is no special communication protocol, and for the sake of simplicity, I'd prefer if this stayed that way. Otherwise I'd have to rewrite most of it. That is, I'd like to keep the internal communication format the same as it is today, free of any special dh-exec <=> debhelper stuff. What dh-exec spits out in the end, should be treated as a traditional debhelper control file. If any other communication needs to be done (which would mostly mean debhelper telling dh-exec some more info), that should be in environment variables - just like it is now. Niels> As an example, dh-exec-install-rename would go from: Niels> if (/([^\s]*)\s+=>\s+([^\s]*)/ || /^=>\s+([^\s]*)/) { Niels> ... Niels> } Niels> ... Niels> $_ .= " " . $dstpath if ($append_destpath eq TRUE); Niels> To something like (untested): Niels> if (/([^\x1e]*)\x1e=>\x1e([^\x1e]*)/ || /^=>\x1e([^\x1e]*)/) { Niels> ... Niels> } Niels> ... Niels> $_ .= "\x1e" . $dstpath if ($append_destpath eq TRUE); Niels> (possible with /x and some inline spaces to make it more readable). Mmmm... I'd rather change the regexp to be a bit more lenient about spaces. It originally had (.*), and that was changed to disallowing spaces only to avoid being greedy and treat "foo => bar" as an instruction to rename "foo " to "bar". Instead, I could just use .*, and strip the spaces at the end, unless they are escaped. That is a lot less code for both dh-exec and debhelper: I only have to change dh-exec, and debhelper does not need any dh-exec-specific code. Niels> * avoid having to add (complex) decode+encode in all the Niels> scripts dh-exec does not need complex decode+encode steps. At least, not more than it already does have. It just adds some extra sugar on top of the debhelper-understood format, and writes out the same format users would write. I think this design is fine, and just this case alone is not a reason enough to change this. Niels> * put all the parsing of the user-formatted input in one place for Niels> dh-exec. This would be useful, if there were other places than -install-rename where this matters, but there isn't, and I don't really see this changing in the future. Niels> * put all compatibility handling with debhelper in one place Well, it's already in one place, pretty much, the only place that needs it. :) If there will be more places that need this special handling, I can still easily pull out the functions that do the decoding/encoding, without having to change debhelper itself. Niels> This still leaves the question of the input format. If you have any Niels> suggestions for that or alternatives, please let me know. :) My suggestion is: don't change the format. I'll make dh-exec handle spaces in the rename script. You only need to teach debhelper to handle the \-escaped spaces. The dh-exec part of this is about 10 lines plus tests, at a guess. Doing the \x1e separator thing would be considerably more, and as such, I'd opt for the easier solution. -- |8]