diff --git a/Meta/gn/build/mac/compile_xib_resources.gni b/Meta/gn/build/mac/compile_xib_resources.gni new file mode 100644 index 0000000000..f2f5e2e8a8 --- /dev/null +++ b/Meta/gn/build/mac/compile_xib_resources.gni @@ -0,0 +1,37 @@ +# +# This file introduces a template for compiling Apple platform interface +# builder files. +# +# The output files will be placed in $target_gen_dir with the source name +# suffix-replaced from "Foo.xib" to "Foo.nib" +# +# Example use: +# +# compile_xib_resources("my_nibs") { +# sources = [ +# "A.xib", +# "B.xib", +# ] +# } +# + +template("compile_xib_resources") { + action_foreach(target_name) { + forward_variables_from(invoker, [ "sources" ]) + + script = "//Meta/gn/build/invoke_process_with_args.py" + + outputs = [ "$target_gen_dir/{{source_name_part}}.nib" ] + args = [ + "ibtool", + "--errors", + "--warnings", + "--notices", + "--output-format", + "human-readable-text", + "--compile", + rebase_path(target_gen_dir, root_build_dir) + "/{{source_name_part}}.nib", + "{{source}}", + ] + } +} diff --git a/Meta/gn/secondary/BUILD.gn b/Meta/gn/secondary/BUILD.gn index 0434b52823..62032ccfb8 100644 --- a/Meta/gn/secondary/BUILD.gn +++ b/Meta/gn/secondary/BUILD.gn @@ -15,6 +15,12 @@ group("serenity") { deps = [ "//Kernel(//Meta/gn/build/toolchain:serenity)" ] } +group("macpdf") { + if (current_os == "mac") { + deps = [ "//Meta/Lagom/Contrib/MacPDF" ] + } +} + # A pool called "console" in the root BUILD.gn is magic and represents ninja's # built-in console pool. (Requires a GN with `gn --version` >= 552353.) pool("console") { diff --git a/Meta/gn/secondary/Meta/Lagom/Contrib/MacPDF/BUILD.gn b/Meta/gn/secondary/Meta/Lagom/Contrib/MacPDF/BUILD.gn new file mode 100644 index 0000000000..f9bd8eff82 --- /dev/null +++ b/Meta/gn/secondary/Meta/Lagom/Contrib/MacPDF/BUILD.gn @@ -0,0 +1,104 @@ +import("//Meta/gn/build/mac/compile_xib_resources.gni") + +assert(current_os == "mac", "This application is macOS specific") + +group("MacPDF") { + deps = [ ":MacPDF.app" ] +} + +compile_xib_resources("pdf_nibs") { + sources = [ "MainMenu.xib" ] +} + +executable("MacPDF_executable") { + include_dirs = [ + "//Userland/Libraries", + "//Userland/Services", + ] + defines = [ "AK_DONT_REPLACE_STD" ] + cflags_objcc = [ "-fobjc-arc" ] + deps = [ + ":pdf_nibs", + "//AK", + "//Userland/Libraries/LibCore", + "//Userland/Libraries/LibGfx", + "//Userland/Libraries/LibPDF", + ] + frameworks = [ + "Cocoa.framework", + "UniformTypeIdentifiers.framework", + ] + sources = [ + "AppDelegate.mm", + "MacPDFDocument.mm", + "MacPDFOutlineViewDataSource.mm", + "MacPDFView.mm", + "MacPDFWindowController.mm", + "main.mm", + ] + output_name = "MacPDF" +} + +bundle_data("pdf_bundle_info_plist") { + sources = [ "Info.plist" ] + outputs = [ "{{bundle_contents_dir}}/Info.plist" ] +} + +bundle_data("pdf_bundle_executables") { + public_deps = [ ":MacPDF_executable" ] + sources = [ "$root_out_dir/bin/MacPDF" ] + outputs = [ "{{bundle_executable_dir}}/{{source_file_part}}" ] +} + +bundle_data("pdf_bundle_libs") { + public_deps = [ + "//Userland/Libraries/LibCompress", + "//Userland/Libraries/LibCore", + "//Userland/Libraries/LibCrypto", + "//Userland/Libraries/LibFileSystem", + "//Userland/Libraries/LibGfx", + "//Userland/Libraries/LibIPC", + "//Userland/Libraries/LibPDF", + "//Userland/Libraries/LibTextCodec", + ] + sources = [ + "$root_out_dir/lib/liblagom-compress.dylib", + "$root_out_dir/lib/liblagom-core.dylib", + "$root_out_dir/lib/liblagom-crypto.dylib", + "$root_out_dir/lib/liblagom-filesystem.dylib", + "$root_out_dir/lib/liblagom-gfx.dylib", + "$root_out_dir/lib/liblagom-ipc.dylib", + "$root_out_dir/lib/liblagom-pdf.dylib", + "$root_out_dir/lib/liblagom-textcodec.dylib", + ] + outputs = [ "{{bundle_contents_dir}}/lib/{{source_file_part}}" ] +} + +bundle_data("pdf_bundle_nibs") { + public_deps = [ ":pdf_nibs" ] + sources = get_target_outputs(":pdf_nibs") + outputs = [ "{{bundle_resources_dir}}" + "{{source_file_part}}" ] +} + +bundle_data("pdf_resources") { + # FIXME: Don't list directories here, list out the files directly + sources = [ "//Base/res/fonts" ] + outputs = [ "{{bundle_resources_dir}}/res/" + "{{source_file_part}}" ] +} + +create_bundle("MacPDF.app") { + product_type = "com.apple.product-type.application" + + bundle_root_dir = "$root_build_dir/$target_name" + bundle_contents_dir = "$bundle_root_dir/Contents" + bundle_resources_dir = "$bundle_contents_dir/Resources" + bundle_executable_dir = "$bundle_contents_dir/MacOS" + + deps = [ + ":pdf_bundle_executables", + ":pdf_bundle_info_plist", + ":pdf_bundle_libs", + ":pdf_bundle_nibs", + ":pdf_resources", + ] +}