Commit 49413513 authored by Cory Quammen's avatar Cory Quammen
Browse files

Merge tag 'v5.5.0-RC1' into release

ParaView superbuild 5.5.0-RC1
parents 0b6202e7 dfc54b13
......@@ -10,7 +10,7 @@ macro (superbuild_setup_variables)
if (paraview_SOURCE_SELECTION STREQUAL "git")
# Assuming master; just use the latest version, but let the user set their
# own version in case it is actually a branch from some other version.
set(PARAVIEW_VERSION_DEFAULT "5.2.0"
set(PARAVIEW_VERSION_DEFAULT "5.5.0-RC1"
CACHE STRING "The default version of ParaView to use if it cannot be detected")
mark_as_advanced(PARAVIEW_VERSION_DEFAULT)
set(paraview_default_version "${PARAVIEW_VERSION_DEFAULT}")
......@@ -41,24 +41,39 @@ function (superbuild_find_projects var)
list(APPEND projects
boost
bzip2
cgns
cuda
embree
freetype
hdf5
ispc
lapack
netcdf
las
matplotlib
mpi
netcdf
numpy
ospray
paraviewweb
paraviewwebvisualizer
paraviewwebdivvy
paraviewweblightviz
paraviewwebvisualizer
png
python
pythonautobahn
pythonconstantly
pythoncycler
pythondateutil
pythonhyperlink
pythonincremental
pythonpygments
pythonpyparsing
pythonsetuptools
qt
qt4
pythonsix
pythontwisted
pythontxaio
pythonwslink
pythonzope
pythonzopeinterface
pytz
qt5
silo
szip
......@@ -86,9 +101,10 @@ function (superbuild_find_projects var)
boxlib
catalyst
egl
expat
fontconfig
glu
glproto
gperf
llvm
mesa
osmesa
......@@ -104,13 +120,13 @@ function (superbuild_find_projects var)
paraviewusersguide)
if (USE_NONFREE_COMPONENTS)
list(APPEND projects
acusolve)
# add non-free projects here.
endif ()
if (WIN32)
list(APPEND projects
ftjam
openvr
pywin32)
endif ()
......@@ -128,8 +144,15 @@ function (superbuild_sanity_check)
superbuild_qt_sanity_check()
# Sanity check: Cannot have paraview and have cxx11 disabled.
if (NOT cxx11_enabled AND paraview_enabled)
#While ParaView doesn't depend on cxx11 it needs to make sure that
#other projects that optionally depend on it are built with cxx11
message(SEND_ERROR "Cannot disable cxx11 when paraview is enabled.")
endif ()
# Sanity check: Cannot have EGL and Qt enabled at the same time.
if (egl_enabled AND (qt4_enabled OR qt5_enabled))
if (egl_enabled AND qt5_enabled)
message(SEND_ERROR "Cannot enable EGL and Qt at the same time.")
endif ()
......@@ -138,18 +161,13 @@ function (superbuild_sanity_check)
message(SEND_ERROR "Cannot enable EGL and Mesa at the same time.")
endif ()
# Sanity check: Must use OpenGL2 backed with EGL
if (egl_enabled AND NOT PARAVIEW_RENDERING_BACKEND STREQUAL "OpenGL2")
message(SEND_ERROR "Cannot enable EGL with the old VTK rendering backend at the same time.")
endif ()
# Sanity check: Cannot have EGL and OSMesa at the same time.
if (egl_enabled AND osmesa_enabled)
message(SEND_ERROR "Cannot enable EGL and OSMesa at the same time.")
endif ()
# Sanity check: Cannot have OSMesa and Qt enabled at the same time.
if (osmesa_enabled AND (qt4_enabled OR qt5_enabled))
# Sanity check: Cannot have OSMesa and Qt enabled at the same time if we're building ParaView.
if (osmesa_enabled AND qt5_enabled AND paraview_enabled)
message(SEND_ERROR "Cannot enable OSMesa and Qt at the same time.")
endif ()
......@@ -162,7 +180,6 @@ function (superbuild_sanity_check)
if (paraview_enabled AND catalyst_enabled)
message(SEND_ERROR "Cannot enable ParaView and Catalyst at the same time.")
endif ()
endfunction ()
function (superbuild_add_packaging)
......@@ -179,11 +196,6 @@ function (superbuild_add_packaging)
endif ()
list(GET generators 0 default_generator)
if (USE_SYSTEM_qt4)
list(APPEND superbuild_export_variables
QT_LIBRARY_DIR)
endif ()
if (USE_SYSTEM_qt5)
list(APPEND superbuild_export_variables
Qt5_DIR)
......@@ -259,10 +271,27 @@ function (superbuild_add_tests)
add_subdirectory("${CMAKE_SOURCE_DIR}/tests" "${CMAKE_BINARY_DIR}/tests")
endfunction ()
set(qt5_skip_modules
qtconnectivity
qtgamepad
qtlocation
qtmultimedia
qtsensors
qtserialport
qtwayland
qtwebchannel
qtwebengine
qtwebsockets)
set(boost_libraries
date_time
filesystem
iostreams
program_options
system
thread)
set(boost_extra_options
"-sNO_BZIP2=1")
list(APPEND superbuild_version_files
"${CMAKE_CURRENT_LIST_DIR}/versions.cmake")
......@@ -274,10 +303,17 @@ list(APPEND superbuild_project_roots
# set the default arguments used for "git clone"
set(_git_clone_arguments_default --progress)
# set the default for cxx11 to be enabled for this project
set(_superbuild_default_cxx11 ON)
if (NOT EXISTS "${CMAKE_CURRENT_LIST_DIR}/superbuild/CMakeLists.txt")
message(FATAL_ERROR "It appears as though the superbuild infrastructure "
"is missing; did you forget to do `git submodule init` "
"and `git submodule update`?")
endif ()
if(BUILD_SHARED_LIBS AND CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
string(APPEND superbuild_ld_flags "-shared-intel")
endif()
add_subdirectory(superbuild)
......@@ -8,6 +8,6 @@ set(CTEST_PROJECT_NAME "ParaView")
set(CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
set(CTEST_DROP_METHOD "http")
set(CTEST_DROP_SITE "www.cdash.org")
set(CTEST_DROP_LOCATION "/CDash/submit.php?project=ParaView")
set(CTEST_DROP_SITE "open.cdash.org")
set(CTEST_DROP_LOCATION "/submit.php?project=ParaView")
set(CTEST_DROP_SITE_CDASH TRUE)
......@@ -31,7 +31,7 @@ generators (Xcode and Visual Studio) are not supported.
The superbuild project uses the same versioning scheme as ParaView,
and gets tagged for every release of ParaView. For example, to build
ParaView version 5.2.0, checkout the `v5.2.0` tag of ParaView and
ParaView version 5.4.1, checkout the `v5.4.1` tag of ParaView and
superbuild.
Currently available tags are shown
......@@ -41,13 +41,13 @@ To checkout a specific tag from the superbuild git repository:
$ cd paraview-superbuild
$ git fetch origin # ensure you have the latest state from the main repo
$ git checkout v5.2.0 # replace `v5.2.0` with tag name of your choice
$ git checkout v5.4.1 # replace `v5.4.1` with tag name of your choice
$ git submodule update
At this point, your superbuild has all of the *rules* that were used
when building the selected version of ParaView. Also, note that it's
possible to build a version of ParaView using a different superbuild
version. For example, you could use superbuild `v5.2.0`, to build the
version. For example, you could use superbuild `v5.4.1`, to build the
latest master (i.e., development) version of ParaView, or a custom
branch. This is done by first checking out the superbuild for the
appropriate version and then setting the CMake variables that affect
......@@ -59,8 +59,8 @@ control how superbuild finds its source packages:
pointing to the ParaView git repository you want to clone (by default it is
set to the offical ParaView repository) and then set the `paraview_GIT_TAG`
to be a specific tagname or branch available for the selected git
repository. Use `master` for latest development code, `v5.2.0` for the
5.2.0 release, `release` for latest stable release, or a specific ParaView
repository. Use `master` for latest development code, `v5.4.1` for the
5.4.1 release, `release` for latest stable release, or a specific ParaView
commit SHA. In this setup, when building the superbuild, it will clone and
checkout the appropriate revision from the ParaView git repository automatically.
2. Instead of letting superbuild do the cloning and updating of the ParaView
......@@ -69,7 +69,7 @@ control how superbuild finds its source packages:
set `paraview_SOURCE_DIR` to point to a custom ParaView source tree. See 'offline
builds' below for instructions to download needed dependency packages.
3. Another option is to use a source tarball of a ParaView release. For that,
set `paraview_SOURCE_SELECTION` to the version to build such as `5.2.0`.
set `paraview_SOURCE_SELECTION` to the version to build such as `5.4.1`.
The superbuild offers the lastest stable release as well as release
candidate in preparation for the release. This is the best way to build a
released version of ParaView.
......@@ -104,11 +104,10 @@ The `paraviewgettingstartedguide`, `paraviewtutorial`, `paraviewtutorialdata`,
and `paraviewusersguide` packages add documentation to the package.
ParaView supports multiple rendering engines including `egl`, `mesa`,
`osmesa`, and `qt4`. All of these are incompatible with each other. In
addition, the `egl` renderer requires the `OpenGL2` rendering backend. If none
of these are chosen, a UI-less ParaView will be built (basically just
`pvpython`). `qt5` is also available, but is not known to be ready. On Windows
and macOS, only the `qt` packages are available.
`osmesa`, and `qt5`. All of these are incompatible with each other. If none of
these are chosen, a UI-less ParaView will be built (basically just
`pvpython`). On Windows and macOS, only the `qt5` rendering engine is
available.
The `python` package is available to enable Python support in the package. In
addition, the `matplotlib` and `numpy` packages are available.
......@@ -118,7 +117,7 @@ The following packages enable other features within ParaView:
* `adios`: Enable readers and writers for visualization data in the ADIOS
file format.
* `boxlib`: Enable reading the boxlib3D file format.
* `cgns`: Enable reading the cgns file format.
* `las`: Enable reading the LAS file format
* `cosmotools`: Enables Cosmo file format readers and related filters and
algorithms.
* `ffmpeg`: Video encoding library for macOS and Linux.
......@@ -229,15 +228,15 @@ time.
* `ENABLE_xxx` (generally, default `OFF`): If selected, the `xxx` project
will be built within the superbuild. See above for descriptions of the
various projects. `ENABLE_` flags are not shown for projects which must be
enabled due to a project depending on it (e.g., `qt4` requires `png`, so
enabling `qt4` will hide the `ENABLE_png` option).
enabled due to a project depending on it (e.g., `visitbridge` requires
`boost`, so enabling `visitbridge` will hide the `ENABLE_boost` option).
* `USE_SYSTEM_xxx` (default `OFF`): If selected, the `xxx` project from the
build environment is used instead of building it within the superbuild.
Not all projects support system copies (the flag is not available if so).
The following flags affect ParaView directly:
* `paraview_SOURCE_SELECTION` (default `5.2.0`): The source to use for
* `paraview_SOURCE_SELECTION` (default `5.4.1`): The source to use for
ParaView itself. The version numbers use the source tarballs from the
website for the release. The `source` selection uses the
`paraview_SOURCE_DIR` variable to look at a checked out ParaView source
......@@ -245,11 +244,14 @@ The following flags affect ParaView directly:
checkout of ParaView from git repository controlled by the
`paraview_GIT_REPOSITORY` and `paraview_GIT_TAG` variables. By default, the
`master` branch of the main repository is used.
**Note**: When using the `source` selection, incremental builds to the
superbuild may not rebuild ParaView even if the source tree has changed.
This is because the superbuild is "blind" to the source tree other than
its existence.
* `CMAKE_BUILD_TYPE_paraview` (default is the same as the superbuild):
ParaView may be built with a different build type (e.g., `Release` vs.
`RelWithDebInfo`) as the rest of the superbuild using this variable.
* `PARAVIEW_RENDERING_BACKEND` (default `OpenGL2`): The rendering backend to
use with ParaView.
* `PARAVIEW_BUILD_WEB_DOCUMENTATION` (default `OFF`): Have ParaView build
its HTML documentation.
* `mesa_USE_SWR` (default `ON`): If `mesa` is enabled, this enables
......
#!/usr/bin/python
import urllib2, sys, os, zipfile, subprocess, json, shutil, argparse, re, hashlib
# ===================================================================
# ParaView files / URLs
# ===================================================================
version = { "release" : { "url": "http://paraview.org/files/v4.1/",
"application": { "osx" : "ParaView-4.1.0-Darwin-64bit-Lion-Python27.dmg",
"linux32": "ParaView-4.1.0-Linux-32bit-glibc-2.3.6.tar.gz",
"linux64": "ParaView-4.1.0-Linux-64bit-glibc-2.3.6.tar.gz",
"win32" : "ParaView-4.1.0-Windows-32bit.zip",
"win64" : "ParaView-4.1.0-Windows-64bit.zip" },
"documentation": "http://paraview.org/files/v4.1/ParaView-API-docs-v4.1.zip"},
"nightly" : { "url": "http://paraview.org/files/nightly/",
"application": { "osx" : "ParaView-Darwin-64bit-Lion-Python27-NIGHTLY.dmg",
"linux32": "ParaView-Linux-32bit-glibc-2.3.6-NIGHTLY.tar.gz",
"linux64": "ParaView-Linux-64bit-glibc-2.3.6-NIGHTLY.tar.gz",
"win32" : "ParaView-Windows-32bit-NIGHTLY.zip",
"win64" : "ParaView-Windows-64bit-NIGHTLY.zip" },
"documentation": "http://www.paraview.org/files/nightly/ParaView-doc.tar.gz" } }
data = "http://paraview.org/files/v4.1/ParaViewData-v4.1.0.zip"
# ===================================================================
# Download helper
# ===================================================================
def download(url, file_name):
u = urllib2.urlopen(url)
f = open(file_name, 'wb')
meta = u.info()
file_size = int(meta.getheaders("Content-Length")[0])
print "\nDownloading: %s Bytes: %s" % (file_name, file_size)
file_size_dl = 0
block_sz = 8192
while True:
buffer = u.read(block_sz)
if not buffer:
break
file_size_dl += len(buffer)
f.write(buffer)
status = r"%10d [%3.2f%%]" % (file_size_dl, file_size_dl * 100. / file_size)
status = status + chr(8)*(len(status)+1)
print status,
f.close()
# ===================================================================
def unzip(file, destination):
zfile = zipfile.ZipFile(file)
for name in zfile.namelist():
fullPath = os.path.join(destination, name)
if name.endswith('/'):
os.makedirs(fullPath)
else:
if not os.path.exists(os.path.dirname(fullPath)):
os.makedirs(os.path.dirname(fullPath))
fd = open(fullPath,"w")
fd.write(zfile.read(name))
fd.close()
status = r" Unzip "
if len(name) > 70:
status += "[..]" + name[-70:]
else:
status += name
status += " "*(80-len(status))
status = status + chr(8)*(len(status)+1)
print status,
print
# ===================================================================
def simpleDirectoryHash(rootPath):
# Use the tar program to create an archive without writing
# one to disk, pipe it to the md5sum program. The -P option
# asks tar not to remove leading slashes, which results in
# less output to have to parse.
cmd = "tar -cP " + rootPath + " | md5sum"
output = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
regex = re.compile('^([^\s]+)\s+')
m = regex.search(output)
returnVal = 'ERROR getting md5sum on directory'
if m:
returnVal = m.group(1)
return returnVal
# ===================================================================
def getCommandLineOptions():
p = argparse.ArgumentParser()
p.add_argument("-m",
"--mode",
type=str,
default="interactive",
help="Either 'interactive' or 'arguments', interactive prompts for input")
p.add_argument("-v",
"--installversion",
type=str,
default="release",
help="Either 'release' or 'nightly', no data or docs installed with nightly")
p.add_argument("-p",
"--installpath",
type=str,
default=os.getcwd(),
help="Full path to directory which should contain installation")
p.add_argument("-t",
"--apptype",
type=str,
default="linux64",
help="One of 'osx', 'linux32', 'linux64', 'win32', or 'win64'")
p.add_argument("-n",
"--noconfigure",
default=True,
help="If provided, this option specifies not to configure local instace",
action='store_false')
p.add_argument("-s",
"--storehashpath",
default="",
help="Full path with file name, where you wish to store json file containing binary hash")
return p.parse_args()
# ===================================================================
# Get data locally
# ===================================================================
def mainProgram():
print
args = getCommandLineOptions()
install_path = args.installpath
mode = args.mode
app_type = args.apptype
do_config = args.noconfigure
v = version[args.installversion]
url = v['url']
application = v['application']
documentation = v['documentation']
pvdataname = data[data.rfind('/')+1:]
pvdocname = documentation[documentation.rfind('/')+1:]
if mode == 'interactive':
q = ''
while q != 'y' and q != 'yes':
if q == 'n' or q == 'no':
install_path = raw_input("Enter ParaViewWeb install path: ")
if q == 'q' or q == 'quit':
sys.exit("We did nothing")
q = raw_input("Is ParaViewWeb install path correct? (%s) yes/no/quit: " % install_path)
print "\nInstalling ParaViewWeb inside:", install_path
if not os.path.exists(install_path):
os.makedirs(install_path)
download_path = os.path.join(install_path, "download")
if not os.path.exists(download_path):
os.makedirs(download_path)
# Download data + doc
data_file = os.path.join(download_path, pvdataname)
documentation_file = os.path.join(download_path, pvdocname)
if not os.path.exists(data_file):
download(data, data_file)
if not os.path.exists(documentation_file):
download(documentation, documentation_file)
if mode == 'interactive':
app_type = raw_input("\nWhich system? [osx, linux32, linux64, win32, win64, all]: ")
# Download only for all OS for future setup
if app_type == 'all':
print "\nThis will only download all OS files for future install."
for app_type in application:
app_file = os.path.join(download_path, application[app_type])
if not os.path.exists(app_file):
download(url + application[app_type], app_file)
sys.exit("Downloading done")
else:
# Check files and download them if needed
app_file = os.path.join(download_path, application[app_type])
if not os.path.exists(app_file):
download(url + application[app_type], app_file)
print
# ===================================================================
# Unpack data
# ===================================================================
if app_type == 'osx':
if not os.path.exists(os.path.join(install_path, 'paraview.app')):
print " => Unpack ParaView"
# Mount DMG
retvalue = subprocess.check_output(['hdiutil', 'attach', app_file])
list = retvalue.split()
dir_path = list[-1]
dmg_mount = list[-3]
# Copy application
os.system("cp -r %s/paraview.app %s/paraview.app" % (dir_path, install_path))
# Unmount dmg
subprocess.check_output(["hdiutil", "detach", dmg_mount])
elif not os.path.exists(os.path.join(install_path, 'paraview')):
print " => Unpack ParaView"
if app_type == 'linux32':
os.system("cd %s;tar xvzf %s" % (install_path, app_file))
os.rename(os.path.join(install_path, "ParaView-4.1.0-Linux-32bit"), os.path.join(install_path, "paraview"))
elif app_type == 'linux64':
os.system("cd %s;tar xvzf %s" % (install_path, app_file))
os.rename(os.path.join(install_path, "ParaView-4.2.0-Linux-64bit"), os.path.join(install_path, "paraview"))
else:
# Unzip app
unzip(app_file, install_path)
if app_type == 'win64':
os.rename(os.path.join(install_path, "ParaView-4.2.0-Windows-64bit"), os.path.join(install_path, "paraview"))
if app_type == 'win32':
os.rename(os.path.join(install_path, "ParaView-4.2.0-Windows-32bit"), os.path.join(install_path, "paraview"))
# ===================================================================
# Structure directories
# ===================================================================
# /data
if data != '' and not os.path.exists(os.path.join(install_path, 'data')):
print " => Unpack data"
unzip(data_file, install_path)
src = os.path.join(install_path, pvdataname[:-6], "Data")
dst = os.path.join(install_path, 'data')
os.rename(src, dst)
shutil.rmtree(os.path.join(install_path, pvdataname[:-6]))
# /www
if documentation != '' and not os.path.exists(os.path.join(install_path, 'www')):
print " => Unpack Web"
if documentation_file.endswith(".zip"):
unzip(documentation_file, install_path)
else:
# FIXME: instead of unzipping, we need to uncompress/untar the
# doc file because for some reason it exists as a tar zip. Then
# the rest of this code relies on how unzip works, so we need to
# keep that working.
os.system("cd %s;tar xvzf %s" % (install_path, documentation_file))
matcher = re.compile('(.+)\.(tar\.gz|tgz)')
m = matcher.search(pvdocname)
newdirname = pvdocname
if m:
newdirname = m.group(1)
pvdocname = newdirname + 'xxxx'
os.system("cd %s; mv www %s" % (install_path, newdirname))
src = os.path.join(install_path, pvdocname[:-4], 'js-doc')
dst = os.path.join(install_path, 'www')
os.rename(src, dst)
src = os.path.join(install_path, pvdocname[:-4], 'lib')
dst = os.path.join(install_path, 'www/lib')
os.rename(src, dst)
src = os.path.join(install_path, pvdocname[:-4], 'ext')
dst = os.path.join(install_path, 'www/ext')
os.rename(src, dst)
src = os.path.join(install_path, pvdocname[:-4], 'apps')
dst = os.path.join(install_path, 'www/apps')
os.rename(src, dst)
print " => Clean web directory"
shutil.rmtree(os.path.join(install_path, pvdocname[:-4]))
if do_config == True:
# /bin
if not os.path.exists(os.path.join(install_path, 'bin')):
os.makedirs(os.path.join(install_path, 'bin'))
# /conf
if not os.path.exists(os.path.join(install_path, 'conf')):
os.makedirs(os.path.join(install_path, 'conf'))
# /logs
if not os.path.exists(os.path.join(install_path, 'logs')):
os.makedirs(os.path.join(install_path, 'logs'))
# ===================================================================
# Configure
# ===================================================================
if do_config == True:
print " => Configure local instance"
python_exec = ''
base_python_path = ''
if app_type == 'osx':
python_exec = os.path.join(install_path, 'paraview.app/Contents/bin/pvpython')
base_python_path = os.path.join(install_path, 'paraview.app/Contents/Python/')
elif app_type == 'linux32' or app_type == 'linux64':
python_exec = os.path.join(install_path, 'paraview/bin/pvpython')
base_python_path = os.path.join(install_path, 'paraview/lib/paraview-4.1/site-packages/')
elif app_type == 'win32' or app_type == 'win64':
python_exec = os.path.join(install_path, 'paraview/bin/pvpython.exe')
base_python_path = os.path.join(install_path, 'paraview/lib/paraview-4.1/site-packages/')
default_launcher_config = {
"sessionData" : {
"updir": "/Home"
},
"resources" : [ { "host" : "localhost", "port_range" : [9001, 9003] } ],
"properties" : {
"python_exec": python_exec,
"python_path": base_python_path,
"data": os.path.join(install_path, 'data'),
},
"configuration": {
"host": "localhost",
"port": 8080,
"endpoint": "paraview",
"content": os.path.join(install_path, 'www'),
"proxy_file": os.path.join(install_path, 'conf/proxy.conf'),
"sessionURL" : "ws://${host}:${port}/ws",
"timeout" : 15,
"log_dir" : os.path.join(install_path, 'logs'),
"upload_dir" : os.path.join(install_path, 'data'),
"fields" : ["file", "host", "port", "updir"]
},
"apps": {
"pipeline": {
"cmd": ["${python_exec}", "${python_path}/paraview/web/pv_web_visualizer.py", "--port", "${port}", "--data-dir", "${data}", "-f" ],
"ready_line" : "Starting factory"
},
"visualizer":