# Setup project for development
## Development setup and getting started
This guide is for setting up `nodegui` for contributors of nodegui.
The actual getting started guide for users will be added once we reach a bit of stable level.
Make sure you have setup `qode` and installed it globally.
### MacOSX:
**Requirements**
1. Node version: > 9
2. Python and gcc
3. Make sure you dont have spaces inside your home path. NodeGYP has issues with spaces in the path. https://github.com/nodejs/node-gyp/issues/209
**Setting up**
1. Install latest version of Qt (5.12) via homebrew only.
```
brew install qt5
```
### Windows:
**Requirements**
1. Node version: > 9
2. Python and MSVC++
**Setting up**
-- Instructions will be added soon --
### Linux:
**Requirements**
1. Node version: > 9
2. Python, Make, GCC, pkg-config and Qt5
On Ubuntu: `$ sudo apt-get install pkg-config build-essentials` should install everything except Qt5.
**Setting up**
1. Make sure you have downloaded and installed Qt5 sdk.
2. Before running `yard build`, do
`export PKG_CONFIG_PATH="/5.11.0/gcc_64/lib/pkgconfig"`
### Common:
1. Once you have setup the platform specific stuff as mentioned above, follow these:
2. `git clone` this repo.
3. Keep note of the install directory of qt. You should probably find it at `/usr/local/Cellar/qt/5.12.1`. Copy this path and
edit the file `config/common.gypi`.
Change the field
```
'qt_home_dir': ' // example : ../../core/YogaWidget/yogawidget.h
```
So for nlabel I would run it as:
```
moc nlabel.h -o nlabel_moc.cpp --include ../../core/YogaWidget/yogawidget.h
```
This will run moc on `headername.h` and generate `headername_moc.cpp`. We will include `headername_moc.cpp` in `config/moc.gypi`. If you dont do this. Then it will give a symbol not found error.
I hope QLabel's example is enough for now. For more examples and inspirations we can take a look at other wrapped widgets.
## Learning Materials:
1. Beginners guide to NodeJS Addon - https://medium.com/@atulanand94/beginners-guide-to-writing-nodejs-addons-using-c-and-n-api-node-addon-api-9b3b718a9a7f
2. First read this: N-API in nodejs docs
3. https://www.youtube.com/watch?v=-Oniup60Afs&feature=youtu.be
4. See samples at https://github.com/nodejs/abi-stable-node-addon-examples/
4.1. You can see the readme of https://github.com/nodejs/node-addon-api.git/
5. See node-qt implementation. It is implemented in Nan (explained in video).
6. Now try to match the implementation in node-qt and convert to N-API using examples from samples.
7. Implementations not in node-qt need to be done with effort.