SCons: Generate header with info on which modules are enabled
We already had `MODULE_*_ENABLED` defines but only in the modules environment, and a few custom `*_ENABLED` defines in the main env when we needed the information in core. Now this is defined in a single header which can be included in the files that need this information.
This commit is contained in:
parent
00f46452b0
commit
b7297fb39c
|
@ -410,7 +410,7 @@ if selected_platform in platform_list:
|
||||||
env.module_icons_paths = []
|
env.module_icons_paths = []
|
||||||
env.doc_class_path = {}
|
env.doc_class_path = {}
|
||||||
|
|
||||||
for x in module_list:
|
for x in sorted(module_list):
|
||||||
if not env['module_' + x + '_enabled']:
|
if not env['module_' + x + '_enabled']:
|
||||||
continue
|
continue
|
||||||
tmppath = "./modules/" + x
|
tmppath = "./modules/" + x
|
||||||
|
@ -427,7 +427,7 @@ if selected_platform in platform_list:
|
||||||
"signature in its config.py file, it should be "
|
"signature in its config.py file, it should be "
|
||||||
"`can_build(env, platform)`." % x)
|
"`can_build(env, platform)`." % x)
|
||||||
can_build = config.can_build(selected_platform)
|
can_build = config.can_build(selected_platform)
|
||||||
if (can_build):
|
if can_build:
|
||||||
config.configure(env)
|
config.configure(env)
|
||||||
env.module_list.append(x)
|
env.module_list.append(x)
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
"""Functions used to generate source files during build time
|
"""Functions used to generate source files during build time
|
||||||
|
|
||||||
All such functions are invoked in a subprocess on Windows to prevent build flakiness.
|
All such functions are invoked in a subprocess on Windows to prevent build flakiness.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from platform_methods import subprocess_main
|
from platform_methods import subprocess_main
|
||||||
from compat import iteritems, itervalues, open_utf8, escape_string, byte_to_str
|
from compat import iteritems, itervalues, open_utf8, escape_string, byte_to_str
|
||||||
|
|
||||||
|
|
43
methods.py
43
methods.py
|
@ -160,20 +160,22 @@ def detect_modules():
|
||||||
except IOError:
|
except IOError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
modules_cpp = """
|
modules_cpp = """// register_module_types.gen.cpp
|
||||||
// modules.cpp - THIS FILE IS GENERATED, DO NOT EDIT!!!!!!!
|
/* THIS FILE IS GENERATED DO NOT EDIT */
|
||||||
#include "register_module_types.h"
|
#include "register_module_types.h"
|
||||||
|
|
||||||
""" + includes_cpp + """
|
#include "modules/modules_enabled.gen.h"
|
||||||
|
|
||||||
|
%s
|
||||||
|
|
||||||
void register_module_types() {
|
void register_module_types() {
|
||||||
""" + register_cpp + """
|
%s
|
||||||
}
|
}
|
||||||
|
|
||||||
void unregister_module_types() {
|
void unregister_module_types() {
|
||||||
""" + unregister_cpp + """
|
%s
|
||||||
}
|
}
|
||||||
"""
|
""" % (includes_cpp, register_cpp, unregister_cpp)
|
||||||
|
|
||||||
# NOTE: It is safe to generate this file here, since this is still executed serially
|
# NOTE: It is safe to generate this file here, since this is still executed serially
|
||||||
with open("modules/register_module_types.gen.cpp", "w") as f:
|
with open("modules/register_module_types.gen.cpp", "w") as f:
|
||||||
|
@ -200,38 +202,11 @@ def win32_spawn(sh, escape, cmd, args, env):
|
||||||
print("=====")
|
print("=====")
|
||||||
return rv
|
return rv
|
||||||
|
|
||||||
"""
|
|
||||||
def win32_spawn(sh, escape, cmd, args, spawnenv):
|
|
||||||
import win32file
|
|
||||||
import win32event
|
|
||||||
import win32process
|
|
||||||
import win32security
|
|
||||||
for var in spawnenv:
|
|
||||||
spawnenv[var] = spawnenv[var].encode('ascii', 'replace')
|
|
||||||
|
|
||||||
sAttrs = win32security.SECURITY_ATTRIBUTES()
|
|
||||||
StartupInfo = win32process.STARTUPINFO()
|
|
||||||
newargs = ' '.join(map(escape, args[1:]))
|
|
||||||
cmdline = cmd + " " + newargs
|
|
||||||
|
|
||||||
# check for any special operating system commands
|
|
||||||
if cmd == 'del':
|
|
||||||
for arg in args[1:]:
|
|
||||||
win32file.DeleteFile(arg)
|
|
||||||
exit_code = 0
|
|
||||||
else:
|
|
||||||
# otherwise execute the command.
|
|
||||||
hProcess, hThread, dwPid, dwTid = win32process.CreateProcess(None, cmdline, None, None, 1, 0, spawnenv, None, StartupInfo)
|
|
||||||
win32event.WaitForSingleObject(hProcess, win32event.INFINITE)
|
|
||||||
exit_code = win32process.GetExitCodeProcess(hProcess)
|
|
||||||
win32file.CloseHandle(hProcess);
|
|
||||||
win32file.CloseHandle(hThread);
|
|
||||||
return exit_code
|
|
||||||
"""
|
|
||||||
|
|
||||||
def disable_module(self):
|
def disable_module(self):
|
||||||
self.disabled_modules.append(self.current_module)
|
self.disabled_modules.append(self.current_module)
|
||||||
|
|
||||||
|
|
||||||
def use_windows_spawn_fix(self, platform=None):
|
def use_windows_spawn_fix(self, platform=None):
|
||||||
|
|
||||||
if (os.name != "nt"):
|
if (os.name != "nt"):
|
||||||
|
|
|
@ -2,19 +2,19 @@
|
||||||
|
|
||||||
Import('env')
|
Import('env')
|
||||||
|
|
||||||
|
import modules_builders
|
||||||
|
|
||||||
env_modules = env.Clone()
|
env_modules = env.Clone()
|
||||||
|
|
||||||
Export('env_modules')
|
Export('env_modules')
|
||||||
|
|
||||||
env.modules_sources = []
|
env.CommandNoCache("modules_enabled.gen.h", Value(env.module_list), modules_builders.generate_modules_enabled)
|
||||||
|
|
||||||
|
env.modules_sources = []
|
||||||
env_modules.add_source_files(env.modules_sources, "register_module_types.gen.cpp")
|
env_modules.add_source_files(env.modules_sources, "register_module_types.gen.cpp")
|
||||||
|
|
||||||
for x in env.module_list:
|
for module in env.module_list:
|
||||||
if (x in env.disabled_modules):
|
SConscript(module + "/SCsub")
|
||||||
continue
|
|
||||||
env_modules.Append(CPPDEFINES=["MODULE_" + x.upper() + "_ENABLED"])
|
|
||||||
SConscript(x + "/SCsub")
|
|
||||||
|
|
||||||
if env['split_libmodules']:
|
if env['split_libmodules']:
|
||||||
env.split_lib("modules", env_lib = env_modules)
|
env.split_lib("modules", env_lib = env_modules)
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
"""Functions used to generate source files during build time
|
||||||
|
|
||||||
|
All such functions are invoked in a subprocess on Windows to prevent build flakiness.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from platform_methods import subprocess_main
|
||||||
|
|
||||||
|
|
||||||
|
def generate_modules_enabled(target, source, env):
|
||||||
|
with open(target[0].path, 'w') as f:
|
||||||
|
for module in env.module_list:
|
||||||
|
f.write('#define %s\n' % ("MODULE_" + module.upper() + "_ENABLED"))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
subprocess_main(globals())
|
|
@ -31,9 +31,7 @@
|
||||||
#ifndef REGISTER_MODULE_TYPES_H
|
#ifndef REGISTER_MODULE_TYPES_H
|
||||||
#define REGISTER_MODULE_TYPES_H
|
#define REGISTER_MODULE_TYPES_H
|
||||||
|
|
||||||
//
|
|
||||||
|
|
||||||
void register_module_types();
|
void register_module_types();
|
||||||
void unregister_module_types();
|
void unregister_module_types();
|
||||||
|
|
||||||
#endif
|
#endif // REGISTER_MODULE_TYPES_H
|
||||||
|
|
Loading…
Reference in New Issue