@@ -16,7 +16,7 @@ use bindgen::RustTarget;
1616use impl_:: Provider ;
1717
1818const MIN_PHP_API_VER : u32 = 20200930 ;
19- const MAX_PHP_API_VER : u32 = 20220829 ;
19+ const MAX_PHP_API_VER : u32 = 20230831 ;
2020
2121pub trait PHPProvider < ' a > : Sized {
2222 /// Create a new PHP provider.
@@ -151,9 +151,31 @@ fn build_wrapper(defines: &[(&str, &str)], includes: &[PathBuf]) -> Result<()> {
151151 Ok ( ( ) )
152152}
153153
154+ #[ cfg( feature = "embed" ) ]
155+ /// Builds the embed library.
156+ fn build_embed ( defines : & [ ( & str , & str ) ] , includes : & [ PathBuf ] ) -> Result < ( ) > {
157+ let mut build = cc:: Build :: new ( ) ;
158+ for ( var, val) in defines {
159+ build. define ( var, * val) ;
160+ }
161+ build
162+ . file ( "src/embed/embed.c" )
163+ . includes ( includes)
164+ . try_compile ( "embed" )
165+ . context ( "Failed to compile ext-php-rs C embed interface" ) ?;
166+ Ok ( ( ) )
167+ }
168+
154169/// Generates bindings to the Zend API.
155170fn generate_bindings ( defines : & [ ( & str , & str ) ] , includes : & [ PathBuf ] ) -> Result < String > {
156- let mut bindgen = bindgen:: Builder :: default ( )
171+ let mut bindgen = bindgen:: Builder :: default ( ) ;
172+
173+ #[ cfg( feature = "embed" ) ]
174+ {
175+ bindgen = bindgen. header ( "src/embed/embed.h" ) ;
176+ }
177+
178+ bindgen = bindgen
157179 . header ( "src/wrapper.h" )
158180 . clang_args (
159181 includes
@@ -206,6 +228,8 @@ fn check_php_version(info: &PHPInfo) -> Result<()> {
206228
207229 const PHP_82_API_VER : u32 = 20220829 ;
208230
231+ const PHP_83_API_VER : u32 = 20230831 ;
232+
209233 println ! ( "cargo:rustc-cfg=php80" ) ;
210234
211235 if ( PHP_81_API_VER ..PHP_82_API_VER ) . contains ( & version) {
@@ -216,6 +240,10 @@ fn check_php_version(info: &PHPInfo) -> Result<()> {
216240 println ! ( "cargo:rustc-cfg=php82" ) ;
217241 }
218242
243+ if version >= PHP_83_API_VER {
244+ println ! ( "cargo:rustc-cfg=php83" ) ;
245+ }
246+
219247 Ok ( ( ) )
220248}
221249
@@ -226,6 +254,8 @@ fn main() -> Result<()> {
226254 for path in [
227255 manifest. join ( "src" ) . join ( "wrapper.h" ) ,
228256 manifest. join ( "src" ) . join ( "wrapper.c" ) ,
257+ manifest. join ( "src" ) . join ( "embed" ) . join ( "embed.h" ) ,
258+ manifest. join ( "src" ) . join ( "embed" ) . join ( "embed.c" ) ,
229259 manifest. join ( "allowed_bindings.rs" ) ,
230260 manifest. join ( "windows_build.rs" ) ,
231261 manifest. join ( "unix_build.rs" ) ,
@@ -257,6 +287,10 @@ fn main() -> Result<()> {
257287
258288 check_php_version ( & info) ?;
259289 build_wrapper ( & defines, & includes) ?;
290+
291+ #[ cfg( feature = "embed" ) ]
292+ build_embed ( & defines, & includes) ?;
293+
260294 let bindings = generate_bindings ( & defines, & includes) ?;
261295
262296 let out_file =
0 commit comments