017 Конфигурационный файл
Каждое расширение Zephir имеет файл конфигурации, называемый config.json. Этот файл читается Zephir каждый раз, когда вы создаете или создаете расширение, и это позволяет разработчику изменять расширение или поведение компилятора.
Этот файл использует формат JSON в качестве формата конфигурации:
{ "namespace": "test", "name": "Test Extension", "description": "My amazing extension", "author": "Tony Hawk", "version": "1.2.0" }
Параметры, определенные в этом файле, переопределяют любые заводские настройки, предоставляемые Zephir.
Поддерживаются следующие параметры:
namespace
Пространство имен расширения - это должен быть простой идентификатор, соответствующий регулярному выражению: [a-zA-Z0-9_]+:
{ "namespace": "test" }
extension-name
Базовое имя файла расширения. Оно должно следовать тем же правилам, что и параметр пространства имен, который используется в качестве запасного варианта, если оно не задано.
{ "extension-name": "test" }
name
Имя расширения может содержать только символы ascii:
{ "name": "test" }
description
Расширение описание, любой текст, описывающий расширение:
{ "description": "My amazing extension" }
author
Компания, разработчик, учреждение и т.д., Которые разработали расширение:
{ "author": "Tony Hawk" }
version
Версия расширения должна следовать регулярному выражению: [0-9]+.[0-9]+.[0-9]+:
{ "version": "1.2.0" }
warnings
Предупреждения компилятора включены или отключены в текущем проекте:
{ "warnings": { "unused-variable": true, "unused-variable-external": false, "possible-wrong-parameter": true, "possible-wrong-parameter-undefined": false, "nonexistent-function": true, "nonexistent-class": true } }
optimizations
Оптимизация компилятора включена или отключена в текущем проекте:
{ "optimizations": { "static-type-inference": true, "static-type-inference-second-pass": true, "local-context-pass": false } }
globals
Доступные для расширения переменные globals. Для получения дополнительной информации см. Главу Глобальные параметры рассширения.
{ "globals": { "my_setting_1": { "type": "bool", "default": true }, "my_setting_2": { "type": "int", "default": 10 } } }
info
phpinfo() Для получения дополнительной информации см. Главу Секции Phpinfo().
{ "info": [ { "header": ["Directive", "Value"], "rows": [ ["setting1", "value1"], ["setting2", "value2"] ] } ] }
initializers
Этот параметр позволяет указать одну или несколько функций C, которые будут выполняться для определенных событий жизненного цикла расширения, в частности GINIT (глобально), MINIT (модуль) и RINIT (запрос). См.: главу Перехватчики событий для получения дополнительной информации.
{ "initializers": [ { "globals": [ { "include": "my/awesome/library.h", "code": "setup_globals_deps(TSRMLS_C)" } ], "module": [ { "include": "my/awesome/library.h", "code": "setup_module_deps(TSRMLS_C)" } ], "request": [ { "include": "my/awesome/library.h", "code": "some_c_function(TSRMLS_C)" }, { "include": "my/awful/library.h", "code": "some_other_c_function(TSRMLS_C)" } ] } ] }
destructors
Этот параметр позволяет предоставить одну или несколько функций C, которые будут выполняться в определенных событиях жизненного цикла расширения, в частности, RSHUTDOWN (запрос), PRSHUTDOWN (пост-запрос), MSHUTDOWN (модуль) и GSHUTDOWN (глобальные переменные). См.: главу Перехватчики событий для получения дополнительной информации.
{ "destructors": [ { "request": [ { "include": "my/awesome/library.h", "code": "c_function_for_shutting_down(TSRMLS_C)" }, { "include": "my/awful/library.h", "code": "some_other_c_function_than_the_other_ones(TSRMLS_C)" } ], "post-request": [ { "include": "my/awesome/library.h", "code": "c_function_for_cleaning_up_after_the_response_is_sent(TSRMLS_C)" } ], "module": [ { "include": "my/awesome/library.h", "code": "release_module_deps(TSRMLS_C)" } ], "globals": [ { "include": "my/awesome/library.h", "code": "release_globals_deps(TSRMLS_C)" } ] } ] }
extra-cflags
Любые дополнительные флаги, которые вы хотите добавить в процесс компиляции:
{ "extra-cflags": "-I/usr/local/Cellar/libevent/2.0.21_1/include" }
extra-libs
Любые дополнительные библиотеки, которые вы хотите добавить в процесс компиляции:
{ "extra-libs": "-L/usr/local/Cellar/libevent/2.0.21_1/lib -levent" }
extra-sources
Любые дополнительные файлы, которые вы хотите добавить в процесс компиляции - каталог поиска относится к папке ext вашего проекта:
{ "extra-sources": [ "utils/pi.c" ] }
optimizer-dirs
Каталоги, в которых могут быть найдены ваши собственные оптимизаторы, - каталог поиска относится к корневой папке вашего проекта:
{ "optimizer-dirs": [ "optimizers" ] }
constants-sources
Чтобы импортировать только константы в исходный файл C в ваш проект, укажите путь к файлу в этом параметре:
{ "constants-sources": [ "utils/math_constants.h" ] }
extra-classes
Если у вас уже есть класс PHP, реализованный на C, вы можете включить его прямо в расширение, сконфигурировав его здесь:
{ "extra-classes": [ { "header": "utls/old_c_class/class.h", "source": "utils/old_c_class/class.c", "init": "old_c_class", "entry": "old_c_class_ce" } ] }
external-dependencies
Вы можете включить класс из другого пространства имен / расширения непосредственно в собственное расширение, сконфигурировав его здесь:
{ "external-dependencies": { "My\\Awesome": "my/awesome/class.zep", "My\\Awful": "my/awful/class.zep" } }
package-dependencies
Объявление библиотечных зависимостей (проверка версии по pkg-config
)
{ "package-dependencies": { "openssl": "*", "libpng": ">= 0.1.0", "protobuf": "<= 2.6.1" } }
Оператор версии поддерживает =
, >=
, <=
, and *
requires
Позволяет перечислить другие расширения, необходимые для создания / использования собственных:
{ "requires": { "extensions": [ "igbinary", "session" ] } }
prototype-dir
Позволяет предоставить файлы прототипов с описанием других расширений, необходимых для создания собственных, поэтому их необязательно устанавливать на этапе сборки:
{ "prototype-dir": { "igbinary": "prototypes", "session": "prototypes" } }
stubs
Этот параметр позволяет настроить способ создания заглушек документации IDE. путь задает, где должны быть созданы заглушки, в то время как stubs-run-after-generate задает, следует ли автоматически (повторно)создавать заглушки при компиляции кода в C:
{ "stubs": { "path": "ide/%version%/%namespace%/", "stubs-run-after-generate": false } }
api
Используется для настройки автоматически создаваемой документации HTML для вашего расширения. path указывает место создания документации относительно корня проекта. base-url используется для создания sitemap.xml - файл для документации. theme используется, чтобы установить тему, используемую для сгенерированной документации (через настройку name), и любые опции тема поддерживает передачу (через настройку options). Наконец, theme-directories используются для предоставления дополнительных путей поиска нужной темы.:
{ "api": { "path": "doc/%version%", "base-url": "http://example.local/api/", "theme": { "name" : "zephir", "options": { "github": null, "analytics": null, "main_color": "#3E6496", "link_color": "#3E6496", "link_hover_color": "#5F9AE7" } }, "theme-directories": [ "my/api/themes" ] } }
backend
Предоставляет способ настройки серверной части Zend Engine, используемой вашим расширением. На данный момент поддерживается только templatepath, который позволяет выбирать между ZendEngine2 и ZendEngine3:
{ "backend": { "templatepath": "ZendEngine3" } }
extra
Содержит дополнительные параметры, которые также можно передать в командной строке. В настоящее время это Export-clases (создание заголовков для доступа к классам из другого кода C) и indent (выбор между использованием tabs или spaces для отступа кода в сгенерированных файлах):
{ "extra": { "export-classes": true, "indent": "tabs" } }
silent
Подавляет вывод большинства / всех команд zephir (то же, что и -w):
{ "silent": false }
verbose
Отображает более подробную информацию в сообщениях об ошибках исключений, генерируемых командами zephir (можно также включить с -v, или отключить с -V):
{ "verbose": false }