aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/mac.yml3
-rw-r--r--README.md7
-rw-r--r--components/script/dom/servoparser/async_html.rs7
-rw-r--r--components/script/dom/servoparser/html.rs9
-rw-r--r--components/script/dom/servoparser/mod.rs10
-rw-r--r--components/script/dom/servoparser/xml.rs10
-rw-r--r--etc/homebrew/Brewfile1
-rw-r--r--python/servo/platform/macos.py15
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