Files
frankenphp/ext.go
Kévin Dunglas abfd893d88 feat: FrankenPHP extensions (#1651)
* 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>
2025-06-25 10:18:22 +02:00

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
})
}