Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / extensions / shell / app_shell.gyp
blob0ad524cc6b0f973188b000b5959ec8d26828d4b5
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   'includes': [
7     'app_shell.gypi',
8   ],
9   'variables': {
10     # Product name is used for Mac bundle.
11     'app_shell_product_name': 'App Shell',
12     # The version is high enough to be supported by Omaha (at least 31)
13     # but fake enough to be obviously not a Chrome release.
14     'app_shell_version': '38.1234.5678.9',
15     'chromium_code': 1,
16   },
17   'targets': [
18     {
19       'target_name': 'app_shell_lib',
20       'type': 'static_library',
21       'dependencies': [
22         'app_shell_version_header',
23         '<(DEPTH)/base/base.gyp:base',
24         '<(DEPTH)/base/base.gyp:base_prefs',
25         '<(DEPTH)/components/components.gyp:devtools_discovery',
26         '<(DEPTH)/components/components.gyp:devtools_http_handler',
27         '<(DEPTH)/components/components.gyp:pref_registry',
28         '<(DEPTH)/components/components.gyp:update_client',
29         '<(DEPTH)/components/components.gyp:user_prefs',
30         '<(DEPTH)/components/components.gyp:web_cache_renderer',
31         '<(DEPTH)/content/content.gyp:content',
32         '<(DEPTH)/content/content.gyp:content_browser',
33         '<(DEPTH)/content/content.gyp:content_gpu',
34         '<(DEPTH)/content/content.gyp:content_ppapi_plugin',
35         '<(DEPTH)/content/content_shell_and_tests.gyp:content_shell_lib',
36         '<(DEPTH)/device/core/core.gyp:device_core',
37         '<(DEPTH)/device/hid/hid.gyp:device_hid',
38         '<(DEPTH)/extensions/browser/api/api_registration.gyp:extensions_api_registration',
39         '<(DEPTH)/extensions/common/api/api.gyp:extensions_api',
40         '<(DEPTH)/extensions/extensions.gyp:extensions_browser',
41         '<(DEPTH)/extensions/extensions.gyp:extensions_common',
42         '<(DEPTH)/extensions/extensions.gyp:extensions_renderer',
43         '<(DEPTH)/extensions/extensions.gyp:extensions_shell_and_test_pak',
44         '<(DEPTH)/extensions/extensions.gyp:extensions_utility',
45         '<(DEPTH)/extensions/extensions_resources.gyp:extensions_resources',
46         '<(DEPTH)/extensions/shell/browser/api/api_registration.gyp:shell_api_registration',
47         '<(DEPTH)/extensions/shell/common/api/api.gyp:shell_api',
48         '<(DEPTH)/mojo/mojo_base.gyp:mojo_environment_chromium',
49         '<(DEPTH)/skia/skia.gyp:skia',
50         '<(DEPTH)/third_party/WebKit/public/blink.gyp:blink',
51         '<(DEPTH)/third_party/mojo/mojo_edk.gyp:mojo_system_impl',
52         '<(DEPTH)/ui/base/ime/ui_base_ime.gyp:ui_base_ime',
53         '<(DEPTH)/ui/base/ui_base.gyp:ui_base',
54         '<(DEPTH)/v8/tools/gyp/v8.gyp:v8',
55       ],
56       'export_dependent_settings': [
57         '<(DEPTH)/content/content.gyp:content_browser',
58       ],
59       'include_dirs': [
60         '../..',
61         '<(SHARED_INTERMEDIATE_DIR)',
62         '<(SHARED_INTERMEDIATE_DIR)/extensions/shell',
63       ],
64       'sources': [
65         '<@(app_shell_lib_sources)',
66       ],
67       'conditions': [
68         [ 'cld_version==2', {
69               'dependencies': [
70                 '<(DEPTH)/third_party/cld_2/cld_2.gyp:cld2_platform_impl', ],
71         }],
72         ['use_aura==1', {
73           'dependencies': [
74             '<(DEPTH)/ui/wm/wm.gyp:wm',
75           ],
76           'sources': [
77             '<@(app_shell_lib_sources_aura)',
78           ],
79         }],
80         ['chromeos==1', {
81           'dependencies': [
82             '<(DEPTH)/chromeos/chromeos.gyp:chromeos',
83             '<(DEPTH)/ui/chromeos/ui_chromeos.gyp:ui_chromeos',
84             '<(DEPTH)/ui/display/display.gyp:display',
85           ],
86           'sources': [
87             '<@(app_shell_lib_sources_chromeos)',
88           ],
89         }],
90         ['disable_nacl==0 and OS=="linux"', {
91           'dependencies': [
92             '<(DEPTH)/components/nacl.gyp:nacl_helper',
93           ],
94         }],
95         ['disable_nacl==0', {
96           'dependencies': [
97             '<(DEPTH)/components/nacl.gyp:nacl',
98             '<(DEPTH)/components/nacl.gyp:nacl_browser',
99             '<(DEPTH)/components/nacl.gyp:nacl_common',
100             '<(DEPTH)/components/nacl.gyp:nacl_renderer',
101             '<(DEPTH)/components/nacl.gyp:nacl_switches',
102           ],
103           'sources': [
104             '<@(app_shell_lib_sources_nacl)',
105           ],
106         }],
107       ],
108     },
109     {
110       'target_name': 'app_shell',
111       'type': 'executable',
112       'mac_bundle': 1,
113       'dependencies': [
114         'app_shell_lib',
115         '<(DEPTH)/extensions/extensions.gyp:extensions_shell_and_test_pak',
116       ],
117       'include_dirs': [
118         '../..',
119       ],
120       'sources': [
121         '<@(app_shell_sources)',
122       ],
123       'conditions': [
124         ['OS=="win"', {
125           'msvs_settings': {
126             'VCLinkerTool': {
127               'SubSystem': '2',  # Set /SUBSYSTEM:WINDOWS
128             },
129           },
130           'dependencies': [
131             '<(DEPTH)/sandbox/sandbox.gyp:sandbox',
132           ],
133         }],
134         ['OS=="win" and win_use_allocator_shim==1', {
135           'dependencies': [
136             '<(DEPTH)/base/allocator/allocator.gyp:allocator',
137           ],
138         }],
139         ['OS=="mac"', {
140           'product_name': '<(app_shell_product_name)',
141           'dependencies!': [
142             'app_shell_lib',
143           ],
144           'dependencies': [
145             'app_shell_framework',
146             'app_shell_helper',
147           ],
148           'mac_bundle_resources': [
149             'app/app-Info.plist',
150           ],
151           # TODO(mark): Come up with a fancier way to do this.  It should only
152           # be necessary to list app-Info.plist once, not the three times it is
153           # listed here.
154           'mac_bundle_resources!': [
155             'app/app-Info.plist',
156           ],
157           'xcode_settings': {
158             'INFOPLIST_FILE': 'app/app-Info.plist',
159           },
160           'copies': [{
161               'destination': '<(PRODUCT_DIR)/<(app_shell_product_name).app/Contents/Frameworks',
162               'files': [
163                 '<(PRODUCT_DIR)/<(app_shell_product_name) Helper.app',
164               ],
165           }],
166           'postbuilds': [
167             {
168               'postbuild_name': 'Copy <(app_shell_product_name) Framework.framework',
169               'action': [
170                 '../../build/mac/copy_framework_unversioned.sh',
171                 '${BUILT_PRODUCTS_DIR}/<(app_shell_product_name) Framework.framework',
172                 '${BUILT_PRODUCTS_DIR}/${CONTENTS_FOLDER_PATH}/Frameworks',
173               ],
174             },
175             {
176               # Modify the Info.plist as needed.
177               'postbuild_name': 'Tweak Info.plist',
178               'action': ['../../build/mac/tweak_info_plist.py',
179                          '--scm=1',
180                          '--version=<(app_shell_version)'],
181             },
182           ],
183         }],
184       ],
185     },
186     {
187       'target_name': 'app_shell_unittests',
188       'type': 'executable',
189       'dependencies': [
190         'app_shell_lib',
191         '<(DEPTH)/base/base.gyp:base',
192         '<(DEPTH)/base/base.gyp:test_support_base',
193         '<(DEPTH)/content/content.gyp:content_app_both',
194         '<(DEPTH)/content/content_shell_and_tests.gyp:test_support_content',
195         '<(DEPTH)/extensions/extensions.gyp:extensions_shell_and_test_pak',
196         '<(DEPTH)/extensions/extensions.gyp:extensions_test_support',
197         '<(DEPTH)/testing/gtest.gyp:gtest',
198       ],
199       'sources': [
200         '<@(app_shell_unittests_sources)',
201       ],
202       'conditions': [
203         ['disable_nacl==0', {
204           'sources': [
205             '<@(app_shell_unittests_sources_nacl)',
206           ],
207         }],
208         ['use_aura==1', {
209           'sources': [
210             '<@(app_shell_unittests_sources_aura)',
211           ],
212           'dependencies': [
213             '<(DEPTH)/ui/aura/aura.gyp:aura_test_support',
214           ],
215         }],
216         ['chromeos==1', {
217           'dependencies': [
218             '<(DEPTH)/chromeos/chromeos.gyp:chromeos_test_support_without_gmock',
219           ],
220           'sources': [
221             '<@(app_shell_unittests_sources_chromeos)',
222           ],
223         }],
224         ['OS=="win" and win_use_allocator_shim==1', {
225           'dependencies': [
226             '<(DEPTH)/base/allocator/allocator.gyp:allocator',
227           ],
228         }],
229       ],
230     },
231     {
232       'target_name': 'app_shell_version_header',
233       'type': 'none',
234       'direct_dependent_settings': {
235         'include_dirs': [
236           '<(SHARED_INTERMEDIATE_DIR)',
237         ],
238       },
239       'actions': [
240         {
241           'action_name': 'version_header',
242           'message': 'Generating version header file: <@(_outputs)',
243           'variables': {
244             'lastchange_path': '<(DEPTH)/build/util/LASTCHANGE',
245           },
246           'inputs': [
247             '<(version_path)',
248             '<(lastchange_path)',
249             'common/version.h.in',
250           ],
251           'outputs': [
252             '<(SHARED_INTERMEDIATE_DIR)/extensions/shell/common/version.h',
253           ],
254           'action': [
255             'python',
256             '<(version_py_path)',
257             '-f', '<(lastchange_path)',
258             '-f', '<(version_path)',
259             'common/version.h.in',
260             '<@(_outputs)',
261           ],
262           'includes': [
263             '../../build/util/version.gypi',
264           ],
265         },
266       ],
267     },
268   ],  # targets
270   'conditions': [
271     ['OS=="mac"', {
272       'targets': [
273         {
274           'target_name': 'app_shell_framework',
275           'type': 'shared_library',
276           'product_name': '<(app_shell_product_name) Framework',
277           'mac_bundle': 1,
278           'mac_bundle_resources': [
279             '<(PRODUCT_DIR)/extensions_shell_and_test.pak',
280             'app/framework-Info.plist',
281           ],
282           'mac_bundle_resources!': [
283             'app/framework-Info.plist',
284           ],
285           'xcode_settings': {
286             # The framework is placed within the .app's Framework
287             # directory.  DYLIB_INSTALL_NAME_BASE and
288             # LD_DYLIB_INSTALL_NAME affect -install_name.
289             'DYLIB_INSTALL_NAME_BASE':
290                 '@executable_path/../Frameworks',
291             # See /build/mac/copy_framework_unversioned.sh for
292             # information on LD_DYLIB_INSTALL_NAME.
293             'LD_DYLIB_INSTALL_NAME':
294                 '$(DYLIB_INSTALL_NAME_BASE:standardizepath)/$(WRAPPER_NAME)/$(PRODUCT_NAME)',
296             'INFOPLIST_FILE': 'app/framework-Info.plist',
297           },
298           'dependencies': [
299             'app_shell_lib',
300           ],
301           'include_dirs': [
302             '../..',
303           ],
304           'sources': [
305             '<@(app_shell_sources_mac)',
306           ],
307           'postbuilds': [
308             {
309               # Modify the Info.plist as needed.  The script explains why
310               # this is needed.  This is also done in the chrome target.
311               # The framework needs the Breakpad keys if this feature is
312               # enabled.  It does not need the Keystone keys; these always
313               # come from the outer application bundle.  The framework
314               # doesn't currently use the SCM keys for anything,
315               # but this seems like a really good place to store them.
316               'postbuild_name': 'Tweak Info.plist',
317               'action': ['../../build/mac/tweak_info_plist.py',
318                          '--breakpad=1',
319                          '--keystone=0',
320                          '--scm=1',
321                          '--version=<(app_shell_version)',
322                          '--branding=<(app_shell_product_name)'],
323             },
324           ],
325           'conditions': [
326             ['icu_use_data_file_flag==1', {
327               'mac_bundle_resources': [
328                 '<(PRODUCT_DIR)/icudtl.dat',
329               ],
330             }],
331             ['v8_use_external_startup_data==1', {
332               'mac_bundle_resources': [
333                 '<(PRODUCT_DIR)/natives_blob.bin',
334                 '<(PRODUCT_DIR)/snapshot_blob.bin',
335               ],
336             }],
337           ],
338         },  # target app_shell_framework
339         {
340           'target_name': 'app_shell_helper',
341           'type': 'executable',
342           'variables': { 'enable_wexit_time_destructors': 1, },
343           'product_name': '<(app_shell_product_name) Helper',
344           'mac_bundle': 1,
345           'dependencies': [
346             'app_shell_framework',
347           ],
348           'sources': [
349             'app/shell_main.cc',
350             'app/helper-Info.plist',
351           ],
352           # TODO(mark): Come up with a fancier way to do this.  It should only
353           # be necessary to list helper-Info.plist once, not the three times it
354           # is listed here.
355           'mac_bundle_resources!': [
356             'app/helper-Info.plist',
357           ],
358           # TODO(mark): For now, don't put any resources into this app.  Its
359           # resources directory will be a symbolic link to the browser app's
360           # resources directory.
361           'mac_bundle_resources/': [
362             ['exclude', '.*'],
363           ],
364           'xcode_settings': {
365             'INFOPLIST_FILE': 'app/helper-Info.plist',
366           },
367           'postbuilds': [
368             {
369               # The framework defines its load-time path
370               # (DYLIB_INSTALL_NAME_BASE) relative to the main executable
371               # (chrome).  A different relative path needs to be used in
372               # helper_app.
373               'postbuild_name': 'Fix Framework Link',
374               'action': [
375                 'install_name_tool',
376                 '-change',
377                 '@executable_path/../Frameworks/<(app_shell_product_name) Framework.framework/<(app_shell_product_name) Framework',
378                 '@executable_path/../../../<(app_shell_product_name) Framework.framework/<(app_shell_product_name) Framework',
379                 '${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}'
380               ],
381             },
382             {
383               # Modify the Info.plist as needed.  The script explains why this
384               # is needed.  This is also done in the chrome and chrome_dll
385               # targets.  In this case, --breakpad=0, --keystone=0, and --scm=0
386               # are used because Breakpad, Keystone, and SCM keys are
387               # never placed into the helper.
388               'postbuild_name': 'Tweak Info.plist',
389               'action': ['../../build/mac/tweak_info_plist.py',
390                          '--breakpad=0',
391                          '--keystone=0',
392                          '--scm=0',
393                          '--version=<(app_shell_version)'],
394             },
395           ],
396         },  # target app_shell_helper
397       ],
398     }],  # OS=="mac"
399     ['test_isolation_mode != "noop"', {
400       'targets': [
401         {
402           'target_name': 'app_shell_unittests_run',
403           'type': 'none',
404           'dependencies': [
405             'app_shell_unittests',
406           ],
407           'includes': [
408             '../../build/isolate.gypi',
409           ],
410           'sources': [
411             'app_shell_unittests.isolate',
412           ],
413         },
414       ],
415     }],
416   ],