Skip to content

Instantly share code, notes, and snippets.

@Kelvinrr
Created August 23, 2017 20:42
Show Gist options
  • Select an option

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

Select an option

Save Kelvinrr/879ad457ff1386d28a367d2c291fd11d 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_PREFIX_PATH
"$ENV{LIB_DIR}/lib"
"$ENV{LIB}"
/usgs/pkgs/local/v006/include/
/usgs/pkgs/local/v006/bin/
/usgs/pkgs/local/v006/lib/
/usr/lib
/usr/local/lib
/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()
# 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)
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)
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)
# # 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()
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