[CMake] CMake 2.8.8-rc1, Ninja generator, and clean target

Nicolas Desprès nicolas.despres at gmail.com
Fri May 18 12:41:17 EDT 2012


On Wed, May 16, 2012 at 11:54 PM, Peter Collingbourne <peter at pcc.me.uk> wrote:
> On Mon, Apr 02, 2012 at 02:21:10PM +0200, Nicolas Desprès wrote:
>> Hi,
>>
>> It looks like an issue in the generator. The symlink is created as a
>> side effect of a rule and not mentioned in the output files. That's
>> why it does not get removed. I have pushed a patch on my CMake's
>> github clone that should fix the issue without breaking cmake's test
>> suite. Although it seems to works for your case, I'm not sure it is
>> the right way to fix this issue. I think you should open a ticket on
>> the bug tracker.
>>
>> The branch: https://github.com/polrop/CMake/commits/ninja-clean-lib-symlink
>> The patch: https://github.com/polrop/CMake/commit/7d9c4bec56e8ec34ac715a4e4bda0f0f55002ef0
>>
>> Peter could you review it please?
>
> Apologies for the slow response.

No problem.

>
> Perhaps I am being over cautious, but should this conditional:
>
>  if (targetOutputReal == soName) {
>
> read:
>
>  if (targetOutput == soName || targetOutputReal == soName) {
>
> Otherwise, LGTM.

I think you are right according to:

int cmake::SymlinkLibrary(std::vector<std::string>& args)
{
  int result = 0;
  std::string realName = args[2];
  std::string soName = args[3];
  std::string name = args[4];
  if(soName != realName)
    {
    if(!cmake::SymlinkInternal(realName, soName))
      {
      cmSystemTools::ReportLastSystemError("cmake_symlink_library");
      result = 1;
      }
    }
  if(name != soName)
    {
    if(!cmake::SymlinkInternal(soName, name))
      {
      cmSystemTools::ReportLastSystemError("cmake_symlink_library");
      result = 1;
      }
    }
  return result;
}


I have amended the patch, rebased it on master and pushed it.

Thanks,
-Nico


More information about the CMake mailing list