autogypi handles issues with C++ libraries published on npm.
It generates required compiler and node-gyp options for you and works great
with nbind.
node-gyp is very good at fixing relative paths between .gypi files
in different locations, but it cannot automatically find other npm packages,
which may have been installed globally or in a node_modules directory
higher up in the directory tree or hidden inside another package.
autogypi deals with them.
- Initialize configuration for a
node-gyp-based project. - Generate C++ compiler options.
- Guess include directories to use headers from other packages.
- Include additional
.gypifiles required by other packages.
Add in the scripts section of your package.json:
"scripts": {
"autogypi": "autogypi",
"node-gyp": "node-gyp",
"install": "autogypi && node-gyp configure build"
}Then run the commands:
npm install --save autogypiYou should add auto-top.gypi in the in the includes section
at the top level of your binding.gyp file and auto.gypi in the includes
section of each target inside.
If you don't have a binding.gyp file yet, you can create one now with the
required changes already made. For example:
npm run -- autogypi --init-gyp -p nbind -s example.ccReplace example.cc with the name of your C++ source file.
You can add multiple -s options, one for each source file.
The -p nbind option means the C++ code uses a package called
nbind.
Multiple -p options can be added to add any other packages
compatible with autogypi.
The above command creates two files with contents:
binding.gyp
{
"targets": [
{
"includes": [
"auto.gypi"
],
"sources": [
"example.cc"
]
}
],
"includes": [
"auto-top.gypi"
]
}autogypi.json
{
"dependencies": [
"nbind"
],
"includes": []
}It also prints an error if the packages you listed as dependencies are missing.
For example you can install nbind and run autogypi again:
npm install --save nbind
npm run autogypiCall autogypi and node-gyp from the install script in your
package.json file, for example like
autogypi && node-gyp configure build
or from the command line:
npm run autogypi && npm run node-gyp configure build
autogypi generates two .gypi files according to its configuration.
For example with only nbind as a dependency they look like:
auto-top.gypi
{
"includes": [
"node_modules/nbind/src/nbind-common.gypi"
]
}auto.gypi
{
"include_dirs": [
"node_modules/nbind/node_modules/nan"
],
"includes": [
"node_modules/nbind/src/nbind.gypi"
]
}Packages should include an autogypi.json file in their root directory
if they require or are intended to be used by other modules.
They should list any .gypi files of their own that are required to compile
or use the module. For example:
{
"dependencies": [
"nan"
],
"includes": [
"example.gypi"
]
}The example.gypi file would then contain any gyp settings
required to successfully compile and include it in other packages.
Modules without any autogypi.json file get their root directory
added to include_dirs. This is enough to successfully use the nan module.
More heuristics may be added later if needed.
Run npm run -- autogypi --help to see the command line options:
Usage: autogypi [options]
Generate node-gyp dependency files.
Options:
-h, --help output usage information
-V, --version output the version number
-r, --root <path> root path for config files, default is shell working directory
-c, --config <path> config file, default autogypi.json
-o, --output <path> per-target gypi file to create, default auto.gypi
-t, --output-top <path> top-level gypi file to create, default auto-top.gypi
-T, --no-output-top omit top-level gypi file
-p, --package <path> add dependency on another npm package
-I, --include-dir <path> add include directory for header files
--save [flag] save changes to config file
--init-gyp [path] create gyp file (default binding.gyp, implies --save) with options:
-s, --source <path> - add C or C++ source file
Renaming autogypi.json, auto.gypi and auto-top.gypi using the relevant
command line parameters will affect generating the .gypi files and also
the contents of any binding.gyp generated using the --init-gyp option.
Docs generated using docts
Interface
AutogypiConfigFormat of autogypi.json files published in Node.js modules.
Source code:<>Properties:
.dependencies?
string[]
List of required Node.js modules.
.includes?string[]
Additional gypi files to include inside relevant targets.
.topIncludes?string[]
Additional gypi files to include at top level.
.output?string
Path to auto.gypi to generate.
.outputTop?string
Path to auto-top.gypi to generate.Interface
BindingConfigOptions for generating an initial binding.gyp file.
Source code:<>Properties:
.basePath
string
Directory where the binding.gyp will be stored.
.outputPathstring
Absolute path to generated auto.gypi to include in default target.
.outputTopPathstring
Absolute path to generated auto-top.gypi to include at top level.
.sourceListstring[]
List of absolute paths to C/C++ source files to compile.Interface
GenerateOptionsGeneral options for generating gypi files.
Source code:<>Properties:
.configPath
string
Absolute path to autogypi.json.
.outputPathstring
Absolute path to auto.gypi to generate.
.outputTopPathstring
Absolute path to auto-top.gypi to generate.Function
generateWrite auto.gypi and auto-top.gypi files according to config.
Source code:<>generate( ) ⇒
Bluebird<{}[]><>
▪ optsGenerateOptions
▪ configAutogypiConfigContents of autogypi.json.Function
initGypReturn an object with contents for an initial binding.gyp file.
Source code:<>initGyp( ) ⇒
any<>
▪ optsBindingConfigFunction
writeJsonSave pretty-printed JSON object to a file or print an appropriate error.
Source code:<>writeJson( ) ⇒
Bluebird<{}><>
▪ outputPathstring
▪ jsonany
▫ name?string
▫ header?string
The MIT License Copyright (c) 2015-2016 BusFaster Ltd