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
40# This file gets included in the base-level CMakeLists.txt file to define
41# Fortran name mangling.
42
43IF (${PROJECT_NAME}_ENABLE_CXX AND ${PROJECT_NAME}_ENABLE_Fortran)
44  INCLUDE(FortranMangling)
45  FORTRAN_MANGLING()
46
47  # Verify the selected combination of Fortran and C++ compilers.
48  IF(NOT ${PROJECT_NAME}_SKIP_FORTRANCINTERFACE_VERIFY_TEST)
49    INCLUDE(FortranCInterface)
50    FortranCInterface_VERIFY(CXX)
51  ENDIF()
52ENDIF()
53
54IF (FC_FUNC_DEFAULT)
55
56  SET(F77_FUNC_DEFAULT ${FC_FUNC_DEFAULT})
57  SET(F77_FUNC__DEFAULT ${FC_FUNC__DEFAULT})
58  # 2008/10/26: rabartl: ToDo: Above, we need to write
59  # a different function to find out the right BLAS
60  # name mangling automatically.  Given what the above
61  # FORTRAN_MANGLING() function does, this should not
62  # be too hard.
63
64ELSE()
65
66  IF(CYGWIN)
67    SET(F77_FUNC_DEFAULT "(name,NAME) name ## _" )
68    SET(F77_FUNC__DEFAULT "(name,NAME) name ## __" )
69  ELSEIF(WIN32)
70    SET(F77_FUNC_DEFAULT "(name,NAME) name ## _" )
71    SET(F77_FUNC__DEFAULT "(name,NAME) NAME")
72  ELSEIF(UNIX AND NOT APPLE)
73    SET(F77_FUNC_DEFAULT "(name,NAME) name ## _" )
74    #SET(F77_FUNC__DEFAULT "(name,NAME) name ## __" )
75    SET(F77_FUNC__DEFAULT "(name,NAME) name ## _" )
76  ELSEIF(APPLE)
77    SET(F77_FUNC_DEFAULT "(name,NAME) name ## _" )
78    SET(F77_FUNC__DEFAULT "(name,NAME) name ## __" )
79  ELSE()
80    MESSAGE(FATAL_ERROR "Error, could not determine fortran name mangling!")
81  ENDIF()
82
83ENDIF()
84
85# Set options so that users can change these!
86
87SET(F77_FUNC ${F77_FUNC_DEFAULT} CACHE STRING
88  "Name mangling used to call Fortran 77 functions with no underscores in the name")
89SET(F77_FUNC_ ${F77_FUNC__DEFAULT} CACHE STRING
90  "Name mangling used to call Fortran 77 functions with at least one underscore in the name")
91
92MARK_AS_ADVANCED(F77_FUNC)
93MARK_AS_ADVANCED(F77_FUNC_)
94