File: cxx_find_template_repository.m4

package info (click to toggle)
openmpi 1.6.5-9.1%2Bdeb8u1
  • links: PTS, VCS
  • area: main
  • in suites: jessie
  • size: 91,628 kB
  • ctags: 44,305
  • sloc: ansic: 408,966; cpp: 44,454; sh: 27,828; makefile: 10,486; asm: 3,882; python: 1,239; lex: 805; perl: 549; csh: 253; fortran: 232; f90: 126; tcl: 12
file content (170 lines) | stat: -rw-r--r-- 4,353 bytes parent folder | download | duplicates (4)
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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
dnl -*- shell-script -*-
dnl
dnl Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
dnl                         University Research and Technology
dnl                         Corporation.  All rights reserved.
dnl Copyright (c) 2004-2005 The University of Tennessee and The University
dnl                         of Tennessee Research Foundation.  All rights
dnl                         reserved.
dnl Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, 
dnl                         University of Stuttgart.  All rights reserved.
dnl Copyright (c) 2004-2005 The Regents of the University of California.
dnl                         All rights reserved.
dnl $COPYRIGHT$
dnl 
dnl Additional copyrights may follow
dnl 
dnl $HEADER$
dnl

AC_DEFUN([OMPI_CXX_FIND_TEMPLATE_REPOSITORY],[
    AC_REQUIRE([AC_PROG_GREP])

    #
    # Arguments: None
    #
    # Dependencies: None
    #
    # See if the compiler makes template repository directories
    # Warning: this is a really screwy example! -JMS
    #
    # Sets OMPI_CXX_TEMPLATE_REPOSITORY to the template repository, or blank.
    # Must call AC_SUBST manually
    #
    AC_CACHE_CHECK([for C++ template_repository_directory],
                   [ompi_cv_cxx_template_repository],
                   [_OMPI_CXX_FIND_TEMPLATE_REPOSITORY])

    if test "$ompi_cv_cxx_template_repository" = "not used" ; then
        OMPI_CXX_TEMPLATE_REPOSITORY=
    elif test "$ompi_cv_cxx_template_repository" = "templates not supported" ; then
        OMPI_CXX_TEMPLATE_REPOSITORY=
    else
        OMPI_CXX_TEMPLATE_REPOSITORY="$ompi_cv_cxx_template_repository"
    fi
])


AC_DEFUN([_OMPI_CXX_FIND_TEMPLATE_REPOSITORY],[
# Find the repository
mkdir conf_tmp_$$
cd conf_tmp_$$
cat > conftest.h <<EOF
template <class T>
class foo {
public:
  foo(T yow) : data(yow) { yow.member(3); };
  void member(int i);
private:
  T data;
};

class bar {
public:
  bar(int i) { data = i; };
  void member(int j) { data = data * j; };

private:
  int data;
};
EOF

cat > conftest2.C <<EOF
#include "conftest.h"

void
some_other_function(void)
{
  foo<bar> var1(6);
  foo< foo<bar> > var2(var1);
}
EOF

cat > conftest1.C <<EOF
#include "conftest.h"

void some_other_function(void);

template <class T>
void
foo<T>::member(int i)
{
  i += 2;
}

int
main()
{
  foo<bar> var1(6);
  foo< foo<bar> > var2(var1);

  some_other_function();
  return 0;
}
EOF

ompi_template_failed=
echo configure:__oline__: $CXX $CXXFLAGS -c conftest1.C >&5
$CXX $CXXFLAGS -c conftest1.C >&5 2>&5
if test ! -f conftest1.o ; then
    ompi_cv_cxx_template_repository="templates not supported"
    echo configure:__oline__: here is the program that failed: >&5
    cat conftest1.C >&5
    echo configure:__oline__: here is conftest.h: >&5
    cat conftest.h >&5
    ompi_template_failed=1
else
    echo configure:__oline__: $CXX $CXXFLAGS -c conftest2.C >&5
    $CXX $CXXFLAGS -c conftest2.C >&5 2>&5
    if test ! -f conftest2.o ; then
        ompi_cv_cxx_template_repository=
	echo configure:__oline__: here is the program that failed: >&5
	cat conftest2.C >&5
	echo configure:__oline__: here is conftest.h: >&5
	cat conftest.h >&5
    else
	rm -rf conftest*

	for ompi_file in `ls`
	do
	    if test "$ompi_file" != "." -a "$ompi_file" != ".."; then
		# Is it a directory?
		if test -d "$ompi_file"; then
		    ompi_template_dir="$ompi_file $ompi_template_dir"
		    
		# Or is it a file?
		else
		    name="`echo $ompi_file | cut -d. -f1`"
		    
		    temp_mask=
		    if test "$name" = "main" -o "$name" = "other"; then
			temp_mask="`echo $ompi_file | cut -d. -f2`"
			if test "$ompi_template_filemask" = ""; then
			ompi_template_filemask="$temp_mask";
			elif test "`echo $ompi_template_filemask | $GREP $temp_mask`" = ""; then
			ompi_template_filemask="$ompi_template_filemask $temp_mask"
			fi
		    fi
		fi
	    fi
	done
	if test "$ompi_template_filemask" != ""; then
	    temp_mask=
	    for mask in $ompi_template_filemask
	    do
		temp_mask="*.$mask $temp_mask"
	    done
	    ompi_template_filemask=$temp_mask
	fi
    fi
fi
ompi_cv_cxx_template_repository="$ompi_template_dir $ompi_template_filemask"

if test "`echo $ompi_cv_cxx_template_repository`" = ""; then
    ompi_cv_cxx_template_repository="not used"
fi
cd ..
rm -rf conf_tmp_$$

# Clean up
unset ompi_file ompi_template_failed ompi_template_dir])