IDB: Make readonly transactions wait for earlier readwrite transactions
[chromium-blink-merge.git] / remoting / remoting_host_win.gypi
blobd91505a56436011b18fcccc3a8f115063cb1e9b0
1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
6   'variables': {
7     'remoting_host_installer_win_roots': [
8       'host/installer/win/',
9     ],
10     'remoting_host_installer_win_files': [
11       'host/installer/win/chromoting.wxs',
12       'host/installer/win/parameters.json',
13     ],
14   },
16   'conditions': [
17     ['OS=="win"', {
18       'targets': [
19         {
20           'target_name': 'remoting_breakpad_tester',
21           'type': 'executable',
22           'variables': { 'enable_wexit_time_destructors': 1, },
23           'dependencies': [
24             '../base/base.gyp:base',
25             'remoting_host',
26           ],
27           'sources': [
28             'tools/breakpad_tester_win.cc',
29           ],
30         },  # end of target 'remoting_breakpad_tester'
31         {
32           'target_name': 'remoting_lib_idl',
33           'type': 'static_library',
34           'sources': [
35             'host/win/chromoting_lib_idl.templ',
36             '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.h',
37             '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.idl',
38             '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib_i.c',
39           ],
40           # This target exports a hard dependency because dependent targets may
41           # include chromoting_lib.h, a generated header.
42           'hard_dependency': 1,
43           'msvs_settings': {
44             'VCMIDLTool': {
45               'OutputDirectory': '<(SHARED_INTERMEDIATE_DIR)/remoting/host',
46             },
47           },
48           'direct_dependent_settings': {
49             'include_dirs': [
50               '<(SHARED_INTERMEDIATE_DIR)',
51             ],
52           },
53           'rules': [
54             {
55               'rule_name': 'generate_idl',
56               'extension': 'templ',
57               'outputs': [
58                 '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.idl',
59               ],
60               'action': [
61                 'python', '<(version_py_path)',
62                 '-e', "DAEMON_CONTROLLER_CLSID='<(daemon_controller_clsid)'",
63                 '-e', "RDP_DESKTOP_SESSION_CLSID='<(rdp_desktop_session_clsid)'",
64                 '<(RULE_INPUT_PATH)',
65                 '<@(_outputs)',
66               ],
67               'process_outputs_as_sources': 1,
68               'message': 'Generating <@(_outputs)',
69             },
70           ],
71         },  # end of target 'remoting_lib_idl'
73         # remoting_lib_ps builds the proxy/stub code generated by MIDL (see
74         # remoting_lib_idl).
75         {
76           'target_name': 'remoting_lib_ps',
77           'type': 'static_library',
78           'defines': [
79             # Prepend 'Ps' to the MIDL-generated routines. This includes
80             # DllGetClassObject, DllCanUnloadNow, DllRegisterServer,
81             # DllUnregisterServer, and DllMain.
82             'ENTRY_PREFIX=Ps',
83             'REGISTER_PROXY_DLL',
84           ],
85           'dependencies': [
86             'remoting_lib_idl',
87           ],
88           'sources': [
89             '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.dlldata.c',
90             '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib_p.c',
91           ],
92         },  # end of target 'remoting_lib_ps'
94         # Regenerates 'chromoting_lib.rc' (used to embed 'chromoting_lib.tlb'
95         # into remoting_core.dll's resources) every time
96         # 'chromoting_lib_idl.templ' changes. Making remoting_core depend on
97         # both this and 'remoting_lib_idl' targets ensures that the resorces
98         # are rebuilt every time the type library is updated. GYP alone is
99         # not smart enough to figure out this dependency on its own.
100         {
101           'target_name': 'remoting_lib_rc',
102           'type': 'none',
103           'sources': [
104             'host/win/chromoting_lib_idl.templ',
105           ],
106           'hard_dependency': 1,
107           'direct_dependent_settings': {
108             'include_dirs': [
109               '<(SHARED_INTERMEDIATE_DIR)',
110             ],
111           },
112           'rules': [
113             {
114               'rule_name': 'generate_rc',
115               'extension': 'templ',
116               'outputs': [
117                 '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.rc',
118               ],
119               'action': [
120                 'echo 1 typelib "remoting/host/chromoting_lib.tlb" > <@(_outputs)',
121               ],
122               'message': 'Generating <@(_outputs)',
123             },
124           ],
125         },  # end of target 'remoting_lib_rc'
126         # The only difference between |remoting_console.exe| and
127         # |remoting_host.exe| is that the former is a console application.
128         # |remoting_console.exe| is used for debugging purposes.
129         {
130           'target_name': 'remoting_console',
131           'type': 'executable',
132           'variables': { 'enable_wexit_time_destructors': 1, },
133           'defines': [
134             'BINARY=BINARY_HOST_ME2ME',
135           ],
136           'dependencies': [
137             'remoting_core',
138             'remoting_windows_resources',
139           ],
140           'sources': [
141             '<(SHARED_INTERMEDIATE_DIR)/remoting/version.rc',
142             'host/win/entry_point.cc',
143           ],
144           'msvs_settings': {
145             'VCManifestTool': {
146               'AdditionalManifestFiles': [
147                 'host/win/dpi_aware.manifest',
148               ],
149             },
150             'VCLinkerTool': {
151               'EntryPointSymbol': 'HostEntryPoint',
152               'IgnoreAllDefaultLibraries': 'true',
153               'SubSystem': '1', # /SUBSYSTEM:CONSOLE
154             },
155           },
156         },  # end of target 'remoting_console'
157         {
158           'target_name': 'remoting_core',
159           'type': 'shared_library',
160           'variables': { 'enable_wexit_time_destructors': 1, },
161           'defines' : [
162             '_ATL_APARTMENT_THREADED',
163             '_ATL_CSTRING_EXPLICIT_CONSTRUCTORS',
164             '_ATL_NO_AUTOMATIC_NAMESPACE',
165             '_ATL_NO_EXCEPTIONS',
166             'BINARY=BINARY_CORE',
167             'DAEMON_CONTROLLER_CLSID="{<(daemon_controller_clsid)}"',
168             'RDP_DESKTOP_SESSION_CLSID="{<(rdp_desktop_session_clsid)}"',
169             'HOST_IMPLEMENTATION',
170             'ISOLATION_AWARE_ENABLED=1',
171             'STRICT',
172             'VERSION=<(version_full)',
173           ],
174           'dependencies': [
175             '../base/base.gyp:base',
176             '../base/base.gyp:base_static',
177             '../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
178             '../ipc/ipc.gyp:ipc',
179             '../net/net.gyp:net',
180             '../third_party/webrtc/modules/modules.gyp:desktop_capture',
181             'remoting_base',
182             'remoting_breakpad',
183             'remoting_host',
184             'remoting_host_setup_base',
185             'remoting_it2me_host_static',
186             'remoting_lib_idl',
187             'remoting_lib_ps',
188             'remoting_lib_rc',
189             'remoting_me2me_host_static',
190             'remoting_native_messaging_base',
191             'remoting_protocol',
192             'remoting_windows_resources',
193           ],
194           'sources': [
195             '<(SHARED_INTERMEDIATE_DIR)/remoting/core.rc',
196             '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.rc',
197             '<(SHARED_INTERMEDIATE_DIR)/remoting/host/remoting_host_messages.rc',
198             '<(SHARED_INTERMEDIATE_DIR)/remoting/version.rc',
199             'host/desktop_process_main.cc',
200             'host/host_main.cc',
201             'host/host_main.h',
202             'host/it2me/it2me_native_messaging_host_main.cc',
203             'host/it2me/it2me_native_messaging_host_main.h',
204             'host/setup/me2me_native_messaging_host_main.cc',
205             'host/setup/me2me_native_messaging_host_main.h',
206             'host/verify_config_window_win.cc',
207             'host/verify_config_window_win.h',
208             'host/win/chromoting_module.cc',
209             'host/win/chromoting_module.h',
210             'host/win/core.cc',
211             'host/win/core_resource.h',
212             'host/win/elevated_controller.cc',
213             'host/win/elevated_controller.h',
214             'host/win/host_service.cc',
215             'host/win/host_service.h',
216             'host/win/omaha.cc',
217             'host/win/omaha.h',
218             'host/win/rdp_desktop_session.cc',
219             'host/win/rdp_desktop_session.h',
220             'host/win/unprivileged_process_delegate.cc',
221             'host/win/unprivileged_process_delegate.h',
222             'host/win/worker_process_launcher.cc',
223             'host/win/worker_process_launcher.h',
224             'host/win/wts_session_process_delegate.cc',
225             'host/win/wts_session_process_delegate.h',
226             'host/worker_process_ipc_delegate.h',
227           ],
228           'msvs_settings': {
229             'VCManifestTool': {
230               'EmbedManifest': 'true',
231               'AdditionalManifestFiles': [
232                 'host/win/common-controls.manifest',
233               ],
234             },
235             'VCLinkerTool': {
236               'AdditionalDependencies': [
237                 'comctl32.lib',
238                 'rpcns4.lib',
239                 'rpcrt4.lib',
240                 'uuid.lib',
241                 'wtsapi32.lib',
242               ],
243               'AdditionalOptions': [
244                 # Export the proxy/stub entry points. Note that the generated
245                 # routines have 'Ps' prefix to avoid conflicts with our own
246                 # DllMain().
247                 '/EXPORT:DllGetClassObject=PsDllGetClassObject,PRIVATE',
248                 '/EXPORT:DllCanUnloadNow=PsDllCanUnloadNow,PRIVATE',
249                 '/EXPORT:DllRegisterServer=PsDllRegisterServer,PRIVATE',
250                 '/EXPORT:DllUnregisterServer=PsDllUnregisterServer,PRIVATE',
251               ],
252             },
253             'conditions': [
254               ['clang==1', {
255                 # atlapp.h contains a global "using namespace WTL;".
256                 # TODO: Remove once remoting/host/verify_config_window_win.h no
257                 # longer depends on atlapp.h, http://crbug.com/5027
258                 'VCCLCompilerTool': {
259                   'AdditionalOptions': ['-Wno-header-hygiene'],
260                 },
261               }],
262             ],
263           },
264         },  # end of target 'remoting_core'
265         {
266           'target_name': 'remoting_desktop',
267           'type': 'executable',
268           'variables': { 'enable_wexit_time_destructors': 1, },
269           'defines': [
270             'BINARY=BINARY_DESKTOP',
271           ],
272           'dependencies': [
273             'remoting_core',
274             'remoting_windows_resources',
275           ],
276           'sources': [
277             '<(SHARED_INTERMEDIATE_DIR)/remoting/version.rc',
278             'host/win/entry_point.cc',
279           ],
280           'msvs_settings': {
281             'VCManifestTool': {
282               'AdditionalManifestFiles': [
283                 'host/win/dpi_aware.manifest',
284               ],
285             },
286             'VCLinkerTool': {
287               'EnableUAC': 'true',
288               # Add 'level="requireAdministrator" uiAccess="true"' to
289               # the manifest only for the official builds because it requires
290               # the binary to be signed to work.
291               'conditions': [
292                 ['buildtype == "Official"', {
293                   'UACExecutionLevel': 2,
294                   'UACUIAccess': 'true',
295                 }],
296               ],
297               'EntryPointSymbol': 'HostEntryPoint',
298               'IgnoreAllDefaultLibraries': 'true',
299               'SubSystem': '2', # /SUBSYSTEM:WINDOWS
300             },
301           },
302         },  # end of target 'remoting_desktop'
303         {
304           'target_name': 'remoting_me2me_host',
305           'product_name': 'remoting_host',
306           'type': 'executable',
307           'variables': { 'enable_wexit_time_destructors': 1, },
308           'defines': [
309             'BINARY=BINARY_HOST_ME2ME',
310           ],
311           'dependencies': [
312             'remoting_core',
313             'remoting_windows_resources',
314           ],
315           'sources': [
316             '<(SHARED_INTERMEDIATE_DIR)/remoting/version.rc',
317             'host/win/entry_point.cc',
318           ],
319           'msvs_settings': {
320             'VCManifestTool': {
321               'AdditionalManifestFiles': [
322                 'host/win/dpi_aware.manifest',
323               ],
324             },
325             'VCLinkerTool': {
326               'EntryPointSymbol': 'HostEntryPoint',
327               'IgnoreAllDefaultLibraries': 'true',
328               'OutputFile': '$(OutDir)\\remoting_host.exe',
329               'SubSystem': '2', # /SUBSYSTEM:WINDOWS
330             },
331           },
332         },  # end of target 'remoting_me2me_host'
333         {
334           'target_name': 'remoting_me2me_native_messaging_host',
335           'type': 'executable',
336           'product_name': 'remoting_native_messaging_host',
337           'variables': { 'enable_wexit_time_destructors': 1, },
338           'defines' : [
339             'BINARY=BINARY_NATIVE_MESSAGING_HOST',
340           ],
341           'dependencies': [
342             'remoting_core',
343             'remoting_windows_resources',
344           ],
345           'sources': [
346             '<(SHARED_INTERMEDIATE_DIR)/remoting/version.rc',
347             'host/setup/me2me_native_messaging_host_entry_point.cc',
348           ],
349           'msvs_settings': {
350             'VCLinkerTool': {
351               'IgnoreAllDefaultLibraries': 'true',
352               'SubSystem': '1', # /SUBSYSTEM:CONSOLE
353             },
354           },
355         },  # end of target 'remoting_me2me_native_messaging_host'
356         {
357           'target_name': 'remoting_it2me_native_messaging_host',
358           'type': 'executable',
359           'product_name': 'remote_assistance_host',
360           'variables': { 'enable_wexit_time_destructors': 1, },
361           'dependencies': [
362             'remoting_core',
363             'remoting_windows_resources',
364           ],
365           'sources': [
366             '<(SHARED_INTERMEDIATE_DIR)/remoting/version.rc',
367             'host/it2me/it2me_native_messaging_host_entry_point.cc',
368           ],
369           'defines' : [
370             'BINARY=BINARY_REMOTE_ASSISTANCE_HOST',
371           ],
372           'msvs_settings': {
373             'VCManifestTool': {
374               'EmbedManifest': 'true',
375               'AdditionalManifestFiles': [
376                 'host/win/common-controls.manifest',
377                 'host/win/dpi_aware.manifest',
378               ],
379             },
380             'VCLinkerTool': {
381               'IgnoreAllDefaultLibraries': 'true',
382               'SubSystem': '1', # /SUBSYSTEM:CONSOLE
383               'AdditionalDependencies': [
384                 'comctl32.lib',
385               ],
386             },
387           },
388         },  # end of target 'remoting_it2me_native_messaging_host'
389         {
390           'target_name': 'remoting_host_messages',
391           'type': 'none',
392           'dependencies': [
393             'remoting_resources',
394           ],
395           'hard_dependency': 1,
396           'direct_dependent_settings': {
397             'include_dirs': [
398               '<(SHARED_INTERMEDIATE_DIR)',
399             ],
400           },
401           'sources': [
402             'host/win/host_messages.mc.jinja2'
403           ],
404           'rules': [
405             {
406               'rule_name': 'localize',
407               'extension': 'jinja2',
408               'outputs': [
409                 '<(SHARED_INTERMEDIATE_DIR)/remoting/host/remoting_host_messages.mc',
410               ],
411               'action': [
412                 'python', '<(remoting_localize_path)',
413                 '--locale_dir', '<(webapp_locale_dir)',
414                 '--template', '<(RULE_INPUT_PATH)',
415                 '--output', '<@(_outputs)',
416                 '--encoding', 'utf-16',
417                 '<@(remoting_locales)',
418               ],
419               'message': 'Localizing the event log messages'
420             },
421           ],
422         },  # end of target 'remoting_host_messages'
424         # Generates localized resources for the Windows binaries.
425         # The substitution strings are taken from:
426         #   - build/util/LASTCHANGE - the last source code revision. There is
427         #       no explicit dependency on this file to avoid rebuilding the host
428         #       after unrelated changes.
429         #   - chrome/VERSION - the major, build & patch versions.
430         #   - remoting/VERSION - the chromoting patch version (and overrides
431         #       for chrome/VERSION).
432         #   - translated webapp strings
433         {
434           'target_name': 'remoting_windows_resources',
435           'type': 'none',
436           'dependencies': [
437             'remoting_resources',
438           ],
439           'hard_dependency': 1,
440           'direct_dependent_settings': {
441             'include_dirs': [
442               '<(SHARED_INTERMEDIATE_DIR)',
443             ],
444           },
445           'sources': [
446             'host/win/core.rc.jinja2',
447             'host/win/version.rc.jinja2',
448           ],
449           'rules': [
450             {
451               'rule_name': 'version',
452               'extension': 'jinja2',
453               'variables': {
454                 'lastchange_path': '<(DEPTH)/build/util/LASTCHANGE',
455               },
456               'inputs': [
457                 '<(chrome_version_path)',
458                 '<(remoting_version_path)',
459               ],
460               'outputs': [
461                 '<(SHARED_INTERMEDIATE_DIR)/remoting/<(RULE_INPUT_ROOT)',
462               ],
463               'action': [
464                 'python', '<(remoting_localize_path)',
465                 '--variables', '<(chrome_version_path)',
466                 # |remoting_version_path| must be after |chrome_version_path|
467                 # because it can contain overrides for the version numbers.
468                 '--variables', '<(remoting_version_path)',
469                 '--variables', '<(lastchange_path)',
470                 '--locale_dir', '<(webapp_locale_dir)',
471                 '--template', '<(RULE_INPUT_PATH)',
472                 '--output', '<@(_outputs)',
473                 '--encoding', 'utf-16',
474                 '<@(remoting_locales)',
475               ],
476               'message': 'Localizing the version information'
477             },
478           ],
479         },  # end of target 'remoting_windows_resources'
480       ],  # end of 'targets'
481     }],  # 'OS=="win"'
483     # The host installation is generated only if WiX is available. If
484     # component build is used the produced installation will not work due to
485     # missing DLLs. We build it anyway to make sure the GYP scripts are executed
486     # by the bots.
487     ['OS == "win" and wix_exists == "True" and sas_dll_exists == "True"', {
488       'targets': [
489         {
490           'target_name': 'remoting_host_installation',
491           'type': 'none',
492           'dependencies': [
493             'remoting_me2me_host_archive',
494           ],
495           'sources': [
496             '<(PRODUCT_DIR)/remoting-me2me-host-<(OS).zip',
497           ],
498           'outputs': [
499             '<(PRODUCT_DIR)/chromoting.msi',
500           ],
501           'rules': [
502             {
503               'rule_name': 'zip2msi',
504               'extension': 'zip',
505               'inputs': [
506                 'tools/zip2msi.py',
507               ],
508               'outputs': [
509                 '<(PRODUCT_DIR)/chromoting.msi',
510               ],
511               'action': [
512                 'python', 'tools/zip2msi.py',
513                 '--wix_path', '<(wix_path)',
514                 '--intermediate_dir', '<(INTERMEDIATE_DIR)/installation',
515                 '--target_arch', '<(target_arch)',
516                 '<(RULE_INPUT_PATH)',
517                 '<@(_outputs)',
518               ],
519               'message': 'Generating <@(_outputs)',
520             },
521           ],
522         },  # end of target 'remoting_host_installation'
524         {
525           'target_name': 'remoting_me2me_host_archive',
526           'type': 'none',
527           'dependencies': [
528             '<(icu_gyp_path):icudata',
529             'remoting_core',
530             'remoting_desktop',
531             'remoting_it2me_native_messaging_host',
532             'remoting_me2me_host',
533             'remoting_me2me_native_messaging_host',
534             'remoting_native_messaging_manifests',
535           ],
536           'compiled_inputs': [
537             '<(PRODUCT_DIR)/remote_assistance_host.exe',
538             '<(PRODUCT_DIR)/remoting_core.dll',
539             '<(PRODUCT_DIR)/remoting_desktop.exe',
540             '<(PRODUCT_DIR)/remoting_host.exe',
541             '<(PRODUCT_DIR)/remoting_native_messaging_host.exe',
542           ],
543           'compiled_inputs_dst': [
544             'files/remote_assistance_host.exe',
545             'files/remoting_core.dll',
546             'files/remoting_desktop.exe',
547             'files/remoting_host.exe',
548             'files/remoting_native_messaging_host.exe',
549           ],
550           'conditions': [
551             ['buildtype == "Official"', {
552               'defs': [
553                 'OFFICIAL_BUILD=1',
554               ],
555             }, {  # else buildtype != "Official"
556               'defs': [
557                 'OFFICIAL_BUILD=0',
558               ],
559             }],
560           ],
561           'defs': [
562             'BRANDING=<(branding)',
563             'DAEMON_CONTROLLER_CLSID={<(daemon_controller_clsid)}',
564             'RDP_DESKTOP_SESSION_CLSID={<(rdp_desktop_session_clsid)}',
565             'VERSION=<(version_full)',
566           ],
567           'generated_files': [
568             '<@(_compiled_inputs)',
569             '<(sas_dll_path)/sas.dll',
570             '<(PRODUCT_DIR)/remoting/com.google.chrome.remote_assistance.json',
571             '<(PRODUCT_DIR)/remoting/com.google.chrome.remote_desktop.json',
572             'resources/chromoting.ico',
573             '<(PRODUCT_DIR)/icudtl.dat',
574           ],
575           'generated_files_dst': [
576             '<@(_compiled_inputs_dst)',
577             'files/sas.dll',
578             'files/com.google.chrome.remote_assistance.json',
579             'files/com.google.chrome.remote_desktop.json',
580             'files/chromoting.ico',
581             'files/icudtl.dat',
582           ],
583           'zip_path': '<(PRODUCT_DIR)/remoting-me2me-host-<(OS).zip',
584           'outputs': [
585             '<(_zip_path)',
586           ],
587           'actions': [
588             {
589               'action_name': 'Zip installer files for signing',
590               'temp_dir': '<(INTERMEDIATE_DIR)/installation',
591               'source_files': [
592                 '<@(remoting_host_installer_win_files)',
593               ],
594               'inputs': [
595                 '<@(_compiled_inputs)',
596                 '<(sas_dll_path)/sas.dll',
597                 '<@(_source_files)',
598                 'host/installer/build-installer-archive.py',
599                 'resources/chromoting.ico',
600               ],
601               'outputs': [
602                 '<(_zip_path)',
603               ],
604               'action': [
605                 'python', 'host/installer/build-installer-archive.py',
606                 '<(_temp_dir)',
607                 '<(_zip_path)',
608                 '--source-file-roots', '<@(remoting_host_installer_win_roots)',
609                 '--source-files', '<@(_source_files)',
610                 '--generated-files', '<@(_generated_files)',
611                 '--generated-files-dst', '<@(_generated_files_dst)',
612                 '--defs', '<@(_defs)',
613               ],
614             },
615           ],  # actions
616         }, # end of target 'remoting_me2me_host_archive'
617       ],  # end of 'targets'
618     }],  # '<(wix_path) != ""'
620   ],  # end of 'conditions'