Skip to content

Instantly share code, notes, and snippets.

@Kelvinrr
Created August 24, 2017 20:18
Show Gist options
  • Select an option

  • Save Kelvinrr/b76809de30debfdde7274795602565e7 to your computer and use it in GitHub Desktop.

Select an option

Save Kelvinrr/b76809de30debfdde7274795602565e7 to your computer and use it in GitHub Desktop.
#===============================================================================
# High level script to handle all required 3rd party dependencies
# - All of them are expected to be in the 3rdParty folder, this script does not
# go looking for them if they are not?
#===============================================================================
# Specify top level directories
set(thirdPartyDir "/usgs/pkgs/local/v006")
set(INCLUDE_DIR "${thirdPartyDir}/include")
set(LIB_DIR "${thirdPartyDir}/lib")
set(PLUGIN_DIR "${thirdPartyDir}/plugins")
set(BIN_DIR "${thirdPartyDir}/bin")
list(APPEND CMAKE_INCLUDE_PATH
/usgs/pkgs/local/v006/include/
/usgs/pkgs/local/v006/bin/
/usgs/pkgs/local/v006/lib/
/usgs/pkgs/local/v006/src/
/usgs/pkgs/local/v006/include/google-protobuf/protobuf2.6.1/
/usgs/pkgs/local/v006/include/xercesc/xercesc-3.1.2/
/usgs/pkgs/local/v006/include/tiff/tiff-4.0.5/
)
set(CMAKE_PREFIX_PATH
/usgs/pkgs/local/v006/include/
/usgs/pkgs/local/v006/bin/
/usgs/pkgs/local/v006/lib/
/usgs/pkgs/local/v006/libexec/
/usr/lib
/usr/local/lib
/usr/lib64/
/opt/usgs/v006/ports/Library/Frameworks/
/opt/usgs/v006/ports/libexec/
/opt/usgs/v006/ports/bin/
/opt/usgs/v006/ports/lib/
/opt/usgs/v006/ports/include/
/opt/usgs/v006/ports/libexec/qt5
/opt/usgs/v006/ports/libexec/qt5/bin/
/opt/usgs/v006/3rdparty/bin
/opt/usgs/v006/3rdparty/include/
/opt/usgs/v006/3rdparty/lib/
/opt/usgs/v006/proprietary/
/opt/usgs/v006/proprietary/include/
/opt/usgs/v006/proprietary/lib/
)
# The common method of putting a version in a library name differs
# between OSX and Linux.
if(APPLE)
set(end "*.dylib")
else()
set(end ".so*")
endif()
set(JP2KFLAG 1)
# Add thirdPartyCppFlags
set(thirdPartyCppFlags ${thirdPartyCppFlags} -DGMM_USES_SUPERLU)
set(thirdPartyCppFlags ${thirdPartyCppFlags} "-DENABLEJP2K=${JP2KFLAG}")
# Paths to required executables
find_program(XALAN Xalan REQUIRED)
find_program(LATEX latex)
find_program(DOXYGEN doxygen REQUIRED)
find_program(UIC uic REQUIRED)
find_program(MOC moc REQUIRED)
find_program(RCC rcc REQUIRED)
find_program(PROTOC protoc REQUIRED)
message(STATUS "${CMAKE_PREFIX_PATH}")
include(FindProtobuf)
if(APPLE)
find_package(Qt5 COMPONENTS
Core
Concurrent
DBus
Gui
Multimedia
MultimediaWidgets
Network
OpenGL # Needed to install mesa-common-dev for this!
Positioning
PrintSupport
Qml
Quick
Script
ScriptTools
Sensors
Sql
Svg
Test
WebChannel
WebEngine
WebEngineWidgets
Widgets
Xml
XmlPatterns REQUIRED)
else() #oh god why
find_path(QT5_CORE_INCLUDE_DIR NAMES qchar.h PATH_SUFFIXES qt/qt5.6.0/QtCore/)
find_path(QT5_CONCURRENT_INCLUDE_DIR NAMES qtconcurrentmap.h PATH_SUFFIXES qt/qt5.6.0/QtConcurrent)
find_path(QT5_DBUS_INCLUDE_DIR NAMES qdbusmacros.h PATH_SUFFIXES qt/qt5.6.0/QtDBus)
find_path(QT5_GUI_INCLUDE_DIR NAMES qpainter.h PATH_SUFFIXES qt/qt5.6.0/QtGui)
find_path(QT5_MULTIMEDIA_INCLUDE_DIR NAMES qmediacontent.h PATH_SUFFIXES qt/qt5.6.0/QtMultimedia)
find_path(QT5_MULTIMEDIAWIDGETS_INCLUDE_DIR NAMES qvideowidget.h PATH_SUFFIXES qt/qt5.6.0/QtMultimediaWidgets)
find_path(QT5_NETWORK_INCLUDE_DIR NAMES qsslsocket.h PATH_SUFFIXES qt/qt5.6.0/QtNetwork)
find_path(QT5_OPENGL_INCLUDE_DIR NAMES qtopenglglobal.h PATH_SUFFIXES qt/qt5.6.0/QtOpenGL)
find_path(QT5_POSITIONING_INCLUDE_DIR NAMES qgeocoordinate.h PATH_SUFFIXES qt/qt5.6.0/QtPositioning)
find_path(QT5_PRINTSUPPORT_INCLUDE_DIR NAMES qprinter.h PATH_SUFFIXES qt/qt5.6.0/QtPrintSupport)
find_path(QT5_QML_INCLUDE_DIR NAMES qqmlinfo.h PATH_SUFFIXES qt/qt5.6.0/QtQml)
find_path(QT5_QUICK_INCLUDE_DIR NAMES qquickview.h PATH_SUFFIXES qt/qt5.6.0/QtQuick)
find_path(QT5_SCRIPT_INCLUDE_DIR NAMES qscriptengine.h PATH_SUFFIXES qt/qt5.6.0/QtScript)
find_path(QT5_SCRIPTTOOLS_INCLUDE_DIR NAMES qtscripttoolsversion.h PATH_SUFFIXES qt/qt5.6.0/QtScriptTools)
find_path(QT5_SENSORS_INCLUDE_DIR NAMES qgyroscope.h PATH_SUFFIXES qt/qt5.6.0/QtSensors)
find_path(QT5_SQL_INCLUDE_DIR NAMES qsql.h PATH_SUFFIXES qt/qt5.6.0/QtSql)
find_path(QT5_SVG_INCLUDE_DIR NAMES qsvgwidget.h PATH_SUFFIXES qt/qt5.6.0/QtSvg)
find_path(QT5_TEST_INCLUDE_DIR NAMES qtest.h PATH_SUFFIXES qt/qt5.6.0/QtTest)
find_path(QT5_WEBCHANNEL_INCLUDE_DIR NAMES qwebchannel.h PATH_SUFFIXES qt/qt5.6.0/QtWebChannel)
find_path(QT5_WEBENGINE_INCLUDE_DIR NAMES qtwebengineglobal.h PATH_SUFFIXES qt/qt5.6.0/QtWebEngine)
find_path(QT5_WEBENGINEWIDGETS_INCLUDE_DIR NAMES qwebenginescript.h PATH_SUFFIXES qt/qt5.6.0/QtWebEngineWidgets)
find_path(QT5_WIDGETS_INCLUDE_DIR NAMES qwidget.h PATH_SUFFIXES qt/qt5.6.0/QtWidgets)
find_path(QT5_XML_INCLUDE_DIR NAMES qxml.h PATH_SUFFIXES qt/qt5.6.0/QtXml)
find_path(QT5_XMLPATTERNS_INCLUDE_DIR NAMES qtxmlpatternsglobal.h PATH_SUFFIXES qt/qt5.6.0/QtXmlPatterns)
find_library(QT5_CORE_LIBRARY NAMES Qt5Core)
find_library(QT5_CONCURRENT_LIBRARY NAMES Qt5Concurrent)
find_library(QT5_DBUS_LIBRARY NAMES Qt5DBus)
find_library(QT5_GUI_LIBRARY NAMES Qt5Gui)
find_library(QT5_MULTIMEDIA_LIBRARY NAMES Qt5Multimedia)
find_library(QT5_MULTIMEDIAWIDGETS_LIBRARY NAMES Qt5MultimediaWidgets)
find_library(QT5_NETWORK_LIBRARY NAMES Qt5Network)
find_library(QT5_OPENGL_LIBRARY NAMES Qt5OpenGL)
find_library(QT5_POSITIONING_LIBRARY NAMES Qt5Positioning)
find_library(QT5_PRINTSUPPORT_LIBRARY NAMES Qt5PrintSupport)
find_library(QT5_QML_LIBRARY NAMES Qt5Qml)
find_library(QT5_QUICK_LIBRARY NAMES Qt5Quick)
find_library(QT5_SCRIPT_LIBRARY NAMES Qt5Script)
find_library(QT5_SCRIPTTOOLS_LIBRARY NAMES Qt5ScriptTools)
find_library(QT5_SENSORS_LIBRARY NAMES Qt5Sensors)
find_library(QT5_SQL_LIBRARY NAMES Qt5Sql)
find_library(QT5_SVG_LIBRARY NAMES Qt5Svg)
find_library(QT5_TEST_LIBRARY NAMES Qt5Test)
find_library(QT5_WEBCHANNEL_LIBRARY NAMES Qt5WebChannel)
find_library(QT5_WEBENGINE_LIBRARY NAMES Qt5WebEngine)
find_library(QT5_WEBENGINEWIDGETS_LIBRARY NAMES Qt5WebEngineWidgets)
find_library(QT5_WIDGETS_LIBRARY NAMES Qt5Widgets)
find_library(QT5_XML_LIBRARY NAMES Qt5Xml)
find_library(QT5_XMLPATTERNS_LIBRARY NAMES Qt5XmlPatterns)
endif(APPLE)
find_package(Qwt REQUIRED)
find_package(XercesC REQUIRED)
find_package(GeoTIFF REQUIRED)
find_package(TIFF REQUIRED)
find_package(CSPICE REQUIRED)
find_package(TNT REQUIRED)
find_package(Geos REQUIRED)
find_package(GSL REQUIRED)
find_package(Protobuf REQUIRED)
find_package(Boost REQUIRED)
find_package(X11 REQUIRED)
find_package(GSL REQUIRED)
find_package(GMM REQUIRED)
find_package(HDF5 REQUIRED)
find_package(SuperLu REQUIRED)
find_package(Protobuf REQUIRED)
find_package(Cholmod REQUIRED)
find_package(Embree REQUIRED)
find_package(PCL REQUIRED)
find_package(Eigen REQUIRED)
find_package(Bullet REQUIRED)
find_package(OpenCV REQUIRED)
find_package(NN REQUIRED)
# Only include Kakadu if it is available
if(${JP2KFLAG})
find_package(Kakadu)
endif(${JP2KFLAG})
get_cmake_property(_variableNames VARIABLES) # Get All VARIABLES
foreach (_variableName ${_variableNames})
if (_variableName MATCHES ".+_INCLUDE_DIR$")
list(APPEND ALLINCDIRS "${${_variableName}}")
elseif (_variableName MATCHES ".+_INCLUDE_PATH$")
list(APPEND ALLINCDIRS "${${_variableName}}")
endif(_variableName MATCHES ".+_INCLUDE_DIR$")
endforeach()
list(APPEND ALLINCDIRS "/opt/usgs/v006/ports/include/" "/opt/usgs/v006/3rdParty/include/")
foreach (_variableName ${_variableNames})
if (_variableName MATCHES "^CMAKE+")
elseif (_variableName MATCHES ".+_LIB$")
list(APPEND ALLLIBS "${${_variableName}}")
elseif (_variableName MATCHES ".+_LIBRARY$")
list(APPEND ALLLIBS "${${_variableName}}")
elseif (_variableName MATCHES ".+_LIBRARIES$")
list(APPEND ALLLIBS "${${_variableName}}")
endif(_variableName MATCHES "^CMAKE+")
endforeach()
foreach (_variableName ${_variableNames})
get_filename_component(LIBDIR "${${_variableName}}" DIRECTORY)
if (_variableName MATCHES "^CMAKE+")
elseif (_variableName MATCHES ".+_LIB$")
list(APPEND ALLLIBDIRS "${LIBDIR}")
elseif (_variableName MATCHES ".+_LIBRARY$")
list(APPEND ALLLIBDIRS "${LIBDIR}")
elseif (_variableName MATCHES ".+_LIBRARIES$")
list(APPEND ALLLIBDIRS "${LIBDIR}")
endif(_variableName MATCHES "^CMAKE+")
endforeach()
message(STATUS "ALL LIBS DIRS: ${ALLLIBDIRS}")
message(STATUS "ALL LIBS: ${ALLLIBS}")
message(STATUS "ALL INCS: ${ALLINCDIRS}")
#---------------------------------------------------------------------------
# Define the third party distribution libraries (patterns)
#---------------------------------------------------------------------------
# On OSX we need to include a LOT of extra libraries!
set(EXTRA_DYNAMIC_LIBS)
if(APPLE)
set(extras
# QT dependencies
libpcre16*.dylib
libgthread-*.dylib
libpcre.*dylib
libharfbuzz*.dylib
libgraphite2.*dylib
libleveldb*.dylib*
libsnappy.*dylib
libwebp*.dylib
libdbus*.dylib
libiconv*.dylib
liblzma*.dylib
libz*.dylib
libssl*.dylib
libcrypto*.dylib
libpng*.dylib
libjpeg.*dylib
libmng.*dylib
liblcms2.*dylib
libsqlite3.*dylib
postgresql*/libpq.*dylib
mysql56/mysql/libmysqlclient*.dylib
libiodbc*.dylib
# OpenCV dependancies
libtbb*.dylib
libjasper*.dylib
libImath*.dylib
libIlmImf*.dylib
libIex*.dylib
libHalf*.dylib
libIlmThread*.dylib
libswscale*.dylib
# Secondary requirements to all OpenCV dependancies
libSDL-1*.dylib
libnettle*.dylib
libhogweed*.dylib
libgmp*.dylib
libxvidcore*.dylib
libx264*.dylib
libvorbisenc*.dylib
libvorbis*.dylib
libogg*.dylib
libtheoraenc*.dylib
libtheoradec*.dylib
libspeex*.dylib
libschroedinger-1*.dylib
libopus*.dylib
libopenjpeg*.dylib
libmp3lame*.dylib
libmodplug*.dylib
libfreetype*.dylib
libbluray*.dylib
libass*.dylib
libgnutls*.dylib
libbz2*.dylib
libXrandr*.dylib
libXext*.dylib
libXrender*.dylib
libX11*.dylib
libxcb*.dylib
libXau*.dylib
libXdmcp*.dylib
liborc-0*.dylib
libxml2*.dylib
libfribidi*.dylib
libfontconfig*.dylib
libexpat*.dylib
libintl*.dylib
libglib-*.dylib
libp11-kit*.dylib
libffi*.dylib
# OpenCV3 dependencies
libavresample*.dylib
libxcb-shm*.dylib
libsoxr*.dylib
libopenjp2*.dylib
libOpenNI*.dylib
libswresample*.dylib
libidn*.dylib
libtasn1*.dylib
libusb*.dylib
# libxerces-c depends on these libraries
libicui18n*.dylib
libicuuc*.dylib
libicudata*.dylib
# libgeotiff depends on these libraries
libproj*.dylib)
else() # Linux
set(extras libtbb.so*)
endif()
set(EXTRALIBDIR ${LIB_DIR})
foreach(lib ${extras})
set(EXTRA_DYNAMIC_LIBS ${EXTRA_DYNAMIC_LIBS} ${EXTRALIBDIR}/${lib})
endforeach()
message("EXTRA_DYNAMIC_LIBS = ${EXTRA_DYNAMIC_LIBS}")
# Libraries
set(THIRDPARTYLIBS)
set(RAW_DYNAMIC_LIBS ${QT_DYNAMIC_LIBS}
${QWT_DYNAMIC_LIBS}
${XERCES_DYNAMIC_LIBS}
${GEOTIFF_DYNAMIC_LIBS}
${HDF5_DYNAMIC_LIBS}
${TIFF_DYNAMIC_LIBS}
${NAIF_DYNAMIC_LIBS}
${GEOS_DYNAMIC_LIBS}
${GSL_DYNAMIC_LIBS}
${SUPERLU_DYNAMIC_LIBS}
${PROTOBUF_DYNAMIC_LIBS}
${KAKADU_DYNAMIC_LIBS} # Empty if not available
${CHOLMOD_DYNAMIC_LIBS}
${OPENCV_DYNAMIC_LIBS}
${EXTRA_DYNAMIC_LIBS})
message("THIRDPARTYLIBS = ${RAW_DYNAMIC_LIBS}")
# For each item in this list, expand the wildcard to get the actual library list.
foreach(lib ${RAW_DYNAMIC_LIBS})
string(FIND "${lib}" "*" position)
if(${position} EQUAL -1)
# No wildcard, just add it.
set(THIRDPARTYLIBS ${THIRDPARTYLIBS} ${lib})
else()
# Expand wildcard, then add.
file(GLOB expandedLibs ${lib})
set(THIRDPARTYLIBS ${THIRDPARTYLIBS} ${expandedLibs})
endif()
endforeach()
message("THIRDPARTYLIBS = ${THIRDPARTYLIBS}")
# Plugins
file(GLOB_RECURSE THIRDPARTYPLUGINS "${PLUGIN_DIR}/*${SO}")
file(GLOB THIRDPARTYPLUGINFOLDERS "${PLUGIN_DIR}/*")
message("third party libs = ${THIRDPARTYLIBS}")
message("third party plugins = ${THIRDPARTYPLUGINS}")
message("third party plugins folders = ${THIRDPARTYPLUGINFOLDERS}")
#---------------------------------------------------------------------------
# Consolidate information
#---------------------------------------------------------------------------
set(ALLLIBDIRS ${QTLIBDIR}
${QWTLIBDIR}
${XERCESLIBDIR}
${GEOTIFFLIBDIR}
${TIFFLIBDIR}
${NAIFLIBDIR}
${TNTLIBDIR}
${JAMALIBDIR}
${GEOSLIBDIR}
${GSLLIBDIR}
${GMMLIBDIR}
${PROTOBUFLIBDIR}
${BOOSTLIBDIR}
${CHOLMODLIBDIR}
${HDF5LIBDIR}
${SUPERLULIBDIR}
${GMMLIBDIR})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment