1# @HEADER
2# ************************************************************************
3#
4#            TriBITS: Tribal Build, Integrate, and Test System
5#                    Copyright 2013 Sandia Corporation
6#
7# Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
8# the U.S. Government retains certain rights in this software.
9#
10# Redistribution and use in source and binary forms, with or without
11# modification, are permitted provided that the following conditions are
12# met:
13#
14# 1. Redistributions of source code must retain the above copyright
15# notice, this list of conditions and the following disclaimer.
16#
17# 2. Redistributions in binary form must reproduce the above copyright
18# notice, this list of conditions and the following disclaimer in the
19# documentation and/or other materials provided with the distribution.
20#
21# 3. Neither the name of the Corporation nor the names of the
22# contributors may be used to endorse or promote products derived from
23# this software without specific prior written permission.
24#
25# THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36#
37# ************************************************************************
38# @HEADER
39
40INCLUDE(CMakeParseArguments)
41INCLUDE(PrintNonemptyVar)
42
43#
44# Finds the absolute path for a program given optionally just the program name
45#
46#  Input keyword arguments:
47#
48#    NAMES name1 name2 ...
49#     List of default names that will be search
50#
51#    PATHS path1 path2 ...
52#      List of paths
53#
54#    DOC docStr
55#      Documentation string
56#
57
58FUNCTION(FIND_PROGRAM_PLUS PROG_VAR)
59
60  CMAKE_PARSE_ARGUMENTS(
61    #prefix
62    PARSE
63    #options
64    ""
65    #one_value_keywords
66    ""
67    #multi_value_keywords
68    "NAMES;PATHS;DOC"
69    ${ARGN}
70    )
71
72  TRIBITS_CHECK_FOR_UNPARSED_ARGUMENTS()
73
74  PRINT_NONEMPTY_VAR(${PROG_VAR})
75
76  IF (IS_ABSOLUTE ${PROG_VAR})
77    #MESSAGE(STATUS "Is Absoute")
78    SET(NAMES_ARGS ${PARSE_NAMES})
79  ELSE()
80    #MESSAGE(STATUS "Is Not Absolute")
81    SET(NAMES_ARGS ${${PROG_VAR}} ${PARSE_NAMES})
82    SET(${PROG_VAR} "${PROG_VAR}-NOTFOUND" CACHE FILEPATH "" FORCE)
83  ENDIF()
84  #PRINT_VAR(NAMES_ARGS)
85
86  SET(DOC "${PARSE_DOC}  Can be full path or just exec name.")
87
88  # Look for program in given paths first!
89  FIND_PROGRAM( ${PROG_VAR}
90    NAMES ${NAMES_ARGS}
91    PATHS ${PARSE_PATHS}
92    DOC ${DOC}
93    NO_DEFAULT_PATH
94    )
95  FIND_PROGRAM( ${PROG_VAR}
96    NAMES ${NAMES_ARGS}
97    DOC ${DOC}
98    )
99  MARK_AS_ADVANCED(${PROG_VAR})
100
101  PRINT_NONEMPTY_VAR(${PROG_VAR})
102
103ENDFUNCTION()
104