diff --git a/ports/geckolib/bindings.rs b/ports/geckolib/bindings.rs index 792fcc4704b..10cb38cffbe 100644 --- a/ports/geckolib/bindings.rs +++ b/ports/geckolib/bindings.rs @@ -1,18 +1,5 @@ /* automatically generated by rust-bindgen */ -pub enum nsIAtom { } -pub enum nsINode { } -pub type RawGeckoNode = nsINode; -pub enum Element { } -pub type RawGeckoElement = Element; -pub enum nsIDocument { } -pub type RawGeckoDocument = nsIDocument; -pub enum ServoNodeData { } -pub enum ServoComputedValues { } -pub enum RawServoStyleSheet { } -pub enum RawServoStyleSet { } - -// Temporary manual hack. This will be fixed soon in bindgen. use gecko_style_structs::nsStyleFont; use gecko_style_structs::nsStyleColor; use gecko_style_structs::nsStyleList; @@ -38,6 +25,18 @@ use gecko_style_structs::nsStyleSVGReset; use gecko_style_structs::nsStyleColumn; use gecko_style_structs::nsStyleEffects; + +pub enum nsIAtom { } +pub enum nsINode { } +pub type RawGeckoNode = nsINode; +pub enum Element { } +pub type RawGeckoElement = Element; +pub enum nsIDocument { } +pub type RawGeckoDocument = nsIDocument; +pub enum ServoNodeData { } +pub enum ServoComputedValues { } +pub enum RawServoStyleSheet { } +pub enum RawServoStyleSet { } extern "C" { pub fn Gecko_ChildrenCount(node: *mut RawGeckoNode) -> u32; pub fn Gecko_NodeIsElement(node: *mut RawGeckoNode) -> bool; diff --git a/ports/geckolib/tools/regen_bindings.sh b/ports/geckolib/tools/regen_bindings.sh index 02291c07084..b02da395434 100755 --- a/ports/geckolib/tools/regen_bindings.sh +++ b/ports/geckolib/tools/regen_bindings.sh @@ -20,18 +20,34 @@ export DYLD_LIBRARY_PATH="$(pwd)/llvm/build/Release+Asserts/lib" export LD_LIBRARY_PATH="$(pwd)/llvm/build/Release+Asserts/lib" export DIST_INCLUDE="$1/dist/include" +# Prevent bindgen from generating opaque types for the gecko style structs. +export MAP_GECKO_STRUCTS="" +for STRUCT in nsStyleFont nsStyleColor nsStyleList nsStyleText \ + nsStyleVisibility nsStyleUserInterface nsStyleTableBorder \ + nsStyleSVG nsStyleVariables nsStyleBackground nsStylePosition \ + nsStyleTextReset nsStyleDisplay nsStyleContent nsStyleUIReset \ + nsStyleTable nsStyleMargin nsStylePadding nsStyleBorder \ + nsStyleOutline nsStyleXUL nsStyleSVGReset nsStyleColumn nsStyleEffects +do + MAP_GECKO_STRUCTS=$MAP_GECKO_STRUCTS"-blacklist-type $STRUCT " + MAP_GECKO_STRUCTS=$MAP_GECKO_STRUCTS"-raw-line 'use gecko_style_structs::$STRUCT;'$'\n' " +done + # Check for the include directory. if [ ! -d "$DIST_INCLUDE" ]; then echo "$DIST_INCLUDE: directory not found" exit 1 fi +# We need to use 'eval' here to make MAP_GECKO_STRUCTS evaluate properly as +# multiple arguments. +# # Uncomment the following line to run rust-bindgen in a debugger on mac. # The absolute path is required to allow launching lldb with an untrusted # library in DYLD_LIBRARY_PATH. # # /Applications/Xcode.app/Contents/Developer/usr/bin/lldb -- -./rust-bindgen/target/debug/bindgen \ +eval ./rust-bindgen/target/debug/bindgen \ -x c++ -std=gnu++0x \ "-I$DIST_INCLUDE" \ -o ../bindings.rs \ @@ -39,3 +55,4 @@ fi "$DIST_INCLUDE/mozilla/ServoBindings.h" \ -match "ServoBindings.h" \ -match "nsStyleStructList.h" \ + $MAP_GECKO_STRUCTS