Конфигурационный файл

Каждый Zephir проект должен содержать конфигурационный файл config.json. Этот файл читается компилятором Zephir всякий раз, когда компилируется расширение, либо в процессе генерации Си-кода. Это позволяет разработчику изменять расширение или поведение компилятора.

Этот файл использует формат JSON (текстовый формат обмена данными, основанный на JavaScript) в качестве формата конфигурации:

{
    "namespace": "test",
    "name": "Test Extension",
    "description": "My amazing extension",
    "author": "Tony Hawk",
    "version": "1.2.0"
}

Параметры, определенные в этом файле, переопределяют любые заводские настройки, предоставляемые Zephir.

Поддерживаются следующие параметры:

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"
        ]
    }
}

author

Компания, разработчик, учреждение и т.д., которые разработали расширение:

{
    "author": "Tony Hawk"
}

backend

Предоставляет способ настройки бэкэнда Zend Engine, используемого в вашем расширении. На данный момент поддерживается толькоtemplatepath, который позволяет выбрать между ZendEngine2 и ZendEngine3:

{
    "backend": {
        "templatepath": "ZendEngine3"
    }
}

constants-sources

Чтобы импортировать только константы из исходного Си-файла в ваш проект, укажите путь к файлу в этой настройке:

{
    "constants-sources": [
        "utils/math_constants.h"
    ]
}

description

Описание расширения — любой текст, описывающий ваше расширение:

{
    "description": "My amazing extension"
}

destructors

Этот параметр позволяет предоставить одну или несколько Си-функций, которые будут выполняться для определенных событий жизненного цикла расширения, в частности, RSHUTDOWN (request), PRSHUTDOWN (post-request), MSHUTDOWN (module), и GSHUTDOWN (globals). Check the lifecycle hooks chapter for more information.

{
    "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)"
                }
            ]
        }
    ]
}

extension-name

Базовое имя файла расширения. Оно должно следовать тем же правилам, что и настройка namespace, которая используется как запасной вариант в случае, если эта не указана.

{
    "extension-name": "test"
}

external-dependencies

Вы можете включить класс из другого пространства имён/расширения непосредственно в вашем собственном расширении, настроив его как показано здесь:

{
    "external-dependencies": {
        "My\\Awesome": "my/awesome/class.zep",
        "My\\Awful": "my/awful/class.zep"
    }
}

extra

Содержит дополнительные параметры, которые также могут быть переданы в командной строке. В настоящее время это — export-clases (генерирует заголовочные файлы для доступа к вашим классам из другого C кода), и indent (использование табуляции или пробелов для отступов в коде генерируемых файлов):

{
    "extra": {
        "export-classes": true,
        "indent": "tabs"
    }
}

extra-cflags

Любые дополнительные флаги, которые вы хотите добавить в процесс компиляции:

{
    "extra-cflags": "-I/usr/local/Cellar/libevent/2.0.21_1/include"
}

extra-classes

Если у вас уже есть PHP-класс, реализованный на Си, Вы можете включить его непосредственно в ваше расширение, как показано ниже:

{
    "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"
        }
    ]
}

extra-libs

Любые дополнительные библиотеки, которые вы хотите добавить в процесс компиляции:

{
    "extra-libs": "-L/usr/local/Cellar/libevent/2.0.21_1/lib -levent"
}

extra-sources

Любые дополнительные файлы, которые вы хотите добавить в процесс компиляции - каталог поиска относительно папки ext вашего проекта:

{
    "extra-sources": [
        "utils/pi.c"
    ]
}

globals

Доступны глобальные расширения Check the globals chapter for more information.

{
    "globals": {
        "my_setting_1": {
            "type": "bool",
            "default": true
        },
        "my_setting_2": {
            "type": "int",
            "default": 10
        }
    }
}

info

Секции phpinfo(). Check the phpinfo() chapter for more information.

{
    "info": [
        {
            "header": ["Directive", "Value"],
            "rows": [
                ["setting1", "value1"],
                ["setting2", "value2"]
            ]
        }
    ]
}

initializers

Этот параметр позволяет предоставить одну или несколько Си-функций для выполнения при определенных событиях жизненного цикла расширения - в частности, GINIT (globals), MINIT (module), и RINIT (request). Check the lifecycle hooks chapter for more information.

{
    "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)"
                }
            ]
        }
    ]
}

name

Имя расширения, используемое в скомпилированном Си коде. Может содержать только ASCII-символы:

{
    "name": "test"
}

namespace

Пространство имён расширения. Это должен быть простой идентификатор, соответствующий регулярному выражению [a-zA-Z0-9\_]+:

{
    "namespace": "test"
}

optimizations

Оптимизации компилятора, которые должны быть включены или отключены в текущем проекте:

{
    "optimizations": {
        "static-type-inference": true,
        "static-type-inference-second-pass": true,
        "local-context-pass": false
    }
}

optimizer-dirs

Каталоги, где находятся ваши собственные оптимизаторы. Каталог поиска находится относительно корневой папки вашего проекта:

{
    "optimizer-dirs": [
        "optimizers"
    ]
}

package-dependencies

Определение зависимостей библиотеки (ограничения версии будут проверяться с помощью pkg-config, и может использовать один из операторов =, >=, <=, или *):

{
    "package-dependencies": {
        "openssl": "*",
        "libpng": ">= 0.1.0",
        "protobuf": "<= 2.6.1"
    }
}

prototype-dir

Позволяет вам предоставить файлы прототипов, описывающие другие расширения, необходимые для сборки, которые не обязательно устанавливать на этапе сборки:

{
    "prototype-dir": {
        "igbinary": "prototypes",
        "session": "prototypes"
    }
}

requires

Позволяет вам перечислить другие расширения, необходимые для создания/использования вашего собственного:

{
    "requires": {
        "extensions": [
            "igbinary",
            "session"
        ]
    }
}

silent

Подавляет почти весь вывод zephir команд (аналогично -w):

{
    "silent": false
}

stubs

Эта настройка позволяет настроить способ генерации IDE заглушек. path указывает, где должны быть созданы заглушки, а stubs-run-after-generate указывает, следует ли автоматически (повторно) создавать заглушки, когда ваш код компилируется в Си:

{
    "stubs": {
        "path": "ide/%version%/%namespace%/",
        "stubs-run-after-generate": false
    }
}

verbose

Позволяет выводить более подробную информацию в сообщениях об ошибках при выбрасывании исключений zephir командами. Эту настройку также можно включить с помощью -v, или отключить с помощью -V:

{
    "verbose": false
}

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