COMP: Support Slicer_USE_SYSTEM_* option. Fixes #1739

This commit implements four main changes:

  (1) it updates Slicer build system to support configuring Slicer passing
      Slicer_USE_SYSTEM_* CMake variables

  (2) it updates to a newer version of CTK able to understand CTK_USE_SYSTEM_*
      options. List of CTK contribution associated with this update are
      reported below.

  (3) it changes curl library from "slicerlibcurl/cmcurl/curl" v7.12.1
      to the more recent official CMake'ified curl v7.33.0. This has the
      benefit of making it easier to build against the corresponding
      system library.

  (4) It implements workaround allowing some CLIs to built on Debian-like
      distribution that is providing DCMTK 3.6.0.
      See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=637687
      EMSegment project has also been updated to implement a similar
      workaround.

The macro "SlicerMacroCheckExternalProjectDependency" allowing to
recursively traverse the external project dependency tree has been
updated.

The traversal is now done in two passes. The first pass traverses the
complete tree to set the value of Slicer_USE_SYSTEM_*.

The second pass invokes the "ExternalProject_Add" function and displays
informative messages. In addition to the usual "[OK]" and "[INCLUDED]"
suffixes, an additional text "(SYSTEM)" is displayed. It means the
corresponding libraries (and headers) installed on the system will be
used.

On Ubuntu 13.10, support for the following options have been
tested simultaneously:
  -DSlicer_USE_PYTHONQT_WITH_OPENSSL:BOOL=ON
  -DSlicer_USE_SYSTEM_python:BOOL=ON
  -DSlicer_USE_SYSTEM_DCMTK:BOOL=ON
  -DSlicer_USE_SYSTEM_LibArchive:BOOL=ON
  -DSlicer_USE_SYSTEM_curl:BOOL=ON
  -DSlicer_USE_SYSTEM_teem:BOOL=ON
  -DSlicer_USE_SYSTEM_OpenIGTLink:BOOL=ON
  -DSlicer_USE_SYSTEM_OpenSSL:BOOL=ON # Implicitly set because python depends
                                      # on OpenSSL.
  -DSlicer_BUILD_OpenIGTLinkIF:BOOL=OFF # Only openigtlink version1 are available
                                        # and code does NOT supports only v2.

To successfully build Slicer against system libraries, the corresponding
packages have been installed:
  sudo apt-get install libssl-dev \
    libdcmtk-dev \
    libarchive-dev \
    libpython2.7-dev \
    python-numpy \
    libcurl4-openssl-dev \
    libteem-dev \
    tk-dev \
    tcl-dev \
    itcl3-dev \
    libopenigtlink1-dev

While not tested, support for the following option has also been
implemented:
  -DSlicer_USE_SYSTEM_ITKv4:BOOL=ON
  -DSlicer_USE_SYSTEM_VTK:BOOL=ON

CTK updates:

$ git shortlog  91cdf9e0f...02ecc27d0

Jean-Christophe Fillion-Robin (39):
      Ensure CTK_INSTALL_QTPLUGIN_DIR is properly set
      Ensure "CMAKE_INSTALL_PREFIX" is properly passed to inner project.
      By default, do not install application headers
      Install CTK's *.cmake files
      Merge branch '65-packaging-support' into 403-relocatable-ctkconfig-usectk
      Set plugin install rules for target and include files
      Remove commented code and unused vars from CTKConfig / CTKGenerateCTKConfig
      Explicitly set default value for CTK_INSTALL_QTPLUGIN_DIR
      Remove explicit setting of CMake policies.
      Improve FindDCMTK.cmake documentation
      Add DCMTK 3.6.0 support to ctkDICOMUtil.cpp
      Ensure DCMTK libraries can be found on system without setting DCMTK_DIR
      FindDCMTK - Workaround bug in packaging of DCMTK 3.6.0 on Debian.
      Add support for install-able and relocatable package.
      Merge branch '382-fix-find-dcmtk-issue'
      Merge branch '403-relocatable-ctkconfig-usectk'
      Merge branch '405-support-dcmtk-360'
      Fix -Wunused-but-set-variable in transfer function tests
      Merge branch '209-fix-vtk-transfer-function-test-warnings'
      Fix linking of VTKCoreCppTest by adding a check for linker capabilities
      Merge branch 'fix-vtk-core-test-link-error'
      COMP: FindDCMTK - Exclude -D from DCMTK_DEFINITIONS for easier re-use
      Merge branch '382-fix-find-dcmtk-issue'
      Associate DCMTK_DEFINITIONS to CTKDICOMCore
      Merge branch '413-associated-dcmtk-definitions-to-ctkdicomcore'
      Merge pull request #410 from NifTK/409-widgets-on-ctkPopupWidget-do-not-get-keyboard-focus
      Add DCMTK 3.6.0 support to CTK application.
      Merge branch '405-support-dcmtk-360'
      Fix configuration of CTKConfig based on DCMTK_HAVE_CONFIG_H_OPTIONAL value
      Merge branch '413-associated-dcmtk-definitions-to-ctkdicomcore'
      Add convenience function "ctk_list_to_string"
      Automatically reformat list passed to "CTK" inner build.
      COMP: Add support for CTK_USE_SYSTEM_* options
      Merge branch '418-support-use-system-option'
      FindDCMTK - Do not explicitly set DCMTK_DEFINITIONS
      FindDCMTK - Clean white spaces
      Merge branch '382-fix-find-dcmtk-issue' into 413-associated-dcmtk-definitions-to-ctkdicomcore
      Associate CTKDICOMCore with DCMTK_DEFINITIONS in build and install tree
      Merge branch '413-associated-dcmtk-definitions-to-ctkdicomcore'

Miklos Espak (1):
      Active window flag transferred on RequestSoftwareInputPanel event

Steve Pieper (2):
      Put all tags for a given instance into a list for a single batch insert
      Merge pull request #415 from pieper/414-batch-insert-tags

See #1739

git-svn-id: http://svn.slicer.org/Slicer4/trunk@22724 3bd1e089-480b-0410-8dfb-8563597acbee
COMP: Fix build of curl project against OpenSSL

On unix system, configuring curl passing OPENSSL_LIBRARIES did NOT have
the intended effect. Indeed, the FindOpenSSL.cmake provided by CMake is
doing call like "find_library(OPENSSL_(CRYPTO|SSL)_LIBRARY ...)" ignoring
the value of OPENSSL_LIBRARIES. On MacOSX, this translated into a link
error related to "_ERR_remove_thread_state" symbol.

This commit updates curl external project so that the expected OpenSSL
libraries are found.

See #1739

From: Jean-Christophe Fillion-Robin <jchris.fillionr@kitware.com>

git-svn-id: http://svn.slicer.org/Slicer4/trunk@22725 3bd1e089-480b-0410-8dfb-8563597acbee
COMP: Consistently pass LibArchive parameters when configuring Slicer

This will ensure LibArchive is properly found.

See #1739

From: Jean-Christophe Fillion-Robin <jchris.fillionr@kitware.com>

git-svn-id: http://svn.slicer.org/Slicer4/trunk@22726 3bd1e089-480b-0410-8dfb-8563597acbee
COMP: Update OpenIGTLinkIF - Fixes #2431 and #3478

$ git shortlog 48384b24..b73e6a311
Andras Lasso (2):
      Fixed memory corruption issues that caused random hangs when loading a scene with an active OpenIGTLink connection
      Fixed crash when opening a scene containing IGTLConnectorNode

Junichi Tokuda (10):
      ENH: Pass the address of the new MRML node to event handlers, when the NewDeviceEvent event is invoked. For Slicer Bug
      ENH: Push outgoing messages when the connector node becomes active and OpenIGTLinkIF.pushOnConnect attribute is 1. See
      ENH: Update vtkMRMLIGTLConnectorNode::PushNode() to prevent other connector nodes from sending the pushed node.
      ENH: Add 'Push on Connect' checkbox in I/O configuration. Rename 'pushOnConnection' attribute to 'pushOnConnect' (value
      ENH: Hide 'Push on Connect' check buttons for incoming nodes.
      Merge pull request #16 from lassoan/master
      Merge pull request #17 from tokjun/3478-IGTLConnectorNode-NewDeviceEvent-improvement
      ENH: Fix vtkMRMLIGTLConnectorNode.cxx to merge 3501-send-all-outputs-on-connection branch.
      BUG: Call this->qvtkDisconnectAll() from qMRMLIGTLIOModel() destructor to address #2431 as suggested by Lchauvin.
      Merge pull request #19 from tokjun/2431-no-such-slot-error-in-qMRMLIGTLIOModel

From: Junichi Tokuda <tokuda@bwh.harvard.edu>

git-svn-id: http://svn.slicer.org/Slicer4/trunk@22727 3bd1e089-480b-0410-8dfb-8563597acbee
COMP: Fix MacOSX RemoteIO build error by building against system CURL

Trying to build against our own version of curl end up in a mixing
of headers causing a build error:

// ---------------
In file included from /Developer/SDKs/MacOSX10.6.sdk/usr/include/curl/curl.h:43,
                 from /Users/kitware/Dashboards/Continuous/Slicer4/Libs/RemoteIO/vtkHTTPHandler.h:8,
                 from /Users/kitware/Dashboards/Continuous/Slicer4/Libs/RemoteIO/vtkHTTPHandler.cxx:1:
/Users/kitware/Dashboards/Continuous/Slicer4-build-64bits-QT4.8.5-PythonQt-With-Tcl-CLI-Release-continuous/curl-build/include/curl/curlbuild.h:151: error: 'socklen_t' does not name a type
In file included from /Developer/SDKs/MacOSX10.6.sdk/usr/include/curl/curl.h:44,
                 from /Users/kitware/Dashboards/Continuous/Slicer4/Libs/RemoteIO/vtkHTTPHandler.h:8,
                 from /Users/kitware/Dashboards/Continuous/Slicer4/Libs/RemoteIO/vtkHTTPHandler.cxx:1:
/Developer/SDKs/MacOSX10.6.sdk/usr/include/curl/curlrules.h:174: error: 'curl_socklen_t' was not declared in this scope
/Developer/SDKs/MacOSX10.6.sdk/usr/include/curl/curlrules.h:184: error: 'curl_socklen_t' was not declared in this scope
// ---------------

While not providing a definite explanation regarding the root cause of
the problem, we circumvent it by building against the system version
of the library.

See #1739

git-svn-id: http://svn.slicer.org/Slicer4/trunk@22728 3bd1e089-480b-0410-8dfb-8563597acbee
COMP: Fix building of CTKDICOMCore on Visual Studio

$ git shortlog 91cdf9e0..46a1d66055
Jean-Christophe Fillion-Robin (2):
      Fix HAVE_DCMTK_LOG4CPLUS_LOGGER test on multi-configuration build system.
      Merge branch '421-fix-dcmtk-log4cplus-logger-try-compile-with-multi-config'

git-svn-id: http://svn.slicer.org/Slicer4/trunk@22729 3bd1e089-480b-0410-8dfb-8563597acbee
COMP: Fix usage of CURL_INCLUDE_DIRS CMake variable

Following commit r22724, cmcurl project has been removed
in favor of the official curl project. When doing this transition, the call
to "include(${SLICERLIBCURL_USE_FILE})" has been improperly change
info "include(${CURL_INCLUDE_DIRS})".

Since the CURL include directories are already included in [1] and [2],
this commit remove the incorrect call to "include(${CURL_INCLUDE_DIRS})".

[1] Libs/RemoteIO/CMakeLists.txt
[2] Modules/CLI/MIDASApplications/DownloadSlicerTutorials/CMakeLists.txt

git-svn-id: http://svn.slicer.org/Slicer4/trunk@22730 3bd1e089-480b-0410-8dfb-8563597acbee
COMP: External_curl - Properly set curl_DIR on multi-config system

The output directory is expected to be:

   <CURL_DIR>/lib/{Release, Debug, ..}

and not

   <CURL_DIR>/{Release, Debug, ..}/lib

git-svn-id: http://svn.slicer.org/Slicer4/trunk@22731 3bd1e089-480b-0410-8dfb-8563597acbee
COMP: Build curl as a static library

Following commit r22724  introducing the library "curl" (in place of "cmcurl"),
the library was build as shared.

This commit change the build of curl to be static to match how cmcurl
was also built.

Supporting a shared build would imply tweak to the launcher settings.

See #1739

git-svn-id: http://svn.slicer.org/Slicer4/trunk@22732 3bd1e089-480b-0410-8dfb-8563597acbee
COMP: External_curl - Explicitly pass -fPIC flag on x86_64 platform

This commit will fix the following link error:

/usr/bin/ld: /home/jchris/Projects/Slicer-SuperBuild-Debug-Qt485-new-buildsystem/curl-build/lib/libcurl.a(easy.c.o): relocation R_X86_64_32S against `malloc' can not be used when making a shared object; recompile with -fPIC
/home/jchris/Projects/Slicer-SuperBuild-Debug-Qt485-new-buildsystem/curl-build/lib/libcurl.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status

git-svn-id: http://svn.slicer.org/Slicer4/trunk@22733 3bd1e089-480b-0410-8dfb-8563597acbee
COMP: Explicitly link RemoteIO against OpenSSL

Given that since commit r22724  curl library is linked against OpenSSL
and that since commit r22732 it is statically built. This commit
explicitly link the shared library RemoteIO against OpenSSL
because the curl static library doesn't provide information how to
resolve the OpenSSL symbol.

git-svn-id: http://svn.slicer.org/Slicer4/trunk@22734 3bd1e089-480b-0410-8dfb-8563597acbee
COMP: External_curl - Build only http/https support to avoid link error

By default, curl will try to build all supported features. Since only
http/https protocol is needed, let's simply disable the other feature
to avoid extra dependency to library like "ldap", "idn" ...

See #1739

git-svn-id: http://svn.slicer.org/Slicer4/trunk@22735 3bd1e089-480b-0410-8dfb-8563597acbee
COMP: External_curl: Fix build issue + Build against patched 7.34.0 release

This commit install the project so that all needed headers are all
in the same folder.

It also change the version of curl to 7.34.0 with an additional patch
adding CURL_STATICLIB to curlbuild.h to fix build issue on windows
and unix system.

Finally, it reverts r22728 which was incorrectly addressing the build
error described in the corresponding commit message.

git-svn-id: http://svn.slicer.org/Slicer4/trunk@22739 3bd1e089-480b-0410-8dfb-8563597acbee
COMP: Optionally configure Slicer inner project with OpenSSL options.

This is needed because following commit r22734 RemoteIO library is
linked against OpenSSL.

git-svn-id: http://svn.slicer.org/Slicer4/trunk@22740 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Updating RSNA Quant tutorial for 2013

Rename to more generic test name so it's not tied to a year.
Use new data sets from Sonia
Add screen shot GUI elements and flags and method, capture screen shots at tutorial steps.
Tweaked all parts to match up to tutorial (first part was already tested
in the Vis tutorial, swapped it out for the Ruler)
Updated CMakeLists.txt so that this commit is independent of the Vis tutorial commit.

Issue #3507

git-svn-id: http://svn.slicer.org/Slicer4/trunk@22741 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: update RSNA Vis tutorial for 2013

Ported changes from 4.3.1:
Rename to more generic test name as updating the tutorial for RSNA 2013
Use new data sets from Sonia.
Add screen shot GUI elements and flags and method, capture screen shots at tutorial steps.
Added the volume rendering in part 1.
Tweaked all parts to match up to tutorial.

Updated test to work with new DICOM widget on the trunk.

Issue #3507



git-svn-id: http://svn.slicer.org/Slicer4/trunk@22742 3bd1e089-480b-0410-8dfb-8563597acbee
BUG: adding a test for closing the scene with volume rendering + cropping

Crashes on linux.

Issue #3513



git-svn-id: http://svn.slicer.org/Slicer4/trunk@22743 3bd1e089-480b-0410-8dfb-8563597acbee
COMP: Removed unused/unmaintained RemoteIO classes and FetchMI module logic

For future references, the corresponding code has been added to
the Slicer attic. See Slicer/Attic@53262c8

From discussion with Steve and Andras:

// --------------------
(1) Jc - Nov 26, 2013

I notice that the only reason we depend on curl is for existence
of RemoteIO library that has been "replaced" by SampleData
and DataStore.

I really like the concept of registering URI that could be
downloaded that is why we should keep the infrastructure in place.

That said, I was thinking to get remove the following classes:

vtkHIDHandler.h
vtkHIDTagTable.h
vtkSRBHandler.h
vtkXNATHandler.h
vtkXNDHandler.h
vtkXNDTagTable.h

Then, we could implement a Qt based  vtkHTTPHandler handler, that
way we could simply remove the curl dependency.

In the mean time, I would also remove the FetchMI logic which is
not maintained or used at that point.

Let me know what you think,

// --------------------
(2) Andras - Nov 26, 2013

It’s always a good idea to make the core smaller and simpler, so
I support the idea of getting rid of unused classes and unnecessary
dependencies.

We planned to use curl for uploading training results in a .zip
file to Moodle, but I guess we can add curl to our module then.

// --------------------
(3) Jc - Nov 26, 2013

Thanks for commenting.

If your module is a loadable or a scripted module, all "curl"
functionality can be provided by Qt. Would that work for you ?

// --------------------
(4) Andras - Nov 26, 2013

We would need quite complex curl functionalities for uploading data,
see the scripts below:

https://gist.github.com/Joshkunz/4516316

https://github.com/proyectoeduhub/moodle-cli/blob/master/moodle-file-upload-curl.sh

Would it be feasible to implement these?

// --------------------
(5) Jc - Nov 26, 2013

Good point. The plan would then be to:

  (1) remove dependency of Slicer core against curl

  (2) Only, build both the Curl library and the curl executable, keeping
 them in the package.

That way, it would provide great flexibility with minimum overhead.

// --------------------
(6) Steve - Nov 26, 2013

Sounds like an excellent plan.

Yes, I like the design of the remote IO support in MRML, but it's not
 being used and is great to simplify wherever possible.  FetchMI can
go away for now, with the hope that we'll reproduce and improve on
it in the future (someday).

git-svn-id: http://svn.slicer.org/Slicer4/trunk@22744 3bd1e089-480b-0410-8dfb-8563597acbee
COMP: Do not python wrap RemoteIO library.

git-svn-id: http://svn.slicer.org/Slicer4/trunk@22745 3bd1e089-480b-0410-8dfb-8563597acbee
COMP: Fix OpenSSL install rules

Commit r22724 updated the External_* project files to support
Slicer_USE_SYSTEM_* variables. For sake of consistency, it also
changed variable "EP_OpenSSL_LIBRARIES" into "OPENSSL_LIBRARIES".
Since not all variables have been updated, this commit updates
the remaining variables to fix the OpenSSL install rules.

git-svn-id: http://svn.slicer.org/Slicer4/trunk@22746 3bd1e089-480b-0410-8dfb-8563597acbee