Запускаем configure в gyp-файле

Предположим, у меня есть модуль node, который по сути представляет собой оболочку для некоторой стандартной библиотеки C с использованием автоинструментов. Таким образом, библиотека сама по себе будет установлена ​​с использованием ./configure и make и, возможно, make install. Код оболочки состоит всего из нескольких файлов и может быть обработан gyp. Но как я могу справиться с зависимостью? Как я могу указать gyp, что я хочу создать библиотеку autotooled, прежде чем скомпилировать свой код? Или это невозможно, потому что нельзя ожидать, что автоинструменты будут работать в Windows? Если я не могу запустить configure, есть ли способ сделать что-то подобное, в частности определить, какие функции доступны, а какие нет?


person MvG    schedule 03.12.2014    source источник


Ответы (2)


С gyp действиями и 'target_type': none это может выглядеть так:

   {
        'target_name': 'FTGL',
        'type': 'none',
        'dependencies': ['FreeType'],
        'actions': [
            {
                'action_name': 'build_ftgl',
                'message': 'Building FTGL...',
                'inputs': ['ftgl/src/FTGL/ftgl.h'],
                'outputs': ['ftgl/src/.libs/libftgl.a'],
                'action': ['eval', 'cd ftgl && ./configure --with-pic && make -C src'],
            },
        ],
  }

Примечание: использование eval в действии позволяет запускать несколько команд

person pmed    schedule 04.12.2014

Вы можете выполнять произвольные команды внутри gyp, используя расширение командной строки. Однако, как вы заметили, это ненадежно, если вы хотите быть кросс-платформенным.

Как правило, если вы хотите, чтобы он был кроссплатформенным, вам нужно будет gyp-ify свою зависимость. Это означает создание отдельного файла gyp, который включается как зависимость gyp в ваш основной файл binding.gyp. Это может занять некоторое время, потому что вам нужно перечислить все исходные файлы, которые должны быть скомпилированы, а также добавить все необходимые флаги компиляции для конкретной библиотеки (например, если библиотека использует определения времени компиляции, такие как -Dfoo).

Вы также можете подумать о том, чтобы сделать зависимость динамической вместо того, чтобы связывать исходный код библиотеки, которую вы оборачиваете, и просто динамически связывать ее с библиотекой. Это намного проще, так как вам не нужно гипировать библиотеку, и вам просто нужно добавить несколько вещей, таких как libraries: ['-lfoo'], в ваш binding.gyp.

person mscdex    schedule 03.12.2014