diff --git a/meson.build b/meson.build index 4934488..160efd5 100644 --- a/meson.build +++ b/meson.build @@ -1,12 +1,197 @@ -project('Bolt', 'cpp', subproject_dir: 'cef', default_options: ['buildtype=debugoptimized', 'cpp_std=c++17', 'cpp_eh=none', 'prefix=/opt', 'bindir=bolt']) -cmake = import('cmake') -libcef_dll_wrapper = cmake.subproject('dist').dependency('libcef_dll_wrapper') +project('Bolt', 'cpp', default_options: ['buildtype=debugoptimized', 'cpp_std=c++17', 'cpp_eh=none', 'prefix=/opt', 'bindir=bolt']) + +# Configure files in cef binary distributable +cef_include = include_directories('cef/dist') libcef = custom_target('libcef', output: 'libcef.so', command: ['./cef/install.sh', '@SOURCE_ROOT@', '@OUTDIR@']) meson.add_install_script('cef/install.sh') -deps = [libcef_dll_wrapper, dependency('fmt'), dependency('tesseract')] +# CEF binary_distrib comes with a cmake project to build its dll wrapper. Unfortunately, with Meson +# it's impossible to target a cmake project while also configuring files (such as libcef.so) in that +# same project. So instead of targeting cmake, we build the wrapper directly, like this. +# +# If files are added or deleted in a different CEF version, this will definitely break. This list is for 113.0.5672.93. +libcef_dll_wrapper = static_library( + 'libcef_dll_wrapper', + 'cef/dist/libcef_dll/base/cef_atomic_flag.cc', + 'cef/dist/libcef_dll/base/cef_callback_helpers.cc', + 'cef/dist/libcef_dll/base/cef_callback_internal.cc', + 'cef/dist/libcef_dll/base/cef_lock.cc', + 'cef/dist/libcef_dll/base/cef_lock_impl.cc', + 'cef/dist/libcef_dll/base/cef_logging.cc', + 'cef/dist/libcef_dll/base/cef_ref_counted.cc', + 'cef/dist/libcef_dll/base/cef_thread_checker_impl.cc', + 'cef/dist/libcef_dll/base/cef_weak_ptr.cc', + 'cef/dist/libcef_dll/cpptoc/accessibility_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/app_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/audio_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/base_ref_counted_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/base_scoped_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/browser_process_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/client_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/command_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/completion_callback_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/context_menu_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/cookie_access_filter_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/cookie_visitor_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/delete_cookies_callback_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/dev_tools_message_observer_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/display_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/domvisitor_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/download_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/download_image_callback_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/drag_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/end_tracing_callback_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/extension_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/focus_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/frame_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/jsdialog_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/keyboard_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/life_span_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/load_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/media_observer_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/dialog_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/find_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/read_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/media_route_create_callback_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/media_sink_device_info_callback_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/menu_model_delegate_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/navigation_entry_visitor_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/pdf_print_callback_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/permission_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/print_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/render_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/render_process_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/request_context_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/request_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/resolve_callback_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/resource_bundle_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/resource_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/resource_request_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/response_filter_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/run_file_dialog_callback_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/scheme_handler_factory_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/server_handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/set_cookie_callback_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/string_visitor_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/task_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/urlrequest_client_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/v8accessor_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/v8array_buffer_release_callback_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/v8handler_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/v8interceptor_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/views/browser_view_delegate_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/views/button_delegate_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/views/menu_button_delegate_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/views/panel_delegate_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/views/textfield_delegate_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/views/view_delegate_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/views/window_delegate_cpptoc.cc', + 'cef/dist/libcef_dll/cpptoc/write_handler_cpptoc.cc', + 'cef/dist/libcef_dll/ctocpp/auth_callback_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/before_download_callback_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/binary_value_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/browser_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/browser_host_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/callback_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/command_line_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/context_menu_params_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/cookie_manager_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/dictionary_value_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/domdocument_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/domnode_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/download_item_callback_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/download_item_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/drag_data_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/extension_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/file_dialog_callback_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/frame_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/get_extension_resource_callback_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/image_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/jsdialog_callback_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/list_value_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/media_access_callback_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/media_router_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/media_route_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/media_sink_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/media_source_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/menu_model_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/navigation_entry_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/permission_prompt_callback_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/post_data_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/registration_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/post_data_element_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/preference_manager_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/preference_registrar_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/print_dialog_callback_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/print_job_callback_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/print_settings_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/process_message_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/request_context_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/request_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/resource_bundle_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/resource_read_callback_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/resource_skip_callback_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/response_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/run_context_menu_callback_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/run_quick_menu_callback_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/scheme_registrar_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/select_client_certificate_callback_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/server_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/shared_memory_region_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/shared_process_message_builder_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/sslinfo_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/sslstatus_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/stream_reader_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/stream_writer_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/task_runner_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/thread_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/urlrequest_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/v8context_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/v8exception_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/v8stack_frame_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/v8stack_trace_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/v8value_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/value_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/views/box_layout_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/views/browser_view_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/views/button_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/views/display_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/views/fill_layout_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/views/label_button_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/views/layout_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/views/menu_button_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/views/menu_button_pressed_lock_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/views/overlay_controller_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/views/panel_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/views/scroll_view_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/views/textfield_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/views/view_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/views/window_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/waitable_event_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/x509certificate_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/x509cert_principal_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/xml_reader_ctocpp.cc', + 'cef/dist/libcef_dll/ctocpp/zip_reader_ctocpp.cc', + 'cef/dist/libcef_dll/shutdown_checker.cc', + 'cef/dist/libcef_dll/transfer_util.cc', + 'cef/dist/libcef_dll/wrapper/cef_byte_read_handler.cc', + 'cef/dist/libcef_dll/wrapper/cef_closure_task.cc', + 'cef/dist/libcef_dll/wrapper/cef_message_router.cc', + 'cef/dist/libcef_dll/wrapper/cef_resource_manager.cc', + 'cef/dist/libcef_dll/wrapper/cef_scoped_temp_dir.cc', + 'cef/dist/libcef_dll/wrapper/cef_stream_resource_handler.cc', + 'cef/dist/libcef_dll/wrapper/cef_xml_object.cc', + 'cef/dist/libcef_dll/wrapper/cef_zip_archive.cc', + 'cef/dist/libcef_dll/wrapper/libcef_dll_wrapper.cc', + 'cef/dist/libcef_dll/wrapper/libcef_dll_wrapper2.cc', + include_directories: [cef_include], + cpp_args: ['-DWRAPPING_CEF_SHARED'], +) + +deps = [dependency('fmt'), dependency('tesseract')] if build_machine.system() == 'linux' - deps += [dependency('x11'), dependency('xcb'), dependency('xcb-record')] + xcb_dep = dependency('xcb') + deps += [dependency('x11'), xcb_dep, dependency('xcb-record')] endif if host_machine.system() == 'linux' @@ -17,6 +202,7 @@ elif host_machine.system() == 'darwin' client_native = 'src/native/client_cocoa.mm' endif +# C++ executable executable( 'bolt', 'src/main.cxx', 'src/browser/app.cxx', 'src/browser.cxx', 'src/browser/client.cxx', 'src/browser/dom_visitor.cxx', @@ -24,7 +210,8 @@ executable( client_native, cpp_args: ['-Wall'], dependencies: deps, + include_directories: [cef_include], install: true, install_rpath: '.', - link_with: [libcef] + link_with: [libcef, libcef_dll_wrapper] )