diff options
| author | tekireeva <[email protected]> | 2022-02-10 16:51:38 +0300 | 
|---|---|---|
| committer | Daniil Cherednik <[email protected]> | 2022-02-10 16:51:38 +0300 | 
| commit | e9d6dd2e511aaaec9e6182b7ae9327dce82a051d (patch) | |
| tree | b0c986cf74d10d4aea897f76c8dcec5ee84efc4f | |
| parent | 597c5894e3c8cdfa680c5a5e8c2e69b61dce8254 (diff) | |
Restoring authorship annotation for <[email protected]>. Commit 1 of 2.
| -rw-r--r-- | build/plugins/pybuild.py | 54 | ||||
| -rw-r--r-- | build/plugins/res.py | 10 | ||||
| -rw-r--r-- | build/plugins/rodata.py | 2 | ||||
| -rw-r--r-- | build/plugins/swig.py | 4 | ||||
| -rw-r--r-- | build/scripts/fix_msvc_output.py | 10 | ||||
| -rw-r--r-- | build/scripts/fs_tools.py | 8 | ||||
| -rw-r--r-- | build/scripts/gen_join_srcs.py | 8 | ||||
| -rw-r--r-- | build/scripts/go_tool.py | 16 | ||||
| -rw-r--r-- | build/scripts/link_dyn_lib.py | 12 | ||||
| -rw-r--r-- | build/scripts/link_exe.py | 22 | ||||
| -rw-r--r-- | build/scripts/link_fat_obj.py | 10 | ||||
| -rw-r--r-- | build/scripts/process_command_files.py | 66 | ||||
| -rw-r--r-- | build/scripts/process_whole_archive_option.py | 340 | ||||
| -rw-r--r-- | build/scripts/run_msvc_wine.py | 104 | ||||
| -rw-r--r-- | build/ymake.core.conf | 322 | ||||
| -rwxr-xr-x | build/ymake_conf.py | 54 | 
16 files changed, 521 insertions, 521 deletions
diff --git a/build/plugins/pybuild.py b/build/plugins/pybuild.py index f32a2d39a0e..91c2997f23a 100644 --- a/build/plugins/pybuild.py +++ b/build/plugins/pybuild.py @@ -507,8 +507,8 @@ def onpy_srcs(unit, *args):              for py_suf in unit.get("PY_PROTO_SUFFIXES").split()          ]) -        if optimize_proto and need_gazetteer_peerdir: -            unit.onpeerdir(['kernel/gazetteer/proto']) +        if optimize_proto and need_gazetteer_peerdir:  +            unit.onpeerdir(['kernel/gazetteer/proto'])       if evs:          unit.onpeerdir([cpp_runtime_path]) @@ -621,28 +621,28 @@ def onpy_constructor(unit, arg):      else:          arg[arg.index(':')] = '='      unit.onresource(['-', 'py/constructors/{}'.format(arg)]) - -def onpy_enums_serialization(unit, *args): -    ns = '' -    args = iter(args) -    for arg in args: -        # Namespace directives. -        if arg == 'NAMESPACE': -            ns = next(args) -        else: -            unit.on_py_enum_serialization_to_json(arg) -            unit.on_py_enum_serialization_to_py(arg) -            filename = arg.rsplit('.', 1)[0] + '.py' -            if len(ns) != 0: -                onpy_srcs(unit, 'NAMESPACE', ns, filename) -            else: -                onpy_srcs(unit, filename) - -def oncpp_enums_serialization(unit, *args): -    args = iter(args) -    for arg in args: -        # Namespace directives. -        if arg == 'NAMESPACE': -            next(args) -        else: -            unit.ongenerate_enum_serialization_with_header(arg) +  +def onpy_enums_serialization(unit, *args):  +    ns = ''  +    args = iter(args)  +    for arg in args:  +        # Namespace directives.  +        if arg == 'NAMESPACE':  +            ns = next(args)  +        else:  +            unit.on_py_enum_serialization_to_json(arg)  +            unit.on_py_enum_serialization_to_py(arg)  +            filename = arg.rsplit('.', 1)[0] + '.py'  +            if len(ns) != 0:  +                onpy_srcs(unit, 'NAMESPACE', ns, filename)  +            else:  +                onpy_srcs(unit, filename)  +  +def oncpp_enums_serialization(unit, *args):  +    args = iter(args)  +    for arg in args:  +        # Namespace directives.  +        if arg == 'NAMESPACE':  +            next(args)  +        else:  +            unit.ongenerate_enum_serialization_with_header(arg)  diff --git a/build/plugins/res.py b/build/plugins/res.py index a937caba816..0c4e8947879 100644 --- a/build/plugins/res.py +++ b/build/plugins/res.py @@ -78,11 +78,11 @@ def onresource_files(unit, *args):      dest = None      res = []      first = 0 - -    if args and not unit.enabled('_GO_MODULE'): -        # GO_RESOURCE currently doesn't support DONT_PARSE -        res.append('DONT_PARSE') - +  +    if args and not unit.enabled('_GO_MODULE'):  +        # GO_RESOURCE currently doesn't support DONT_PARSE  +        res.append('DONT_PARSE')  +       if args and args[0] == 'DONT_PARSE':          first = 1 diff --git a/build/plugins/rodata.py b/build/plugins/rodata.py index 3ecb0f9a839..4f15c2c4c8e 100644 --- a/build/plugins/rodata.py +++ b/build/plugins/rodata.py @@ -75,7 +75,7 @@ class ROData(iw.CustomCommand):          return common.make_tuples([common.tobuilddir(common.stripext(self._path)) + '.o'])      def requested_vars(self): -        return [('includes', '_ASM__INCLUDE')] +        return [('includes', '_ASM__INCLUDE')]       def run(self, extra_args, binary):          in_file = self.resolve_path(common.get(self.input, 0)) diff --git a/build/plugins/swig.py b/build/plugins/swig.py index 32a37204a60..e48e1f9e8e9 100644 --- a/build/plugins/swig.py +++ b/build/plugins/swig.py @@ -43,9 +43,9 @@ class Swig(iw.CustomCommand):          elif self._swig_lang in ['jni_cpp', 'jni_java']:              lang_specific_incl_dir = 'java'          incl_dirs = [ -            "FOR", "swig", +            "FOR", "swig",               posixpath.join(self._library_dir, lang_specific_incl_dir), -            "FOR", "swig", +            "FOR", "swig",               self._library_dir          ]          self._incl_dirs = ['$S', '$B'] + [posixpath.join('$S', d) for d in incl_dirs] diff --git a/build/scripts/fix_msvc_output.py b/build/scripts/fix_msvc_output.py index b2e7d38307c..7248434b5ba 100644 --- a/build/scripts/fix_msvc_output.py +++ b/build/scripts/fix_msvc_output.py @@ -1,8 +1,8 @@  import subprocess  import sys -import process_command_files as pcf -import process_whole_archive_option as pwa +import process_command_files as pcf  +import process_whole_archive_option as pwa   def out2err(cmd):      return subprocess.Popen(cmd, stdout=sys.stderr).wait() @@ -32,9 +32,9 @@ def out2err_cut_first_line(cmd):  if __name__ == '__main__': -    mode = sys.argv[1] -    args, wa_peers, wa_libs = pwa.get_whole_archive_peers_and_libs(pcf.skip_markers(sys.argv[2:])) -    cmd = pwa.ProcessWholeArchiveOption('WINDOWS', wa_peers, wa_libs).construct_cmd(args) +    mode = sys.argv[1]  +    args, wa_peers, wa_libs = pwa.get_whole_archive_peers_and_libs(pcf.skip_markers(sys.argv[2:]))  +    cmd = pwa.ProcessWholeArchiveOption('WINDOWS', wa_peers, wa_libs).construct_cmd(args)       run = out2err      if mode in ('cl', 'ml'):          # First line of cl.exe and ml64.exe stdout is useless: it prints input file diff --git a/build/scripts/fs_tools.py b/build/scripts/fs_tools.py index dec4c349c89..1a999f2cf02 100644 --- a/build/scripts/fs_tools.py +++ b/build/scripts/fs_tools.py @@ -6,9 +6,9 @@ import sys  import shutil  import errno -import process_command_files as pcf - - +import process_command_files as pcf  +  +   def link_or_copy(src, dst):      try:          if platform.system().lower() == 'windows': @@ -25,7 +25,7 @@ def link_or_copy(src, dst):  if __name__ == '__main__':      mode = sys.argv[1] -    args = pcf.get_args(sys.argv[2:]) +    args = pcf.get_args(sys.argv[2:])       if mode == 'copy':          shutil.copy(args[0], args[1]) diff --git a/build/scripts/gen_join_srcs.py b/build/scripts/gen_join_srcs.py index e0c2df161a7..0071801f902 100644 --- a/build/scripts/gen_join_srcs.py +++ b/build/scripts/gen_join_srcs.py @@ -1,8 +1,8 @@  import sys -import process_command_files as pcf - +import process_command_files as pcf  +   with open(sys.argv[1], 'w') as f:      f.write('#if defined(__GNUC__)\n')      f.write('#pragma GCC diagnostic ignored "-Wunknown-pragmas"\n') @@ -12,5 +12,5 @@ with open(sys.argv[1], 'w') as f:      f.write('#pragma GCC diagnostic ignored "-Wsubobject-linkage"\n')      f.write('#endif\n\n') -    for arg in pcf.iter_args(sys.argv[2:]): -        f.write('#include "' + arg + '"\n') +    for arg in pcf.iter_args(sys.argv[2:]):  +        f.write('#include "' + arg + '"\n')  diff --git a/build/scripts/go_tool.py b/build/scripts/go_tool.py index c1e98b20c0b..43e0010dd12 100644 --- a/build/scripts/go_tool.py +++ b/build/scripts/go_tool.py @@ -13,9 +13,9 @@ import threading  import six  from functools import reduce -import process_command_files as pcf -import process_whole_archive_option as pwa - +import process_command_files as pcf  +import process_whole_archive_option as pwa  +   arc_project_prefix = 'a.yandex-team.ru/'  std_lib_prefix = 'contrib/go/_std/src/'  vendor_prefix = 'vendor/' @@ -115,9 +115,9 @@ def preprocess_args(args):              srcs.append(f)      args.srcs = srcs -    if args.extldflags: -        args.extldflags = pwa.ProcessWholeArchiveOption(args.targ_os).construct_cmd(args.extldflags) - +    if args.extldflags:  +        args.extldflags = pwa.ProcessWholeArchiveOption(args.targ_os).construct_cmd(args.extldflags)  +       classify_srcs(args.srcs, args) @@ -780,7 +780,7 @@ def do_link_test(args):  if __name__ == '__main__': -    args = pcf.get_args(sys.argv[1:]) +    args = pcf.get_args(sys.argv[1:])       parser = argparse.ArgumentParser(prefix_chars='+')      parser.add_argument('++mode', choices=['dll', 'exe', 'lib', 'test'], required=True) @@ -825,7 +825,7 @@ if __name__ == '__main__':      parser.add_argument('++debug-root-map', default=None)      parser.add_argument('++embed', action='append', nargs='*')      parser.add_argument('++embed_xtest', action='append', nargs='*') -    args = parser.parse_args(args) +    args = parser.parse_args(args)       arc_project_prefix = args.arc_project_prefix      std_lib_prefix = args.std_lib_prefix diff --git a/build/scripts/link_dyn_lib.py b/build/scripts/link_dyn_lib.py index 23487f5c1ef..59606145d4d 100644 --- a/build/scripts/link_dyn_lib.py +++ b/build/scripts/link_dyn_lib.py @@ -6,9 +6,9 @@ import collections  import optparse  import pipes -from process_whole_archive_option import ProcessWholeArchiveOption - +from process_whole_archive_option import ProcessWholeArchiveOption  +   def shlex_join(cmd):      # equivalent to shlex.join() in python 3      return ' '.join( @@ -147,7 +147,7 @@ def fix_cmd(arch, musl, c):              return list(f(list(parse_export_file(fname)))) -        if p.endswith('.supp'): +        if p.endswith('.supp'):               return []          if p.endswith('.pkg.fake'): @@ -167,8 +167,8 @@ def parse_args():      parser.add_option('--fix-elf')      parser.add_option('--linker-output')      parser.add_option('--musl', action='store_true') -    parser.add_option('--whole-archive-peers', action='append') -    parser.add_option('--whole-archive-libs', action='append') +    parser.add_option('--whole-archive-peers', action='append')  +    parser.add_option('--whole-archive-libs', action='append')       return parser.parse_args() @@ -179,7 +179,7 @@ if __name__ == '__main__':      assert opts.target      cmd = fix_cmd(opts.arch, opts.musl, args) -    cmd = ProcessWholeArchiveOption(opts.arch, opts.whole_archive_peers, opts.whole_archive_libs).construct_cmd(cmd) +    cmd = ProcessWholeArchiveOption(opts.arch, opts.whole_archive_peers, opts.whole_archive_libs).construct_cmd(cmd)       if opts.linker_output:          stdout = open(opts.linker_output, 'w') diff --git a/build/scripts/link_exe.py b/build/scripts/link_exe.py index f469e3b442a..c4319c4cb9e 100644 --- a/build/scripts/link_exe.py +++ b/build/scripts/link_exe.py @@ -2,13 +2,13 @@ import sys  import subprocess  import optparse -from process_whole_archive_option import ProcessWholeArchiveOption - +from process_whole_archive_option import ProcessWholeArchiveOption  +   def get_leaks_suppressions(cmd):      supp, newcmd = [], []      for arg in cmd: -        if arg.endswith(".supp"): +        if arg.endswith(".supp"):               supp.append(arg)          else:              newcmd.append(arg) @@ -22,14 +22,14 @@ def fix_cmd(musl, c):      return [i for i in c if (not musl or i not in musl_libs) and not i.endswith('.ios.interface') and not i.endswith('.pkg.fake')] -def gen_default_suppressions(inputs, output, source_root): +def gen_default_suppressions(inputs, output, source_root):       import collections      import os      supp_map = collections.defaultdict(set)      for filename in inputs:          sanitizer = os.path.basename(filename).split('.', 1)[0] -        with open(os.path.join(source_root, filename)) as src: +        with open(os.path.join(source_root, filename)) as src:               for line in src:                  line = line.strip()                  if not line or line.startswith('#'): @@ -49,11 +49,11 @@ def parse_args():      parser.add_option('--musl', action='store_true')      parser.add_option('--custom-step')      parser.add_option('--python') -    parser.add_option('--source-root') -    parser.add_option('--arch') +    parser.add_option('--source-root')  +    parser.add_option('--arch')       parser.add_option('--linker-output') -    parser.add_option('--whole-archive-peers', action='append') -    parser.add_option('--whole-archive-libs', action='append') +    parser.add_option('--whole-archive-peers', action='append')  +    parser.add_option('--whole-archive-libs', action='append')       return parser.parse_args() @@ -61,7 +61,7 @@ if __name__ == '__main__':      opts, args = parse_args()      cmd = fix_cmd(opts.musl, args) -    cmd = ProcessWholeArchiveOption(opts.arch, opts.whole_archive_peers, opts.whole_archive_libs).construct_cmd(cmd) +    cmd = ProcessWholeArchiveOption(opts.arch, opts.whole_archive_peers, opts.whole_archive_libs).construct_cmd(cmd)       if opts.custom_step:          assert opts.python @@ -70,7 +70,7 @@ if __name__ == '__main__':      supp, cmd = get_leaks_suppressions(cmd)      if supp:          src_file = "default_suppressions.cpp" -        gen_default_suppressions(supp, src_file, opts.source_root) +        gen_default_suppressions(supp, src_file, opts.source_root)           cmd += [src_file]      if opts.linker_output: diff --git a/build/scripts/link_fat_obj.py b/build/scripts/link_fat_obj.py index c189668b9e0..32083628983 100644 --- a/build/scripts/link_fat_obj.py +++ b/build/scripts/link_fat_obj.py @@ -2,8 +2,8 @@ import argparse  import subprocess  import sys -from process_whole_archive_option import ProcessWholeArchiveOption - +from process_whole_archive_option import ProcessWholeArchiveOption  +   YA_ARG_PREFIX = '-Ya,' @@ -36,7 +36,7 @@ def get_args():  def strip_suppression_files(srcs): -    return [s for s in srcs if not s.endswith('.supp')] +    return [s for s in srcs if not s.endswith('.supp')]   def main(): @@ -52,14 +52,14 @@ def main():      # Dependencies      global_srcs = groups['global_srcs']      global_srcs = strip_suppression_files(global_srcs) -    global_srcs = ProcessWholeArchiveOption(args.arch).construct_cmd(global_srcs) +    global_srcs = ProcessWholeArchiveOption(args.arch).construct_cmd(global_srcs)       peers = groups['peers']      # Tools      linker = groups['linker']      archiver = groups['archiver'] -    do_link = linker + ['-o', obj_output, '-Wl,-r', '-nodefaultlibs', '-nostartfiles'] + global_srcs + auto_input +    do_link = linker + ['-o', obj_output, '-Wl,-r', '-nodefaultlibs', '-nostartfiles'] + global_srcs + auto_input       do_archive = archiver + [lib_output] + peers      do_globals = None      if args.globals_lib: diff --git a/build/scripts/process_command_files.py b/build/scripts/process_command_files.py index e24bdf3e2b3..82626187ded 100644 --- a/build/scripts/process_command_files.py +++ b/build/scripts/process_command_files.py @@ -1,33 +1,33 @@ -import sys
 -
 -
 -def is_cmdfile_arg(arg):
 -    return arg.startswith('@')
 -
 -def cmdfile_path(arg):
 -    return arg[1:]
 -
 -def read_from_command_file(arg):
 -    with open(arg) as afile:
 -        return afile.read().splitlines()
 -
 -def skip_markers(args):
 -    res = []
 -    for arg in args:
 -        if arg == '--ya-start-command-file' or arg == '--ya-end-command-file':
 -            continue
 -        res.append(arg)
 -    return res
 -
 -def iter_args(args):
 -    for arg in args:
 -        if not is_cmdfile_arg(arg):
 -            if arg == '--ya-start-command-file' or arg == '--ya-end-command-file':
 -                continue
 -            yield arg
 -        else:
 -            for cmdfile_arg in read_from_command_file(cmdfile_path(arg)):
 -                yield cmdfile_arg
 -
 -def get_args(args):
 -    return list(iter_args(args))
 +import sys  +  +  +def is_cmdfile_arg(arg):  +    return arg.startswith('@')  +  +def cmdfile_path(arg):  +    return arg[1:]  +  +def read_from_command_file(arg):  +    with open(arg) as afile:  +        return afile.read().splitlines()  +  +def skip_markers(args):  +    res = []  +    for arg in args:  +        if arg == '--ya-start-command-file' or arg == '--ya-end-command-file':  +            continue  +        res.append(arg)  +    return res  +  +def iter_args(args):  +    for arg in args:  +        if not is_cmdfile_arg(arg):  +            if arg == '--ya-start-command-file' or arg == '--ya-end-command-file':  +                continue  +            yield arg  +        else:  +            for cmdfile_arg in read_from_command_file(cmdfile_path(arg)):  +                yield cmdfile_arg  +  +def get_args(args):  +    return list(iter_args(args))  diff --git a/build/scripts/process_whole_archive_option.py b/build/scripts/process_whole_archive_option.py index a9c4ef676aa..017706b232a 100644 --- a/build/scripts/process_whole_archive_option.py +++ b/build/scripts/process_whole_archive_option.py @@ -1,176 +1,176 @@ -import os -import sys - -import process_command_files as pcf - - -class ProcessWholeArchiveOption(): -    def __init__(self, arch, peers=None, libs=None): -        self.arch = arch.upper() -        self.peers = { x : 0 for x in peers } if peers else None -        self.libs = { x : 0 for x in libs } if libs else None -        self.start_wa_marker = '--start-wa' -        self.end_wa_marker = '--end-wa' - +import os  +import sys  +  +import process_command_files as pcf  +  +  +class ProcessWholeArchiveOption():  +    def __init__(self, arch, peers=None, libs=None):  +        self.arch = arch.upper()  +        self.peers = { x : 0 for x in peers } if peers else None  +        self.libs = { x : 0 for x in libs } if libs else None  +        self.start_wa_marker = '--start-wa'  +        self.end_wa_marker = '--end-wa'  +       def _match_peer_lib(self, arg, ext): -        key = None +        key = None           if arg.endswith(ext): -            key = os.path.dirname(arg) -        return key if key and self.peers and key in self.peers else None - -    def _match_lib(self, arg): -        return arg if self.libs and arg in self.libs else None - +            key = os.path.dirname(arg)  +        return key if key and self.peers and key in self.peers else None  +  +    def _match_lib(self, arg):  +        return arg if self.libs and arg in self.libs else None  +       def _process_arg(self, arg, ext='.a'):          peer_key = self._match_peer_lib(arg, ext) -        lib_key = self._match_lib(arg) -        if peer_key: -            self.peers[peer_key] += 1 -        if lib_key: -            self.libs[lib_key] += 1 -        return peer_key if peer_key else lib_key - -    def _check_peers(self): -        if self.peers: -            for key, value in self.peers.items(): -                assert value > 0, '"{}" specified in WHOLE_ARCHIVE() macro is not used on link command'.format(key) - -    def _construct_cmd_apple(self, args): -        force_load_flag = '-Wl,-force_load,' -        is_inside_wa_markers = False - -        cmd = [] -        for arg in args: -            if arg.startswith(force_load_flag): -                cmd.append(arg) -            elif arg == self.start_wa_marker: -                is_inside_wa_markers = True -            elif arg == self.end_wa_marker: -                is_inside_wa_markers = False -            elif is_inside_wa_markers: -                cmd.append(force_load_flag + arg) -            else: -                key = self._process_arg(arg) -                cmd.append(force_load_flag + arg if key else arg) - -        self._check_peers() - -        return cmd - -    def _construct_cmd_win(self, args): -        whole_archive_prefix = '/WHOLEARCHIVE:' -        is_inside_wa_markers = False - -        def add_prefix(arg, need_check_peers_and_libs): +        lib_key = self._match_lib(arg)  +        if peer_key:  +            self.peers[peer_key] += 1  +        if lib_key:  +            self.libs[lib_key] += 1  +        return peer_key if peer_key else lib_key  +  +    def _check_peers(self):  +        if self.peers:  +            for key, value in self.peers.items():  +                assert value > 0, '"{}" specified in WHOLE_ARCHIVE() macro is not used on link command'.format(key)  +  +    def _construct_cmd_apple(self, args):  +        force_load_flag = '-Wl,-force_load,'  +        is_inside_wa_markers = False  +  +        cmd = []  +        for arg in args:  +            if arg.startswith(force_load_flag):  +                cmd.append(arg)  +            elif arg == self.start_wa_marker:  +                is_inside_wa_markers = True  +            elif arg == self.end_wa_marker:  +                is_inside_wa_markers = False  +            elif is_inside_wa_markers:  +                cmd.append(force_load_flag + arg)  +            else:  +                key = self._process_arg(arg)  +                cmd.append(force_load_flag + arg if key else arg)  +  +        self._check_peers()  +  +        return cmd  +  +    def _construct_cmd_win(self, args):  +        whole_archive_prefix = '/WHOLEARCHIVE:'  +        is_inside_wa_markers = False  +  +        def add_prefix(arg, need_check_peers_and_libs):               key = self._process_arg(arg, '.lib') if need_check_peers_and_libs else arg -            return whole_archive_prefix + arg if key else arg - -        def add_whole_archive_prefix(arg, need_check_peers_and_libs): -            if not pcf.is_cmdfile_arg(arg): -                return add_prefix(arg, need_check_peers_and_libs) - -            cmd_file_path = pcf.cmdfile_path(arg) -            cf_args = pcf.read_from_command_file(cmd_file_path) -            with open(cmd_file_path, 'w') as afile: -                for cf_arg in cf_args: -                    afile.write(add_prefix(cf_arg, need_check_peers_and_libs) + "\n") -            return arg - -        cmd = [] -        for arg in args: -            if arg == self.start_wa_marker: -                is_inside_wa_markers = True -            elif arg == self.end_wa_marker: -                is_inside_wa_markers = False -            elif is_inside_wa_markers: -                cmd.append(add_whole_archive_prefix(arg, False)) -                continue -            elif self.peers or self.libs: -                cmd.append(add_whole_archive_prefix(arg, True)) -            else: -                cmd.append(arg) - -        self._check_peers() - -        return cmd - -    def _construct_cmd_linux(self, args): -        whole_archive_flag = '-Wl,--whole-archive' -        no_whole_archive_flag = '-Wl,--no-whole-archive' - -        def replace_markers(arg): -            if arg == self.start_wa_marker: -                return whole_archive_flag -            if arg == self.end_wa_marker: -                return no_whole_archive_flag -            return arg - -        args = [replace_markers(arg) for arg in args] - -        cmd = [] -        is_inside_whole_archive = False -        is_whole_archive = False -        # We are trying not to create excessive sequences of consecutive flags -        # -Wl,--no-whole-archive  -Wl,--whole-archive ('externally' specified -        # flags -Wl,--[no-]whole-archive are not taken for consideration in this -        # optimization intentionally) -        for arg in args: -            if arg == whole_archive_flag: -                is_inside_whole_archive = True -                is_whole_archive = False -            elif arg == no_whole_archive_flag: -                is_inside_whole_archive = False -                is_whole_archive = False -            else: -                key = self._process_arg(arg) -                if not is_inside_whole_archive: -                    if key: -                        if not is_whole_archive: -                            cmd.append(whole_archive_flag) -                            is_whole_archive = True -                    elif is_whole_archive: -                        cmd.append(no_whole_archive_flag) -                        is_whole_archive = False - -            cmd.append(arg) - -        if is_whole_archive: -            cmd.append(no_whole_archive_flag) - -        self._check_peers() - -        return cmd - -    def construct_cmd(self, args): +            return whole_archive_prefix + arg if key else arg  +  +        def add_whole_archive_prefix(arg, need_check_peers_and_libs):  +            if not pcf.is_cmdfile_arg(arg):  +                return add_prefix(arg, need_check_peers_and_libs)  +  +            cmd_file_path = pcf.cmdfile_path(arg)  +            cf_args = pcf.read_from_command_file(cmd_file_path)  +            with open(cmd_file_path, 'w') as afile:  +                for cf_arg in cf_args:  +                    afile.write(add_prefix(cf_arg, need_check_peers_and_libs) + "\n")  +            return arg  +  +        cmd = []  +        for arg in args:  +            if arg == self.start_wa_marker:  +                is_inside_wa_markers = True  +            elif arg == self.end_wa_marker:  +                is_inside_wa_markers = False  +            elif is_inside_wa_markers:  +                cmd.append(add_whole_archive_prefix(arg, False))  +                continue  +            elif self.peers or self.libs:  +                cmd.append(add_whole_archive_prefix(arg, True))  +            else:  +                cmd.append(arg)  +  +        self._check_peers()  +  +        return cmd  +  +    def _construct_cmd_linux(self, args):  +        whole_archive_flag = '-Wl,--whole-archive'  +        no_whole_archive_flag = '-Wl,--no-whole-archive'  +  +        def replace_markers(arg):  +            if arg == self.start_wa_marker:  +                return whole_archive_flag  +            if arg == self.end_wa_marker:  +                return no_whole_archive_flag  +            return arg  +  +        args = [replace_markers(arg) for arg in args]  +  +        cmd = []  +        is_inside_whole_archive = False  +        is_whole_archive = False  +        # We are trying not to create excessive sequences of consecutive flags  +        # -Wl,--no-whole-archive  -Wl,--whole-archive ('externally' specified  +        # flags -Wl,--[no-]whole-archive are not taken for consideration in this  +        # optimization intentionally)  +        for arg in args:  +            if arg == whole_archive_flag:  +                is_inside_whole_archive = True  +                is_whole_archive = False  +            elif arg == no_whole_archive_flag:  +                is_inside_whole_archive = False  +                is_whole_archive = False  +            else:  +                key = self._process_arg(arg)  +                if not is_inside_whole_archive:  +                    if key:  +                        if not is_whole_archive:  +                            cmd.append(whole_archive_flag)  +                            is_whole_archive = True  +                    elif is_whole_archive:  +                        cmd.append(no_whole_archive_flag)  +                        is_whole_archive = False  +  +            cmd.append(arg)  +  +        if is_whole_archive:  +            cmd.append(no_whole_archive_flag)  +  +        self._check_peers()  +  +        return cmd  +  +    def construct_cmd(self, args):           if self.arch in ('DARWIN', 'IOS', 'IOSSIM'): -            return self._construct_cmd_apple(args) - -        if self.arch == 'WINDOWS': -            return self._construct_cmd_win(args) - -        return self._construct_cmd_linux(args) - - -def get_whole_archive_peers_and_libs(args): -    remaining_args = [] -    peers = [] -    libs = [] -    peers_flag = '--whole-archive-peers' -    libs_flag = '--whole-archive-libs' - -    next_is_peer = False -    next_is_lib = False -    for arg in args: -        if arg == peers_flag: -            next_is_peer = True -        elif arg == libs_flag: -            next_is_lib = True -        elif next_is_peer: -            peers.append(arg) -            next_is_peer = False -        elif next_is_lib: -            libs.append(arg) -            next_is_lib = False -        else: -            remaining_args.append(arg) -    return remaining_args, peers, libs +            return self._construct_cmd_apple(args)  +  +        if self.arch == 'WINDOWS':  +            return self._construct_cmd_win(args)  +  +        return self._construct_cmd_linux(args)  +  +  +def get_whole_archive_peers_and_libs(args):  +    remaining_args = []  +    peers = []  +    libs = []  +    peers_flag = '--whole-archive-peers'  +    libs_flag = '--whole-archive-libs'  +  +    next_is_peer = False  +    next_is_lib = False  +    for arg in args:  +        if arg == peers_flag:  +            next_is_peer = True  +        elif arg == libs_flag:  +            next_is_lib = True  +        elif next_is_peer:  +            peers.append(arg)  +            next_is_peer = False  +        elif next_is_lib:  +            libs.append(arg)  +            next_is_lib = False  +        else:  +            remaining_args.append(arg)  +    return remaining_args, peers, libs  diff --git a/build/scripts/run_msvc_wine.py b/build/scripts/run_msvc_wine.py index 439d1f88316..5aadae6a459 100644 --- a/build/scripts/run_msvc_wine.py +++ b/build/scripts/run_msvc_wine.py @@ -8,10 +8,10 @@ import json  import argparse  import errno -import process_command_files as pcf -import process_whole_archive_option as pwa - +import process_command_files as pcf  +import process_whole_archive_option as pwa  +   procs = []  build_kekeke = 45 @@ -359,56 +359,56 @@ def make_full_path_arg(arg, bld_root, short_root):          return os.path.join(short_root, arg)      return arg -def fix_path(p): +def fix_path(p):       topdirs = ['/%s/' % d for d in os.listdir('/')]      def abs_path_start(path, pos):          if pos < 0:              return False          return pos == 0 or path[pos - 1] == ':' -    pp = None -    for pr in topdirs: -        pp2 = p.find(pr) -        if abs_path_start(p, pp2) and (pp is None or pp > pp2): -            pp = pp2 -    if pp is not None: -        return p[:pp] + 'Z:' + p[pp:].replace('/', '\\') -    if p.startswith('/Fo'): -        return '/Fo' + p[3:].replace('/', '\\') -    return p - -def process_free_args(args, wine, bld_root, mode): -    whole_archive_prefix = '/WHOLEARCHIVE:' -    short_names = {} -    winepath = os.path.join(os.path.dirname(wine), 'winepath') -    short_names[bld_root] = trim_path(bld_root, winepath) -    # Slow for no benefit. -    # arc_root = args.arcadia_root -    # short_names[arc_root] = trim_path(arc_root, winepath) - -    free_args, wa_peers, wa_libs = pwa.get_whole_archive_peers_and_libs(pcf.skip_markers(args)) - -    process_link = lambda x: make_full_path_arg(x, bld_root, short_names[bld_root]) if mode in ('link', 'lib') else x -    def process_arg(arg): -        with_wa_prefix = arg.startswith(whole_archive_prefix) -        prefix = whole_archive_prefix if with_wa_prefix else '' -        without_prefix_arg = arg[len(prefix):] -        return prefix + fix_path(process_link(downsize_path(without_prefix_arg, short_names))) - -    result = [] -    for arg in free_args: -        if pcf.is_cmdfile_arg(arg): -            cmd_file_path = pcf.cmdfile_path(arg) -            cf_args = pcf.read_from_command_file(cmd_file_path) -            with open(cmd_file_path, 'w') as afile: -                for cf_arg in cf_args: -                    afile.write(process_arg(cf_arg) + "\n") -            result.append(arg) -        else: -            result.append(process_arg(arg)) -    return pwa.ProcessWholeArchiveOption('WINDOWS', wa_peers, wa_libs).construct_cmd(result) - -def run_main(): +    pp = None  +    for pr in topdirs:  +        pp2 = p.find(pr)  +        if abs_path_start(p, pp2) and (pp is None or pp > pp2):  +            pp = pp2  +    if pp is not None:  +        return p[:pp] + 'Z:' + p[pp:].replace('/', '\\')  +    if p.startswith('/Fo'):  +        return '/Fo' + p[3:].replace('/', '\\')  +    return p  + +def process_free_args(args, wine, bld_root, mode):  +    whole_archive_prefix = '/WHOLEARCHIVE:'  +    short_names = {}  +    winepath = os.path.join(os.path.dirname(wine), 'winepath')  +    short_names[bld_root] = trim_path(bld_root, winepath)  +    # Slow for no benefit.  +    # arc_root = args.arcadia_root  +    # short_names[arc_root] = trim_path(arc_root, winepath)  + +    free_args, wa_peers, wa_libs = pwa.get_whole_archive_peers_and_libs(pcf.skip_markers(args))  + +    process_link = lambda x: make_full_path_arg(x, bld_root, short_names[bld_root]) if mode in ('link', 'lib') else x  +    def process_arg(arg):  +        with_wa_prefix = arg.startswith(whole_archive_prefix)  +        prefix = whole_archive_prefix if with_wa_prefix else ''  +        without_prefix_arg = arg[len(prefix):]  +        return prefix + fix_path(process_link(downsize_path(without_prefix_arg, short_names)))  + +    result = []  +    for arg in free_args:  +        if pcf.is_cmdfile_arg(arg):  +            cmd_file_path = pcf.cmdfile_path(arg)  +            cf_args = pcf.read_from_command_file(cmd_file_path)  +            with open(cmd_file_path, 'w') as afile:  +                for cf_arg in cf_args:  +                    afile.write(process_arg(cf_arg) + "\n")  +            result.append(arg)  +        else:  +            result.append(process_arg(arg))  +    return pwa.ProcessWholeArchiveOption('WINDOWS', wa_peers, wa_libs).construct_cmd(result)  + +def run_main():       parser = argparse.ArgumentParser()      parser.add_argument('wine', action='store')      parser.add_argument('-v', action='store', dest='version', default='120') @@ -418,8 +418,8 @@ def run_main():      parser.add_argument('arcadia_build_root', action='store')      parser.add_argument('binary', action='store')      parser.add_argument('free_args', nargs=argparse.REMAINDER) -    # By now just unpack. Ideally we should fix path and pack arguments back into command file -    args = parser.parse_args() +    # By now just unpack. Ideally we should fix path and pack arguments back into command file  +    args = parser.parse_args()       wine = args.wine      mode = args.mode @@ -427,7 +427,7 @@ def run_main():      version = args.version      incl_paths = args.incl_paths      bld_root = args.arcadia_build_root -    free_args = args.free_args +    free_args = args.free_args       wine_dir = os.path.dirname(os.path.dirname(wine))      bin_dir = os.path.dirname(binary) @@ -435,7 +435,7 @@ def run_main():      if not incl_paths:          incl_paths = [tc_dir + '/VC/include', tc_dir + '/include'] -    cmd_out = find_cmd_out(free_args) +    cmd_out = find_cmd_out(free_args)       env = os.environ.copy() @@ -451,7 +451,7 @@ def run_main():      env['LIB'] = fix_path(tc_dir + '/VC/lib/amd64')      env['LD_LIBRARY_PATH'] = ':'.join(wine_dir + d for d in ['/lib', '/lib64', '/lib64/wine']) -    cmd = [binary] + process_free_args(free_args, wine, bld_root, mode) +    cmd = [binary] + process_free_args(free_args, wine, bld_root, mode)       for x in ('/NOLOGO', '/nologo', '/FD'):          try: diff --git a/build/ymake.core.conf b/build/ymake.core.conf index 081833998b8..f85e5501a14 100644 --- a/build/ymake.core.conf +++ b/build/ymake.core.conf @@ -39,11 +39,11 @@ SO_OTPUTS=no  @import "${CONF_ROOT}/conf/project_specific/other.conf" -USE_GLOBAL_CMD=no -when ($OS_WINDOWS != "yes") { -    USE_GLOBAL_CMD=yes -} - +USE_GLOBAL_CMD=no  +when ($OS_WINDOWS != "yes") {  +    USE_GLOBAL_CMD=yes  +}  +   YMAKE_RESOURCE_BIN=${YMAKE_RESOURCE_GLOBAL}/ymake  YMAKE_RESOURCE_DIR=build/external_resources/ymake  when ($USE_YMAKE_RESOURCE == "yes") { @@ -657,7 +657,7 @@ macro JAVA_PROTO_PLUGIN(NAME, TOOL, DEPS[]) {  # tag:proto tag:cpp-specific  macro _ADD_CPP_PROTO_OUT(Suf) { -    SET_APPEND(CPP_PROTO_OUTS \${output;hide;norel;nopath;noext;suf=$Suf:File}) +    SET_APPEND(CPP_PROTO_OUTS \${output;hide;norel;nopath;noext;suf=$Suf:File})       # XXX fix variable expansion in plugins      SET(CPP_PROTO_SUFFIXES $CPP_PROTO_SUFFIXES $Suf) @@ -1148,8 +1148,8 @@ module _BASE_UNIT: _BARE_UNIT {      PEERDIR_TAGS=CPP_PROTO CPP_FBS CPP_SSQLS CPP_IDL PY2 PY2_NATIVE YQL_UDF_STATIC __EMPTY__ DLL_LIB      CPP_PROTO_CMDLINE=${cwd;rootdir;input:File} $PROTOC -I=./$PROTO_NAMESPACE -I=$ARCADIA_ROOT/$PROTO_NAMESPACE ${pre=-I=:_PROTO__INCLUDE} -I=$ARCADIA_BUILD_ROOT -I=$PROTOBUF_PATH --cpp_out=${CPP_PROTO_PLUGINS}$ARCADIA_BUILD_ROOT/$PROTO_NAMESPACE $PROTOC_STYLEGUIDE_OUT $PROTOC_PLUGIN_STYLEGUIDE ${input;rootrel:File} -    CPP_PROTO_OUTS+=${output;hide;norel;nopath;noext:File.pb.cc} ${output;main;hide;norel;nopath;noext:File.pb.h} -    CPP_EV_OUTS+=${output;hide;norel:File.pb.cc} ${output;hide;norel:File.pb.h} +    CPP_PROTO_OUTS+=${output;hide;norel;nopath;noext:File.pb.cc} ${output;main;hide;norel;nopath;noext:File.pb.h}  +    CPP_EV_OUTS+=${output;hide;norel:File.pb.cc} ${output;hide;norel:File.pb.h}       when ($PY_PROTOS_FOR == "yes") {          MACRO_ALIAS(EVLOG_CMD _PY_EVLOG_CMD) @@ -1677,13 +1677,13 @@ module PROGRAM: _BASE_PROGRAM {      ADD_YTEST($MODULE_PREFIX$REALPRJNAME coverage.extractor)      ADD_CLANG_TIDY() -    SET(MODULE_LANG CPP) +    SET(MODULE_LANG CPP)   }  # tag:python-specific tag:deprecated tag:internal  module _PY2_PROGRAM: _BASE_PY_PROGRAM {      .ALIASES=REQUIREMENTS=PY_REQUIREMENTS -    SET(MODULE_LANG PY2) +    SET(MODULE_LANG PY2)       # Looks like we cannot avoid copy-paste util ymake supports multiple inheritance      # We need to attach coverage.extractor to every py_program target, except pytest targets @@ -1856,7 +1856,7 @@ module UNITTEST: _BASE_UNITTEST {      .SEM=UNITTEST_SEM      PEERDIR(library/cpp/testing/unittest_main)      ADD_YTEST($MODULE_PREFIX$REALPRJNAME unittest.py) -    SET(MODULE_LANG CPP) +    SET(MODULE_LANG CPP)   }  # tag:yt-specific tag:test @@ -1887,7 +1887,7 @@ module GTEST: _BASE_UNITTEST {      .SEM=UNITTEST_SEM      PEERDIR(library/cpp/testing/gtest library/cpp/testing/gtest_main)      ADD_YTEST($MODULE_PREFIX$REALPRJNAME gunittest) -    SET(MODULE_LANG CPP) +    SET(MODULE_LANG CPP)   }  USE_AFL=no @@ -2186,7 +2186,7 @@ module PY2TEST: PYTEST_BIN {      otherwise {          PEERDIR+=build/rules/py2_deprecation      } -    SET(MODULE_LANG PY2) +    SET(MODULE_LANG PY2)       ASSERT(_OK You are using deprecated Python2-only code (PY2TEST). Please consider rewriting to Python 3.)  } @@ -2199,7 +2199,7 @@ module PY3TEST_BIN: _BASE_PY3_PROGRAM {      .FINAL_TARGET=no      .ALLOWED=YT_SPEC NO_DOCTESTS      SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS canondata/result.json) -    SET(MODULE_LANG PY3) +    SET(MODULE_LANG PY3)       SETUP_PYTEST_BIN()      PEERDIR+=library/python/pytest  } @@ -2304,7 +2304,7 @@ module EXECTEST: _BARE_UNIT {  ### For more details see: https://wiki.yandex-team.ru/yatool/test/#zapuskbenchmark  module Y_BENCHMARK: PROGRAM {      PEERDIR(library/cpp/testing/benchmark/main) -    SET(MODULE_LANG CPP) +    SET(MODULE_LANG CPP)   }  # tag:cpp-specific tag:test @@ -2316,7 +2316,7 @@ module Y_BENCHMARK: PROGRAM {  module G_BENCHMARK: _BASE_PROGRAM {      PEERDIR(library/cpp/testing/gbenchmark_main)      ADD_YTEST($MODULE_PREFIX$REALPRJNAME g_benchmark) -    SET(MODULE_LANG CPP) +    SET(MODULE_LANG CPP)   }  # tag:test @@ -2361,11 +2361,11 @@ module _LIBRARY: _BASE_UNIT {      .GLOBAL=USER_CFLAGS USER_CXXFLAGS USER_CONLYFLAGS LDFLAGS SRCS _WHOLE_ARCHIVE_LIBS_VALUE RPATH      .RESTRICTED=ALLOCATOR SIZE TAG DATA TEST_DATA DEPENDS FORK_TESTS FORK_SUBTESTS SPLIT_FACTOR TEST_CWD RUN TIMEOUT SPLIT_DWARF      .FINAL_TARGET=no -    .GLOBAL_CMD=GLOBAL_LINK_LIB +    .GLOBAL_CMD=GLOBAL_LINK_LIB       .GLOBAL_EXTS=.o .obj .tidyjson      .ALIASES=RES_REQUIREMENTS=PY_REQUIREMENTS -    GLOBAL_SUFFIX=.global$MODULE_SUFFIX +    GLOBAL_SUFFIX=.global$MODULE_SUFFIX       #TODO: Remove this hack (really we do not need add fake src at all)      ENABLE(NEED_ADD_FAKE_SRC)      _REQUIRE_EXPLICIT_LICENSE(contrib/deprecated contrib/libs contrib/restricted contrib/python) @@ -2405,17 +2405,17 @@ module _LIBRARY: _BASE_UNIT {      }  } -CPP_LIBRARY_SEM=add_library ${MODDIR} $REALPRJNAME ${hide:TARGET} ${hide:AUTO_INPUT} \ +CPP_LIBRARY_SEM=add_library ${MODDIR} $REALPRJNAME ${hide:TARGET} ${hide:AUTO_INPUT} \                   && library_fake_marker FAKE_MODULE ${FAKE_MODULE} \                  && consumer_link_library PUBLIC $CMAKE_LINK_TARGET \                  && target_include_directories PUBLIC $_C__INCLUDE_GLOBAL \                  && target_include_directories PRIVATE $_C__INCLUDE_OWNED \                  && target_compile_definitions PRIVATE $USER_CFLAGS $USER_CXXFLAGS -CPP_OBJ_LIBRARY_SEM=add_global_library_for ${MODDIR} ${suf=.global:REALPRJNAME} $REALPRJNAME ${hide:GLOBAL_TARGET} ${hide:AUTO_INPUT} \ +CPP_OBJ_LIBRARY_SEM=add_global_library_for ${MODDIR} ${suf=.global:REALPRJNAME} $REALPRJNAME ${hide:GLOBAL_TARGET} ${hide:AUTO_INPUT} \                   && target_include_directories PUBLIC $_C__INCLUDE_GLOBAL \                  && target_include_directories PRIVATE $_C__INCLUDE_OWNED \ -                && target_compile_definitions PRIVATE $USER_CFLAGS $USER_CXXFLAGS - +                && target_compile_definitions PRIVATE $USER_CFLAGS $USER_CXXFLAGS  +   CMAKE_FIND_PKG=  CMAKE_LINK_TARGET=$REALPRJNAME  CMAKE_FIND_PKG_COMP= @@ -2438,7 +2438,7 @@ module LIBRARY: _LIBRARY {      .ALIASES=REQUIREMENTS=CC_REQUIREMENTS      .SEM=CPP_LIBRARY_SEM      .GLOBAL_SEM=CPP_OBJ_LIBRARY_SEM - +       when ($CMAKE_PACKAGE_COMPONENT != "") {          CMAKE_FIND_PKG_COMP=COMPONENTS $CMAKE_PACKAGE_COMPONENT      } @@ -2458,7 +2458,7 @@ module LIBRARY: _LIBRARY {          PEERDIR+=$CPP_PROTOBUF_PEERS      }      SET(MODULE_TYPE LIBRARY) -    SET(MODULE_LANG CPP) +    SET(MODULE_LANG CPP)       ADD_CLANG_TIDY()  } @@ -2551,18 +2551,18 @@ module FAT_OBJECT: LIBRARY {      .CMD=LINK_FAT_OBJECT_CMD      .PEERDIR_POLICY=as_build_from -    when ($MSVC == "yes" || $CYGWIN == "yes") { -        MODULE_SUFFIX=.global.lib -    } +    when ($MSVC == "yes" || $CYGWIN == "yes") {  +        MODULE_SUFFIX=.global.lib  +    }       elsewhen ($OS_ANDROID == "yes") {          MODULE_SUFFIX=.a      } -    otherwise { -        MODULE_SUFFIX=.o -    } - -    _USE_LINKER() - +    otherwise {  +        MODULE_SUFFIX=.o  +    }  +  +    _USE_LINKER()  +       # This module requires at least one .o which is not subject to removal so just add _fake_src.cpp as SRCS      # ymake's handling of NEED_ADD_FAKE_SRC may insert arbitrary command, not necessarily compilation      DISABLE(NEED_ADD_FAKE_SRC) @@ -2602,7 +2602,7 @@ module DLL_UNIT: _LINK_UNIT {      ALLOCATOR(FAKE)      SET(MODULE_TYPE DLL)      SET(MODULE_TAG DLL) -    SET(MODULE_LANG CPP) +    SET(MODULE_LANG CPP)       ADD_CLANG_TIDY()      when ($MSVC == "yes" || $CYGWIN == "yes") { @@ -2716,7 +2716,7 @@ module PY_ANY_MODULE: DLL_UNIT {  ### Documentation: https://wiki.yandex-team.ru/devtools/commandsandvars/py_srcs/  module PY2MODULE: PY_ANY_MODULE {      PYTHON2_MODULE() -    SET(MODULE_LANG PY2) +    SET(MODULE_LANG PY2)       .RESTRICTED=PYTHON3_MODULE PYTHON3_ADDINCL  } @@ -2735,7 +2735,7 @@ module PY2MODULE: PY_ANY_MODULE {  ### Documentation: https://wiki.yandex-team.ru/devtools/commandsandvars/py_srcs/  module PY3MODULE: PY_ANY_MODULE {      PYTHON3_MODULE() -    SET(MODULE_LANG PY3) +    SET(MODULE_LANG PY3)       .RESTRICTED=PYTHON2_MODULE PYTHON2_ADDINCL  } @@ -2803,7 +2803,7 @@ macro DYNAMIC_LIBRARY_FROM(Path...) {  ### DLL cannot participate in linking to programs but can be used from Java or as final artifact (packaged and deployed).  module DLL: DLL_UNIT {      SET(MAKE_ONLY_SHARED_LIB yes) -    SET(MODULE_LANG CPP) +    SET(MODULE_LANG CPP)       when ($OS_WINDOWS) {          MODULE_SUFFIX=.dll      } @@ -3188,7 +3188,7 @@ module _DOCS_BASE_UNIT: _BARE_UNIT {      ENABLE(_DOCS_BASE_UNIT)      SET(MODULE_SUFFIX .tar.gz) -    SET(MODULE_LANG DOCS) +    SET(MODULE_LANG DOCS)       DEFAULT(_DOCS_BUILDER_VALUE yfm)      DEFAULT(_DOCS_DIR_VALUE ${MODDIR})      select ($_DOCS_BUILDER) { @@ -3434,7 +3434,7 @@ module EXTERNAL_JAVA_LIBRARY: _BASE_UNIT {      DISABLE(NEED_PLATFORM_PEERDIRS)      NO_PLATFORM()      SET(MODULE_SUFFIX .jar) -    SET(MODULE_LANG JAVA) +    SET(MODULE_LANG JAVA)   }  # tag:java-specific @@ -3539,7 +3539,7 @@ module _JAR_BASE: _BARE_UNIT {      DISABLE(NEED_PLATFORM_PEERDIRS)      NO_PLATFORM()      VCS_JAVA=${suf=.__vcs_version__.mf:TARGET} -    SET(MODULE_LANG JAVA) +    SET(MODULE_LANG JAVA)   }  # tag:java-specific @@ -4041,15 +4041,15 @@ module PY2_LIBRARY: _LIBRARY {      }      .ALLOWED=FORK_TESTS      .IGNORED=GENERATE_ENUM_SERIALIZATION GENERATE_ENUM_SERIALIZATION_WITH_HEADER USE_PYTHON2 -    .RESTRICTED=PYTHON3_ADDINCL USE_PYTHON3 PYTHON2_ADDINCL OPTIMIZE_PY_PROTOS NO_OPTIMIZE_PY_PROTOS -    USE_GLOBAL_CMD=yes +    .RESTRICTED=PYTHON3_ADDINCL USE_PYTHON3 PYTHON2_ADDINCL OPTIMIZE_PY_PROTOS NO_OPTIMIZE_PY_PROTOS  +    USE_GLOBAL_CMD=yes       when ($PY_PROTO_MYPY_ENABLED == "yes") {          PY_PROTO_MYPY_SUFFIX=_pb2.pyi          PY_PROTO_MYPY_PLUGIN=$PY_PROTO_MYPY_PLUGIN_BASE ${output;hide;noauto;norel;nopath;noext;suf=_pb2.pyi:File}          PY_PROTO_MYPY_PLUGIN_INTERNAL=$PY_PROTO_MYPY_PLUGIN_BASE ${output;hide;noauto;norel;nopath;noext;suf=__int___pb2.pyi:File} ${hide;kv:"ext_out_name_for_${nopath;noext;suf=__int___pb2.pyi:File} ${nopath;noext;suf=_pb2.pyi:File}"})      } -    SET(MODULE_LANG PY2) +    SET(MODULE_LANG PY2)   } @@ -4070,8 +4070,8 @@ module _PY3_LIBRARY: _LIBRARY {      }      .ALLOWED=FORK_TESTS      .IGNORED=GENERATE_ENUM_SERIALIZATION GENERATE_ENUM_SERIALIZATION_WITH_HEADER -    .RESTRICTED=PYTHON3_ADDINCL USE_PYTHON3 PYTHON2_ADDINCL USE_PYTHON2 OPTIMIZE_PY_PROTOS NO_OPTIMIZE_PY_PROTOS -    USE_GLOBAL_CMD=yes +    .RESTRICTED=PYTHON3_ADDINCL USE_PYTHON3 PYTHON2_ADDINCL USE_PYTHON2 OPTIMIZE_PY_PROTOS NO_OPTIMIZE_PY_PROTOS  +    USE_GLOBAL_CMD=yes       PEERDIR($YMAKE_PYTHON3_PEER)      RUN_CYTHON_SCRIPT=$YMAKE_PYTHON3 $CYTHON_SCRIPT @@ -4081,7 +4081,7 @@ module _PY3_LIBRARY: _LIBRARY {          PY_PROTO_MYPY_PLUGIN=$PY_PROTO_MYPY_PLUGIN_BASE ${output;hide;noauto;norel;nopath;noext;suf=_pb2.pyi:File}          PY_PROTO_MYPY_PLUGIN_INTERNAL=$PY_PROTO_MYPY_PLUGIN_BASE ${output;hide;noauto;norel;nopath;noext;suf=__int___pb2.pyi:File} ${hide;kv:"ext_out_name_for_${nopath;noext;suf=__int___pb2.pyi:File} ${nopath;noext;suf=_pb2.pyi:File}"})      } -    SET(MODULE_LANG PY3) +    SET(MODULE_LANG PY3)   }  # tag:python-specific @@ -4146,8 +4146,8 @@ module _BASE_PY_PROGRAM: _BASE_PROGRAM {          NO_STRIP=yes      }      .IGNORED=GENERATE_ENUM_SERIALIZATION GENERATE_ENUM_SERIALIZATION_WITH_HEADER USE_PYTHON2 -    .RESTRICTED=PYTHON3_ADDINCL USE_PYTHON3 PYTHON2_ADDINCL OPTIMIZE_PY_PROTOS NO_OPTIMIZE_PY_PROTOS -    SET(MODULE_LANG PY2) +    .RESTRICTED=PYTHON3_ADDINCL USE_PYTHON3 PYTHON2_ADDINCL OPTIMIZE_PY_PROTOS NO_OPTIMIZE_PY_PROTOS  +    SET(MODULE_LANG PY2)   }  # tag:python-specific tag:codenav @@ -4207,7 +4207,7 @@ module _BASE_PY3_PROGRAM: _BASE_PROGRAM {      }      .IGNORED=GENERATE_ENUM_SERIALIZATION GENERATE_ENUM_SERIALIZATION_WITH_HEADER      .RESTRICTED=PYTHON3_ADDINCL USE_PYTHON3 PYTHON2_ADDINCL USE_PYTHON2 -    SET(MODULE_LANG PY3) +    SET(MODULE_LANG PY3)   }  # tag:python-specific @@ -4920,7 +4920,7 @@ module _JAVA_PLACEHOLDER: _BASE_UNIT  {      # protobuf-java-util      DEPENDENCY_MANAGEMENT(contrib/java/com/google/protobuf/protobuf-java-util/${JAVA_PROTO_RUNTIME_VERSION})      CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/com/google/protobuf/protobuf-java-util EXCEPT contrib/java/com/google/protobuf/protobuf-java-util/${JAVA_PROTO_RUNTIME_VERSION}) -    SET(MODULE_LANG JAVA) +    SET(MODULE_LANG JAVA)   }  # tag:java-specific @@ -5449,7 +5449,7 @@ macro _GENERATE_PY_EVS_INTERNAL(FILES...) {  macro _COPY_FILE_IMPL(FILE, AUTO_DST="", NOAUTO_DST="", OUTPUT_INCLUDES[], REQUIREMENTS[]) {      .CMD=$COPY_CMD ${input:FILE} ${output:AUTO_DST} ${output;noauto:NOAUTO_DST} ${output_include;hide:OUTPUT_INCLUDES} ${requirements;hide:REQUIREMENTS} ${kv;hide:"p CP"} ${kv;hide:"pc light-cyan"} -    .SEM=copy_file ${input:FILE} ${output:AUTO_DST} ${output;noauto:NOAUTO_DST} +    .SEM=copy_file ${input:FILE} ${output:AUTO_DST} ${output;noauto:NOAUTO_DST}   }  ### @usage: COPY_FILE(File Destination [AUTO] [OUTPUT_INCLUDES Deps...]) @@ -5466,7 +5466,7 @@ macro _COPY_FILE_IMPL(FILE, AUTO_DST="", NOAUTO_DST="", OUTPUT_INCLUDES[], REQUI  ### mention it in SRCS under new name (or specify AUTO boolean parameter) for further processing.  macro COPY_FILE(File, Destination, AUTO?"AUTO_DST":"NOAUTO_DST", OUTPUT_INCLUDES[], REQUIREMENTS[]) {      .CMD=$_COPY_FILE_IMPL($File $AUTO $Destination OUTPUT_INCLUDES $OUTPUT_INCLUDES REQUIREMENTS $REQUIREMENTS) -    .SEM=$_COPY_FILE_IMPL($File $AUTO $Destination OUTPUT_INCLUDES $OUTPUT_INCLUDES REQUIREMENTS $REQUIREMENTS) +    .SEM=$_COPY_FILE_IMPL($File $AUTO $Destination OUTPUT_INCLUDES $OUTPUT_INCLUDES REQUIREMENTS $REQUIREMENTS)   }  ### @usage: COPY_FILE_WITH_CONTEXT(FILE DEST [AUTO] [OUTPUT_INCLUDES DEPS...]) @@ -5478,7 +5478,7 @@ macro COPY_FILE_WITH_CONTEXT(FILE, DEST, AUTO?"AUTO":"", OUTPUT_INCLUDES[]) {  }  macro _BUNDLE_TARGET(Target, Destination) { -    .CMD=$MOVE_FILE ${result:Target} ${output;noauto:Destination} ${kv;hide:"p BN"} ${kv;hide:"pc light-cyan"} $VCS_INFO_DISABLE_CACHE__NO_UID__ +    .CMD=$MOVE_FILE ${result:Target} ${output;noauto:Destination} ${kv;hide:"p BN"} ${kv;hide:"pc light-cyan"} $VCS_INFO_DISABLE_CACHE__NO_UID__   }  ### @usage: TIMEOUT(TIMEOUT) @@ -5575,7 +5575,7 @@ macro SIZE(Type) {  ### This macro doesn't place all file into Out, it emits #include<Src>... Use the for C++ source files only.  ### You should specify file name with the extension as Out. Futher processing will be done according this extension.  macro JOIN_SRCS(Out, Src...) { -    .CMD=$YMAKE_PYTHON ${input:"build/scripts/gen_join_srcs.py"} ${output:Out} --ya-start-command-file ${input;rootrel:Src} --ya-end-command-file ${output_include;hide:Src} ${kv;hide:"p JS"} ${kv;hide:"pc magenta"} +    .CMD=$YMAKE_PYTHON ${input:"build/scripts/gen_join_srcs.py"} ${output:Out} --ya-start-command-file ${input;rootrel:Src} --ya-end-command-file ${output_include;hide:Src} ${kv;hide:"p JS"} ${kv;hide:"pc magenta"}       .SEM=target_joined_source $Out ${input:Src} ${output;hide;suf=.o:Out} && modules_required yandex_common.cmake      _CONDITIONAL_SRCS($TIDY_VALUE $Src)  } @@ -5586,7 +5586,7 @@ macro JOIN_SRCS(Out, Src...) {  ### This macro doesn't place all file into Out, it emits #include<Src>... Use the for C++ source files only.  ### You should specify file name with the extension as Out. Further processing will be done according to this extension.  macro JOIN_SRCS_GLOBAL(Out, Src...) { -    .CMD=$YMAKE_PYTHON ${input:"build/scripts/gen_join_srcs.py"} ${output;noauto:Out} --ya-start-command-file ${input;rootrel:Src} --ya-end-command-file ${output_include;hide:Src} ${kv;hide:"p JS"} ${kv;hide:"pc magenta"} +    .CMD=$YMAKE_PYTHON ${input:"build/scripts/gen_join_srcs.py"} ${output;noauto:Out} --ya-start-command-file ${input;rootrel:Src} --ya-end-command-file ${output_include;hide:Src} ${kv;hide:"p JS"} ${kv;hide:"pc magenta"}       SRCS(GLOBAL $Out)  } @@ -5596,7 +5596,7 @@ macro JOIN_SRCS_GLOBAL(Out, Src...) {  ### This macro places all files into single file, so will work with any sources.  ### You should specify file name with the extension as Out. Further processing will be done according to this extension.  macro FLAT_JOIN_SRCS_GLOBAL(Out, Src...) { -    .CMD=$YMAKE_PYTHON ${input:"build/scripts/fs_tools.py"} cat ${output;noauto:Out} --ya-start-command-file ${input:Src} --ya-end-command-file ${output_include;hide:Src} ${kv;hide:"p JS"} ${kv;hide:"pc magenta"} +    .CMD=$YMAKE_PYTHON ${input:"build/scripts/fs_tools.py"} cat ${output;noauto:Out} --ya-start-command-file ${input:Src} --ya-end-command-file ${output_include;hide:Src} ${kv;hide:"p JS"} ${kv;hide:"pc magenta"}       SRCS(GLOBAL $Out)  } @@ -5702,13 +5702,13 @@ macro NO_CPU_CHECK() {  ### @usage: ADDINCLSELF()  ###  ### The macro adds the -I<project source path> flag to the source compilation flags of the current project. -macro ADDINCLSELF(FOR="") { -    when($FOR) { -        ADDINCL+=FOR $FOR ${MODDIR} -    } -    otherwise { -        ADDINCL+=${MODDIR} -    } +macro ADDINCLSELF(FOR="") {  +    when($FOR) {  +        ADDINCL+=FOR $FOR ${MODDIR}  +    }  +    otherwise {  +        ADDINCL+=${MODDIR}  +    }   }  COMPILE_OUT_SUFFIX= @@ -5870,7 +5870,7 @@ macro _SRC("cfgproto", SRC, SRCFLAGS...) {  macro _SRC("pyx", SRC, SRCFLAGS...) {      # Copy-paste from BUILDWITH_CYTHON      .CMD=$RUN_CYTHON_SCRIPT $CYTHON_OPTIONS --cplus ${CYTHON_CPP_OUTPUT_INCLUDES} ${pre=-I:_CYTHON__INCLUDE} ${input:SRC} -o ${output;tobindir:SRC.cpp} $CYTHON_OUTPUT_INCLUDES ${SRCFLAGS} ${requirements;hide:PY_REQUIREMENTS} ${kv;hide:"p CY"} ${kv;hide:"pc yellow"} -    .ADDINCL=FOR cython contrib/tools/cython/Cython/Includes +    .ADDINCL=FOR cython contrib/tools/cython/Cython/Includes   }  # tag:src-processing @@ -6276,7 +6276,7 @@ macro SRC_CPP_AVX2(FILE, FLAGS...) {  ### Generates .cpp file from .pyx.  macro BUILDWITH_CYTHON_CPP(Src, Options...) {      .CMD=$RUN_CYTHON_SCRIPT $CYTHON_OPTIONS ${Options} --cplus ${CYTHON_CPP_OUTPUT_INCLUDES} ${pre=-I:_CYTHON__INCLUDE} ${input:Src} -o ${output;tobindir:Src.cpp} $CYTHON_OUTPUT_INCLUDES ${requirements;hide:PY_REQUIREMENTS} ${kv;hide:"p CY"} ${kv;hide:"pc yellow"} -    ADDINCL(FOR cython contrib/tools/cython/Cython/Includes) +    ADDINCL(FOR cython contrib/tools/cython/Cython/Includes)   }  # tag:python-processing tag:cython tag:internal @@ -6286,7 +6286,7 @@ macro BUILDWITH_CYTHON_CPP(Src, Options...) {  ### If Dep changes the .cpp file will be re-generated.  macro _BUILDWITH_CYTHON_CPP_DEP(Src, Dep, Options...) {      .CMD=$RUN_CYTHON_SCRIPT $CYTHON_OPTIONS ${Options} --cplus ${CYTHON_CPP_OUTPUT_INCLUDES} ${pre=-I:_CYTHON__INCLUDE} ${input:Src} ${input;hide:Dep} -o ${output;tobindir:Src.cpp} $CYTHON_OUTPUT_INCLUDES ${requirements;hide:PY_REQUIREMENTS} ${kv;hide:"p CY"} ${kv;hide:"pc yellow"} -    ADDINCL(FOR cython contrib/tools/cython/Cython/Includes) +    ADDINCL(FOR cython contrib/tools/cython/Cython/Includes)   }  # tag:python-processing tag:cython @@ -6295,7 +6295,7 @@ macro _BUILDWITH_CYTHON_CPP_DEP(Src, Dep, Options...) {  ### Generates .c file from .pyx.  macro BUILDWITH_CYTHON_C(Src, Options...) {      .CMD=$RUN_CYTHON_SCRIPT $CYTHON_OPTIONS ${Options} ${pre=-I:_CYTHON__INCLUDE} ${input:Src} -o ${output;tobindir:Src.c} $CYTHON_OUTPUT_INCLUDES ${requirements;hide:PY_REQUIREMENTS} ${kv;hide:"p CY"} ${kv;hide:"pc yellow"} -    ADDINCL(FOR cython contrib/tools/cython/Cython/Includes) +    ADDINCL(FOR cython contrib/tools/cython/Cython/Includes)   }  # tag:python-processing tag:cython tag:internal @@ -6305,7 +6305,7 @@ macro BUILDWITH_CYTHON_C(Src, Options...) {  ### If Dep changes the .c file will be re-generated.  macro _BUILDWITH_CYTHON_C_DEP(Src, Dep, Options...) {      .CMD=$RUN_CYTHON_SCRIPT $CYTHON_OPTIONS ${Options} ${pre=-I:_CYTHON__INCLUDE} ${input:Src} ${input;hide:Dep} -o ${output;tobindir:Src.c} $CYTHON_OUTPUT_INCLUDES ${requirements;hide:PY_REQUIREMENTS} ${kv;hide:"p CY"} ${kv;hide:"pc yellow"} -    ADDINCL(FOR cython contrib/tools/cython/Cython/Includes) +    ADDINCL(FOR cython contrib/tools/cython/Cython/Includes)   }  # tag:python-processing tag:cython tag:internal @@ -6314,7 +6314,7 @@ macro _BUILDWITH_CYTHON_C_DEP(Src, Dep, Options...) {  ### BUILDWITH_CYTHON_C without .pyx infix and with cdef public .h file.  macro _BUILDWITH_CYTHON_C_H(Src, Dep, Options...) {      .CMD=$RUN_CYTHON_SCRIPT $CYTHON_OPTIONS ${Options} ${pre=-I:_CYTHON__INCLUDE} ${input:Src} ${input;hide:Dep} -o ${output;noext;tobindir:Src.c} ${output;hide;addincl;noext;tobindir:Src.h} $CYTHON_OUTPUT_INCLUDES ${requirements;hide:PY_REQUIREMENTS} ${kv;hide:"p CY"} ${kv;hide:"pc yellow"} -    ADDINCL(FOR cython contrib/tools/cython/Cython/Includes) +    ADDINCL(FOR cython contrib/tools/cython/Cython/Includes)   }  # tag:python-processing tag:cython tag:internal @@ -6323,7 +6323,7 @@ macro _BUILDWITH_CYTHON_C_H(Src, Dep, Options...) {  ### BUILDWITH_CYTHON_C_H with cdef api _api.h file.  macro _BUILDWITH_CYTHON_C_API_H(Src, Dep, Options...) {      .CMD=$RUN_CYTHON_SCRIPT $CYTHON_OPTIONS ${Options} ${pre=-I:_CYTHON__INCLUDE} ${input:Src} ${input;hide:Dep} -o ${output;noext;tobindir:Src.c} ${output;hide;addincl;noext;tobindir:Src.h} ${output;hide;addincl;noext;defext=_api.h;tobindir:Src} $CYTHON_OUTPUT_INCLUDES ${requirements;hide:PY_REQUIREMENTS} ${kv;hide:"p CY"} ${kv;hide:"pc yellow"} -    ADDINCL(FOR cython contrib/tools/cython/Cython/Includes) +    ADDINCL(FOR cython contrib/tools/cython/Cython/Includes)   }  # tag:python-processing tag:internal @@ -6333,7 +6333,7 @@ macro _BUILDWITH_CYTHON_C_API_H(Src, Dep, Options...) {  ### provides DstSubPrefix_swg python module.  macro _SWIG_PYTHON_CPP(Src, DstSubPrefix) {      .CMD=$_SWIG_TOOL -I$ARCADIA_BUILD_ROOT -I$ARCADIA_ROOT -I$_SWIG_LIBRARY_ABS/python -I$_SWIG_LIBRARY_ABS -c++ -python -module ${nopath:DstSubPrefix} -interface ${nopath;suf=_swg:DstSubPrefix} -o ${output;suf=.swg.cpp:DstSubPrefix} ${input:Src} ${output;noauto;hide;suf=.py:DstSubPrefix} ${kv;hide:"p SW"} ${kv;hide:"pc yellow"} -    ADDINCL(FOR swig $_SWIG_LIBRARY/python FOR swig $_SWIG_LIBRARY) +    ADDINCL(FOR swig $_SWIG_LIBRARY/python FOR swig $_SWIG_LIBRARY)   }  # tag:python-processing tag:internal @@ -6342,7 +6342,7 @@ macro _SWIG_PYTHON_CPP(Src, DstSubPrefix) {  ### Like _SWIG_PYTHON_CPP but generate DstSubPrefix_swg.c.  macro _SWIG_PYTHON_C(Src, DstSubPrefix) {      .CMD=$_SWIG_TOOL -I$ARCADIA_BUILD_ROOT -I$ARCADIA_ROOT -I$_SWIG_LIBRARY_ABS/python -I$_SWIG_LIBRARY_ABS -python -module ${nopath:DstSubPrefix} -interface ${nopath;suf=_swg:DstSubPrefix} -o ${output;suf=.swg.c:DstSubPrefix} ${input:Src} ${output;noauto;hide;suf=.py:DstSubPrefix} ${kv;hide:"p SW"} ${kv;hide:"pc yellow"} -    ADDINCL(FOR swig $_SWIG_LIBRARY/python FOR swig $_SWIG_LIBRARY) +    ADDINCL(FOR swig $_SWIG_LIBRARY/python FOR swig $_SWIG_LIBRARY)   }  ### @usage: BUILDWITH_RAGEL6(Src Options...) @@ -7164,7 +7164,7 @@ CLANG_ROOT=$CLANG_RESOURCE_GLOBAL  ###  ### More information will be available (eventually:) here: https://wiki.yandex-team.ru/Users/denisk/codegenerator/  macro GENERATED_SRCS(PARSE_META_FROM{input}[], OUTPUT_INCLUDES[], OPTIONS[], TEMPLATES...) { -    .CMD=${tool:"market/tools/code_generator"} --cpp-file ${input:PARSE_META_FROM} --templates-dir / ${ARCADIA_ROOT} --templates ${input:TEMPLATES.markettemplate} --generated-files ${output:TEMPLATES} ${output_include;hide:OUTPUT_INCLUDES} ${output_include;hide:PARSE_META_FROM} --arcadia-root ${ARCADIA_ROOT} --arcadia-build-root ${ARCADIA_BUILD_ROOT} --clang-root $CLANG_ROOT ${OPTIONS} -- $C_FLAGS_PLATFORM $CXXFLAGS ${pre=-I:_C__INCLUDE} -std=c++17 -Wno-unknown-warning-option -Wno-unused-parameter -Wno-undefined-inline -Wno-undefined-internal -Wno-unused-function $LLVM_OPTS -fno-lto +    .CMD=${tool:"market/tools/code_generator"} --cpp-file ${input:PARSE_META_FROM} --templates-dir / ${ARCADIA_ROOT} --templates ${input:TEMPLATES.markettemplate} --generated-files ${output:TEMPLATES} ${output_include;hide:OUTPUT_INCLUDES} ${output_include;hide:PARSE_META_FROM} --arcadia-root ${ARCADIA_ROOT} --arcadia-build-root ${ARCADIA_BUILD_ROOT} --clang-root $CLANG_ROOT ${OPTIONS} -- $C_FLAGS_PLATFORM $CXXFLAGS ${pre=-I:_C__INCLUDE} -std=c++17 -Wno-unknown-warning-option -Wno-unused-parameter -Wno-undefined-inline -Wno-undefined-internal -Wno-unused-function $LLVM_OPTS -fno-lto       PEERDIR(build/platform/clang)  } @@ -7366,10 +7366,10 @@ macro RUN_ANTLR4_GO(GRAMMAR, OUTPUT_INCLUDES[], LISTENER?"GRAMMAR":"_ANTLR4_EMPT  }  # tag:cpp-specific -macro CPP_ADDINCL(Dirs...) { -    ADDINCL($Dirs) -} - +macro CPP_ADDINCL(Dirs...) {  +    ADDINCL($Dirs)  +}  +   # tag:internal  _WHOLE_ARCHIVE_PEERS_VALUE=  ### @usage: WHOLE_ARCHIVE(dirnames...) # internal @@ -7423,17 +7423,17 @@ macro TASKLET_REG_EXT(Name, Lang, Impl, Wrapper, Includes...) {  }  # tag:cpp-specific -_CPP_PROTO_MODULE_PREFIX= -_CPP_PROTO_MODULE_SUFFIX= -when ($MSVC == "yes" || $CYGWIN == "yes") { -    _CPP_PROTO_MODULE_PREFIX= -    _CPP_PROTO_MODULE_SUFFIX=.lib -} -otherwise { -    _CPP_PROTO_MODULE_PREFIX=lib -    _CPP_PROTO_MODULE_SUFFIX=.a -} - +_CPP_PROTO_MODULE_PREFIX=  +_CPP_PROTO_MODULE_SUFFIX=  +when ($MSVC == "yes" || $CYGWIN == "yes") {  +    _CPP_PROTO_MODULE_PREFIX=  +    _CPP_PROTO_MODULE_SUFFIX=.lib  +}  +otherwise {  +    _CPP_PROTO_MODULE_PREFIX=lib  +    _CPP_PROTO_MODULE_SUFFIX=.a  +}  +   ### @usage: EXPOSE(OutputsToExport...)  ###  ### Allows to mark outputs of macro command as unused in the current module but intended @@ -7489,9 +7489,9 @@ multimodule PROTO_LIBRARY {              _OK=no          }          ASSERT(_OK BUILD_PROTO_AS_EVLOG and USE_VANILLA_PROTOC are incompatible yet) - -        MODULE_SUFFIX=$_CPP_PROTO_MODULE_SUFFIX -        MODULE_PREFIX=$_CPP_PROTO_MODULE_PREFIX +  +        MODULE_SUFFIX=$_CPP_PROTO_MODULE_SUFFIX  +        MODULE_PREFIX=$_CPP_PROTO_MODULE_PREFIX           when ($_COMMON_GOOGLE_APIS != "None") {              PEERDIR += contrib/libs/googleapis-common-protos @@ -7517,36 +7517,36 @@ multimodule PROTO_LIBRARY {      module PY_PROTO: PY2_LIBRARY {          .ALIASES=SRCS=PY_SRCS -        .ALLOWED=OPTIMIZE_PY_PROTOS NO_OPTIMIZE_PY_PROTOS -        .PEERDIRSELF=CPP_PROTO +        .ALLOWED=OPTIMIZE_PY_PROTOS NO_OPTIMIZE_PY_PROTOS  +        .PEERDIRSELF=CPP_PROTO           .SEM=ignored          SET(PEERDIR_TAGS PY2 PY_PROTO)          ENABLE(PY_PROTO) -        OPTIMIZE_PY_PROTOS() +        OPTIMIZE_PY_PROTOS()           OBJ_SUF=.py2 -        # Can not use NO_LINT(), because is not allowed outside of contrib directory +        # Can not use NO_LINT(), because is not allowed outside of contrib directory           SET(LINT_LEVEL_VALUE none_internal) - +           when ($_COMMON_GOOGLE_APIS != "None") {              PEERDIR += contrib/libs/googleapis-common-protos          } - -        _IGNORE_SELF_PEERS= -        _CPP_PROTO_LIBRARY=${MODDIR}/$_CPP_PROTO_MODULE_PREFIX$REALPRJNAME$_CPP_PROTO_MODULE_SUFFIX -        when ($OPTIMIZE_PY_PROTOS_FLAG == "no") { -            _IGNORE_PEERDIRSELF=CPP_PROTO -        } -        SET_APPEND(_WHOLE_ARCHIVE_LIBS_VALUE_GLOBAL $_CPP_PROTO_LIBRARY) +  +        _IGNORE_SELF_PEERS=  +        _CPP_PROTO_LIBRARY=${MODDIR}/$_CPP_PROTO_MODULE_PREFIX$REALPRJNAME$_CPP_PROTO_MODULE_SUFFIX  +        when ($OPTIMIZE_PY_PROTOS_FLAG == "no") {  +            _IGNORE_PEERDIRSELF=CPP_PROTO  +        }  +        SET_APPEND(_WHOLE_ARCHIVE_LIBS_VALUE_GLOBAL $_CPP_PROTO_LIBRARY)       }      module PY3_PROTO: PY3_LIBRARY {          .ALIASES=SRCS=PY_SRCS -        .ALLOWED=OPTIMIZE_PY_PROTOS NO_OPTIMIZE_PY_PROTOS -        .PEERDIRSELF=CPP_PROTO +        .ALLOWED=OPTIMIZE_PY_PROTOS NO_OPTIMIZE_PY_PROTOS  +        .PEERDIRSELF=CPP_PROTO           .SEM=ignored          SET(PEERDIR_TAGS PY3 PY3_PROTO)          ENABLE(PY3_PROTO) -        OPTIMIZE_PY_PROTOS() +        OPTIMIZE_PY_PROTOS()           when ($MSVC == "yes" || $CYGWIN == "yes") {              MODULE_PREFIX=py3          } @@ -7554,19 +7554,19 @@ multimodule PROTO_LIBRARY {              MODULE_PREFIX=libpy3          }          OBJ_SUF=.py3 -        # Can not use NO_LINT(), because is not allowed outside of contrib directory +        # Can not use NO_LINT(), because is not allowed outside of contrib directory           SET(LINT_LEVEL_VALUE none_internal) - +           when ($_COMMON_GOOGLE_APIS != "None") {              PEERDIR += contrib/libs/googleapis-common-protos          } - -        _IGNORE_SELF_PEERS= -        _CPP_PROTO_LIBRARY=${MODDIR}/$_CPP_PROTO_MODULE_PREFIX$REALPRJNAME$_CPP_PROTO_MODULE_SUFFIX -        when ($OPTIMIZE_PY_PROTOS_FLAG == "no") { -            _IGNORE_PEERDIRSELF=CPP_PROTO -        } -        SET_APPEND(_WHOLE_ARCHIVE_LIBS_VALUE_GLOBAL $_CPP_PROTO_LIBRARY) +  +        _IGNORE_SELF_PEERS=  +        _CPP_PROTO_LIBRARY=${MODDIR}/$_CPP_PROTO_MODULE_PREFIX$REALPRJNAME$_CPP_PROTO_MODULE_SUFFIX  +        when ($OPTIMIZE_PY_PROTOS_FLAG == "no") {  +            _IGNORE_PEERDIRSELF=CPP_PROTO  +        }  +        SET_APPEND(_WHOLE_ARCHIVE_LIBS_VALUE_GLOBAL $_CPP_PROTO_LIBRARY)       }      module GO_PROTO: GO_LIBRARY { @@ -7787,7 +7787,7 @@ module JSRC_LIBRARY: _BARE_UNIT {      SET(MODULE_SUFFIX .jsrc)      SET(DONT_RESOLVE_INCLUDES yes)      SET(NEED_PLATFORM_PEERDIRS no) -    SET(MODULE_LANG JAVA) +    SET(MODULE_LANG JAVA)       NO_RUNTIME()  } @@ -8387,7 +8387,7 @@ module _GO_BASE_UNIT: _BASE_UNIT {      SET(COVERAGE_FLAGS)      SET(EXTRA_OUTPUT) -    SET(MODULE_LANG GO) +    SET(MODULE_LANG GO)       PEERDIR(build/external_resources/go_tools) @@ -8487,11 +8487,11 @@ module _GO_BASE_UNIT: _BASE_UNIT {      when ($OS_DARWIN) {          PEERDIR+=build/external_resources/go_fake_xcrun -        GO_EXTLD = ++extld $_GO_EXTLD ++extldflags $_GO_SONAME $LD_SDK_VERSION -undefined dynamic_lookup $C_FLAGS_PLATFORM --sysroot=$MACOS_SDK_RESOURCE_GLOBAL --start-wa ${rootrel;ext=.a:SRCS_GLOBAL} --end-wa ${rootrel;ext=.o:SRCS_GLOBAL} --cgo-peers $LDFLAGS $LDFLAGS_GLOBAL $OBJADDE $OBJADDE_LIB $GO_LDFLAGS_GLOBAL $C_LIBRARY_PATH $C_SYSTEM_LIBRARIES_INTERCEPT $C_SYSTEM_LIBRARIES $STRIP_FLAG +        GO_EXTLD = ++extld $_GO_EXTLD ++extldflags $_GO_SONAME $LD_SDK_VERSION -undefined dynamic_lookup $C_FLAGS_PLATFORM --sysroot=$MACOS_SDK_RESOURCE_GLOBAL --start-wa ${rootrel;ext=.a:SRCS_GLOBAL} --end-wa ${rootrel;ext=.o:SRCS_GLOBAL} --cgo-peers $LDFLAGS $LDFLAGS_GLOBAL $OBJADDE $OBJADDE_LIB $GO_LDFLAGS_GLOBAL $C_LIBRARY_PATH $C_SYSTEM_LIBRARIES_INTERCEPT $C_SYSTEM_LIBRARIES $STRIP_FLAG           CGO2_LDFLAGS_VALUE += $LD_SDK_VERSION -undefined dynamic_lookup -nodefaultlibs -lc      }      elsewhen ($OS_LINUX) { -        GO_EXTLD = ++extld $_GO_EXTLD ++extldflags $_GO_SONAME $C_FLAGS_PLATFORM --sysroot=$OS_SDK_ROOT_RESOURCE_GLOBAL -Wl,--whole-archive ${rootrel;ext=.a:SRCS_GLOBAL} -Wl,--no-whole-archive ${rootrel;ext=.o:SRCS_GLOBAL} --cgo-peers $LDFLAGS $LDFLAGS_GLOBAL $OBJADDE $OBJADDE_LIB $GO_LDFLAGS_GLOBAL $C_LIBRARY_PATH $C_SYSTEM_LIBRARIES_INTERCEPT $C_SYSTEM_LIBRARIES $STRIP_FLAG +        GO_EXTLD = ++extld $_GO_EXTLD ++extldflags $_GO_SONAME $C_FLAGS_PLATFORM --sysroot=$OS_SDK_ROOT_RESOURCE_GLOBAL -Wl,--whole-archive ${rootrel;ext=.a:SRCS_GLOBAL} -Wl,--no-whole-archive ${rootrel;ext=.o:SRCS_GLOBAL} --cgo-peers $LDFLAGS $LDFLAGS_GLOBAL $OBJADDE $OBJADDE_LIB $GO_LDFLAGS_GLOBAL $C_LIBRARY_PATH $C_SYSTEM_LIBRARIES_INTERCEPT $C_SYSTEM_LIBRARIES $STRIP_FLAG           CGO2_LDFLAGS_VALUE += -Wl,--unresolved-symbols=ignore-all -nodefaultlibs -lc      }      otherwise { @@ -8823,13 +8823,13 @@ multimodule PY23_NATIVE_LIBRARY {          .RESTRICTED=PY_SRCS USE_PYTHON2 USE_PYTHON3 PYTHON3_ADDINCL          OBJ_SUF=.py2          PYTHON2_ADDINCL() -        SET(MODULE_LANG PY2) +        SET(MODULE_LANG PY2)       }      module PY3: LIBRARY {          .RESTRICTED=PY_SRCS USE_PYTHON2 USE_PYTHON3          .ALIASES=PYTHON2_ADDINCL=PYTHON3_ADDINCL          PYTHON3_ADDINCL() -        SET(MODULE_LANG PY3) +        SET(MODULE_LANG PY3)           when ($MSVC == "yes" || $CYGWIN == "yes") {              MODULE_PREFIX=py3c          } @@ -8989,7 +8989,7 @@ macro COMPILE_SWIFT_MODULE(SRCS{input}[], BRIDGE_HEADER{input}="", Flags...) {      # swift core libraries      LDFLAGS($SWIFT_LD_FLAGS) -    .CMD=$YMAKE_PYTHON ${input:"build/scripts/gen_swiftc_output_map.py"} $(SOURCE_ROOT) $(BUILD_ROOT) $BINDIR/swift_output_map.json ${input:SRCS} && $SWIFT_COMPILER -c $SWIFT_FLAGS_PLATFORM $Flags $SWIFT_BRIDGE_HEADER ${pre=-Xcc -I:_C__INCLUDE} ${input:SRCS} -emit-objc-header -emit-objc-header-path ${output;suf=-Swift.h:REALPRJNAME} -emit-module -module-name $REALPRJNAME -output-file-map $BINDIR/swift_output_map.json ${output;hide;suf=.o:SRCS} +    .CMD=$YMAKE_PYTHON ${input:"build/scripts/gen_swiftc_output_map.py"} $(SOURCE_ROOT) $(BUILD_ROOT) $BINDIR/swift_output_map.json ${input:SRCS} && $SWIFT_COMPILER -c $SWIFT_FLAGS_PLATFORM $Flags $SWIFT_BRIDGE_HEADER ${pre=-Xcc -I:_C__INCLUDE} ${input:SRCS} -emit-objc-header -emit-objc-header-path ${output;suf=-Swift.h:REALPRJNAME} -emit-module -module-name $REALPRJNAME -output-file-map $BINDIR/swift_output_map.json ${output;hide;suf=.o:SRCS}   }  TEST_TOOL_HOST_LOCAL= @@ -9085,54 +9085,54 @@ macro SDBUS_CPP_PROXY(File) {      .CMD=${tool:"contrib/libs/sdbus-cpp/tools/xml2cpp-codegen"} --proxy=${output;nopath;noext:File.proxy.h} ${input:File}      .PEERDIR=contrib/libs/sdbus-cpp  } - - +  +   # tag:python-specific -macro _PY_SSQLS_SRC(EXT, SRC, SRCFLAGS...) { -    #generic macro -} - +macro _PY_SSQLS_SRC(EXT, SRC, SRCFLAGS...) {  +    #generic macro  +}  +   # tag:python-specific -macro _PY_SSQLS_SRC("ssqls", SRC, SRCFLAGS...) { -    .CMD=${tool:"metrika/core/tools/ssqls"} ${input;notransformbuilddir:SRC} -S $ARCADIA_ROOT -B $ARCADIA_BUILD_ROOT -L "python" -D $MODDIR $SRCFLAGS ${output;tobindir;noext;hide;pre=autogenerated/$MODDIR/:SRC.py} -} - +macro _PY_SSQLS_SRC("ssqls", SRC, SRCFLAGS...) {  +    .CMD=${tool:"metrika/core/tools/ssqls"} ${input;notransformbuilddir:SRC} -S $ARCADIA_ROOT -B $ARCADIA_BUILD_ROOT -L "python" -D $MODDIR $SRCFLAGS ${output;tobindir;noext;hide;pre=autogenerated/$MODDIR/:SRC.py}  +}  +   # tag:python-specific -macro _PY_SSQLS_SRCS(Srcs...) { -    foreach(Src: $Srcs) { -        _PY_SSQLS_SRC(${lastext:Src} $Src) -    } -} - +macro _PY_SSQLS_SRCS(Srcs...) {  +    foreach(Src: $Srcs) {  +        _PY_SSQLS_SRC(${lastext:Src} $Src)  +    }  +}  +   # tag:python-specific -macro PY_SSQLS_SRCS(Srcs...) { -    _PY_SSQLS_SRCS(KEEP_DIR_STRUCT $Srcs) -    PY_SRCS(${noext;pre=autogenerated/$MODDIR/:Srcs.py}) -} - +macro PY_SSQLS_SRCS(Srcs...) {  +    _PY_SSQLS_SRCS(KEEP_DIR_STRUCT $Srcs)  +    PY_SRCS(${noext;pre=autogenerated/$MODDIR/:Srcs.py})  +}  +   # tag:python-specific -macro _PY_ENUM_SERIALIZATION_TO_JSON(File) { -    .CMD=$ENUM_PARSER_TOOL ${input:File} --output ${output;chksum;noext;suf=.generated.h:File} --json-output ${output;noext:File.json} ${kv;hide:"p EN"} ${kv;hide:"pc yellow"} -} - +macro _PY_ENUM_SERIALIZATION_TO_JSON(File) {  +    .CMD=$ENUM_PARSER_TOOL ${input:File} --output ${output;chksum;noext;suf=.generated.h:File} --json-output ${output;noext:File.json} ${kv;hide:"p EN"} ${kv;hide:"pc yellow"}  +}  +   # tag:python-specific -macro _PY_ENUM_SERIALIZATION_TO_PY(File) { -    .CMD=${tool:"metrika/core/tools/python_enum_generator"} ${input;noext:File.json} -D ${MODDIR} --output ${output;noext:File.py} ${kv;hide:"p EN"} ${kv;hide:"pc yellow"} -} - +macro _PY_ENUM_SERIALIZATION_TO_PY(File) {  +    .CMD=${tool:"metrika/core/tools/python_enum_generator"} ${input;noext:File.json} -D ${MODDIR} --output ${output;noext:File.py} ${kv;hide:"p EN"} ${kv;hide:"pc yellow"}  +}  +   # tag:metrika -multimodule SSQLS_LIBRARY { -    module CPP_SSQLS : LIBRARY { -        .ALIASES=ENUMS_SERIALIZATION=CPP_ENUMS_SERIALIZATION -        SET(PEERDIR_TAGS CPP_SSQLS) +multimodule SSQLS_LIBRARY {  +    module CPP_SSQLS : LIBRARY {  +        .ALIASES=ENUMS_SERIALIZATION=CPP_ENUMS_SERIALIZATION  +        SET(PEERDIR_TAGS CPP_SSQLS)           PEERDIR(metrika/core/libs/appmetrica/types metrika/core/libs/types)          ADDINCL(GLOBAL ${ARCADIA_BUILD_ROOT}/metrika/core/common_tables/include) -    } -    module PY3_SSQLS : PY3_LIBRARY { -        .ALIASES=SRCS=PY_SSQLS_SRCS ENUMS_SERIALIZATION=PY_ENUMS_SERIALIZATION -        SET(PEERDIR_TAGS PY3 PY3_SSQLS) -    } -} +    }  +    module PY3_SSQLS : PY3_LIBRARY {  +        .ALIASES=SRCS=PY_SSQLS_SRCS ENUMS_SERIALIZATION=PY_ENUMS_SERIALIZATION  +        SET(PEERDIR_TAGS PY3 PY3_SSQLS)  +    }  +}   macro NGINX_MODULES(Modules...) {      PEERDIR(${Modules}) diff --git a/build/ymake_conf.py b/build/ymake_conf.py index 30219eb85ed..0beb55b3a9e 100755 --- a/build/ymake_conf.py +++ b/build/ymake_conf.py @@ -2045,11 +2045,11 @@ class LD(Linker):          soname_flag = '-Wl,{option},${{_SONAME}}'.format(option=self.soname_option)          shared_flag = '-shared'          exec_shared_flag = '-pie -fPIE -Wl,--unresolved-symbols=ignore-all -rdynamic' if self.target.is_linux else '' -        if self.whole_archive: -            srcs_globals = self.whole_archive + ' ${rootrel;ext=.a:SRCS_GLOBAL} ' + self.no_whole_archive \ -            + ' ${rootrel;ext=.o:SRCS_GLOBAL} ${rootrel;ext=.supp:SRCS_GLOBAL}' -        else: -            srcs_globals = '--start-wa ${rootrel;ext=.a:SRCS_GLOBAL} --end-wa ${rootrel;ext=.o:SRCS_GLOBAL} ${rootrel;ext=.supp:SRCS_GLOBAL}' +        if self.whole_archive:  +            srcs_globals = self.whole_archive + ' ${rootrel;ext=.a:SRCS_GLOBAL} ' + self.no_whole_archive \  +            + ' ${rootrel;ext=.o:SRCS_GLOBAL} ${rootrel;ext=.supp:SRCS_GLOBAL}'  +        else:  +            srcs_globals = '--start-wa ${rootrel;ext=.a:SRCS_GLOBAL} --end-wa ${rootrel;ext=.o:SRCS_GLOBAL} ${rootrel;ext=.supp:SRCS_GLOBAL}'           ld_env_style = '${cwd:ARCADIA_BUILD_ROOT} $TOOLCHAIN_ENV ${kv;hide:"p LD"} ${requirements;hide:LD_REQUIREMENTS} ${kv;hide:"pc light-blue"} ${kv;hide:"show_out"}' @@ -2152,23 +2152,23 @@ class LD(Linker):              archiver = '$YMAKE_PYTHON ${input:"build/scripts/link_lib.py"} ${quo:AR_TOOL} $AR_TYPE %s $ARCADIA_BUILD_ROOT %s' % (self.llvm_ar_format, self.ar_plugin or 'None')              # Static Library              emit('LINK_LIB', '$GENERATE_MF &&', archiver, '$TARGET', tail_link_lib) -        emit('GLOBAL_LINK_LIB', archiver, '$GLOBAL_TARGET', tail_link_lib) +        emit('GLOBAL_LINK_LIB', archiver, '$GLOBAL_TARGET', tail_link_lib)           # "Fat Object" : pre-linked global objects and static library with all dependencies -        def emit_link_fat_obj(cmd_name, need_wa_option, *extended_flags): +        def emit_link_fat_obj(cmd_name, need_wa_option, *extended_flags):               prefix = ['$GENERATE_MF && $GENERATE_VCS_C_INFO_NODEP &&',                        '$YMAKE_PYTHON ${input:"build/scripts/link_fat_obj.py"} --build-root $ARCADIA_BUILD_ROOT']              globals_libs = srcs_globals if need_wa_option else '${rootrel;ext=.a:SRCS_GLOBAL} ${rootrel;ext=.o:SRCS_GLOBAL}'              suffix = [arch_flag, -                      '-Ya,input $AUTO_INPUT $VCS_C_OBJ -Ya,global_srcs', globals_libs, '-Ya,peers $PEERS', -                      '-Ya,linker $CXX_COMPILER $LDFLAGS_GLOBAL $C_FLAGS_PLATFORM', self.ld_sdk, '-Ya,archiver', archiver, +                      '-Ya,input $AUTO_INPUT $VCS_C_OBJ -Ya,global_srcs', globals_libs, '-Ya,peers $PEERS',  +                      '-Ya,linker $CXX_COMPILER $LDFLAGS_GLOBAL $C_FLAGS_PLATFORM', self.ld_sdk, '-Ya,archiver', archiver,                         '$TOOLCHAIN_ENV ${kv;hide:"p LD"} ${requirements;hide:LD_REQUIREMENTS} ${kv;hide:"pc light-blue"} ${kv;hide:"show_out"}']              emit(cmd_name, *(prefix + list(extended_flags) + suffix))          # TODO(somov): Проверить, не нужны ли здесь все остальные флаги компоновки (LDFLAGS и т. д.). -        emit_link_fat_obj('LINK_FAT_OBJECT', True, '--obj=$TARGET', '--lib=${output:REALPRJNAME.a}') -        emit_link_fat_obj('LINK_RECURSIVE_LIBRARY', False, '--lib=$TARGET', '--with-own-obj', '--with-global-srcs') -        emit_link_fat_obj('LINK_FAT_OBJECT_LIBRARY', False, '--lib=$TARGET', '$FAT_OBJECT_ARGS', '$FAT_OBJECT_OUTS') +        emit_link_fat_obj('LINK_FAT_OBJECT', True, '--obj=$TARGET', '--lib=${output:REALPRJNAME.a}')  +        emit_link_fat_obj('LINK_RECURSIVE_LIBRARY', False, '--lib=$TARGET', '--with-own-obj', '--with-global-srcs')  +        emit_link_fat_obj('LINK_FAT_OBJECT_LIBRARY', False, '--lib=$TARGET', '$FAT_OBJECT_ARGS', '$FAT_OBJECT_OUTS')           emit('LIBRT', '-lrt')          emit('MD5LIB', '-lcrypt') @@ -2766,33 +2766,33 @@ class MSVCLinker(MSVC, Linker):               '-t $MODULE_TYPE --ya-start-command-file -Ya,lics $LICENSE_NAMES -Ya,peers ${rootrel:PEERS} -Ya,credits ${input:CREDITS_TEXTS_FILE} $CREDITS_FLAGS --ya-end-command-file',               ) -        # we split srcs_global into two groups: libs and objs -        # # each group can be in its own command file -        # first group need /WHOLEARCHIVE: prefix which will be added in fix_msvc_output.py or run_msvc_wine.py -        # the tail of link commands will be added in the third command file -        srcs_globals = '--start-wa --ya-start-command-file ${qe;rootrel;ext=.lib:SRCS_GLOBAL} --ya-end-command-file --end-wa \ -                        --ya-start-command-file ${qe;rootrel;ext=.obj:SRCS_GLOBAL} --ya-end-command-file' +        # we split srcs_global into two groups: libs and objs  +        # # each group can be in its own command file  +        # first group need /WHOLEARCHIVE: prefix which will be added in fix_msvc_output.py or run_msvc_wine.py  +        # the tail of link commands will be added in the third command file  +        srcs_globals = '--start-wa --ya-start-command-file ${qe;rootrel;ext=.lib:SRCS_GLOBAL} --ya-end-command-file --end-wa \  +                        --ya-start-command-file ${qe;rootrel;ext=.obj:SRCS_GLOBAL} --ya-end-command-file'           emit('REAL_LINK_DYN_LIB_CMDLINE', '${TOOLCHAIN_ENV} ${cwd:ARCADIA_BUILD_ROOT} ${LINK_WRAPPER} ${LINK_WRAPPER_DYNLIB} ${LINK_EXE_CMD} \               ${LINK_IMPLIB_VALUE} /DLL /OUT:${qe;rootrel:TARGET} ${LINK_EXTRA_OUTPUT} ${EXPORTS_VALUE} \               ${pre=--whole-archive-peers :WHOLE_ARCHIVE_PEERS} \               ${pre=--whole-archive-libs :_WHOLE_ARCHIVE_LIBS_VALUE_GLOBAL}',               srcs_globals, '--ya-start-command-file ${VCS_C_OBJ_RR} ${qe;rootrel:AUTO_INPUT}  ${qe;rootrel;ext=.lib:PEERS} ${qe;rootrel;ext=.dll;noext;suf=.lib:PEERS} \ -             $LINK_EXE_FLAGS $LINK_STDLIBS $LDFLAGS $LDFLAGS_GLOBAL $OBJADDE --ya-end-command-file') +             $LINK_EXE_FLAGS $LINK_STDLIBS $LDFLAGS $LDFLAGS_GLOBAL $OBJADDE --ya-end-command-file')           emit('REAL_LINK_DYN_LIB', '$REAL_LINK_DYN_LIB_IMPL($_WHOLE_ARCHIVE_PEERS_VALUE)')          emit('SWIG_DLL_JAR_CMD', '$GENERATE_MF && $GENERATE_VCS_C_INFO_NODEP && $REAL_SWIG_DLL_JAR_CMD') -        head_link_lib = '${TOOLCHAIN_ENV} ${cwd:ARCADIA_BUILD_ROOT} ${LIB_WRAPPER} ${LINK_LIB_CMD}' +        head_link_lib = '${TOOLCHAIN_ENV} ${cwd:ARCADIA_BUILD_ROOT} ${LIB_WRAPPER} ${LINK_LIB_CMD}'           tail_link_lib = '--ya-start-command-file ${qe;rootrel:AUTO_INPUT} $LINK_LIB_FLAGS --ya-end-command-file \                          ${requirements;hide:LIB_REQUIREMENTS} ${hide;kv:"soe"} ${hide;kv:"p AR"} ${hide;kv:"pc light-red"}' -        emit('LINK_LIB', '${GENERATE_MF} &&', head_link_lib, '/OUT:${qe;rootrel:TARGET}', tail_link_lib) -        emit('GLOBAL_LINK_LIB', head_link_lib, '/OUT:${qe;rootrel:GLOBAL_TARGET}', tail_link_lib) - +        emit('LINK_LIB', '${GENERATE_MF} &&', head_link_lib, '/OUT:${qe;rootrel:TARGET}', tail_link_lib)  +        emit('GLOBAL_LINK_LIB', head_link_lib, '/OUT:${qe;rootrel:GLOBAL_TARGET}', tail_link_lib)  +           emit('LINK_EXE_CMDLINE', '${GENERATE_MF} && $GENERATE_VCS_C_INFO_NODEP && ${TOOLCHAIN_ENV} ${cwd:ARCADIA_BUILD_ROOT} ${LINK_WRAPPER}',               '${LINK_EXE_CMD} /OUT:${qe;rootrel:TARGET} \               ${pre=--whole-archive-peers :WHOLE_ARCHIVE_PEERS} \               ${pre=--whole-archive-libs :_WHOLE_ARCHIVE_LIBS_VALUE_GLOBAL} ', -             '${LINK_EXTRA_OUTPUT}', srcs_globals, '--ya-start-command-file ${VCS_C_OBJ_RR} ${qe;rootrel:AUTO_INPUT} $LINK_EXE_FLAGS $LINK_STDLIBS $LDFLAGS $LDFLAGS_GLOBAL $OBJADDE \ +             '${LINK_EXTRA_OUTPUT}', srcs_globals, '--ya-start-command-file ${VCS_C_OBJ_RR} ${qe;rootrel:AUTO_INPUT} $LINK_EXE_FLAGS $LINK_STDLIBS $LDFLAGS $LDFLAGS_GLOBAL $OBJADDE \                ${qe;rootrel;ext=.lib:PEERS} ${qe;rootrel;ext=.dll;noext;suf=.lib:PEERS} --ya-end-command-file \               ${hide;kv:"soe"} ${hide;kv:"p LD"} ${requirements;hide:LD_REQUIREMENTS} ${hide;kv:"pc blue"}')          emit('LINK_EXE', '$LINK_EXE_IMPL($_WHOLE_ARCHIVE_PEERS_VALUE)') @@ -2808,10 +2808,10 @@ class MSVCLinker(MSVC, Linker):               ${hide;kv:"soe"} ${hide;kv:"p LD"} ${requirements;hide:LD_REQUIREMENTS} ${hide;kv:"pc blue"}')          emit('LINK_EXEC_DYN_LIB', '$LINK_EXEC_DYN_LIB_IMPL($_WHOLE_ARCHIVE_PEERS_VALUE)') -        emit('LINK_GLOBAL_FAT_OBJECT', '${TOOLCHAIN_ENV} ${cwd:ARCADIA_BUILD_ROOT} ${LIB_WRAPPER} ${LINK_LIB_CMD} /OUT:${qe;rootrel:TARGET} \ +        emit('LINK_GLOBAL_FAT_OBJECT', '${TOOLCHAIN_ENV} ${cwd:ARCADIA_BUILD_ROOT} ${LIB_WRAPPER} ${LINK_LIB_CMD} /OUT:${qe;rootrel:TARGET} \               --ya-start-command-file ${qe;rootrel;ext=.lib:SRCS_GLOBAL} ${qe;rootrel;ext=.obj:SRCS_GLOBAL} ${qe;rootrel:AUTO_INPUT} $LINK_LIB_FLAGS --ya-end-command-file') -        emit('LINK_PEERS_FAT_OBJECT', '${TOOLCHAIN_ENV} ${cwd:ARCADIA_BUILD_ROOT} ${LIB_WRAPPER} ${LINK_LIB_CMD} /OUT:${qe;rootrel;output:REALPRJNAME.lib} \ -            --ya-start-command-file ${qe;rootrel:PEERS} $LINK_LIB_FLAGS --ya-end-command-file') +        emit('LINK_PEERS_FAT_OBJECT', '${TOOLCHAIN_ENV} ${cwd:ARCADIA_BUILD_ROOT} ${LIB_WRAPPER} ${LINK_LIB_CMD} /OUT:${qe;rootrel;output:REALPRJNAME.lib} \  +            --ya-start-command-file ${qe;rootrel:PEERS} $LINK_LIB_FLAGS --ya-end-command-file')           emit('LINK_FAT_OBJECT', '${GENERATE_MF} && $GENERATE_VCS_C_INFO_NODEP && $LINK_GLOBAL_FAT_OBJECT && $LINK_PEERS_FAT_OBJECT ${kv;hide:"p LD"} ${requirements;hide:LD_REQUIREMENTS} ${kv;hide:"pc light-blue"} ${kv;hide:"show_out"}')  # noqa E501  | 
