Skip to content

Commit c30a629

Browse files
committed
Toward to 0.1.x.
1 parent bab9071 commit c30a629

File tree

17 files changed

+386
-286
lines changed

17 files changed

+386
-286
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,5 @@ cargo generate --git https://github.com/jmjoy/phper-ext-skel.git
2424

2525
Now the library don't support `ZTS`, the template is using `thread_local!` instead.
2626

27+
Version `0.1.x` will be a preview version.
28+

phper-macros/src/lib.rs

Lines changed: 53 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@ extern crate proc_macro;
22
extern crate syn;
33

44
use proc_macro::TokenStream;
5-
use proc_macro2::{Ident, Span};
65
use quote::quote;
76
use syn::punctuated::Punctuated;
87
use syn::token::Comma;
9-
use syn::{parse_macro_input, parse_str, FnArg, ItemFn, NestedMeta, AttributeArgs, Meta};
8+
use syn::{parse_macro_input, parse_str, FnArg, Ident, ItemFn};
109

1110
#[proc_macro_attribute]
1211
pub fn php_function(_attr: TokenStream, input: TokenStream) -> TokenStream {
@@ -22,8 +21,6 @@ pub fn php_function(_attr: TokenStream, input: TokenStream) -> TokenStream {
2221
let mut inputs = &mut inputs.clone();
2322
internal_function_parameters(&mut inputs);
2423

25-
let name = Ident::new(&format!("zif_{}", name), Span::call_site());
26-
2724
let result = quote! {
2825
#[no_mangle]
2926
#(#attrs)*
@@ -39,7 +36,7 @@ pub fn php_function(_attr: TokenStream, input: TokenStream) -> TokenStream {
3936
pub fn php_minit_function(_attr: TokenStream, input: TokenStream) -> TokenStream {
4037
let input = parse_macro_input!(input as ItemFn);
4138

42-
let name = &zend_module_startup_n(input.sig.ident.clone());
39+
let name = &input.sig.ident;
4340
let inputs = &init_func_args(Punctuated::new());
4441
let inner_inputs = &input.sig.inputs;
4542
let ret = &input.sig.output;
@@ -51,8 +48,8 @@ pub fn php_minit_function(_attr: TokenStream, input: TokenStream) -> TokenStream
5148
#(#attrs)*
5249
pub extern "C" fn #name(#inputs) -> ::std::os::raw::c_int {
5350
unsafe {
54-
::phper_sys::zend_register_ini_entries(
55-
INI_ENTRIES.with(|i| i.as_ptr() as *const ::phper_sys::zend_ini_entry_def),
51+
::phper::sys::zend_register_ini_entries(
52+
INI_ENTRIES.with(|i| i.as_ptr() as *const ::phper::sys::zend_ini_entry_def),
5653
module_number
5754
);
5855
}
@@ -62,9 +59,9 @@ pub fn php_minit_function(_attr: TokenStream, input: TokenStream) -> TokenStream
6259
};
6360
let b: bool = f();
6461
if b {
65-
::phper_sys::ZEND_RESULT_CODE_SUCCESS
62+
::phper::sys::ZEND_RESULT_CODE_SUCCESS
6663
} else {
67-
::phper_sys::ZEND_RESULT_CODE_FAILURE
64+
::phper::sys::ZEND_RESULT_CODE_FAILURE
6865
}
6966
}
7067
};
@@ -76,7 +73,7 @@ pub fn php_minit_function(_attr: TokenStream, input: TokenStream) -> TokenStream
7673
pub fn php_mshutdown_function(_attr: TokenStream, input: TokenStream) -> TokenStream {
7774
let input = parse_macro_input!(input as ItemFn);
7875

79-
let name = &zend_module_shutdown_n(input.sig.ident.clone());
76+
let name = &input.sig.ident;
8077
let inputs = &shutdown_func_args(Punctuated::new());
8178
let inner_inputs = &input.sig.inputs;
8279
let ret = &input.sig.output;
@@ -88,17 +85,17 @@ pub fn php_mshutdown_function(_attr: TokenStream, input: TokenStream) -> TokenSt
8885
#(#attrs)*
8986
pub extern "C" fn #name(#inputs) -> ::std::os::raw::c_int {
9087
unsafe {
91-
::phper_sys::zend_unregister_ini_entries(module_number);
88+
::phper::sys::zend_unregister_ini_entries(module_number);
9289
}
9390

9491
let f = |#inner_inputs| #ret {
9592
#body
9693
};
9794
let b: bool = f();
9895
if b {
99-
::phper_sys::ZEND_RESULT_CODE_SUCCESS
96+
::phper::sys::ZEND_RESULT_CODE_SUCCESS
10097
} else {
101-
::phper_sys::ZEND_RESULT_CODE_FAILURE
98+
::phper::sys::ZEND_RESULT_CODE_FAILURE
10299
}
103100
}
104101
};
@@ -110,7 +107,7 @@ pub fn php_mshutdown_function(_attr: TokenStream, input: TokenStream) -> TokenSt
110107
pub fn php_rinit_function(_attr: TokenStream, input: TokenStream) -> TokenStream {
111108
let input = parse_macro_input!(input as ItemFn);
112109

113-
let name = &zend_module_activate_n(input.sig.ident.clone());
110+
let name = &input.sig.ident;
114111
let inputs = &init_func_args(Punctuated::new());
115112
let inner_inputs = &input.sig.inputs;
116113
let ret = &input.sig.output;
@@ -126,9 +123,9 @@ pub fn php_rinit_function(_attr: TokenStream, input: TokenStream) -> TokenStream
126123
}
127124
let b: bool = #name();
128125
if b {
129-
::phper_sys::ZEND_RESULT_CODE_SUCCESS
126+
::phper::sys::ZEND_RESULT_CODE_SUCCESS
130127
} else {
131-
::phper_sys::ZEND_RESULT_CODE_FAILURE
128+
::phper::sys::ZEND_RESULT_CODE_FAILURE
132129
}
133130
}
134131
};
@@ -137,10 +134,10 @@ pub fn php_rinit_function(_attr: TokenStream, input: TokenStream) -> TokenStream
137134
}
138135

139136
#[proc_macro_attribute]
140-
pub fn php_rshutdown_function(_attr: TokenStream, mut input: TokenStream) -> TokenStream {
137+
pub fn php_rshutdown_function(_attr: TokenStream, input: TokenStream) -> TokenStream {
141138
let input = parse_macro_input!(input as ItemFn);
142139

143-
let name = &zend_module_deactivate_n(input.sig.ident.clone());
140+
let name = &input.sig.ident;
144141
let inputs = &init_func_args(Punctuated::new());
145142
let inner_inputs = &input.sig.inputs;
146143
let ret = &input.sig.output;
@@ -156,9 +153,9 @@ pub fn php_rshutdown_function(_attr: TokenStream, mut input: TokenStream) -> Tok
156153
}
157154
let b: bool = #name();
158155
if b {
159-
::phper_sys::ZEND_RESULT_CODE_SUCCESS
156+
::phper::sys::ZEND_RESULT_CODE_SUCCESS
160157
} else {
161-
::phper_sys::ZEND_RESULT_CODE_FAILURE
158+
::phper::sys::ZEND_RESULT_CODE_FAILURE
162159
}
163160
}
164161
};
@@ -170,7 +167,7 @@ pub fn php_rshutdown_function(_attr: TokenStream, mut input: TokenStream) -> Tok
170167
pub fn php_minfo_function(_attr: TokenStream, input: TokenStream) -> TokenStream {
171168
let input = parse_macro_input!(input as ItemFn);
172169

173-
let name = &zend_module_info_n(input.sig.ident.clone());
170+
let name = &input.sig.ident;
174171
let inputs = &zend_module_info_func_args(Punctuated::new());
175172
let inner_inputs = &input.sig.inputs;
176173
let ret = &input.sig.output;
@@ -191,14 +188,23 @@ pub fn php_minfo_function(_attr: TokenStream, input: TokenStream) -> TokenStream
191188
result.into()
192189
}
193190

194-
//#[proc_macro_attribute]
195-
//pub fn php_ini(_attr: TokenStream, input: TokenStream) -> TokenStream {
196-
// input
197-
//}
191+
#[proc_macro]
192+
pub fn zend_get_module(input: TokenStream) -> TokenStream {
193+
let name = parse_macro_input!(input as Ident);
194+
195+
let result = quote! {
196+
#[no_mangle]
197+
pub extern "C" fn get_module() -> *const ::phper::sys::zend_module_entry {
198+
#name.0
199+
}
200+
};
201+
202+
result.into()
203+
}
198204

199205
fn internal_function_parameters(inputs: &mut Punctuated<FnArg, Comma>) {
200-
inputs.push(parse_str("execute_data: *mut ::phper_sys::zend_execute_data").unwrap());
201-
inputs.push(parse_str("return_value: *mut ::phper_sys::zval").unwrap());
206+
inputs.push(parse_str("execute_data: *mut ::phper::sys::zend_execute_data").unwrap());
207+
inputs.push(parse_str("return_value: *mut ::phper::sys::zval").unwrap());
202208
}
203209

204210
fn init_func_args(mut inputs: Punctuated<FnArg, Comma>) -> Punctuated<FnArg, Comma> {
@@ -214,26 +220,26 @@ fn shutdown_func_args(mut inputs: Punctuated<FnArg, Comma>) -> Punctuated<FnArg,
214220
}
215221

216222
fn zend_module_info_func_args(mut inputs: Punctuated<FnArg, Comma>) -> Punctuated<FnArg, Comma> {
217-
inputs.push(parse_str("zend_module: *mut ::phper_sys::zend_module_entry").unwrap());
223+
inputs.push(parse_str("zend_module: *mut ::phper::sys::zend_module_entry").unwrap());
218224
inputs
219225
}
220226

221-
fn zend_module_startup_n(ident: Ident) -> Ident {
222-
Ident::new(&format!("zm_startup_{}", ident), ident.span())
223-
}
224-
225-
fn zend_module_shutdown_n(ident: Ident) -> Ident {
226-
Ident::new(&format!("zm_shutdown_{}", ident), ident.span())
227-
}
228-
229-
fn zend_module_activate_n(ident: Ident) -> Ident {
230-
Ident::new(&format!("zm_activate_{}", ident), ident.span())
231-
}
232-
233-
fn zend_module_deactivate_n(ident: Ident) -> Ident {
234-
Ident::new(&format!("zm_deactivate_{}", ident), ident.span())
235-
}
236-
237-
fn zend_module_info_n(ident: Ident) -> Ident {
238-
Ident::new(&format!("zm_info_{}", ident), ident.span())
239-
}
227+
//fn zend_module_startup_n(ident: Ident) -> Ident {
228+
// Ident::new(&format!("zm_startup_{}", ident), ident.span())
229+
//}
230+
//
231+
//fn zend_module_shutdown_n(ident: Ident) -> Ident {
232+
// Ident::new(&format!("zm_shutdown_{}", ident), ident.span())
233+
//}
234+
//
235+
//fn zend_module_activate_n(ident: Ident) -> Ident {
236+
// Ident::new(&format!("zm_activate_{}", ident), ident.span())
237+
//}
238+
//
239+
//fn zend_module_deactivate_n(ident: Ident) -> Ident {
240+
// Ident::new(&format!("zm_deactivate_{}", ident), ident.span())
241+
//}
242+
//
243+
//fn zend_module_info_n(ident: Ident) -> Ident {
244+
// Ident::new(&format!("zm_info_{}", ident), ident.span())
245+
//}

phper-sys/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ edition = "2018"
66
description = "Low level PHP binding for Rust."
77
repository = "https://github.com/jmjoy/phper.git"
88
license-file = "../LICENSE"
9-
readme = "README.md"
109
keywords = ["php", "binding"]
1110

1211
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

phper-sys/README.md

Lines changed: 0 additions & 3 deletions
This file was deleted.

phper-sys/build.rs

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
use bindgen::Builder;
22
use std::env;
33
use std::error::Error;
4+
use std::fs::File;
5+
use std::io::{BufRead, BufReader};
46
use std::path::PathBuf;
57
use std::process::Command;
68

@@ -722,7 +724,46 @@ fn main() -> Result<(), Box<dyn Error + 'static>> {
722724
.generate()
723725
.expect("Unable to generate bindings");
724726

725-
bindings.write_to_file(out_path.join("php_bindings.rs"))?;
727+
let generated_path = out_path.join("php_bindings.rs");
728+
bindings.write_to_file(&generated_path)?;
729+
730+
let mut build_id = "API".to_string();
731+
732+
let file = File::open(&generated_path)?;
733+
let reader = BufReader::new(file);
734+
735+
let mut zend_module_api_no = "".to_string();
736+
let mut zend_build_ts = "".to_string();
737+
738+
for line in reader.lines() {
739+
let line = line?;
740+
741+
if line.starts_with("pub const ZEND_MODULE_API_NO:") {
742+
let line = line
743+
.chars()
744+
.skip_while(|x| *x != '=')
745+
.skip_while(|x| *x == '=' || *x == ' ')
746+
.take_while(|x| *x != ';')
747+
.collect::<String>();
748+
zend_module_api_no = line;
749+
}
750+
751+
if line.starts_with("pub const ZEND_BUILD_TS:") {
752+
let line = line
753+
.chars()
754+
.skip_while(|x| *x != '=')
755+
.skip_while(|x| *x != '"')
756+
.skip_while(|x| *x == '"')
757+
.take_while(|x| *x != '\\')
758+
.collect::<String>();
759+
zend_build_ts = line;
760+
}
761+
}
762+
763+
build_id.push_str(&zend_module_api_no);
764+
build_id.push_str(&zend_build_ts);
765+
766+
println!("cargo:rustc-env=PHP_BUILD_ID={}", build_id);
726767

727768
Ok(())
728769
}

phper-sys/src/lib.rs

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,11 @@
22
#![allow(non_camel_case_types)]
33
#![allow(non_snake_case)]
44

5+
use std::os::raw::c_char;
6+
57
#[macro_use]
68
mod macros;
7-
mod zend;
89

910
include!(concat!(env!("OUT_DIR"), "/php_bindings.rs"));
1011

11-
pub use crate::zend::*;
12-
13-
#[repr(C)]
14-
pub struct zend_function_entry_wrapper(pub *const zend_function_entry);
15-
16-
unsafe impl Sync for zend_function_entry_wrapper {}
17-
18-
#[repr(C)]
19-
pub struct zend_module_entry_wrapper(pub *const zend_module_entry);
20-
21-
unsafe impl Sync for zend_module_entry_wrapper {}
12+
pub const PHP_BUILD_ID: *const c_char = c_str_ptr!(env!("PHP_BUILD_ID"));

phper-sys/src/macros.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
macro_rules! pub_use_mod {
2-
($i: ident) => {
3-
mod $i;
4-
pub use self::$i::*;
1+
#[macro_export]
2+
macro_rules! c_str_ptr {
3+
($lit: expr) => {
4+
::std::concat!($lit, "\0").as_ptr() as *const ::std::os::raw::c_char
55
};
66
}

phper-sys/src/zend/mod.rs

Lines changed: 0 additions & 6 deletions
This file was deleted.

phper-sys/src/zend/zend_alloc.rs

Lines changed: 0 additions & 13 deletions
This file was deleted.

phper-sys/src/zend/zend_api.rs

Lines changed: 0 additions & 12 deletions
This file was deleted.

phper-sys/src/zend/zend_compile.rs

Lines changed: 0 additions & 6 deletions
This file was deleted.

phper-sys/src/zend/zend_ini.rs

Lines changed: 0 additions & 18 deletions
This file was deleted.

phper-sys/src/zend/zend_string.rs

Lines changed: 0 additions & 6 deletions
This file was deleted.

0 commit comments

Comments
 (0)