Chris@87
|
1 from __future__ import division, absolute_import, print_function
|
Chris@87
|
2
|
Chris@87
|
3 from distutils.core import Command
|
Chris@87
|
4 from numpy.distutils import log
|
Chris@87
|
5
|
Chris@87
|
6 #XXX: Linker flags
|
Chris@87
|
7
|
Chris@87
|
8 def show_fortran_compilers(_cache=[]):
|
Chris@87
|
9 # Using cache to prevent infinite recursion
|
Chris@87
|
10 if _cache: return
|
Chris@87
|
11 _cache.append(1)
|
Chris@87
|
12 from numpy.distutils.fcompiler import show_fcompilers
|
Chris@87
|
13 import distutils.core
|
Chris@87
|
14 dist = distutils.core._setup_distribution
|
Chris@87
|
15 show_fcompilers(dist)
|
Chris@87
|
16
|
Chris@87
|
17 class config_fc(Command):
|
Chris@87
|
18 """ Distutils command to hold user specified options
|
Chris@87
|
19 to Fortran compilers.
|
Chris@87
|
20
|
Chris@87
|
21 config_fc command is used by the FCompiler.customize() method.
|
Chris@87
|
22 """
|
Chris@87
|
23
|
Chris@87
|
24 description = "specify Fortran 77/Fortran 90 compiler information"
|
Chris@87
|
25
|
Chris@87
|
26 user_options = [
|
Chris@87
|
27 ('fcompiler=', None, "specify Fortran compiler type"),
|
Chris@87
|
28 ('f77exec=', None, "specify F77 compiler command"),
|
Chris@87
|
29 ('f90exec=', None, "specify F90 compiler command"),
|
Chris@87
|
30 ('f77flags=', None, "specify F77 compiler flags"),
|
Chris@87
|
31 ('f90flags=', None, "specify F90 compiler flags"),
|
Chris@87
|
32 ('opt=', None, "specify optimization flags"),
|
Chris@87
|
33 ('arch=', None, "specify architecture specific optimization flags"),
|
Chris@87
|
34 ('debug', 'g', "compile with debugging information"),
|
Chris@87
|
35 ('noopt', None, "compile without optimization"),
|
Chris@87
|
36 ('noarch', None, "compile without arch-dependent optimization"),
|
Chris@87
|
37 ]
|
Chris@87
|
38
|
Chris@87
|
39 help_options = [
|
Chris@87
|
40 ('help-fcompiler', None, "list available Fortran compilers",
|
Chris@87
|
41 show_fortran_compilers),
|
Chris@87
|
42 ]
|
Chris@87
|
43
|
Chris@87
|
44 boolean_options = ['debug', 'noopt', 'noarch']
|
Chris@87
|
45
|
Chris@87
|
46 def initialize_options(self):
|
Chris@87
|
47 self.fcompiler = None
|
Chris@87
|
48 self.f77exec = None
|
Chris@87
|
49 self.f90exec = None
|
Chris@87
|
50 self.f77flags = None
|
Chris@87
|
51 self.f90flags = None
|
Chris@87
|
52 self.opt = None
|
Chris@87
|
53 self.arch = None
|
Chris@87
|
54 self.debug = None
|
Chris@87
|
55 self.noopt = None
|
Chris@87
|
56 self.noarch = None
|
Chris@87
|
57
|
Chris@87
|
58 def finalize_options(self):
|
Chris@87
|
59 log.info('unifing config_fc, config, build_clib, build_ext, build commands --fcompiler options')
|
Chris@87
|
60 build_clib = self.get_finalized_command('build_clib')
|
Chris@87
|
61 build_ext = self.get_finalized_command('build_ext')
|
Chris@87
|
62 config = self.get_finalized_command('config')
|
Chris@87
|
63 build = self.get_finalized_command('build')
|
Chris@87
|
64 cmd_list = [self, config, build_clib, build_ext, build]
|
Chris@87
|
65 for a in ['fcompiler']:
|
Chris@87
|
66 l = []
|
Chris@87
|
67 for c in cmd_list:
|
Chris@87
|
68 v = getattr(c, a)
|
Chris@87
|
69 if v is not None:
|
Chris@87
|
70 if not isinstance(v, str): v = v.compiler_type
|
Chris@87
|
71 if v not in l: l.append(v)
|
Chris@87
|
72 if not l: v1 = None
|
Chris@87
|
73 else: v1 = l[0]
|
Chris@87
|
74 if len(l)>1:
|
Chris@87
|
75 log.warn(' commands have different --%s options: %s'\
|
Chris@87
|
76 ', using first in list as default' % (a, l))
|
Chris@87
|
77 if v1:
|
Chris@87
|
78 for c in cmd_list:
|
Chris@87
|
79 if getattr(c, a) is None: setattr(c, a, v1)
|
Chris@87
|
80
|
Chris@87
|
81 def run(self):
|
Chris@87
|
82 # Do nothing.
|
Chris@87
|
83 return
|
Chris@87
|
84
|
Chris@87
|
85 class config_cc(Command):
|
Chris@87
|
86 """ Distutils command to hold user specified options
|
Chris@87
|
87 to C/C++ compilers.
|
Chris@87
|
88 """
|
Chris@87
|
89
|
Chris@87
|
90 description = "specify C/C++ compiler information"
|
Chris@87
|
91
|
Chris@87
|
92 user_options = [
|
Chris@87
|
93 ('compiler=', None, "specify C/C++ compiler type"),
|
Chris@87
|
94 ]
|
Chris@87
|
95
|
Chris@87
|
96 def initialize_options(self):
|
Chris@87
|
97 self.compiler = None
|
Chris@87
|
98
|
Chris@87
|
99 def finalize_options(self):
|
Chris@87
|
100 log.info('unifing config_cc, config, build_clib, build_ext, build commands --compiler options')
|
Chris@87
|
101 build_clib = self.get_finalized_command('build_clib')
|
Chris@87
|
102 build_ext = self.get_finalized_command('build_ext')
|
Chris@87
|
103 config = self.get_finalized_command('config')
|
Chris@87
|
104 build = self.get_finalized_command('build')
|
Chris@87
|
105 cmd_list = [self, config, build_clib, build_ext, build]
|
Chris@87
|
106 for a in ['compiler']:
|
Chris@87
|
107 l = []
|
Chris@87
|
108 for c in cmd_list:
|
Chris@87
|
109 v = getattr(c, a)
|
Chris@87
|
110 if v is not None:
|
Chris@87
|
111 if not isinstance(v, str): v = v.compiler_type
|
Chris@87
|
112 if v not in l: l.append(v)
|
Chris@87
|
113 if not l: v1 = None
|
Chris@87
|
114 else: v1 = l[0]
|
Chris@87
|
115 if len(l)>1:
|
Chris@87
|
116 log.warn(' commands have different --%s options: %s'\
|
Chris@87
|
117 ', using first in list as default' % (a, l))
|
Chris@87
|
118 if v1:
|
Chris@87
|
119 for c in cmd_list:
|
Chris@87
|
120 if getattr(c, a) is None: setattr(c, a, v1)
|
Chris@87
|
121 return
|
Chris@87
|
122
|
Chris@87
|
123 def run(self):
|
Chris@87
|
124 # Do nothing.
|
Chris@87
|
125 return
|