Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
redox-os
cbindgen
Commits
e7cddcfd
Commit
e7cddcfd
authored
Apr 30, 2017
by
Ryan Hunt
Browse files
Try and load cbindgen.toml for config automatically
parent
c4144443
Changes
5
Hide whitespace changes
Inline
Side-by-side
README.md
View file @
e7cddcfd
...
...
@@ -30,13 +30,14 @@ Here's an example build.rs script:
```
rust
extern
crate
cbindgen
;
use
std
::
env
;
use
cbindgen
::{
Config
,
Library
};
fn
main
()
{
let
config
=
Config
::
from_file
(
"cbindgen.toml"
);
let
source
=
env
::
var
(
"CARGO_MANIFEST_DIR"
)
.unwrap
(
);
let
root
=
env
::
var
(
"CARGO_MANIFEST_DIR"
)
.unwrap
(
);
let
config
=
Config
::
from_root_or_default
(
&
root
);
Library
::
load
(
&
source
,
&
config
)
Library
::
load
(
&
root
,
&
config
)
.generate
()
.unwrap
()
.write_to_file
(
"bindings.h"
);
}
...
...
samples/build-script/build.rs
View file @
e7cddcfd
...
...
@@ -4,10 +4,10 @@ use std::env;
use
cbindgen
::{
Config
,
Library
};
fn
main
()
{
let
config
=
Config
::
from_file
(
"cbindgen.toml"
);
let
source
=
env
::
var
(
"CARGO_MANIFEST_DIR"
)
.unwrap
(
);
let
root
=
env
::
var
(
"CARGO_MANIFEST_DIR"
)
.unwrap
(
);
let
config
=
Config
::
from_root_or_default
(
&
root
);
Library
::
load
(
&
source
,
&
config
)
Library
::
load
(
&
root
,
&
config
)
.generate
()
.unwrap
()
.write_to_file
(
"bindings.h"
);
}
samples/build-script/cbindgen.toml
View file @
e7cddcfd
...
...
@@ -3,6 +3,6 @@ header = "/* This file is autogenerated with cbindgen. */"
include-version
=
true
[struct]
derive-
op-
eq
=
true
derive-
op-
lt
=
true
derive-
op-
lte
=
true
derive-eq
=
true
derive-lt
=
true
derive-lte
=
true
src/bindgen/config.rs
View file @
e7cddcfd
use
std
::
default
::
Default
;
use
std
::
fs
::
File
;
use
std
::
io
::
prelude
::
*
;
use
std
::
io
::{
self
,
BufReader
};
use
std
::
default
::
Default
;
use
std
::
path
::
PathBuf
;
use
toml
;
...
...
@@ -9,6 +10,21 @@ pub use bindgen::directive::*;
pub
const
VERSION
:
&
'static
str
=
env!
(
"CARGO_PKG_VERSION"
);
#[derive(Debug,
Clone,
Deserialize)]
#[serde(rename_all
=
"kebab-case"
)]
pub
enum
Curly
{
SameLine
,
NextLine
,
}
#[derive(Debug,
Clone,
Deserialize)]
#[serde(rename_all
=
"kebab-case"
)]
pub
enum
Layout
{
Horizontal
,
Vertical
,
Auto
,
}
#[derive(Default,
Debug,
Clone,
Deserialize)]
#[serde(rename_all
=
"kebab-case"
)]
#[serde(deny_unknown_fields)]
...
...
@@ -24,7 +40,7 @@ pub struct Config {
}
impl
Config
{
pub
fn
from_file
(
file_name
:
&
str
)
->
Config
{
pub
fn
from_file
(
file_name
:
&
str
)
->
Result
<
Config
,
String
>
{
fn
read
(
file_name
:
&
str
)
->
io
::
Result
<
String
>
{
let
file
=
File
::
open
(
file_name
)
?
;
let
mut
reader
=
BufReader
::
new
(
&
file
);
...
...
@@ -33,8 +49,22 @@ impl Config {
Ok
(
contents
)
}
let
config_text
=
read
(
file_name
)
.expect
(
"couldn't open config file"
);
toml
::
from_str
(
&
config_text
)
.expect
(
"couldn't parse config file"
)
let
config_text
=
read
(
file_name
)
.unwrap
();
match
toml
::
from_str
::
<
Config
>
(
&
config_text
)
{
Ok
(
x
)
=>
Ok
(
x
),
Err
(
e
)
=>
Err
(
format!
(
"couldn't parse config file: {}"
,
e
)),
}
}
pub
fn
from_root_or_default
(
root
:
&
str
)
->
Config
{
let
c
=
PathBuf
::
from
(
root
)
.join
(
"cbindgen.toml"
);
if
c
.exists
()
{
Config
::
from_file
(
c
.to_str
()
.unwrap
())
.unwrap
()
}
else
{
Config
::
default
()
}
}
pub
fn
from_webrender
()
->
Config
{
...
...
@@ -56,6 +86,7 @@ impl Config {
function
:
FunctionConfig
{
prefix
:
Some
(
String
::
from
(
"WR_INLINE"
)),
postfix
:
Some
(
String
::
from
(
"WR_FUNC"
)),
args
:
Some
(
Layout
::
Horizontal
),
},
structure
:
StructConfig
{
derive_eq
:
Some
(
true
),
...
...
@@ -64,9 +95,11 @@ impl Config {
derive_lte
:
Some
(
false
),
derive_gt
:
Some
(
false
),
derive_gte
:
Some
(
false
),
braces
:
Some
(
Curly
::
SameLine
),
},
enumeration
:
EnumConfig
{
add_sentinel
:
Some
(
true
),
braces
:
Some
(
Curly
::
SameLine
),
},
}
}
...
...
@@ -75,7 +108,7 @@ impl Config {
match
config
{
"default"
=>
Config
::
default
(),
"wr"
=>
Config
::
from_webrender
(),
file
=>
Config
::
from_file
(
file
),
file
=>
Config
::
from_file
(
file
)
.unwrap
()
,
}
}
}
...
...
@@ -104,6 +137,8 @@ pub struct FunctionConfig {
pub
prefix
:
Option
<
String
>
,
/// Optional text to output after each function declaration
pub
postfix
:
Option
<
String
>
,
/// The style to layout the args
pub
args
:
Option
<
Layout
>
,
}
impl
FunctionConfig
{
...
...
@@ -145,6 +180,8 @@ pub struct StructConfig {
pub
derive_gt
:
Option
<
bool
>
,
/// Whether to generate a greater than or equal to operator on structs with one field
pub
derive_gte
:
Option
<
bool
>
,
/// The style to use for braces
pub
braces
:
Option
<
Curly
>
,
}
impl
StructConfig
{
...
...
@@ -212,6 +249,8 @@ pub struct EnumConfig {
/// Whether to add a `Sentinel` value at the end of every enum
/// This is useful in Gecko for IPC serialization
pub
add_sentinel
:
Option
<
bool
>
,
/// The style to use for braces
pub
braces
:
Option
<
Curly
>
,
}
impl
EnumConfig
{
...
...
src/main.rs
View file @
e7cddcfd
...
...
@@ -48,7 +48,7 @@ fn main() {
let
config
=
match
matches
.value_of
(
"config"
)
{
Some
(
c
)
=>
Config
::
load
(
c
),
None
=>
Config
::
default
(),
None
=>
Config
::
from_root_or_
default
(
&
input
),
};
let
built
=
match
Library
::
load
(
input
,
&
config
)
.generate
()
{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment