diff options
-rw-r--r-- | .github/workflows/mac.yml | 3 | ||||
-rw-r--r-- | README.md | 7 | ||||
-rw-r--r-- | components/script/dom/servoparser/async_html.rs | 7 | ||||
-rw-r--r-- | components/script/dom/servoparser/html.rs | 9 | ||||
-rw-r--r-- | components/script/dom/servoparser/mod.rs | 10 | ||||
-rw-r--r-- | components/script/dom/servoparser/xml.rs | 10 | ||||
-rw-r--r-- | etc/homebrew/Brewfile | 1 | ||||
-rw-r--r-- | python/servo/platform/macos.py | 15 |
8 files changed, 42 insertions, 20 deletions
diff --git a/.github/workflows/mac.yml b/.github/workflows/mac.yml index 2724f5044de..c169df3693f 100644 --- a/.github/workflows/mac.yml +++ b/.github/workflows/mac.yml @@ -57,8 +57,7 @@ jobs: - name: Bootstrap run: | python3 -m pip install --upgrade pip virtualenv - python3 ./mach bootstrap-gstreamer - brew install gnu-tar + python3 ./mach bootstrap - name: Release build run: | python3 ./mach build --release --with-${{ env.LAYOUT }} diff --git a/README.md b/README.md index 042065368de..efdf478175a 100644 --- a/README.md +++ b/README.md @@ -23,12 +23,11 @@ manually, try the [manual build setup][manual-build]. ### macOS - Install [Xcode](https://developer.apple.com/xcode/) +- Install [Homebrew](https://brew.sh/) - Run `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh` -- Run `./mach bootstrap-gstreamer`. - *This will install the recommended version of GStreamer globally on your system.* -- Run `brew bundle install --file=etc/homebrew/Brewfile` - Run `pip install virtualenv` - +- Run `./mach bootstrap`<br/> + *Note: This will install the recommended version of GStreamer globally on your system.* ### Linux diff --git a/components/script/dom/servoparser/async_html.rs b/components/script/dom/servoparser/async_html.rs index 4a2e34316eb..9a76278b178 100644 --- a/components/script/dom/servoparser/async_html.rs +++ b/components/script/dom/servoparser/async_html.rs @@ -272,7 +272,8 @@ impl Tokenizer { tokenizer } - pub fn feed(&mut self, input: &mut BufferQueue) -> Result<(), DomRoot<HTMLScriptElement>> { + #[must_use] + pub fn feed(&mut self, input: &mut BufferQueue) -> TokenizerResult<DomRoot<HTMLScriptElement>> { let mut send_tendrils = VecDeque::new(); while let Some(str) = input.pop_front() { send_tendrils.push_back(SendTendril::from(str)); @@ -296,7 +297,7 @@ impl Tokenizer { ToTokenizerMsg::TokenizerResultDone { updated_input } => { let buffer_queue = create_buffer_queue(updated_input); *input = buffer_queue; - return Ok(()); + return TokenizerResult::Done; }, ToTokenizerMsg::TokenizerResultScript { script, @@ -305,7 +306,7 @@ impl Tokenizer { let buffer_queue = create_buffer_queue(updated_input); *input = buffer_queue; let script = self.get_node(&script.id); - return Err(DomRoot::from_ref(script.downcast().unwrap())); + return TokenizerResult::Script(DomRoot::from_ref(script.downcast().unwrap())); }, ToTokenizerMsg::End => unreachable!(), }; diff --git a/components/script/dom/servoparser/html.rs b/components/script/dom/servoparser/html.rs index 1bbc0aeeae8..fbf76473d27 100644 --- a/components/script/dom/servoparser/html.rs +++ b/components/script/dom/servoparser/html.rs @@ -77,10 +77,13 @@ impl Tokenizer { Tokenizer { inner: inner } } - pub fn feed(&mut self, input: &mut BufferQueue) -> Result<(), DomRoot<HTMLScriptElement>> { + #[must_use] + pub fn feed(&mut self, input: &mut BufferQueue) -> TokenizerResult<DomRoot<HTMLScriptElement>> { match self.inner.feed(input) { - TokenizerResult::Done => Ok(()), - TokenizerResult::Script(script) => Err(DomRoot::from_ref(script.downcast().unwrap())), + TokenizerResult::Done => TokenizerResult::Done, + TokenizerResult::Script(script) => { + TokenizerResult::Script(DomRoot::from_ref(script.downcast().unwrap())) + }, } } diff --git a/components/script/dom/servoparser/mod.rs b/components/script/dom/servoparser/mod.rs index 6bfed4d8dea..ba114366aa2 100644 --- a/components/script/dom/servoparser/mod.rs +++ b/components/script/dom/servoparser/mod.rs @@ -43,6 +43,7 @@ use encoding_rs::Encoding; use html5ever::buffer_queue::BufferQueue; use html5ever::tendril::fmt::UTF8; use html5ever::tendril::{ByteTendril, StrTendril, TendrilSink}; +use html5ever::tokenizer::TokenizerResult; use html5ever::tree_builder::{ElementFlags, NextParserState, NodeOrText, QuirksMode, TreeSink}; use html5ever::{Attribute, ExpandedName, LocalName, QualName}; use hyper_serde::Serde; @@ -589,7 +590,7 @@ impl ServoParser { fn tokenize<F>(&self, mut feed: F) where - F: FnMut(&mut Tokenizer) -> Result<(), DomRoot<HTMLScriptElement>>, + F: FnMut(&mut Tokenizer) -> TokenizerResult<DomRoot<HTMLScriptElement>>, { loop { assert!(!self.suspended.get()); @@ -597,8 +598,8 @@ impl ServoParser { self.document.reflow_if_reflow_timer_expired(); let script = match feed(&mut *self.tokenizer.borrow_mut()) { - Ok(()) => return, - Err(script) => script, + TokenizerResult::Done => return, + TokenizerResult::Script(script) => script, }; // https://html.spec.whatwg.org/multipage/#parsing-main-incdata @@ -691,7 +692,8 @@ enum Tokenizer { } impl Tokenizer { - fn feed(&mut self, input: &mut BufferQueue) -> Result<(), DomRoot<HTMLScriptElement>> { + #[must_use] + fn feed(&mut self, input: &mut BufferQueue) -> TokenizerResult<DomRoot<HTMLScriptElement>> { match *self { Tokenizer::Html(ref mut tokenizer) => tokenizer.feed(input), Tokenizer::AsyncHtml(ref mut tokenizer) => tokenizer.feed(input), diff --git a/components/script/dom/servoparser/xml.rs b/components/script/dom/servoparser/xml.rs index ac900d61ce0..9b609cd7ea4 100644 --- a/components/script/dom/servoparser/xml.rs +++ b/components/script/dom/servoparser/xml.rs @@ -10,6 +10,7 @@ use crate::dom::document::Document; use crate::dom::htmlscriptelement::HTMLScriptElement; use crate::dom::node::Node; use crate::dom::servoparser::{ParsingAlgorithm, Sink}; +use html5ever::tokenizer::TokenizerResult; use js::jsapi::JSTracer; use servo_url::ServoUrl; use xml5ever::buffer_queue::BufferQueue; @@ -39,12 +40,13 @@ impl Tokenizer { Tokenizer { inner: tok } } - pub fn feed(&mut self, input: &mut BufferQueue) -> Result<(), DomRoot<HTMLScriptElement>> { + #[must_use] + pub fn feed(&mut self, input: &mut BufferQueue) -> TokenizerResult<DomRoot<HTMLScriptElement>> { self.inner.run(input); - if let Some(script) = self.inner.sink.sink.script.take() { - return Err(script); + match self.inner.sink.sink.script.take() { + Some(script) => TokenizerResult::Script(script), + None => TokenizerResult::Done, } - Ok(()) } pub fn end(&mut self) { diff --git a/etc/homebrew/Brewfile b/etc/homebrew/Brewfile index 008f8628d59..b9a8874a0a5 100644 --- a/etc/homebrew/Brewfile +++ b/etc/homebrew/Brewfile @@ -1,3 +1,4 @@ # Runtime dependencies brew "xz" +brew "gnu-tar" diff --git a/python/servo/platform/macos.py b/python/servo/platform/macos.py index 0f5ca632b2f..38169e9a75a 100644 --- a/python/servo/platform/macos.py +++ b/python/servo/platform/macos.py @@ -54,6 +54,21 @@ class MacOS(Base): return False return True + def _platform_bootstrap(self, _cache_dir: str, force: bool) -> bool: + installed_something = False + try: + brewfile = os.path.join(util.SERVO_ROOT, "etc", "homebrew", "Brewfile") + output = subprocess.check_output( + ['brew', 'bundle', 'install', "--file", brewfile] + ).decode("utf-8") + print(output) + installed_something = "Installing" in output + except subprocess.CalledProcessError as e: + print("Could not run homebrew. Is it installed?") + raise e + installed_something |= self._platform_bootstrap_gstreamer(False) + return installed_something + def _platform_bootstrap_gstreamer(self, force: bool) -> bool: if not force and self.is_gstreamer_installed(cross_compilation_target=None): return False |