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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions