On 06/21/2012 02:59 PM, Akim Demaille wrote:
>
> Le 21 juin 2012 à 12:32, Stefano Lattarini a écrit :
>
>> Do that only if some source file is actually present in the current
>> directory (which might not be the case for, say, projects that use
>> a non-recursive make setup and have all sources in the 'src' and 'lib'
>> subdirectories).
>>
>> * lib/am/compile.am (am__mostlyclean_files): Don't append '*.$(OBJEXT)'
>> unconditionally.
>> * lib/am/libtool.am (am__mostlyclean_files): Don't append '*.lo'
>> unconditionally.
>> * automake.in (handle_single_transform): Update '%compile_clean_files'
>> also for sources in the current directory. Some related adjustments.
>> Remove obsolete comments while we are at it.
>> (handle_LIBOBJS_or_ALLOCA): Update '%compile_clean_files' to list
>> all the object files in the directory of the extra sources brought
>> in. Adjust comments accordingly.
>>
>> Signed-off-by: Stefano Lattarini <[email protected]>
>> ---
>> automake.in | 71
>> ++++++++++++++++++++++-------------------------------
>> lib/am/compile.am | 2 +-
>> lib/am/libtool.am | 1 -
>> 3 files changed, 30 insertions(+), 44 deletions(-)
>>
>> diff --git a/automake.in b/automake.in
>> index 324553a..dd9cb25 100644
>> --- a/automake.in
>> +++ b/automake.in
>> @@ -1838,43 +1838,34 @@ sub handle_single_transform ($$$$$%)
>> $linkers_used{$linker} = 1;
>>
>> push (@result, $object);
>> + $directory = '.' if $directory eq '';
>>
>> if (! defined $object_map{$object})
>> - {
>> + {
>> $object_map{$object} = $full;
>>
>> - # If resulting object is in subdir, we need to make
>> - # sure the subdir exists at build time.
>> - if ($object =~ /\//)
>> - {
>> - # FIXME: check that $DIRECTORY is somewhere in the
>> - # project
>> -
>> - # For Java, the way we're handling it right now, a
>> - # '..' component doesn't make sense.
>> - if ($lang && $lang->name eq 'java' && $object =~ /(\/|^)\.\.\//)
>> - {
>> - err_am "'$full' should not contain a '..' component";
>> - }
>> -
>> - # Make sure *all* objects files in the subdirectory are
>> - # removed by "make mostlyclean". Not only this is more
>> - # efficient than listing the object files to be removed
>> - # individually (which would cause an 'rm' invocation for
>> - # each of them -- very inefficient, see bug#10697), it
>> - # would also leave stale object files in the subdirectory
>> - # whenever a source file there is removed or renamed.
>> - $compile_clean_files{"$directory/*.\$(OBJEXT)"} =
>> MOSTLY_CLEAN;
>> - if ($object =~ /\.lo$/)
>> - {
>> - # If we have a libtool object, then we also must remove
>> - # any '.lo' objects in its same subdirectory.
>> - $compile_clean_files{"$directory/*.lo"} = MOSTLY_CLEAN;
>> - # Remember to cleanup .libs/ in this directory.
>> - $libtool_clean_directories{$directory} = 1;
>> - }
>> - }
>> - }
>> + # For Java, the way we're handling it right now, a
>> + # '..' component doesn't make sense.
>> + err_am "'$full' should not contain a '..' component"
>> + if $lang && $lang->name eq 'java' && $object =~ m{(/|^)\.\./};
>> +
>> + # Make sure *all* objects files in this object's subdirectory
>
> object files
>
Oops, fixed.
>> + # are removed by "make mostlyclean". Not only this is more
>> + # efficient than listing the object files to be removed
>> + # individually (which would cause an 'rm' invocation for each
>> + # of them -- very inefficient, see bug#10697), it would also
>> + # leave stale object files in the subdirectory whenever a
>> + # source file there is removed or renamed.
>> + $compile_clean_files{"$directory/*.\$(OBJEXT)"} = MOSTLY_CLEAN;
>> + if ($object =~ /\.lo$/)
>> + {
>> + # If we have a libtool object, then we also must remove
>> + # any '.lo' objects in its same subdirectory.
>
> either "its directory" or "the same directory"
>
Right. I want for "the same subdirectory".
>> + $compile_clean_files{"$directory/*.lo"} = MOSTLY_CLEAN;
>> + # Remember to cleanup .libs/ in this directory.
>> + $libtool_clean_directories{$directory} = 1;
>
> Can't libtool's stuff be regular %clean_dirs?
>
Probably yes, but the patch series had become long enough already IMHO ;-)
But I can easily tack up a couple of patches for that; stay tuned ...
> Nice.
>
Thanks,
Stefano