]> git.donarmstrong.com Git - neurodebian.git/commitdiff
Merge remote branch 'neurolego/master'
authorYaroslav Halchenko <debian@onerussian.com>
Fri, 1 Oct 2010 16:18:47 +0000 (12:18 -0400)
committerYaroslav Halchenko <debian@onerussian.com>
Fri, 1 Oct 2010 16:18:47 +0000 (12:18 -0400)
* neurolego/master:
  NF: forgotten to commit -- generate .build logfiles

44 files changed:
artwork/icon.svg [new file with mode: 0644]
cmdsettings.sh [new file with mode: 0644]
debian/control
debian/neurodebian-desktop.install [new file with mode: 0644]
debian/neurodebian-dev.install [new file with mode: 0644]
debian/neurodebian-dev.manpages [new file with mode: 0644]
debian/neurodebian.install [deleted file]
debian/rules
debian/source/format [new file with mode: 0644]
neurodebian.cfg
sphinx/faq.rst
sphinx/index.rst
sphinx/vm-notes.txt
tools/backport-dsc [new file with mode: 0755]
tools/nd_adddist
tools/nd_backport
tools/nd_build
tools/nd_build4allnd
tools/nd_cmdsettings.sh [deleted file]
tools/nd_gitbuild
tools/nd_login
tools/nd_querycfg [new file with mode: 0755]
tools/nd_updateall
tools/nd_updatedist
tools/reblender [deleted file]
xdg/desktop/neurodebian-caret.desktop [new file with mode: 0644]
xdg/desktop/neurodebian-dcm2niigui.desktop [new file with mode: 0644]
xdg/desktop/neurodebian-devel-ml.desktop [new file with mode: 0644]
xdg/desktop/neurodebian-fsl-4.1.desktop [new file with mode: 0644]
xdg/desktop/neurodebian-fslview.desktop [new file with mode: 0644]
xdg/desktop/neurodebian-itksnap.desktop [new file with mode: 0644]
xdg/desktop/neurodebian-mricron.desktop [new file with mode: 0644]
xdg/desktop/neurodebian-mrtrix.desktop [new file with mode: 0644]
xdg/desktop/neurodebian-npm.desktop [new file with mode: 0644]
xdg/desktop/neurodebian-openelectrophy.desktop [new file with mode: 0644]
xdg/desktop/neurodebian-upstream-ml.desktop [new file with mode: 0644]
xdg/desktop/neurodebian-user-ml.desktop [new file with mode: 0644]
xdg/desktop/neurodebian-vbview2.desktop [new file with mode: 0644]
xdg/directories/neurodebian-electrophysiology.directory [new file with mode: 0644]
xdg/directories/neurodebian-imaging.directory [new file with mode: 0644]
xdg/directories/neurodebian-psychophysics.directory [new file with mode: 0644]
xdg/directories/neurodebian-support.directory [new file with mode: 0644]
xdg/directories/neurodebian.directory [new file with mode: 0644]
xdg/neurodebian.menu [new file with mode: 0644]

diff --git a/artwork/icon.svg b/artwork/icon.svg
new file mode 100644 (file)
index 0000000..e11bd9d
--- /dev/null
@@ -0,0 +1,217 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.0"
+   width="256"
+   height="256"
+   id="svg2"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="icon.svg">
+  <metadata
+     id="metadata2981">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1857"
+     inkscape:window-height="1179"
+     id="namedview2979"
+     showgrid="false"
+     inkscape:zoom="1.3575898"
+     inkscape:cx="149.9999"
+     inkscape:cy="118.16996"
+     inkscape:window-x="61"
+     inkscape:window-y="19"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2"
+     showguides="true"
+     inkscape:guide-bbox="true" />
+  <defs
+     id="defs4" />
+  <g
+     style="opacity:0.75319148"
+     id="g3504"
+     transform="matrix(2.3258198,-6.3905532e-4,6.3905532e-4,2.3258198,-1332.2742,-1113.7565)">
+    <path
+       id="path3402"
+       d="m 586.7443,568.51986 c -0.045,0.047 -0.045,7.506 -0.138,9.453 -0.092,1.574 -0.232,4.957 -3.568,4.957 -3.429,0 -4.263,-3.939 -4.541,-5.652 -0.324,-1.9 -0.324,-3.477 -0.324,-4.17 0,-2.225 0.139,-8.436 5.375,-8.436 1.576,0 2.456,0.465 3.151,0.834 l 0.045,3.014 z m -13.437,5.469 c 0,13.066 6.951,13.066 7.97,13.066 2.873,0 4.727,-1.576 5.514,-4.309 l 0.093,4.123 c 0.881,-0.047 1.761,-0.139 3.197,-0.139 0.51,0 0.926,0 1.298,0.047 0.371,0 0.741,0.045 1.158,0.092 -0.741,-1.482 -1.297,-4.818 -1.297,-12.049 0,-7.043 0,-18.951 0.602,-22.566 -1.667,0.789 -3.105,1.299 -6.256,1.576 1.251,1.344 1.251,2.039 1.251,8.154 -0.879,-0.277 -1.992,-0.602 -3.892,-0.602 -8.294,0.001 -9.638,7.23 -9.638,12.607" />
+    <path
+       id="path3404"
+       d="m 598.4373,571.62286 c 0.047,-3.846 0.835,-7.275 4.124,-7.275 3.615,0 3.891,3.984 3.799,7.275 l -7.923,0 z m 12.51,0.465 c 0,-5.422 -1.065,-10.752 -7.923,-10.752 -9.452,0 -9.452,10.475 -9.452,12.697 0,9.406 4.216,13.113 11.306,13.113 3.149,0 4.68,-0.461 5.514,-0.695 -0.046,-1.668 0.185,-2.734 0.465,-4.17 -0.975,0.604 -2.226,1.391 -5.006,1.391 -7.229,0 -7.322,-6.582 -7.322,-8.852 l 12.328,0 0.09,-2.732" />
+    <path
+       id="path3406"
+       d="m 626.0223,574.07986 c 0,4.309 -0.787,10.102 -6.162,10.102 -0.742,0 -1.668,-0.141 -2.27,-0.279 -0.093,-1.668 -0.093,-4.541 -0.093,-7.877 0,-3.986 0.416,-6.068 0.742,-7.09 0.972,-3.289 3.15,-3.334 3.566,-3.334 3.522,0 4.217,4.865 4.217,8.478 z m -13.298,5.051 c 0,3.43 0,5.375 -0.556,6.857 1.9,0.742 4.262,1.158 7.09,1.158 1.807,0 7.043,0 9.869,-5.791 1.344,-2.688 1.807,-6.303 1.807,-9.037 0,-1.668 -0.186,-5.328 -1.529,-7.646 -1.296,-2.176 -3.382,-3.289 -5.605,-3.289 -4.449,0 -5.746,3.707 -6.44,5.607 0,-2.363 0.045,-10.611 0.415,-14.828 -3.011,1.391 -4.866,1.621 -6.857,1.807 1.807,0.74 1.807,3.801 1.807,13.764 l 0,11.398" />
+    <path
+       id="path3408"
+       d="m 639.8423,586.86886 c -0.928,-0.139 -1.578,-0.232 -2.922,-0.232 -1.48,0 -2.502,0.094 -3.566,0.232 0.463,-0.881 0.648,-1.299 0.787,-4.309 0.186,-4.125 0.232,-15.154 -0.092,-17.471 -0.232,-1.762 -0.648,-2.039 -1.297,-2.502 3.799,-0.371 4.865,-0.648 6.625,-1.482 -0.369,2.037 -0.418,3.059 -0.418,6.162 -0.091,15.989 -0.138,17.702 0.883,19.602" />
+    <path
+       id="path3410"
+       d="m 654.6803,573.75386 c -0.092,2.92 -0.139,4.959 -0.928,6.58 -0.973,2.086 -2.594,2.688 -3.799,2.688 -2.783,0 -3.383,-2.316 -3.383,-4.586 0,-4.355 3.893,-4.682 5.652,-4.682 l 2.458,0 z m -12.744,5.701 c 0,2.92 0.881,5.838 3.477,7.09 1.158,0.51 2.316,0.51 2.688,0.51 4.264,0 5.699,-3.152 6.58,-5.098 -0.047,2.039 0,3.289 0.139,4.912 0.834,-0.047 1.668,-0.139 3.059,-0.139 0.787,0 1.529,0.092 2.316,0.139 -0.51,-0.787 -0.787,-1.252 -0.928,-3.059 -0.092,-1.76 -0.092,-3.521 -0.092,-5.977 l 0.047,-9.453 c 0,-3.523 -0.928,-6.998 -7.879,-6.998 -4.586,0 -7.273,1.391 -8.617,2.086 0.557,1.02 1.02,1.898 1.436,3.893 1.809,-1.576 4.172,-2.41 6.58,-2.41 3.848,0 3.848,2.549 3.848,6.162 -0.881,-0.045 -1.623,-0.137 -2.875,-0.137 -5.887,10e-4 -9.779,2.268 -9.779,8.479" />
+    <path
+       id="path3412"
+       d="m 681.3703,582.28186 c 0.047,1.576 0.047,3.244 0.695,4.588 -1.021,-0.092 -1.623,-0.232 -3.521,-0.232 -1.113,0 -1.715,0.094 -2.596,0.232 0.184,-0.602 0.279,-0.834 0.371,-1.623 0.139,-1.064 0.232,-4.633 0.232,-5.885 l 0,-5.004 c 0,-2.178 0,-5.33 -0.141,-6.441 -0.092,-0.787 -0.322,-2.918 -3.012,-2.918 -2.641,0 -3.521,1.945 -3.846,3.521 -0.369,1.621 -0.369,3.383 -0.369,10.24 0.045,5.932 0.045,6.486 0.508,8.109 -0.787,-0.092 -1.76,-0.184 -3.15,-0.184 -1.113,0 -1.854,0.045 -2.779,0.184 0.324,-0.742 0.51,-1.113 0.602,-3.707 0.094,-2.549 0.279,-15.061 -0.141,-18.025 -0.23,-1.809 -0.695,-2.225 -1.203,-2.688 3.754,-0.186 4.957,-0.789 6.117,-1.389 l 0,4.91 c 0.555,-1.438 1.713,-4.635 6.348,-4.635 5.793,0 5.838,4.217 5.885,6.996 l 0,13.951" />
+    <path
+       style="fill:#d70751"
+       id="path3414"
+       d="m 640.2333,554.54686 -3.838,3.836 -3.836,-3.836 3.836,-3.836 3.838,3.836" />
+  </g>
+  <g
+     id="layer3"
+     style="display:none"
+     transform="translate(0,-146.87399)">
+    <rect
+       width="548.07941"
+       height="31.793367"
+       rx="0.70528102"
+       ry="0.89940047"
+       x="11.388664"
+       y="365.11572"
+       id="rect3255"
+       style="fill:#000000;fill-opacity:0.05882353;fill-rule:nonzero;stroke:none" />
+    <rect
+       width="548.07941"
+       height="31.793367"
+       rx="0.70528102"
+       ry="0.89940047"
+       x="11.388723"
+       y="333.32236"
+       id="rect3257"
+       style="fill:#000000;fill-opacity:0.21568627;fill-rule:nonzero;stroke:none" />
+    <use
+       transform="translate(0,-63.586745)"
+       id="use3261"
+       x="0"
+       y="0"
+       width="570.47241"
+       height="402.87399"
+       xlink:href="#rect3255" />
+    <use
+       transform="translate(0,-63.58674)"
+       id="use3263"
+       x="0"
+       y="0"
+       width="570.47241"
+       height="402.87399"
+       xlink:href="#rect3257" />
+    <use
+       transform="translate(0,-63.58674)"
+       id="use3265"
+       x="0"
+       y="0"
+       width="570.47241"
+       height="402.87399"
+       xlink:href="#use3261" />
+    <use
+       transform="translate(0,-63.58674)"
+       id="use3267"
+       x="0"
+       y="0"
+       width="570.47241"
+       height="402.87399"
+       xlink:href="#use3263" />
+    <use
+       transform="translate(0,-63.586752)"
+       id="use3269"
+       x="0"
+       y="0"
+       width="570.47241"
+       height="402.87399"
+       xlink:href="#use3265" />
+    <use
+       transform="translate(0,-63.586734)"
+       id="use3271"
+       x="0"
+       y="0"
+       width="570.47241"
+       height="402.87399"
+       xlink:href="#use3267" />
+    <use
+       transform="translate(0,-63.586729)"
+       id="use3273"
+       x="0"
+       y="0"
+       width="570.47241"
+       height="402.87399"
+       xlink:href="#use3269" />
+    <use
+       transform="translate(0,-63.586729)"
+       id="use3275"
+       x="0"
+       y="0"
+       width="570.47241"
+       height="402.87399"
+       xlink:href="#use3271" />
+    <use
+       transform="translate(0,-63.586733)"
+       id="use3277"
+       x="0"
+       y="0"
+       width="570.47241"
+       height="402.87399"
+       xlink:href="#use3273" />
+    <use
+       transform="translate(0,-63.586737)"
+       id="use3279"
+       x="0"
+       y="0"
+       width="570.47241"
+       height="402.87399"
+       xlink:href="#use3275" />
+  </g>
+  <g
+     id="layer5"
+     style="display:none"
+     transform="translate(0,-146.87399)">
+    <path
+       d="M 144.4234,78.975388 C 266.02989,-77.854986 517.89394,31.598913 544.30928,206.19246 M 235.52123,47.182022 C 346.11429,-52.460919 514.87505,31.449949 544.30928,206.19246 M 332.17381,47.182022 C 422.50525,-23.52659 511.10143,30.082837 544.30928,206.19246 M 429.58867,66.478997 C 483.92989,13.647221 520.15812,42.230553 544.30928,206.19246"
+       id="path3525"
+       style="fill:none;stroke:#000000;stroke-width:2.65748024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       d="m 139.95489,62.706883 c -5.85467,2.570988 -7.09795,12.718367 -2.97518,22.983152 l -9.29976,4.083851 c -1.62417,0.713228 -2.35632,2.591831 -1.64308,4.216006 l 0.88109,2.006431 c 0.71323,1.62417 2.59184,2.356307 4.21601,1.643077 l 38.61807,-16.958534 c 1.62417,-0.713229 2.35631,-2.591833 1.64308,-4.216005 l -0.88109,-2.006431 c -0.71323,-1.62417 -2.59184,-2.356307 -4.21601,-1.643078 l -7.40014,3.249658 C 154.12984,66.083576 145.80956,60.135897 139.95489,62.706883 z"
+       id="path3514"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.77901149;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+    <path
+       d="m 232.97728,34.179007 c -6.25476,1.328559 -9.53269,11.012061 -7.58021,21.900167 l -9.93528,2.110333 c -1.73517,0.36856 -2.83354,2.059351 -2.46497,3.79452 l 0.45531,2.143545 c 0.36856,1.735162 2.05936,2.833521 3.79452,2.464959 l 41.25714,-8.763326 c 1.73516,-0.368561 2.83352,-2.059355 2.46496,-3.794519 l -0.4553,-2.143545 c -0.36857,-1.735162 -2.05937,-2.833521 -3.79453,-2.46496 l -7.90585,1.679261 C 246.17123,40.363753 239.23205,32.850451 232.97728,34.179007 z"
+       id="path3519"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.77901149;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+    <path
+       d="m 333.85888,26.48456 c -6.3721,-0.532394 -12.3043,7.793715 -13.57599,18.782155 l -10.12167,-0.845669 c -1.76772,-0.147698 -3.30717,1.154329 -3.45486,2.922052 l -0.18245,2.183759 c -0.1477,1.767713 1.15434,3.307158 2.92205,3.454851 l 42.03112,3.51174 c 1.76772,0.147694 3.30716,-1.15434 3.45486,-2.922055 l 0.18246,-2.183756 c 0.14768,-1.767716 -1.15436,-3.307161 -2.92207,-3.454855 l -8.05416,-0.672934 c 0.5694,-11.047125 -3.90718,-20.242889 -10.27929,-20.775288 z"
+       id="path3521"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.77901149;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+    <path
+       d="m 436.78602,52.620877 c -5.74315,-2.811278 -14.29516,2.790344 -19.47253,12.565713 l -9.12264,-4.46553 c -1.59323,-0.779895 -3.50056,-0.126207 -4.28044,1.467038 l -0.96344,1.968216 c -0.7799,1.593232 -0.1262,3.500553 1.46704,4.280441 l 37.88251,18.543527 c 1.59324,0.779892 3.50056,0.126194 4.28045,-1.46704 l 0.96345,-1.96821 c 0.77988,-1.593242 0.12617,-3.500563 -1.46706,-4.280452 l -7.25919,-3.553381 c 4.54441,-10.085216 3.71501,-20.279036 -2.02815,-23.090322 z"
+       id="path3523"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.77901149;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+    <path
+       d="m 544.30928,206.19246 c 11.2601,72.34335 23.16011,139.63781 -29.38309,159.0433 l -95.76795,31.92265"
+       id="path3538"
+       style="fill:none;stroke:#000000;stroke-width:2.65748024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  </g>
+  <path
+     d="m 131.57708,155.02684 c -6.65568,1.92166 -23.76224,8.99408 -30.15258,8.7809 l -2.881217,-2.57184 c -6.613649,-1.01982 -3.544564,1.16971 -8.73279,0.55397 -5.479387,-2.82907 -17.004785,-8.46999 -18.707187,-10.78205 -0.614222,-1.85026 3.027562,0.58738 4.161822,0.73828 -6.086013,-4.09802 -4.797819,3.53747 -10.217455,-3.71977 l 0.533204,-0.38585 c -16.503508,-11.54383 -1.866283,-38.77646 26.632829,-49.38031 -1.946472,0.2704 -1.61784,-0.23495 -2.525249,-0.47446 13.532363,-0.66539 9.197985,-2.63076 22.022503,-6.00259 6.27677,-2.07589 4.61142,-4.12724 6.56294,-4.71951 -7.29778,0.0115 -9.46705,-0.59487 -19.031838,2.80152 -28.313454,3.80129 -36.83205,15.74393 -45.198736,34.41264 -1.05476,2.86451 -1.962674,1.22996 -3.302519,1.91811 0.990958,-5.74624 3.566842,-11.43071 7.386868,-16.54146 -2.777418,2.90401 -5.4009,5.93968 -7.065326,9.42702 0.198496,-5.23583 9.695391,-14.57271 9.509555,-16.54197 -14.490171,12.6151 -18.628194,40.96755 -7.388387,52.41344 -2.450305,-5.99588 -5.102651,-13.72657 -4.558814,-21.29623 0.720053,-3.31366 2.946544,-8.11907 3.873701,-7.596 -1.506946,19.89715 0.993996,24.70357 21.314972,36.41987 5.067711,3.00984 12.820175,5.73105 13.351353,6.95342 -4.022572,-1.01931 -1.495299,0.72967 -4.96897,0.044 8.93483,2.00116 2.450812,-2.48625 14.453206,0.74689 l -2.717667,3.01136 c 5.966004,-2.38549 29.349472,-5.0991 38.961312,-8.35504 3.62457,0.91096 -12.70826,8.77431 -20.29768,8.76166 8.5986,0.50991 19.31179,-7.69829 25.90316,-8.68368 -1.89483,1.2249 -3.83927,2.70856 -5.93259,3.74407 6.87291,-3.50557 23.266,-5.59433 27.89014,-5.88549 0.12963,-0.90741 -4.18765,-1.64721 4.47121,-4.27271 3.84382,-0.91298 2.32625,0.38787 3.38354,0.46889 0.20558,-0.73727 2.54094,-3.13744 7.79905,-5.57053 1.58391,0.38737 -2.72273,2.81843 -2.55766,3.86003 4.23575,-1.77431 7.24813,-3.7385 10.66103,-4.65756 6.17109,-4.73756 -1.33377,-0.78284 1.88217,-4.16587 10.34961,-6.00449 3.58304,1.88469 8.92571,0.94589 -6.38224,6.72809 -17.93194,12.57509 -22.669,15.1206 5.97917,-2.54196 11.5568,-5.60801 16.81237,-8.96015 -0.20305,1.60771 12.16696,-5.59484 4.58109,0.85677 17.75826,-9.34195 55.51623,-18.0165 59.19752,-33.50573 -1.18946,2.07813 -2.67716,4.70313 -3.2929,4.05701 2.30599,-7.82842 3.09643,-6.75695 4.73756,-8.21174 0.67346,-6.06171 -2.28675,-5.7027 -3.36329,-9.32625 2.76426,-11.81909 -2.24956,-16.92985 -1.6004,-27.32504 l -2.22041,1.02995 c 0.24609,-7.42535 -3.83826,-7.60359 -5.45913,-15.14693 0.25014,-0.54637 2.33485,1.95711 3.55165,4.14714 -3.37341,-6.26223 -0.70588,-6.60808 -4.81757,-12.529012 1.87811,1.237052 3.35012,2.682722 5.06822,4.075742 -2.2989,-5.219119 -8.25529,-11.762889 -4.43172,-10.248349 -7.73119,-7.50282 -19.74473,-21.26636 -32.50616,-27.46023 l 2.06445,-0.82082 C 203.5884,22.655623 187.5523,12.198658 179.83477,13.003274 l -0.67448,-0.986401 C 174.26525,11.014774 169.07804,10.874511 164.21844,10.326117 157.77899,9.021718 160.68907,6.909159 159.96953,7.511734 145.26618,5.460952 133.56709,5.554629 123.9274,5.523741 120.72077,8.480964 106.57829,9.977737 95.210886,13.534452 37.01373,25.425501 -0.1784754,59.149548 1.626439,112.18433 c 2.0288948,7.6756 12.406173,13.67327 18.455449,18.63371 -5.304335,-7.94806 -2.055749,-4.60862 -8.150989,-11.75264 -3.6026675,-5.48003 -2.8891575,-7.81438 0.0275,-13.2882 l -2.9905975,2.63311 c 0.52105,-9.40879 2.6508255,-6.0683 2.7662775,-13.64657 1.168185,0.36965 2.336372,0.7398 3.504558,1.10996 -0.74132,-2.81945 -2.168765,-8.7014 0.312934,-10.68686 l -1.227937,-2.97946 c 4.007381,-4.96947 5.123411,-10.91421 8.147429,-11.52742 l -2.417897,-0.44813 c 1.85735,-1.67608 15.146927,-18.393749 13.31135,-11.006882 0.852214,-1.502387 1.093751,-3.273147 4.157265,-5.904737 l 2.217377,0.84462 c 3.575451,-4.23373 8.638605,-8.32415 10.704072,-8.63455 -2.02749,2.2913 -2.111547,3.54456 -2.157119,4.77756 19.972596,-13.48706 -1.67911,-8.45631 18.123853,-19.85562 0.186849,0.40053 0.373193,0.80107 0.560041,1.2016 1.362631,-1.3763 2.990597,-2.42144 4.525899,-3.63976 2.186995,-0.35952 4.373484,-0.71954 6.560479,-1.07957 5.626739,-7.482064 34.383077,-5.34725 48.282827,-8.004153 5.73156,-0.856265 13.0926,1.724177 23.44931,2.472079 l -0.29471,-1.984448 c 8.789,1.705947 37.50704,12.958922 39.18362,21.129642 7.07342,2.36473 -0.25116,-0.76461 0.91196,-1.87507 13.33414,5.75637 11.25399,9.16016 15.14794,14.3418 6.4982,4.99986 -3.56684,-4.80491 0.79702,-2.76071 6.99697,9.728817 9.97187,5.61712 16.54653,18.954299 -0.45827,1.70088 -2.72679,-2.97895 -4.43526,-3.86358 8.27604,7.47954 18.48296,31.31581 16.14558,45.39278 -2.8154,16.34803 -46.36905,26.81553 -68.29825,33.08535 l 0.0289,0.78183 c -8.94141,1.87457 -38.84536,16.09029 -49.13776,15.86749"
+     id="path2490"
+     style="fill:#d70751" />
+</svg>
diff --git a/cmdsettings.sh b/cmdsettings.sh
new file mode 100644 (file)
index 0000000..90b78ad
--- /dev/null
@@ -0,0 +1,24 @@
+family=$1
+dist=$2
+
+# basic settings
+cowbuilderroot="/home/neurodebian"
+buildplace="${cowbuilderroot}/build"
+
+# all cuurently supported dists
+alldists="nd+debian-lenny nd+debian-squeeze nd+debian-sid \
+          nd+ubuntu-maverick nd+ubuntu-lucid nd+ubuntu-karmic nd+ubuntu-jaunty"
+
+# default is debian
+aptcache="${cowbuilderroot}/debian_aptcache"
+components="main contrib non-free"
+mirror="http://debian.lcs.mit.edu/debian"
+
+# overwrite necessary bits for ubuntu
+if [ "${family#nd+}" = "ubuntu" ]; then
+  aptcache="${cowbuilderroot}/ubuntu_aptcache"
+  components="main universe"
+  mirror="http://ubuntu.media.mit.edu/ubuntu"
+fi
+
+if [ ! -d $aptcache ]; then mkdir $aptcache; fi
index 628b10a63ca8b1c934a4ee5e4000f9f1f262b37b..04fdf4621e92be5c11baf3867221cf3a86b3302e 100644 (file)
@@ -3,8 +3,8 @@ Section: science
 Priority: optional
 Maintainer: NeuroDebian Team <team@neuro.debian.net>
 Uploaders: Michael Hanke <michael.hanke@gmail.com>, Yaroslav Halchenko <debian@onerussian.com>
-Build-Depends: debhelper (>= 7.0.50~)
-Standards-Version: 3.9.0
+Build-Depends: debhelper (>= 7.0.50~), xcftools, help2man, inkscape
+Standards-Version: 3.9.1
 Homepage: http://neuro.debian.net
 Vcs-Browser: http://git.debian.org/?p=pkg-exppsy/neurodebian.git
 Vcs-Git: git://git.debian.org/git/pkg-exppsy/neurodebian.git
@@ -21,7 +21,25 @@ Description: neuroscience research environment
 
 Package: neurodebian-dev
 Architecture: all
-Depends: ${misc:Depends}
+Depends: ${misc:Depends}, devscripts, cowbuilder, python
 Suggests:
 Description: NeuroDebian development tools
  Pacifier
+
+
+Package: neurodebian-desktop
+Architecture: all
+Depends: ${misc:Depends}
+Suggests:
+Description: neuroscience research environment
+ Pacifier
+
+
+Package: neurodebian-trailer
+Architecture: all
+Depends: ${misc:Depends}
+Suggests:
+Description: neuroscience research environment
+ Pacifier
+
+
diff --git a/debian/neurodebian-desktop.install b/debian/neurodebian-desktop.install
new file mode 100644 (file)
index 0000000..d96d0a2
--- /dev/null
@@ -0,0 +1,5 @@
+build/wallpaper/neurodebian.png usr/share/backgrounds
+build/icons/* usr/share/pixmaps
+xdg/neurodebian.menu etc/xdg/menus/applications-merged
+xdg/directories/* usr/share/desktop-directories
+xdg/desktop/* usr/share/applications
diff --git a/debian/neurodebian-dev.install b/debian/neurodebian-dev.install
new file mode 100644 (file)
index 0000000..c2890c4
--- /dev/null
@@ -0,0 +1,6 @@
+tools/backport-dsc usr/bin/
+tools/nd_* usr/bin/
+neurodebian.cfg /etc/neurodebian/
+cmdsettings.sh /etc/neurodebian/
+pkgs usr/share/neurodebian/
+sphinx usr/share/neurodebian/
diff --git a/debian/neurodebian-dev.manpages b/debian/neurodebian-dev.manpages
new file mode 100644 (file)
index 0000000..b19f8c8
--- /dev/null
@@ -0,0 +1 @@
+build/man/*
diff --git a/debian/neurodebian.install b/debian/neurodebian.install
deleted file mode 100644 (file)
index d0e1a8f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-build/wallpaper/neurodebian.png usr/share/backgrounds
index 5653723f927ae6aa114834453ef78bfb44ad9c6f..15684c56a33a71c5215e94fe6c88220eef41834e 100755 (executable)
@@ -10,6 +10,13 @@ override_dh_auto_build::
        # wallpaper
        [ ! -d build/wallpaper ] && mkdir -p build/wallpaper
        xcf2png -o build/wallpaper/neurodebian.png artwork/wallpaper_hotbrain.xcf
+       # icons
+       [ ! -d build/icons ] && mkdir -p build/icons
+       inkscape artwork/icon.svg -w 32 -h 32 -e build/icons/neurodebian.png
+       # manpages
+       [ ! -d build/man ] && mkdir -p build/man
+       help2man -h '--verbose-help' --no-info tools/backport-dsc \
+               -n "backport Debian source packages" > build/man/backport-dsc.1
 
 override_dh_auto_install::
 
diff --git a/debian/source/format b/debian/source/format
new file mode 100644 (file)
index 0000000..89ae9db
--- /dev/null
@@ -0,0 +1 @@
+3.0 (native)
index 5c785da6702db74386738782382ebe0a60233512..0e74ec1ec9791e45ea2268ae821a2ca61c3e438d 100644 (file)
@@ -31,11 +31,13 @@ fslview = fslview fslview-doc
 python-mvpa = python-mvpa python-mvpa-snapshot
 libgiftiio-dev = libgiftiio-dev gifti-bin
 openmeeg-tools = openmeeg-tools libopenmeeg-dev python-openmeeg libopenmeeg1
+libbiosig-dev = libbiosig-dev python-biosig octave-biosig biosig-tools libbiosig0
 
 [mirrors]
+de = http://apsy.gse.uni-magdeburg.de/debian
+gr = http://neurobot.bio.auth.gr/neurodebian
 us-nh = http://neuro.debian.net/debian
 us-tn = http://masi.vuse.vanderbilt.edu/neurodebian
-de = http://apsy.gse.uni-magdeburg.de/debian
 
 [neurodebian]
 # Release files of all repositories to be contained in the website
@@ -67,9 +69,26 @@ hardy = Ubuntu 08.04 LTS "Hardy Heron" (hardy)
 intrepid = Ubuntu 08.10 "Intrepid Ibex" (intrepid)
 jaunty = Ubuntu 09.04 "Jaunty Jackalope" (jaunty)
 karmic = Ubuntu 09.10 "Karmic Koala" (karmic)
-lucid = Ubuntu 10.4 LTS "Lucid Lynx" (lucid)
+lucid = Ubuntu 10.04 LTS "Lucid Lynx" (lucid)
 maverick = Ubuntu upcoming release "Maverick Meerkat" (maverick)
 
+[release backport ids]
+# the purpose of these ids is to have version suffixes for backported packages
+# that allow proper sorting (upgradability) across distribution releases
+# For Debian we'll use ndXX (where XX is the version of the Debian release,
+# e.g. 50; analog to backports.org) and for Ubuntu we'll use ndXX.XX.
+etch = nd40
+lenny = nd50
+squeeze = nd60
+wheezy = nd70
+sid = nd
+hardy = nd08.04
+intrepid = nd08.10
+jaunty = nd09.04
+karmic = nd09.10
+lucid = nd10.04
+maverick = nd10.10
+
 [nitrc ids]
 afni = 23
 ants = 130
index d2427dcadf7cb62f74f69721ea648b0aa982e5ee..a30be4d891bdd0963abb813364619b6e526dd35a 100644 (file)
@@ -107,12 +107,31 @@ How to create a mirror of the repository?
 How do I get a new neuroscience-related FOSS into (Neuro)Debian?
 ----------------------------------------------------------------
 
-  * You can approach packaging it yourself (file an ITP_ (Intent to package)
-    bugreport) and `ask us <team@neuro.debian.net>`_ to mentor your upload to
-    Debian_ if you are not a Debian developer.
-
-  * `Contact us <team@neuro.debian.net>`_, but then it might take longer
-    depending on our workload and interest to the particular software.
+The goal of NeuroDebian is to package neuroscience software for Debian. Hence
+getting software into NeuroDebian means trying to get it into Debian. There are
+at least two possibilities to achieve that:
+
+* You can approach packaging it yourself. Start by filing an ITP_ (Intent to
+  package) bugreport) and `ask us <team@neuro.debian.net>`_ to mentor your
+  upload to Debian_, if you are not a Debian developer.
+
+* `Contact us <team@neuro.debian.net>`_ -- but then it might take a little
+  longer, depending on our current workload and interest in a particular
+  software.
+
+
+I have heard that some packages are non-free. Will you charge me for them?
+--------------------------------------------------------------------------
+
+  No. The term :term:`non-free` refers to an archive section. NeuroDebian uses
+  exactly the same :ref:`archive sections as Debian proper
+  <http://www.debian.org/doc/debian-policy/ch-archive.html>`.  The *non-free*
+  section contains packages that have certain restrictions regarding **your
+  freedom** to employ them for a particular purpose. In contrast, for packages
+  in the *main* section your are completely free to do whatever and in whatever
+  context you like. Regardless of the actual license or archive section, all
+  packages in NeuroDebian are provided free of charge and under the licensing
+  terms of the original developers.
 
 
 .. include:: links_names.rst
index 8c55c78e3fe488007a6cc2e6e0fbe0aa7efec840..9fe3453ace34ff9775fba83cbc7abaafd5c3269f 100644 (file)
@@ -13,7 +13,7 @@ this project.
 
 This service is provided "as is". There is no guarantee that a package
 works as expected, so use them at your own risk. If you encounter problems,
-please `report <#contact>`_ them.
+please `report <#contacts>`_ them.
 
 Please |spread|, if you like it.
 
@@ -88,16 +88,21 @@ releases and repository mirrors:
 .. include:: sources_lists
 
 .. note::
-  Thanks to the `Department of Psychological and Brain Sciences at
-  Dartmouth College`_ `[us-nh]` (primary mirror), the `Department of
-  Experimental Psychology at the University of Magdeburg`_ `[de]`, and
-  the `Medical-image Analysis and Statistical Interpretation lab at
-  Vanderbilt`_ `[us-tn]` for hosting a mirror.
+  Thanks to the following institutions and individuals for hosting a mirror:
+
+  * `Department of Psychological and Brain Sciences at Dartmouth College`_
+    `[us-nh]` (primary mirror)
+  * `Department of Experimental Psychology at the University of Magdeburg`_
+    `[de]`
+  * `Neurobot at Aristotle University of Thessaloniki, Greece`_ `[gr]`
+  * `Medical-image Analysis and Statistical Interpretation lab at Vanderbilt`_
+    `[us-tn]`
 
   If your are interested in mirroring the repository, please see the :ref:`faq`.
 
-.. _Department of Experimental Psychology at the University of Magdeburg: http://apsy.gse.uni-magdeburg.de
 .. _Department of Psychological and Brain Sciences at Dartmouth College: http://www.dartmouth.edu/~psych
+.. _Department of Experimental Psychology at the University of Magdeburg: http://apsy.gse.uni-magdeburg.de
+.. _Neurobot at Aristotle University of Thessaloniki, Greece: http://neurobot.bio.auth.gr
 .. _Medical-image Analysis and Statistical Interpretation lab at Vanderbilt: https://masi.vuse.vanderbilt.edu
 
 Once this is done, you have to update the package index. Use your favorite
@@ -202,11 +207,28 @@ for all their work.
 .. _FOSS: http://en.wikipedia.org/wiki/Free_and_open_source_software
 
 
-Contact
-=======
+Contacts
+========
+
+`Email us directly <team@neuro.debian.net>`_ with any "private"
+communication.  Otherwise please use our public mailing lists, which
+exist not only to provide user-support but also to establish
+communication channels within the NeuroDebian community
+
+* neurodebian-users_: Discussions and support of NeuroDebian users
+
+* neurodebian-upstream_: General discussions and knowledge sharing
+  among developers of the neuroscience software.  We will also use it
+  to update you with summaries of recent relevant developments in
+  Debian project
+
+* neurodebian-devel_: Technical mailing list for discussions on
+  NeuroDebian development
+
+.. _neurodebian-users: http://lists.alioth.debian.org/mailman/listinfo/neurodebian-users
+.. _neurodebian-devel: http://lists.alioth.debian.org/mailman/listinfo/neurodebian-devel
+.. _neurodebian-upstream: http://lists.alioth.debian.org/mailman/listinfo/neurodebian-upstream
 
-`Email us <team@neuro.debian.net>`_ if you have any suggestions or want to
-report a problem.
 
 .. toctree::
    :hidden:
index 57972172b59b966231c31d84796ee936e6a2ec7b..cc0e4ff4dd3e522a5b1ea35ed73b8dba2dbfd471 100644 (file)
@@ -54,7 +54,7 @@ etckeeper init
 aptitude install module-assistant
 module-assistant prepare
 # note guest additions for 3.1.2 are broken, use 3.1.0
-bash /media/cdrom/VBoxLinuxAdditions-amd64.run (need 2.6.27+ kernel for direct rendering)
+bash /media/cdrom/VBoxLinuxAdditions-x86.run (need 2.6.27+ kernel for direct rendering)
 #make sure that xorg.conf has 'vboxvideo' as device driver and also
 echo "vboxvideo" >> /etc/modules
 
diff --git a/tools/backport-dsc b/tools/backport-dsc
new file mode 100755 (executable)
index 0000000..eb757fc
--- /dev/null
@@ -0,0 +1,370 @@
+#!/bin/bash
+
+# play save
+set -e
+set -u
+
+# version of this script
+backports_dsc_version=0.1
+
+############
+# Defaults #
+############
+
+bp_distribution=${BACKPORT_DISTRIBUTION:-lenny-backports}
+bp_version_suffix=${BACKPORT_VERSION_SUFFIX:-bpo50}
+bp_maintainer_name=${DEBFULLNAME:-unamed}
+bp_maintainer_email=${DEBEMAIL:-unknown}
+bp_update_maintainer=1
+# whether or not to apply backport patches found in a package
+bp_apply_patches=1
+# produce fancy colored output
+bp_color_output=1
+# enables additional status message if set to true
+bp_verbose=0
+# sed expressions to modify debian/control
+bp_mod_control=""
+
+
+# source config files
+if [ -f /etc/backport-dsc ]; then
+    . /etc/backport-dsc
+fi
+
+# source user config files
+if [ -f "$HOME/.backport-dsc" ]; then
+    . $HOME/.backport-dsc
+fi
+
+
+print_version()
+{
+cat << EOT
+backport-dsc $backports_dsc_version
+
+Copyright (C) 2010 Michael Hanke <michael.hanke@gmail.com>
+
+Licensed under GNU Public License version 2 or later.
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+Written by Michael Hanke for the NeuroDebian project.
+
+EOT
+}
+
+
+print_short_description()
+{
+cat << EOT
+Helper to aid backporting a Debian source package to an arbitrary distribution
+release.
+
+backport-dsc aids backporting by appropriately mangling the source package
+version, adjusting the maintainer of a package and compiling an informative
+changelog entry. Moreover, it supports distribution specific patches (plain, or
+for format 3.0 (quilt) source packages) and allow modification of debian/control
+via arbitrary 'sed' expressions.
+
+Backport relevant patches can be embedded in source packages for use with
+backport-dsc. The distribution name (see --target-distribution) serves as an
+identifier to search for patches in the source package that shall be applied
+for a particular distribution. For packages using format the 3.0 (quilt),
+backport-dsc will look for debian/patches/series-<distname> and append it to
+the main patch series. Moreover, backport-dsc will also look for patches
+matching /debian/patches/<distname>-dsc-patch* and apply them to the source
+package. The latter patches, unlike the former quilt series, can also be used
+to modify the debian/ directory itself.
+
+EOT
+}
+
+
+print_help()
+{
+cat << EOT
+
+Usage:  backport-dsc [OPTIONS] <dsc-file>
+
+
+Options:
+
+-d <distname>, --target-distribution <distname>
+  Arbitrary distribution name (e.g. lenny-backports). This will be the target
+  distribution used for the backport changelog entry. The distribution name
+  also serves as an identifier to search for backport patches in the source
+  package.
+
+-h, --help
+  Print short description, usage summary and option list.
+
+--maint-email <email>
+  Specify the backport maintainer's email address. Alternatively, backport-dsc
+  will use the DEBEMAIL environment setting.
+
+--maint-name <name>
+  Specify the backport maintainer's real name. Alternatively, backport-dsc will
+  use the DEBFULLNAME environment setting.
+
+--mod-control <expression>
+  sed expression to modify debian/control. The option can be given multiple
+  times and all expressions will be passed to sed in the order of appearance.
+  This can be used to, e.g. change build or runtime dependencies.
+
+--no-backport-patches
+  If set, potentially existing backport patches will not be applied/activated.
+
+--no-colored
+  If set, backport-dsc won't colorize its status and error messages.
+
+--no-maintainer-update
+  If set, the orginal maintainer is preserved in the backported source package.
+  This should only be done if original maintainer and backporter are identical.
+  Otherwise the porter should take responsibility for the source package
+  backport and identify herself as the maintainer.
+
+-s <string>, --version-suffix <string>
+  Version suffix that will be appended to the original source package version,
+  ideally indicating the backport target distribution. The resulting package
+  version will follow this schema:
+
+  <originalversion>~<suffix>+<digit>
+
+  e.g.: 1.2.3-4~bpo50+1
+
+--verbose
+  Enable additional status messages.
+
+--verbose-help
+  Print all available help.
+
+--version
+  Print version information and exit.
+
+EOT
+}
+
+
+print_additional_description()
+{
+cat << EOT
+
+Examples:
+
+backport-dsc examplepkg_1.2.3-4.dsc
+  Create backport suitable for backports.org
+
+backport-dsc -d myown-backports -v mo2010 examplepkg_1.2.3-4.dsc
+  Create backport for some custom distribution with custom version suffix.
+
+backport-dsc -d ubuntu-lucid -v myppa --mod-control "-e 's/iceweasel/firefox/g'" examplepkg_1.2.3-4.dsc
+  Create a backport for a fake Ubuntu PPA repository, replacing all occurrences
+  of iceweasel in debian/control with firefox.
+
+
+Files:
+
+backport-dsc reads configuration from two files: system-wide from
+/etc/backports-dsc and per user settings from \$HOME/.backport-dsc
+(in that order). Both files have to be valid bash scripts that will
+be sourced by backport-dsc. The following variables (each shown with an
+example setting) can be used to pre-configure backport-dsc:
+
+bp_distribution="lenny-backports"
+  Backport target distribution (see --backport-distribution)
+
+bp_version_suffix="bpo50"
+  Version suffix (see --version-suffix)
+
+bp_maintainer_name="Unknown fellow"
+  Name of the backport maintainer (see --maint-name)
+
+bp_maintainer_email="user@example.net"
+  Email address of backport maintainer (see --maint-email)
+
+bp_apply_patches=1
+  Whether or not to apply backport patches found in a source package.
+  (see --no-backport-patches)
+
+bp_color_output=1
+  Enable or disable colored status output (see --no-color)
+
+bp_verbose=0
+  Enable verbose status output (see --verbose)
+
+bp_mod_control="--mod-control 's/^Depends:.*$/&, mypackage/'"
+  sed expressions to modify debian/control, for example to add dependencies
+  (see --mod-control)
+
+bp_update_maintainer=1
+  Whether or not to replace the original maintainer in the backported source
+  package (see --no-maintainer-update)
+
+
+Environment:
+
+backport-dsc acknowledges the common environment variables DEBFULLNAME and
+DEBEMAIL to specify the maintainer.
+
+
+
+Report bugs to <michael.hanke@gmail.com>.
+
+EOT
+}
+
+
+
+################################
+# Commandline options handling #
+################################
+
+# Parse commandline options (taken from the getopt examples from the Debian util-linux package)
+# Note that we use `"$@"' to let each command-line parameter expand to a
+# separate word. The quotes around `$@' are essential!
+# We need CLOPTS as the `eval set --' would nuke the return value of getopt.
+CLOPTS=`getopt -o h,d:,s: --long help,verbose-help,version,target-distribution:,version-suffix:,maint-name:,maint-email:,no-color,no-backport-patches,verbose,mod-control:,no-maintainer-update, -n 'backport-dsc' -- "$@"`
+
+if [ $? != 0 ] ; then
+  echo "Terminating..." >&2
+  exit 1
+fi
+
+# Note the quotes around `$CLOPTS': they are essential!
+eval set -- "$CLOPTS"
+
+while true ; do
+  case "$1" in
+         -d|--target-distribution) shift; bp_distribution=$1; shift;;
+         -s|--version-suffix) shift; bp_version_suffix=$1; shift;;
+         --maint-name) shift; bp_maintainer_name=$1; shift;;
+         --maint-email) shift; bp_maintainer_email=$1; shift;;
+         --no-maintainer-update) bp_update_maintainer=0; shift;;
+         --no-backport-patches) apply_patches=0; shift;;
+         --no-color) bp_color_output=0; shift;;
+         --verbose) bp_verbose=1; shift;;
+         --mod-control) shift; bp_mod_control="$bp_mod_control -e '$1'"; shift;;
+         -h|--help) print_short_description; print_help; exit 0;;
+         --verbose-help) print_short_description; print_help; print_additional_description; exit 0;;
+         --version) print_version; exit 0;;
+         --) shift ; break ;;
+         *) echo "Internal error! ($1)"; exit 1;;
+  esac
+done
+
+# colorful output requested?
+if [ "$bp_color_output" = 1 ]; then
+  black='\e[0;30m'; Black='\e[1;30m'
+  red='\e[0;31m'; Red='\e[1;31m'
+  green='\e[0;32m'; Green='\e[1;32m'
+  yellow='\e[0;33m'; Yellow='\e[1;33m'
+  blue='\e[0;34m'; Blue='\e[1;34m'
+  cyan='\e[0;36m'; Cyan='\e[1;36m'
+  white='\e[0;37m'; White='\e[1;37m'
+  NC='\e[0m' #no color
+else
+  black=''; Black=''
+  red=''; Red=''
+  green=''; Green=''
+  yellow=''; Yellow=''
+  blue=''; Blue=''
+  cyan=''; Cyan=''
+  white=''; White=''
+  NC='' #no color
+fi
+
+
+if [ $# -ne 1 ]; then
+  printf "${Red}Error: This command needs exactly one positional argument.\n${NC}"
+  exit 1
+fi
+
+# to be processed source package
+dsc_file=$1
+
+if [ ! -f "$dsc_file" ]; then
+  printf "${Red}Error: Cannot find DSC file at '$dsc_file'.\n${NC}"
+  exit 1
+fi
+
+# determine basic DSC properties
+src_name=$(basename "${dsc_file%%_*}")
+src_version=${dsc_file#*_}
+src_version=${src_version%%.dsc}
+
+wdir=$(mktemp -d -t backport-dsc.XXXXXX)
+sdir=$wdir/${src_name}-${src_version}
+
+bp_version="~${bp_version_suffix}+"
+
+
+# setup environment for dpkg
+DEBEMAIL="$bp_maintainer_email"
+DEBFULLNAME="$bp_maintainer_name"
+export DEBEMAIL DEBFULLNAME
+
+if [ "$bp_verbose" = 1 ]; then
+  printf "${green}DSC name: '$src_name'\nDSC version: '$src_version'\n${NC}"
+  printf "${green}Backporting to '$bp_distribution', version suffix '$bp_version'\n${NC}"
+  printf "${green}Extracting source package to '$sdir'\n${NC}"
+fi
+
+# common debchange call
+bp_dch_cmd="dch --noconf --force-distribution --force-bad-version -c $sdir/debian/changelog"
+
+# extract the original source package
+dpkg-source -x $dsc_file $sdir
+# note backport in changelog
+$bp_dch_cmd -D ${bp_distribution} -l "${bp_version}" "Backported for ${bp_distribution}."
+
+if [ "$bp_update_maintainer" = 1 ]; then
+  if [ "$bp_verbose" = 1 ]; then
+    printf "${green}Set backport maintainer to: '$bp_maintainer_name <$bp_maintainer_email>'\n${NC}"
+  fi
+  bp_mod_control="$bp_mod_control -e 's/^Maintainer:.*$/Maintainer: $bp_maintainer_name <$bp_maintainer_email>\nX-Original-&/'"
+fi
+
+# handle patches if desired
+if [ "$bp_apply_patches" = 1 ]; then
+  dsc_format=$(dpkg-source --print-format $sdir)
+  # per each supported source package format
+  if [ "$dsc_format" = "3.0 (quilt)" -a -f "$sdir/debian/patches/series-$bp_distribution" ]; then
+    if [ "$bp_verbose" = 1 ]; then
+      printf "${green}Enabling additional quilt patch series for $bp_distribution.\n${NC}"
+    fi
+    cat $sdir/debian/patches/series-$bp_distribution >> $sdir/debian/patches/series
+    $bp_dch_cmd "Added 'series-$bp_distribution' in quilt patch series."
+  fi
+  # look for backport patches
+  for p in $(ls -1 $sdir/debian/patches/$bp_distribution-dsc-patch* 2> /dev/null || true); do
+    if [ "$bp_verbose" = 1 ]; then
+      printf "${green}Applying additional patch $(basename "$p").\n${NC}"
+    fi
+    patch -p1 --directory=$sdir < "$p"
+    $bp_dch_cmd "Applied additional patch from debian/patches/$(basename "$p")."
+  done
+fi
+
+# modify control file
+if [ -n "$bp_mod_control" ]; then
+  if [ "$bp_verbose" = 1 ]; then
+    printf "${green}Modifying debian/control with given instructions.\n${NC}"
+  fi
+  bash -c "sed -i $bp_mod_control $sdir/debian/control"
+  $bp_dch_cmd "Used following sed expression to modify debian/control:$bp_mod_control."
+fi
+
+# extract final version
+final_version=$(dpkg-parsechangelog -l$sdir/debian/changelog | egrep '^Version: ' | cut -d ' ' -f 2,2)
+# build backported source package
+bash -c "cd $wdir && dpkg-source -b $sdir"
+# remove extracted source tree
+rm -rf $sdir
+# move generated source package into working dir
+mv $wdir/* .
+# cleanup
+rm -rf $wdir
+
+if [ "$bp_verbose" = 1 ]; then
+  printf "${green}Backported source package is at '${src_name}_$final_version.dsc'\n${NC}"
+fi
index 0d9ab920d495652de5cdb6f2ddd6ff48022cd49d..065173d98c6e115752d4539d2750baa9e75b3b41 100755 (executable)
@@ -16,7 +16,7 @@ if [ -z "$dist" ]; then
 fi
 
 
-. /home/neurodebian/neurodebian.git/tools/nd_cmdsettings.sh
+. /etc/neurodebian/cmdsettings.sh
 
 # common options
 opts="--distribution $dist --debootstrap debootstrap --aptcache $aptcache"
index 3392d6504300d83bdce31384b149b8ef1dcc6fc9..19b49541c4250dd894c62e13aac0b2497e8334d7 100755 (executable)
@@ -1,19 +1,19 @@
 #!/bin/bash
+#
+# Simple frontend for backport-dsc to do it the NeuroDebian way
+#
+
+set -e
+set -u
 
 release=$1
 dscfile=$2
 
-set -e
-
 if [ -z "$release" ]; then
   echo "You need to provide a distribution codename (e.g. 'lenny', 'squeeze')."
   exit 1
 fi
 
-
-set -e
-set -u
-
 if [ -z "$2" ]; then
 cat << EOT
 Script to backport a source package to some target release.
@@ -27,41 +27,13 @@ EOT
 exit 1
 fi
 
-. /home/neurodebian/neurodebian.git/tools/nd_cmdsettings.sh
-
-DEBEMAIL="team@neuro.debian.net"
-DEBFULLNAME="NeuroDebian Maintainers"
-export DEBEMAIL DEBFULLNAME
-
-srcname=${dscfile%%_*}
-srcversion=${dscfile#*_}
-srcversion=${srcversion%%.dsc}
-wdir=$(mktemp -d -t nd_backport.XXXXXX)
-sdir=$wdir/${srcname}-${srcversion}
-
-echo "Source package name: $srcname"
-echo "Source package version: $srcversion"
-echo "Extracting source package to: $sdir"
-
-dpkg-source -x $dscfile $sdir
-
-echo "Backporting to: $release"
-
-changelog_entry="Backport of Debian package version $srcversion for \
-NeuroDebian. Problems with the backport should be reported to the
-NeuroDebian maintainers and not to the original Debian maintainer."
-
-echo | debchange \
-         --noconf --force-bad-version \
-         -c $sdir/debian/changelog \
-         -D ${release} \
-         -b -l "~${release}.nd" \
-         $changelog_entry
-
-bpversion=$(dpkg-parsechangelog -l$sdir/debian/changelog | egrep '^Version: ' | cut -d ' ' -f 2,2)
-dpkg-source -b $sdir
-
-# cleanup
-rm -rf $wdir
+# assemble an appropriate backport-dsc call
+backport-dsc \
+       --maint-name "NeuroDebian Maintainers" \
+       --maint-email "team@neuro.debian.net" \
+       --target-distribution "$release" \
+       --version-suffix "$(nd_querycfg "release backport ids" "$release")" \
+       "$dscfile"
 
-echo ${srcname}_$bpversion.dsc
+# not adding the auto-dep for now
+#      --mod-control 's/^Depends:.*$/&, neurodebian-trailer/' \
index be8456d36337015c900b5f796fdbe7e29b775246..ca50a6c1270361978e60c483b22295a37fd80c81 100755 (executable)
@@ -46,7 +46,7 @@ if [ -z "$dist" ]; then
   exit 1
 fi
 
-. /home/neurodebian/neurodebian.git/tools/nd_cmdsettings.sh
+. /etc/neurodebian/cmdsettings.sh
 
 # common options
 opts="--distribution $dist --aptcache $aptcache --buildplace $buildplace"
index 7edfe35b8d67f6553479f20407498db388630305..6344490b76aca2bb5689d50ca20d353d9b1c4c7b 100755 (executable)
@@ -15,12 +15,12 @@ fi
 
 
 
-. /home/neurodebian/neurodebian.git/tools/nd_cmdsettings.sh
+. /etc/neurodebian/cmdsettings.sh
 
 for d in $alldists; do
   dfamily=${d%%-*}
   drelease=${d##*-}
 
-  bpdsc=$(nd_backport $drelease $1 | tail -n1)
+  bpdsc=$(nd_backport $drelease $1 | tail -n1 | sed -e 's/^.* //g')
   nd_build $dfamily $drelease $bpdsc
 done
diff --git a/tools/nd_cmdsettings.sh b/tools/nd_cmdsettings.sh
deleted file mode 100755 (executable)
index 90b78ad..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-family=$1
-dist=$2
-
-# basic settings
-cowbuilderroot="/home/neurodebian"
-buildplace="${cowbuilderroot}/build"
-
-# all cuurently supported dists
-alldists="nd+debian-lenny nd+debian-squeeze nd+debian-sid \
-          nd+ubuntu-maverick nd+ubuntu-lucid nd+ubuntu-karmic nd+ubuntu-jaunty"
-
-# default is debian
-aptcache="${cowbuilderroot}/debian_aptcache"
-components="main contrib non-free"
-mirror="http://debian.lcs.mit.edu/debian"
-
-# overwrite necessary bits for ubuntu
-if [ "${family#nd+}" = "ubuntu" ]; then
-  aptcache="${cowbuilderroot}/ubuntu_aptcache"
-  components="main universe"
-  mirror="http://ubuntu.media.mit.edu/ubuntu"
-fi
-
-if [ ! -d $aptcache ]; then mkdir $aptcache; fi
index ddec36d7b7d790aeafb43ea169c8b2a0d11930d5..3473904f40d3298be4d73ef05dd991aab18872cc 100755 (executable)
@@ -15,7 +15,7 @@ if [ -z "$dist" ]; then
   exit 1
 fi
 
-. /home/neurodebian/neurodebian.git/tools/nd_cmdsettings.sh
+. /etc/neurodebian/cmdsettings.sh
 
 # common options
 opts="--distribution $dist --aptcache $aptcache --buildplace $buildplace"
index fa5612389c160f0cd095cb515504c534fd1060e5..2237e5c6dbee7e7ececd2e8196bb3fe58e29d8d9 100755 (executable)
@@ -35,7 +35,7 @@ if [ -z "$arch" ]; then
   exit 1
 fi
 
-. /home/neurodebian/neurodebian.git/tools/nd_cmdsettings.sh
+. /etc/neurodebian/cmdsettings.sh
 
 # common options
 opts="--distribution $dist --aptcache $aptcache --buildplace $buildplace"
diff --git a/tools/nd_querycfg b/tools/nd_querycfg
new file mode 100755 (executable)
index 0000000..9e73f55
--- /dev/null
@@ -0,0 +1,14 @@
+#!/usr/bin/python
+#
+# Dead simple script to query the NeuroDebian dev config.
+#
+import sys
+from ConfigParser import SafeConfigParser
+
+# XXX add check if it is there at all
+# XXX support more locations
+cfg_path="/etc/neurodebian/neurodebian.cfg"
+
+cfg = SafeConfigParser()
+cfg.read(cfg_path)
+print cfg.get(sys.argv[1], sys.argv[2])
index b2e3edbef2ded8698435710a04eea4a86bddbf0c..aaf30c5f1ffbfd58cc420edbe8537f87657dc24e 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-. /home/neurodebian/neurodebian.git/tools/nd_cmdsettings.sh
+. /etc/neurodebian/cmdsettings.sh
 
 for d in $alldists; do
   dfamily=${d%%-*}
index e4cc9aa4b26c6e8de10ab0fc7f526a533666cb94..8a92ac8601858cbdf271811dd840e8784431425b 100755 (executable)
@@ -15,7 +15,7 @@ if [ -z "$dist" ]; then
   exit 1
 fi
 
-. /home/neurodebian/neurodebian.git/tools/nd_cmdsettings.sh
+. /etc/neurodebian/cmdsettings.sh
 
 # common options
 opts="--distribution $dist --aptcache $aptcache --buildplace $buildplace"
diff --git a/tools/reblender b/tools/reblender
deleted file mode 100755 (executable)
index f3eb064..0000000
+++ /dev/null
@@ -1,880 +0,0 @@
-#!/usr/bin/env python
-"""Tell me who you are!
-"""
-
-import urllib
-import apt
-from debian_bundle import deb822
-from debian_bundle import debtags
-from ConfigParser import SafeConfigParser
-import subprocess
-import os
-import sys
-import shutil
-import pysvn
-from optparse import OptionParser, Option, OptionGroup, OptionConflictError
-
-
-def transCodename(codename, cfg):
-    """Translate a known codename into a release description.
-
-    Unknown codenames will simply be returned as is.
-    """
-    # strip repository codename
-    codename = codename[codename.find('_') + 1:]
-
-    # if we know something, tell
-    if codename in cfg.options('release codenames'):
-        return cfg.get('release codenames', codename)
-    else:
-        return codename
-
-
-def createDir(path):
-    if os.path.exists(path):
-        return
-
-    ps = path.split(os.path.sep)
-
-    for i in range(1,len(ps) + 1):
-        p = os.path.sep.join(ps[:i])
-
-        if not os.path.exists(p):
-            os.mkdir(p)
-
-
-class AptListsCache(object):
-    def __init__(self, cachedir='cache', ro_cachedirs=None, init_db=None):
-        self.cachedir = cachedir
-
-        if not ro_cachedirs is None:
-            self.ro_cachedirs = ro_cachedirs
-        else:
-            self.ro_cachedirs = []
-
-        # always use system cache
-        #self.ro_cachedirs.append('/var/lib/apt/lists/')
-
-        # create cachedir
-        createDir(self.cachedir)
-
-
-    def get(self, url, update=False):
-        """Looks in the cache if the file is there and takes the cached one.
-        Otherwise it is downloaded first.
-
-        Knows how to deal with http:// and svn:// URLs.
-
-        :Return:
-          file handler
-        """
-        # look whether it is compressed
-        cext = url.split('.')[-1]
-        if cext in ['gz', 'bz2']:
-            target_url = url[:-1 * len(cext) -1]
-        else:
-            # assume not compressed
-            target_url = url
-            cext = None
-
-        # turn url into a filename -- mimik what APT does for
-        # /var/lib/apt/lists/
-        tfilename = '_'.join(target_url.split('/')[2:])
-
-        # if we need to download anyway do not search
-        if update:
-            cfilename = os.path.join(self.cachedir, tfilename)
-        else:
-            # look for the uncompressed file anywhere in the cache
-            cfilename = None
-            for cp in [self.cachedir] + self.ro_cachedirs:
-                if os.path.exists(os.path.join(cp, tfilename)):
-                    cfilename = os.path.join(cp, tfilename)
-
-        # nothing found?
-        if cfilename is None:
-            # add cache item
-            cfilename = os.path.join(self.cachedir, tfilename)
-            update = True
-
-        # if updated needed -- download
-        if update:
-            print 'Caching file from %s' % url
-
-            if url.startswith('svn://'):
-                # export from SVN
-                pysvn.Client().export(url, cfilename)
-            if url.startswith('http://'):
-                # download
-                tempfile, ignored = urllib.urlretrieve(url)
-
-                # decompress
-                decompressor = None
-                if cext == 'gz':
-                    decompressor = 'gzip'
-                elif cext == 'bz2':
-                    decompressor = 'bzip2'
-                elif cext == None:
-                    decompressor = None
-                else:
-                    raise ValueError, \
-                          "Don't know how to decompress %s files" \
-                          % cext
-
-                if not decompressor is None:
-                    if subprocess.call([decompressor, '-d', '-q', '-f',
-                                       tempfile]) == 1:
-                        raise RuntimeError, \
-                              "Something went wrong while decompressing '%s'" \
-                              % tempfile
-
-                # move decompressed file into cache
-                shutil.move(os.path.splitext(tempfile)[0], cfilename)
-
-                # XXX do we need that if explicit filename is provided?
-                urllib.urlcleanup()
-
-        # open cached file
-        fh = open(cfilename, 'r')
-
-        return fh
-
-
-
-
-class DebianPkgArchive(SafeConfigParser):
-    """
-    """
-    def __init__(self, cache=None, init_db=None):
-        """
-        :Parameter:
-        """
-        SafeConfigParser.__init__(self)
-
-        # read an existing database if provided
-        if not init_db is None:
-            self.read(init_db)
-
-        # use provided file cache or use fresh one
-        if not cache is None:
-            self.cache = cache
-        else:
-            self.cache = AptListsCache()
-
-        # init debtags DB
-        self.dtags = debtags.DB()
-        self.dtags.read(open('/var/lib/debtags/package-tags'))
-
-        # init package filter
-        self.pkgfilter = None
-
-        self._updateReleases()
-
-
-    def _updateReleases(self):
-        self.releases = {}
-
-        # for all packages
-        for p in self.sections():
-            # no releases, nothing to do
-            if not self.has_option(p, 'releases'):
-                continue
-
-            # for all releases of this package
-            for r in \
-              [rel.strip() for rel in self.get(p, 'releases').split(',')]:
-                  # push release code
-                  if not self.releases.has_key(r):
-                      self.releases[r] = []
-
-                  # store component
-                  component = self.get(p, '%s component' % r)
-
-                  if not component in self.releases[r]:
-                      self.releases[r].append(component)
-
-
-    def __repr__(self):
-        """Generate INI file content for current content.
-        """
-        # make adaptor to use str as file-like (needed for ConfigParser.write()
-        class file2str(object):
-            def __init__(self):
-                self.__s = ''
-            def write(self, val):
-                self.__s += val
-            def str(self):
-                return self.__s
-
-        r = file2str()
-        self.write(r)
-
-        return r.str()
-
-
-    def save(self, filename):
-        """Write current content to a file.
-        """
-        f = open(filename, 'w')
-        self.write(f)
-        f.close()
-
-
-    def ensureUnique(self, section, option, value):
-        if not self.has_option(section, option):
-            self.set(section, option, value)
-        else:
-            if not self.get(section, option) == value:
-                raise ValueError, "%s: %s is not unique (%s != %s)" \
-                                  % (section, option,
-                                     self.get(section, option), value)
-
-
-    def appendUniqueCSV(self, section, option, value):
-        """
-        """
-        if not self.has_option(section, option):
-            self.set(section, option, value)
-        else:
-            l = self.get(section, option).split(', ')
-            if not value in l:
-                self.set(section, option, ', '.join(l + [value]))
-
-
-    def getReleaseInfo(self, rurl, force_update=False):
-        # root URL of the repository
-        baseurl = '/'.join(rurl.split('/')[:-1])
-        # get the release file from the cache
-        release_file = self.cache.get(rurl, update=force_update)
-
-        # create parser instance
-        rp = deb822.Release(release_file)
-
-        # architectures on this dist
-        archs = rp['Architectures'].split()
-        components = rp['Components'].split()
-        # compile a new codename that also considers the repository label
-        # to distinguish between official and unofficial repos.
-        label = rp['Label']
-        codename = rp['Codename']
-        labelcode = '_'.join([rp['Label'], rp['Codename']])
-
-        # cleanup
-        release_file.close()
-
-        return {'baseurl': baseurl, 'archs': archs, 'components': components,
-                'codename': codename, 'label': label, 'labelcode': labelcode}
-
-
-    def checkOfficialRelease(self, rurl, force_update=False):
-        ri = self.getReleaseInfo(rurl, force_update=force_update)
-
-        # try with a i386 packages file, since that should be the most common
-        # one
-        # loop over all components
-        for c in ri['components']:
-            pkgsurl = self.buildPkgsURL(ri['baseurl'], c, 'i386')
-            packages_file = self.cache.get(pkgsurl,
-                                           update=force_update)
-
-            # now check every package, whether we also have it in the DB already
-            for st in deb822.Packages.iter_paragraphs(packages_file):
-                pkg = st['Package']
-                if self.has_section(pkg):
-                    # store the label code
-                    self.appendUniqueCSV(pkg, "releases", ri['labelcode'])
-                    # and the associated component
-                    self.ensureUnique(pkg, "%s component" % ri['labelcode'], c)
-                    # and version
-                    self.set(pkg, "%s version" % ri['labelcode'], st['Version'])
-
-            # cleanup
-            packages_file.close()
-
-
-    def buildPkgsURL(self, baseurl, component, arch):
-        return '/'.join([baseurl, component, 'binary-' + arch, 'Packages.bz2'])
-
-
-    def importRelease(self, rurl, force_update=False):
-
-        ri = self.getReleaseInfo(rurl, force_update=force_update)
-
-        # compile the list of Packages files to parse and parse them
-        for c in ri['components']:
-            for a in ri['archs']:
-                # compile packages URL
-                pkgsurl = self.buildPkgsURL(ri['baseurl'], c, a)
-
-                # retrieve from cache
-                packages_file = self.cache.get(pkgsurl,
-                                               update=force_update)
-
-                # parse
-                for stanza in deb822.Packages.iter_paragraphs(packages_file):
-                    self._storePkg(stanza, ri['labelcode'], c, ri['baseurl'])
-
-
-                # cleanup
-                packages_file.close()
-
-        self._updateReleases()
-
-
-    def _storePkg(self, st, codename, component, baseurl):
-        """
-        :Parameter:
-          st: Package section
-        """
-        pkg = st['Package']
-
-        if not self.has_section(pkg):
-            self.add_section(pkg)
-
-        # do nothing if package is not in filter if there is any
-        if not self.pkgfilter is None and not pkg in self.pkgfilter:
-            self.ensureUnique(pkg, 'visibility', 'shadowed')
-        else:
-            self.ensureUnique(pkg, 'visibility', 'featured')
-
-        # which releases
-        self.appendUniqueCSV(pkg, "releases", codename)
-
-        # arch listing
-        self.appendUniqueCSV(pkg, "%s archs" % codename, st['Architecture'])
-
-        # versions
-        self.ensureUnique(pkg,
-                          "%s version %s" % (codename, st['Architecture']),
-                          st['Version'])
-
-        # link to .deb
-        self.ensureUnique(pkg,
-                          "%s file %s" % (codename, st['Architecture']),
-                          '/'.join(baseurl.split('/')[:-2] + [st['Filename']]))
-
-        # component
-        self.ensureUnique(pkg, '%s component' % codename, component)
-
-        # store the pool url
-        self.ensureUnique(pkg, "%s poolurl" % codename,
-                 '/'.join(baseurl.split('/')[:-2] \
-                         + [os.path.dirname(st['Filename'])]))
-
-
-        # now the stuff where a single variant is sufficient and where we go for
-        # the latest available one
-        if self.has_option(pkg, "newest version") \
-            and apt.VersionCompare(st['Version'],
-                                   self.get(pkg, "newest version")) < 0:
-            return
-
-        # everything from here will overwrite existing ones
-
-        # we seems to have an updated package
-        self.set(pkg, "newest version", st['Version'])
-
-        # description
-        self.set(pkg, "description", st['Description'].replace('%', '%%'))
-
-        # maintainer
-        self.set(pkg, "maintainer", st['Maintainer'])
-
-        # optional stuff
-        if st.has_key('Homepage'):
-            self.set(pkg, 'homepage', st['Homepage'])
-
-        # query debtags
-        debtags = self.dtags.tagsOfPackage(pkg)
-        if debtags:
-            self.set(pkg, 'debtags', ', '.join(debtags))
-
-
-    def writeSourcesLists(self, outdir, cfg):
-        createDir(outdir)
-        createDir(os.path.join(outdir, 'static'))
-
-        fl = open(os.path.join(outdir, 'sources_lists'), 'w')
-        for trans, r in sorted([(transCodename(k, cfg), k) 
-                for k in self.releases.keys() if k.startswith('apsy')]):
-            # need to turn 'apsy_lenny' back into 'lenny'
-            debneuro_r = r.split('_')[1]
-
-            f = open(os.path.join(outdir, 'static',
-                                  'debneuro.%s.sources.list' % debneuro_r),
-                     'w')
-            f.write("deb http://apsy.gse.uni-magdeburg.de/debian %s %s\n" \
-                    % (debneuro_r, ' '.join(self.releases[r])))
-            f.write("deb-src http://apsy.gse.uni-magdeburg.de/debian %s %s\n" \
-                    % (debneuro_r, ' '.join(self.releases[r])))
-            # XXX use :download: role from sphinx 0.6 on
-            #fl.write('* `%s <http://apsy.gse.uni-magdeburg.de/debian/html/_static/debneuro.%s.sources.list>`_\n' \
-            fl.write('* `%s <_static/debneuro.%s.sources.list>`_\n' \
-                     % (trans, debneuro_r))
-            f.close()
-        fl.close()
-
-
-    def importProspectivePkgsFromTaskFile(self, url):
-        fh = self.cache.get(url)
-
-        for st in deb822.Packages.iter_paragraphs(fh):
-            # do not stop unless we have a description
-            if not st.has_key('Pkg-Description'):
-                continue
-
-            if st.has_key('Depends'):
-                pkg = st['Depends']
-            elif st.has_key('Suggests'):
-                pkg = st['Suggests']
-            else:
-                print 'Warning: Cannot determine name of prospective package ' \
-                      '... ignoring.'
-                continue
-
-            # store pkg info
-            if not self.has_section(pkg):
-                self.add_section(pkg)
-
-            # prospective ones are always featured
-            self.ensureUnique(pkg, 'visibility', 'featured')
-
-            # pkg description
-            self.set(pkg, "description",
-                     st['Pkg-Description'].replace('%', '%%'))
-
-            # optional stuff
-            if st.has_key('Homepage'):
-                self.set(pkg, 'homepage', st['Homepage'])
-
-            if st.has_key('Pkg-URL'):
-                self.set(pkg, 'external pkg url', st['Pkg-URL'])
-
-            if st.has_key('WNPP'):
-                self.set(pkg, 'wnpp debian', st['WNPP'])
-
-            if st.has_key('License'):
-                self.set(pkg, 'license', st['License'])
-
-            # treat responsible as maintainer
-            if st.has_key('Responsible'):
-                self.set(pkg, "maintainer", st['Responsible'])
-
-
-    def setPkgFilterFromTaskFile(self, urls):
-        pkgs = []
-
-        for task in urls:
-            fh = self.cache.get(task)
-
-
-            # loop over all stanzas
-            for stanza in deb822.Packages.iter_paragraphs(fh):
-                if stanza.has_key('Depends'):
-                    pkg = stanza['Depends']
-                elif stanza.has_key('Suggests'):
-                    pkg = stanza['Suggests']
-                else:
-                    continue
-
-                # account for multiple packages per line
-                if pkg.count(','):
-                    pkgs += [p.strip() for p in pkg.split(',')]
-                else:
-                    pkgs.append(pkg.strip())
-
-        # activate filter
-        self.pkgfilter = pkgs
-
-
-def genPkgPage(db, pkg, cfg):
-    """
-    :Parameters:
-      db: database
-      pkg: str
-        Package name
-    """
-    descr = db.get(pkg, 'description').split('\n')
-
-    s = ''
-
-    # only put index markup for featured packages
-    if db.get(pkg, 'visibility') == 'featured':
-        s = '.. index:: %s, ' % pkg
-        s += '\n'
-
-        # add a subset of available debtags (if present)
-        if db.has_option(pkg, 'debtags'):
-            # filter tags
-            tags = [t for t in db.get(pkg, 'debtags').split(', ')
-                        if t.split('::')[0] in ['field', 'works-with']]
-            if len(tags):
-                s += '.. index:: %s\n\n' % ', '.join(tags)
-
-    # main ref target for this package
-    s += '.. _deb_' + pkg + ':\n'
-
-    # separate header from the rest
-    s += '\n\n\n'
-
-    header = '%s -- %s' % (pkg, descr[0])
-    s += '*' * (len(header) + 2)
-    s += '\n ' + header + '\n'
-    s += '*' * (len(header) + 2) + '\n\n'
-
-    # put description
-    # XXX honour formating syntax
-    s += '\n'.join([l.lstrip(' .') for l in descr[1:]])
-    s += '\n'
-
-    if db.has_option(pkg, 'homepage'):
-        s += '\n**Homepage**: %s\n' % db.get(pkg, 'homepage')
-
-    s += '\nBinary packages'\
-         '\n===============\n'
-
-    s += genMaintainerSection(db, pkg)
-
-    if db.has_option(pkg, 'wnpp debian'):
-        s += """\
-A Debian packaging effort has been officially announced. Please see the
-corresponding `intent-to-package bug report`_ for more information about
-its current status.
-
-.. _intent-to-package bug report: http://bugs.debian.org/%s
-
-""" % db.get(pkg, 'wnpp debian')
-
-    # write repository content summary for NeuroDebian
-    s += getReposContentSummary(db, cfg, 'apsy', pkg)
-    # see if there is something about a package in Debian proper
-    s += getDebianRefs(db, cfg, pkg)
-
-    return s
-
-
-def genMaintainerSection(db, pkg):
-    s = ''
-
-    if not db.has_option(pkg, 'maintainer'):
-        s += """\
-
-Currently, nobody seems to be responsible for creating or maintaining
-Debian packages of this software.
-
-"""
-        return s
-
-    # there is someone responsible
-    maintainer = db.get(pkg, 'maintainer')
-
-    # do we have actual packages, or is it just a note
-    if not db.has_option(pkg, 'releases'):
-        s += """\
-
-There are currently no binary packages available. However, the last known
-packaging effort was started by %s which meanwhile might have led to an
-initial unofficial Debian packaging.
-
-""" % maintainer
-        return s
-
-    s += '\n**Maintainer**: %s\n\n' % maintainer
-
-    if not maintainer.startswith('Michael Hanke'):
-        s += """\
-
-.. note::
-  Do not contact the original package maintainer regarding
-  bugs in this unofficial binary package. Instead, contact
-  the repository maintainer at michael.hanke@gmail.com\ .
-
-"""
-
-    return s
-
-
-def getDebianRefs(db, cfg, pkg):
-    # no release, nothing to do
-    if not db.has_option(pkg, 'releases'):
-        return ''
-    # which Debian release is this package part of?
-    debrels = [r.split('_')[1] for r in db.get(pkg, 'releases').split(', ')
-                    if r.startswith('Debian')]
-    # do nothing if there is no package in Debian proper
-    if not len(debrels):
-        return ''
-
-    s = """\
-Official Debian archive
------------------------
-
-This package is available from the offical Debian archive for:
-
-* %s
-
-Please see the following ressources for more information:
-
-* `Debian package summary page`_
-* `Bugreports in the Debian bug tracking system`_
-* `Debian package popularity statistics`_
-
-.. _Debian package summary page: http://packages.debian.org/%s
-.. _Bugreports in the Debian bug tracking system: http://bugs.debian.org/%s
-.. _Debian package popularity statistics: http://qa.debian.org/popcon.php?package=%s
-
-""" % ('\n* '.join(['`%s <http://www.debian.org/releases/%s>`_ *[%s]*: %s' \
-                    % (transCodename(rel, cfg),
-                       rel,
-                       db.get(pkg, 'debian_%s component' % rel),
-                       db.get(pkg, 'debian_%s version' % rel))
-                            for rel in debrels]),
-       pkg, pkg, pkg)
-
-    return s
-
-
-def getReposContentSummary(db, cfg, reposlabel, pkg):
-    # do nothing if the are no packages
-    if not db.has_option(pkg, 'releases'):
-        return ''
-
-    reposname = cfg.get('repository labels', reposlabel)
-    s = '\n%s\n%s\n' % (reposname, '-' * len(reposname))
-
-    s += """\
-The repository contains binary packages for the following distribution
-releases and system architectures. The corresponding source packages
-are available too.
-
-.. note::
-  Do not download this package manually if you plan to use it
-  regularly. Instead configure your package manager to use this
-  repository by following the instructions on the
-  :ref:`front page <repository_howto>`.
-
-"""
-
-    # for all releases this package is part of
-    for rel in db.get(pkg, 'releases').split(', '):
-        # ignore items associated with other repositories
-        if not rel.split('_')[0] == reposlabel:
-            continue
-        # write release description and component
-        s += '\n%s *[%s]*:\n  ' \
-                % (transCodename(rel, cfg),
-                   db.get(pkg, '%s component' % rel))
-
-        s += '`source <%s>`_' % db.get(pkg, '%s poolurl' % rel)
-
-        # archs this package is available for
-        archs = db.get(pkg, '%s archs' % rel).split(', ')
-
-        # extract all present versions for any arch
-        versions =  [db.get(pkg, '%s version %s' % (rel, arch))
-                        for arch in archs]
-
-        # if there is only a single version for all of them, simplify the list
-        single_ver = versions.count(versions[0]) == len(versions)
-
-        if single_ver:
-            s += ', '
-            # only one version string for all
-            s += ', '.join(['`%s <%s>`_' \
-                    % (arch, db.get(pkg, '%s file %s' % (rel, arch)))
-                        for arch in archs])
-            s += ' (%s)' % versions[0]
-        else:
-            s += ', '
-            # a separate version string for each arch
-            s += ', '.join(['`%s <%s>`_ (%s)' \
-                    % (arch,
-                       db.get(pkg, '%s file %s' % (rel, arch)),
-                       db.get(pkg, '%s version %s' % (rel, arch)))
-                        for arch in archs])
-
-        s += '\n'
-
-    return s
-
-def maintainer2email(maint):
-    return maint.split('<')[1].rstrip('>')
-
-
-def writePkgsBy(db, key, value2id, outdir, heading):
-    createDir(outdir)
-    nwkey = key.replace(' ', '')
-    createDir(os.path.join(outdir, 'by%s' % nwkey))
-
-    collector = {}
-
-    # get packages by maintainer
-    for p in db.sections():
-        # only featured packages
-        if db.get(p, 'visibility') == 'shadowed':
-            continue
-
-        if db.has_option(p, key):
-            by = db.get(p, key)
-
-            if not collector.has_key(by):
-                collector[by] = (value2id(by), [p])
-            else:
-                collector[by][1].append(p)
-
-    toc = open(os.path.join(outdir, 'by%s.rst' % nwkey), 'w')
-    toc.write('.. index:: Packages by %s\n.. _by%s:\n\n' % (key, key))
-
-    toc_heading = 'Packages by %s' % key
-    toc.write('%s\n%s\n\n' % (toc_heading, '=' * len(toc_heading)))
-    toc.write('.. toctree::\n  :maxdepth: 1\n\n')
-
-    # summary page per maintainer
-    for by in sorted(collector.keys()):
-        toc.write('  by%s/%s\n' % (nwkey, collector[by][0]))
-
-        fh = open(os.path.join(outdir,
-                               'by%s' % nwkey,
-                               collector[by][0] + '.rst'), 'w')
-
-        fh.write('.. index:: %s\n.. _%s:\n\n' % (by, by))
-
-        hdr = heading.replace('<ITEM>', by)
-        fh.write(hdr + '\n')
-        fh.write('=' * len(hdr) + '\n\n')
-
-        # write sorted list of packages
-        for p in sorted(collector[by][1]):
-            fh.write('* :ref:`deb_%s`\n' % p)
-
-        fh.close()
-
-    toc.close()
-
-
-def writeRst(db, outdir, cfg, addenum_dir=None):
-    createDir(outdir)
-    createDir(os.path.join(outdir, 'pkgs'))
-
-    # open pkgs toctree
-    toc = open(os.path.join(outdir, 'pkgs.rst'), 'w')
-    # write header
-    toc.write('.. _full_pkg_list:\n\n')
-    toc.write('Archive content\n===============\n\n'
-              '.. toctree::\n  :maxdepth: 1\n\n')
-
-    for p in sorted(db.sections()):
-        print "Generating page for '%s'" % p
-        pf = open(os.path.join(outdir, 'pkgs', '%s.rst' % p), 'w')
-        pf.write(genPkgPage(db, p, cfg))
-
-        # check for doc addons
-        if addenum_dir is not None:
-            addenum = os.path.join(os.path.abspath(addenum_dir), '%s.rst' % p)
-            if os.path.exists(addenum):
-                pf.write('\n\n.. include:: %s\n' % addenum)
-        pf.close()
-        toc.write('  pkgs/%s\n' % p)
-
-
-    toc.close()
-
-
-def prepOptParser(op):
-    # use module docstring for help output
-    op.usage = "%s [OPTIONS]\n\n" % sys.argv[0] + __doc__
-
-    op.add_option("--db",
-                  action="store", type="string", dest="db",
-                  default=None,
-                  help="Database file to read. Default: None")
-
-    op.add_option("--cfg",
-                  action="store", type="string", dest="cfg",
-                  default=None,
-                  help="Repository config file.")
-
-    op.add_option("-o", "--outdir",
-                  action="store", type="string", dest="outdir",
-                  default=None,
-                  help="Target directory for ReST output. Default: None")
-
-    op.add_option("-r", "--release-url",
-                  action="append", dest="release_urls",
-                  help="None")
-
-    op.add_option("--pkgaddenum", action="store", dest="addenum_dir",
-                  type="string", default=None, help="None")
-
-
-
-def main():
-    op = OptionParser(version="%prog 0.0.1")
-    prepOptParser(op)
-
-    (opts, args) = op.parse_args()
-
-    if len(args) != 1:
-        print('There needs to be exactly one command')
-        sys.exit(1)
-
-    cmd = args[0]
-
-    if opts.cfg is None:
-        print("'--cfg' option is mandatory.")
-        sys.exit(1)
-
-
-    cfg = SafeConfigParser()
-    cfg.read(opts.cfg)
-
-    # load existing db, unless renew is requested
-    if cmd == 'refreshdb':
-        dpa = DebianPkgArchive()
-    else:
-        dpa = DebianPkgArchive(init_db=opts.db)
-
-
-    if cmd == 'generate':
-        if opts.outdir is None:
-            print('Not output directory specified!')
-            sys.exit(1)
-
-        dpa.writeSourcesLists(opts.outdir, cfg)
-        writeRst(dpa, opts.outdir, cfg, opts.addenum_dir)
-        writePkgsBy(dpa, 'maintainer', maintainer2email, opts.outdir,
-                    'Packages maintained by <ITEM>')
-        # stop here
-        sys.exit(0)
-
-
-    if cfg.has_option('packages', 'select taskfiles'):
-        dpa.setPkgFilterFromTaskFile(cfg.get('packages',
-                                             'select taskfiles').split())
-
-    if cfg.has_option('packages', 'select names'):
-        dpa.pkgfilter += cfg.get('packages', 'select names').split()
-
-    if cfg.has_option('packages', 'prospective'):
-        for p in cfg.get('packages', 'prospective').split():
-            dpa.importProspectivePkgsFromTaskFile(p)
-
-    if cfg.has_option('repositories', 'releases'):
-        for rurl in cfg.get('repositories', 'releases').split():
-            dpa.importRelease(rurl, force_update=False)
-
-    if cfg.has_option('repositories', 'releases'):
-        for rurl in cfg.get('repositories', 'releases').split():
-            dpa.importRelease(rurl, force_update=False)
-
-    if cfg.has_option('officials', 'releases'):
-        for rurl in cfg.get('officials', 'releases').split():
-            dpa.checkOfficialRelease(rurl, force_update=False)
-
-    if not opts.db is None:
-        dpa.save(opts.db)
-
-
-if __name__ == "__main__":
-    main()
-
diff --git a/xdg/desktop/neurodebian-caret.desktop b/xdg/desktop/neurodebian-caret.desktop
new file mode 100644 (file)
index 0000000..8519fa2
--- /dev/null
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+GenericName=Cortical Surface Reconstruction and Visualization
+Name=Caret
+Exec=caret5
+Type=Application
+Terminal=false
+Categories=X-NeuroDebian-MedicalImaging;
+
diff --git a/xdg/desktop/neurodebian-dcm2niigui.desktop b/xdg/desktop/neurodebian-dcm2niigui.desktop
new file mode 100644 (file)
index 0000000..eb14580
--- /dev/null
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Encoding=UTF-8
+GenericName=DICOM to NIfTI Conversion
+GenericName[ru]=Конвертор из DICOM в NIfTI
+Name=dcm2nii
+Exec=dcm2niigui %F
+Type=Application
+Terminal=false
+Categories=X-NeuroDebian-MedicalImaging
+Icon=mricron.xpm
diff --git a/xdg/desktop/neurodebian-devel-ml.desktop b/xdg/desktop/neurodebian-devel-ml.desktop
new file mode 100644 (file)
index 0000000..0f89758
--- /dev/null
@@ -0,0 +1,7 @@
+[Desktop Entry]
+Name=Developer Mailing List Archive
+Type=Application
+Exec=x-www-browser "http://lists.alioth.debian.org/pipermail/neurodebian-devel"
+Comment=Opens the list archive in a browser window
+Icon=help-browser
+Categories=X-NeuroDebian-Support
diff --git a/xdg/desktop/neurodebian-fsl-4.1.desktop b/xdg/desktop/neurodebian-fsl-4.1.desktop
new file mode 100644 (file)
index 0000000..bc2e93d
--- /dev/null
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Encoding=UTF-8
+GenericName=Software Collection for (f)MRI Data Analysis
+GenericName[de]=Software-Kollektion zur (f)MRT-Daten Analyse
+Name=FSL 4.1
+Exec=fsl4.1-fsl
+Icon=fsl-4.1.xpm
+Type=Application
+Terminal=false
+Categories=X-NeuroDebian-MedicalImaging
diff --git a/xdg/desktop/neurodebian-fslview.desktop b/xdg/desktop/neurodebian-fslview.desktop
new file mode 100644 (file)
index 0000000..ef86da3
--- /dev/null
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Encoding=UTF-8
+GenericName=MRI Image Viewer
+GenericName[de]=Betrachter für MRT-Daten
+Name=FSLView
+Exec=fslview %F
+Type=Application
+Terminal=false
+Comment=This program is part of FSL
+Comment[de]=Dieses Programm gehört zu FSL
+Categories=X-NeuroDebian-MedicalImaging
+Icon=fslview.xpm
diff --git a/xdg/desktop/neurodebian-itksnap.desktop b/xdg/desktop/neurodebian-itksnap.desktop
new file mode 100644 (file)
index 0000000..65680ef
--- /dev/null
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+GenericName=3D Structure Segmentation
+Name=ITK-SNAP
+Exec=itksnap %F
+Type=Application
+Terminal=false
+Categories=X-NeuroDebian-MedicalImaging
+Icon=itksnap.xpm
diff --git a/xdg/desktop/neurodebian-mricron.desktop b/xdg/desktop/neurodebian-mricron.desktop
new file mode 100644 (file)
index 0000000..07e9fec
--- /dev/null
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Encoding=UTF-8
+GenericName=2D/3D MRI Image Viewer
+GenericName[de]=2D/3D Betrachter für MRT-Daten
+GenericName[ru]=Просмотр 2D/3D МРТ-данных
+Name=MRIcron
+Exec=mricron %F
+Type=Application
+Terminal=false
+Categories=X-NeuroDebian-MedicalImaging
+Icon=mricron.xpm
diff --git a/xdg/desktop/neurodebian-mrtrix.desktop b/xdg/desktop/neurodebian-mrtrix.desktop
new file mode 100644 (file)
index 0000000..aa9e4da
--- /dev/null
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+GenericName=MRI Tractography View
+Name=MRview
+Exec=mrview %F
+Type=Application
+Terminal=false
+Categories=X-NeuroDebian-MedicalImaging
+Icon=mrtrix.xpm
diff --git a/xdg/desktop/neurodebian-npm.desktop b/xdg/desktop/neurodebian-npm.desktop
new file mode 100644 (file)
index 0000000..82c2175
--- /dev/null
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+GenericName=Non-parametric MRI Analysis
+Name=NPM
+Exec=npm
+Type=Application
+Terminal=false
+Categories=X-NeuroDebian-MedicalImaging
+Icon=mricron.xpm
diff --git a/xdg/desktop/neurodebian-openelectrophy.desktop b/xdg/desktop/neurodebian-openelectrophy.desktop
new file mode 100644 (file)
index 0000000..8b1cb1a
--- /dev/null
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Encoding=UTF-8
+GenericName=Electrophysiological Data Analysis
+GenericName[de]=Elektrophysiologische Daten-Analyse
+Name=OpenElectrophy
+Exec=openelectrophy
+Type=Application
+Terminal=false
+Categories=X-NeuroDebian-Electrophysiology
+Icon=openelectrophy.png
diff --git a/xdg/desktop/neurodebian-upstream-ml.desktop b/xdg/desktop/neurodebian-upstream-ml.desktop
new file mode 100644 (file)
index 0000000..44dc89e
--- /dev/null
@@ -0,0 +1,7 @@
+[Desktop Entry]
+Name=Upstream Mailing List Archive
+Type=Application
+Exec=x-www-browser "http://lists.alioth.debian.org/pipermail/neurodebian-upstream"
+Comment=Opens the list archive in a browser window
+Icon=help-browser
+Categories=X-NeuroDebian-Support
diff --git a/xdg/desktop/neurodebian-user-ml.desktop b/xdg/desktop/neurodebian-user-ml.desktop
new file mode 100644 (file)
index 0000000..dc93712
--- /dev/null
@@ -0,0 +1,7 @@
+[Desktop Entry]
+Name=User Mailing List Archive
+Type=Application
+Exec=x-www-browser "http://lists.alioth.debian.org/pipermail/neurodebian-users"
+Comment=Opens the list archive in a browser window
+Icon=help-browser
+Categories=X-NeuroDebian-Support
diff --git a/xdg/desktop/neurodebian-vbview2.desktop b/xdg/desktop/neurodebian-vbview2.desktop
new file mode 100644 (file)
index 0000000..cad32c8
--- /dev/null
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Encoding=UTF-8
+GenericName=VoxBo Image Viewer
+Name=VBView2
+Exec=vbview2 %F
+Type=Application
+Terminal=false
+Categories=X-NeuroDebian-MedicalImaging
diff --git a/xdg/directories/neurodebian-electrophysiology.directory b/xdg/directories/neurodebian-electrophysiology.directory
new file mode 100644 (file)
index 0000000..b2d8eab
--- /dev/null
@@ -0,0 +1,4 @@
+[Desktop Entry]
+Name=Electrophysiology
+Icon=neurodebian-electrophysiology
+Type=Directory
diff --git a/xdg/directories/neurodebian-imaging.directory b/xdg/directories/neurodebian-imaging.directory
new file mode 100644 (file)
index 0000000..a211184
--- /dev/null
@@ -0,0 +1,4 @@
+[Desktop Entry]
+Name=Medical Imaging
+Icon=neurodebian-imaging
+Type=Directory
diff --git a/xdg/directories/neurodebian-psychophysics.directory b/xdg/directories/neurodebian-psychophysics.directory
new file mode 100644 (file)
index 0000000..d7e2edc
--- /dev/null
@@ -0,0 +1,4 @@
+[Desktop Entry]
+Name=Psychophysics
+Icon=neurodebian-psychophysics
+Type=Directory
diff --git a/xdg/directories/neurodebian-support.directory b/xdg/directories/neurodebian-support.directory
new file mode 100644 (file)
index 0000000..5767071
--- /dev/null
@@ -0,0 +1,4 @@
+[Desktop Entry]
+Name=Support
+Icon=system-help
+Type=Directory
diff --git a/xdg/directories/neurodebian.directory b/xdg/directories/neurodebian.directory
new file mode 100644 (file)
index 0000000..4ff8a5d
--- /dev/null
@@ -0,0 +1,4 @@
+[Desktop Entry]
+Name=NeuroDebian
+Icon=neurodebian
+Type=Directory
diff --git a/xdg/neurodebian.menu b/xdg/neurodebian.menu
new file mode 100644 (file)
index 0000000..dfb8cdd
--- /dev/null
@@ -0,0 +1,40 @@
+<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
+    "http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd">
+<Menu>
+    <Name>Applications</Name>
+<Menu>
+    <Name>neurodebian-main</Name>
+    <Directory>neurodebian.directory</Directory>
+    <Include>
+        <Category>X-NeuroDebian</Category>
+    </Include>
+<Menu>
+    <Name>neurodebian-electrophysiology</Name>
+    <Directory>neurodebian-electrophysiology.directory</Directory>
+    <Include>
+        <Category>X-NeuroDebian-Electrophysiology</Category>
+    </Include>
+</Menu>
+<Menu>
+    <Name>neurodebian-imaging</Name>
+    <Directory>neurodebian-imaging.directory</Directory>
+    <Include>
+        <Category>X-NeuroDebian-MedicalImaging</Category>
+    </Include>
+</Menu>
+<Menu>
+    <Name>neurodebian-psychophysics</Name>
+    <Directory>neurodebian-psychophysics.directory</Directory>
+    <Include>
+        <Category>X-NeuroDebian-Psychophysics</Category>
+    </Include>
+</Menu>
+<Menu>
+    <Name>neurodebian-support</Name>
+    <Directory>neurodebian-support.directory</Directory>
+    <Include>
+        <Category>X-NeuroDebian-Support</Category>
+    </Include>
+</Menu>
+</Menu>
+</Menu>