annotate windows-dev/Configure.py @ 654:0d6673d06c2c

Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages. They are preferred if they are found to be installed. But note that the declared dependency for the "toml" extra nevertheless is the "toml" package. Because it is available for all supported Python versions. So use Python 3.11+ or install "tomli" manually if you want to use the alternate packages.
author Franz Glasner <fzglas.hg@dom66.de>
date Thu, 19 May 2022 22:10:59 +0200
parents 8efdb6357428
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1 #
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2 #
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3 # Important Triplets:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4 #
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5 # clang-cl (clang-cl /clang:-dumpmachine)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6 #
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7 # x86_64-pc-windows-msvc
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8 # i386-pc-windows-msvc
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9 #
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10 # clang on FreeBSD (clang -dumpmachine):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11 #
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12 # x86_64-unknown-freebsd12.2
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13 # i386-unknown-freebsd12.2
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14 #
572
Franz Glasner <fzglas.hg@dom66.de>
parents: 571
diff changeset
15 # NOTE: gcc also knows "-dumpmachine"
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16 #
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17 #
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19 from __future__ import print_function, absolute_import
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21 import argparse
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22 import collections
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23 import datetime
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24 import copy
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25 import getopt
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
26 import os
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
27 import sys
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
28
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
29 import ninja_syntax
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
30
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
31 tool = build = host = None
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
32
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
33 #
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
34 # Global build variables (ordered because they must be written ordered
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
35 # -- and with simple attribute access
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
36 #
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
37 class BuildVars(collections.OrderedDict):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
38
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
39 def __getattr__(self, n):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
40 try:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
41 return self[n]
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
42 except KeyError:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
43 raise AttributeError(n)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
44
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
45 def __setattr__(self, n, v):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
46 # private v
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
47 if n.startswith("_OrderedDict__"):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
48 return super(BuildVars, self).__setattr__(n, v)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
49 self[n] = v
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
50
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
51
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
52 def make_obj_name(name, newext):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
53 bn = os.path.basename(name)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
54 if not bn:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
55 return bn
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
56 root, ext = os.path.splitext(bn)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
57 return root + newext
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
58
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
59 options = argparse.Namespace(
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
60 user_includes = [],
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
61 sys_includes = [],
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
62 sys_libpath = [],
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
63 user_libpath = [],
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
64 link_with_python = None,
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
65 python_limited_api = None,
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
66 )
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
67
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
68 gbv = BuildVars()
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
69 gbv.intdir = "build/_builddir-test/tmp"
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
70 gbv.srcdir = "."
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
71 gbv.builddir = "$intdir"
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
72 gbv.outdir = "$intdir/out"
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
73
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
74 opts, args = getopt.getopt(
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
75 sys.argv[1:],
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
76 "B:H:t:I:L:",
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
77 ["build=",
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
78 "host=",
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
79 "tool=",
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
80 "include=",
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
81 "libpath=",
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
82 "sys-include=",
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
83 "sys-libpath=",
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
84 "CC=",
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
85 "LINK=",
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
86 "intdir=", # intermediate files
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
87 "builddir=", # Ninja builddir
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
88 "outdir=", # The built objects
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
89 "link-with-python=", # link with libpython
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
90 "python-limited-api=", # Use Py_LIMITED_API
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
91 ])
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
92 for opt, val in opts:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
93 if opt in ("-t", "--tool"):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
94 if tool is None:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
95 tool = argparse.Namespace(local=False, msvc=False, clang=False)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
96 if val == "msvc":
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
97 tool.msvc = True
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
98 tool.compile_only = "/c"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
99 tool.define_format = "/D {}"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
100 tool.include_format = "/I {}"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
101 tool.lib_format = "{}"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
102 tool.libpath_format = "/libpath:{}"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
103 tool.dependencies = "msvc"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
104 elif val == "clang-cl":
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
105 tool.msvc = tool.clang = True
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
106 tool.compile_only = "/c"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
107 tool.define_format = "/D {}"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
108 tool.include_format = "/I {}"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
109 tool.lib_format = "{}"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
110 tool.libpath_format = "/libpath:{}"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
111 tool.dependencies = "msvc"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
112 elif val == "clang":
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
113 tool.clang = True
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
114 tool.compile_only = "-c"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
115 tool.define_format = "-D{}"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
116 tool.include_format = "-I{}"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
117 tool.lib_format = "-l{}"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
118 tool.libpath_format = "-L{}"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
119 tool.dependencies = "gcc"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
120 elif val in ("local", "posix"):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
121 tool.local = True
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
122 tool.compile_only = "-c"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
123 tool.define_format = "-D{}"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
124 tool.include_format = "-I{}"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
125 tool.lib_format = "-l{}"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
126 tool.libpath_format = "-L{}"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
127 tool.dependencies = "gcc"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
128 else:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
129 raise getopt.GetoptError("unknown tool value: {}".format(val), opt)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
130 elif opt in ("-B", "--build"):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
131 build = argparse.Namespace(type=None,
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
132 posix=False, windows=False,
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
133 pathmod=None)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
134 if val == "windows":
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
135 # build on Windows with clang-cl
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
136 build.windows = True
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
137 build.type = "windows"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
138 elif val == "posix":
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
139 build.posix = True
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
140 build.type = "posix"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
141 else:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
142 raise getopt.GetoptError("unknwon build value: {}".format(val),
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
143 opt)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
144 elif opt in ("-H", "--host"):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
145 if host is None:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
146 host = argparse.Namespace(windows=False)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
147 if val == "windows":
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
148 host.type = "windows"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
149 host.windows = True
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
150 host.posix = False
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
151 host.objext = ".obj"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
152 host.pydext = ".pyd"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
153 elif val == "posix":
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
154 host.type = "posix"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
155 host.windows = False
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
156 host.posix = True
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
157 host.objext = ".o"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
158 host.pydext = ".so"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
159 else:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
160 raise getopt.GetoptError("unknown host value: {}".format(val),
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
161 opt)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
162 elif opt in ("-I", "--include"):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
163 options.user_includes.append(val)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
164 elif opt in ("-L", "--libpath"):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
165 options.user_libpath.append(val)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
166 elif opt == "--sys-include":
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
167 options.sys_includes.append(val)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
168 elif opt == "--sys-libpath":
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
169 options.sys_libpath.append(val)
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
170 elif opt == "--CC":
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
171 gbv.cc = val
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
172 elif opt == "--LINK":
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
173 gbv.link = val
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
174 elif opt == "--intdir":
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
175 gbv.intdir = val
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
176 elif opt == "--builddir":
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
177 gbv.builddir = val
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
178 elif opt == "--outdir":
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
179 gbv.outdir = val
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
180 elif opt == "--link-with-python":
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
181 options.link_with_python = val
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
182 elif opt == "--python-limited-api":
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
183 if val.lower().startswith("0x"):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
184 options.python_limited_api = val
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
185 else:
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
186 # Here we are Python 3.7+ when using the limited API
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
187 options.python_limited_api = "0x03070000"
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
188 else:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
189 raise getopt.GetoptError("Unhandled option `{}'".format(opt), opt)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
190
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
191 if tool is None:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
192 print("ERROR: no tool given", file=sys.stderr)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
193 sys.exit(1)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
194
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
195 if build.windows and host.posix:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
196 print("ERROR: cross-compiling on Windows not supported", file=sys.stderr)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
197 sys.exit(1)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
198
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
199 if build.windows:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
200 import ntpath as pathmod
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
201 else:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
202 import posixpath as pathmod
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
203 build.pathmod = pathmod
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
204
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
205 if tool.msvc:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
206 if tool.clang:
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
207 if not getattr(gbv, "cc", None):
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
208 gbv.cc = "clang-cl"
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
209 if not getattr(gbv, "link", None):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
210 gbv.link = "lld-link"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
211 else:
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
212 gbv.cc = "cl"
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
213 gbv.link = "link"
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
214 elif tool.clang:
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
215 gbv.cc = "clang"
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
216 gbv.link = "clang" # link C through the compiler
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
217 elif tool.local:
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
218 gbv.cc = "cc"
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
219 gbv.link = "cc" # link through the compiler
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
220 else:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
221 raise RuntimeError("tool condition is not handled")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
222
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
223 speedups_sources = [
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
224 "$srcdir/configmix/_speedups.c",
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
225 ]
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
226
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
227 ccflags = []
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
228 ccwarnings = []
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
229 ldflags = []
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
230
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
231 defines = [
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
232 # "PY_SSIZE_T_CLEAN", # in the source
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
233 "HAVE_THREADS",
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
234 ]
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
235 if options.python_limited_api:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
236 defines.append("Py_LIMITED_API={}".format(options.python_limited_api))
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
237
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
238 # XXX TBD: handle debug/release build _DEBUG/NDEBUG
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
239
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
240 includes = []
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
241 includes.extend(options.sys_includes)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
242 includes.extend(options.user_includes)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
243
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
244
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
245 libpath = []
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
246 libpath.extend(options.sys_libpath)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
247 libpath.extend(options.user_libpath)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
248
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
249 libs = []
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
250 if host.windows:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
251 if tool.msvc:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
252 # automatically included via #pragma
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
253 # libs.append("python3.lib")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
254 pass
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
255 else:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
256 if options.link_with_python:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
257 libs.append(options.link_with_python)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
258
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
259 if host.windows:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
260 defines.append("WIN32")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
261 # XXX TBD Handle arch -> WIN64
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
262 defines.append("WIN64")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
263 defines.append("_WINDOWS")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
264 # for a user dll
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
265 defines.append("_USRDLL")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
266 defines.append("_WINDLL")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
267
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
268 defines.append("WIN32_LEAN_AND_MEAN")
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
269 # WinXP: no extravagant Windows features
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
270 defines.append("_WIN32_WINNT=0x0501")
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
271
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
272 if tool.msvc:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
273 # XXX TBD warnings
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
274
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
275 defines.append("_CRT_SECURE_NO_WARNINGS")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
276
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
277 ccflags.append("/Zi")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
278 ccflags.append("/MD") # link to dll runtime
579
854593461592 Do not use "/EHsc" because no (C++) exceptions (or SEH) is used
Franz Glasner <fzglas.hg@dom66.de>
parents: 578
diff changeset
279 #ccflags.append("/EHsc") # no C++ here
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
280 ccflags.append("/Gy") # enable function level linking
590
91e74fb1ea90 Enable the stack-protector (or /GS)
Franz Glasner <fzglas.hg@dom66.de>
parents: 580
diff changeset
281 ccflags.append("/GS") # enable the stack protector -fstack-protector
580
48e79cbd2481 Employ compiler optimizations for pure MSVC builds also.
Franz Glasner <fzglas.hg@dom66.de>
parents: 579
diff changeset
282 ccflags.append("/O2")
600
9107ff0c5a63 Enable warning level 3 for MSVC-compatible builds (/W3)
Franz Glasner <fzglas.hg@dom66.de>
parents: 590
diff changeset
283 ccflags.append("/W3")
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
284
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
285 # XXX TBD machine
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
286 if tool.clang:
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
287 ccflags.append("--target=x86_64-pc-windows-msvc")
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
288 else:
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
289 ccflags.append("-m64")
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
290
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
291 if tool.clang: # or tool.gcc
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
292 ccflags.append("-fno-strict-aliasing")
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
293
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
294 ldflags.append("/dll")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
295 ldflags.append("/debug") # PDB output
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
296 # 32-bit: -> 5.01 64-bit: 5.02
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
297 ldflags.append("/subsystem:windows,5.02")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
298 ldflags.append("/incremental:no")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
299 #
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
300 ldflags.append("/manifest:NO")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
301
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
302
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
303 if tool.clang:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
304 ccflags.append("-fms-compatibility-version=16.00")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
305
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
306 ccwarnings.append("-Wno-nonportable-include-path")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
307 ccwarnings.append("-Wno-microsoft-template")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
308 ccwarnings.append("-Wno-pragma-pack")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
309 elif host.posix:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
310 defines.append("PIC")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
311
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
312 ccwarnings.extend(["-Wall", "-Wextra", "-pedantic"])
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
313
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
314 ccflags.append("-g")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
315 ccflags.append("-fPIC")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
316 ccflags.append("-fvisibility=hidden")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
317 ccflags.append("-pthread")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
318
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
319 if tool.clang: # || tool.gcc
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
320 ccflags.append("-ffunction-sections")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
321 ccflags.append("-fdata-sections")
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
322 ccflags.append("-fno-strict-aliasing")
590
91e74fb1ea90 Enable the stack-protector (or /GS)
Franz Glasner <fzglas.hg@dom66.de>
parents: 580
diff changeset
323 ccflags.append("-fstack-protector")
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
324 ccflags.append("-faddrsig") # use with --icf=all/safe when linking
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
325
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
326 ldflags.append("-shared")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
327 ldflags.append("-Wl,-z,relro,-z,now")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
328 ldflags.append("-Wl,--build-id=sha1")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
329 # XXX TBD only when building in debug code
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
330 if options.link_with_python:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
331 ldflags.append("-Wl,-z,defs")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
332
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
333 if tool.clang: # || tool.gcc
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
334 ldflags.append("-Wl,--gc-sections")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
335
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
336 if tool.clang:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
337 ldflags.append("-Wl,--icf=safe")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
338
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
339 if options.python_limited_api:
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
340 host.pydext = ".abi3" + host.pydext
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
341
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
342 defines.append("NDEBUG")
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
343
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
344 gbv.cppdefines = [tool.define_format.format(d) for d in defines]
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
345 gbv.includes = [tool.include_format.format(pathmod.normpath(i))
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
346 for i in includes]
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
347 gbv.ccflags = ccflags
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
348 gbv.ccwarnings = ccwarnings
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
349 gbv.ldflags = ldflags
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
350 gbv.ldlibpath = [tool.libpath_format.format(pathmod.normpath(l))
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
351 for l in libpath]
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
352 gbv.ldlibs = [tool.lib_format.format(l) for l in libs]
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
353
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
354 n = ninja_syntax.Writer(sys.stdout)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
355
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
356 n.comment('This file is used to build test Python extensions.')
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
357 n.comment(
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
358 'It is generated by {} at {}Z.'.format(
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
359 os.path.basename(__file__),
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
360 datetime.datetime.utcnow().isoformat()))
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
361 n.newline()
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
362 n.comment('Created using command: {!r}'.format(sys.argv))
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
363 n.newline()
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
364 for k, v in gbv.items():
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
365 n.variable(k, v)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
366 n.newline()
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
367 if tool.msvc:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
368 # Note: this includes clang-cl
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
369 n.rule("compile-pyextension-unit",
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
370 "$cc /nologo /showIncludes /c $cppdefines $ccwarnings $includes $ccflags /Fd$intdir/$intsubdir/ /Fo$out $in",
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
371 deps=tool.dependencies)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
372 else:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
373 n.rule("compile-pyextension-unit",
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
374 "$cc -MD -MF $intdir/_deps -MT $out $cppdefines $ccwarnings $includes $ccflags -c -o $out $in",
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
375 deps=tool.dependencies,
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
376 depfile="$intdir/_deps")
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
377 n.newline()
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
378 if tool.msvc:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
379 # XXX TBD: in "release" builds use /pdbaltpath:$out.pdb
631
8efdb6357428 Implement /PDBALTPATH for Windows (cross-)builds
Franz Glasner <fzglas.hg@dom66.de>
parents: 600
diff changeset
380 n.rule("link-pyextension", "$link /nologo $ldflags $ldlibpath /implib:$out.lib /pdb:$out.pdb /pdbaltpath:$pdbaltpath /out:$out $in $ldlibs")
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
381 else:
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
382 n.rule("link-pyextension", "$link $cppdefines $ccwarnings $ccflags $ldflags -o $out $in $ldlibpath $ldlibs")
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
383 n.newline()
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
384
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
385 n.comment("_speedups")
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
386 for f in speedups_sources:
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
387 n.build(pathmod.normpath("$intdir/$intsubdir/"+make_obj_name(f, host.objext)),
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
388 "compile-pyextension-unit",
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
389 inputs=pathmod.normpath(f),
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
390 variables={"intsubdir": "speedups"})
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
391 n.newline()
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
392 linkinputs = [pathmod.normpath("$intdir/$intsubdir/"+make_obj_name(f, host.objext))
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
393 for f in speedups_sources]
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
394 linkoutput = "$outdir/_speedups" + host.pydext
631
8efdb6357428 Implement /PDBALTPATH for Windows (cross-)builds
Franz Glasner <fzglas.hg@dom66.de>
parents: 600
diff changeset
395 linkvariables = {"intsubdir": "speedups"}
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
396 if tool.msvc:
631
8efdb6357428 Implement /PDBALTPATH for Windows (cross-)builds
Franz Glasner <fzglas.hg@dom66.de>
parents: 600
diff changeset
397 linkvariables["pdbaltpath"] = os.path.basename(linkoutput) + ".pdb"
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
398 implicit_outputs = [
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
399 pathmod.normpath(linkoutput + ".pdb"),
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
400 pathmod.normpath(linkoutput + ".lib")]
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
401 if not tool.clang:
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
402 implicit_outputs.append(pathmod.normpath(linkoutput + ".exp"))
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
403 else:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
404 implicit_outputs = None
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
405 n.build(linkoutput,
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
406 "link-pyextension",
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
407 inputs=linkinputs,
574
0c9169de6e3a Cross-building for Windows 64-bit
Franz Glasner <fzglas.hg@dom66.de>
parents: 573
diff changeset
408 implicit_outputs=implicit_outputs,
631
8efdb6357428 Implement /PDBALTPATH for Windows (cross-)builds
Franz Glasner <fzglas.hg@dom66.de>
parents: 600
diff changeset
409 variables=linkvariables)
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
410 n.newline()