summaryrefslogtreecommitdiffstats
path: root/CONTRIBUTING.md
diff options
context:
space:
mode:
Diffstat (limited to 'CONTRIBUTING.md')
-rw-r--r--CONTRIBUTING.md137
1 files changed, 137 insertions, 0 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..de29d7a
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,137 @@
+Contributing to Inkscape
+========================
+
+Inkscape welcomes your contributions to help turn it into a fully
+SVG-compliant drawing program for the Open Source community.
+
+While many developers work on fixing bugs and creating new features, it
+is worth strong emphasis that even non-programmers can help make
+Inkscape more powerful and successful. You probably already have an idea
+of something you'd like to work on. If not, here are just a few ways you
+can help:
+
+ * Pick a bug, fix it, and send in a merge request on GitLab.
+ * Choose a feature you want to see developed, and make it.
+ * If you speak a language in addition to English, work on your
+ language's i18n file in the po/ directory.
+ * Find a new bug and report it.
+ * Help answer questions for new Inkscapers on IRC, forum, or the
+ mailing lists.
+ * Write an article advocating Inkscape.
+ * Author a HOWTO describing a trick or technique you've figured out.
+
+
+GIT Access
+----------
+
+Inkscape is currently developed on git, with the code hosted on GitLab.
+
+ * https://gitlab.com/inkscape/inkscape
+
+We give write access out to people with proven interest in helping develop
+the codebase. Proving your interest is straightforward: Make two
+contributions and request access.
+
+Compiling the development version
+---------------------------------
+
+See http://wiki.inkscape.org/wiki/index.php/CompilingInkscape for general
+remarks about compiling, including how to find some of the needed packages for
+your distribution, and suggestions for developers.
+
+
+Patch Decisions
+---------------
+
+Our motto for changes to the codebase is "Patch first, ask questions
+later". When someone has an idea, rather than endlessly debating it, we
+encourage folks to go ahead and code something up (even prototypish).
+This is then incorporated into the development branch of the code for
+folks to try out, poke and prod, and tinker with. We figure, the best
+way to see if an idea fits is to try it on for size.
+
+
+Coding Style
+------------
+
+Please refer to the Coding Style Guidelines
+(https://inkscape.org/en/develop/coding-style/) if you have specific questions
+on the style to use for code. If reading style guidelines doesn't interest
+you, just follow the general style of the surrounding code, so that it is at
+least consistent.
+
+
+Documentation
+-------------
+
+Code needs to be documented. Future Inkscape developers will really
+appreciate this. New files should have one or two lines describing the
+purpose of the code inside the file.
+
+
+Building (In Linux distribution)
+--------------------------------
+
+This is the best set of instructions for setting up your build directory...
+
+You should install ninja and ccache for the fastest build:
+
+```bash
+sudo apt-get install ninja-build ccache
+```
+
+Next we prepare a build directory with a symlink to Inkscape's share folder, add a profile dir and set the bin folder (optional):
+
+```bash
+ln -s $PWD/share ./share/inkscape
+mkdir -p build/conf
+cd build
+export INKSCAPE_PROFILE_DIR=$PWD/conf
+PATH=$PWD/bin/:$PATH
+```
+
+Now we invoke cmake, letting it know to use our new build directory prefix, ccache and the Ninja compiler:
+
+```bash
+cmake -DCMAKE_INSTALL_PREFIX:PATH=$PWD/../ -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=Debug -G Ninja ..
+```
+
+Invoke ninja to build the code. You may also use plain gcc's `make` if you didn't specific `-G` in the command above:
+```bash
+ninja
+```
+
+Now we can run `inkscape` that we have built, with the latest resources and code:
+
+```bash
+./bin/inkscape
+```
+
+To build in Non-Linux Platforms check out `INSTALL.md` (Links to Inkscape Wiki pages are given right below "Basic Installation")
+
+Profiling
+---------
+
+To run with profiling, add `-DWITH_PROFILING=ON` to the above cmake script. Compiling and running will be slower and the gmon file will appear only after Inkscape quits.
+
+See: https://wiki.inkscape.org/wiki/index.php/Profiling
+
+Testing
+-------
+
+Before landing a patch, the unit tests should pass.
+
+See: http://wiki.inkscape.org/wiki/index.php/CMake#Using_CMake_to_run_tests
+
+General Guidelines for developers
+----------------------------------
+
+* If you are new, fork the inkscape project (https://gitlab.com/inkscape/inkscape) and create a new branch for each bug/feature you want to work on. Try to Set the CI time to a high value like 2 hour (Go to your fork > Settings > General Pipelines > Timeout)
+* Merge requests (MR) are encouraged for the smallest of contributions. This helps other developers review the code you've written and check for the mistakes that may have slipped by you.
+* Before working on anything big, be sure to discuss your idea with us ([IRC](irc://irc.freenode.org/#inkscape) or [RocketChat](https://chat.inkscape.org/)). Someone else might already have plans you can build upon and we will try to guide you !
+* Adopt the coding style (indentation, bracket placement, reference/pointer placement, variable naming etc. - developer's common sense required!) of existing source so that your changes and code doesn't stand out/feel foreign.
+* Carefully explain your ideas and the changes you've made along with their importance in the MR. Feel free to use pictures !
+* Check the "Allow commits from members who can merge to this target branch" option while submitting the MR.
+* Write informative commit messages ([check this](https://chris.beams.io/posts/git-commit/)). Use full url of bug instead of mentioning just the number in messages and discussions.
+* Try to keep your MR current instead of creating a new one. Rebase your MR sometimes.
+* Inkscape has contributors/developers from across the globe. Some may be unavailable at times but be patient and we will try our best to help you. We are glad to have you!