From 110789b08f26efbb02f3ae2c7a7a99eebc7961d4 Mon Sep 17 00:00:00 2001
From: Andre Anjos <andre.anjos@idiap.ch>
Date: Wed, 21 Sep 2016 13:56:41 +0200
Subject: [PATCH] Move snippets from bob into here

---
 templates/README.md                 | 221 +++++++++++++++++++++++
 templates/bob-128x128.png           | Bin 0 -> 6547 bytes
 templates/bsd-license.txt           |  27 +++
 templates/ci-for-cxx-extensions.yml | 271 ++++++++++++++++++++++++++++
 templates/ci-for-python-only.yml    | 250 +++++++++++++++++++++++++
 templates/favicon.ico               | Bin 0 -> 4286 bytes
 templates/logo.png                  | Bin 0 -> 6266 bytes
 templates/readme-template.rst       |  46 +++++
 templates/simple-buildout.cfg       |  14 ++
 templates/sphinx-conf.py            | 240 ++++++++++++++++++++++++
 10 files changed, 1069 insertions(+)
 create mode 100644 templates/README.md
 create mode 100644 templates/bob-128x128.png
 create mode 100644 templates/bsd-license.txt
 create mode 100644 templates/ci-for-cxx-extensions.yml
 create mode 100644 templates/ci-for-python-only.yml
 create mode 100644 templates/favicon.ico
 create mode 100644 templates/logo.png
 create mode 100644 templates/readme-template.rst
 create mode 100644 templates/simple-buildout.cfg
 create mode 100644 templates/sphinx-conf.py

diff --git a/templates/README.md b/templates/README.md
new file mode 100644
index 0000000..7f50ff1
--- /dev/null
+++ b/templates/README.md
@@ -0,0 +1,221 @@
+# New Package Instructions
+
+These instructions describe how to migrate or setup your package to gitlab and
+new licensing terms. At the same time, we profit to update and fix files
+touched by this procedure. You **don't** have to do all these steps at once. If
+you choose to only do some, prioritise by the order in this text (first do the
+continuous integration changes, then the licensing checks, etc).
+
+> **Notice**: This text may change as we get more experience in what needs to be changed. We may also automatise some of the actions below. We'll keep you posted in this case and update these instructions.
+
+## 0. Set the right origin
+
+If you haven't checked your repository from gitlab yet, you don't have to remove it and re-clone it, you can just set its origin to point to gitlab:
+
+```sh
+$ git remote set-url origin git@gitlab.idiap.ch:bob/`basename $(pwd)`
+$ git pull
+```
+
+
+## 1. Continuous Integration
+
+Remove the `.travis.yml` file from your package:
+
+```sh
+$ git rm -f .travis.yml
+```
+
+Copy the appropriate yml template for the CI builds:
+
+* For python-only packages, it should be
+  [ci-for-python-only.yml](templates/ci-for-python-only.yml)
+* For C/C++ extensions, it should be
+  [ci-for-cxx-extensions.yml](templates/ci-for-cxx-extensions.yml)
+
+
+```sh
+# for pure python
+$ curl -k --silent https://gitlab.idiap.ch/bob/bob.admin/raw/master/templates/ci-for-python-only.yml > .gitlab-ci.yml
+# for c/c++ extensions
+$ curl -k --silent https://gitlab.idiap.ch/bob/bob.admin/raw/master/templates/ci-for-cxx-extensions.yml | tr -d '\r' > .gitlab-ci.yml
+```
+
+Add the file to git:
+
+```sh
+$ git add .gitlab-ci.yml
+```
+
+The ci file should work out of the box. It is long-ish, but generic to any
+package in the system.
+
+You also need to enable the following options on your project:
+
+1. In the project "Settings" page, make sure builds are enabled
+2. If you have a private project, check the package settings and make sure that
+   the "Deploy Keys" for our builders (all `conda-*` related servers) are
+   enabled
+3. Visit the "Runners" section of your package settings and enable all conda
+   runners, for linux and macosx variants
+4. Go into the "Variables" section of your package setup and **add three
+   variables** corresponding to the documentation server, username and password
+   for uploading wheels and latest documentation tar balls to our (web DAV)
+   server. The names of the variables and values are known. If you don't know
+   those, please ask one of us
+5. Make sure to enable the service "Build e-mails" and check all optional
+   boxes. You don't need to put any special e-mail addresses
+6. Setup the coverage regular expression under "CI/CD pipelines" to have the
+   value `^TOTAL.*\s+(\d+\%)$`, which is adequate for figuring out the output
+   of `coverage report`
+
+
+## 2. Licensing
+
+Verify if the license of your package satisfies what is written on our
+spreadsheet:
+
+https://docs.google.com/spreadsheets/d/1jBDLg_VvhDrQYITTepZxn7K69iDIj_FcfRSLk_13AR8/edit#gid=1146180407
+
+Two possible cases:
+
+1. If the package is supposed to be licensed under (a 3-clause) BSD license,
+   then copy and replace the author name in
+   [bsd-license.txt](templates/bsd-license.txt). The name of the file should be
+   `LICENSE` (no extension) and it should sit on the root of your package
+2. If the package is supposed to be licensed under GPLv3 license, then copy
+   [this file](http://www.gnu.org/licenses/gpl.txt) on the root of your package
+   with the name `COPYING` instead
+
+Download commands:
+
+```sh
+# for 3-clause BSD packages
+$ curl -k --silent https://gitlab.idiap.ch/bob/bob.admin/raw/master/templates/bsd-license.txt > LICENSE
+$ sed -i "s/Your Name <your.email@idiap.ch>/Andre Anjos <andre.anjos@idiap.ch>/g;s/<YEAR>/`date +%Y`/g" LICENSE
+$ git add LICENSE
+$ git rm -f COPYING # if the package used to be GPLv3
+
+# for GPLv3 packages
+$ curl -k --silent http://www.gnu.org/licenses/gpl.txt > COPYING
+$ git add COPYING
+$ git rm -f LICENSE # if the package used to be 3-clause BSD
+```
+
+More info about Idiap's [open-source policy here](https://secure.idiap.ch/intranet/services/technology-transfer/idiap-open-source-policy).
+
+
+#### Headers
+
+Sometimes people add headers with licensing terms to their files. You should
+inspect your library to make sure you don't have those. The Idiap TTO says this
+strategy is OK and simplifies our lives. Make the headers of each file you have
+as simple as possible, so they don't get outdated in case things change.
+
+Here is a minimal example (adapt to the language comment style if needed):
+
+```text
+#!/usr/bin/env python
+# vim: set fileencoding=utf-8 :
+```
+
+It is OK to also have your author name on the file if you wish to do so.
+**Don't repeat licensing terms** already explained on the root of your package
+and on the `setup.py` file. If we need to change the license, it is painful to
+go through all the headers.
+
+
+#### Setup
+
+The `setup.py` should be changed to:
+
+1. Modify the URL of your package. Make sure it now points to the gitlab page
+   of the package. For example: `https://gitlab.idiap.ch/bob/bob.extension`
+2. Make sure the license is OK. For BSD, it should say `license="BSD"`. For
+   GPLv3, it should say `license="GPLv3"`.
+3. Make sure the license is reflected on the classifiers entry. For BSD, it
+   should be `'License :: OSI Approved :: BSD License'`. For GPLv3, it should
+   be: `'License :: OSI Approved :: GNU General Public License v3 (GPLv3)'`.
+
+```sh
+$ sed -i "s;github.com/bioidiap;gitlab.idiap.ch/bob;g" setup.py
+```
+
+
+## 3. Buildout
+
+The default buildout file `buildout.cfg` should buildout _from the installed
+distribution_ and avoid mr.developer checkouts. If you have one of those, move
+it to `develop.cfg` and create a new `buildout.cfg` which should be as
+[simple as possible](templates/simple-buildout.cfg).
+
+```sh
+$ git mv buildout.cfg develop.cfg
+$ curl -k --silent https://gitlab.idiap.ch/bob/bob.admin/raw/master/templates/simple-buildout.cfg > buildout.cfg
+$ sed -i "s/<DATE>/`date`/g;s/<PACKAGE>/`basename $(pwd)`/g" buildout.cfg
+$ sed -i "s/buildout.cfg/buildout.cfg develop.cfg/g" MANIFEST.in
+$ sed -i "s;github.com/bioidiap;gitlab.idiap.ch/bob;g" develop.cfg
+$ git add buildout.cfg
+```
+
+## 4. README
+
+Changes are supposed to make the README smaller and easier to maintain. As of
+today, many packages contain outdated installation instructions or outdated
+links. More information can always be found at the documentation, which is
+automatically linked from the badges.
+
+Just copy the [template](templates/readme-template.rst) with:
+
+```sh
+$ curl -k --silent https://gitlab.idiap.ch/bob/bob.admin/raw/master/templates/readme-template.rst > README.rst
+$ sed -i "s/<DATE>/`date`/g" README.rst
+$ sed -i "s/<PACKAGE>/`basename $(pwd)`/g" README.rst
+# example from bob.extension, don't copy verbatim!
+$ sed -i "s%<TITLE>%Python/C++ Bob Extension Building Support%g" README.rst
+$ sed -i s%<SHORTINTRO>%It provides a simple mechanism for extending Bob_ by building packages using either pure python or a mix of C++ and python.%g;" README.rst
+```
+
+Replace the following tags by hand if you don't like/trust the `sed` lines above:
+
+1. `<DATE>`: To today's date. E.g.: `Mon 08 Aug 2016 09:47:28 CEST`
+2. `<PACKAGE>`: With the name of your package. E.g.: `bob.extension`
+3. `<TITLE>`: Replace the title (and the size of the title delimiters). E.g.:
+   `Python/C++ Bob Extension Building Support`
+3. `<SHORTINTRO>`: With a 1 or 2 lines description of your package (it is OK to
+   re-use what you have in `setup.py`). E.g.: `It provides a simple mechanism
+   for extending Bob_ by building packages using either pure python or a mix of
+   C++ and python.`
+
+
+## 5. Bootstrap
+
+Make sure to update your bootstrap file. The latest version is here:
+
+https://bootstrap.pypa.io/bootstrap-buildout.py
+
+Just do a `curl` to update it:
+
+```sh
+$ curl -k --silent https://bootstrap.pypa.io/bootstrap-buildout.py > bootstrap-buildout.py
+```
+
+## 6. doc/conf.py
+
+This file needs updating to support newer versions of Sphinx and to get it in
+sync with the rest of the documentation. Do this:
+
+```sh
+$ curl -k --silent https://gitlab.idiap.ch/bob/bob.admin/raw/master/templates/sphinx-conf.py > doc/conf.py
+$ mkdir -pv doc/img
+$ curl -k --silent https://gitlab.idiap.ch/bob/bob.admin/raw/master/templates/logo.png > doc/img/logo.png
+$ curl -k --silent https://gitlab.idiap.ch/bob/bob.admin/raw/master/templates/favicon.ico > doc/img/favicon.ico
+$ sed -i "s/<PROJECT>/`basename $(pwd)`/g" doc/conf.py
+# the next line is **just** an example, change it accordingly to your project
+# for example, pick the short_description field in setup.py
+$ sed -i "s%<SHORT_DESCRIPTION>%Building of Python/C++ extensions for Bob%g" doc/conf.py
+```
+
+## 7. Update the logo on your project
+
+Please update the logo of your project (on the Settings), just set it to [this one](templates/bob-128x128.png).
diff --git a/templates/bob-128x128.png b/templates/bob-128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..787d77b3ec4f143f8dd66162227b5f385f5183f1
GIT binary patch
literal 6547
zcmV;E8Eoc>P)<h;3K|Lk000e1NJLTq004jh004jp1^@s6!#-il00004b3#c}2nYxW
zd<bNS00009a7bBm000Cy000Cy0p^vXPyhe`8FWQhbW?9;ba!ELWdL_~cP?peYja~^
zaAhuUa%Y?FJQ@H184yWCK~#90?VWjm9YvkTKfla`WWwZ_E9Zm|?tm<U0=j|-awrm5
zK|n+ikVEkRQBd$$z*RsXT!Nr-A1lbQAdV1ZSd<kHL<BVuAS5K2Gnq*y0|_K~zx|_M
z_p9!%KHhshlQ;2wlbP3DU9bDsQ=j_Pud2JNMOCTlUstu8+JLH{zO8*Ca5He;;GqXB
z9L{5p8qR}N6;^#)`&{5T;7H*9`nL8l!+HFw2iQcaZ)>jyZUy!S8uQ6J0k;Fk4woHO
z53mVT-`0K*@K@mD6bc`l3VBd{Tl-1FWs6jUz~NJUTYDYw6X2sjQ%u%n!2W}W9`Nc=
z+f)T$m{i}^z7KE{upQ|<?~A~mgNGjQ_E6eYjRA&O^=<820M`LW04+s)bq;VF@X4XD
z%T+Z77(&&zwZ8{=9ypQW3Ll)xd2oGO`-vHw<x{l@7y{L|wbugkfMb9uW$tb%PCW2h
z*@jtE1t4S9Kk~%8fV*+JbfXb>i}*7JRueR2@jx{O$VlTK`pqcdVi8UNrg|Il1s$qp
zHUPx3!C9SyGg5eb2B!LVU-baxYy5+c?*RN9*crh-k|&lD4<-qyndsl%51ci4*oSW~
z$JUSuRRBuY`1|Jz@Lk|EU^);{vm^X{n!Ntir3fEdGxxwnMVcC^DgY&F!o82pLih#n
zE}+i0QGzaCthGI)G+qK;KxEG~M;!Q0Q3gk-+6^p06Mp{a*U9PAY}7s3sCDF&;EyEz
zY%DB$-`g18Pv}RPLr!nb>RhTGpa@O4yKM%@y})k3mOykgA05y|uiHFDK3V;F`hYXn
z9Ch%W=`4>{6@ZkQc*n2K0KS39R@Mwg!Kt^NqU)EGFB+1iz<vWqAM$#f-ASqfkf4dT
zJu(@%2Y4?~UsgaD$d?+F=sYg~dk!4?k&@$q>Nr4*Cf@SP6M+kWS-uUiZa*QPt(O<`
zJ&oG#)Y~~Y7nnX1VNs&09>AhWKYO?lxCh|_;jO-Qx)vC%#-^COzGVM;tOr;JXjC4B
zjR>a<eCp79EJsRI)dSd+)5*a10ZTPicXeOj%Rr0gp?!5JpAf9gzJ2Cb#8L^JJRQK9
zh^!!3QN{PMD&dSGRrLTRXwr=jZGrF{uuEuT=|P>RyxU(7T)+CHxo4GUZM>=;pae-y
zF9&we=(agIEx6H)4V>f!z&RP18>=b+MXKSt2X_IE0!CXq1QITBD=0xS{CT<%KDX-B
zBi5H|Z<4A26rqM|9}t|obf$ZWDI$M6DB+|$C>wx>R(<|Io-NVLqErQ-2uV)QQ`p&`
zXv>%)&9a`41s4KmmS|$pssfNwjq~nn1x^zQU-<E_sO4f%biP2I9^mx;FC96gH-eg~
z0+3cYy#tsPKb&if*hkiQ0}?+aIfP&Lf90sBGqO09ssN-=(+}@G5!k~^D00LvD$NIp
zun^@7B^g+Ts^b6&YP#f}2H?-Ywq9b)xPNFY$hRChKF|vs*Y~xfpD4%HQdIQ-Nph~e
zZyQRF@B+3jelSk}k{s|v-#Nz&d*MSBfLJws@4r8Su#a_Px}eUw9)RRE;MDRgEnQUr
zBGi20-DAbMx4${*rVn)sKXSy+T?s+565;HX=Y4W88>@>~6@Vz^^cr9XAUdE6j^f7j
z5G;@=@Y|K&KJJlh3@%Mo04!?$&YimhbAcK!vH0O!Uz!DyMZihrSz5lT00h)>{_Qm)
zax><`9S}Ek>sK)HS1Tm_z&BT1aQy1>tSw(v0D{Wtg}|Jm`|%NZ>=%M~X2nIHzOO_J
zGgTD;LoMgtHXAqrbWB!b{FV{H*PUZjhN=J<5@)z~W+5S*M|}f2NnO8C<i85Ip!ebv
zR%T#sCaMCE*W|NrJ_F?6e2Hl;?Z!e9iv0i5d+BF0eYUS$RRI7dpLtUY@HK?-p^c%S
zE@r!%WQSxiL-2HOxvByHNKS7>WSh{9mk=JlwcPQOBJv*qF73JEr0$GN&P+uCF!huh
zCJ=m{FzP`Go6=^D9a-@w+poKeHE+Z|4gubuls9>>C+e<WK=@nFl_%d2vG+}?)K>$i
zp8Vs(f$M=>crQgj;C&}eo@4;*={CPySPT@@7?8=4`wgXut$+jTzJ&D%OM$l)-Uiko
z@;0y<=mP$X@H=2(&y^<+`=!}b08Bga`YnOK06W_EQak|GL6l<l8~6Qmk69;Oq78r&
z<5hx@f86%)10D*jP*?->A@U0FYv8G#t4@ByVs)lU2fzu}-HP-0k>UPJESzHU#sClt
zP<9hC7-@C@tdNushyvXRUBCkhH}+ipxgLvUWh)VYX~+L)FNB8(4vi+2a#;|hD3rKu
z5dheSZqs^;gt#ICl0-n_;1F*Y9f&N$xg+_G?rT1m+10~X0Hz;zZ7t4B*1OsZAzdk_
za`(R7l?p&n!C!tooG}$Bar?2>@Dy+)dxj0b8^CP{mvmoyO4+l7!~<~bHJ9StqMUx>
zBWu32*2I4y5+vLA%FP?sZrf}r6_7YMqP@mDI9C&|K;)+GADvQi@E8fe^rNrd7I+Gn
z5x<8b1HfU7{^NluBB)EsBMHY%3rC#iu!Av(@EY*d?(0u|k`fdNz>K4=`U9|c@*ZLW
zHEaGfR+SiFrU~f0^rS)y<cS2JOhDpnPUAJ4kL3#Ux^Fmb9!1Iuz>JSy`DNf@+<9=q
zUyIpeF-MO|5B$N>?muln7tEU?sEfY#p9Davw%vY=NC2$I>_g;1;IytAPYaLLL?{Hn
zjKk-(0M7!2xo|=!pHRw0xA_qXse?Z^%}GoICX2{F36MlM62K`9jCH{85f1PA$?0#B
zLLmTJ54++q;9#p!$%#M_H8zx|Q~-(y=)nKSjs0GUft|OW2Qn=HX}m@h7=?62coFzm
z*Uvt`j0E`rXg&1uBXQ=OnUwU!pfS;T((K2cIks@3zLy9<M9mAP1-(hp9wOZ~4FOOD
z81YcNg2-N7H+?>K_7Lx4Q0qr7+Y-2pw1pouGK>6C6)q8gf~=D&d1-=Iq_F_x^93tn
z5D?Y43qa9!O5xKtJB*Rf4u)Fx>rXcr+796^;A6zd^8hms{^4CXZ>LB-d#GmJ1suxg
zKiFp5@&)q526l1V<Ge?js6VyGi1HR*`YPb-owuEF6A=<sW#)mG?gjh?^ET*6l~_nA
z^2Gub=>;M-ILTx1-P)bhrWX<u0dYRw1~vkMFc#BiM0o&-*nhELM8z0xdLeBw!oHoi
zf6*Ebh^o^1{;zCL)PT>Z(Uxx&ZX=N3c6WVLtu=qa$k0v`w%fNwLL;1p^IEpCg|sxD
zBFO`I1-J&`YT$`{ViO{>fL4TQICBe51{x8!Sq-)+#xc@>Q8E<rf55(-cYZN^`^4t>
zbnwiBe%Oq2oqcOJ%?e74t4+)!{At-EUyB_mn{oKOQNX(qJ`QpOur=mwXGy_b{&=xX
zNjfOr1TO5j`%9MvZQML>3CrovaQ@hN31Yj0*V*JLan`SV;D_^Gzt1L_vHan)b2t~%
zo&&x!WA41U2;aha<g6h%xC2CeoVa#)71st%2nyX2;W(Ti-+zjmn+Is!>(mb-qwi-_
zZ8P9BNmA=HRij2bO_SLqr48)xyvTasr^_BY=ZhuVc-R$(1J~r642#>(|B4Ro!uHub
zg}?de0ru;-=PNInwro}a%-H$h8k|?M?uyjp3*3oGL~08Fj2aDME=K@jhvOw+_oa`Y
zyRIBtTMxaw6_JM>TMbW~FX&96C~W&_$1l!2&9r0lY63L(ZQLh%RUx+lSPK%EZ{J%q
zAV~+v3P#nQv$XwNWfeZavbL`;YyIfu?*o2?Z~$)iJAc=)S+-6q;iQKnes_ByuQ-1L
z|9&Ji_wi=q0jBSCz*LYwV9x9vsKMb7z!qT#0I3~kdXGn!J$vg%v$VVQkjus)JOeln
zrP!i=Ynt;bveyub2LzmPfw{{cILn)eYV&zzjOtBjZkBV?at=_(3#fwTKy#?(P}RZ@
zx%`i_Zszqo$U6h*JALT7?#236$4Ob6z3j1b-jbXiCOKV<V!Rqg6J8(V<P|kuL!*IL
z(3p9h{Y@gLUp0@vSpYC?$Ndgga(mkg(kM_j-Gw9;kX!)})i+VSVfjDjcMXO8OXr`v
zlpNocoDK%xEmRg1sz?rh9@Saqu}3@r({}jaXjHF6wJEZud$ry97cBU~x)R|*7OLh#
zU8qd8VeOr4T))I$&{$tM<w0QrVS*CpC31{24?E%kKyw$Nx$Qy)=@zc9Frxs8Z3;S3
zJ-Oqh_S837l%l2o`=6?Vi!af^C4;)Q2VK_(8`i?c^+sW1g~IA3Y(O|^b*+b8;SJx8
z=w86o?f$(L_!P(%PKr4=BF={z>4lA<yk<UQ=w&15qn!(%dVVPE4@w7@+=bM9liG2+
zh}5FBbx!bE<9teuyFS)uyO@_0^QLRChfo;A+5%xJ&P%68HUOyJ0&EpknAWbJH|k~s
zBm~DIkS`C3?G`Qn=X{+p=b)EZKd_4eypy-5W^4h3+B&C;T3hFIPiw~&#x9I5paez=
z4Is8ena)TDV9GXo&jt1nvx`(@Z4U$DgQFkiJDsomF4e77SxM1*Q4SXvov*r1Qy^>6
z^=tCx=DVjgb?B&CsL4Z6Q<nya3F^H1?vF4+0hls-uQ9--2#x-6j9^dS+2%oFt?l`=
zFdTpFdiD1uy@;tSY3^~LTai}BOa}t-Y!}cCuzny6gxhSy10f>nJ>xkd0f5{kz;@xm
z?*I&LxobqB6A8x>;KU3KPOXlY+WV*Pxc_QITm3*5E)GQkfxtWcb`N1T88u@kyT==G
z08HL`kJ-RcPDAJ_UzqN1w{edH#J&C=hGQ-0ZQYChxHN0q(@WQ37BF}PUlb6ohsehe
zQd5`r5Ov=4bR!OceBd|JR@>beK0H3E0XT3YV#099s|Xhjf#s>Cs)cI}W;vG%gc(CP
z*FXB)-H#{$TDIEl7;(qUeOJK}YCDpTg6;VXIJ!Vj?_Tum#-Xr3wKVsZH>R&nAqLGZ
z83<L-4c;teBL;w$nY-43T%_KO6!||%Ty6J0>|VjmkcT6O@>I{_=bjmwGbl#d=N5c^
zoj4%;-B~k1Y=5SlDE;o&M+^X{&O_9hw?C#ZfkJIBta$lCO+f*UMZoEq+g*ZGHGdDG
zQ}E8|L<6Bd*j?{n$nPE2Dl)PFXl~tkd*CqCyp_iouM3{J50D5r{1B}c^anj}{B4uZ
z-3x%`>a7JF1w^F#H#Qf%!vOHId#Dis0IJ^tT0`x+^MS3lOQ7Hja9BOZ%RNh9xFuVo
z%aM+?7BB>AygEZxp?Cl<umA4^q6~Jt{A90tq>%!^dw}pb5BQldRy4BULovcS&}%ZY
zH3O;YSSWb;xGtgZ^u6Xk$~%AtUNl|t05nbCaTlEX>#eod$Ap**W^-UJxHZB9V>xht
zh9;LU)v<^>Mqzk0TL&jH9x%NFUK&RG4<i5olv9AoK3DJC>`Fp~?c*Wxi@IRN@&#qz
z<Cm4D%zp0#V2tUpym1Z#2;U<Nz8YWnTA`=lgW>Py@hTqxbU)`KYI{`ZYnHLCCx9Ce
zT~)4ySxQwu05pqPvr+#!#CnI=reXlmht1<vGysiLx1WhbPfwSR>oGq<`7EBp^AAb~
z@MI>&W+lxXjmTK1**9vu_sfK#0Eu}`%-U2qF!ZAQ-aK4I0|5G2l&SVUzhyYU2S*YZ
z3h>939WM{*oj%1&cMaJrPUp@oc%OGLo4sThy1HI_#`jA4iUvTHxrpzX7fYrHIFiBW
z1+K`#&aBk3)ox>P-M=}a7j*ymWM{P~7=9BxX2k-~FlAc-CWpE@o+ST20*+)bI{P|b
zc`*Z1vy<xkfEJ&Jcej-f!%9^`_cv550HBkBz_aIpLbbw?8jSfF7@4thp8?s@?Dv-r
z1BEX*X`S7#|7k(+h!qQfs?G$q1Tl);JUdhAz$nba%$vZkGBmerHMj0kE3l8*?E@$s
z1~X<LhlFcCR4@QI)6`AKpNd~b^yljdB!FSGhkd}`vNALisUE39Yhm5>V#UHhf&M~k
zuoUGw+hHpg0M(tbJ+}}DYr`YK0Wj=P4EA@w)*sxmX{BeP#zPy%xRwM8)X5&s=bdi2
z8~9SslIN`FTd@Erg&P;mM!@=BABYCS4n;*3e)II5W&v9lO3&Yhsp00+#sNmYRahp5
za8<DYIQ@Tj(eC0C!H9-pNS^U4Rf?VuGQHsTAsz-2UB7XzulBz2{1Z{fu3P}nap5E|
zDX@W&5{e;t`$j2hn!e*`VE+Q7g@#)~rL0C3H!gVlnh2j)=tKBs-0>?G09Exy=p>?H
zD`YMjii!asf3L&VzJVWiQ@$$u;~5ta%h*OR27raVZ@d^;`=NpX0A1&uy4k@sB=+m0
z`J@08ejqxsv$J$HPTPJW$fw193dlPRKMd-o#d-xViwnX^;OrzDDi;7{wLOZ50vP^+
zkM$Hr^P%XP><leK%H@b|;}tMQZFlXJLT2Z8lvfCW@a&3Z|46*SwPFEKv=fZ>%~yqk
zH9p!?i2uU5yRcI>R+g^DsoS*zhZH6-R3mtk00>T+-z(&S@rC_f^RO8BbQ(J<768zt
zU<5@*!G@uT?C)E=gn&Dd)TY(-_#SZacl`YzK-eop292vhE?TjC!HP6SR4xF@5_iFq
zcdk)Tr1268FfBVni&w*xZFdLu0`TtgO#q?r+YW-)fmEJb*|Ff3w6;_%0E#XF)(Gy@
zs(~RdS9#YL92blSLLy#;GxTbhvdvhK+khzm-jwrkAb8C~A_$8?K2?l86$=2W&w})*
z3xJq)!B`5m`)Pm>-DCiu+=}SVc|(kJ!|eyUgTe4V0)#GvGgfxIRMa3>#m*5lxT<Rd
zXoquliaYm@H-(S!&p%X#mltE3v*b+@HEu#<t7RJWq1B|xvrkm?Ae5Q{xWT5%owvxJ
z=3jKr#?t`k4J$id{&lf7RV)AisLl`nk^Ddq0K%8wTQz|Ig%(9WF^p%zq{*{q0~Y{|
z1rQ-U2$u75_On6Z$(5Z8FD%8biUvU87pinS<rl8iUM_+#1c5NKDyY_ho;6(OF{x$i
z(Wu@RoTINO5RCNz2rq&jTdHjp4ZxeLyI%(FHC<kTgCrQDyn~l@*7%0$vxnn66ukl1
z)md>*z_&e6{uU7OQ`(u|0$l(c(%1RQ+ojr8(EtFTEbv9cX8rcc+VA4cFMC0f;TiHv
zQ-E&|wfPg9XZ;s&grfeKBLsq`0>Nk&76Kpc>w2Y^GF0)CMUR`%vbDf(ftgN<_=4wx
z0{w%)Rgq9W=i^m@o!9htuD4_?TN9hN`U!9h$VC64Ep~<8Rw98@@NIt$_)vfMYl-g#
zOj5;rfVT#E7c2U-FN8B(yxlv*c?Mt1Fhk+ItZkmqG_z)6^H%o(#{m<A!JARn4YMq5
zzj<1Ph1Y=tvnYHR0UiKg-1z1xz@HHJb+)0=0PLP2l~?EjIdX7SXC^a)OlX=p2KXhg
zuLxtq$CJQEYHyH3SO9#izkAV=ENq1l-~j;MTC<`Xm|uwH0<|3oc?LHv;1w*v<5bYw
z>nBYOJc3rdCN#C~4*E2(KQPwwLOzw`4F(k+McFgU!iN#!0RYC0Z<+)=56lYHszA+7
z;}tCJ>+8TtgR8opD%Q3MjWc!txdzw`-?NPVgNvnR`#-GSpa=Nzs-D*`DAukt8ZiI>
z)QxZYgg95xS_-LRS(Lz*)F5;N{{wt)a8=jxBzwj;PHzRd8rU0{;XA55c#DR>Gt;+y
z32^GF-o=k6*;1-T6aWBq^^NC)d;?)Z;7@B=ECmDsSdJ5E&j)z{Sb|V1usg61$Tq-4
zpb4Qh?0u3T2&RQ>-zdo6fx}kyF3u#_i_(Y#0HChE@mAoIAY;O1S_%lU!Qw_>Ab+`T
zl5KC!YPk@2>uYcx;yiA3?~;-Sc+zU50x$~a*}naOQEq|8gJ6LmkS)R+g!d^?5Co49
zeGITd&;fGo>J>{aVVE=`0RX70Zx{zMAJ_w^b5esKL>Ew!HyCCJdVptvFRWhi#v2Ty
zMl1jTb@dISKrRE0$GyP<DBN7(B?K0WXcDY0JP1MbF`T7H2>OA4i14M=E0%7OXB9^@
z0Iurl8$JwjBd~2DRRZHFLk&Suo?sAUA#m=%%B8XQ?GLp!3jhG>>KmFt9su5rc^g@5
zEp--#4uVi%xDHr^@PmPs%kD}(tD)Cs0{}o>eS_e<ru}?i8=xr}f(&8;3FQp#zX#|Q
zxCP{@fxcy%b~bWDn-u`2>gpTc2Yerx12S!xA;{s3C3GYF7UY&Seart&1!}Vez*Sv+
z<95JBAag`$!I^b*bjc7zHw9}EIs}%3JP7=JO@Bv4J%w!3W)Fa=y75g7;*1>}1?&jY
z0@Ndn199f(^>SMQ7!(*pcn9Qd;H~^mFUTDTZG-)tZw=GwWTJm50D>AfzIhz5BhZM@
z0x|=bE-)2n$oD6^f!9G^!FktSrwE;ctGb8vb#g<c{|8XDqFsBy#!dhL002ovPDHLk
FV1j@GAe{gJ

literal 0
HcmV?d00001

diff --git a/templates/bsd-license.txt b/templates/bsd-license.txt
new file mode 100644
index 0000000..b115a37
--- /dev/null
+++ b/templates/bsd-license.txt
@@ -0,0 +1,27 @@
+Copyright (c) <YEAR> Idiap Research Institute, http://www.idiap.ch/
+Written by Your Name <your.email@idiap.ch>
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors
+may be used to endorse or promote products derived from this software without
+specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
diff --git a/templates/ci-for-cxx-extensions.yml b/templates/ci-for-cxx-extensions.yml
new file mode 100644
index 0000000..7679727
--- /dev/null
+++ b/templates/ci-for-cxx-extensions.yml
@@ -0,0 +1,271 @@
+# This build file is defined in two parts: 1) a generic set of instructions you
+# probably **don't** need to change and 2) a part you may have to tune to your
+# project. It heavily uses template features from YAML to help you in only
+# changing a minimal part of it and avoid code duplication to a maximum while
+# still providing a nice pipeline display on your package.
+
+
+# 1) Generic instructions (only change if you know what you're doing)
+# -------------------------------------------------------------------
+
+# Definition of our build pipeline
+stages:
+  - build
+  - test
+  - docs
+  - wheels
+
+
+# Global variables
+variables:
+  CONDA_PREFIX: env
+
+
+# Template for the build stage
+# Needs to run on all supported architectures, platforms and python versions
+.build_template: &build_job
+  stage: build
+  before_script:
+    - git clean -ffdx
+    - curl --silent "https://gitlab.idiap.ch/bob/bob.admin/raw/master/bootstrap-conda.sh" > bootstrap-conda.sh
+    - chmod 755 ./bootstrap-conda.sh
+    - ./bootstrap-conda.sh ${CONDA_FOLDER} ${PYTHON_VER} ${CONDA_PREFIX}
+  variables: &build_variables
+    BOB_DOCUMENTATION_SERVER: "http://www.idiap.ch/software/bob/docs/latest/bob/%s/master/"
+  script:
+    - BOB_PREFIX_PATH=${CONDA_FOLDER}/envs/`cat ${CONDA_FOLDER}/envs/latest-devel-${PYTHON_VER}.txt` ./bin/buildout
+    - ./bin/sphinx-build doc sphinx
+    - ./bin/python setup.py bdist_wheel
+  after_script:
+    - rm -rf ${CONDA_PREFIX}
+  artifacts:
+    expire_in: 1 day
+    paths:
+      - bootstrap-conda.sh
+      - dist/
+      - sphinx/
+
+
+# Template for building on a Linux machine
+.build_linux_template: &linux_build_job
+  <<: *build_job
+  variables: &linux_build_variables
+    <<: *build_variables
+    CONDA_FOLDER: "/local/conda"
+    CFLAGS: "-D_GLIBCXX_USE_CXX11_ABI=0 -coverage"
+    CXXFLAGS: "-D_GLIBCXX_USE_CXX11_ABI=0 -coverage"
+
+
+# Template for building on a Mac OSX machine
+.build_mac_template: &macosx_build_job
+  <<: *build_job
+  variables: &macosx_build_variables
+    <<: *build_variables
+    CONDA_FOLDER: "/opt/conda"
+
+
+# Template for the test stage - re-install from uploaded wheels
+# Needs to run on all supported architectures, platforms and python versions
+.test_template: &test_job
+  stage: test
+  before_script:
+    - ./bootstrap-conda.sh ${CONDA_FOLDER} ${PYTHON_VER} ${CONDA_PREFIX}
+    - source ${CONDA_FOLDER}/bin/activate ${CONDA_PREFIX}
+    - pip install --use-wheel --no-index --pre dist/*.whl
+  script:
+    - cd ${CONDA_PREFIX}
+    - python -c "from ${CI_PROJECT_NAME} import get_config; print(get_config())"
+    - coverage run --source=${CI_PROJECT_NAME} ./bin/nosetests -sv ${CI_PROJECT_NAME}
+    - coverage report
+    - sphinx-build -b doctest ../doc ../sphinx
+  after_script:
+    - rm -rf ${CONDA_PREFIX}
+
+
+# Template for the wheel uploading stage
+# Needs to run against one combination of python 2.x and 3.x if it is a python
+# only package, otherwise, needs to run in both pythons to all supported
+# architectures (Linux and Mac OSX 64-bit)
+.wheels_template: &wheels_job
+  stage: wheels
+  only:
+    - master
+    - tags
+  before_script:
+    - curl --silent https://gitlab.idiap.ch/bob/bob/snippets/8/raw | tr -d '\r' > upload-wheel.sh
+    - chmod 755 upload-wheel.sh
+  script:
+    - ./upload-wheel.sh
+
+
+# Template for (latest) documentation upload stage
+# Only one real job needs to do this
+.docs_template: &docs_job
+  stage: docs
+  only:
+    - master
+  before_script:
+    - curl --silent https://gitlab.idiap.ch/bob/bob/snippets/9/raw | tr -d '\r' > upload-sphinx.sh
+    - chmod 755 upload-sphinx.sh
+  script:
+    - ./upload-sphinx.sh
+
+
+# 2) Package specific instructions (you may tune this if needed)
+# --------------------------------------------------------------
+
+# Linux + Python 2.7: Builds and tests
+build_linux_27:
+  <<: *linux_build_job
+  variables: &linux_27_build_variables
+    <<: *linux_build_variables
+    PYTHON_VER: "2.7"
+  tags:
+    - conda-linux
+
+test_linux_27:
+  <<: *test_job
+  variables: *linux_27_build_variables
+  dependencies:
+    - build_linux_27
+  tags:
+    - conda-linux
+
+wheels_linux_27:
+  <<: *wheels_job
+  dependencies:
+    - build_linux_27
+  tags:
+    - conda-linux
+
+
+# Linux + Python 3.4: Builds and tests
+build_linux_34:
+  <<: *linux_build_job
+  variables: &linux_34_build_variables
+    <<: *linux_build_variables
+    PYTHON_VER: "3.4"
+  tags:
+    - conda-linux
+
+test_linux_34:
+  <<: *test_job
+  variables: *linux_34_build_variables
+  dependencies:
+    - build_linux_34
+  tags:
+    - conda-linux
+
+wheels_linux_34:
+  <<: *wheels_job
+  dependencies:
+    - build_linux_34
+  tags:
+    - conda-linux
+
+
+# Linux + Python 3.5: Builds and tests
+build_linux_35:
+  <<: *linux_build_job
+  variables: &linux_35_build_variables
+    <<: *linux_build_variables
+    PYTHON_VER: "3.5"
+  tags:
+    - conda-linux
+
+test_linux_35:
+  <<: *test_job
+  variables: *linux_35_build_variables
+  dependencies:
+    - build_linux_35
+  tags:
+    - conda-linux
+
+wheels_linux_35:
+  <<: *wheels_job
+  dependencies:
+    - build_linux_35
+  tags:
+    - conda-linux
+
+docs_linux_35:
+  <<: *docs_job
+  dependencies:
+    - build_linux_35
+  tags:
+    - conda-linux
+
+
+# Mac OSX + Python 2.7: Builds, tests and uploads the wheel
+build_macosx_27:
+  <<: *macosx_build_job
+  variables: &macosx_27_build_variables
+    <<: *macosx_build_variables
+    PYTHON_VER: "2.7"
+  tags:
+    - conda-macosx
+
+test_macosx_27:
+  <<: *test_job
+  variables: *macosx_27_build_variables
+  dependencies:
+    - build_macosx_27
+  tags:
+    - conda-macosx
+
+wheels_macosx_27:
+  <<: *wheels_job
+  dependencies:
+    - build_macosx_27
+  tags:
+    - conda-macosx
+
+
+# Mac OSX + Python 3.4: Builds and tests
+build_macosx_34:
+  <<: *macosx_build_job
+  variables: &macosx_34_build_variables
+    <<: *macosx_build_variables
+    PYTHON_VER: "3.4"
+  tags:
+    - conda-macosx
+
+test_macosx_34:
+  <<: *test_job
+  variables: *macosx_34_build_variables
+  dependencies:
+    - build_macosx_34
+  tags:
+    - conda-macosx
+
+wheels_macosx_34:
+  <<: *wheels_job
+  dependencies:
+    - build_macosx_34
+  tags:
+    - conda-macosx
+
+
+# Mac OSX + Python 3.5: Builds, tests, uploads the wheel and the latest docs
+build_macosx_35:
+  <<: *macosx_build_job
+  variables: &macosx_35_build_variables
+    <<: *macosx_build_variables
+    PYTHON_VER: "3.5"
+  tags:
+    - conda-macosx
+
+test_macosx_35:
+  <<: *test_job
+  variables: *macosx_35_build_variables
+  dependencies:
+    - build_macosx_35
+  tags:
+    - conda-macosx
+
+wheels_macosx_35:
+  <<: *wheels_job
+  dependencies:
+    - build_macosx_35
+  tags:
+    - conda-macosx
\ No newline at end of file
diff --git a/templates/ci-for-python-only.yml b/templates/ci-for-python-only.yml
new file mode 100644
index 0000000..815a195
--- /dev/null
+++ b/templates/ci-for-python-only.yml
@@ -0,0 +1,250 @@
+# This build file is defined in two parts: 1) a generic set of instructions you
+# probably **don't** need to change and 2) a part you may have to tune to your
+# project. It heavily uses template features from YAML to help you in only
+# changing a minimal part of it and avoid code duplication to a maximum while
+# still providing a nice pipeline display on your package.
+
+
+# 1) Generic instructions (only change if you know what you're doing)
+# -------------------------------------------------------------------
+
+# Definition of our build pipeline
+stages:
+  - build
+  - test
+  - docs
+  - wheels
+
+
+# Global variables
+variables:
+  CONDA_PREFIX: env
+
+
+# Template for the build stage
+# Needs to run on all supported architectures, platforms and python versions
+.build_template: &build_job
+  stage: build
+  before_script:
+    - git clean -ffdx
+    - curl --silent "https://gitlab.idiap.ch/bob/bob.admin/raw/master/bootstrap-conda.sh" > bootstrap-conda.sh
+    - chmod 755 ./bootstrap-conda.sh
+    - ./bootstrap-conda.sh ${CONDA_FOLDER} ${PYTHON_VER} ${CONDA_PREFIX}
+  variables: &build_variables
+    BOB_DOCUMENTATION_SERVER: "http://www.idiap.ch/software/bob/docs/latest/bob/%s/master/"
+  script:
+    - ./bin/buildout
+    - if [ -x ./bin/bob_dbmanage.py ]; then ./bin/bob_dbmanage.py all download --force; fi
+    - ./bin/sphinx-build doc sphinx
+    - ./bin/python setup.py bdist_wheel --python-tag ${WHEEL_TAG}
+  after_script:
+    - rm -rf ${CONDA_PREFIX}
+  artifacts:
+    expire_in: 1 day
+    paths:
+      - bootstrap-conda.sh
+      - dist/
+      - sphinx/
+
+
+# Template for building on a Linux machine
+.build_linux_template: &linux_build_job
+  <<: *build_job
+  variables: &linux_build_variables
+    <<: *build_variables
+    CONDA_FOLDER: "/local/conda"
+    CFLAGS: "-D_GLIBCXX_USE_CXX11_ABI=0 -coverage"
+    CXXFLAGS: "-D_GLIBCXX_USE_CXX11_ABI=0 -coverage"
+
+
+# Template for building on a Mac OSX machine
+.build_mac_template: &macosx_build_job
+  <<: *build_job
+  variables: &macosx_build_variables
+    <<: *build_variables
+    CONDA_FOLDER: "/opt/conda"
+
+
+# Template for the test stage - re-install from uploaded wheels
+# Needs to run on all supported architectures, platforms and python versions
+.test_template: &test_job
+  stage: test
+  before_script:
+    - ./bootstrap-conda.sh ${CONDA_FOLDER} ${PYTHON_VER} ${CONDA_PREFIX}
+    - source ${CONDA_FOLDER}/bin/activate ${CONDA_PREFIX}
+    - pip install --use-wheel --no-index --pre dist/*.whl
+  script:
+    - cd ${CONDA_PREFIX}
+    - python -c "from ${CI_PROJECT_NAME} import get_config; print(get_config())"
+    - coverage run --source=${CI_PROJECT_NAME} ./bin/nosetests -sv ${CI_PROJECT_NAME}
+    - coverage report
+    - sphinx-build -b doctest ../doc ../sphinx
+  after_script:
+    - rm -rf ${CONDA_PREFIX}
+
+
+# Template for the wheel uploading stage
+# Needs to run against one combination of python 2.x and 3.x if it is a python
+# only package, otherwise, needs to run in both pythons to all supported
+# architectures (Linux and Mac OSX 64-bit)
+.wheels_template: &wheels_job
+  stage: wheels
+  only:
+    - master
+    - tags
+  before_script:
+    - curl --silent https://gitlab.idiap.ch/bob/bob/snippets/8/raw | tr -d '\r' > upload-wheel.sh
+    - chmod 755 upload-wheel.sh
+  script:
+    - ./upload-wheel.sh
+
+
+# Template for (latest) documentation upload stage
+# Only one real job needs to do this
+.docs_template: &docs_job
+  stage: docs
+  only:
+    - master
+  before_script:
+    - curl --silent https://gitlab.idiap.ch/bob/bob/snippets/9/raw | tr -d '\r' > upload-sphinx.sh
+    - chmod 755 upload-sphinx.sh
+  script:
+    - ./upload-sphinx.sh
+
+
+# 2) Package specific instructions (you may tune this if needed)
+# --------------------------------------------------------------
+
+# Linux + Python 2.7: Builds, tests, uploads wheel
+build_linux_27:
+  <<: *linux_build_job
+  variables: &linux_27_build_variables
+    <<: *linux_build_variables
+    PYTHON_VER: "2.7"
+    WHEEL_TAG: "py27"
+  tags:
+    - conda-linux
+
+test_linux_27:
+  <<: *test_job
+  variables: *linux_27_build_variables
+  dependencies:
+    - build_linux_27
+  tags:
+    - conda-linux
+
+wheels_linux_27:
+  <<: *wheels_job
+  dependencies:
+    - build_linux_27
+  tags:
+    - conda-linux
+
+
+# Linux + Python 3.4: Builds and tests
+build_linux_34:
+  <<: *linux_build_job
+  variables: &linux_34_build_variables
+    <<: *linux_build_variables
+    PYTHON_VER: "3.4"
+    WHEEL_TAG: "py3"
+  tags:
+    - conda-linux
+
+test_linux_34:
+  <<: *test_job
+  variables: *linux_34_build_variables
+  dependencies:
+    - build_linux_34
+  tags:
+    - conda-linux
+
+
+# Linux + Python 3.5: Builds, tests, uploads wheel
+build_linux_35:
+  <<: *linux_build_job
+  variables: &linux_35_build_variables
+    <<: *linux_build_variables
+    PYTHON_VER: "3.5"
+    WHEEL_TAG: "py3"
+  tags:
+    - conda-linux
+
+test_linux_35:
+  <<: *test_job
+  variables: *linux_35_build_variables
+  dependencies:
+    - build_linux_35
+  tags:
+    - conda-linux
+
+wheels_linux_35:
+  <<: *wheels_job
+  dependencies:
+    - build_linux_35
+  tags:
+    - conda-linux
+
+docs_linux_35:
+  <<: *docs_job
+  dependencies:
+    - build_linux_35
+  tags:
+    - conda-linux
+
+
+# Mac OSX + Python 2.7: Builds and tests
+build_macosx_27:
+  <<: *macosx_build_job
+  variables: &macosx_27_build_variables
+    <<: *macosx_build_variables
+    PYTHON_VER: "2.7"
+    WHEEL_TAG: "py27"
+  tags:
+    - conda-macosx
+
+test_macosx_27:
+  <<: *test_job
+  variables: *macosx_27_build_variables
+  dependencies:
+    - build_macosx_27
+  tags:
+    - conda-macosx
+
+
+# Mac OSX + Python 3.4: Builds and tests
+build_macosx_34:
+  <<: *macosx_build_job
+  variables: &macosx_34_build_variables
+    <<: *macosx_build_variables
+    PYTHON_VER: "3.4"
+    WHEEL_TAG: "py3"
+  tags:
+    - conda-macosx
+
+test_macosx_34:
+  <<: *test_job
+  variables: *macosx_34_build_variables
+  dependencies:
+    - build_macosx_34
+  tags:
+    - conda-macosx
+
+
+# Mac OSX + Python 3.5: Builds and tests
+build_macosx_35:
+  <<: *macosx_build_job
+  variables: &macosx_35_build_variables
+    <<: *macosx_build_variables
+    PYTHON_VER: "3.5"
+    WHEEL_TAG: "py3"
+  tags:
+    - conda-macosx
+
+test_macosx_35:
+  <<: *test_job
+  variables: *macosx_35_build_variables
+  dependencies:
+    - build_macosx_35
+  tags:
+    - conda-macosx
\ No newline at end of file
diff --git a/templates/favicon.ico b/templates/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..4cc3264302627d40868261add69eb755856611b6
GIT binary patch
literal 4286
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

literal 0
HcmV?d00001

diff --git a/templates/logo.png b/templates/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..b60858a7068bf45c1ed8e3da12fe244ccdcfe85d
GIT binary patch
literal 6266
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

literal 0
HcmV?d00001

diff --git a/templates/readme-template.rst b/templates/readme-template.rst
new file mode 100644
index 0000000..5987d80
--- /dev/null
+++ b/templates/readme-template.rst
@@ -0,0 +1,46 @@
+.. vim: set fileencoding=utf-8 :
+.. <DATE>
+
+.. image:: http://img.shields.io/badge/docs-stable-yellow.png
+   :target: http://pythonhosted.org/<PACKAGE>/index.html
+.. image:: http://img.shields.io/badge/docs-latest-orange.png
+   :target: https://www.idiap.ch/software/bob/docs/latest/bob/<PACKAGE>/master/index.html
+.. image:: https://gitlab.idiap.ch/bob/<PACKAGE>/badges/master/build.svg
+   :target: https://gitlab.idiap.ch/bob/<PACKAGE>/commits/master
+.. image:: https://img.shields.io/badge/gitlab-project-0000c0.svg
+   :target: https://gitlab.idiap.ch/bob/<PACKAGE>
+.. image:: http://img.shields.io/pypi/v/<PACKAGE>.png
+   :target: https://pypi.python.org/pypi/<PACKAGE>
+.. image:: http://img.shields.io/pypi/dm/<PACKAGE>.png
+   :target: https://pypi.python.org/pypi/<PACKAGE>
+
+
+=========
+ <TITLE>
+=========
+
+This package is part of the signal-processing and machine learning toolbox
+Bob_. <SHORTINTRO>
+
+
+Installation
+------------
+
+Follow our `installation`_ instructions. Then, using the Python interpreter
+provided by the distribution, bootstrap and buildout this package::
+
+  $ python bootstrap-buildout.py
+  $ ./bin/buildout
+
+
+Contact
+-------
+
+For questions or reporting issues to this software package, contact our
+development `mailing list`_.
+
+
+.. Place your references here:
+.. _bob: https://www.idiap.ch/software/bob
+.. _installation: https://gitlab.idiap.ch/bob/bob/wikis/Installation
+.. _mailing list: https://groups.google.com/forum/?fromgroups#!forum/bob-devel
\ No newline at end of file
diff --git a/templates/simple-buildout.cfg b/templates/simple-buildout.cfg
new file mode 100644
index 0000000..ba79504
--- /dev/null
+++ b/templates/simple-buildout.cfg
@@ -0,0 +1,14 @@
+; vim: set fileencoding=utf-8 :
+; <DATE>
+
+[buildout]
+parts = scripts
+develop = .
+eggs = <PACKAGE>
+extensions = bob.buildout
+newest = false
+verbose = true
+
+[scripts]
+recipe = bob.buildout:scripts
+dependent-scripts = true
\ No newline at end of file
diff --git a/templates/sphinx-conf.py b/templates/sphinx-conf.py
new file mode 100644
index 0000000..31fa2eb
--- /dev/null
+++ b/templates/sphinx-conf.py
@@ -0,0 +1,240 @@
+#!/usr/bin/env python
+# vim: set fileencoding=utf-8 :
+
+import os
+import sys
+import glob
+import pkg_resources
+
+
+# -- General configuration -----------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+needs_sphinx = '1.3'
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+extensions = [
+    'sphinx.ext.todo',
+    'sphinx.ext.coverage',
+    'sphinx.ext.ifconfig',
+    'sphinx.ext.autodoc',
+    'sphinx.ext.autosummary',
+    'sphinx.ext.doctest',
+    'sphinx.ext.graphviz',
+    'sphinx.ext.intersphinx',
+    'sphinx.ext.napoleon',
+    'sphinx.ext.viewcode',
+    ]
+
+import sphinx
+if sphinx.__version__ >= "1.4.1":
+    extensions.append('sphinx.ext.imgmath')
+else:
+    extensions.append('sphinx.ext.pngmath')
+
+# Always includes todos
+todo_include_todos = True
+
+# Generates auto-summary automatically
+autosummary_generate = True
+
+# Create numbers on figures with captions
+numfig = True
+
+# If we are on OSX, the 'dvipng' path maybe different
+dvipng_osx = '/opt/local/libexec/texlive/binaries/dvipng'
+if os.path.exists(dvipng_osx): pngmath_dvipng = dvipng_osx
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The encoding of source files.
+#source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'<PROJECT>'
+import time
+copyright = u'%s, Idiap Research Institute' % time.strftime('%Y')
+
+# Grab the setup entry
+distribution = pkg_resources.require(project)[0]
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = distribution.version
+# The full version, including alpha/beta/rc tags.
+release = distribution.version
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = ['links.rst']
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+# Some variables which are useful for generated material
+project_variable = project.replace('.', '_')
+short_description = u'<SHORT_DESCRIPTION>'
+owner = [u'Idiap Research Institute']
+
+
+# -- Options for HTML output ---------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+import sphinx_rtd_theme
+html_theme = 'sphinx_rtd_theme'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = project_variable
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+html_logo = 'img/logo.png'
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+html_favicon = 'img/favicon.ico'
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+#html_static_path = ['_static']
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_domain_indices = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
+#html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
+#html_show_copyright = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = None
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = project_variable + u'_doc'
+
+
+# -- Post configuration --------------------------------------------------------
+
+# Included after all input documents
+rst_epilog = """
+.. |project| replace:: Bob
+.. |version| replace:: %s
+.. |current-year| date:: %%Y
+""" % (version,)
+
+# Default processing flags for sphinx
+autoclass_content = 'class'
+autodoc_member_order = 'bysource'
+autodoc_default_flags = [
+  'members',
+  'undoc-members',
+  'inherited-members',
+  'show-inheritance',
+  ]
+
+# For inter-documentation mapping:
+from bob.extension.utils import link_documentation
+intersphinx_mapping = link_documentation()
+
+# We want to remove all private (i.e. _. or __.__) members
+# that are not in the list of accepted functions
+accepted_private_functions = ['__array__']
+
+def member_function_test(app, what, name, obj, skip, options):
+  # test if we have a private function
+  if len(name) > 1 and name[0] == '_':
+    # test if this private function should be allowed
+    if name not in accepted_private_functions:
+      # omit privat functions that are not in the list of accepted private functions
+      return skip
+    else:
+      # test if the method is documented
+      if not hasattr(obj, '__doc__') or not obj.__doc__:
+        return skip
+  return False
+
+def setup(app):
+  app.connect('autodoc-skip-member', member_function_test)
\ No newline at end of file
-- 
GitLab