Skip to content

Trying to fix cmake warning ADD_CUSTOM_COMMAND() for tau #170

@gilcel

Description

@gilcel

I'm trying to fix the following warnings for all the ADD_CUSTOM_COMMAND() of lib tau when using cmake >= 3.5

CMake Warning (dev) at src/base/common/libs/3rd-party/tau/data/CMakeLists.txt:106 (ADD_CUSTOM_COMMAND):
  The following keywords are not supported when using
  add_custom_command(TARGET): DEPENDS, OUTPUTS.
  Policy CMP0175 is not set: add_custom_command() rejects invalid arguments.
  ...
CMake Warning (dev) at src/base/common/libs/3rd-party/tau/data/CMakeLists.txt:106 (ADD_CUSTOM_COMMAND):
  Exactly one of PRE_BUILD, PRE_LINK, or POST_BUILD must be given.  Assuming
  POST_BUILD to preserve backward compatibility.
  Policy CMP0175 is not set: add_custom_command() rejects invalid arguments.
  Run "cmake --help-policy CMP0175" for policy details.  Use the cmake_policy
  command to set the policy and suppress this warning.
This warning is for project developers.  Use -Wno-dev to suppress it.

Here from src/base/common/libs/3rd-party/tau/data/CMakeLists.txt, current code for target iasp91:

 ADD_CUSTOM_COMMAND(
           COMMAND ${TAU_COMMAND_PREFIX}tau_remodl iasp91 ${CMAKE_CURRENT_SOURCE_DIR}
           DEPENDS tau_remodl
       	  OUTPUTS remodl.tbl remodl.hed
     	  TARGET  TTT_iasp91
)

This fix works by simply using OUTPUT and removing TARGET:

# for iasp91
ADD_CUSTOM_COMMAND(
            COMMAND ${TAU_COMMAND_PREFIX}tau_remodl iasp91 ${CMAKE_CURRENT_SOURCE_DIR}
            DEPENDS tau_remodl
            OUTPUT remodl.tbl remodl.hed
)

But later in the code for target ak135 it also uses OUTPUT remodl.tbl remodl.hed which recent cmake version doesn't allow

CMake Error at src/base/common/libs/3rd-party/tau/data/CMakeLists.txt:100 (ADD_CUSTOM_COMMAND):
  Attempt to add a custom rule to output src/base/common/libs/3rd-party/tau/data/remodl.tbl.rule
  which already has a custom rule.

Suggestion: the easist way would be to generate different / unique output filenames (remodl_iasp91.tbl, remodl_ak135.tbl) and change the source files which uses these new output files accordingly, to avoid conflicts.

Something like:

# For iasp91
ADD_CUSTOM_COMMAND(
    COMMAND ${TAU_COMMAND_PREFIX}tau_remodl iasp91 ${CMAKE_CURRENT_SOURCE_DIR}
    DEPENDS tau_remodl
    OUTPUT remodl_iasp91.tbl remodl_iasp91.hed
)

ADD_CUSTOM_COMMAND(
    OUTPUT iasp91.tbl iasp91.hed
    COMMAND ${TAU_COMMAND_PREFIX}tau_setbrn iasp91
    DEPENDS tau_setbrn remodl_iasp91.tbl remodl_iasp91.hed
)

# For ak135
ADD_CUSTOM_COMMAND(
    COMMAND ${TAU_COMMAND_PREFIX}tau_remodl ak135 ${CMAKE_CURRENT_SOURCE_DIR}
    DEPENDS tau_remodl
    OUTPUT remodl_ak135.tbl remodl_ak135.hed
)

ADD_CUSTOM_COMMAND(
    OUTPUT ak135.tbl ak135.hed
    COMMAND ${TAU_COMMAND_PREFIX}tau_setbrn ak135
    DEPENDS tau_setbrn remodl_ak135.tbl remodl_ak135.hed
)

# Custom target
ADD_CUSTOM_TARGET(
    TTTData
    DEPENDS tau_remodl tau_setbrn
)
ADD_DEPENDENCIES(TTT_iasp91 TTTData)
ADD_DEPENDENCIES(TTT_ak135 TTTData)

Also the line with IF(NOT CMAKE_HOST_ARCHITECTURE) contains CMAKE_HOST_ARCHITECTURE which doesn't exist, but something close would be maybe CMAKE_OSX_ARCHITECTURES, check here: https://cmake.org/cmake/help/latest/variable/CMAKE_OSX_ARCHITECTURES.html

Good or bad idea / suggestion ?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions