File: FindMPE.cmake

package info (click to toggle)
paraview 5.1.2%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 221,108 kB
  • ctags: 236,092
  • sloc: cpp: 2,416,026; ansic: 190,891; python: 99,856; xml: 81,001; tcl: 46,915; yacc: 5,039; java: 4,413; perl: 3,108; sh: 1,974; lex: 1,926; f90: 748; asm: 471; pascal: 228; makefile: 198; objc: 83; fortran: 31
file content (153 lines) | stat: -rw-r--r-- 5,493 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# - Multi-Processing Environment (MPE) module.
#
# The Multi-Processing Environment (MPE) is an extention to MPI that
# provides programmers with a suite of performance analysis tools for
# their MPI programs.  These tools include a set of profiling libraries,
# a set of utility programs, and a set of graphical tools.  This module
# helps you find the libraries and includes.
#
# This module will set the following variables:
# MPE_FOUND             TRUE if we have found MPE
# MPE_LOG_COMPILE_FLAGS Compilation flags for MPI logging with MPE.
# MPE_LOG_INCLUDE_PATH  Include path(s) for MPI logging with MPE.
# MPE_LOG_LINK_FLAGS    Linking flags for MPI logging with MPE.
# MPE_LOG_LIBRARIES     Libraries to link against for MPI logging with MPE.
#
# This module will auto-detect these setting by looking for an MPE
# compiler (mpecc) and use the -show flag to retrieve compiler options.
#
# Note that this module does not attempt to ensure that the version
# of MPE you are using is compatible with the version of MPI that
# you are using (or even that you are using MPI at all).
#

## Copyright 2011 Sandia Coporation
## Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
## the U.S. Government retains certain rights in this software.
##
## This source code is released under the New BSD License.
#

find_program(MPE_COMPILER
  NAMES mpecc
  DOC "MPE compiler.  Used only to detect MPE compilation flags."
  )

if (MPE_LOG_INCLUDE_PATH AND MPE_LOG_LIBRARIES)
  # Do nothing: we already have the necessary options.
elseif (MPE_COMPILER)
  exec_program(${MPE_COMPILER}
    ARGS -show -mpilog
    OUTPUT_VARIABLE MPE_LOG_COMPILE_CMDLINE
    RETURN_VALUE MPE_LOG_COMPILE_RETURN
    )
  if (NOT MPE_LOG_COMPILE_RETURN EQUAL 0)
    message(STATUS, "Unable to determine MPE from MPE driver ${MPE_COMPILER}")
  endif (NOT MPE_LOG_COMPILE_RETURN EQUAL 0)
endif (MPE_LOG_INCLUDE_PATH AND MPE_LOG_LIBRARIES)

if (MPE_LOG_INCLUDE_PATH AND MPE_LOG_LIBRARIES)
elseif (MPE_LOG_COMPILE_CMDLINE)
  # Extract compile flags from the compile command line.
  string(REGEX MATCHALL "-D([^\" ]+|\"[^\"]+\")"
    MPE_ALL_COMPILE_FLAGS
    "${MPE_LOG_COMPILE_CMDLINE}")
  set(MPE_COMPILE_FLAGS_WORK)
  foreach(FLAG ${MPE_ALL_COMPILE_FLAGS})
    if (MPE_COMPILE_FLAGS_WORK)
      set(MPE_COMPILE_FLAGS_WORK "${MPE_COMPILE_FLAGS_WORK} ${FLAG}")
    else(MPE_COMPILE_FLAGS_WORK)
      set(MPE_COMPILE_FLAGS_WORK ${FLAG})
    endif(MPE_COMPILE_FLAGS_WORK)
  endforeach(FLAG)

  # Extract include paths from compile command line
  string(REGEX MATCHALL "-I([^\" ]+|\"[^\"]+\")"
    MPE_ALL_INCLUDE_PATHS
    "${MPE_LOG_COMPILE_CMDLINE}")
  set(MPE_INCLUDE_PATH_WORK)
  foreach(IPATH ${MPE_ALL_INCLUDE_PATHS})
    string(REGEX REPLACE "^-I" "" IPATH ${IPATH})
    string(REGEX REPLACE "//" "/" IPATH ${IPATH})
    list(APPEND MPE_INCLUDE_PATH_WORK ${IPATH})
  endforeach(IPATH)

  # Extract linker paths from the link command line
  string(REGEX MATCHALL "-L([^\" ]+|\"[^\"]+\")"
    MPE_ALL_LINK_PATHS
    "${MPE_LOG_COMPILE_CMDLINE}")
  set(MPE_LINK_PATH)
  foreach(LPATH ${MPE_ALL_LINK_PATHS})
    string(REGEX REPLACE "^-L" "" LPATH ${LPATH})
    string(REGEX REPLACE "//" "/" LPATH ${LPATH})
    list(APPEND MPE_LINK_PATH ${LPATH})
  endforeach(LPATH)

  # Extract linker flags from the link command line
  string(REGEX MATCHALL "-Wl,([^\" ]+|\"[^\"]+\")"
    MPE_ALL_LINK_FLAGS
    "${MPE_LOG_COMPILE_CMDLINE}")
  set(MPE_LINK_FLAGS_WORK)
  foreach(FLAG ${MPE_ALL_LINK_FLAGS})
    if (MPE_LINK_FLAGS_WORK)
      set(MPE_LINK_FLAGS_WORK "${MPE_LINK_FLAGS_WORK} ${FLAG}")
    else(MPE_LINK_FLAGS_WORK)
      set(MPE_LINK_FLAGS_WORK ${FLAG})
    endif(MPE_LINK_FLAGS_WORK)
  endforeach(FLAG)

  # Extract the set of libraries to link against from the link command
  # line
  string(REGEX MATCHALL "-l([^\" ]+|\"[^\"]+\")"
    MPE_LOG_LIBNAMES
    "${MPE_LOG_COMPILE_CMDLINE}")

  # Determine full path names for all of the libraries that one needs
  # to link against in an MPI program
  set(MPE_LIBRARIES_WORK)
  foreach(LIB ${MPE_LOG_LIBNAMES})
    string(REGEX REPLACE "^-l" "" LIB ${LIB})
    set(MPE_LIB "MPE_LIB-NOTFOUND" CACHE FILEPATH "Cleared" FORCE)
    find_library(MPE_LIB ${LIB} HINTS ${MPE_LINK_PATH})
    if (MPE_LIB)
      list(APPEND MPE_LIBRARIES_WORK ${MPE_LIB})
    else (MPE_LIB)
      message(SEND_ERROR "Unable to find MPE library ${LIB}")
    endif (MPE_LIB)
  endforeach(LIB)
  set(MPE_LIB "MPE_LIB-NOTFOUND"
    CACHE INTERNAL "Scratch variable for MPI detection" FORCE)

  # Set up all of the appropriate cache entries
  set(MPE_LOG_COMPILE_FLAGS ${MPE_COMPILE_FLAGS_WORK}
    CACHE STRING "MPE log compilation flags" FORCE)
  set(MPE_LOG_INCLUDE_PATH ${MPE_INCLUDE_PATH_WORK}
    CACHE STRING "MPE log include path" FORCE)
  set(MPE_LOG_LINK_FLAGS ${MPE_LINK_FLAGS_WORK}
    CACHE STRING "MPE log linking flags" FORCE)
  set(MPE_LOG_LIBRARIES ${MPE_LIBRARIES_WORK}
    CACHE PATH "MPE log libraries" FORCE)
endif (MPE_LOG_INCLUDE_PATH AND MPE_LOG_LIBRARIES)

if (MPE_LOG_INCLUDE_PATH AND MPE_LOG_LIBRARIES)
  set(MPE_FOUND TRUE)
else (MPE_LOG_INCLUDE_PATH AND MPE_LOG_LIBRARIES)
  set(MPE_FOUND FALSE)
endif (MPE_LOG_INCLUDE_PATH AND MPE_LOG_LIBRARIES)

include(FindPackageHandleStandardArgs)
# handle the QUIETLY and REQUIRED arguments
find_package_handle_standard_args(
  MPE
  DEFAULT_MSG
  MPE_LOG_LIBRARIES
  MPE_LOG_INCLUDE_PATH
  )

mark_as_advanced(
  MPE_LOG_COMPILE_FLAGS
  MPE_LOG_INCLUDE_PATH
  MPE_LOG_LINK_FLAGS
  MPE_LOG_LIBRARIES
  MPE_COMPILER
  )