Browse Source

chore: [gn] support MAS build

Jeremy Apthorp 6 years ago
parent
commit
6fbec9d5a9
1 changed files with 55 additions and 10 deletions
  1. 55 10
      BUILD.gn

+ 55 - 10
BUILD.gn

@@ -30,6 +30,12 @@ declare_args() {
   enable_desktop_capturer = true
   enable_run_as_node = true
   enable_osr = false
+
+  is_mas_build = false
+}
+
+if (is_mas_build) {
+  assert(is_mac, "It doesn't make sense to build a MAS build on a non-mac platform")
 }
 
 filenames_gypi = exec_script(
@@ -354,7 +360,12 @@ static_library("electron_lib") {
     ]
   }
 
-  if (is_mac) {
+
+  if (is_mas_build) {
+    deps -= [ "//third_party/crashpad/crashpad/client" ]
+  }
+
+  if (is_mac && !is_mas_build) {
     libs = [
       "Squirrel.framework",
       "ReactiveCocoa.framework",
@@ -363,10 +374,8 @@ static_library("electron_lib") {
     cflags_objcc = [
       "-F", rebase_path("external_binaries", root_build_dir)
     ]
-    if (true) { # !is_mas_build
-      # ReactiveCocoa which is used by Squirrel requires using __weak.
-      cflags_objcc += [ "-fobjc-weak" ]
-    }
+    # ReactiveCocoa which is used by Squirrel requires using __weak.
+    cflags_objcc += [ "-fobjc-weak" ]
   }
   if (is_linux) {
     sources += filenames_gypi.lib_sources_linux
@@ -375,11 +384,21 @@ static_library("electron_lib") {
   if (is_win) {
     sources += filenames_gypi.lib_sources_win
   }
+  if (is_mas_build) {
+    sources += [ "atom/browser/api/atom_api_app_mas.mm" ]
+    sources -= [
+      "atom/browser/auto_updater_mac.mm",
+      "atom/common/crash_reporter/crash_reporter_mac.h",
+      "atom/common/crash_reporter/crash_reporter_mac.mm",
+    ]
+    defines += [ "MAS_BUILD" ]
+  }
 }
 
 if (is_mac) {
   electron_framework_name = electron_product_name + " Framework"
   electron_helper_name = electron_product_name + " Helper"
+  electron_login_helper_name = electron_product_name + " Login Helper"
   electron_framework_version = "A"
   electron_mac_bundle_id = "com.$electron_company_abbr.$electron_project_name"
 
@@ -424,7 +443,7 @@ if (is_mac) {
     ]
   }
 
-  bundle_data("electron_framework_helpers") {
+  bundle_data("electron_crashpad_helper") {
     sources = [
       "$root_out_dir/crashpad_handler",
     ]
@@ -446,11 +465,13 @@ if (is_mac) {
     deps = [
       "//base",
       "//base:i18n",
-      ":electron_framework_helpers",
       ":electron_framework_libraries",
       ":electron_framework_resources",
       ":electron_xibs",
     ]
+    if (!is_mas_build) {
+      deps += [ ":electron_crashpad_helper" ]
+    }
     info_plist = "atom/common/resources/mac/Info.plist"
     extra_substitutions = [
       "ATOM_BUNDLE_ID=$electron_mac_bundle_id.framework",
@@ -503,10 +524,14 @@ if (is_mac) {
     sources = [
       "$root_out_dir/$electron_framework_name.framework",
       "$root_out_dir/$electron_helper_name.app",
-      "external_binaries/Squirrel.framework",
-      "external_binaries/ReactiveCocoa.framework",
-      "external_binaries/Mantle.framework",
     ]
+    if (!is_mas_build) {
+      sources += [
+        "external_binaries/Squirrel.framework",
+        "external_binaries/ReactiveCocoa.framework",
+        "external_binaries/Mantle.framework",
+      ]
+    }
     outputs = [
       "{{bundle_contents_dir}}/Frameworks/{{source_file_part}}",
     ]
@@ -516,6 +541,23 @@ if (is_mac) {
     ]
   }
 
+  mac_app_bundle("electron_login_helper") {
+    output_name = electron_login_helper_name
+    sources = filenames_gypi.login_helper_sources
+    include_dirs = [ "." ]
+    libs = [ "AppKit.framework" ]
+    info_plist = "atom/app/resources/mac/loginhelper-Info.plist"
+    extra_substitutions = [
+      "ATOM_BUNDLE_ID=$electron_mac_bundle_id.loginhelper"
+    ]
+  }
+
+  bundle_data("electron_login_helper_app") {
+    public_deps = [ ":electron_login_helper" ]
+    sources = [ "$root_out_dir/$electron_login_helper_name.app" ]
+    outputs = [ "{{bundle_contents_dir}}/Library/LoginItems" ]
+  }
+
   bundle_data("electron_app_resources") {
     public_deps = [
       ":js2asar",
@@ -562,6 +604,9 @@ if (is_mac) {
       ":electron_app_framework_bundle_data",
       ":electron_app_resources",
     ]
+    if (is_mas_build) {
+      deps += [ ":electron_login_helper_app" ]
+    }
     info_plist = "atom/browser/resources/mac/Info.plist"
     extra_substitutions = [
       "ATOM_BUNDLE_ID=$electron_mac_bundle_id",