Difference between revisions of "Documentation/Nightly/Developers/Build ExtensionsIndex"

From Slicer Wiki
Jump to: navigation, search
m
Line 61: Line 61:
  
  
 +
The following examples are specific to unix-like platforms and can easily be adapted for windows.
 +
 +
=== Build your own set of extensions against Slicer trunk build tree ===
 +
 +
Prerequisites:
 +
 +
# Folder <code>SlicerExtensionsCustomIndex</code> contains the [[Documentation/{{documentation/version}}/Developers/Extensions/DescriptionFile|extension description files]] of your choice
 +
# Slicer trunk has been checkout into <code>/path/to/Slicer-master</code> and built into <code>/path/to/Slicer-master-SuperBuild-Release</code>
 +
# To upload extension(s) on the [[Documentation/{{documentation/version}}/Developers/Extensions/Server|extensions server]], an [[Documentation/{{documentation/version}}/Developers/Tutorials/ObtainExtensionServerApiKey|API key] has been obtained.
 +
 +
The associated extensions could be built doing:
 +
 +
<pre>
 +
$ ls SlicerExtensionsCustomIndex
 +
foo.s4ext
 +
bar.s4ext
 +
$ mkdir SlicerExtensionsCustomIndex-build
 +
$ cd SlicerExtensionsCustomIndex-build
 +
$ cmake -DSlicer_DIR:PATH=/path/to/Slicer-master-SuperBuild-Release/Slicer-build \
 +
-DSlicer_EXTENSION_DESCRIPTION_DIR:PATH=/path/to/SlicerExtensionsCustomIndex \
 +
-DCMAKE_BUILD_TYPE:STRING=Release \
 +
/path/to/Slicer-master/Extensions/CMake
 +
$ make
 +
</pre>
 +
 +
Then, to submit the configure/build/test results on [http://slicer.cdash.org/index.php?project=Slicer4#Extensions-Experimental CDash] <code>Extensions-Experimental</code> track
 +
and upload the extension on the [[Documentation/{{documentation/version}}/Developers/Extensions/Server|extensions server]] of your choice,
 +
there are two options:
 +
 +
# [Build the target `ExperimentalUpload` associated with each extensions](#extension-build-test-package-and-upload-using-experimentalupload-target)
 +
# [Configure (or re-configure) the project passing the options `Slicer_UPLOAD_EXTENSIONS`,
 +
`MIDAS_PACKAGE_URL`, `MIDAS_PACKAGE_EMAIL` and `MIDAS_PACKAGE_API_KEY`](#extensions-build-test-package-and-upload-using-slicer_upload_extensions-option)
 +
 +
 +
==== Extension build, test, package and upload using `ExperimentalUpload` target ====
 +
 +
<pre>
 +
$ cd SlicerExtensionsCustomIndex-build
 +
$ cd foo-build
 +
$ cmake -DMIDAS_PACKAGE_URL:STRING=http://slicer.kitware.com/midas3 \
 +
-DMIDAS_PACKAGE_EMAIL:STRING=jchris.fillionr@kitware.com \
 +
-DMIDAS_PACKAGE_API_KEY:STRING=a0b012c0123d012abc01234a012345a0 .
 +
$ make ExperimentalUpload
 +
</pre>
 +
 +
<gallery widths=600px perrow=2>
 +
File:SlicerExtensionsCustomIndex-CDash-Foo-Extension-ExperimentalUpload.png
 +
File:SlicerExtensionsCustomIndex-CDash-foo-download-link.png
 +
</gallery>
 +
 +
To simply submit the configure/build/test results on CDash skipping the upload part, building target `Experimental`
 +
is sufficient. This is expected to work only for Slicer >= 4.1.2. See issue [#2166](http://www.na-mic.org/Bug/view.php?id=2166)
 +
 +
<pre>
 +
$ cd SlicerExtensionsCustomIndex-build
 +
$ cd foo-build
 +
$ make Experimental
 +
</pre>
 +
 +
<gallery widths=600px perrow=2>
 +
File:SlicerExtensionsCustomIndex-CDash-Foo-Extension-Experimental.png
 +
</gallery>
 +
 +
 +
==== Extensions build, test, package and upload using `Slicer_UPLOAD_EXTENSIONS` option ====
 +
 +
<pre>
 +
$ cd SlicerExtensionsCustomIndex-build
 +
$ cmake -DSlicer_DIR:PATH=/path/to/Slicer-master-SuperBuild-Release/Slicer-build \
 +
-DSlicer_EXTENSION_DESCRIPTION_DIR:PATH=/path/to/SlicerExtensionsCustomIndex \
 +
-DCMAKE_BUILD_TYPE:STRING=Release \
 +
-DSlicer_UPLOAD_EXTENSIONS:BOOL=ON \
 +
-DMIDAS_PACKAGE_URL:STRING=http://slicer.kitware.com/midas3 \
 +
-DMIDAS_PACKAGE_EMAIL:STRING=jchris.fillionr@kitware.com \
 +
-DMIDAS_PACKAGE_API_KEY:STRING=a0b012c0123d012abc01234a012345a0 \
 +
/path/to/Slicer-master/Extensions/CMake
 +
</pre>
 +
 +
=== Build your own set of extensions against Slicer 4.1.1 build tree ===
 +
 +
Prerequisites:
 +
 +
# Folder <code>SlicerExtensionsCustomIndex</code> contains the [[Documentation/{{documentation/version}}/Developers/Extensions/DescriptionFile|extension description files]] of your choice
 +
# Slicer 4.1.1 has been checkout into <code>/path/to/Slicer-411</code> and built into <code>/path/to/Slicer-411-SuperBuild-Release</code>
 +
# To upload extension(s) on the [[Documentation/{{documentation/version}}/Developers/Extensions/Server|extensions server]], an [[Documentation/{{documentation/version}}/Developers/Tutorials/ObtainExtensionServerApiKey|API key] has been obtained.
 +
 +
The associated extensions could be built following the instruction listed in the previous section
 +
and changing occurrences of `Slicer-master` into `Slicer-411`.
 +
 +
=== Build slicer extensions associated with Slicer trunk ===
 +
 +
Considering the following assumption:
 +
 +
# Slicer trunk has been checkout into `/path/to/Slicer-master` and built into `/path/to/Slicer-master-SuperBuild-Release`
 +
 +
The associated extensions could be built doing:
 +
 +
<pre>
 +
$ git clone git://github.com/Slicer/ExtensionsIndex.git SlicerExtensionsIndex-master
 +
$ mkdir SlicerExtensionsIndex-master-build
 +
$ cd SlicerExtensionsIndex-master-build
 +
$ cmake -DSlicer_DIR:PATH=/path/to/Slicer-master-SuperBuild-Release/Slicer-build \
 +
-DSlicer_EXTENSION_DESCRIPTION_DIR:PATH=/path/to/SlicerExtensionsIndex-master \
 +
-DCMAKE_BUILD_TYPE:STRING=Release \
 +
/path/to/Slicer-master/Extensions/CMake
 +
$ make
 +
</pre>
 +
 +
=== Build slicer extensions associated with Slicer 4.1.1 ===
 +
 +
Considering the following assumption:
 +
 +
# Slicer trunk has been checkout into `/path/to/Slicer-411` and built into `/path/to/Slicer-411-SuperBuild-Release`
 +
 +
The associated extensions could be built doing:
 +
 +
<pre>
 +
$ git clone git://github.com/Slicer/ExtensionsIndex.git -b 4.1.1 SlicerExtensionsIndex-411
 +
$ mkdir SlicerExtensionsIndex-411-build
 +
$ cd SlicerExtensionsIndex-411-build
 +
$ cmake -DSlicer_DIR:PATH=/path/to/Slicer-411-SuperBuild-Release/Slicer-build \
 +
-DSlicer_EXTENSION_DESCRIPTION_DIR:PATH=/path/to/SlicerExtensionsIndex-411 \
 +
-DCMAKE_BUILD_TYPE:STRING=Release \
 +
/path/to/Slicer-411/Extensions/CMake
 +
$ make
 +
</pre>
  
  
Line 83: Line 209:
 
File:Slicer-Extensions-build-system-continuous.png|Extensions-Continuous Slicer trunk
 
File:Slicer-Extensions-build-system-continuous.png|Extensions-Continuous Slicer trunk
 
</gallery>
 
</gallery>
 +
 +
 +
<!--
 +
 +
### Dashboard submissions
 +
 +
Submission of experimental builds are welcome. See [manual build](#manual-build) instructions.
 +
 +
Submission of either continuous or nightly builds of extensions on Slicer [CDash][]
 +
should be done solely by the slicer factory machine maintained by Kitware folks.
 +
While nothing prevent such submission from happening, it won't be possible to upload extensions
 +
on the [extensions server][] without the appropriate credentials.
 +
 +
-->

Revision as of 18:27, 13 June 2013

Home < Documentation < Nightly < Developers < Build ExtensionsIndex

Overview

This page explain how to build an ExtensionsIndex.

Think of the ExtensionsIndex as a repository containing a list of extension description files (*.s4ext) used by the Slicer extensions build system to build, test, package and upload extensions on an extensions server.

Once uploaded on an extensions server, within Slicer, extensions can be installed using the extensions manager.

There are two possible approaches to build it:

Manual build

Locally building an extension index provides a convenient way to:


Given a directory containing one or more extension description files, it is possible to manually configure and build the associated extensions specifying the following CMake options:

Slicer_DIR Path to Slicer build tree
Slicer_EXTENSION_DESCRIPTION_DIR Path to folder containing extension description files

Optionally, it is also possible to specify:

CMAKE_BUILD_TYPE On unix-like platform, should match the build type of the associated Slicer build directory
Slicer_UPLOAD_EXTENSIONS By default set to OFF.
If enabled, extension builds will be submitted to Slicer dashboard and associated packages will be uploaded to extensions server
MIDAS_PACKAGE_URL MIDAS extensions server URL speciManualfying where the extension should be uploaded. For example http://slicer.kitware.com/midas3
MIDAS_PACKAGE_EMAIL Email allowing to authenticate to the extensions server.
MIDAS_PACKAGE_API_KEY Token allowing to authenticate to the extensions server.


The following examples are specific to unix-like platforms and can easily be adapted for windows.

Build your own set of extensions against Slicer trunk build tree

Prerequisites:

  1. Folder SlicerExtensionsCustomIndex contains the extension description files of your choice
  2. Slicer trunk has been checkout into /path/to/Slicer-master and built into /path/to/Slicer-master-SuperBuild-Release
  3. To upload extension(s) on the extensions server, an [[Documentation/Nightly/Developers/Tutorials/ObtainExtensionServerApiKey|API key] has been obtained.

The associated extensions could be built doing:

$ ls SlicerExtensionsCustomIndex
foo.s4ext
bar.s4ext
$ mkdir SlicerExtensionsCustomIndex-build
$ cd SlicerExtensionsCustomIndex-build
$ cmake -DSlicer_DIR:PATH=/path/to/Slicer-master-SuperBuild-Release/Slicer-build \
 -DSlicer_EXTENSION_DESCRIPTION_DIR:PATH=/path/to/SlicerExtensionsCustomIndex \
 -DCMAKE_BUILD_TYPE:STRING=Release \
 /path/to/Slicer-master/Extensions/CMake
$ make

Then, to submit the configure/build/test results on CDash Extensions-Experimental track and upload the extension on the extensions server of your choice, there are two options:

  1. [Build the target `ExperimentalUpload` associated with each extensions](#extension-build-test-package-and-upload-using-experimentalupload-target)
  2. [Configure (or re-configure) the project passing the options `Slicer_UPLOAD_EXTENSIONS`,

`MIDAS_PACKAGE_URL`, `MIDAS_PACKAGE_EMAIL` and `MIDAS_PACKAGE_API_KEY`](#extensions-build-test-package-and-upload-using-slicer_upload_extensions-option)


Extension build, test, package and upload using `ExperimentalUpload` target

$ cd SlicerExtensionsCustomIndex-build
$ cd foo-build
$ cmake -DMIDAS_PACKAGE_URL:STRING=http://slicer.kitware.com/midas3 \
 -DMIDAS_PACKAGE_EMAIL:STRING=jchris.fillionr@kitware.com \
 -DMIDAS_PACKAGE_API_KEY:STRING=a0b012c0123d012abc01234a012345a0 .
$ make ExperimentalUpload

To simply submit the configure/build/test results on CDash skipping the upload part, building target `Experimental` is sufficient. This is expected to work only for Slicer >= 4.1.2. See issue [#2166](http://www.na-mic.org/Bug/view.php?id=2166)

$ cd SlicerExtensionsCustomIndex-build
$ cd foo-build
$ make Experimental


Extensions build, test, package and upload using `Slicer_UPLOAD_EXTENSIONS` option

$ cd SlicerExtensionsCustomIndex-build
$ cmake -DSlicer_DIR:PATH=/path/to/Slicer-master-SuperBuild-Release/Slicer-build \
 -DSlicer_EXTENSION_DESCRIPTION_DIR:PATH=/path/to/SlicerExtensionsCustomIndex \
 -DCMAKE_BUILD_TYPE:STRING=Release \
 -DSlicer_UPLOAD_EXTENSIONS:BOOL=ON \
 -DMIDAS_PACKAGE_URL:STRING=http://slicer.kitware.com/midas3 \
 -DMIDAS_PACKAGE_EMAIL:STRING=jchris.fillionr@kitware.com \
 -DMIDAS_PACKAGE_API_KEY:STRING=a0b012c0123d012abc01234a012345a0 \
 /path/to/Slicer-master/Extensions/CMake

Build your own set of extensions against Slicer 4.1.1 build tree

Prerequisites:

  1. Folder SlicerExtensionsCustomIndex contains the extension description files of your choice
  2. Slicer 4.1.1 has been checkout into /path/to/Slicer-411 and built into /path/to/Slicer-411-SuperBuild-Release
  3. To upload extension(s) on the extensions server, an [[Documentation/Nightly/Developers/Tutorials/ObtainExtensionServerApiKey|API key] has been obtained.

The associated extensions could be built following the instruction listed in the previous section and changing occurrences of `Slicer-master` into `Slicer-411`.

Build slicer extensions associated with Slicer trunk

Considering the following assumption:

  1. Slicer trunk has been checkout into `/path/to/Slicer-master` and built into `/path/to/Slicer-master-SuperBuild-Release`

The associated extensions could be built doing:

$ git clone git://github.com/Slicer/ExtensionsIndex.git SlicerExtensionsIndex-master
$ mkdir SlicerExtensionsIndex-master-build
$ cd SlicerExtensionsIndex-master-build
$ cmake -DSlicer_DIR:PATH=/path/to/Slicer-master-SuperBuild-Release/Slicer-build \
 -DSlicer_EXTENSION_DESCRIPTION_DIR:PATH=/path/to/SlicerExtensionsIndex-master \
 -DCMAKE_BUILD_TYPE:STRING=Release \
 /path/to/Slicer-master/Extensions/CMake
$ make

Build slicer extensions associated with Slicer 4.1.1

Considering the following assumption:

  1. Slicer trunk has been checkout into `/path/to/Slicer-411` and built into `/path/to/Slicer-411-SuperBuild-Release`

The associated extensions could be built doing:

$ git clone git://github.com/Slicer/ExtensionsIndex.git -b 4.1.1 SlicerExtensionsIndex-411
$ mkdir SlicerExtensionsIndex-411-build
$ cd SlicerExtensionsIndex-411-build
$ cmake -DSlicer_DIR:PATH=/path/to/Slicer-411-SuperBuild-Release/Slicer-build \
 -DSlicer_EXTENSION_DESCRIPTION_DIR:PATH=/path/to/SlicerExtensionsIndex-411 \
 -DCMAKE_BUILD_TYPE:STRING=Release \
 /path/to/Slicer-411/Extensions/CMake
$ make


Dashboard driven build

Continuous and nightly extension dashboards are setup on the slicer factory machine maintained by Kitware folks.

Assuming you install your own extensions server, you could also distribute your own set of extensions.

Remarks:

  • Setting both nightly and continuous builds of the extensions is a key component of the Slicer continuous integration process.
  • The images reported below illustrate the dashboard submissions associated with the continuous and nightly builds of Slicer extensions associated to both Slicer trunk and Slicer 4.1.1.