Skip to content
This repository has been archived by the owner on Jun 30, 2020. It is now read-only.

Commit

Permalink
Generate code into OUT_DIR.
Browse files Browse the repository at this point in the history
This is necessary to ensure Cargo knows when to rebuild. Normally
.gitignore would be enough to exclude these from Cargo's freshness
calculation, but rust-lang/cargo#1729 prevents
this currently. This is the new, correct way to do these thigns, just
like the style crate does.
  • Loading branch information
metajack committed Jun 17, 2015
1 parent e1b28d8 commit 07d9562
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 51 deletions.
13 changes: 2 additions & 11 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,19 +1,11 @@
/.servo
/.cargo
/Cargo.lock
/.servobuild
/target
/components/servo/target
/ports/gonk/target
/ports/cef/target
/ports/android/bin
/ports/android/libs
/ports/android/local.properties
/ports/android/obj
/components/script/dom/bindings/codegen/*.rs
/components/script/dom/bindings/codegen/_cache
/components/script/dom/bindings/codegen/Bindings
/components/script/dom/bindings/codegen/test/*.rs
/.servobuild
/.servo
/tests/wpt/_virtualenv
*~
*#
Expand All @@ -34,4 +26,3 @@ Servo.app
.config.mk.last
parser.out
/glfw

44 changes: 23 additions & 21 deletions components/script/dom/bindings/codegen/CodegenRust.py
Original file line number Diff line number Diff line change
Expand Up @@ -1429,25 +1429,26 @@ class CGImports(CGWrapper):
"""
Generates the appropriate import/use statements.
"""
def __init__(self, child, descriptors, callbacks, imports):
def __init__(self, child, descriptors, callbacks, imports, ignored_warnings=None):
"""
Adds a set of imports.
"""
ignored_warnings = [
# Allow unreachable_code because we use 'break' in a way that
# sometimes produces two 'break's in a row. See for example
# CallbackMember.getArgConversions.
'unreachable_code',
'non_camel_case_types',
'non_upper_case_globals',
'unused_parens',
'unused_imports',
'unused_variables',
'unused_unsafe',
'unused_mut',
'unused_assignments',
'dead_code',
]
if ignored_warnings is None:
ignored_warnings = [
# Allow unreachable_code because we use 'break' in a way that
# sometimes produces two 'break's in a row. See for example
# CallbackMember.getArgConversions.
'unreachable_code',
'non_camel_case_types',
'non_upper_case_globals',
'unused_parens',
'unused_imports',
'unused_variables',
'unused_unsafe',
'unused_mut',
'unused_assignments',
'dead_code',
]

def componentTypes(type):
if type.nullable():
Expand Down Expand Up @@ -1496,7 +1497,9 @@ def getIdentifier(t):

imports += ['dom::types::%s' % getIdentifier(t).name for t in types if isImportable(t)]

statements = ['#![allow(%s)]' % ','.join(ignored_warnings)]
statements = []
if len(ignored_warnings) > 0:
statements.append('#![allow(%s)]' % ','.join(ignored_warnings))
statements.extend('use %s;' % i for i in sorted(set(imports)))

CGWrapper.__init__(self, child,
Expand Down Expand Up @@ -1815,7 +1818,7 @@ def UnionTypes(descriptors, dictionaries, callbacks, config):
CGUnionConversionStruct(t, provider)
])

return CGImports(CGList(SortedDictValues(unionStructs), "\n\n"), [], [], imports)
return CGImports(CGList(SortedDictValues(unionStructs), "\n\n"), [], [], imports, ignored_warnings=[])


class Argument():
Expand Down Expand Up @@ -5415,7 +5418,7 @@ def RegisterBindings(config):
'js::jsapi::JSContext',
'js::jsapi::JSObject',
'libc',
])
], ignored_warnings=[])

@staticmethod
def InterfaceTypes(config):
Expand All @@ -5438,8 +5441,7 @@ def Bindings(config):
def InheritTypes(config):

descriptors = config.getDescriptors(register=True, isCallback=False)
allprotos = [CGGeneric("#![allow(unused_imports)]\n"),
CGGeneric("use dom::types::*;\n"),
allprotos = [CGGeneric("use dom::types::*;\n"),
CGGeneric("use dom::bindings::js::{JS, JSRef, LayoutJS, Rootable, Temporary};\n"),
CGGeneric("use dom::bindings::trace::JSTraceable;\n"),
CGGeneric("use dom::bindings::utils::Reflectable;\n"),
Expand Down
31 changes: 25 additions & 6 deletions components/script/dom/bindings/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -155,11 +155,30 @@ pub mod codegen {
// FIXME(#5853) we shouldn't need to
// allow moved_no_move here
#[allow(unrooted_must_root, moved_no_move)]
pub mod Bindings;
pub mod InterfaceTypes;
pub mod InheritTypes;
pub mod PrototypeList;
pub mod RegisterBindings;
pub mod UnionTypes;
pub mod Bindings {
include!(concat!(env!("OUT_DIR"), "/Bindings/mod.rs"));
}
pub mod InterfaceTypes {
include!(concat!(env!("OUT_DIR"), "/InterfaceTypes.rs"));
}
#[allow(unused_imports)]
pub mod InheritTypes {
include!(concat!(env!("OUT_DIR"), "/InheritTypes.rs"));
}
pub mod PrototypeList {
include!(concat!(env!("OUT_DIR"), "/PrototypeList.rs"));
}
#[allow(unreachable_code, non_camel_case_types, non_upper_case_globals, unused_parens,
unused_imports, unused_variables, unused_unsafe, unused_mut, unused_assignments,
dead_code)]
pub mod RegisterBindings {
include!(concat!(env!("OUT_DIR"), "/RegisterBindings.rs"));
}
#[allow(unreachable_code, non_camel_case_types, non_upper_case_globals, unused_parens,
unused_imports, unused_variables, unused_unsafe, unused_mut, unused_assignments,
dead_code)]
pub mod UnionTypes {
include!(concat!(env!("OUT_DIR"), "/UnionTypes.rs"));
}
}

5 changes: 3 additions & 2 deletions components/script/dom/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -190,8 +190,9 @@ pub mod macros;

pub mod bindings;

#[path="bindings/codegen/InterfaceTypes.rs"]
pub mod types;
pub mod types {
include!(concat!(env!("OUT_DIR"), "/InterfaceTypes.rs"));
}

pub mod activation;
pub mod attr;
Expand Down
22 changes: 11 additions & 11 deletions components/script/makefile.cargo
Original file line number Diff line number Diff line change
Expand Up @@ -8,38 +8,38 @@ BINDINGS_SRC = $(shell pwd)/dom/bindings/codegen
WEBIDLS_SRC = $(shell pwd)/dom/webidls
WEBIDLS = $(call rwildcard,$(WEBIDLS_SRC),*.webidl)
BINDINGS = $(patsubst %.webidl,%Binding.rs,$(WEBIDLS))
AUTOGEN_SRC = $(foreach var,$(BINDINGS),$(subst $(WEBIDLS_SRC),$(BINDINGS_SRC)/Bindings,$(var)))
AUTOGEN_SRC = $(foreach var,$(BINDINGS),$(subst $(WEBIDLS_SRC),$(OUT_DIR)/Bindings,$(var)))

CACHE_DIR = $(BINDINGS_SRC)/_cache
CACHE_DIR = $(OUT_DIR)/_cache

bindinggen_dependencies := $(addprefix $(BINDINGS_SRC)/,BindingGen.py Bindings.conf Configuration.py CodegenRust.py parser/WebIDL.py ParserResults.pkl Bindings/.done)
bindinggen_dependencies := $(addprefix $(BINDINGS_SRC)/,BindingGen.py Bindings.conf Configuration.py CodegenRust.py parser/WebIDL.py) $(OUT_DIR)/ParserResults.pkl $(OUT_DIR)/Bindings/.done

globalgen_dependencies := $(addprefix $(BINDINGS_SRC)/,GlobalGen.py Bindings.conf Configuration.py CodegenRust.py parser/WebIDL.py) $(CACHE_DIR)/.done $(BINDINGS_SRC)/Bindings/.done
globalgen_dependencies := $(addprefix $(BINDINGS_SRC)/,GlobalGen.py Bindings.conf Configuration.py CodegenRust.py parser/WebIDL.py) $(CACHE_DIR)/.done $(OUT_DIR)/Bindings/.done

.PHONY: all
all: $(AUTOGEN_SRC)

$(BINDINGS_SRC)/Bindings/.done:
mkdir -p $(BINDINGS_SRC)/Bindings
$(OUT_DIR)/Bindings/.done:
mkdir -p $(OUT_DIR)/Bindings
touch $@

$(CACHE_DIR)/.done:
mkdir -p $(CACHE_DIR)
touch $@

$(BINDINGS_SRC)/ParserResults.pkl: $(globalgen_dependencies) $(WEBIDLS)
$(OUT_DIR)/ParserResults.pkl: $(globalgen_dependencies) $(WEBIDLS)
$(PYTHON) $(BINDINGS_SRC)/pythonpath.py \
-I$(BINDINGS_SRC)/parser -I$(BINDINGS_SRC)/ply \
-D$(BINDINGS_SRC) \
-D$(OUT_DIR) \
$(BINDINGS_SRC)/GlobalGen.py $(BINDINGS_SRC)/Bindings.conf . \
--cachedir=$(CACHE_DIR) \
$(WEBIDLS)

$(AUTOGEN_SRC): $(BINDINGS_SRC)/Bindings/%Binding.rs: $(bindinggen_dependencies) \
$(addprefix $(WEBIDLS_SRC)/,%.webidl)
$(AUTOGEN_SRC): $(OUT_DIR)/Bindings/%Binding.rs: $(bindinggen_dependencies) \
$(addprefix $(WEBIDLS_SRC)/,%.webidl)
$(PYTHON) $(BINDINGS_SRC)/pythonpath.py \
-I$(BINDINGS_SRC)/parser -I$(BINDINGS_SRC)/ply \
-D$(BINDINGS_SRC) \
-D$(OUT_DIR) \
$(BINDINGS_SRC)/BindingGen.py \
$(BINDINGS_SRC)/Bindings.conf Bindings/$*Binding $(addprefix $(WEBIDLS_SRC)/,$*.webidl)
touch $@

0 comments on commit 07d9562

Please sign in to comment.