mirror of
https://github.com/dunglas/frankenphp.git
synced 2025-09-26 19:41:13 +08:00

* feat: add helpers to create PHP extensions (#1644) * feat: add helpers to create PHP extensions * cs * feat: GoString * test * add test for RegisterExtension * cs * optimize includes * fix * feat(extensions): add the PHP extension generator (#1649) * feat(extensions): add the PHP extension generator * unexport many types * unexport more symbols * cleanup some tests * unexport more symbols * fix * revert types files * revert * add better validation and fix templates * remove GoStringCopy * small fixes --------- Co-authored-by: Kévin Dunglas <kevin@dunglas.fr> * try to fix tests * fix CS * try some workarounds * try some workarounds * ingore TestRegisterExtension * exclude cgo tests in Docker images * fix * workaround... * race detector * simplify tests and code * make linter happy * feat(gofile): use templates to generate the Go file (#1666) --------- Co-authored-by: Alexandre Daubois <2144837+alexandre-daubois@users.noreply.github.com>
30 lines
499 B
Go
30 lines
499 B
Go
package frankenphp
|
|
|
|
//#include "frankenphp.h"
|
|
import "C"
|
|
import (
|
|
"sync"
|
|
"unsafe"
|
|
)
|
|
|
|
var (
|
|
extensions []*C.zend_module_entry
|
|
registerOnce sync.Once
|
|
)
|
|
|
|
// RegisterExtension registers a new PHP extension.
|
|
func RegisterExtension(me unsafe.Pointer) {
|
|
extensions = append(extensions, (*C.zend_module_entry)(me))
|
|
}
|
|
|
|
func registerExtensions() {
|
|
if len(extensions) == 0 {
|
|
return
|
|
}
|
|
|
|
registerOnce.Do(func() {
|
|
C.register_extensions(extensions[0], C.int(len(extensions)))
|
|
extensions = nil
|
|
})
|
|
}
|