source: mainline/meson/part/read_config/meson.build@ ca22536

Last change on this file since ca22536 was 45fdc55, checked in by Jiří Zárevúcky <zarevucky.jiri@…>, 6 years ago

Fix configuration changes not forcing reconfigure outside source dir

  • Property mode set to 100644
File size: 4.6 KB
Line 
1#
2# Copyright (c) 2019 Jiří Zárevúcky
3# All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions
7# are met:
8#
9# - Redistributions of source code must retain the above copyright
10# notice, this list of conditions and the following disclaimer.
11# - Redistributions in binary form must reproduce the above copyright
12# notice, this list of conditions and the following disclaimer in the
13# documentation and/or other materials provided with the distribution.
14# - The name of the author may not be used to endorse or promote products
15# derived from this software without specific prior written permission.
16#
17# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27#
28
29# Read variables from config file generated by config.py,
30# and version information from repository.
31
32# Workaround for current Meson (0.51.1) not producing dependency
33# on files outside source dir when just files() is used.
34_config_file = configure_file(
35 input: meson.build_root() / 'Makefile.config',
36 output: 'Makefile.config',
37 copy: true,
38)
39
40_version_file = files(meson.source_root() / 'version')
41
42_config_variables = [
43 # Uspace and kernel
44 'CONFIG_BAREBONE',
45 'CONFIG_BUILD_SHARED_LIBS',
46 'CONFIG_DEBUG',
47 'CONFIG_DEVEL_FILES',
48 'CONFIG_FPU',
49 'CONFIG_LINE_DEBUG',
50 'CONFIG_LTO',
51 'CONFIG_PCUT_SELF_TESTS',
52 'CONFIG_PCUT_TESTS',
53 'CONFIG_RTLD',
54 'CONFIG_STRIP_BINARIES',
55 'CONFIG_UBSAN',
56 'CONFIG_USE_SHARED_LIBS',
57 'CROSS_TARGET',
58 'MACHINE',
59 'OPTIMIZATION',
60 'PLATFORM',
61 'PROCESSOR',
62 'QUADFLOAT',
63 'RDFMT',
64
65 # Kernel only
66 'CONFIG_ACPI',
67 'CONFIG_AM335X_TIMERS',
68 'CONFIG_ASID',
69 'CONFIG_ASID_FIFO',
70 'CONFIG_AT_KBD',
71 'CONFIG_BCM2835_MAILBOX',
72 'CONFIG_DSRLNIN',
73 'CONFIG_DSRLNOUT',
74 'CONFIG_EGA',
75 'CONFIG_FB',
76 'CONFIG_GICV2',
77 'CONFIG_I8042',
78 'CONFIG_I8259',
79 'CONFIG_IOMAP_BITMAP',
80 'CONFIG_IOMAP_DUMMY',
81 'CONFIG_KCONSOLE',
82 'CONFIG_MAC_KBD',
83 'CONFIG_MULTIBOOT',
84 'CONFIG_NS16550',
85 'CONFIG_OFW_PCI',
86 'CONFIG_OFW_TREE',
87 'CONFIG_OMAP_UART',
88 'CONFIG_PAGE_HT',
89 'CONFIG_PAGE_PT',
90 'CONFIG_PC_KBD',
91 'CONFIG_PL011_UART',
92 'CONFIG_PL050',
93 'CONFIG_S3C24XX_IRQC',
94 'CONFIG_S3C24XX_UART',
95 'CONFIG_SMP',
96 'CONFIG_SOFTINT',
97 'CONFIG_SRLN',
98 'CONFIG_SUN_KBD',
99 'CONFIG_SYMTAB',
100 'CONFIG_TEST',
101 'CONFIG_TRACE',
102 'CONFIG_TSB',
103 'CONFIG_UDEBUG',
104 'CONFIG_VIA_CUDA',
105 'MEMORY_MODEL',
106
107 'UARCH',
108 'KARCH',
109 'BARCH',
110 'GRUB_ARCH',
111 'UIMAGE_OS',
112 'CONFIG_COMPRESSED_INIT',
113]
114
115foreach _varname : _config_variables
116 _c = run_command(grep, '^' + _varname + '\\b', _config_file)
117 if _c.returncode() != 0
118 # TODO: Output negative/inapplicable variables too in config, so that we can check for typos here.
119 #warning('Missing configuration variable ' + _varname + ' in Makefile.config')
120 set_variable(_varname, false)
121 continue
122 endif
123
124 _val = _c.stdout().split('\n')[0].strip().split('=')[1].strip()
125 if _val == 'y'
126 _val = true
127 elif _val == 'n'
128 _val = false
129 endif
130
131 set_variable(_varname, _val)
132 if debug_options
133 message([ _varname, get_variable(_varname) ])
134 endif
135endforeach
136
137# Also read version information.
138_version_variables = [
139 'HELENOS_COPYRIGHT',
140 'HELENOS_CODENAME',
141 'HELENOS_RELEASE',
142]
143
144foreach _varname : _version_variables
145 _line = run_command(grep, '^' + _varname + '\\b', _version_file, check: true).stdout().strip()
146 _val = _line.split('=')[1].strip()
147
148 set_variable(_varname, _val)
149 if debug_options
150 message([ _varname, get_variable(_varname) ])
151 endif
152endforeach
153
154# Check whether PLATFORM/MACHINE is unchanged
155
156_profile = '@0@/@1@'.format(PLATFORM, MACHINE)
157_profile_file = meson.build_root() / 'prev_profile'
158
159_cmd = run_command('cat', _profile_file)
160if _cmd.returncode() == 0
161 _prev_profile = _cmd.stdout().strip()
162
163 if _prev_profile != _profile
164 error('This build directory was initially configured for ' + _prev_profile +
165 ', but now is configured for ' + _profile + '. This is not supported.')
166 endif
167else
168 run_command('sh', '-c', 'echo "' + _profile + '" > ' + _profile_file, check: true)
169endif
Note: See TracBrowser for help on using the repository browser.