Created
August 24, 2017 20:18
-
-
Save Kelvinrr/b76809de30debfdde7274795602565e7 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #=============================================================================== | |
| # 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